#swift #frameworks #cocoapods #static-framework
#swift #фреймворки #cocoapods #статический фреймворк
Вопрос:
Я использую Xcode 12.2 и работаю над статическим фреймворком Swift (встроенным .xcframework
в конце), который я намерен поставлять с CocoaPods.
В настоящее время моя проблема заключается не в интеграции CocoaPods в проект приложения ( pod install
работает правильно и приложение строится и запускается), а в проверке модуля с pod lib lint
помощью command.
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 создают проект Objective-C Xcode.
Фреймворк только для Swift, имеющий Mach-O Type
with Static Library
, действительно является проблемой на стороне CocoaPods, поскольку он пока не может с этим справиться. В этой ситуации библиотеки Swift не связаны.
В репозитории CocoaPods была открыта и устранена проблема, и исправление будет поставляться с CocoaPods версии 1.11
До выпуска CocoaPods 1.11 вот обходные пути, описанные в этом выпуске (я их не пробовал):
- Включите
.swift
файл в свой модуль - Добавьте тесты в podspec, чтобы эти тесты зависели от swift pod, без добавления каких-либо исходных файлов, и запустите pod
lib lint
с опцией--skip-tests
В вашем 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
Кроме того, к вашему сведению, нет никаких опций, позволяющих разрешить a pod push
в случае lint
сбоя по той простой причине, что это будет рассматриваться как анти-шаблон.