2014-12-03 13 views
8

Wie kann ich mit Swift zwischen zwei Xcode-Zielen unterscheiden? Die Idee ist, eine kostenlose und eine kostenpflichtige Version einer App mit der gleichen Code-Basis in Xcode zu erstellen.Unterscheiden Sie zwischen zwei Xcode-Zielen mit Swift

Mit Ziel C könnte ich Preprozessor-Makros verwenden, aber mit Swift sind diese nicht verfügbar.

Antwort

0

Seit Xcode 8 können Sie die Kompilierungsbedingungen in den Erstellungseinstellungen für jedes Ziel unter Aktive Kompilierungsbedingungen festlegen.

Active Compilation Conditions Screenshot

Mit diesen Set Sie verwenden können:

#if FREE 
    //do something 
#endif 

Weitere Einzelheiten finden Sie in den i40west answer und Kommentare.

20

Wechseln Sie in Xcode in die Erstellungskonfiguration für ein Ziel. Suchen Sie den Abschnitt mit der Bezeichnung Swift Compiler - Benutzerdefinierte Flags, der eine Einstellung mit der Bezeichnung enthält. Weitere Swift Flags.

Fügen Sie ein Befehlszeilenflag für den Compiler hinzu, um ein Flag hinzuzufügen, so wie Sie es mit dem C-Compiler tun würden.

Swift Compiler Flags

Jetzt hast du -D Something an den Swift-Compiler weitergegeben werden. In Ihrem Swift-Code können Sie jetzt tun:

#if Something 
    let foo = "bar" 
#endif 

Es sieht viel wie der C-Präprozessor, aber im Gegensatz zu C, alle Code in allen bedingten Abschnitte hat syntaktisch korrekt oder das Programm wird nicht kompiliert. Sie können also für jedes Ziel in den Erstellungseinstellungen eine Markierung setzen und sie in Ihrem Code verwenden.

+3

Noch wichtiger ist, dass der gesamte Code in einem '# if', aktiv oder nein, auch eine * komplette * syntaktische Einheit sein muss. Sie können also zB kein '# if/# else/# endif' nur um eine' func' Deklaration setzen und den Funktionskörper außerhalb des '# if's lassen. – rickster

+0

ist diese Arbeit in Storyboard ,, Ich möchte das Bild basierend auf Ziel im Storyboard –

+0

Ich verstehe es nicht ändern. sollte es nicht sein "wenn etwas == QA" sonst wenn etwas == Bühne "... Wie du es geschrieben hast, scheint es, dass die ** Existenz ** dieser Flagge alles ist, was notwendig ist. Was würde passieren, wenn zwei Builds die gleiche Flagge haben ?! – Honey

Verwandte Themen