静态 Swift 框架因“未定义的体系结构符号”而无法通过 CocoaPods 验证

Static Swift framework fails CocoaPods validation with `Undefined symbols for architecture`

我正在使用 Xcode 12.2,并且正在开发 Swift 静态框架(最终嵌入到 .xcframework 中),我打算将其与 CocoaPods 一起交付。

我的问题目前不是应用程序项目中的 CocoaPods 集成(pod install 正常工作并且应用程序构建和 运行),而是使用 pod lib lint 命令的 pod 验证。

lint 验证失败,日志包含以下内容:

ld: warning: Could not find or use auto-linked library 'swiftCoreGraphics'
ld: warning: Could not find or use auto-linked library 'swiftObjectiveC'
ld: warning: Could not find or use auto-linked library 'swiftUIKit'
ld: warning: Could not find or use auto-linked library 'swiftDarwin'
ld: warning: Could not find or use auto-linked library 'swiftDispatch'
ld: warning: Could not find or use auto-linked library 'swiftAVFoundation'
ld: warning: Could not find or use auto-linked library 'swiftAccelerate'
ld: warning: Could not find or use auto-linked library 'swiftCoreImage'
ld: warning: Could not find or use auto-linked library 'swiftCompatibilityDynamicReplacements'
    Undefined symbols for architecture x86_64:
      "_OBJC_CLASS_$__TtCs12_SwiftObject", referenced from:
[...]

并且日志包含与 Undefined symbols for architecture arm64

我的.podspec文件如下

Pod::Spec.new do |s|
  s.name             = 'MyFramework'
  s.version          = '1.0.0'

  s.source           = { :git => 'https://url-to-repo.git', :tag => s.version.to_s }
  
  s.ios.deployment_target = '12.0'
  s.platform = :ios
  s.swift_version = '5.0'
    
  s.requires_arc = true
  s.static_framework = true
      
  s.ios.vendored_frameworks = "MyFramework.xcframework"
  
  s.frameworks = 'AVFoundation', 'Accelerate', 'CoreGraphics', 'CoreImage'
  
  s.ios.library = 'z', 'c++'
end

我的猜测是 CocoaPods 创建的项目使用 Objective-C,并且可能没有对 Swift 编译器或库的引用。 但是我不知道如何解决这个问题..

我已经在这上面浪费了好几天的时间,如果有任何帮助,我们将不胜感激。

谢谢

你是对的,为了验证 podspec,CocoaPods 创建了一个 Objective-C Xcode 项目。

具有 Mach-O TypeStatic Library 的 Swift-only 框架确实是 CocoaPods 方面的一个问题,因为它还不能处理它。 在这种情况下,Swift 库未链接。

已在 CocoaPods repository, and the fix will come with CocoaPods version 1.11

上打开并解决了一个问题

在此 CocoaPods 1.11 版本发布之前,以下是此问题中共享的解决方法(我没有尝试过):

此外,没有选项允许 pod push 如果 lint 失败,原因很简单,它将被视为反模式。