webentwicklung-frage-antwort-db.com.de

Erstellen von Architekturen für armv6 und armv7 mit iOS 5

In iOS5 Apple löscht die armv6 Architektur aus ARCHS_STANDARD_32_BIT =.

Um die Unterstützung für iPhone3G beizubehalten, möchte ich auch in iOS5 noch in armv6 kompilieren.

Hat jemand eine Lösung dafür gefunden?

96
iGranDav

Ich habe heute gerade etwas erstellt, das ein Bereitstellungsziel für iOS 4.0 angibt. Da nur armv7 in Architectures angegeben wurde, warnte mich Xcode, dass ich armv6 in Architectures einbinden musste, um alles unter iOS4.2 zu unterstützen. Bearbeiten Sie einfach dieses Feld, klicken Sie auf die Schaltfläche "+", wenn das Dialogfeld angezeigt wird, und geben Sie das Literal "armv6" ein.

In meinem Fall möchten wir, dass unsere App unter iOS4 und iOS5 funktioniert. Wir mussten einige Änderungen vornehmen, damit es unter iOS5 korrekt funktioniert, aber alle diese Änderungen wurden mit iOS4-freundlichen Codeänderungen durchgeführt.

Wir haben auch einige iOS5-spezifische Funktionen hinzugefügt, mit denen die App unter iOS4 ohne Abstürze ausgeführt werden kann. Insbesondere haben wir iOS5-Funktionen getestet, bevor wir versuchten, sie zu verwenden, und nur iOS5-Bibliotheken als optional verknüpft.

Die Unterstützung von iPhone3G in einer iOS5-Welt könnte genauso gut bedeuten, dass "wir möchten, dass unsere App auf iOS4 und höher ausgeführt wird (unabhängig von der Verwendung von iOS5-Funktionen)" und nicht, dass "wir sicherstellen möchten, dass unsere App auf einem älteren Gerät mit iOS5 ausgeführt wird ". Hier gibt es einen Unterschied; Denk darüber nach. :-)

Wie auch immer, das Hinzufügen von Armv6-Unterstützung ist sehr einfach. Und ich denke, der Punkt ist folgender: Irgendwann, wenn es keine armv6-Geräte mehr gibt, über die Sie sich Sorgen machen müssen (aus welchem ​​Grund auch immer), müssen Sie nicht mehr dafür bauen. Nach Ansicht von Apple sollte jeder so schnell wie möglich auf die neueste Hardware aktualisieren. In dieser Welt ist es also nicht erforderlich, dass die Tools standardmäßig die neuesten und besten Tools verwenden. :-) Glücklicherweise (oder auch nicht) leben wir Entwickler in der realen Welt und erkennen, dass Sie ältere Dinge für eine Weile unterstützen müssen. Und ich denke, das Xcode-Entwicklerteam weiß das auch, weshalb Sie Armv6-Unterstützung ganz einfach wieder hinzufügen können.

97
Mark Granoff

Die einfache Antwort ist, dass Sie die aktuellen Einstellungen von "Standard (armv7) - $ (ARCHS_STANDARD_32_BIT)" auf "armv6" und "armv7" ändern müssen. Siehe das Bild unten. Sie müssen die Zeile mit den vorherigen Einstellungen löschen, damit sie funktioniert.

Correct settings for armv6 and armv7

51
adjwilli

stellen Sie außerdem sicher, dass Sie dies unter Projekt UND Ziele festlegen. Die Berechnung kostet mich eine Stunde. hatte es für den einen aber nicht für den anderen eingestellt. hoffe das hilft. GLTA

11
ubert

Ich glaube, es gibt einen Grund, warum Apple armv6 von der Standardeinstellung gestrichen hat.

Ich habe armv7/armv6 mit iOS5 SDK kompiliert, aber der armv6-Compiler hat im Release-Modus falschen Code erzeugt. Nach stundenlangem Finden einer Problemumgehung (versuchen von llvm oder gcc mit verschiedenen Optimierungsstufen) gebe ich auf.

Ich greife also auf iOS SDK 4.x zurück, sofern ich ältere armv6-Geräte unterstütze.

Beispiel für Code:

// myView center=(160, 100)
CGPoint p=myView.center;  
// now p=(100,100) (what the heck?)
p.x=myView.center.x;
p.y=myView.center.y;
// now p=(160,100) 
p.y+=100;
// now p =(200,200) (what the heck?)

Möglicherweise ist der Speicher des armv7-Compilers beschädigt, und auf iOSSDK <5.0 verhält es sich wie erwartet.

Freundliche Grüße

9
jfieres

Ich bin mir nicht sicher, ob dies tatsächlich eine Lösung ist, aber ich habe festgestellt, dass das Ersetzen des definierten Strings in "architectures" ($ (ARCHS_STANDARD_32_BIT)) durch "armv6 armv7" das Kompilieren mit iOS5 als Basis und iOS4 als Bereitstellung ermöglichte Ziel und bestandene Validierung.

Ich verwende keine IOS5-exklusiven Bibliotheken oder Aufrufe, beabsichtige dies jedoch in meiner nächsten Version.

7
Peter Johnson

Ich musste $ (ARCHS_STANDARD_32_BIT) nicht durch armv7 ersetzen, damit die App kompiliert und in den App Store hochgeladen werden konnte.

Wie von MarkGranoff vorgeschlagen, habe ich armv6 einfach als einfachen Text hinzugefügt, indem ich Plus gedrückt habe und es einfach in Zeile zwei eingetippt habe.

1
Johan