Wie baue ich eine statische Bibliothek mit aktiviertem Bitcode auf?
Xcode 7 stellt Bitcode, die irgendeine Art von LLVM intermediate binäre das bedeutet, dass die Apple-Server neu kompilieren können meine app für die verschiedenen Architekturen ohne meine Beteiligung.
Bei Lookback, verteile ich eine statische Archiv-framework mit unserer Bibliothek. Es scheint, dass, wenn Sie bauen mit nichts, aber ein "Build & Archive", bitcode ist eigentlich nicht emittiert in meine Bibliothek, und jeder, der links mit " meine Bibliothek in der app und versucht, eine Build & Archiv mit Bitcode aktiviert wird, erhalten Sie zwei Warnungen:
ld: 'Lookback(Lookback.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target.
(wenn die lib ist Xcode 6)ld: warning: full bitcode bundle could not be generated because 'Lookback(Lookback.o)' was built only with bitcode marker. The library must be generated from Xcode archive build with bitcode enabled (Xcode setting ENABLE_BITCODE)
(wenn die lib ist Xcode 7 mit einem normalen xcodebuild)
Habe ich ein build-Skript, baut ein Gerät+simulator universal binary, also kann ich nicht verwenden, Bauen & Archiv, sondern, ich Lauf xcodebuild
von der Kommandozeile aus meinem Skript. Wie kann ich xcodebuild
generiert einen entsprechenden bitcode-Bibliothek aktiviert?
InformationsquelleAutor der Frage nevyn | 2015-07-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bitcode ist eine compile-Zeit-Funktion (nicht in einem link-Zeit-Funktion), was bedeutet, dass jedes .o-Datei sollte sich ein extra Abschnitt namens __bitcode, wenn gebaut mit bitcode. Können Sie bestätigen, ob Sie Ihre binären ist bitcode-kompatibel durch ausführen
otool -l (my .o or .a file) | grep __LLVM
.Beim erstellen der Regel, Xcode fügt die build-flag
-fembed-bitcode-marker
zu jedem klappern-Aufruf. Dies scheint eine Art von "dies ist, wo bitcode gehen würde, wenn bitcode wurde aktiviert" - Ding, und tatsächlich nicht aktivieren bitcode.Wenn Sie "Bauen & Archive" diese Flagge wird ersetzt durch
-fembed-bitcode
, die wirklich bauen einen Bitcode-fähigen binäre.Scheint es zwei Möglichkeiten zu
xcodebuild
verwenden-fembed-bitcode
:xcodebuild -target LookbackSDK archive
stattxcodebuild -target LookbackSDK build
. Dies hat den Nebeneffekt, setzen diese in Ihrem Xcode-Organizer statt derbuild/
Ordner, aber Sie können das umgehen, indem-exportArchive -archivePath ./build
(Dank @JensAyton)OTHER_CFLAGS="-fembed-bitcode"
. Ihrexcodebuild
Aufruf würde folgendermaßen Aussehenxcodebuild OTHER_CFLAGS="-fembed-bitcode" -target LookbackSDK build
.Letzteres ist, was ich gewählt habe, so dass ich nicht meine build-system, aber es wird Warnungen generieren, für jede Datei, da nun beide
-fembed-bitcode-marker
und-fembed-bitcode
gesendet werden, zu klappern. Luckilly letztere gewinnt, erzeugen ein Bitcode-Bibliothek aktiviert!Ressourcen
InformationsquelleAutor der Antwort nevyn
Wenn Sie add-bitcode Unterstützung für die statische lib, ist es nicht kompatibel mit Xcode 6. Die app wird nicht archivieren.
Möchte ich deutlich erwähnen, die Einstellung für bitcode wie @nevyn Antwort verwirrt mich ein wenig.
Gehen Sie zu Build-Einstellungen, Suche für die "benutzerdefinierte compiler-flags". Hinzufügen
-fembed-bitcode
. Dies wird bauen Sie Ihre lib mit bitcode.InformationsquelleAutor der Antwort Gautam Jain
Mit Xcode 8, konnte ich nicht
OTHER_CFLAGS="-fembed-bitcode"
zu arbeiten. Ich lief in etwas entlang der Linien vonwas built without full bitcode. All frameworks and dylibs for bitcode must be generated from Xcode Archive or Install build
wenn ich versuchte, Sie zu erstellen, die ein Archiv aufbauen einer app mit meinem statischen Rahmen.War das, was ich wirklich Suche, war dies:
Ich bin tatsächlich mit einem Skript Ausführen, innerhalb eines Aggregats Ziel, die volle xcodebuild Zeile sieht wie folgt aus (nur für reference):
xcodebuild BITCODE_GENERATION_MODE=bitcode OTHER_CFLAGS="-fembed-bitcode" -target "${PROJECT_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build
InformationsquelleAutor der Antwort Aaron Ash