Unable to access iPhone Gallery in iOS 10 - objective-c

I am trying to access photos gallery in ios 10. But my application got crash every time. I have added required privacy permission in info.plist
Please check my code below and let me know, where i have gone wrong.
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.allowsEditing = YES;
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[self presentViewController:picker animated:YES completion:NULL];
I have added Privacy - Media Library Usage Description in info.plist
I am getting below message in my console
http://prntscr.com/eg756r

In 'info.plist' you should use
Privacy - Photo Library Usage Description
Which will allow your app to access photo library

in intfo.plist File you need to add NSPhotoLibraryUsageDescription
To protect user privacy, an iOS app linked on or after iOS 10.0, and which accesses the user’s photo library
Please Check Below Post for more Info
https://iosdevcenters.blogspot.com/2016/09/infoplist-privacy-settings-in-ios-10.html

This should help. Here’s a mapping of each of the values that you can find and add the relevant permission key to the Info.plist:
Bluetooth Sharing – NSBluetoothPeripheralUsageDescription
Calendar – NSCalendarsUsageDescription
CallKit – NSVoIPUsageDescription
Camera – NSCameraUsageDescription
Contacts – NSContactsUsageDescription
FaceID - NSFaceIDUsageDescription
Health – NSHealthShareUsageDescription & NSHealthUpdateUsageDescription
HomeKit – NSHomeKitUsageDescription
Location – NSLocationUsageDescription, NSLocationAlwaysUsageDescription, NSLocationWhenInUseUsageDescription
Media Library – NSAppleMusicUsageDescription
Microphone – NSMicrophoneUsageDescription
Motion – NSMotionUsageDescription
Photos – NSPhotoLibraryUsageDescription
Reminders – NSRemindersUsageDescription
NFC - NFCReaderUsageDescription
Speech Recognition – NSSpeechRecognitionUsageDescription
SiriKit – NSSiriUsageDescription
TV Provider – NSVideoSubscriberAccountUsageDescription

Related

Facebook share functionality is not working in iOS8

