UIImagePickerController를 사용할 때 iOS 10 오류 [액세스] <private>


102

XCode 8을 사용하고 있으며 iOS 10.2 베타로 테스트하고 있습니다.

프로젝트에 Photos, PhotosUI 및 MobileCoreServices 프레임 워크를 추가했습니다.

매우 간단한 코드 :

#import <Photos/Photos.h>
#import <PhotosUI/PhotosUI.h>
#import <MobileCoreServices/MobileCoreServices.h>

@interface ViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate, PHLivePhotoViewDelegate>

@property (strong, nonatomic) IBOutlet UIImageView *imageview;

@end

및 구현 :

- (IBAction)grab:(UIButton *)sender{
    UIImagePickerController *picker = [[UIImagePickerController alloc]init];
    picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    picker.allowsEditing = NO;
    picker.delegate = self;

    // make sure we include Live Photos (otherwise we'll only get UIImages)
    NSArray *mediaTypes = @[(NSString *)kUTTypeImage, (NSString *)kUTTypeLivePhoto];
    picker.mediaTypes = mediaTypes;

    // bring up the picker
    [self presentViewController:picker animated:YES completion:nil];
}

버튼을 탭하자마자 앱이 매우 쓸모없는 오류와 함께 충돌합니다.

[access] <private>

그게 다야. 다른 건 없습니다.

break 문을 사용하면 앱이 "presentViewController"에서 충돌하는 것처럼 보입니다.

이것은 완전히 새로운 앱이며 UI에 그랩 버튼 외에 다른 것이 없습니다.

또한 iOS 9.3에서 테스트해도 정상적으로 작동합니다. iOS 10에서 변경 될 수있는 것이 누락 되었습니까?


청소하고 빌드하십시오. 변경 사항이 없다면 Xcode 8 또는 iOS 10 베타의 버그 일 수 있으며 향후 업데이트에서 Apple에 의해 해결 될 것입니다. 나는 종종 이것이 사실임을 알게된다. 만약 그것이 마지막 베타이거나 GM 릴리즈이고 여전히 작동하지 않는다면, 그것을 고칠 때가 될 것이다.
요르단 스미스

