2015-09-16 3 views
9

Я только что перешел на XCode 6.4 в Xcode 7 GM и начал менять код, совместимый с Swift 2. Я не мог прийти к следующим ошибкам.UIApplication.sharedApplication() недоступен

Проект - расширение клавиатуры, а фрагмент - из содержащего приложения.

let s = "https://itunes.apple.com/" 
    UIApplication.sharedApplication().openURL(NSURL(string : s)!) 

Ошибка 1: 'sharedApplication()' недоступен: на основе использования контроллера зрения решения вместо того, чтобы в случае необходимости.

Ошибка 2: «openURL» недоступен.

Это может быть связано с Xcode и AppDelegate, я, возможно, испортил свой проект.

+0

Это нормальное приложение, которое вы пишете? – trojanfoe

+0

это расширение клавиатуры. Bu отправленный код из содержащего приложения расширения. У меня есть настройки экранов для клавиатуры в приложении. –

ответ

2

Классы, содержащие приложение как-то пошел в к компилировать список ресурсов в фазах создания расширений. Я удалил их, теперь все в порядке.

Я этого не делал. Очевидно, что обновление до процесса Xcode 7 GM каким-то образом это сделало.

Благодаря Скотту Anyways.

+2

Пробовал ли вы 'self.extensionContext? .open (URL (строка:« http: // ... »)!)'? –

+0

Это Swift 2.3 или новее? –

+0

Я пытаюсь self.extensionContext? .open (URL (строка: «http: // ...»)!), Но он также не работает со мной –

14

Вы не можете получить доступ к каждому API из расширения. Из руководства разработчика Extension от Apple: Некоторые API недоступны для расширений приложений

Из-за своей сфокусированной роли в системе расширение приложения не может участвовать в определенных действиях. Расширение приложение не может:

Доступ объект sharedApplication, и поэтому не может использовать любой из методов этого объекта

и т.д., и т.д.

+0

Это приложение, а не расширение. Я обычно звонил без проблем в Xcode 6.4. –

+0

Чем вы можете сделать это принятым ответом. – shallowThought

6

У вашей цели может быть опция «Разрешить только API расширения приложения».

Проверьте общие настройки своей цели, чтобы узнать, включен ли этот параметр в «Сведения о развертывании»> «Расширения приложений».

enter image description here

+0

Это была моя проблема, и это имеет смысл. – ricardopereira

+0

Измените это, если возникнут проблемы с приемом приложения в хранилище приложений? –

4

Swift 3,0

В моем случае я имел это сообщение внутри виджета (это расширение), код был копировать/вставить из моего приложения. И, как сказал Том Roggero мне пришлось заменить

UIApplication.shared.open(NSURL(string:"https:// 

по

self.extensionContext?.open(NSURL(string:"https:// 
+0

Я тоже работаю над iMessage, но 'self.extensionContext' возвращает' nil' (как в симуляторе, так и на устройстве). – MathewS

+0

@MathewS Я просто меняю свой пост, потому что я ошибся. Мне удается работать в виджетах, а не в iMessage. Приложение iMessage очень ограничено, вы должны уметь указывать URL-адрес внутри вашего приложения. http://stackoverflow.com/questions/39392420/send-url-with-imessage-app – tolbard

+0

спасибо за продолжение, рад, что я не сходил с ума, пытаясь заставить это работать :) – MathewS

5

В то время как я делал рамки. Я столкнулся с этой проблемой. Вручную установите его в НЕТ, чтобы решить мою проблему.

enter image description here

+2

Я решил проблему с этим – dobiho