Сегодня хочу поговорить о утилите из состава XCode PackageMaker, с помощью которой можно создавать установочные пакеты. Обычные приложения в Mac OS X ставятся просто – приложение перетаскивается в /Application, после чего им можно пользоваться. Однако есть класс приложений, которые невозможно так устанавливать. К ним относятся системные утилиты, требующие установки дополнительных модулей, запуска скриптов перед и после установки, повышения полномочий до административных, и т.п. Есть разные мнения по поводу инсталляции с помощью “установщиков” (очень рекомендую почитать отличную серию статей @tsybulin’а об установке и удалении приложений), но такой класс программ есть, и о них нужно знать. Да, с докладом на встрече Мак-пользователей (доклад не мой) эта статья не связана – я давно задумал её написать, но в связи с тем, что уже второй день безуспешно бьюсь над продолжением SSL Bypass, то решил сменить обстановку и написать что-то из другой области.

PackageMaker находится в /Developer/Applications/Utilities:

Меня, как вы заметили, интересует знать о файловой активности приложений, и я расскажу о PackageMaker именно с этой стороны. Для построения списка файлов, которые нужно включить в установочный пакет, утилита использует функцию Snapshot’ов, которая следит за файловой активностью и далее позволяет включить в дистрибутив файлы, которые появились в системе. Конечно же, это только одна из функций утилиты, детальнее ознакомиться с ней можно в “PackageMaker User Guide” на сайте Apple Developer Connection.

Итак, задача. Я хочу сделать установочный пакет программы, которую располагаю в /usr/local. Я предполагаю, что примерно таким образом создал установочный пакет для Midnight Commanger @tsybulin.

Запускаем PackageMaker и вводим первичные данные:

Свойства проекта по умолчанию такие:

Кстати, можно проверять такие условия:

Запускаем построение snapshot’а:

Когда будем готовы к установке, жмём Start:

Далее можно, например, как при компиляции Midnight Commander из исходных кодов, сделать “make install”, и утилита проследит за всеми создаваемыми в системе файлами, в итоге мы получим снимок для установки. Я же делаю всего несколько иллюстративных действий:

mkdir -p /usr/local/bin
cp /bin/bash /usr/local/bin/testapp
mkdir -p /usr/local/lib
cp /usr/lib/libIOKit.dylib /usr/local/lib/libTestApp.dylib
cp /usr/lib/libIOKit.A.dylib /usr/local/lib/libTestApp.A.dylib

Как только мы закончили, останавливаем слежение, и видим все изменения, которые были в системе (конечно же, не только наши):

Отбираем только те изменения, которые относятся к нашему создаваемому приложению:

Жмём “Build” и получаем установочный пакет “Test App.pkg”:

Всё, установочный пакет создан, теперь его можно проверить пробной установкой и распространить среди желающих:

Желающие изучить вопрос детальнее могут обраться к “PackageMaker User Guide“.