Создайте iOS-библиотеку с помощью Bitcode, чтобы иметь обратную совместимость с XCode 6. Как?
Я создаю статическую библиотеку iOS, и я хочу предоставить поддержку для биткода. Чтобы добиться этого, я перехожу к настройкам сборки, поискам "пользовательских флагов компилятора" и добавлению -fembed-bitcode. Это создает библиотеку с помощью битового кода, и все отлично работает под XCode 7.
Однако, следуя вышеприведенному подходу, я теряю назад совместимость с XCode 6. После этого я должен отправить две разные версии библиотеки моим пользователям, один с флагом биткода и один без него, поскольку не все обновлены до XCode 7.
Есть ли способ иметь библиотеку с включенным битом и иметь обратную совместимость, не отправляя две разные версии?
UPDATE:
Здравствуйте @Vinicius Jarina благодарит вас за сообщение. Я понимаю, что вы можете создать толстую библиотеку, которая, как я полагаю, является обычной практикой. То, что я делал до сих пор, - это построить для обеих архитектур:
xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdK iphoneos
xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphonesimulator
а затем вызовите lipo для упаковки в жирную библиотеку, например:
lipo -create "${DEVICE_DIR}/${FMK_NAME}" "${SIMULATOR_DIR}/${FMK_NAME}" -output "${INSTALL_DIR}/Versions/${FMK_VERSION}/${FMK_NAME}"
Однако, как я могу это сделать сейчас? Я пробовал что-то подобное на основе этой ссылки, но не повезло:
xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphoneos
xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphonesimulator
xcodebuild -configuration "Release" OTHER_CFLAGS='-fembed-bitcode' -target "${FMK_NAME}" -sdk iphonesimulator
xcodebuild -configuration "Release" OTHER_CFLAGS='-fembed-bitcode' -target "${FMK_NAME}" -sdk iphoneos
а затем создайте полный lib следующим образом:
lipo -create "${DEVICE_DIR}/${FMK_NAME}" "${SIMULATOR_DIR}/${FMK_NAME}" -output "${INSTALL_DIR}/Versions/${FMK_VERSION}/${FMK_NAME}"
как я могу построить в своем scipt, чтобы включить оба, а затем упаковать их в жир-библиотеку?
ОБНОВЛЕНИЕ 2:
Мне удалось выполнить эту работу, и я перечислю здесь свое решение для других, которые могут столкнуться с одной и той же проблемой:
xcodebuild -configuration "Release" ENABLE_BITCODE=NO -target "${FMK_NAME}" -sdK iphoneos
xcodebuild -configuration "Release" ENABLE_BITCODE=NO -target "${FMK_NAME}" -sdk iphonesimulator
xcodebuild -configuration "Release" ENABLE_BITCODE=YES -target "${FMK_NAME}" -sdk iphonesimulator
xcodebuild -configuration "Release" ENABLE_BITCODE=YES -target "${FMK_NAME}" -sdk iphoneos
а затем создайте полный lib следующим образом:
lipo -create "${DEVICE_DIR}/${FMK_NAME}" "${SIMULATOR_DIR}/${FMK_NAME}" -output "${INSTALL_DIR}/Versions/${FMK_VERSION}/${FMK_NAME}"
Ответы
Ответ 1
Вы можете попытаться создать жир-библиотеку, используя разные библиотеки.
lipo -create -output libAndreasv.a libAndreasvBitcode.a libAndreasvARMv7.a libAndreasvARM64.a
Это использовалось для работы с живыми библиотеками (x86, x64, ARMv7, ARM64), также должно работать и для битового кода.
Ответ 2
Возможно, мне что-то не хватает, но я не думаю, что у вас могут быть дублированные архитектуры в полной библиотеке, независимо от того, включен или отключен биткод. Например, следующая команда вызывает ошибку для меня:
lipo -create libcurl_iOS_bitcode.a libcurl_iOS_nobitcode.a -output libcurl_iOS_both.a
fatal error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo: libcurl_iOS_bitcode.a and libcurl_iOS_nobitcode.a have the same architectures (armv7) and can't be in the same fat output file