静态 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 Type
和 Static Library
的 Swift-only 框架确实是 CocoaPods 方面的一个问题,因为它还不能处理它。
在这种情况下,Swift 库未链接。
已在 CocoaPods repository, and the fix will come with CocoaPods version 1.11
上打开并解决了一个问题
在此 CocoaPods 1.11 版本发布之前,以下是此问题中共享的解决方法(我没有尝试过):
-
-
在你的 podspec 添加:
# Adding tests with a swift dependency is a workaround in order to make pod lib lint work
# See: https://github.com/CocoaPods/CocoaPods/issues/8649
spec.test_spec 'Tests' do |spec|
spec.dependency 'Result', '~> 5.0'
end
此外,没有选项允许 pod push
如果 lint
失败,原因很简单,它将被视为反模式。
我正在使用 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 Type
和 Static Library
的 Swift-only 框架确实是 CocoaPods 方面的一个问题,因为它还不能处理它。
在这种情况下,Swift 库未链接。
已在 CocoaPods repository, and the fix will come with CocoaPods version 1.11
上打开并解决了一个问题在此 CocoaPods 1.11 版本发布之前,以下是此问题中共享的解决方法(我没有尝试过):
-
在你的 podspec 添加:
# Adding tests with a swift dependency is a workaround in order to make pod lib lint work # See: https://github.com/CocoaPods/CocoaPods/issues/8649 spec.test_spec 'Tests' do |spec| spec.dependency 'Result', '~> 5.0' end
此外,没有选项允许 pod push
如果 lint
失败,原因很简单,它将被视为反模式。