1
네, 앱을 정리하고 삭제 한 후에도 같은 문제 :(
Pranoy C

나는 그것에 대해 강조하지 않을 것입니다. 베타 릴리스입니다. 베타 문제 일 가능성이 더 높습니다. 출시에 훨씬 가까워 질 때까지 Xcode 7에서 개발하는 것이 좋습니다.
요르단 스미스

알았어! 당신에게 @Jordan 감사합니다
Pranoy C

@Jordan은 iOS 10부터 새로운 요구 사항이있는 것 같습니다. 솔루션 참조 : stackoverflow.com/a/38241350/1634905
Pranoy C

답변:


172

NSPhotoLibraryUsageDescription을 plist에 넣어야 할 수도 있습니다. 처럼

<key>NSPhotoLibraryUsageDescription</key>
<string>$(PRODUCT_NAME) uses photos</string>

여기에서 모든 사용법 설명을 확인 하십시오 .


1
이 릴리스 번호를 어떻게 찾았습니까?
Pranoy C

1
iOS 다운로드 웹 사이트에서 올바른 UsageDescription 키로 문제를 해결했습니다.
rockdaswift

감사합니다. 귀하의 답변으로 문제가 즉시 해결되었습니다! 이것은 iOS 10 이후의 새로운 요구 사항입니다. 스택 오버플로 btw에 오신 것을 환영합니다!
Pranoy C

정말 고마워! NSAppleMusicUsageDescription (iTunes 음악 라이브러리 액세스)에 구워졌습니다.
lifjoy

4
@iomer i가 문제를 해결하고 info.plist에 키를 추가했지만 프로젝트> 대상> 정보에서 볼 수 없습니다. 그래서 거기에 추가했고 Apple은 내 바이너리를 전달했습니다. 전에도 페이스 북 아이디로 저에게 일어난 일입니다. 왜 거기에 표시되지 않았는지 모르겠습니다.
Raheel Sadiq 16.09.23

132

iOS10에서는 카메라, 연락처 등과 같은 개인 정보에 민감한 데이터에 액세스하기 전에 승인을 요청해야합니다. 그렇지 않으면 액세스 할 때 앱이 충돌합니다.

이 앱은 사용 설명없이 개인 정보에 민감한 데이터에 액세스하려고했기 때문에 다운되었습니다. 앱의 Info.plist에는 NSContactsUsageDescription앱이이 데이터를 사용하는 방법을 사용자에게 설명하는 문자열 값이 있는 키 가 포함되어야합니다 .

어떻게 처리할까요?

라는 프로젝트에서 파일을 열고 info.plist마우스 오른쪽 버튼으로 클릭하여으로 열고 Source Code아래에이 코드를 붙여 넣습니다. 아니면 열 수 info.plistProperty List, 기본적으로 추가 버튼을 클릭, 엑스 코드가 완료 제안을 줄 것이다 동안 입력 Privacy - 키보드의 도움 ⬆️와와 ⬇️.

<string>과 사이에이 승인을 요청하는 이유에 대한 설명을 작성해야합니다 </string>. 그렇지 않으면 앱이 Apple에서 거부됩니다.

<!-- 🖼 Photo Library -->
<key>NSPhotoLibraryUsageDescription</key>
<string>$(PRODUCT_NAME) photo use</string>

<!-- 📷 Camera -->
<key>NSCameraUsageDescription</key>
<string>$(PRODUCT_NAME) camera use</string>

<!-- 🖼 Write To Image Gallery>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>$(PRODUCT_NAME) save phots in gallry</string>


<!-- 🎤 Microphone -->
<key>NSMicrophoneUsageDescription</key>
<string>$(PRODUCT_NAME) microphone use</string>

<!-- 📍 Location -->
<key>NSLocationUsageDescription</key>
<string>$(PRODUCT_NAME) location use</string>

<!-- 📍 Location When In Use -->
<key>NSLocationWhenInUseUsageDescription</key>
<string>$(PRODUCT_NAME) location use</string>

<!-- 📍 Location Always -->
<key>NSLocationAlwaysUsageDescription</key>
<string>$(PRODUCT_NAME) always uses location </string>

<!-- 📆 Calendars -->
<key>NSCalendarsUsageDescription</key>
<string>$(PRODUCT_NAME) calendar events</string>

<!--  Reminders -->
<key>NSRemindersUsageDescription</key>
<string>$(PRODUCT_NAME) reminder use</string>

<!-- 📒 Contacts -->
<key>NSContactsUsageDescription</key>
<string>$(PRODUCT_NAME) contact use</string>

<!-- 🏊 Motion -->
<key>NSMotionUsageDescription</key>
<string>$(PRODUCT_NAME) motion use</string>

<!-- 💊 Health Update -->
<key>NSHealthUpdateUsageDescription</key>
<string>$(PRODUCT_NAME) heath update use</string>

<!-- 💊 Health Share -->
<key>NSHealthShareUsageDescription</key>
<string>$(PRODUCT_NAME) heath share use</string>

<!-- ᛒ🔵 Bluetooth Peripheral -->
<key>NSBluetoothPeripheralUsageDescription</key>
<string>$(PRODUCT_NAME) Bluetooth Peripheral use</string>

<!-- 🎵 Media Library -->
<key>NSAppleMusicUsageDescription</key>
<string>$(PRODUCT_NAME) media library use</string>

<!-- 📱 Siri -->
<key>NSSiriUsageDescription</key>
<string>$(PRODUCT_NAME) siri use</string>

<!-- 🏡 HomeKit -->
<key>NSHomeKitUsageDescription</key>
<string>$(PRODUCT_NAME) home kit use</string>

<!-- 📻 SpeechRecognition -->
<key>NSSpeechRecognitionUsageDescription</key>
<string>$(PRODUCT_NAME) speech use</string>

<!-- 📺 VideoSubscriber -->
<key>NSVideoSubscriberAccountUsageDescription</key>
<string>$(PRODUCT_NAME) tvProvider use</string>

작동하지 않으면 백그라운드 인증을 요청하십시오.

<key>UIBackgroundModes</key>
<array>
    <!-- something you should use in background -->
    <string>location</string>
</array>

또는 다음으로 이동하십시오 target -> Capabilities -> Background Modes -> open the background Modes.

여기에 이미지 설명 입력

그런 다음 프로젝트를 정리하고 실행하십시오.

자세한 내용은 여기로 이동하십시오 : iOS10AdaptationTips .


2
나는 아무데도 사진을 사용하지 않았고 애플이 내 앱을 거부하고 있습니다. 나뿐만 아니라 모든 포드 프로젝트를 확인
Raheel 디크

@RaheelSadiq <string> 와 사이에이 승인을 요청하는 이유에 대한 설명을 작성하십시오. 그렇지 않으면 Apple에서 </string>앱이 거부됩니다.
ElonChan

23

iOS 10에서는 앱에서 카메라 또는 사진 갤러리를 사용하는 경우 아래 이미지에 언급 된 키를 추가해야합니다.

.plist 이미지


14

info.plist에 새 개인 정보 설정을 추가해야합니다.

앱이 서비스에 액세스해야하는 이유를 설명하는 값을 추가하는 것을 잊지 마십시오.

여기에 이미지 설명 입력


9

iOS 10에서 Apple은 사용자 개인 데이터 유형에 액세스하는 방법을 변경했습니다.

개인 정보-사진 라이브러리 사용 설명 키를 앱 Info.plist및 사용 정보 에 추가해야합니다 .

자세한 내용은 아래 GIF를 확인하세요.

GIF

또는 info.plist다음을 통해 추가 하려면 NSPhotoLibraryUsageDescription 키 를 추가해야합니다 .

에서 문자열 아래에 복사하여 붙여 넣기 만하면됩니다 info.plist.

<key>NSPhotoLibraryUsageDescription</key>
<string>Take the photo</string>

자세한 내용은 아래 GIF를 참조하십시오.

GIF


1
또한 <키> NSCameraUsageDescription </ 키> <문자열> 사진을 가지고 </ 문자열>
나시르 칸
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.