Accéder au contenu principal

UIApplication::OpenURL deprecated

La fonction UIApplication::OpenURL est deprecated car Apple désire pouvoir ajouter des options et surtout un handler qui permet de vérifier que l'opération s'est bien déroulée.

Comme mes applications sont compilées pour IOS9 (iPad2) cette nouvelle fonction ne peut pas être utilisé car elle est apparue avec IOS 10. Il faut donc mettre un test sur la version d'IOS, mais cela ne suffit pas car il reste le warning deprecated qui devrait disparaitre mais qui ne disparait pas ce qui est pour le moins agaçant et il faut ajouter des #pragma pour enlever le warning.

  NSURL *url = [NSURL URLWithString:"http://monsite.fr"];

  if (@available(iOS 10.0, *)) {

    [[UIApplication sharedApplicationopenURL:url

                                       options:@{}

                             completionHandler:nil];

  } else {

#pragma GCC diagnostic push

#pragma GCC diagnostic ignored "-Wdeprecated-declarations"

     [[UIApplication sharedApplicationopenURL:url];

#pragma GCC diagnostic pop

  }



Commentaires

Posts les plus consultés de ce blog

UISceneSession is only available on iOS 13

Lorsque vous faites une nouvelle application, celle-ci est par défaut pour le dernier IOS.  Mais si vos clients, comme les miens, ont de vieux appareils, vous pourriez vouloir que votre application fonctionne avec IOS9 (pour le moment on peut encore faire des apps IOS9, mais je crois que la limite sera IOS12 dans pas longtemps). Dans les infos de déploiement, vous changez donc le IOS 14  en IOS 9. Mais, le lancement de l'app vous donne un écran noir ! Pour régler le problème, il faut ajouter une propriété "window" dans l'interface du appDelegate. @interface AppDelegate : UIResponder < UIApplicationDelegate > @property ( strong , nonatomic ) UIWindow * window ; @end Reste les warnings... Le plus simple est de faire confiance à Xcode, tapez sur les warnings et un menu vous proposera un "fix" qui ajoutera un API_AVAILABLE à la définition de la fonction. - ( void ) scene :( UIScene *)scene willConnectToSession :( UISceneSession *)session options :(

_UISheetInteractionBackgroundDismissRecognizer

Avec IOS13 les FormSheet et les PageSheet peuvent être quittés par un geste de glissement vers le haut. Mais si votre UIViewController contient un élément qui utilise les déplacements de doigts (UITouch) alors cela ne fonctionne plus à cause de la gestion de ce geste. Pour désactiver le geste, utilisez le code suivant : -( void ) viewDidAppear :( BOOL )animated {     [ super viewDidAppear :animated];     for ( UIGestureRecognizer *gr in self . presentationController . presentedView . gestureRecognizers ) {         if ( @available (iOS 11.0 , *)) {             if ([gr. name isEqualToString : @"_UISheetInteractionBackgroundDismissRecognizer" ]) {                 // disable la possibilité de quitter la feuille FormSheet ou PageSheet avec un glissement vers le haut                 gr. enabled = false ;             }         }     } }

IOS14 et Bonjour qui ne fonctionne pas.

 J'utilise Bonjour dans certaines de mes application pour échanger des données entre appareils se trouvant sur le même réseau local.  Depuis IOS14, vous devez déclarer dans info.plist : <key> NSLocalNetworkUsageDescription </key> <string> L'accès au réseau local est obligatoire pour.... </string> <key> NSBonjourServices </key> <array> <string> _http._tcp </string> </array>  La clef NSLocalNetworkUsageDescription est obligatoire pour toute utilisation du réseau local (en dehors des produits Apple comme AirDrop, AirPrint, etc.). C'est la même chose que l'accès à la caméra ou au micro, vous devez dire pourquoi vous désirez cet accès dans votre application. La clef NSBonjourServices est spécifique pour le protocole Bonjour, elle contient la liste des services que vous partagez avec Bonjour. Dans l'exemple, il s'agit d'un serveur web (http).