Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Can';我找不到用我的主要应用程序目标构建自己的框架目标的正确方法_Ios_Swift_Xcode_Cocoapods - Fatal编程技术网

Ios Can';我找不到用我的主要应用程序目标构建自己的框架目标的正确方法

Ios Can';我找不到用我的主要应用程序目标构建自己的框架目标的正确方法,ios,swift,xcode,cocoapods,Ios,Swift,Xcode,Cocoapods,我决定将我的主要项目分成两部分,以便在iOS小部件中重用代码 因此,我在我的xcworkspace(cocoa touch框架)中创建了一个新的目标文件。 这两个目标都有一些共同的pod依赖关系,我无法找到正确的构建方法 第一次尝试: 在podfile中,我为两个目标指定了所需的pod,但在构建时,我有多个错误 类Foo在MyApp和MyFramework中都实现。将使用其中一个。哪一个是未定义的 第二次尝试: 然后,我尝试将框架目标放在主应用程序目标中(就像我们通常对测试目标所做的那样) 但

我决定将我的主要项目分成两部分,以便在iOS小部件中重用代码

因此,我在我的xcworkspace(cocoa touch框架)中创建了一个新的目标文件。 这两个目标都有一些共同的pod依赖关系,我无法找到正确的构建方法

第一次尝试:

在podfile中,我为两个目标指定了所需的pod,但在构建时,我有多个错误

类Foo在MyApp和MyFramework中都实现。将使用其中一个。哪一个是未定义的

第二次尝试:

然后,我尝试将框架目标放在主应用程序目标中(就像我们通常对测试目标所做的那样)

但是框架将无法构建,因为它没有找到依赖项 例如:

没有这样的模块

注意


要构建我的主目标,我必须首先构建框架目标,否则它找不到“MyFramework”模块。当我构建主目标时,无法同时构建这两个应用程序?

我还有一个应用程序,我在一个单独的项目中创建了一个框架,但工作空间相同。我使用POD获取所有外部库,并通过将自己的框架添加到Xcode中的
嵌入式二进制文件中,将其嵌入到应用程序的目标中。我的播客文件如下所示:

workspace 'MyApp'

abstract_target 'BasePods' do
    use_frameworks!

    pod 'Alamofire', '~> 4.4'
    pod 'PromiseKit', '~> 4.1'
    project '../MyAppProject/MyApp/MyApp.xcodeproj'

    target 'MyApp'
    target 'MyAppDevelopment'
end

target 'MyAppCore' do
  use_frameworks!

    pod 'Alamofire', '~> 4.4'
    pod 'PromiseKit', '~> 4.1'
    project '../MyAppProject/MyAppCore/MyAppCore.xcodeproj'

      target 'MyAppCoreTests' do
    inherit! :search_paths
    end
end

我创建了两个单独的pod目标,一个用于应用程序,另一个用于框架。我将它们拆分,因为它们位于不同的目录中

明白了,我有静态库框架依赖项,iOS链接器不支持动态库的静态库依赖项

CF问题:

我已经通过Podfile解决了这个问题,在上一期中发布了一个解决方案:

post_install do |installer|
    sharedLibrary = installer.aggregate_targets.find { |aggregate_target| aggregate_target.name == 'Pods-SampleFramework' }
    installer.aggregate_targets.each do |aggregate_target|
        if aggregate_target.name == 'Pods-SampleApp'
            aggregate_target.xcconfigs.each do |config_name, config_file|
                sharedLibraryPodTargets = sharedLibrary.pod_targets
                aggregate_target.pod_targets.select { |pod_target| sharedLibraryPodTargets.include?(pod_target) }.each do |pod_target|
                    pod_target.specs.each do |spec|
                        frameworkPaths = unless spec.attributes_hash['ios'].nil? then spec.attributes_hash['ios']['vendored_frameworks'] else spec.attributes_hash['vendored_frameworks'] end || Set.new
                        frameworkNames = Array(frameworkPaths).map(&:to_s).map do |filename|
                            extension = File.extname filename
                            File.basename filename, extension
                        end
                        frameworkNames.each do |name|
                            puts "Removing #{name} from OTHER_LDFLAGS"
                            config_file.frameworks.delete(name)
                        end
                    end
                end
                xcconfig_path = aggregate_target.xcconfig_path(config_name)
                config_file.save_as(xcconfig_path)
            end
        end
    end
end

我的框架目标没有xcodeproj,当我创建两个pod目标时(参见:在我的帖子中的第一次尝试),xcode说存在重复(在两个目标中实现的类)似乎问题与Firebase有关,它是一个静态库,作为一个动态框架的依赖项,它做得不好
post_install do |installer|
    sharedLibrary = installer.aggregate_targets.find { |aggregate_target| aggregate_target.name == 'Pods-SampleFramework' }
    installer.aggregate_targets.each do |aggregate_target|
        if aggregate_target.name == 'Pods-SampleApp'
            aggregate_target.xcconfigs.each do |config_name, config_file|
                sharedLibraryPodTargets = sharedLibrary.pod_targets
                aggregate_target.pod_targets.select { |pod_target| sharedLibraryPodTargets.include?(pod_target) }.each do |pod_target|
                    pod_target.specs.each do |spec|
                        frameworkPaths = unless spec.attributes_hash['ios'].nil? then spec.attributes_hash['ios']['vendored_frameworks'] else spec.attributes_hash['vendored_frameworks'] end || Set.new
                        frameworkNames = Array(frameworkPaths).map(&:to_s).map do |filename|
                            extension = File.extname filename
                            File.basename filename, extension
                        end
                        frameworkNames.each do |name|
                            puts "Removing #{name} from OTHER_LDFLAGS"
                            config_file.frameworks.delete(name)
                        end
                    end
                end
                xcconfig_path = aggregate_target.xcconfig_path(config_name)
                config_file.save_as(xcconfig_path)
            end
        end
    end
end