短いバージョン:アプリを削除すると、アプリ(SMJobBless()
など)で設定されたヘルパーツールを削除できますか?もしそうなら、どうですか?SMJobBlessヘルパーを含むユーザが削除したときに.appでインストールされたアイテムをアンインストールする
ロングバージョン:私たちは、残念ながら開発している
のMACアプリは時折操作を実行するには管理者権限を必要とし、それはまた、他のアプリのプラグインがする場合でもアプリに接続するライブするバックグラウンドタスクが必要ですそれ自体は実行されていません(これは権限のないものです)。このアプリはデベロッパーID証明書で署名され、App Storeの外でのみ配布されます。
私たちはアプリを「良い市民」、できるだけアンインストールしたいと考えています。
バックグラウンドタスクについては、SMLoginItemSetEnabled()
を使用して作成されたログイン項目を使用しています。これは驚くべきことではありません。XPCのメッセージングは機能しないようです(代わりにCFMessagePort
を使用しています - 代替候補が歓迎されています)。ユーザーがアプリを削除した場合、次回のログイン時に少なくともログイン項目はロードされません。システムのどこかにトレースが残っていると思われますが、.appバンドル内の実行可能ファイルが使用され、そのファイルが消えるとログイン項目はもう実行されません。
管理者権限を必要とする操作では、アプリケーションがSMJobBless()
を使用してインストールし、名前付きXPCサービスを実装する特権ヘルパーツールを持っているため、メインからメッセージを受信するとタスクがオンデマンドでスピンアップしますアプリ。これは、Appleが推奨するもので、Even Better Authorization Sampleに記載されています。
ヘルパー実行ファイルは/Library/PrivilegedHelperTools/
にSMJobBless()
でコピーされ、埋め込みlaunchd.plistは/Library/LaunchDaemons/
になります。 OSには、ヘルパーを「所有している」アプリケーションに関する情報があるにも関わらず、ユーザーがアプリケーションを削除したときにアンインストールするようなことはありません。アップルのサンプルは、アンインストール時にサイレントで、uninstall.sh
スクリプトは開発中にのみ使用されることが明らかです。アプリが実行されていない間はこのヘルパーは必要ないので、完全な起動デーモンとしてインストールするのはやや難しいですが、パスワードの入力を繰り返し迷惑にならないようにしたいと考えています。さらに、Appleは最近、SMJobBless()
よりも管理者特権を持つ他の形式のコードを実行することをアドバイスしています。例えば、SMJobSubmit()
は推奨されなくなりました。
私たちは自分自身の後にどのようにきれいにするのですか?
SMJobRemove()
が見つかりましたが、(a)その場合はいつ呼び出すのですか.appのバンドル削除でコードを実行することはできませんか? (b)it doesn't actually seem to clean up。
私は考えることができる唯一の2つの物事がひどく満足ではありません。
- アンインストーラアプリやスクリプトのいくつかの種類。しかし、それはあまりにも醜いようです。
- ユーザーがアプリを削除したときに心配する必要はありません。
私が言及したように、特権ヘルパーツールは、XPCコマンドを受信するとオンデマンドでのみ回転します。したがって、少なくとも必要とされていないときはランタイムリソースを使用しません。しかし、はい、私はそれがユーザーのシステムにファイルを残すことは理想的ではない、私の質問に同意します。 – pmdj