6

変更を許可する前に、カスタム設定ウィンドウで管理者パスワードを要求する(ただし、決して保存しない)アプリを作成しています。今、私はこのコードスニペットを使用しています。

    OSStatus status;
    AuthorizationRef authorizationRef;

    // AuthorizationCreate and pass NULL as the initial
    // AuthorizationRights set so that the AuthorizationRef gets created
    // successfully, and then later call AuthorizationCopyRights to
    // determine or extend the allowable rights.
    // http://developer.apple.com/qa/qa2001/qa1172.html
    status = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, kAuthorizationFlagDefaults, &authorizationRef);
    if (status != errAuthorizationSuccess)
    {
        NSLog(@"Error Creating Initial Authorization: %d", status);
        return status;
    }

    // kAuthorizationRightExecute == "system.privilege.admin"
    AuthorizationItem right = {kAuthorizationRightExecute, 0, NULL, 0};
    AuthorizationRights rights = {1, &right};
    AuthorizationFlags flags = kAuthorizationFlagDefaults | kAuthorizationFlagInteractionAllowed | kAuthorizationFlagPreAuthorize | kAuthorizationFlagExtendRights;

    // Call AuthorizationCopyRights to determine or extend the allowable rights.
    status = AuthorizationCopyRights(authorizationRef, &rights, NULL, flags, NULL);
    if (status != errAuthorizationSuccess)
    {
        NSLog(@"Copy Rights Unsuccessful: %d", status);
    }
    return status;

これは正常に機能し、管理者パスワードの入力を求める標準のOSパスワードダイアログが表示されました。プリファレンスのペン先のさまざまなコントロールは、返されたに応じて有効/無効になりstatusます。ただし、現在、アプリをサンドボックス化しようとしていますが、このコードは常にを返しますerrAuthorizationDenied。のドキュメントを確認しましたが、サンドボックス環境でそれらを使用するための参照が表示されませんAuthorizationCopyRightsAuthorizationCreate

いろいろ試してみましたAuthorizationFlags flagsが、いつも同じ結果です。上記のコードをサンドボックスで機能するように変更する方法はありますか、それとも最近は管理者パスワードを要求していますか?

4

1 に答える 1

10

サンドボックスのドキュメントを見てきましたが、「アプリがサンドボックスに適しているかどうかを判断する」というセクションですぐに質問に答えます。

ドキュメントから

次のアプリの動作は、AppSandboxと互換性がありません。

  • 承認サービスの使用

ゲームオーバー。

実際、あなたが何を達成したいと思っているのかわかりません。ユーザーにアプリケーションの独自のカスタム設定を決定させないのはなぜですか?

于 2012-05-30T09:52:01.570 に答える