Xcode 12 cocoapods 间接框架依赖缺失?

Xcode 12 cocoapods indirect framework dependency missing?

更新到 Xcode 12 项目后将不再构建。

undefined symbols for architecture x86_64:
  "_OBJC_CLASS_$_DDLog", referenced from:
      objc-class-ref in Bouncer.o
ld: symbol(s) not found for architecture x86_64

DDLog 在 CocoaLumberjack 中定义。这是 FrameworkA 的依赖项,它是 FrameworkB(测试项目)的依赖项

Podspec 提取框架 A:

Pod::Spec.new do |s|
    [...]
  
  s.default_subspec = 'Core'
  
  s.subspec 'Core' do |co|
      co.source_files = 'FrameworkA_Objc_DependencyIssue/Classes/**/*'
      co.dependency 'CocoaLumberjack', '~> 3.1'
  end
end

Podspec 提取框架 B:

Pod::Spec.new do |s|
  [...]

  s.source_files = 'FrameworkB_Objc_DependencyIssue/Classes/**/*'
  s.dependency 'FrameworkA_Objc_DependencyIssue/Core', '~> 0.1.2'
#  s.dependency 'CocoaLumberjack' # Adding direkt dependency fixes problem!
end

此设置使用 Xcode11.

进行编译

这似乎是一个“错误”,它会在 Xcode 11 中编译。将依赖项添加到 FrameworkB 解决了这个问题(请参阅更新问题的 podspec extract FramworkB 中的评论)

第一种方法:为此,导航到项目的构建设置并在排除的架构中添加值为 arm64 的任何 iOS 模拟器 SDK

如果您使用的是自定义 XCConfig 文件,您只需添加此行即可排除模拟器架构。

EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64

第二种方式: 您可以在 Pod 项目的 Build Settings 中手动添加 Excluded Architecture,但是当您使用 pod install 时它会被覆盖。

您可以将此片段添加到您的 Podfile 中。每次 运行 pod install

时,它都会写入必要的构建设置
post_install do |installer|
  installer.pods_project.build_configurations.each do |config|
    config.build_settings[‘EXCLUDED_ARCHS[sdk=iphonesimulator*]’] = ‘arm64’
  end
end

如果有帮助,请尝试告诉我