Помилка iOS 10 [доступ] <приват> при використанні UIImagePickerController


102

Я використовую XCode 8 і тестую iOS 10.2 Beta.

Я додав рамки 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>

Це воно. Більш нічого.

Використовуючи заяви про перерву, програма, здається, виходить з ладу на "presentViewController".

Це абсолютно новий додаток, і у мене в інтерфейсі немає нічого іншого, крім кнопки захоплення.

Крім того, тестуючи на iOS 9.3, це добре працює. Я пропускаю щось, що може бути змінено в iOS 10?


Очистіть, а потім побудуйте. Якщо жодних змін не буде, може бути помилка в Xcode 8 або бета-версії iOS 10, яку Apple вирішить у майбутньому оновлення. Я часто вважаю, що це так - якщо це остання бета-версія, або випуск GM, і він все ще не працює, тоді б настав час потурбуватися про її виправлення.
Джордан Сміт

1
так, те ж питання навіть після очищення та видалення програми :(
Pranoy C

Я б не наголошував на цьому. Це бета-версія. Ймовірніше, що це проблема з бета-версією. Я б запропонував розробити на Xcode 7 до набагато ближче до випуску.
Джордан Сміт

ок має сенс! дякую @Jordan
Pranoy C

@Jordan виглядає як є нова вимога , як ІВ 10. ставиться до рішення: stackoverflow.com/a/38241350/1634905
Pranoy C

Відповіді:


172

Можливо, вам потрібно буде поставити NSPhotoLibraryUsageDescription у свій список. Подібно до

<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 Я виправив проблему, я додав ключ у info.plist, але я не міг бачити його під Project> Target> Info. Тому я додав і там, і Apple передала мій Бінарний файл. Це сталося зі мною і раніше, як і з ідентифікатором Facebook. Не знаю, чому його там не показували.
Рахіль Садік

132

В iOS10 перед тим, як отримати доступ до даних про конфіденційність конфіденційності, як-от "Камера", "Контакти" тощо, потрібно попросити авторизацію, інакше програма перестане працювати, коли ви отримаєте доступ до них. Потім Xcode ввійде так:

Цей додаток вийшов з ладу, оскільки він намагався отримати доступ до конфіденційних даних без опису використання. Info.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:

введіть тут опис зображення

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

Перейдіть сюди для отримання додаткової інформації: iOS10AdaptationTips .


2
Я ніде не використовував фотографії, і яблуко відкидає мою програму, будь-яку ідею ?. Я також перевіряю всі проекти по стручках
Рахіль Садік,

@RaheelSadiq Не забудьте написати свій опис, чому ви просите про це авторизацію, між <string> і </string>, або ваш додаток буде відхилено Apple.
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
а також <key>NSCameraUsageDescription</key> <string> Зробіть фото </string>
Насір Хан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.