2015-04-15 15 views
5

da quando iOS 8.3 aggiorna la mia estensione di condivisione (che chiama la mia app principale utilizzando Schemi URL) ha smesso di funzionare. Così ho scoperto che l'approccio di UIWebView che dovevo lanciare la mia app non funziona più. Ho anche provato l'approccio consigliato da Apple, utilizzando NSExtensionContext, e ancora nessun risultato. Qualche idea su questo? Il mio codice segue:iOS 8.3 Condividi estensione - Avvio di schemi 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]; 

e

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

provo l'esecuzione di entrambi i blocchi di codice sul metodo didSelectPost dal mio controller SLComposeServiceViewController, che era il luogo dove ha funzionato bene in precedenza, prima di aggiornare il dispositivo a iOS 8.3

risposta

2

extensionContext.openURL si intende solo per le estensioni di oggi. Apple non fornisce un'API pubblica per raggiungere questo obiettivo e, a quanto risulta in iOS 8.3, Apple ha bloccato alcune soluzioni alternative. Questo sembra dal design. Se ritieni che questa funzionalità sia necessaria, apri una richiesta di miglioramento/segnalazione di bug.

+0

essi sembrano aver definito questo disegno in precedenza, ho letto da qualche parte di Apple non hanno intenzione di avere estensioni che lavorano come lanciatori app, ma, come lei ha ricordato, alcune soluzioni stavano ancora lavorando fino a 8.3 si avvicinò. la cosa strana è che non c'è quasi niente là fuori su questo tipo di problema, specialmente le estensioni di condivisione. – edulpn

+0

Aspetterò un po 'prima di accettare la tua risposta, quindi potrei ottenere una risposta più "positiva" ... – edulpn

+0

Probabilmente si può ancora ottenere usando il codice "divertente". Non è possibile chiamare UIApplication.openURL in fase di compilazione, ma probabilmente è possibile farlo utilizzando il runtime e potrebbe funzionare. Ma questo sta giocando col fuoco. –

3

Puoi provare con questo codice, funziona ma non so se sarebbe accettato da 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

Sì, funziona per me in iOS 8.3. Grazie – romanvbabenko

+0

@romanvbabenko Hai ottenuto questo attraverso l'App Store? – edulpn