2016-04-21 12 views
5

Ho un progetto Xcode con più destinazioni. Diciamo che i nomi di destinazione sono AppFreeVersion e AppPaidVersion. Condividono lo stesso codice base, ma voglio implementare una logica che è solo per uno degli obiettivi.Come posso ottenere il nome del target attualmente in esecuzione in Xcode?

Senza modificare il mio schema o le impostazioni di costruzione, c'è un modo per ottenere la stringa del mio attuale nome di destinazione? La soluzione data in this question mi richiede di passare una variabile di ambiente nell'impostazione di generazione, che non voglio fare.

risposta

5

Come aggiungere ${TARGET_NAME} nel file info.plist?

E immagino sai già come farlo

Obj-C

[[NSBundle mainBundle] objectForInfoDictionaryKey:key_name]; 

Swift

let targetName = NSBundle.mainBundle().infoDictionary?[key_name] as String 
+0

È ancora disponibile in Xcode 9? L'ho aggiunto a Info.plist, ma non sembra funzionare – brainray

0

Basta impostare il nome di destinazione nel vostro schema -> Variabili d'ambiente -> aggiungi Nome e valore. es: targetName = "mytesttarget"

Obj-c

NSDictionary * amb = [ambiente [NSProcessInfo ProcessInfo]];

NSString * targetName = envir [@ "targetName"];

Swift

let envir = NSProcessInfo.processInfo(). Ambiente

lasciare targetName = envir [ "targetName"]

5

Swift 3.0 Solution.

func getTargetName() -> String { 
    return Bundle.main.infoDictionary?["CFBundleName"] as! String 
} 
+0

CFBundleName non è il nome di destinazione – brainray