Środowisko: XCode 7.0.1 Moduł: Objective-C Bundle Rodzaj: RamyJak zrobić grubą ramkę z opcją bitcode?
Witam, staram się stworzyć ramy wspierania ARMv7, armv7s, arm64, i386 i x86_64. Używam agregatu do stworzenia biblioteki tłuszczu. Wewnątrz skryptu agregującego uruchamiam dwie komendy xcodebuild 1. dla armv7, armv7s i arm64 i 2. dla architektur i386 i x86_64. Ponadto ustawiłem opcję Enable Bitcode = YES i Other C Flags = -fembed-bitc pod ustawieniami docelowej kompilacji. Jako środek ostrożności mesasure, dodaję ENABLE_BITCODE = TAK i OTHER_CFLAGS = "- fembed-bitcode" opcje do polecenia xcodebuild
Moje Xcode zbudować polecenia są następujące -
#Build The framework Target for iPhoneOS
xcodebuild -project "${PROJECT_FILE_PATH}" -target "${AN_TARGET}"
ONLY_ACTIVE_ARCH=NO -configuration "${CONFIGURATION}" -sdk iphoneos
BUILD_DIR="${BUILD_DIR}" OBJROOT="${OBJROOT}" BUILD_ROOT="${BUILD_ROOT}"
CONFIGURATION_BUILD_DIR="${IPHONE_DEVICE_BUILD_DIR}" SYMROOT="${SYMROOT}"
ARCHS="armv7 armv7s arm64" ENABLE_BITCODE=YES OTHER_CFLAGS="-fembed-bitcode" $ACTION
#Build The framework Target for iPhoneSimulator
xcodebuild -project "${PROJECT_FILE_PATH}" -target "${AN_TARGET}"
ONLY_ACTIVE_ARCH=NO -configuration "${CONFIGURATION}" -sdk iphonesimulator
BUILD_DIR="${BUILD_DIR}" OBJROOT="${OBJROOT}" BUILD_ROOT="${BUILD_ROOT}"
CONFIGURATION_BUILD_DIR="${IPHONE_SIMULATOR_BUILD_DIR}" SYMROOT="${SYMROOT}"
ARCHS="i386 x86_64" ENABLE_BITCODE=YES OTHER_CFLAGS="-fembed-bitcode" $ACTION
po uruchomieniu dwóch powyższych komend , jestem łącząc te dwa buduje dokonać tłuszczu ramową binarnie za pomocą poniższego polecenia
# create a fat Framework
lipo -create
"${IPHONE_DEVICE_BUILD_DIR}/${PROJECT_NAME}.framework/${PROJECT_NAME}"
"${IPHONE_SIMULATOR_BUILD_DIR}/${PROJECT_NAME}.framework/${PROJECT_NAME}" -
output "${FRAMEWORK_FOLDER}/${AN_END_USER_FRAMEWORK_NAME}"
kwestia iam licowa jest po utworzeniu lipo, nie jestem w stanie go używać w aplikacji bitcode włączona. Po uruchomieniu otool -l framework_binary | grep -LLVM
nie widzę flag obsługujących bitc lub __LLVM.
Lipo usuwa kod binarny z tłuszczu. Czy jest jakiś sposób na zatrzymanie bitu podczas wykonywania polecenia lipo?
Korekta: Na podstawie odpowiedzi od Nestora wykonałem polecenie otool jako otool -l -arch armv7 framework_binary | grep LLVM
i ku mojemu zaskoczeniu mogłem zobaczyć klątwę __LLVM. Jednak, kiedy integruję ten sam gruby framework binarny z moim projektem, to działa on dobrze na symulatorze, ale generuje następujący błąd podczas działania na urządzeniu - ld: "MyBinary" nie zawiera bitu. Musisz go odbudować z włączonym bitcodem (ustawienie Xcode ENABLE_BITCODE), uzyskać zaktualizowaną bibliotekę od dostawcy lub wyłączyć bitcode dla tego celu. dla architektury armv7
Czy to nie powinno być 'grep LLVM', a nie' grep -LLVM'? – l00phole
Ten sam problem tutaj. * .a zawiera bitmę przed lipo, ale nie po. – Nestor
Czy sprawdziłeś, czy binarny dla iphoneos (to znaczy dla urządzenia przed integracją z lipo) ma kod bitowy? Jeśli go nie ma, to nie lipo usuwa odcinek bitu. –