2015-04-15 1 views
5

depuis iOS 8.3 mettre à jour mon extension de partage (qui appelle mon application principale à l'aide de schémas d'URL) a cessé de fonctionner. J'ai donc découvert que l'approche UIWebView que j'avais pour lancer mon application ne fonctionne plus. J'ai également essayé l'approche recommandée par Apple, en utilisant NSExtensionContext, et toujours pas de résultats. Des pensées à ce sujet? Mon code suivant:iOS 8.3 Extension de partage - Lancement de schémas d'URL

UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)]; 
[self.view addSubview: webView]; 
NSString *urlString = "com.myappscheme://shareextension"; 
NSString * content = [NSString stringWithFormat : @"<head><meta http-equiv='refresh' content='0; URL=%@'></head>", urlString]; 
[webView loadHTMLString:content baseURL:nil]; 

et

[self.extensionContext openURL:[NSURL URLWithString:urlString] completionHandler:^(BOOL success) 
{ 
    NSLog(@"fun=%s after completion. success=%d", __func__, success); 
}]; 

J'essaie d'exécuter les deux blocs de code sur la méthode didSelectPost de mon contrôleur SLComposeServiceViewController, qui était où il a bien fonctionné auparavant, avant de mettre à jour mon appareil iOS 8.3

Répondre

2

extensionContext.openURL est destiné uniquement aux extensions Aujourd'hui. Apple ne fournit pas une API publique pour y parvenir, et il semble que dans iOS 8.3, Apple a bloqué certaines des solutions de contournement. Cela semble par conception. Si vous pensez que cette fonctionnalité est nécessaire, veuillez ouvrir une demande d'amélioration/rapport de bogue.

+0

ils semblent avoir défini cette conception plus tôt, je l'ai lu quelque part d'Apple n'ont pas l'intention d'avoir des extensions de travail en tant que lanceurs d'applications, mais, comme vous l'avez mentionné, certaines solutions de contournement travaillaient encore jusqu'à 8.3 se présentaient. chose étrange est qu'il n'y a presque rien là-bas sur ce genre de problème, surtout des extensions de partage. – edulpn

+0

Je vais attendre un peu avant d'accepter votre réponse, donc je pourrais obtenir une réponse plus "positive" ... – edulpn

+0

Il peut probablement encore être atteint en utilisant le code "drôle". Vous ne pouvez pas appeler UIApplication.openURL au moment de la compilation, mais vous pouvez probablement le faire en utilisant runtime, et cela pourrait fonctionner. Mais c'est jouer avec le feu. –

3

Vous pouvez faire un essai avec ce code, cela fonctionne mais je ne sais pas si cela serait accepté par Apple.

UIResponder* responder = self; 
    while ((responder = [responder nextResponder]) != nil) { 
     NSLog(@"responder = %@", responder); 
     if ([responder respondsToSelector:@selector(openURL:)] == YES) { 
      [responder performSelector:@selector(openURL:) withObject:[NSURL URLWithString:@""]]; 
     } 
    } 
+0

Oui, ça marche pour moi dans iOS 8.3. Merci – romanvbabenko

+0

@romanvbabenko Avez-vous obtenu cela via l'App Store? – edulpn