Bitcode ist eine Zwischendarstellung eines kompilierten Programms. Apps, die Sie auf iTunes Connect hochladen und die Bitcode enthalten, werden im Store kompiliert und verknüpft. Durch das Einfügen von Bitcode kann Apple Ihre App-Binärdatei in Zukunft erneut optimieren, ohne eine neue Version Ihrer App an den Store senden zu müssen.
Xcode verbirgt standardmäßig Symbole, die während der Erstellungszeit generiert wurden, sodass sie von Apple nicht gelesen werden können. Nur wenn Sie beim Hochladen Ihrer App zu iTunes Connect Symbole hinzufügen, werden die Symbole an Apple gesendet. Sie müssen Symbole einfügen, um Absturzberichte von Apple zu erhalten.
Hinweis: Für iOS-Apps ist Bitcode die Standardeinstellung, jedoch optional. Für watchOS- und tvOS-Apps ist Bitcode erforderlich. Wenn Sie Bitcode bereitstellen, müssen alle Apps und Frameworks im App-Bundle (alle Ziele im Projekt) Bitcode enthalten. Nachdem Sie Ihre App mit iTunes Connect verteilt haben, können Sie die dSYMs-Datei für den Build herunterladen, die unter Anzeigen und Importieren von Abstürzen im Gerätefenster beschrieben wird
Apples anfängliche Einführung des Bitcode- und App-Ausdünnungsdienstes wurde ausgesetzt, da Probleme beim Upgrade von einem Hardwaretyp auf einen anderen Hardwaretyp nicht die richtigen Versionen von Binärdateien wiederherstellten. Dieses Problem wurde anschließend mit iOS 9.0.2 behoben und die Funktion wieder aktiviert.
Bitcode war schon immer Teil der LLVM-Kompilierungs- und Optimierungsphasen. Durch Verschieben der Back-End-Logik auf die Apple-Server werden jedoch die Optimierungs- und Assemblierungsphasen von der Kompilierungszeit des Entwicklers zur App Store-Bereitstellung verschoben. Dies eröffnet das Potenzial einer zukünftigen Neuoptimierung oder Neuübersetzung, um in Zukunft neuere und schnellere Prozessoren zu unterstützen. Bitcode-Bereitstellungen sind für watchOS- und tvOS-Deploments erforderlich und können für vorhandene iOS-Bereitstellungen mit der Option "Bitcode aktivieren" in den Projekteinstellungen unter bestimmten Bedingungen aktiviert werden. Dadurch wird ein Flag-Embed-Bitcode-Marker für Debug-Builds und ein Embed-Bitcode für Archiv- / Geräte-Builds hinzugefügt. Diese können mit -embed-Bitcode oder mithilfe von clang mit -fembed-Bitcode an den Swift-Compiler übergeben werden.
Bitcode hat auch einige Nachteile.Entwickler können Absturzberichte aus Anwendungen debuggen, indem sie Kopien der Debug-Symbole speichern, die der an Apple gelieferten Binärdatei entsprechen. Wenn ein Absturz in einem bestimmten Stapel auftritt, kann der Entwickler die ursprüngliche Stapelverfolgung wiederherstellen, indem er den Absturzbericht mithilfe dieser Debugsymbole symbolisiert. Die Symbole sind jedoch ein Nebenprodukt der Übersetzung der Zwischenform in die Binärform. Wenn dieser Schritt jedoch auf dem Server ausgeführt wird, gehen diese Informationen verloren. Apple bietet einen Crash-Reporting-Service, der die Rolle des Debuggers übernehmen kann, vorausgesetzt, der Entwickler hat die Debug-Symbole zum Zeitpunkt der Veröffentlichung der Anwendung hochgeladen. Die Tatsache, dass der Entwickler niemals die genaue Binärdatei sieht, bedeutet, dass er möglicherweise nicht in der Lage ist, auf bestimmte Probleme zu testen, wenn sich neue Hardware entwickelt.
Endlich der Bitcode auf dem Server übersetzt werden, um neue Architekturen und Befehlssätze während ihrer Entwicklung zu unterstützen. Vorausgesetzt, sie behalten die Aufrufkonvention und die Größe der Ausrichtung und der Wörter bei, kann eine Bitcode-Anwendung in verschiedene Architekturtypen übersetzt und speziell für einen neuen Prozessor optimiert werden. Wenn Standardbibliotheken für Mathematik- und Vektorroutinen verwendet werden, können diese in prozessorspezifische Vektoranweisungen optimiert werden, um die beste Leistung für eine bestimmte Anwendung zu erzielen. Die Optimierer können sogar mehrere verschiedene Codierungen generieren und anhand der Größe oder Ausführungsgeschwindigkeit beurteilen.