Как создать ZIP-файл в том же формате, что и пункт меню «Сжать» в Finder?

В Mac OS X вы можете создать zip-архив из Finder, выбрав несколько файлов и выбрав «Сжать». из контекстного меню или меню Файл. К сожалению, полученный файл не идентичен архиву, созданномуzip команда (с параметрами по умолчанию).

Это различие имеет значение по крайней мере для одной службы, управляемой Apple, которая не принимает архивы, созданные с помощьюzip команда. Необходимость создавать архивы вручную мешает мне полностью автоматизировать процесс сборки релизов.

Как я могу создать zip-архив в правильном формате в сценарии оболочки?

РЕДАКТИРОВАТЬ: С тех пор, как я писал этот вопрос давно, я выяснил, что ключевое различие междуditto а такжеzip Вот как они обрабатывают символические ссылки: поскольку сигнатура кода внутри пакета приложения содержит символическую ссылку, ее необходимо сохранить как ссылку, а не как обычный файл.ditto делает это по умолчанию, ноzip нет (вариант-y необходимо).

 freespace20 сент. 2008 г., 13:19
Какую версию OS X вы используете?
 freespace20 сент. 2008 г., 13:42
Попробуйте это - создайте архив, используя искатель с единственным файлом в нем, не имеет значения, что это такое. Теперь добавьте в него файл с помощью командной строки zip. Это должно только изменить директорию zip master и оставить в покое магию яблока - может быть достаточно пройти мимо детекторов: P

Ответы на вопрос(4)

Подсказка в теге «автоматизация».

Создайте действие в Automator.app, в котором используется «Создать архив». действие, вызовите его из командной строки (см. «автоматизатор»).

 benzado20 сент. 2008 г., 13:22
Интересно, я понятия не имел, что была команда оболочки automator! Но разве это не заставит маленького робота подпрыгивать в моем доке каждый раз, когда я делаю сборку?
 20 сент. 2008 г., 13:36
Работал нормально в сценарии оболочки для меня; какого рода проблемы вы ожидаете?
 20 сент. 2008 г., 13:29
Automator, включая инструмент командной строки, требует доступа к диспетчеру окон и, следовательно, может быть запущен только как часть сеанса консоли, а не без присмотра.
 20 сент. 2008 г., 13:24
Пока действие не запрашивает ввод, оно должно выполняться без присмотра и без какого-либо прыгающего робота.
Решение Вопроса

Используйте тот же инструмент командной строки следующим образом:

ditto -ck --rsrc --sequesterRsrc folder file.zip

УвидетьТо же самое на странице руководства для большего.

 20 сент. 2008 г., 13:33
При этом я все еще не могу создать .zip, который имеет ту же сигнатуру, что и функция сжатия в Finder. Тем не менее, я не знал о том же: D
 20 сент. 2008 г., 14:19
Аналогично, но это выглядит намного ближе, чем результат «zip». Различия могут быть вплоть до отметок времени или аналогичных.
 20 нояб. 2009 г., 02:29
Не забудьте добавить в --keepParent. Если вы прочитали man-страницу (man ditto): Команда: ditto -c -k --sequesterRsrc --keepParent src_directory archive.zip создаст архив PKZip аналогично функции сжатия в Finder.

У меня есть скрипт ruby, который делает сборку iPhone App Store для меня, но архивы, которые он генерировал, не будут приняты iTunes Connect. Они были приняты, если бы я использовал Finder's Compress. функция.

Ответ millenomi был близок для меня, но эта команда и сработала. iTunes Connect принял мою сборку, и приложение было одобрено, и его можно без проблем загрузить, поэтому оно протестировано.

ditto -c -k --sequesterRsrc --keepParent AppName.app AppName.zip

Человек так же утверждает:

 The command:
       ditto -c -k --sequesterRsrc --keepParent src_directory archive.zip
 will create a PKZip archive similarly to the Finder's Compress functionality.

уведомление --keepParent

Ваш ответ на вопрос