Деинсталлятор для пакета в Mac OS X - PullRequest
17 голосов
/ 15 марта 2011

В качестве услуги для моих пользователей я хотел бы предоставить скрипт удаления, чтобы полностью удалить все следы моего приложения в Mac OS X. Приложение устанавливается с помощью пакета, а не просто перетаскивается в папку «Приложения», посколькуприложение типа демона, которое также требует запуска сценария при запуске.

Я думаю включить файл с именем uninstall.sh, поместить его в /Library/Application Support/com.<mycompany>.<myapplication>/ и обратиться к нему из документации приложения.Цель состоит в том, чтобы остановить демон при запуске, выгрузить и удалить соответствующий plist, а также удалить все файлы приложения.Это звучит разумно или есть лучшие методы для достижения этой цели?

Также мне интересно, будет ли хорошей практикой также удалять следы пакета, используя pkgutil --forget - если я этого не сделаю, следующийПри установке пакета он отображается как обновленный, а не установленный.Любые рекомендации или указатели на информацию передового опыта?

Нет ли стандартного способа сделать это на OS X?

Ответы [ 5 ]

17 голосов
/ 09 сентября 2011

Нет стандартного способа сделать это на OS X. Да, шокирующе, я знаю. Apple постоянно предупреждает всех об установщиках пакетов (помимо прочего, предоставляя им недостаточно документации). Затем они используют исключительно инсталляторы пакетов для своих собственных автономных приложений .... пойди разберись.

Да, вы должны включить pkgutil --forget.

Если вашим клиентам удобен такой сценарий, то ваш подход звучит хорошо. Если они хотят «дважды щелкнуть по нему», то вы, вероятно, должны поместить деинсталлятор в /Applications, но, если можете, избегайте этого.

Если у вас есть графический интерфейс, элемент состояния или панель настроек, то лучше поместить туда кнопку «Удалить» или пункт меню, а не заставлять их бездельничать с Терминалом.

Кстати, если вы ищете Руководство по доставке программного обеспечения, оно было перемещено в течение года или около того, пока они его "обновляют".

6 голосов
/ 02 июля 2013

невозможность удаления пакетов мешала мне годами, поэтому я написал инструмент для удаления пакетов:

http://www.corecode.at/uninstallpkg/index.html

это немного лучше, чем делать сценарии оболочкион плавает вокруг, потому что он никогда не удаляет файлы, которые используются другими установленными пакетами

4 голосов
/ 24 мая 2012

Я решил это, используя Automator , создав документ application , а затем добавив действия диалога и сценария. Наконец, сохраните документ приложения Automator, и вы получите простое приложение с графическим интерфейсом для запуска удаления.

Часто действие удаления требует прав администратора - я решил это в Automator, запустив действие сценария оболочки, которое генерирует другой сценарий оболочки, который затем можно запустить в действии applecript следующим образом:

on run {input, parameters}
    do shell script "/tmp/uninstaller.sh" with administrator privileges
    return input
end run
3 голосов
/ 02 ноября 2011

У меня есть похожее приложение, и я столкнулся с той же проблемой. Подход, который я выбрал, был тем, который я видел в других приложениях. Вместо того, чтобы просто распространять установщик .pkg, поместите его в файл .dmg. Сценарий удаления может быть включен с .pkg в .dmg.

Сценарий удаления затем переименовывается в «uninstall.tool». Расширение .tool позволяет пользователям запускать сценарий двойным щелчком, а не запускать его из командной строки.

1 голос
/ 19 февраля 2016

Немного нетрадиционно, но не все ли это. У меня установлен Homebrew и бочка. Мне удалось удалить .pkg со следующим:

 brew cask uninstall --force <pkg_name>

ех. удаление бочки из-под кофе --force dockertools

...