使用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中,如果您在应用程序中使用相机或照片库,则需要添加下面提到的关键字
您需要将新的隐私设置添加到您的info.plist。
不要忘记添加描述为什么应用程序需要访问服务的值。
在iOS 10中,Apple改变了你如何访问任何用户私有数据types。
您需要将“ 隐私 – 照片库使用说明”键添加到您应用的Info.plist
及其使用信息中。
欲了解更多信息,请find下面的GIF。
或者如果你想通过info.plist
添加,那么你需要添加NSPhotoLibraryUsageDescription密钥。
只需在info.plist
复制并粘贴下面的string即可。
<key>NSPhotoLibraryUsageDescription</key> <string>Take the photo</string>
请参阅下面的GIF以获取更多信息。