2016-03-23 6 views
13

Ich entwickle ein Embbeded Framework für iOS. Um ein universelles Fett (mit Simulator und Device-Slices) zu erstellen, habe ich ein Aggregat-Ziel mit einem Skript erstellt, das xcodebuild und lipo Befehle verwendet, um es zu generieren, wie es viele Leute tun.xcodebuild 7.3 kann Bitcode nicht aktivieren

Mit XCode 7.x musste ich eine benutzerdefinierte Einstellung mit BITCODE_GENERATION_MODE = Bitcode hinzufügen, um es zu aktivieren, aber dies funktioniert seit der letzten XCode 7.3-Version nicht mehr.

Ich habe versucht alles, was ich im Internet gefunden wie OTHER_CFLAGS="-fembed-bitcode" hinzufügen, aber alles funktioniert nach wie vor ...

Ich habe dies im Protokoll Build gesehen:

enable_bitcode = NO

ENABLE_BITCODE ist immer NEIN, egal was ich tue.

Hat jemand versucht, einen universellen fetten Rahmen mit aktiviertem Bitcode mit dem Befehl xcodebuild seit XCode 7.3 zu erstellen?

+0

Wir verfolgen dieses Problem bei Apple mit Fehler # 25389361, die Sie verweisen können, wenn Sie einen doppelten Fehler ablegen oder auf andere Weise über das Problem kommunizieren. Danke, dass du das Problem angesprochen hast! –

+1

Dies ist in der Xcode 8.0 Beta behoben, die am 13. Juni veröffentlicht wurde. –

Antwort

17

Ich stieß gestern auf ein ähnliches Problem. Nach einigen Untersuchungen scheint das Problem, das auftritt, wenn xcodebuild von einer Build-Phase "Run Script" in einem Xcode-Ziel ausgeführt wird, mit der expliziten Angabe der zu verwendenden Toolchain verwandt wird, die mit der ENV-Variablen TOOLCHAINS ausgeführt wird.

daher bis Apple eine feste Version von Xcode 7.3 freigibt, können Sie versuchen, den folgenden Befehl am Anfang des Skripts hinzuzufügen:

# workaround for bitcode generation problem with Xcode 7.3 unset TOOLCHAINS

Dies sollte harmlos sein, da diese env Variable nicht standardmäßig festgelegt, wenn Sie xcodebuild über die Befehlszeile ausführen, und diese Problemumgehung funktioniert in meinem Fall gut.

+0

Danke! Das funktioniert wie ein Zauber. –

+6

Als Apple-Techniker kann ich bestätigen, dass dies eine geeignete Problemumgehung ist. –

+0

Danke @RickBallard für diese Bestätigung! – jlj

0

Ich bin mit dem gleichen Problem konfrontiert. Genau wie du, BITCODE_GENERATION_MODE und OTHER_CFLAGS="-fembed-bitcode" werden einfach ignoriert, und meine Builds brach

Ich habe bemerkt, dass es manchmal funktioniert, und manchmal nicht. Es scheint, dass, wenn Sie das Framework (oder Aggrate-Target) für den Simulator erstellen, der Bitcode verschwindet, egal was Sie in den xcodebuild-Befehlen haben.

Ich verwende Xcode 7.3, und ich habe 2 Ziele: Static Library und Aggregate Ziel, um den fetten Rahmen zu machen.

Was für mich funktioniert, wenn es einen Bitcode losen Rahmen aufbaut, ist:

  • die statische Bibliothek Ziel auswählen (nicht das Aggregat ein), und wählen Sie "Generic iOS-Gerät"
  • Clean it
  • die statische Bibliothek Ziel auswählen, aber ein Simulator
  • Baut sie holen (Arbeiten, auch wenn es augenblicklich ist, weil es nicht gereinigt worden ist)
  • Wählen sie die statische Bibliothek Ziel, aber „Generic iOS devic holen e "wieder.
  • Build it
  • Wählen Sie das Aggregat Ziel für ein "Generic iOS-Gerät"
  • Schließlich baut es
  • Wenn dies über konnte nicht gestartet werden. Manchmal muss ich es zwei oder drei Mal machen, bevor es funktioniert.

Wenn ich das tue, endet meine fette Bibliothek mit Bitcode.

können Sie überprüfen, ob Ihr Rahmen, indem Sie otool -arch armv7 -l <framework_path> | grep LLVM

Um leicht Bitcode Unterstützung hat es wieder zu brechen, einfach das Aggregat Ziel für einen Simulator zu bauen. Die Bibliothek wird immer noch fett sein, aber Bitcode ist weg.

Jemand kann sicherlich eine Lösung finden, die jedes Mal funktioniert, aber zumindest behebt es das Problem für mich.

Das musste ich mit Xcode 7.2 natürlich nicht machen, und ich weiß nicht, wie das für reine CLI-Builds funktioniert.

+0

Vielen Dank für Ihre Antwort. Die "Lösung", die ich für mein Projekt anwendete, war wie deine. Ich kompilierte "manuell" (mit XCode, nein mit dem Skript) das Framework für Gerät und dann Simulator, und schließlich benutze mein Skript nur für das Zusammenführen mit Lipo. Aber siehe die Problemumgehung von @jlj, Sie können Ihr Skript immer noch mit nur einer Zeile hinzufügen. –

Verwandte Themen