Xcode 工作区 - 未从框架开发 pod 中找到导入

Xcode Workspace - Not finding imports from framework development pod

我设置了一个包含两个 Swift 项目的工作区:一个是我正在开发的框架,另一个是该框架的演示应用程序。

Podfile 看起来像这样:

platform :ios, '9.0'
workspace 'foo.xcworkspace'

target 'framework' do
    project 'framework.xcodeproj'
end

target :'demo' do
    project 'demo/demo.xcodeproj'
    pod 'framework', :path => 'framework.podspec'
end

.podspec 文件如下所示:

Pod::Spec.new do |s|
    s.name         = 'framework'
    s.authors      = { "foo author" }
    s.version      = '0.1.0'
    s.summary      = 'foo summary.'
    s.homepage     = 'foo homepage'
    s.platform     =  :ios, '9.0'
    s.license      = {
        :type => "Proprietary",
        :file => "LICENSE"
    }
    s.source       = {
        :git => 'https://url.to/foo.git',
        :tag => s.version.to_s
    }
    s.source_files = 'framework/framework/**/*.{swift,h,m}'
    s.requires_arc = true
    s.weak_framework = "XCTest"
    s.pod_target_xcconfig = {
        'FRAMEWORK_SEARCH_PATHS' => '$(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks"',
    }
end

在运行pod install之后,Xcode/AppCode仍然无法从框架项目中看到classes。因此,如果我在演示应用程序中将手动导入添加到 class 并尝试编译,它会失败:

Error:(13, 21) use of undeclared type 'FooClass'

我需要做什么才能让演示应用项目正确地看到框架项目生成的 pod 中的 classes?

尝试在演示目标上使用 inherit! :search_paths 这意味着他们没有自己的 pods 副本,但可以通过头文件看到它们的存在。

platform :ios, '9.0'
workspace 'foo.xcworkspace'

target :framework do
    project 'framework.xcodeproj'
end

target :demo do
    inherit! :search_paths
    project 'demo/demo.xcodeproj'
    pod 'framework', :path => 'framework.podspec'
end

未经测试但也许值得一试

如果您安装了 Cocoapod,请不要再使用带有 .xcodeproj 的文件打开您的项目,而是使用同一文件夹中新创建的 .workspace。

我终于解决了这个问题:

  1. 确保最小。必需 iOS 在 Podfile 中定义,例如:

    平台:ios, '10.0'

  2. 也将任何第三方 pods 添加到 podspec 文件中,例如:

    spec.dependency 'Alamofire', '~> 4.5' spec.dependency 'Serpent', '~> 1.0'

  3. 如果在没有 use_frameworks! 的情况下执行 pod install,它会搞砸一些事情(请参阅此答案:)。因此,在这期间我得到了这些无效的 Pod xconfigs,我不得不删除它们,然后进行干净的 pod 安装。

  4. 确保至少构建一次框架项目,然后演示源应该找到框架 pod 名称的导入!

  5. 确保所有 类 都正确添加到它们的目标中,尤其是测试目标中的 类 不应该被意外添加到应用程序目标中。

归根结底,使用过多种 IDE 和开发技术,Xcode 和 Cocoapods 只能概括为一个意外的巨型集群 f*** !