Como criar um arquivo zip no mesmo formato como item de menu do Finder “Compress”?
-
01-07-2019 - |
Pergunta
No Mac OS X, você pode criar um arquivo zip a partir do Finder, selecionando alguns arquivos e selecionando "Compress" no menu contextual ou no menu Arquivo. Infelizmente, o arquivo resultante não é idêntico ao do arquivo criado pelo comando zip
(com as opções padrão).
Esta distinção é importante para pelo menos um serviço operado pela Apple, que não aceitar arquivos criados com o comando zip
. Ter que criar arquivos manualmente está me impedindo de automatizar totalmente o meu processo de compilação de lançamento.
Como posso criar um arquivo zip no formato correto dentro de um shell script?
EDIT: Desde que escrevi esta questão há muito tempo, eu descobri que a principal diferença entre ditto
e zip
é como lidar com links simbólicos: porque a assinatura de código dentro de um pacote de aplicativo contém um link simbólico, ele precisa ser preservado como um link e não armazenada como um arquivo regular. ditto
faz isso por padrão, mas zip
não (é exigido opção -y
).
Solução
Use a ferramenta de linha de comando ditto a seguinte:
ditto -ck --rsrc --sequesterRsrc folder file.zip
Veja a href="https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/ditto.1.html" rel="nofollow noreferrer"> página homem para mais.
Outras dicas
Eu tenho um script Ruby que faz iPhone App Store constrói para mim, mas a fecha-se a geração de não ser aceito pelo iTunes Connect. Eles foram aceitas se eu usasse a função "Compress" do Finder.
A resposta de millenomi chegou perto de mim, mas este comando é o que acabou funcionando. iTunes Connect aceitou meu construir, e o aplicativo foi aprovado e pode ser baixado nenhum problema, por isso é testada.
ditto -c -k --sequesterRsrc --keepParent AppName.app AppName.zip
estados homem idem:
The command: ditto -c -k --sequesterRsrc --keepParent src_directory archive.zip will create a PKZip archive similarly to the Finder's Compress functionality.
aviso --keepParent
A pista está no 'automação' tag.
Criar uma ação em Automator.app que usa a ação 'Criar Arquivo', invocá-lo a partir da linha de comando (ver 'automator').