iOS はユーザーにフォト ライブラリのアクセス許可を求めなくなりました。デバイスからアプリを削除しても。これはシミュレーターでも発生します。
switch ([ALAssetsLibrary authorizationStatus])
{
case ALAuthorizationStatusAuthorized:
RPMLog(@"authorized");
break;
case ALAuthorizationStatusDenied:
RPMLog(@"denied");
break;
case ALAuthorizationStatusNotDetermined:
RPMLog(@"not determined");
break;
case ALAuthorizationStatusRestricted:
RPMLog(@"restricted");
break;
}
初めてアプリをインストールした時点で、すでに認証されています。これ以前は、ユーザー プロンプトをトリガーする写真を要求するイベントや画面は他にありません。
次に、SavedPhotos の numberOfAssets を要求し、アクセス プロンプトなしで取得します。
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
if (!group) return;
UIActionSheet *actionSheet = nil;
if (([group numberOfAssets] > 0))
{
actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:NSLocalizedString(@"Cancel", nil) destructiveButtonTitle:nil otherButtonTitles:NSLocalizedString(@"Take new photo", nil), NSLocalizedString(@"Use last photo taken", nil), NSLocalizedString(@"Choose existing", nil), nil];
}
else
{
actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:NSLocalizedString(@"Cancel", nil) destructiveButtonTitle:nil otherButtonTitles:NSLocalizedString(@"Take new photo", nil), NSLocalizedString(@"Choose existing", nil), nil];
}
actionSheet.actionSheetStyle = UIActionSheetStyleBlackTranslucent;
[actionSheet showFromTabBar:self.tabBar];
[TestFlight passCheckpoint:@"New Look: Tab Bar"];
} failureBlock:^(NSError *error) {
NSAssert(!error, [error description]);
}];