私は、アプリケーションに小さな変更を加えると全体のセキュリティ&た。servicemanagementフレームワークのより良い理解を得るためにしようとしていますリンゴBetterAuthorizationSample、さらにデリバティブ(http://www.stevestreeting.com/2011/11/25/escalating-privileges-on-mac-os-x-securely-and-without-using-deprecated-methods/) てみると...そこで私はに進んでSMJobBless - SMJobRemove()の逆を介してインストールされたJobを削除するボタンを追加してください。ただし、AuthorizationCreate()コールでは、ヘルパーをインストールして削除する権限がないことを示すダイアログが表示されます。変更の許可ダイアログ)
これは私が(kSMRightModifySystemDaemons
を使用して)取得するダイアログです。ご覧のとおり、私のアプリは新しいヘルパーツールを追加しようとしています。これは、アプリケーションが実際にインストールされたヘルパーツールを削除しようとするため、ユーザーを混乱させます。自分のカスタムを示す - 私は、このダイアログは、私の実際のアクション(ジョブの削除)を反映するように変更された方法についての知識を見つけるために求めてい
、完全にダイアログをカスタマイズするように見えるいくつかの他のアプリもあります。ラベルとボタン..
BOOL doRemoveSystemTool(NSString* label, NSError** error)
{
BOOL result = NO;
AuthorizationItem authItem = { kSMRightModifySystemDaemons, 0, NULL, 0 };
AuthorizationRights authRights = { 1, &authItem };
AuthorizationFlags flags = kAuthorizationFlagDefaults |
kAuthorizationFlagInteractionAllowed |
kAuthorizationFlagPreAuthorize |
kAuthorizationFlagExtendRights;
AuthorizationRef authRef = NULL;
//Obtain authorization
OSStatus status = AuthorizationCreate(&authRights, kAuthorizationEmptyEnvironment, flags, &authRef);
if (status != errAuthorizationSuccess)
{
NSLog(@"Failed to create AuthorizationRef, return code %ld", (long)status);
} else
{
//We have authorization so proceed with removing the Job via SMJobRemove
result = SMJobRemove(kSMDomainSystemLaunchd, (CFStringRef)label, authRef, YES, (CFErrorRef *)error);
}
AuthorizationFree(authRef, kAuthorizationFlagDefaults);
return result;
}
私はauthItemがkSMRightBlessPrivilegedHelperからkSMRightModifySystemDaemonsへの変更を試してきたが、これはすべてやった「追加」を表示するために対話を変更して代わりに
を「インストール」のが大幅ので、私はAppleのドキュメントの少し読書をしたとkAuthorizationEnvironmentPrompt
で環境をセットアップする場合、私は疑問に思うことに基づいて、私は前にこれを使用しますが、あなたの質問が面白い発見していない...ここ
解決方法AuthorizationRightSet()を使用して、最後のパラメータ(localeTableName)がデフォルトプロンプトを指定する新しい右セットを作成します。まだデフォルトボタンテキストを取得するにはどのくらい正確に取得できますか?ラベルを簡単に変更することができます – DavidMIRV
私は 'AuthorizationRightSet()'を使ってどのようにダイアログをより意味をなさせることができるのかを喜んで褒賞に与えます;-) –
Appleはここに例を示します:https://developer.apple.com /library/mac/technotes/tn2095/_index.html#//apple_ref/doc/uid/DTS10003110-CH1-SECTION7。正しいプログラムによる追加 "非NULLのdescriptionKeyを使用してAuthorizationRightSetを呼び出すと、バンドル内のすべてのローカライゼーションが反復されます。各ローカリゼーションでは、適切なローカライゼーションテーブルファイルが検索され、そのテーブルの説明キーが検索されます。 " – markhunte