I am using XCode 8 and testing with iOS 10.2 Beta.
I have added the Photos, PhotosUI and MobileCoreServices frameworks to project.
Very simple code:
#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
and implementation:
- (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];
}
As soon as I tap the button, the app crashes with very useless error:
[access] <private>
That's it. Nothing else.
Using break statements, the app seems to crash at "presentViewController".
This is a brand new app and I don't have anything else in the UI other than the grab button.
Also, testing on iOS 9.3, this works fine. Am I missing something which might be changed in iOS 10?
In iOS10, Before you access privacy-sensitive data like Camera, Contacts, and so on, you must ask for the authorization, or your app will crash when you access them.Then Xcode will log like:
How to deal with this?
Open the file in your project named
info.plist
, right click it, opening asSource Code
, paste this code below to it. Or you can openinfo.plist
asProperty List
by default, click the add button, Xcode will give you the suggest completions while typingPrivacy -
with the help of keyboard ⬆️ and ⬇️.Remember to write your description why you ask for this authorization, between
<string>
and</string>
, or your app will be rejected by apple:You need the add the new privacy settings to you info.plist.
Don't forget to add the value describing why the app need to access the service.
in iOS 10 you need to add the key mentioned in below image if you are using camera or photo gallery in your app
You may need to put the NSPhotoLibraryUsageDescription in your plist. Like
Check all the usage descriptions here.
In iOS 10, Apple has changed how you can access any user private data types.
You need to add the Privacy - Photo Library Usage Description key to your app’s
Info.plist
and their usage information.For more information please find the below GIF.
Or if you want to add via
info.plist
then you need to add NSPhotoLibraryUsageDescription key.Just copy and paste below string in
info.plist
.Please find the below GIF for more information.