Отсутствует косвенная зависимость фреймворка Xcode 12 cocoapods?

После обновления до Xcode 12 проект больше не строился.

undefined symbols for architecture x86_64:
  "_OBJC_CLASS_$_DDLog", referenced from:
      objc-class-ref in Bouncer.o
ld: symbol(s) not found for architecture x86_64

DDLog определен в CocoaLumberjack. который является зависимостью от FrameworkA, который является зависимостью от FrameworkB (тестовый проект)

Podspec extract FrameworkA:

Pod::Spec.new do |s|
    [...]
  
  s.default_subspec = 'Core'
  
  s.subspec 'Core' do |co|
      co.source_files = 'FrameworkA_Objc_DependencyIssue/Classes/**/*'
      co.dependency 'CocoaLumberjack', '~> 3.1'
  end
end

Podspec extract FrameworkB:

Pod::Spec.new do |s|
  [...]

  s.source_files = 'FrameworkB_Objc_DependencyIssue/Classes/**/*'
  s.dependency 'FrameworkA_Objc_DependencyIssue/Core', '~> 0.1.2'
#  s.dependency 'CocoaLumberjack' # Adding direkt dependency fixes problem!
end

Эта установка компилируется с Xcode 11.


person clauswey    schedule 22.09.2020    source источник
comment
вы можете проверить мои демонстрационные проекты, в которых показаны эти проблемы, здесь: github.com/cweymann/FrameworkB, github.com/cweymann/FrameworkA   -  person clauswey    schedule 23.09.2020


Ответы (2)


Похоже, что это была ошибка, которая могла быть скомпилирована в Xcode 11. Добавление зависимости к FrameworkB решает проблему (см. Комментарий в podspec extract FramworkB обновленного вопроса)

person clauswey    schedule 22.09.2020
comment
Спасибо за решение, это сработало и для меня, есть ли какие-либо конкретные изменения в зависимости от Xcode 12 w.r.t? просто хотел больше узнать о причине проблемы. Поделитесь, если у вас есть какие-либо документы по этому исправлению. - person Prasad Devadiga; 05.10.2020
comment
Я все еще сталкиваюсь с той же проблемой. По Xcode и CocoaPods обновляются. Какие-либо предложения? Спасибо! - person Tulon; 17.03.2021

Первый способ: для этого перейдите к настройкам сборки вашего проекта и добавьте Any iOS Simulator SDK со значением arm64 внутри Excluded Architecture.

или

Если вы используете собственные файлы XCConfig, вы можете просто добавить эту строку для исключения архитектуры симулятора.

EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64

Второй способ: вы можете вручную добавить исключенную архитектуру в настройки сборки вашего проекта модуля, но при установке модуля она будет перезаписана.

Вместо этого вы можете добавить этот фрагмент в свой Podfile. Он будет записывать необходимые настройки сборки каждый раз, когда вы запускаете установку модуля.

post_install do |installer|
  installer.pods_project.build_configurations.each do |config|
    config.build_settings[‘EXCLUDED_ARCHS[sdk=iphonesimulator*]’] = ‘arm64’
  end
end

Пожалуйста, дайте мне знать, поможет ли это

person Viraj Patel    schedule 22.09.2020
comment
Спасибо за ваше предложение. У меня не сработало, но я думаю, что это может помочь с похожей проблемой, описанной в stackoverflow.com/questions/63391793/, на который я наткнулся, когда искал решение моей проблемы. Но я добавлю к своему вопросу дополнительную информацию, чтобы ее можно было воспроизвести для других. - person clauswey; 23.09.2020