2012-02-07 13 views
9

Ho framework personalizzati nel mio pacchetto di app per WebKit, WebCore e JavaScriptCore. Vorrei che tutti gli altri framework che dipendono dalle versioni di sistema di WebKit, WebCore o JavaScriptCore utilizzino anche le mie versioni personalizzate. Ad esempio, la mia versione personalizzata di Webkit carica framework di sistemi privati ​​che a loro volta dipendono dalla versione di sistema di WebKit. Ciò significa che sia il mio WebKit che il sistema WebKit vengono caricati, e in genere un incidente si verifica poco dopo.Qual è il modo più pulito per impostare la variabile ambientale DYLD_FRAMEWORK_PATH per una build di rilascio?

Il modo in cui io capisco questo dovrebbe essere fatto, è impostare la variabile ambientale DYLD_FRAMEWORK_PATH prima che il pacchetto di app inizi l'esecuzione (l'ordine di ricerca per il caricamento di framework può essere trovato qui: http://code.google.com/p/macdependency/wiki/SearchPaths). È possibile impostare variabili ambientali nel codice con setenv, ma non avrà effetto per il processo attualmente in esecuzione. Dovrei rilanciare nuovamente il processo perché abbia effetto. Vorrei evitare anche questo.

Quindi la mia domanda è qual è il modo migliore per impostare DYLD_FRAMEWORK_PATH prima dell'esecuzione del pacchetto della mia app? Questo deve funzionare anche in un pacchetto di app di rilascio. C'è un modo per eseguire uno script ogni volta che qualcuno fa clic sul mio pacchetto di app prima dell'esecuzione dell'eseguibile. O ci sono altri suggerimenti là fuori?

Grazie in anticipo.

+0

Cosa intendi per "tutti gli altri framework"? Se sono solo i tuoi framework privati, non puoi semplicemente costruirli collegandoti al tuo WebKit privato e ai relativi framework? –

+0

Bene da qualche parte nella montagna di codice che è il mio Webkit personalizzato, DataDectors.framework viene caricato se si fa clic con il tasto destro su una finestra (Solo su OSX Lion) e DataDectors è un framework di sistema privato (non creato da me). In questo caso, DataDectors dipende dalle versioni di sistema di WebKit e JavaScriptCore, quindi una volta che questo accade ci sono ora 2 copie di WebKit caricate, la mia e i sistemi. Ciò causa risultati imprevisti e un arresto anomalo. –

+1

Hai mai riuscito a farlo funzionare? Sto cercando di fare qualcosa di simile, e non ho molta fortuna con nessuno degli approcci suggeriti. – starkos

risposta

1

Suggerirei environment.plist o la chiave LSEnvironment nello info.plist. Controlla il link qui sotto.

https://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/EnvironmentVars.html

+1

Il file info.plist prende solo percorsi assoluti e ho bisogno del percorso all'interno del mio pacchetto di app, che tecnicamente può essere spostato. Se lo metto nel mio environment.plist è globale, perché se anche questo non sarebbe buono, perché altre applicazioni potrebbero usare la variabile ambientale. –

2

Jeff Wolski has the right idea facendo riferimento direttamente alla documentazione di Apple sull'argomento. This thread fornisce anche eccellenti consigli su come ottenere ciò che accade in Xcode, compresi casi angolari associati a metodi alternativi di specifica (ad esempio, utilizzando ~/.bash_profile direttamente per l'utente).

Il motivo per cui ho risposto è anche richiesto uno script che potrebbe essere in grado di assistervi (e un provider di taglie sembra avere lo stesso problema). Si scopre Webkit references such a script in its documentation, che si potrebbe desiderare di separare da the applicable Webkit source code. Questo dovrebbe darti ulteriori indicazioni su come, almeno secondo gli sviluppatori, dovresti farlo correttamente.

Buona fortuna con il/i progetto/i.

+0

Ho dato uno sguardo allo script di run-safari e lo script funzionava, ma non sono sicuro di come forzare l'esecuzione di uno script ogni volta che qualcuno fa clic su un pacchetto di app. Ho bisogno delle variabili ambientali impostate per la sessione dell'eseguibile all'interno del mio pacchetto di app. –

+0

@MichaelWildermuth Secondo [questa domanda] (http://stackoverflow.com/questions/281372/executing-shell-scripts-from-the-os-x-dock), esiste una pletora di opzioni. Almeno uno di questi soddisferà le tue esigenze, sia [tramite un file '.command'] (http://stackoverflow.com/a/281386/517815) o [l'approccio Script Editor marginalmente più elaborato] (http://stackoverflow.com/a/310183/517815). Se questi non funzionano per te, discuteremo alcune delle altre opzioni. :) – MrGomez

Problemi correlati