Aggiornamento del pacchetto di app su MacOS con servizio / processo daemon in esecuzione


1

Ho sviluppato un pacchetto di app MyApp che ha daemon il processo my-daemon-process 'e il file plist registrato correttamente sotto' /Library/LaunhDaemons/com.my-app.plist '.

Ora, ho una versione più recente del pacchetto di app che aggiorna anche 'my-daemon-process'. Sto provando ad aggiornarlo mentre 'my-daemon-process' dalla versione installata è già in esecuzione. Post aggiornamento, va in crash ciclico.

Se scarico manualmente e carico il servizio usando 'launchctl unload / load' funziona correttamente.

Nota: entrambe le versioni di 'my-daemon-process' si riferiscono a diverse versioni della stessa libreria condivisa di terze parti.

Cosa sto facendo di sbagliato qui? Sarà utile anche qualsiasi informazione su ciò che MacOS fa internamente mentre l'aggiornamento dell'app è utile.

Risposte:


0

Ok, quindi alla fine ho capito.

Il modo in cui MacOS gestisce l'aggiornamento del pacchetto in esecuzione è: sostituisce tutti i file e gli script ma NON scarica il file plist caricato in precedenza. Il nuovo processo / demone viene lanciato sotto la copia plist già caricata / memorizzata che proviene (ora) dalla versione precedente.

Il problema qui è stato plist dalla versione precedente e nuova differiscono. In precedenza stavo usando DYLD_LIBRARY_PATH e NON impacchettando libsqlite3 in / Applicazioni / MyApp / Contents / Library. Nella versione più recente, questo è stato modificato per rimuovere DYLD_LIBRARY_PATH (passato a @rpath) e includere libsqlite3 che è stato rimosso.

MacOS mantiene internamente alcuni metadati utilizzando libsqlite ogni volta che viene avviato qualsiasi processo all'interno dell'app. A causa dell'influenza di precedenti plist e DYLD_LIBRARY_PATH, stava esaminando la mia libsqlite spedita rispetto alla versione completa sotto "/ System / Library / Frameworks / ..." e quindi l'arresto anomalo.


Devo ancora capire come aggiorna la copia caricata del file plist . Molti commenti dicono defaults l'utilità lo fa ma non ne ho avuto alcun successo. Provato su MacOS 10.10 e 10.11
Dhaval Ved
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.