Bedingt Code vor dem Compiler verstecken

7

Also hier ist das Problem. Ich werde bald ein Update für iOS veröffentlichen, das einige Probleme in iOS 7 beheben wird. Um dies zu tun, muss ich einige spezielle iOS 7 Funktionen / Typen verwenden. Ich habe absolut sicher, dass iOS 7 Code nur auf iOS 7 und Fallback auf anderen Code für vor iOS 7 ausgeführt wird. Natürlich darf ich nicht mit der aktuellen Xcode Beta einreichen, also versuche ich zu kompilieren mit der aktuellen Xcode-Version. Ich kann jedoch keine Möglichkeit finden, diese spezielle Warnung zu deaktivieren:

Use of undeclared identifier '<Redacted>'.

Kennt jemand eine Möglichkeit, diese Warnung mit einem #pragma zu deaktivieren? Ich habe eine Reihe von verschiedenen versucht einschließlich

-w , -Weverthing , -Wall

aber nichts scheint zu funktionieren.

UPDATE Antwort: Das kann natürlich nicht, weil der Compiler keine Kennung kompilieren kann, von der er nichts weiß. Meine Lösung bestand darin, einfach ein #define zu erstellen:

#define <redacted> 1

UPDATE 2 Die Antwort unten machte es tatsächlich viel einfacher. Ich hatte bereits eine #define Xcode5Code(code, alt) erstellt, mit der ich Code-Blöcke bedingt ausführen konnte. Indem Sie es mit der Lösung von @maddy ändern:

%Vor%

Dies ermöglicht es mir, Code-Blöcke mit dem Compiler einfach zu verstecken:

%Vor%

Der Hauptvorteil der Verwendung von #define Xcode5Code besteht darin, dass Xcode es für Sie automatisch vervollständigt, was viel einfacher ist als die Verwendung der vollständigen #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 , die Xcode nicht automatisch vervollständigt.

Dies unterscheidet nicht wirklich zwischen iOS 7 und vor iOS 7 Geräten. Es unterscheidet nur, welche Version von iOS der aktuelle Xcode verarbeiten kann. Um zwischen iOS-Geräteversionen zu unterscheiden, verwende ich:

%Vor%

Das Obige ist übrigens Apples Code. Um ein wenig mit der NDA herumzutanzen, kann ich sagen, dass dies hilft, die Ansicht eines Root-Controllers festzulegen, da dies sowohl von der Version von Xcode, die Sie verwenden, als auch von der Version von iOS auf dem Gerät abhängt. Und wenn Sie versuchen, sowohl den Beta-Code als auch den Produktionscode zu verwalten, kann dies sehr hilfreich sein. Sobald Sie Apps mit Xcode 5 einreichen können, ist der #define Xcode5Code nicht mehr erforderlich.

    
Aaron Hayman 23.08.2013, 14:00
quelle

1 Antwort

22

Wenn Sie Ihre App mit zwei verschiedenen Versionen von Xcode oder zwei verschiedenen Base SDK-Einstellungen kompilieren möchten, sollten Sie Compiler-Direktiven verwenden:

%Vor%

Verwenden Sie das nicht für Laufzeitprüfungen. Diese Lösung wird nur verwendet, wenn Sie Ihren Code mit zwei verschiedenen Versionen kompilieren müssen. Ein Beispiel wäre, dass Sie iOS 7-Code hinzugefügt haben, aber Sie müssen den Code noch mit Xcode 4.6 kompilieren. Mithilfe der Kompilierungsanweisungen können Sie den iOS 7-Code mithilfe des älteren Base SDK aus dem Compiler "ausblenden".

Weitere Informationen zu diesen und geeigneten Laufzeitprüfungen finden Sie im "SDK-Kompatibilitätshandbuch" in den Dokumenten.

    
rmaddy 23.08.2013, 15:14
quelle

Tags und Links