使用UIImagePickerController时,iOS 10错误 <私人>

我正在使用XCode 8并使用iOS 10.2 Beta进行testing。

我已经添加了照片,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]; } 

只要我点击button,应用程序崩溃,非常无用的错误:

[access] <private>

而已。 没有其他的。

使用break语句,应用程序似乎崩溃在“presentViewController”。

这是一个全新的应用程序,除了抓取button,我没有任何其他的UI。

另外,在iOS 9.3上testing,这工作正常。 我是否缺less可能在iOS 10中更改的内容?

您可能需要将NSPhotoLibrary使用说明放在您的plist中。 喜欢

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

在这里检查所有的用法描述。

在iOS10中,在访问诸如相机,联系人等隐私敏感数据之前,您必须要求授权,否则当您访问它们时,您的应用程序将崩溃。然后,Xcode将会logging如下:

这个应用程序已经崩溃,因为它试图访问隐私敏感的数据没有使用说明。 应用程序的Info.plist必须包含一个带有string值的NSContactsUsageDescription键值,向用户解释应用程序如何使用这些数据。

如何处理这个?

打开名为info.plist的项目中的文件,右键单击它,打开Source Code ,将下面的Source Code粘贴到它。 或者你可以打开info.plist为默认的Property List ,单击添加button,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> <!-- 🎤 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改变了你如何访问任何用户私有数据types。

您需要将“ 隐私 – 照片库使用说明”键添加到您应用的Info.plist及其使用信息中。

欲了解更多信息,请find下面的GIF。

GIF

或者如果你想通过info.plist添加,那么你需要添加NSPhotoLibraryUsageDescription密钥。

只需在info.plist复制并粘贴下面的string即可。

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

请参阅下面的GIF以获取更多信息。

GIF