Я пишу приложение, в котором я хотел бы, чтобы окно пользовательских настроек запрашивало пароль администратора (но никогда не сохраняло его), прежде чем разрешать какие-либо изменения. До сих пор я использовал этот фрагмент кода:
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;
Который работал нормально, представляя стандартный диалог пароля ОС с запросом на ввод пароля администратора. Различные элементы управления в конце предпочтения включаются/отключаются в соответствии с возвращенным статусом . Однако теперь я пытаюсь запустить приложение в песочнице, и этот код всегда возвращает
errAuthorizationDenied
. Я просмотрел документы для AuthorizationCopyRights
и AuthorizationCreate
, но я не вижу ссылки на их использование в изолированной среде.
Я пробовал разные варианты флагов AuthorizationFlags
, но всегда один и тот же результат. Есть ли способ изменить приведенный выше код для работы в песочнице, или запрос пароля администратора в наши дни просто запрещен?