How to create a zip file in the same format as the Finder's "Compress" menu item?
automation, macos, shell, zip
Solution
Use the ditto command-line tool as follows:
ditto -ck --rsrc --sequesterRsrc folder file.zip
See the ditto man page for more.
Problem
On Mac OS X, you can create a zip archive from the Finder by selecting some files and selecting "Compress" from the contextual menu or the File menu. Unfortunately, the resulting file is not identical to the archive created by the `zip` command (with the default options). This distinction matters to at least one service operated by Apple, which fails to accept archives created with the `zip` command. Having to create archives manually is preventing me from fully automating my release build process. How can I create a zip archive in the correct format within a shell script? EDIT: Since writing this question long ago, I've figured out that the key difference between `ditto` and `zip` is how they handle symbolic links: because the code signature inside an app bundle contains a symlink, it needs to be preserved as a link and not stored as a regular file. `ditto` does this by default, but `zip` does not (option `-y` is required).