【问题标题】:Xcode 12 cocoapods indirect framework dependency missing?Xcode 12 cocoapods 间接框架依赖缺失?
【发布时间】:2020-09-22 13:34:28
【问题描述】:

更新到 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

此设置可以使用 Xcode 11 编译。

【问题讨论】:

标签: cocoapods xcode12


【解决方案1】:

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

【讨论】:

  • 感谢您的解决方案,这对我也有用,Xcode 12 w.r.t 对依赖项是否有任何特定更改?只是想更多地了解问题的原因。如果您有任何关于此修复的文档,请分享。
  • 我仍然面临同样的问题。由 Xcode 和 CocoaPods 更新。有什么建议么?谢谢!
【解决方案2】:

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

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

EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64

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

您可以将这个 sn-p 添加到您的 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

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

【讨论】:

  • 感谢您的建议。对我不起作用,但我认为它可能有助于解决stackoverflow.com/questions/63391793/… 中描述的类似问题,这是我在寻找问题的解决方案时偶然发现的。但我会在我的问题中添加更多信息,以便其他人可以重现。
  • 这正是我想要的。就我而言,我需要使用 M1 Xcode 13 iOS Simulator 编译我的 pod。谢谢。
猜你喜欢
  • 2021-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多