Карфаген-зависимый проект, ориентированный на iOS 10, не может быть собран, но когда он нацелен на iOS 11, успешен
У меня есть основанная на Swift библиотека Cocoa Framework, которая использует module.modulemap
поддерживать библиотеку на основе C (PortSIPLib). Проект прекрасно строится в Xcode.
Я использую фреймворк в другом проекте, используя Carthage, который ориентирован на iOS 10.
Когда Карфаген строит каркас (carthage update --platform ios
) это терпит неудачу с
ld: warning: ignoring file /Users/.../Carthage/Checkouts/wesipkit/PortSIPLib/PortSIPLib.framework/PortSIPLib, missing required architecture i386 in file /Users/.../Carthage/Checkouts/wesipkit/PortSIPLib/PortSIPLib.framework/PortSIPLib (3 slices)
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_PortSIPSDK", referenced from:
objc-class-ref in SIPServiceProvider.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Но если я нацеливаюсь как на проект, так и на фреймворк, чтобы использовать iOS 11, Carthage собирается успешно?
Я попытался использовать оба параметра конфигурации отладки и выпуска, оба терпят неудачу
Есть ли другой подход, который я могу использовать? Есть ли другие настройки, которые я должен настраивать?
Могу ли я в любом случае сказать Carthage/Xcode игнорировать попытки сборки для симулятора? Мне не нужно запускать его в симуляторе
Проблема не в том, что (PortSIPLib) отсутствует i386
Реализация, проблема в том, почему он работает, ориентируясь на iOS 11, а не на iOS 10?
Я буквально провел неделю, пытаясь диагностировать эту проблему, вплоть до воссоздания проекта фреймворка, и только сейчас я понял, что проблема связана с целевым уровнем iOS
Xcode version 9.1 beta (9B46)
Фреймворк module.modulemap
для PortSIPLib
module PortSIPLib {
umbrella header "PortSIPLib.framework/Headers/PortSIPSDK.h"
header "PortSIPLib.framework/Headers/PortSIPErrors.hxx"
header "PortSIPLib.framework/Headers/PortSIPEventDelegate.h"
header "PortSIPLib.framework/Headers/PortSIPTypes.hxx"
header "PortSIPLib.framework/Headers/PortSIPVideoRenderView.h"
export *
module * { export * }
}
Это хранится в $(SRCROOT)/PortSIPLib
вместе со структурой PortSIPLib