ошибка iOS 10 [доступ] при использовании UIImagePickerController


Я использую XCode 8 и тестирование с iOS 10.2 Beta.

я добавил фотографии, 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".

Это совершенно новое приложение, и у меня нет ничего другого в пользовательском интерфейсе, кроме кнопки захвата.

кроме того, тестирование на iOS 9.3, это работает нормально. Я пропустил что-то, что может быть изменено в iOS 10?

5 102

5 ответов:

возможно, вам придется поместить NSPhotoLibraryUsageDescription в свой plist. Как

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

проверьте все описания использования здесь.

в iOS10, прежде чем вы получите доступ к конфиденциальным данным, таким как камера, контакты и т. д., Вы должны запросить авторизацию, или ваше приложение рухнет при доступе к ним.Тогда Xcode будет регистрироваться как:

это приложение разбилось, потому что он пытался получить доступ к конфиденциальным данным без описания использования. Информация о приложении.plist должен содержать NSContactsUsageDescription ключ со строковым значением объяснить пользователю, как приложение использует эти данные.

как бороться с этим?

откройте файл в вашем проекте с именем info.plist, щелкните правой кнопкой мыши, открывая как Source Code вставьте этот код ниже его. Или вы можете открыть info.plist как Property List по умолчанию нажмите кнопку Добавить, Xcode даст вам предложить завершения при вводе Privacy - С помощью клавиатуры ⬆️ и ⬇️.

не забудьте написать свое описание, почему вы просите это разрешение, между <string> и </string>, или ваше приложение будет отклонено яблоко:

<!--  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:

enter image description here

затем очистите свой проект, запустите его.

перейдите сюда для получения дополнительной информации:iOS10AdaptationTips .

в iOS 10 вам нужно добавить ключ, упомянутый ниже, если вы используете камеру или фотогалерею В своем приложении

.plist image

вам нужно добавить новые настройки конфиденциальности к вам информацию.файл plist.

не забудьте добавить значение, описывающее, почему приложение должно получить доступ к сервису.

enter image description here

В iOS 10 Apple изменила способ доступа к любым типам личных данных пользователей.

вам нужно добавить Конфиденциальность-Описание Использования Библиотеки Фотографий ключ к вашему приложению Info.plist и информация об их использовании.

для получения дополнительной информации, пожалуйста, найдите ниже GIF.

GIF

или если вы хотите добавить через info.plist тогда вам нужно добавить NSPhotoLibraryUsageDescription ключ.

просто скопируйте и вставьте строку ниже в info.plist.

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

пожалуйста, найдите ниже GIF для получения дополнительной информации.

GIF