2014-12-03 8 views
10

Ho installato il plugin Xcode per XcodeColors da robbie hanson. (vedi https://github.com/robbiehanson/XcodeColors)Come posso ottenere una variabile di ambiente da Xcode nella mia app

Se provo in un parco giochi

let dict = NSProcessInfo.processInfo().environment 
let env = dict["XcodeColors"] as? String 

ENV sarebbe "SI".

Ma, se uso lo stesso codice nella mia app, env sarebbe nullo, perché l'app è in esecuzione sul proprio processo.

Perché vorrei stampare il testo colorato con sequenze di esc specifiche solo se il plugin è installato, voglio ottenere le informazioni su Xcode env var.

Come posso farlo?

+0

Sto avendo il stesso problema. Hai scoperto una soluzione? – Tiago

risposta

12

Modifica lo schema -> Seleziona la sezione "Esegui" -> Seleziona la scheda "Argomenti" -> Aggiungi la variabile di ambiente.

Fare attenzione, le variabili di ambiente non vengono impostate se si esegue l'applicazione senza XCode.

+0

grazie, questo approccio l'ho usato anch'io. Ma, se condivido la mia fonte con un altro sviluppatore, devo spiegare cosa deve fare, avendo XcodeColors installato o meno. Voglio farlo dalla mia app automaticamente. – MUECKE446

+0

Si noti che Xcode non è gestito da BASH, quindi l'ambiente qui definito, è vissuto solo all'interno di Xcode. – Efren

+0

Vedere anche un blog utile di NSHipster sulle impostazioni dell'ambiente disponibili: http://nshipster.com/launch-arguments-and-environment-variables/ – Efren

2

Ho incontrato lo stesso problema con XcodeColors. Ho finito per risolverlo con una semplice fase di creazione di script. Controlla se XcodeColors è installato o meno e imposta/aggiunge una chiave a Info.plist nella build. Quindi creare un nuovo "Run script di build Phase" e mettere questo in là:

xcodeColorsDir="$USER_LIBRARY_DIR/Application Support/Developer/Shared/Xcode/Plugins/XcodeColors.xcplugin/" 
xcodeColorsInstalled=0 
if [ -d "$xcodeColorsDir" ]; then 
    # Directory exists, therefore, XcodeColors is installed 
    xcodeColorsInstalled=1 
fi 

infoPlistPath="${TARGET_BUILD_DIR}/${INFOPLIST_PATH}" 
existingValue=$(/usr/libexec/PlistBuddy -c "Print :XcodeColorsInstalled" "$infoPlistPath") 
if [ -z "$existingValue" ]; then 
    # Key already exists so overwrite it 
    /usr/libexec/PlistBuddy -c "Add :XcodeColorsInstalled bool $xcodeColorsInstalled" "$infoPlistPath" 
else 
    # Key doesn't exist yet 
    /usr/libexec/PlistBuddy -c "Set :XcodeColorsInstalled $xcodeColorsInstalled" "$infoPlistPath" 
fi 

Quindi, è possibile accedere al param Info.plist durante il runtime con qualcosa di simile:

func isColorizedLoggingEnabled() -> Bool { 
    if let colorizedLoggingEnabled = NSBundle.mainBundle().infoDictionary?["XcodeColorsInstalled"] as? Bool { 
     return colorizedLoggingEnabled 
    } else { 
     return false 
    } 
} 
Problemi correlati