Я пытаюсь создать динамическую структуру iOS вручную из .dylib
. Двоичные файлы создаются с помощью cmake и xcodebuild и производят два файла .dylib
, один из которых содержит armv7
, armv7s
и arm64
и другие x86_64
и i386
. Библиотеки скомпилированы с -fembed-bitcode parameter
, и все успешно.Слияние iOS .dylib в каркас с перекомпиляцией биткода lipo break
.dylib файлы будут объединены с помощью следующей команды:
lipo -create lib_arm.dylib lib_i386.dylib -output MyFramework
Framework затем создается путем копирования вывод команды липо на:
MyFramework.framework/MyFramework
заголовков и Info.plist
вручную создается и добавляется к рамки.
Этот каркас затем устанавливается через CocoaPods в приложение как vendored_framework
. Известно, что CocoaPods будет лишать библиотеки i386/x86_64 из любых жирных двоичных файлов для распространения в App Store.
Приложение создает, запускает, архивирует и загружает в App Store.
Однако, поскольку биткод включен, App Store будет обрабатывать .ipa и перекомпилировать с помощью битового кода, в этом случае он терпит неудачу, и я получаю электронное письмо от App Store, которое не удалось обработать. Следуя инструкциям, я могу воспроизвести ошибку локально с помощью Exporting for Ad-Hoc Distribution и перекомпиляции для битового кода. Ошибка я получаю это:
ipatool failed with an exception: #<Errno::ENOENT: No such file or directory - /lib_arm.dylib>\n
Так, видимо, во время перекомпиляции, есть еще ссылка или где-то lib_arm.dylib
, даже если он был слит в жир dylib Mach-O универсального двоичный (file
выхода из слито dylib binary ниже):
>> file MyFramework
MyFramework: Mach-O universal binary with 5 architectures: [x86_64: Mach-O 64-bit dynamically linked shared library x86_64] [i386] [arm_v7] [arm_v7s] [arm64]
MyFramework (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64
MyFramework (for architecture i386): Mach-O dynamically linked shared library i386
MyFramework (for architecture armv7): Mach-O dynamically linked shared library arm_v7
MyFramework (for architecture armv7s): Mach-O dynamically linked shared library arm_v7s
MyFramework (for architecture arm64): Mach-O 64-bit dynamically linked shared library arm64
Это в значительной степени, когда мои знания компилятора/линкера выходят за рамки. Итак, мой вопрос:
Где я иду не так? Может быть, биткод должен быть скомпилирован по-разному? Или, может быть, я использую lipo
неправильно?
Спасибо!