El instalador de paquetes de Mac instala la carpeta "Contenido" en / Aplicaciones en lugar del paquete

2

Cuando trato de usar el empaquetado con mi .app para crear un instalador de Mac, y ejecuto el instalador, me crea una carpeta llamada "Contenido" en mi carpeta / Aplicaciones, en lugar de la "aplicación de paquete" como debería.

He probado con pkgbuild + productbuild:

pkgbuild --component "./myapp.app" --version 1 --install-location /Applications component.pkg
productbuild  --package-path "component.pkg" --distribution "./Distribution.xml" --package-path "./Temp" --resources "./Resources" --sign mycert "myapp.pkg"

Y solo con productbuild:

productbuild --component "./myapp.app" /Applications -s mycert myapp.pkg

En ambos casos, ejecuto el instalador, todo parece estar bien, pero en la carpeta Aplicaciones veo "Contenido" (que es el contenido del paquete de aplicaciones)

He intentado con "./myapp.app/" también en el atributo --component, e incluso agregando "/Applications/myapp.app" en la --install-location

    
pregunta FlamingMoe 14.03.2015 - 09:37

2 respuestas

1

Me tomó algunos intentos para que esto funcionara (el instalador logró hacer algunas cosas realmente extrañas en mis primeros intentos). Pero esto parece funcionar de manera confiable.

Creé una carpeta temporal con solo la aplicación que quería empaquetar (dejar la aplicación en otro lugar parecía dar como resultado el extraño comportamiento mencionado anteriormente), luego empaquetarlo desde allí. Así que creé una carpeta temporal llamada "prueba" en mi escritorio y dejé caer la aplicación allí solo. El siguiente comando luego se traduce de manera confiable en un paquete de trabajo en mi escritorio.

productbuild --component ~/Desktop/test/myapp.app /Applications ~/Desktop/myapp.pkg --sign "my certificate identity name"

Algo que es útil cuando la prueba es ejecutar sudo opensnoop | grep installd en una Terminal al mismo tiempo. Genera una gran cantidad de resultados, pero debería poder ver el paquete de aplicaciones que se crea en algo así como /var/folders/zz/GIBBERISH/C/PKInstallSandboxManager/GIBBERISH.activeSandbox/Root/ y luego se copia en su destino final.

Nota: No estoy seguro de por qué está usando -s en el segundo ejemplo del comando productbuild que dio en su pregunta. Existen tres opciones de argumentos para la creación de productos que comienzan con "s" (síntesis, scripts y signos) y la página de manual no menciona el uso de "-s" más cortos para ninguno de ellos. Tal vez este es el problema. Por supuesto que podría ser un error tipográfico. :)

    
respondido por el Alistair McMillan 23.03.2015 - 01:04
0

Creo que el problema aquí es que estás usando --component en lugar de --root . Los documentos no son claros en cuanto a su uso, pero parece que, al igual que con la raíz, debe especificar la carpeta que encierra el paquete .app no la ruta del paquete real en sí. Cometí este error al usar --root y presencié que solo el contenido de mi paquete se instaló en /Applications . Se requiere la misma precaución cuando se compila el paquete utilizando pkgbuild.

Copiaría mi .app en una carpeta ./build y luego:

pkgbuild --analyze --root ./build MyApp.plist 
pkgbuild --root ./build --component-plist MyApp.plist --identifier co.uk.MyApp --version 0 --install-location /Applications MyApp.pkg
productBuild --synthesize --package ./MyApp.pkg ./Distribution.xml
productBuild --distribution ./Distribution.xml --resources ./Resources --sign "Developer ID Installer: My Id" --package-path . ./MyApp-ver-whatever.pkg
    
respondido por el Jonathan Mitchell 22.07.2016 - 23:41

Lea otras preguntas en las etiquetas