I have implemented Facebook sharing functionality using social framework. I have configured the Facebook account using device setting. When I installed the Facebook app on device, sharing is not working as expected.
When share window appears, it only has the image for sharing and no initial text and URL.
iOS8 - Share functionality is working properly if I remove the Facebook app from device.
iOS7 - Share functionality is working properly even the Facebook app is on device.
I am not sure where it is a framework issue or something is missing?
SLComposeViewController *facebookShareVC = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
NSString *imagePath = [NSString stringWithFormat:#"%#/%#_%#_%#.gif", [[STInteractionManager sharedManager] getAppLibraryCacheDirectory], article.journalID, article.volume, article.issueNumber];
UIImage* img = [[STInteractionManager sharedManager] imageNamedFromDocuments:imagePath];
[facebookShareVC setInitialText:self.articleTitle];
[facebookShareVC addURL:[NSURL URLWithString:[self.url stringByReplacingOccurrencesOfString:#"?dispform=ios-device" withString:#""]]];
[facebookShareVC addImage:img];
[self presentViewController:facebookShareVC animated:YES completion:nil];
If you want to pre-fill the fields, you shouldn't use the Facebook SDK at all. Instead, use the Social framework provided by Apple. With only a few lines of code, you can trigger the SLComposeViewController.

Images in user notifications

How do I create user notifications with cocoa that contain Images. Like Airmail or Alfred does?
For instance Airmail includes a contact image in the mail notification if the one is present:
I haven't found any documentation how to add this via code. Do I have to use a custom notification center?
I have found the CNUserNotification project but when I use it the notifications won't show up in the notification sidebar.
If you create user notifications using NSUserNotification, on Mavericks +, setting contentImage does the trick. Strangely enough it's not documented, but it's exposed and in the release notes. OS X 10.8 or less would necessitate a custom solution.
NSUserNotification *notification = [[NSUserNotification alloc] init];
notification.contentImage = [NSImage imageNamed:#"imageNamed"];

UIImagePickerController on iOS 7: Square mode?

I'm working with iOS 7 now, trying to get the UIImagePickerController to let the user select a square mode since it's a feature in iOS 7 now. Is there something I need to enable to allow this swipe? Relevant code posted below, though it's pretty standard.
UIImagePickerController *cameraView = [[UIImagePickerController alloc] init];
cameraView.sourceType = UIImagePickerControllerSourceTypeCamera;
cameraView.delegate = (id)self;
[self presentViewController:cameraView animated:YES completion:nil];
I've been scouring the messy iOS 7 documentation that's available, but I can't even tell if they changed the developer library at all - I don't see ANYTHING new in it.
set allowEditing to YES.
from the result dict use the key UIImagePickerControllerEditedImage
then you will have the squared image.
i find no way to let the user select, which format he want :(
I looked at the iOS 7 header for UIImagePickerController in Xcode, and I do not see new API for 7.0 or a square photo mode. The square photo mode appears to be a feature of the app, not of UIImagePickerController.

Sharing with iOS 6.0 native Facebook integration: "Posted via my app name"?

I have just integrated facebook into my app via ios 6 but I have an issue when posting on my wall. It simply says "post via ios app". I want it to say "posted via the app name". I have made an app identity with facebook and I have the app number they have assigned but I am not sure how to integrate this with facebook integration.
Below is my code. If anyone could help, it would be appreciated. Thanks!
{
NSString *message;
message= [[NSString alloc] initWithFormat:#"I've earned %# points", [self retrieveScore]];
if([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) {
SLComposeViewController *controller = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
[controller setInitialText:message];
[controller addURL:[NSURL URLWithString:#"http://mysite"]];
[self presentViewController:controller animated:YES completion:Nil];
[message release];
SLComposeViewControllerCompletionHandler myBlock = ^(SLComposeViewControllerResult result){
NSString *output= nil;
switch (result) {
case SLComposeViewControllerResultCancelled:
output= #"Action Cancelled";
NSLog (#"cancelled");
break;
case SLComposeViewControllerResultDone:
output= #"Post Succesfull";
NSLog (#"success");
break;
default:
break;
}
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:#"Facebook" message:output delegate:nil cancelButtonTitle:#"Ok" otherButtonTitles:nil];
[alert show];
[alert release];
[controller dismissViewControllerAnimated:YES completion:Nil];
};
controller.completionHandler =myBlock;
}
UPDATE - it can be done
So the Digg for iOS app is able to share to Facebook without using the Accounts framework to get user permissions... They use UIActivityViewController and have the post appear as "via Digg", I contacted someone from Digg and they told me that it's a manual process, you must have your iOS app published in the Apple App Store and also have your Facebook application accepted and published in the Facebook App Store.
Then Facebook can manually process linking the two in this way.
The obvious downside to this is that UIActivityViewController meant that you can share from your app without any integration with Facebook, no need for a Facebook app... But to get "via Your App Name" you will need a Facebook app that Facebook will approve into their own app store, once everything is live, you'll need to contact developer relations to link it all up.
Note that the rest of my answer (my previous answer) is correct, the solution is a manual process that Facebook can do for you, your iOS code shouldn't be affected.
Previous Answer and workaround
The native Facebook integration you want is actually the composer view controller. This is obtained by using the SLComposeViewController class with service type SLServiceTypeFacebook.
This class only provides a one way communication and as you notice, you are the one confirming any wall posts by tapping the Post button. This view controller is owned by the iOS system, not your app. And by interacting with this compose view controller you are actually bypassing your application.
Users like to do this because it gives them security.
Unless your application functions only by a deeper, two-way Facebook integration you should use the SLComposeViewController (deeper integration meaning your app needs your friends list or existing wall posts, albums etc...).
In order for a post originating from your application to appear on Facebook with the "via xxxx" and not "via iOS", you need to interact with Facebook via the SLRequest class. In order to do this you must also interact with the Account.framework in addition to Social.framework.
It resembles the previous Facebook iOS SDK previously used (and still can use) in terms of setting it up, you get a reference to the Accounts store of the device, you request for Facebook accounts and send your Facebook app ID and an array of permissions.
If granted you may then interact with the Facebook Graph API via the SLRequest class. By posting to your wall in this manor you will have the desired "via xxx".
To use this please check out the documentation for SLRequest.
Please note that you are responsible for creating your own compose view in this case.
You can of course inspire yourself from the native UI, also check out iPhoto's iOS app, try sharing to Facebook with that app, you will notice it requests permission to interact with your Facebook account (something that does not occur when using SLComposeViewController), it then presents something very close to the SLComposeViewController for Facebook post composing.
But if you look closer you'll notice it is not the same. This also goes for Twitter and their native app vs native integration. They have their own compose view, it's really interesting to note they use the native iOS integration (the Apple frameworks). We know this because going to Settings > Privacy > Twitter you can see Twitter app is an authorised app using the Twitter account(s) on the device.
Same goes for Facebook.
If you don't get permission then you have no way of publishing as your app - aka "via myApp".
Sorry to let you down, I also had been searching a way to integrate an ACAccount into the SLComposeViewController but couldn't find the way either. Which is a shame... because the native UI is sweet.
I ended up using a custom Facebook framework with the new Facebook SDK 3.1.
Facebook Compose View
The original is here: facebook compose view. I've just fixed a few minor warnings and updated with the new FB SDK 3.1.
Usage:
DEFacebookComposeViewControllerCompletionHandler __block completionHandler = ^(DEFacebookComposeViewControllerResult result) {
[self dismissViewControllerAnimated:YES completion:nil];
switch (result) {
case DEFacebookComposeViewControllerResultCancelled:
NSLog(#"Facebook Result: Cancelled");
break;
case DEFacebookComposeViewControllerResultDone:
NSLog(#"Facebook Result: Sent");
break;
}
};
DEFacebookComposeViewController * compose = [[DEFacebookComposeViewController alloc] init];
[compose setInitialText:self.shareText];
[compose addImage:self.shareImage];
[compose addURL:self.shareURL];
[compose setCompletionHandler:completionHandler];
[self presentViewController:compose animated:YES completion:^{}];
Setup:
Open the project and do a clean build.
Go into the folder $PROJECT_FOLDER\build\Debug-iphonesimulator and drag both the FBComposeView.framework & FBComposeView.bundle into your project.
Note: Be sure to use the ones in the Debug-iphonesimulator. It is the fat binary.
We solved similar problem with iOS 5 Twitter integration, and the result is:
When posting to Twitter with a dev build or via the simulator it will almost always show up on Twitter as "via iOS". Once your app is approved and you post from the AppStore build it should show up as posted by "YourAppName on iOS" with a link to the apps appstore page.
original source (ShareKit issue discussion)
I suppose Apple does the same with Facebook and other social services.
EDIT: unfortunately this only really worked with Twitter.framework. I think the best explanation and answer is the Daniel's one above. Maybe it is a time to radar it, so that Apple knows, what do we want.
Examples of how to use SLRequest with Facebook are in this SO question
EDIT2: filed a radar Bug ID# 12980058. Hopefully they listen...

iOS keep gps permission during the session

My app loads a jquery + google maps file into webview and when viewDidLoad activates an alert asking for gps accessing (as normal). After validating it, if this view is reloaded later, still pushing the alert! how to keep gps permissions in order to avoid multiple alerts asking for permission? Thank you.
I would try to access the GPS from native Obj-C code first, and after that let the webview to load:
CLLocationManager *locationManager = [[CLLocationManager alloc] init];
[locationManager startUpdatingLocation];
[locationManager stopUpdatingLocation];
This should validate your app to use the GPS, and therefore the Webview to use it (at least if it is a local webview, not sure if it is remote).