2015-04-15 2 views
5

, так как обновление iOS 8.3 моего расширения общего доступа (которое вызывает мое основное приложение с использованием схем URL-адресов) перестало работать. Поэтому я узнал, что подход UIWebView, который я должен был запустить, не работает. Я также пробовал подход Apple рекомендует, используя NSExtensionContext, и по-прежнему никаких результатов. Любые мысли об этом? Мой код следующим образом:iOS 8.3 Расширение общего доступа - запуск схем 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]; 

и

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

я пытаюсь выполнения обоих блоков кода на методе didSelectPost от моего контроллера SLComposeServiceViewController, который был, где он работал отлично ранее, перед обновлением моего устройства к прошивкой 8.3

ответ

2

extensionContext.openURL предназначен только для продлений Today. Apple не предоставляет публичный API для достижения этого, и, похоже, в iOS 8.3 Apple заблокировала некоторые из обходных решений. Это похоже на дизайн. Если вы считаете, что эта функция необходима, откройте отчет об улучшении/ошибке.

+0

они, кажется, определили этот проект раньше, я читал где-то Apple, не намерен иметь расширение, работающее в качестве приложения пусковых установок, но, как вы упомянули, некоторые обходные пути все еще работали до 8,3 не взошли. Странно то, что почти ничего нет в этом вопросе, специально распространяйте расширения. – edulpn

+0

Я подожду немного, прежде чем принять ваш ответ, поэтому я могу получить более «положительный» ответ ... – edulpn

+0

Возможно, это может быть достигнуто с помощью «смешного» кода. Вы не можете вызывать UIApplication.openURL во время компиляции, но вы, вероятно, можете сделать это с помощью среды выполнения, и это может сработать. Но это игра с огнем. –

3

Вы можете попробовать этот код, это работает, но я не знаю, будет ли 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

Да, это работает для меня в iOS 8.3. Спасибо – romanvbabenko

+0

@romanvbabenko Вы получили это через App Store? – edulpn