¿Cómo abrir preferencias / configuraciones con iOS 5.1?

Parece que iOS 5.1 ha roto la encoding URL estándar para navegar a un usuario a una preferencia.

Por ejemplo:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=TWITTER"]]; 

Funciona en iOS 5.0 pero no en iOS 5.1 (dispositivo y simulador).

¿Alguien ha encontrado la manera de replicar esta funcionalidad en iOS 5.1?

No, no sé cómo replicar esta funcionalidad.

Pero lo que puedes hacer es archivar un Radar solicitando la restauración. Aquí hay un radar que solicita que los esquemas se documenten en primer lugar.

David Barnard ha confirmado que iOS 5.1 rompe los esquemas de URL de aplicaciones de configuración.


Actualización : iOS 8 tiene una funcionalidad similar para abrir la configuración de su aplicación. Gracias Apple, Mike y Soto_iGhost .

La constante UIApplicationOpenSettingsURLString (UIApplication Documentation) abrirá la configuración de su aplicación y no, por ejemplo, la configuración de Twitter. No es exactamente la misma funcionalidad pero mucho más limpia que antes y ahora oficialmente reconocida.

Esto debería ser más útil ahora que cada aplicación tiene un lugar en la Configuración para usar la privacidad, los datos móviles, la actualización de la aplicación de fondo y las notificaciones.

Es un poco complicado, obtengo la eliminación de las subvistas en *TWTWeetComposeViewController* , por lo que muestra solo alerta cuando el usuario no está conectado y al hacer clic en el botón de configuración, podemos abrir la página de configuración en mi aplicación.

  + (void)setAlertForSettingPage :(id)delegate { // Set up the built-in twitter composition view controller. TWTweetComposeViewController *tweetViewController = [[TWTweetComposeViewController alloc] init]; // Create the completion handler block. [tweetViewController setCompletionHandler:^(TWTweetComposeViewControllerResult result) { [delegate dismissModalViewControllerAnimated:YES]; }]; // Present the tweet composition view controller modally. [delegate presentModalViewController:tweetViewController animated:YES]; //tweetViewController.view.hidden = YES; for (UIView *view in tweetViewController.view.subviews){ [view removeFromSuperview]; } } 

aquí, delegate es tu viewcontroller, si usas este método dentro de tu viewcontroller simplemente usa self lugar de delegate .

EDITAR: si obtienes algún error obsoleto, utiliza el siguiente código compatible con iOS6:

 - (void)setAlertForSettingPage { // Set up the built-in twitter composition view controller. SLComposeViewController *tweetViewController = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter]; // Present the tweet composition view controller modally. [self presentViewController:tweetViewController animated:YES completion:nil]; for (UIView *view in tweetViewController.view.subviews){ [view removeFromSuperview]; } } 

Puedes hacerlo.

 TWTweetComposeViewController *ctrl = [[TWTweetComposeViewController alloc] init]; if ([ctrl respondsToSelector:@selector(alertView:clickedButtonAtIndex:)]) { // Manually invoke the alert view button handler [(id )ctrl alertView:nil clickedButtonAtIndex:0]; } 

Si miras en el marco de Twitter (ese controlador de vista de Twitter), tiene “prefs: root = TWITTER” adentro, 5.1 también tiene esta línea. Entonces, probablemente Apple hizo algo para deshabilitarlo para otras aplicaciones, como alguna clave especial en plist o el método “openURL” de alguna manera comprueba si no es una aplicación del sistema.