Статическая платформа Swift завершает проверку CocoaPods с «Неопределенными символами для архитектуры`

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

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