Xcode 12 cocoapods间接框架依赖项丢失了吗?

时间:2020-09-22 13:34:28

标签: cocoapods xcode12

更新到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提取FrameworkA:

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提取FrameworkB:

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

此设置可使用Xcode 11编译。

2 个答案:

答案 0 :(得分:1)

这似乎是一个可以在Xcode 11中编译的“错误”。将依赖项添加到FrameworkB解决了该问题(请参阅podspec摘录FramworkB中更新问题的注释)

答案 1 :(得分:0)

第一种方法:为此,请导航至项目的“构建设置”,然后在“排除的体系结构”中添加任何值为arm64的iOS模拟器SDK

如果使用自定义XCConfig文件,则只需添加此行即可排除模拟器体系结构。

EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64

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

作为替代,您可以将此代码段添加到Podfile中。每次您运行pod install时,它都会写出必要的Build Settings

post_install do |installer|
  installer.pods_project.build_configurations.each do |config|
    config.build_settings[‘EXCLUDED_ARCHS[sdk=iphonesimulator*]’] = ‘arm64’
  end
end

请尝试让我知道是否有帮助