Подтвердить что ты не робот

Деинсталлятор для пакета на Mac OS X

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Если у вас есть GUI, элемент статуса или панель предпочтений, тогда приятно добавить кнопку "Удалить" или пункт меню, а не требовать, чтобы они путались с терминалом.

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

Ответ 2

неспособность удалить пакеты искала меня в течение многих лет, поэтому я написал инструмент для удаления пакетов:

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

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

Ответ 3

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

Удаление script затем переименовывается в "uninstall.tool". Расширение .tool позволяет пользователям запускать script двойным щелчком, вместо того, чтобы запускать его из командной строки.

Ответ 4

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

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

on run {input, parameters}
    do shell script "/tmp/uninstaller.sh" with administrator privileges
    return input
end run

Ответ 5

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

 brew cask uninstall --force <pkg_name>

ех. brew cask uninstall --force dockertools