Error de integración de Facebook (AccountsFramework) en iOS6

Estoy usando el siguiente código (mostrado en los videos de WWDC 2012):

self.accountStore = [[ACAccountStore alloc] init]; ACAccountType *facebookAccountType = [self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook]; [self.accountStore requestAccessToAccountsWithType:facebookAccountType withCompletionHandler:^(BOOL granted, NSError *e) { if (granted) { NSArray *accounts = [self.accountStore accountsWithAccountType:facebookAccountType]; self.facebookAccount = [accounts lastObject]; } else { // Fail gracefully... } }]; 

También he agregado el NSDictionary a mi file .plist :

introduzca la descripción de la imagen aquí

Entonces, mi problema es que estoy recibiendo la siguiente exception:

  *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Access options are requinetworking for this account type.' 

He intentado con este ACAccountTypeIdentifierTwitter y ACAccountTypeIdentifierSinaWeibo . No estoy recibiendo ninguna exception, aunque siempre están regresando granted == NO

Bien, la WWDC 2012 muestra una cosa, pero la documentation muestra otra … El método que están utilizando ahora está en desuso:

 – requestAccessToAccountsWithType:withCompletionHandler: Deprecated in iOS 6.0 

Lo que debes hacer:

 ACAccountType *facebookAccountType = [self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook]; NSDictionary *options = @{ @"ACFacebookAppIdKey" : @"123456789", @"ACFacebookPermissionsKey" : @[@"publish_stream"], @"ACFacebookAudienceKey" : ACFacebookAudienceEveryone}; // Needed only when write permissions are requested [self.accountStore requestAccessToAccountsWithType:facebookAccountType options:options completion:^(BOOL granted, NSError *error) { if (granted) { NSArray *accounts = [self.accountStore accountsWithAccountType:facebookAccountType]; self.facebookAccount = [accounts lastObject]; } else { NSLog(@"%@",error); // Fail gracefully... } }]; 

Swift 3

 let account = ACAccountStore() let accountType = account.accountType(withAccountTypeIdentifier: ACAccountTypeIdentifierFacebook) let options: [AnyHashable : Any] = [ACFacebookAppIdKey: "Your App ID on FB", ACFacebookPermissionsKey: ["publish_stream", "publish_actions"], ACFacebookAudienceKey: ACFacebookAudienceEveryone] account.requestAccessToAccounts(with: accountType, options: options) { (success, error) in if success { if let accounts = account.accounts(with: accountType) { if accounts.isEmpty { print("No facebook account found, please add your facebook account in phone settings") } else { let facebookAccount = accounts.first as! ACAccount let message = ["status": "My first Facebook posting "] let requestURL = URL(string: "https://graph.facebook.com/me/feed") let postRequest = SLRequest(forServiceType: SLServiceTypeFacebook, requestMethod: SLRequestMethod.POST, url: requestURL, parameters: message) postRequest?.account = facebookAccount postRequest?.perform(handler: {(_, urlResponse, error) in if let err = error { print("Error : \(err.localizedDescription)") } print("Facebook HTTP response \(String(describing: urlResponse?.statusCode))") }) } } } else { print("Facebook account error: \(String(describing: error))") } }