Preciso criar um bom instalador para um aplicativo Mac. Quero que seja uma imagem de disco (DMG), com um tamanho predefinido, layout e imagem de fundo.
Eu preciso fazer isso programaticamente em um script, para ser integrado a um sistema de compilação existente (mais um sistema de pacote, na verdade, pois ele apenas cria instaladores. As compilações são feitas separadamente).
Já fiz a criação do DMG usando "hdiutil", o que ainda não descobri é como criar um layout de ícone e especificar um bitmap de plano de fundo.
Respostas:
Depois de muita pesquisa, encontrei esta resposta e a coloco aqui como resposta para minha própria pergunta, para referência:
Verifique se a opção "Ativar acesso para dispositivos auxiliares" está marcada em Preferências do sistema >> Acesso universal. É necessário que o AppleScript funcione. Pode ser necessário reiniciar após essa alteração (não funcionará de outra maneira no Mac OS X Server 10.4).
Crie um DMG R / W. Deve ser maior do que o resultado será. Neste exemplo, a variável bash "size" contém o tamanho em Kb e o conteúdo da pasta na variável bash "source" será copiado no DMG:
Monte a imagem do disco e armazene o nome do dispositivo (você pode usar o modo de suspensão por alguns segundos após esta operação):
Armazene a imagem de plano de fundo (no formato PNG) em uma pasta chamada ".background" no DMG e armazene seu nome na variável "backgroundPictureName".
Use AppleScript para definir os estilos visuais (o nome de .app deve estar na variável de bash "applicationName", use variáveis para as outras propriedades, conforme necessário):
Finalize o DMG definindo as permissões corretamente, compactando e liberando-o:
No Snow Leopard, o AppleScript acima não define a posição do ícone corretamente - parece ser um bug do Snow Leopard. Uma solução alternativa é simplesmente chamar fechar / abrir depois de definir os ícones, ou seja:
fonte
sleep
depois de montar a imagem. Quão mais? Não é possível esperar deterministicamente pela conclusão do processo? Mesmo para odelay 5
seu AppleScript. Sempre desconfio desses tempos de espera arbitrários, tendo tido uma experiência muito ruim com eles. 2. Na etapa 6, você ligasync
duas vezes - por quê?Há um pequeno script do Bash chamado create-dmg que cria DMGs sofisticados com planos de fundo personalizados, posicionamento personalizado de ícones e nome do volume.
Eu o construí há muitos anos para a empresa que eu dirigia na época; sobrevive da contribuição de outras pessoas desde então e supostamente funciona bem.
Há também o node-appdmg, que parece um esforço mais moderno e ativo, baseado no Node.js. confira também.
fonte
/Applications
se o aplicativo detectar que está sendo executado~/Downloads
. Veja também este artigo antigo de John Gruber .Não vá lá. Como desenvolvedor de longo prazo para Mac, posso garantir que nenhuma solução está realmente funcionando bem. Tentei tantas soluções, mas nem todas são boas. Penso que o problema é que a Apple não documenta realmente o formato de metadados para os dados necessários.
Eis como faço isso há muito tempo, com muito sucesso:
Crie um novo DMG, gravável (!), Grande o suficiente para armazenar os arquivos binários e extras esperados, como leia-me (esparsos podem funcionar).
Monte o DMG e forneça um layout manualmente no Finder ou com as ferramentas que mais lhe convierem (consulte o link FileStorm na parte inferior para obter uma boa ferramenta). A imagem de plano de fundo geralmente é uma imagem que colocamos em uma pasta oculta (".algo") no DMG. Coloque uma cópia do seu aplicativo lá (qualquer versão, mesmo a desatualizada serve). Copie outros arquivos (aliases, leia-me, etc.) que você deseja para lá. Novamente, as versões desatualizadas funcionarão perfeitamente. Verifique se os ícones têm os tamanhos e posições corretos (IOW, faça o layout do DMG da maneira que você deseja).
Desmonte o DMG novamente, todas as configurações devem estar armazenadas agora.
Escreva um script DMG de criação, que funcione da seguinte maneira:
Esse método pode não parecer ideal, mas confie em mim, ele funciona muito bem na prática. Você pode colocar o DMG original (modelo DMG) mesmo sob controle de versão (por exemplo, SVN); portanto, se você o alterar ou destruir acidentalmente, basta voltar para uma revisão onde ainda estava tudo bem. Você pode adicionar o modelo DMG ao seu projeto Xcode, juntamente com todos os outros arquivos que pertencem ao DMG (leia-me, arquivo URL, imagem de plano de fundo), todos sob controle de versão e, em seguida, criar um destino (por exemplo, destino externo chamado "Criar DMG") e execute o script DMG acima e adicione seu destino principal antigo como destino dependente. Você pode acessar arquivos na árvore do Xcode usando $ {SRCROOT} no script (é sempre a raiz de origem do seu produto) e pode acessar produtos de construção usando $ {BUILT_PRODUCTS_DIR} (é sempre o diretório em que o Xcode cria os resultados da construção) .
Resultado: Na verdade, o Xcode pode produzir o DMG no final da compilação. Um DMG que está pronto para lançamento. Não apenas você pode criar um DMG relase muito fácil dessa maneira, como também pode fazê-lo em um processo automatizado (em um servidor sem cabeça, se quiser), usando o xcodebuild na linha de comando (compilações noturnas automatizadas, por exemplo).
Em relação ao layout inicial do modelo, o FileStorm é uma boa ferramenta para fazê-lo. É comercial, mas muito poderoso e fácil de usar. A versão normal é inferior a US $ 20, por isso é realmente acessível. Talvez alguém possa automatizar o FileStorm para criar um DMG (por exemplo, via AppleScript), nunca tentei isso, mas depois de encontrar o DMG de modelo perfeito, é realmente fácil atualizá-lo para cada versão.
fonte
Atualizando esta pergunta, fornecendo esta resposta.
appdmg
é um programa de linha de comando simples, fácil de usar e de código aberto que cria arquivos dmg a partir de uma simples especificação json. Dê uma olhada no leia-me no site oficial:https://github.com/LinusU/node-appdmg
Exemplo rápido:
Instalar appdmg
Escreva um arquivo json (
spec.json
)Rodar programa
(aviso legal. Eu sou o criador do appdmg)
fonte
Para aqueles de vocês que estão interessados neste tópico, devo mencionar como crio o DMG:
Onde
fonte
Meu aplicativo, DropDMG , é uma maneira fácil de criar imagens de disco com imagens de plano de fundo, layouts de ícones, ícones de volume personalizados e contratos de licença de software. Ele pode ser controlado a partir de um sistema de compilação pela ferramenta de linha de comando "dropdmg" ou pelo AppleScript. Se desejar, os arquivos RTF de imagem e licença podem ser armazenados no seu sistema de controle de versão.
fonte
Encontrei este ótimo aplicativo para automatizar o processo - http://www.araelium.com/dmgcanvas/, você deve dar uma olhada se estiver criando o instalador do dmg para seu aplicativo para mac
fonte
Para criar um DMG de boa aparência, agora você pode usar apenas fontes abertas bem escritas:
fonte
Se você deseja definir o ícone de volume personalizado, use o comando abaixo
Agora crie dmg de leitura / gravação
fonte
Finalmente consegui isso trabalhando no meu próprio projeto (que acontece no Xcode). A adição desses 3 scripts à sua fase de criação criará automaticamente uma Imagem de Disco para o seu produto, agradável e arrumada. Tudo o que você precisa fazer é criar seu projeto e o DMG estará esperando na sua pasta de produtos.
Script 1 (Criar imagem de disco temporário):
Script 2 (Script de propriedades da janela Set):
A medida acima para a janela funciona para o meu projeto, especificamente devido ao tamanho da minha imagem de plano de fundo e resolução do ícone; pode ser necessário modificar esses valores para seu próprio projeto.
Script 3 (Criar script final da imagem do disco):
Verifique se os arquivos de imagem que você está usando estão no diretório $ PROJECT_DIR / $ PROJECT_NAME /!
fonte
Os arquivos .DS_Store armazenam as configurações do Windows no Mac. As configurações do Windows incluem o layout dos ícones, o plano de fundo da janela, o tamanho da janela, etc. O arquivo .DS_Store é necessário na criação da janela para imagens montadas para preservar a organização dos arquivos e o plano de fundo da janela.
Depois de criar o arquivo .DS_Store, você pode copiá-lo no seu instalador criado (DMG).
fonte
Eu também preciso usar a abordagem de linha de comando para fazer a criação de pacotes e dmg "programaticamente em um script". A melhor resposta que encontrei até agora é da estrutura de construção do release do projeto Adium (consulte R1). Há um script personalizado (AdiumApplescriptRunner) para permitir que você evite a interação da OSI WindowsServer GUI. A abordagem "osascript applescript.scpt" exige que você efetue login como construtor e execute a criação do dmg a partir de uma sessão da linha de comandos vt100.
O sistema de gerenciamento de pacotes OSX não é tão avançado em comparação com outros Unixen, que podem executar essa tarefa de maneira fácil e sistemática.
R1: http://hg.adium.im/adium-1.4/file/00d944a3ef16/Release
fonte
Acabei de escrever um novo utilitário de linha de comando (amigável) para fazer isso. Ele não depende do Finder / AppleScript ou de qualquer uma das APIs do Alias Manager (obsoleta), e é fácil de configurar e usar.
De qualquer forma, qualquer pessoa interessada pode encontrá-lo no PyPi ; a documentação está disponível em Leia os documentos .
fonte
Essas respostas são muito complicadas e os tempos mudaram. O seguinte funciona com a versão 10.9, as permissões estão corretas e parecem boas.
Crie um DMG somente leitura a partir de um diretório
Crie DMG somente leitura com um ícone (tipo .icns)
Se algo mais precisar acontecer, o mais fácil é fazer uma cópia temporária do SRC_DIR e aplicar as alterações antes de criar um DMG.
fonte