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

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에서 변경 될 수있는 것이 누락 되었습니까?



답변

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

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

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


답변

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 .


답변

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

.plist 이미지


답변

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

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

여기에 이미지 설명 입력


답변

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

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

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

GIF

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

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

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

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

GIF


답변