Не ходи туда. Как долгосрочный разработчик Mac, я могу заверить вас, ни одно решение не работает действительно хорошо. Я пробовал так много решений, но все они не слишком хороши. Я думаю, что проблема в том, что Apple на самом деле не документирует формат метаданных для необходимых данных.
Вот как я это делаю долго, очень успешно:
Создайте новый DMG с возможностью записи (!), Достаточно большой, чтобы вместить ожидаемые двоичные и дополнительные файлы, такие как readme (sparse может работать).
Смонтируйте DMG и настройте его вручную в Finder или с помощью любых инструментов, которые вам подходят для этого (см. Ссылку FileStorm внизу для хорошего инструмента). Фоновое изображение обычно является изображением, которое мы помещаем в скрытую папку («.something») на DMG. Поместите туда копию своего приложения (подойдет любая версия, даже устаревшая). Скопируйте другие файлы (псевдонимы, readme и т. Д.), Которые вам нужны, опять же, устаревшие версии будут работать нормально. Убедитесь, что значки имеют правильный размер и положение (IOW, расположите DMG так, как вы хотите).
Снова размонтируйте DMG, все настройки должны быть сохранены.
Напишите сценарий создания DMG, который работает следующим образом:
- Копирует DMG, поэтому к оригинальному никогда больше не прикасаются.
- Монтирует копию.
- Он заменяет все файлы самыми последними (например, последнее приложение после сборки). Вы можете просто использовать mv или ditto для этого в командной строке. Обратите внимание, что при замене файла таким образом значок останется прежним, позиция останется прежней, все содержимое файла (или каталога) останется прежним (по крайней мере с тем же, что мы обычно используем для этой задачи) , Конечно, вы также можете заменить фоновое изображение другим (просто убедитесь, что оно имеет те же размеры).
- После замены файлов заставьте скрипт снова размонтировать копию DMG.
- Наконец, вызовите hdiutil для преобразования доступного для записи в сжатый (и такой не записываемый) DMG.
Этот метод может показаться неоптимальным, но поверьте мне, на практике он работает очень хорошо. Вы можете поместить исходный DMG (шаблон DMG) даже под контролем версий (например, SVN), поэтому, если вы когда-нибудь случайно измените / уничтожите его, вы можете просто вернуться к ревизии, где она все еще была в порядке. Вы можете добавить шаблон DMG в свой проект XCode вместе со всеми другими файлами, которые принадлежат DMG (readme, файл URL, фоновое изображение), все под контролем версий, а затем создать цель (например, внешнюю цель с именем «Create DMG») и там запустить сценарий DMG выше и добавить вашу старую основную цель в качестве зависимой цели. Вы можете получить доступ к файлам в дереве XCode, используя $ {SRCROOT} в сценарии (всегда является исходным корнем вашего продукта), и вы можете получить доступ к продуктам сборки с помощью $ {BUILT_PRODUCTS_DIR} (это всегда каталог, где XCode создает результаты сборки) .
Результат: На самом деле Xcode может создать DMG в конце сборки. DMG, который готов к выпуску. Таким образом, вы не только можете довольно просто создать релевантный DMG, но вы можете сделать это в автоматизированном процессе (если хотите, на сервере без монитора), используя xcodebuild из командной строки (например, автоматические ночные сборки).
Что касается первоначального макета шаблона, FileStorm является хорошим инструментом для этого. Это коммерческий, но очень мощный и простой в использовании. Обычная версия стоит менее 20 долларов, поэтому она действительно доступна. Может быть, кто-то может автоматизировать FileStorm для создания DMG (например, через AppleScript), никогда не пробовал этого, но как только вы нашли идеальный шаблон DMG, его действительно легко обновить для каждого выпуска.