2013-04-06 8 views
7

Esiste un modo per scoprire lo schema utilizzato in fase di esecuzione?Trova il nome dello schema Xcode Build in fase di esecuzione

Potrebbe esserci un modo migliore per farlo, sto cercando di impostare l'ambiente di accesso (produzione vs sviluppo) utilizzando il nome dello schema.

Attualmente io uso #define ENV @"PROD" in App-Prefix.pch file per fare questo, ma c'è la possibilità di perdere questa pkg per l'invio ad Apple per la revisione :(

risposta

3

Quando si esegue un'applicazione sul simulatore o sul dispositivo, il DEBUG variabile è impostata, che consente di utilizzare dal proprio codice:

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

si può vedere questa variabile da impostazioni di generazione del bersaglio:

Non appena la configurazione Run si trova su Debug (Prodotto -> Scheme -> Modifica schema), questa variabile sarà impostata:

enter image description here

+0

ah, non lo sapevo, grazie per la risposta super veloce :) – user390687

+0

Sì, fare questo usando la ** Configurazione build ** è probabilmente meglio che dedurlo tramite lo schema, poiché la configurazione della build influisce anche su molti altri costruire le impostazioni. –

19

Ho cercato in lungo e in largo per una risposta a questo perché non mi piace davvero l'idea di creare bersagli extra né set di configurazioni extra. Entrambe queste opzioni creano un enorme problema di sincronizzazione della configurazione.

Così, dopo l'hacking Xcode per un paio d'ore, questo è ciò che mi si avvicinò con:

Fase 1: Aggiungere la chiave "SchemeName" al tuo Info.plist con tipo stringa.

Fase 2: Modifica il tuo schema predefinito e Build -> Pre-Azioni Aggiungi un nuovo Esegui script con il seguente:

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

Assicurati di selezionare un target da sotto "Fornire impostazioni di generazione da ".

Fase 3: Ora duplicate tale regime tutte le volte che ti piace (Gestisci schemi ... -> Seleziona schema esistente -> Fare clic sull'icona dell'ingranaggio -> Duplica) Ad esempio, è possibile creare sviluppo, Messa in scena , Produzione, App Store, ecc. Non dimenticarti di cliccare su "condiviso" se vuoi che questi schemi vengano portati avanti nel controllo della versione.

Fase 4: Nel codice, è possibile recuperare il valore in questo modo:

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

Ora, il codice può configurarsi in modo corretto in fase di esecuzione. Non ci sono macroscopiche macro di preprocessore da gestire e nessun fragile problema di configurazione da mantenere.

+0

Questo è fantastico e funziona! Ho impostato solo la chiave 'SchemeName' in info.plist e quando eseguo la build il valore è impostato. Ecco la mia domanda: da dove viene $ SCHEME_NAME?Ho cercato la documentazione per le variabili di ambiente XCode (e Internet) e non ho trovato alcun riferimento ad esso. – shmim

+0

Prima di farlo funzionare, ho avuto il comando Esegui script echo fuori tutte le variabili di ambiente (Xcode imposta un gruppo prima dell'esecuzione dello script). Ho quindi cercato attraverso di esso fino a quando ho trovato un probabile sospetto. –

+0

E infatti, se ricordo bene, questo env var è impostato solo nelle azioni Pre/Post relative allo schema. Non penso che sia impostato in un normale Run Script nelle fasi di costruzione. –

Problemi correlati