2014-03-13 9 views
5

Ich habe meinen Xcode vor kurzem auf Version 5.1 aktualisiert. Nach dem Update läuft es gut mit allen Simulatoren außer iOS 7.1, in denen es einen Mach-O Link-Fehler gibt. Darüber hinaus gibt es nur eine 64-Bit-Architekturoption auf der Registerkarte "Build-Einstellung". Laut mir ist es die Ursache aller Probleme & Fehler. Kennt jemand Grund dafür &, wie man es löst?iOS 7.1 gibt einen Fehler nach dem Update auf Xcode 5.1

Hier sind einige Warnungen & Fehler, die ich habe:

Warnung:

Values of type 'NSInteger' should not be used as format arguments; add an explicit cast to 'long' instead 

Fehler:

Symbol(s) not found for architecture x86_64 

Dank.

+0

möglich Duplikat von [Arm64-Architektur in xcode 5.1] (http://stackoverflow.com/questions/22323039/arm64-architecture-in-xcode-5-1) – nschum

+0

Google it Buddy –

Antwort

14

Xcode 5.1 hat die Standard-Projekteinstellungen geändert. Unter anderem enthält es jetzt die arm64 Architektur für das Projekt - aber eine Menge von Drittanbieter-Projekten unterstützen das noch nicht, also empfehle ich, es wieder aus den Architekturen Einstellungen zu entfernen (so dass Sie mit und armv7s). Halten Sie es in der gültigen Architekturen Einstellung, obwohl - dies gibt an, auf welchen Architekturen es ausgeführt werden kann.

Es hat auch die Standardaktivierung von einigen zusätzlichen Warnungen, wie die Typumwandlung zu langen Warnung eingeführt - das gleiche gilt hier, wenn Sie einige andere Bibliotheken (als Quellcode) verwenden, können Sie viele Warnungen erhalten, die Sie nicht (oder will nicht) viel darüber machen. Sie können die Warnungen für diese Projekte erneut deaktivieren oder die Projekteinstellungen nicht sofort aktualisieren.

+3

Die Architekturen sollten auf armv7 zurückgesetzt werden und armv7s, wenn Sie Probleme mit Bibliotheken haben, aber Sie sollten die gültigen Architekturen NICHT zurücksetzen, da die App dann nicht auf neuen iPhones laufen würde. – Christian

+0

Sie haben Recht - ich habe meine Antwort bearbeitet. – TheEye

3

In der Tat enthält XCode jetzt die arm64-Architektur. NSInteger ist etwas ganz anderes jetzt, wie es in NSObjCRuntime.h ist zu definieren:

#if __LP64__ || (TARGET_OS_EMBEDDED && !TARGET_OS_IPHONE) || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64 
typedef long NSInteger; 
typedef unsigned long NSUInteger; 
#else 
typedef int NSInteger; 
typedef unsigned int NSUInteger; 
#endif 

damit umgehen Sie Ihre Code-Basis verbessern sollte. Zuallererst muss man wirklich konsequent sein. Weisen Sie NSInteger nur NSInteger und nicht Int zu. Vermeiden Sie alle Arten von:

int i = [aString integerValue] (as it returns a NSInteger)

aber

NSInteger i = [aString integerValue] (and if it's a long type then you won't have any trouble.)

Darüber hinaus ein weiteres Problem, das Sie haben könnten, wenn Sie eine Zeichenfolge von einem Wert erstellen möchten. Was Sie tun können, ist so etwas wie:

#define cL(v) (long)(v) 
#define cUL(v) (unsigned long)(v) 

NSLog(@"array.count: %ld", cUL(anArray.count)); 

array.count gibt ein unsigned int unter ARMv7 (n) und einem unsigned long unter arm64. Indem Sie immer in einen unsignierten Long werfen, werden Sie keine Warnung mehr bekommen und, was noch wichtiger ist, keinen Bug bekommen.

Diese "Logik" haben es von Apple selbst auf einigen Tech-Gespräche Videos eingeführt: https://developer.apple.com/tech-talks/videos/ (. Video "Architecting Moderne iOS Games" Spielen Sie das Video um 10m00s)

13

Got Einstellungen zu bauen -> Architekturen

Sie haben wahrscheinlich Standard-Architekturen, richtig?

Ab Xcode 5.1 Standard Architectures enthält arm64, die Sie nicht unterstützen können.

Andere auswählen .. Doppelklick $ (ARCHS_STANDARD) und auf $ ändern (ARCHS_STANDARD_32_BIT)

Hinweis: Dies ist eine temporäre Lösung. Sie verwenden wahrscheinlich eine statische Bibliothek, die nicht mit einem 64-Bit-Segment geliefert wurde. Sehen Sie, ob es eine gibt, und wechseln Sie dann die Architektur zurück zu Standardarchitekturen.

+1

Mein Hintern wurde 2 Minuten vor der Client-Demo gespeichert und konnte nicht im Simulator bereitgestellt werden! Danke, Andrew. Jetzt zurück zu stellen und herauszufinden, warum "mehrere Methoden namens" mit nicht übereinstimmenden Ergebnis zählen, Parameter Typen ... "erscheint mit neuen arch aber nicht alt. ;-) –

+0

thnQ @Andrew du hast viel geholfen – ashokdy

+0

Niiiiiiiicccce .. – pnizzle