2012-08-03 15 views
12

He intentado portar una compilación de línea de comandos de Mac PackageMaker a pkgbuild y productbuild pero estoy atascado. Lamentablemente, no he encontrado nada que documente cómo funcionan estos nuevos programas, excepto en las páginas del manual StackOverflow post y pkgbuild y productbuild.Portando el instalador de compilación de línea de comandos de PackageMaker a pkgbuild

Aquí está mi problema. He creado un directorio raíz de la instalación que tiene los siguientes archivos en ella:

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

La llamada línea que a continuación funcionó muy bien para PackageMaker. Creó un instalador que instaló todos los archivos anteriores.

$ /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 

Ahora estoy tratando de escribir esto con pkgbuild y tengo un gran problema. Yo uso la siguiente llamada:

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

Este comando construye un instalador que copia el directorio MyProgram.framework en/Library/Frameworks. Sin embargo, no instala el archivo MyProgram.app en el directorio/Applications. Cuando miro a los registros del instalador veo este mensaje:

Aplicaciones/MyProgram.app trasladó a /some_path/Applications/MyProgram.app

¿Alguien puede arrojar algo de luz sobre por qué esto no es' t agregar el archivo MyProgram.app al directorio/Applications como lo estaba haciendo PackageMaker?

Respuesta

4

Lamentablemente, la respuesta a esta pregunta no era exactamente lo que estaba buscando. No pude encontrar la manera de eliminar PackageMaker del proceso. Sin embargo, hay una solución que incluye pkgutil junto con PackageMaker para crear un instalador con mensaje de bienvenida personalizado, licencia e imagen de fondo completamente en la línea de comandos. La GUI de PackageMaker es NO se requiere. Los pasos son los siguientes:

  1. Ejecute el ejecutable packagemaker command line en la estructura de directorios especiales. Esta estructura de directorio refleja el sistema de archivos de Mac. Lea más en el viejo pero confiable "PackageMaker How-to" tutorial.
  2. Ejecute pkgutil (pkgutil --expand) para extraer el contenido del paquete
  3. Eche un vistazo a los contenidos e identifique lo que desea alterar. Algunas opciones son el mensaje de bienvenida, licencia e imagen de fondo.
  4. Agregue comandos para alterar estos archivos a través de la línea de comando. Revise el "Automating Apple's PackageMaker" tutorial para obtener más información. La forma más fácil es ejecutar algo como esto echo '<background file="your_background.png">'.
  5. Ejecute pkgutil (pkgutil --flatten) para reconstruir el paquete.
1

En primer lugar, ¿está seguro de que necesita un instalador? Podrías poner el marco dentro de la aplicación. El instalador y pkgbuild son un poco inestables, por decir lo menos.

Ahora al problema en cuestión: la reubicación tiene que ver con el hecho de que un usuario podría mover la Aplicación desde/Aplicaciones a decir/Aplicaciones de trabajo/Aplicaciones privadas. En su caso, el Instalador probablemente encuentre su Aplicación en la carpeta de compilación y la instale sobre esta.

Creo que el instalador usa el identificador de paquete de aplicación y Spotlight para la reubicación, por lo que para las pruebas podría agregar la carpeta de compilación a la lista de ignorar de Spotlight.

Puede definir en el Component Property ListBundleIsRelocatable. Si realmente tiene que instalar un marco global, este es un paquete en el que desea establecer BundleIsRelocatable en falso.

1

The question you reference tiene prácticamente todo lo que necesita para eliminar Package Maker por completo. Una cosa que agregué es usar sed después de la invocación productbuild --synthesize ... para insertar líneas en el archivo de distribución. Por ejemplo, aquí hay algunos comandos de terminal que uso una vez que ya se haya creado el paquete de componentes:

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" 

Esto evita tener que utilizar pkgutil --expand y pkgutil --flatten para modificar el instalador.

Cuestiones relacionadas