Así que al parecer OpenURL ha sido desaprobado en iOS 10. ¿Alguien tiene alguna documentación sobre por qué o puede explicar de qué hacer a continuación? Miré en la página de Apple ya e encontrado un par de cosas que pertenecen a OpenURL y esto es lo que dicen ahora:

UIApplication.shared().open(url: URL, options: [String: AnyObject], completionHandler: ((Bool) -> Void)?)

¿Alguien tiene alguna evidencia de que esta es la nueva forma de usar OpenURL en Swift 3.0? Además cuáles son los valores a ser utilizados en la options: y completionHandler: parámetros respectivamente?

InformationsquelleAutor KSigWyatt | 2016-08-15

8 Comentarios

  1. 62

    También puede utilizar condicional comprobar si la actualización de la aplicación con iOS10 compatible con el código:

    func open(scheme: String) {
       if let url = URL(string: scheme) {
          if #available(iOS 10, *) {
             UIApplication.shared.open(url, options: [:],
               completionHandler: {
                   (success) in
                      print("Open \(scheme): \(success)")
               })
         } else {
             let success = UIApplication.shared.openURL(url)
             print("Open \(scheme): \(success)")
         }
       }
     }

    Uso:

    open(scheme: "tweetbot://timeline")

    Fuente

    • Este ejemplo es sólo para Swift 3.0. Es genial!
    • Gracias, me he adaptado a este y ahora estoy usando.
    • el uso de este deje de éxito = UIApplication.compartida().openURL(url) en lugar de esto deje de éxito = UIApplication.compartida.openURL(url)
  2. 42

    Una rápida revisión:

    //Objective-C
    UIApplication *application = [UIApplication sharedApplication];
    [application openURL:URL options:@{} completionHandler:nil];
    
    //Swift
    UIApplication.shared.open(url, options: [:], completionHandler: nil)

    Una respuesta completa:

    http://useyourloaf.com/blog/openurl-deprecated-in-ios10/

    Créditos: Keith Harrison (useyourloaf.com)

  3. 12

    Un vacío opciones de diccionario, se producirá el mismo comportamiento como openUrl.

    Lo contrario:

    +-------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------+
    | UIApplicationOpenURLOptionsSourceApplicationKey | NSString containing the bundle ID of the originating application                                                                             |
    +-------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------+
    | UIApplicationOpenURLOptionsAnnotationKey        | property-list typed object corresponding to what the originating application passed in UIDocumentInteractionController's annotation property |
    +-------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------+
    | UIApplicationOpenURLOptionsOpenInPlaceKey       | bool NSNumber, set to YES if the file needs to be copied before use                                                                          |
    +-------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------+

    De UIApplication.h

    //Options are specified in the section below for openURL options. An empty options dictionary will result in the same
    //behavior as the older openURL call, aside from the fact that this is asynchronous and calls the completion handler rather
    //than returning a result.
    //The completion handler is called on the main queue.
    - (void)openURL:(NSURL*)url options:(NSDictionary<NSString *, id> *)options completionHandler:(void (^ __nullable)(BOOL success))completion NS_AVAILABLE_IOS(10_0) NS_EXTENSION_UNAVAILABLE_IOS("");
    
    UIKIT_EXTERN UIApplicationOpenURLOptionsKey const UIApplicationOpenURLOptionsSourceApplicationKey NS_SWIFT_NAME(sourceApplication) NS_AVAILABLE_IOS(9_0);   //value is an NSString containing the bundle ID of the originating application
    UIKIT_EXTERN UIApplicationOpenURLOptionsKey const UIApplicationOpenURLOptionsAnnotationKey NS_SWIFT_NAME(annotation) NS_AVAILABLE_IOS(9_0);   //value is a property-list typed object corresponding to what the originating application passed in UIDocumentInteractionController's annotation property
    UIKIT_EXTERN UIApplicationOpenURLOptionsKey const UIApplicationOpenURLOptionsOpenInPlaceKey NS_SWIFT_NAME(openInPlace) NS_AVAILABLE_IOS(9_0);   // value is a bool NSNumber, set to YES if the file needs to be copied before use
  4. 5

    La nueva UIApplication método openURL:opciones:completionHandler:, que se ejecutan de forma asíncrona y llama a la especificada controlador de finalización en la cola principal (este método reemplaza openURL:).

    Esto es bajo Adicionales Marco de Cambios > UIKit en: https://developer.apple.com/library/prerelease/content/releasenotes/General/WhatsNewIniOS/Articles/iOS10.html

    • Ese tipo de respuestas de la pregunta, pero no del todo. es openURL:options:completionHandler: una nueva función que se supone que vamos a utilizar o es que lo que yo estaba sugiriendo en mi pregunta? donde todavía puede utilizar UIApplication.shared()...
    • Por lo que he leído, que sin duda sugiere que la openURL:options:com‌​pletionHandler: función es un reemplazo para el openUrl. No toda la documentación se ha actualizado todavía, y algunos todavía código obsoleto.
    • este es el enlace que quería escribir: developer.apple.com/library/prerelease/content/releasenotes/…
  5. 2

    Que usted necesita hacer algunos consultar primero antes de cargar la url. Por favor, compruebe los códigos de abajo.

    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"https://www.gmail.com"]]){
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://www.gmail.com"] options:@{} completionHandler:^(BOOL success) {
                                    //completion codes here
                                }];
    }

    Espero que esto ayude.

  6. 1

    Si la aplicación todavía de apoyo iOS 9 o inferior, sólo seguir usando el viejo openURL. Sólo debe mover a la nueva si el Destino de la Implementación es iOS 10.

  7. 1

    vamos real:

    [String: AnyObject] = ["xxx key": "xxx value" as AnyObject, "yyy key": "yyy value" as AnyObject]
    
    UIApplication.shared.open(URL(string: "http:google.com")!, options: actual, completionHandler: {(true) -> Swift.Void in
    print("Refresh")
    })

    Donde xxx y yyy son cualquier cadena de texto que desea imprimir o dejarlos en blanco .

  8. 0

    puede utilizar la función para abrir la configuración:

    func showAlert(title:String, message:String){
            let alert = UIAlertController(title: title,
                                          message: message,
                                          preferredStyle: UIAlertController.Style.alert)
    
            let okAction = UIAlertAction(title: "OK", style: .cancel, handler: nil)
            alert.addAction(okAction)
    
            let settingsAction = UIAlertAction(title: "Settings", style: .default, handler: { _ in
                //Take the user to Settings app to possibly change permission.
                guard let settingsUrl = URL(string: UIApplication.openSettingsURLString) else { return }
                if UIApplication.shared.canOpenURL(settingsUrl) {
                    if #available(iOS 10.0, *) {
                        UIApplication.shared.open(settingsUrl, completionHandler: { (success) in
                            //Finished opening URL
                        })
                    } else {
                        //Fallback on earlier versions
                        UIApplication.shared.openURL(settingsUrl)
                    }
                }
            })
            alert.addAction(settingsAction)
            present(alert, animated: true, completion: nil)
        }

    Llamar a esta función como esta dado por debajo de

    showAlert(title: "Unable to access the Photos", message: "To enable access, go to Settings > Privacy > Photos and turn on Photos access for this app.")

Dejar respuesta

Please enter your comment!
Please enter your name here