2013-04-06 20 views
7

Gibt es eine Möglichkeit, das zur Laufzeit verwendete Schema zu ermitteln?Den Namen des Xcode-Buildschemas zur Laufzeit finden

Möglicherweise gibt es eine bessere Möglichkeit, dies zu tun, ich versuche, die Access-Umgebung (Produktion vs Entwicklung) mithilfe des Namens Scheme festzulegen.

Derzeit verwende ich #define ENV @"PROD" in App-Prefix.pch Datei, dies zu tun, aber es gibt eine Chance, diese zu verpassen, wenn an Apple zur Überprüfung zu senden Pkg :(

Antwort

3

Wenn auf dem Simulator eine App läuft oder auf dem Gerät, das DEBUG Variable gesetzt, so dass Sie es von Ihrem Code verwenden:

#ifdef DEBUG 
    // Something 
#else 
    // Something else 
#endif 

Sie diese Variable von Ihrem Ziel Build-Einstellungen sehen:

Sobald die Run Konfiguration auf Debug (Produkt -> Schema -> Edit Scheme) gesetzt ist, wird diese Variable gesetzt werden:

enter image description here

+0

ah, ich wusste das nicht, thx für super schnelle Antwort :) – user390687

+0

Ja, dies mit der ** Build-Konfiguration ** ist wahrscheinlich besser als Schlussfolgerung über das Scheme, da Build-Konfiguration auch viele andere beeinflusst Einstellungen erstellen –

19

Ich suchte weit und breit nach einer Antwort auf diese weil ich wirklich nicht die Idee mag, zusätzliche Ziele oder zusätzliche Konfigurationssätze zu erstellen. Beide Optionen verursachen nur ein großes Konfigurationssynchronisierungsproblem.

So, nach Xcode für ein paar Stunden Hacking, ist das, was ich kam mit:

Schritt 1: Fügen Sie den Schlüssel „Scheme“, um Ihren Info.plist mit Typ-String.

Schritt 2: Ihr Standardschema bearbeiten und auf Erstellen -> Pre-Aktionen fügen Sie einen neuen Run Script mit dem folgenden:

/usr/libexec/PlistBuddy -c "Set :SchemeName \"$SCHEME_NAME\"" "$PROJECT_DIR/$INFOPLIST_FILE" 

Stellen Sie sicher, und ein Ziel wählen unter „Provide Buildeinstellungen von ".

Schritt 3: Jetzt duplizieren diese Regelung so oft, wie Sie möchten (Schemata verwalten ... -> bestehendes Schema auswählen -> Zahnrad-Symbol klicken -> Duplizieren) Zum Beispiel können Sie erstellen, Entwicklung, Staging , Produktion, App Store, usw. Vergessen Sie nicht, auf "shared" zu klicken, wenn Sie möchten, dass diese Schemata in der Versionskontrolle mitgeführt werden.

Schritt 4: Im Code, können Sie den Wert wie folgt abrufen:

NSString *schemeName = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"SchemeName"]; 

Nun kann der Code selbst zur Laufzeit korrekt konfigurieren. Keine fiesen Preprocessor-Makros, mit denen man umgehen muss, und keine spröden Konfigurationsfehler, die man beibehalten könnte.

+0

Das ist großartig und funktioniert! Ich habe nur den SchemeName Schlüssel in info.plist gesetzt, und wenn ich das Build starte, wird der Wert gesetzt. Hier ist meine Frage: Woher kommt $ SCHEME_NAME?Ich habe die Dokumentation für XCode-Umgebungsvariablen (und das Internet) durchsucht und finde keinerlei Hinweise darauf. – shmim

+0

Bevor ich es funktionierte, ließ ich den Script-Befehl ausführen, um alle Umgebungsvariablen auszugeben (Xcode setzt eine Menge zusammen, bevor das Skript ausgeführt wird). Ich habe gerade danach gesucht, bis ich einen wahrscheinlichen Verdächtigen gefunden habe. –

+0

Und in der Tat, wenn ich mich richtig erinnere, wird diese env var nur in den Schema bezogenen Pre/Post Aktionen gesetzt. Ich glaube nicht, dass es in den Build-Phasen in einem normalen Run-Skript festgelegt ist. –

Verwandte Themen