2012-08-03 18 views
12

Ho tentato di eseguire il porting di una riga di comando Mac PackageMaker su pkgbuild e productbuild ma sono bloccato. Sfortunatamente non ho trovato nulla di tutto ciò che documenta come funzionano questi nuovi programmi eccetto per le pagine man StackOverflow post e pkgbuild e productbuild.Porting Package Generatore di riga di comando PackageMaker per pkgbuild

Ecco il mio problema. Ho creato una directory principale di installazione che ha i seguenti file in essa contenuti:

/some_path/Applications 
         /MyProgram.app 
      /Library 
        /Frameworks 
          /MyFramework.framework 
                /[library files...] 

La chiamata da riga di comando di seguito ha lavorato molto per PackageMaker. Ha creato un programma di installazione che ha installato tutti i file sopra.

$ /Developer/usr/bin/packagemaker \ 
    --title "My Program" \ 
    --root /some_path \ 
    --version 1.0.0 \ 
    --filter "\.DS_Store" \ 
    --resources ./resources/ \ 
    --scripts ./scripts/ \ 
    --root-volume-only \ 
    --domain system \ 
    --verbose \ 
    --no-relocate \ 
    --target 10.5 \ 
    --id com.my_company.pkg \ 
    --out MyProgram.pkg 

Ora sto provando a scrivere questo con pkgbuild e avendo un grosso problema. Io uso la seguente chiamata:

$ pkgbuild \ 
    --root /some_path \ 
    --version 1.0.0 \ 
    --install-location "/" \ 
    --scripts "./scripts/" \ 
    --identifier "com.my_company.pkg" \ 
    MyProgram.pkg 

Questo comando crea un programma di installazione che copia la directory MyProgram.framework in/Library/Frameworks. Tuttavia, non installa il file MyProgram.app nella directory/Applications. Quando guardo i log di installazione vedo questo messaggio:

Applicazioni/MyProgram.app trasferito a /some_path/Applications/MyProgram.app

Qualcuno può far luce sul motivo per cui questo isn' t aggiungendo il file MyProgram.app nella directory/Applications come stava facendo PackageMaker?

risposta

4

Purtroppo la risposta a questa domanda non era esattamente quello che stavo cercando. Non riuscivo a capire come eliminare PackageMaker dal processo. Tuttavia esiste una soluzione che include pkgutil insieme a PackageMaker per creare un programma di installazione con messaggio di benvenuto personalizzato, licenza e immagine di sfondo interamente sulla riga di comando. La GUI di PackageMaker è NON richiesta. I passaggi sono i seguenti:

  1. Eseguire l'eseguibile packagemaker command line nella struttura di directory speciale. Questa struttura di directory riflette il file system Mac. Maggiori informazioni nel vecchio ma affidabile "PackageMaker How-to" tutorial.
  2. Esegui pkgutil (pkgutil --expand) per estrarre il contenuto della confezione
  3. Dai un'occhiata ai contenuti e identifica ciò che vuoi modificare. Alcune opzioni sono il messaggio di benvenuto, la licenza e l'immagine di sfondo.
  4. Aggiungi comandi per modificare questi file tramite la riga di comando. Rivedere lo "Automating Apple's PackageMaker" tutorial per ulteriori informazioni. Il modo più semplice è solo per eseguire qualcosa come questo echo '<background file="your_background.png">'.
  5. Eseguire pkgutil (pkgutil --flatten) per ricostruire il pacchetto.
1

Prima di tutto, sei sicuro di aver bisogno di un programma di installazione? Potresti inserire la struttura all'interno dell'applicazione. L'Installer e il pkgbuild sono un po 'sfocati, per non dire altro.

Ora al problema in questione: il trasferimento ha a che fare con il fatto che un utente può spostare l'applicazione da/Applicazioni per dire/WorkApplications/PrivateApplications. Nel tuo caso, il programma di installazione probabilmente trova la tua applicazione nella cartella di build e la installa su questa.

Penso che l'Installer utilizzi l'Application Bundle Identifier e Spotlight per il riposizionamento, quindi per i test è possibile aggiungere la cartella di compilazione all'elenco di Ignora Spotlight.

È possibile definire nello Component Property ListBundleIsRelocatable. Se devi davvero installare un framework globale, questo è un pacchetto in cui vuoi impostare BundleIsRelocatable su false.

1

The question you reference ha praticamente tutto il necessario per eliminare completamente Package Maker. Una cosa che ho aggiunto è utilizzare sed dopo l'invocazione productbuild --synthesize ... per inserire le righe nel file di distribuzione. Ad esempio, ecco alcuni comandi terminali che uso una volta che abbia già costruito il pacchetto componente:

productbuild --synthesize --package "components/SubPackage.pkg" "distribution.xml" 
sed -i "" \ 
-e '$ i\ 
\ <title>Installer Title</title>' \ 
-e '$ i\ 
\ <background file="background.png" alignment="left" scaling="proportional" />' \ 
-e '$ i\ 
\ <welcome file="welcome.rtf" />' \ 
"distribution.xml" 
productbuild --distribution "distribution.xml" --resources "resources/" --package-path "components/" "Installer.pkg" 

Ciò evita di dover utilizzare pkgutil --expand e pkgutil --flatten per modificare il programma di installazione.

Problemi correlati