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, вот обходные пути, используемые в этой проблеме (я не пробовал их):

Кроме того, нет никаких опций, позволяющих pod push если lint терпит неудачу по той простой причине, что это будет считаться антипаттерном.

Другие вопросы по тегам