0
1

More than 1 year has passed since last update.

【macOS App】ヘルパーツールをインストールする

Last updated at Posted at 2022-07-15

こちらの続き

ヘルパーツールをインストールするための許可を作成

成功したらauthRefに参照が却ってくる。

    var authRef :AuthorizationRef?
    var flags = AuthorizationFlags( rawValue : 0)
    var status = AuthorizationCreate(nil, nil, flags, &authRef);

ヘルパーツールをインストールするための権限を要求

成功したらauthRightsが却ってくる。

    var authItem = AuthorizationItem(name: kSMRightBlessPrivilegedHelper, valueLength: 0, value: nil, flags: 0 )
    var authRights = AuthorizationRights( count: 1, items: &authItem )

# セキュリティサーバーに必要な許可を与えるフラグを作成
必要なものは以下の3プロパティ。

  • interactionAllowed ユーザーとの対話を許可
  • extendRights 要求された権限(ここではヘルパーツールインストール)を許可
  • preAuthorize 要求された権限を事前承認できるように
    flags = AuthorizationFlags([.interactionAllowed, .extendRights, .preAuthorize])

管理者ユーザー認証を行う

AuthorizationCopyRightsの呼び出しに成功したら「xxxが新しいヘルパーツールを追加しようとしています。許可するにはパスワードを入力してください」というダイアログが表示される。

    status = AuthorizationCopyRights(authRef!, &authRights, nil, flags, nil)

ヘルパーツールをlaunchdにジョブ登録する

管理者ユーザーで認証されたのち、ヘルパーツールのインストール許可が下りる。
SMJobBlessを呼び出してインストールを実施。
bundleidが登録したいヘルパーツールのbundleid。

SMJobBless(
        kSMDomainSystemLaunchd,
        bundleid as CFString,
        authRef,
        &cfError)

一度インストールしたら、ヘルパーツールが自動的に動作するようになる。
以下のファイルの存在有無でインストールが必要かどうか判断しても良いだろう。

  • /Library/LaunchDaemons/<bundleid>.plist
  • /Library/PrivilegedHelperTools/<bundleid>

このあとはipcによりヘルパーツール側の処理を呼び出すことで、毎回管理者ユーザー認証を求められずに特権処理を行うことができる。

お疲れ様でした。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1