Static Swift framework не проходит проверку CocoaPods с помощью `Undefined symbols for architecture`
Я использую Xcode 12.2 и работаю над статической структурой Swift (встроенной в
.xcframework
в конце), который я собираюсь доставить вместе с CocoaPods.
Моя проблема в настоящее время не в интеграции CocoaPods в проект приложения (pod install
работает правильно, и приложение строит и запускает), но проверка модуля с помощью
pod lib lint
команда.
В
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. Но я не знаю, как это исправить..
Я теряю дни на этом, любая помощь будет принята с благодарностью.
благодаря
1 ответ
Вы правы, для проверки podspec CocoaPods создает проект Xcode Objective-C.
Фреймворк только для Swift с
Mach-O Type
с участием
Static Library
действительно проблема на стороне CocoaPods, потому что он еще не может справиться с этим. В этой ситуации библиотеки Swift не связаны.
Проблема была открыта и решена в репозитории CocoaPods, и исправление выйдет с CocoaPods версии 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
терпит неудачу по той простой причине, что это будет считаться антипаттерном.