Ich starte ein neues Projekt in Xcode 5. Ich möchte eine Anwendung mit, iOS SDK 7
aber mit Bereitstellungsziel entwickeln iOS 5.0
. Sobald ich ein neues Projekt in Xcode erstelle und versuche, das Bereitstellungsziel auf 5.0 zu ändern, wird folgende Meldung angezeigt:
Applications including an arm64 slice are not compatible with versions of iOS
prior to 6.0
Adjust your Architectures build setting to not include arm64 in order to deploy
to releases prior to iOS 6.0.
Also geänderte Architekturen auf Standard
(kein 64bit). Ich kompiliere, laufe, aber ich verstehe nicht wirklich, was gerade passiert ist.
Was ist der Unterschied zwischen Architectures
und Valid architectures
Einstellungen in den Build-Einstellungen des Xcode-Projekts?
Wenn ich Architectures
64-Bit ausschließen möchte, was passiert, wenn ich meine App auf einem 64-Bit-iPhone oder iOS-Simulator ausführe (ich weiß, dass es funktioniert, ich bin nur neugierig, was darunter passiert)?
Können Sie das große Durcheinander mit der neuen 64-Bit-Architektur erklären?
Antworten:
Stellen Sie die Architektur in der Build-Einstellung auf Standardarchitekturen (armv7, armv7s) ein.
Das iPhone 5S wird von einem A7 64-Bit-Prozessor angetrieben. Aus Apple Docs
Aus der Dokumentation habe ich verstanden
Update (Xcode 5.0.1)
In Xcode 5.0.1 wurde die Unterstützung zum Erstellen von 64-Bit-Binärdateien für iOS 5.1.1 hinzugefügt.
Update (Xcode 5.1)
Xcode 5.1 hat im Architekturbereich wesentliche Änderungen vorgenommen. Diese Antwort wird eine Folge für Sie sein. Überprüfen Sie dies
quelle
arm64
.Mein Verständnis von Apple Docs.
Was ist gültige Architekturen (VALID_ARCHS) in Xcode-Build-Einstellungen?
Beispiel: - Ein iOS-Projekt verfügt über die folgenden Build-Einstellungen für Xcode.
quelle
Wenn Sie 64-Bit einstellen, ist die resultierende Binärdatei eine "Fat" -Binärdatei, die alle drei Mach-O-Bilder enthält, die mit einem dünnen Fat-Header gebündelt sind. Sie können dies mit otool oder jtool sehen. Sie können einige fette Binärdateien überprüfen, die im iOS 7.0 SDK enthalten sind, z. B. das AVFoundation Framework:
Die Binärdatei selbst verwendet den ARM64-Bit-Befehlssatz, der (meistens kompatibel mit 32-Bit, aber) ein völlig anderer Befehlssatz ist. Dies ist besonders wichtig für Grafikprogramme (unter Verwendung von NEON-Anweisungen und -Registern). Ebenso verfügt die CPU über mehr Register, was sich erheblich auf die Programmgeschwindigkeit auswirkt. Unter http://blogs.barrons.com/techtraderdaily/2013/09/19/apple-the-64-bit-question/?mod=yahoobarrons gibt es eine interessante Diskussion darüber, ob dies einen Unterschied macht oder nicht. Benchmarking-Tests haben bisher eindeutig gezeigt, dass dies der Fall ist.
Wenn Sie otool -tV verwenden, wird die Assembly ausgegeben (wenn Sie XCode 5 und höher haben), und dann können Sie die Unterschiede im Befehlssatz selbst sehen. Die meisten (aber nicht alle) Entwickler bleiben gegenüber den Änderungen agnostisch, da sie Obj-C zum größten Teil nicht direkt beeinflussen (trotz CG * -APIs) und mehr mit der Zeigerbehandlung auf niedriger Ebene zu tun haben. Der Compiler wird seine Magie und Optimierungen arbeiten.
quelle
Sie müssen Ihren Compiler nicht nur auf armv7 und armv7s beschränken, indem Sie die Einstellung arm64 aus den unterstützten Architekturen entfernen . Sie müssen lediglich die Einstellung für das Bereitstellungsziel auf 5.1.1 festlegen
Wichtiger Hinweis: Sie können das Bereitstellungsziel im Abschnitt " Build-Einstellungen" nicht auf 5.1.1 festlegen, da es nur mit festen Werten als Dropdown- Liste angezeigt wird. Sie können es jedoch einfach auf 5.1.1 im Abschnitt Allgemein der Anwendungseinstellungen einstellen, indem Sie einfach den Wert in das Textfeld eingeben.
quelle
Einfache Lösung:
Ziele -> Build-Einstellungen -> Build-Optionen -> Bitcode aktivieren -> Nein
Funktioniert auf Geräten mit iOS 9.3.3
quelle
Keine der Antworten funktionierte und dann vergaß ich, ein Mindestbereitstellungsziel festzulegen, das unter Projekt -> Allgemein -> Bereitstellungsinformationen -> Bereitstellungsziel -> 8.0 zu finden ist
quelle