2015-09-27 7 views
16

Von Xcode 7 wurde eines der häufigen Probleme, dass Frameworks von Drittanbietern Bitcode unterstützen sollten. Wir können den BITCODE auch deaktivieren, indem Sie ENABLE_BITCODE in Build-Einstellungen auf NO setzen. Aber ich möchte es nicht ausschalten, stattdessen möchte ich alle meine Frameworks in BITCODE-kompatibel konvertieren.Wie überprüft man, ob ein Framework BITCODE für Xcode7 unterstützt

So, wie man prüft, ob ein Rahmen BITCODE-kompatibel ist, abgesehen von dem Kompilieren des Rahmens in Xcode. Manchmal geben Xcode einen Fehler für die BITCODE-Kompatibilität für ein Framework an und die anderen, obwohl sie keine BITCODE-Unterstützung haben.

Gibt es eine Werkzeug-/Befehlszeilenprüfung?

Antwort

27

Von this Apple Developers Forum Diskussion Benutzer dshirley und bwilson schlagen vor, mit Kommandozeilen-Tool otool und grep zu überprüfen, ob Bitcode Abschnitte vorhanden ist.

$ otool -l libName.o | grep __LLVM 

oder

$ otool -l MyFramework.framework/Versions/A/MyFramework | grep __LLVM 

den obigen Befehl ausgeführt wird, wenn die Bibliothek enthält Bitcode Sie segname __LLVM Ausgabe sehen.

+2

Danke für die Antwort Michael. Dieses Tool funktioniert also in einer .o oder .a Datei. Wie kann ich nach einer .framework-Datei suchen? – iPrabu

+3

Das .framework ist nur eine nette Möglichkeit, Ressourcen, öffentliche Header und eine Bibliothek zusammen zu packen. Die Bibliothek befindet sich dort. Sie sollten den Befehl darauf ausführen. Also zum Beispiel, abhängig von der Verzeichnisstruktur: '$ otool -l MyFramework.framework/Versions/A/MyFramework | grep __LLVM', wobei 'MyFramework' die Bibliothek ist (ohne die Dateierweiterung). Weitere Informationen zu Framework-Verzeichnisstrukturen finden Sie unter https://developer.apple.com/library/ios/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/FrameworkAnatomy.html –

+0

Vielen Dank für die Info Michael – iPrabu

4

Die akzeptierte Antwort empfiehlt Ihnen grep __LLVM tun soll, aber ich würde lieber dieses

otool -l libName.o | grep __bitcode 

tun, da es unterschiedlich sind __LLVM Segmente und nicht alle diese zeigen das Vorhandensein von Bitcode. Hier ein Beispiel:

Section 
    sectname __bitcode 
    segname __LLVM 
     addr 0x00000000000007d0 
     size 0x0000000000000f10 
    offset 3360 
    align 2^4 (16) 
    reloff 0 
    nreloc 0 
    flags 0x00000000 
reserved1 0 
reserved2 0 
Section 
    sectname __cmdline 
    segname __LLVM 
     addr 0x00000000000016e0 
     size 0x0000000000000069 
    offset 7216 
    align 2^4 (16) 
    reloff 0 
    nreloc 0 
    flags 0x00000000 
reserved1 0 
reserved2 0 

Die Anwesenheit des __cmdline Abschnitt nicht anzeigt, dass Bitcode vorhanden ist, aber es wäre auch gefunden werden, wenn nur für __LLVM suchen.

+1

Dies funktioniert nicht. Ich habe ein Swift-Framework und die Suche nach "__LLVM" mit Bit-Code aktiviert funktioniert, aber dies nicht. –

+2

In https://forums.developer.apple.com/message/7038 Benutzer bwilson (Apple Staff) erwähnt die Suche nach __bitcode ist nicht zuverlässig und empfiehlt __LLVM –

1

können Sie diese Befehle versuchen:

otool -arch armv7 -l libDeviceManager.a | grep bit code 

und

otool -arch arm64 -l libDeviceManager.a | grep bitcode 
Verwandte Themen