2015-03-25 2 views
3

Я создаю расширение Сегодня. Я добавил все необходимые файлы и получать кучу ошибок компиляции оiOS - sharedApplication недоступен в Today Extension?

  • OpenUrl не доступен
  • sharedApplication не доступен
  • INIT на UIAlertView не доступен

Файлы с этим зависимостей встроены в мое приложение (обработчик ошибок на моем сетевом уровне и т. д.), и я знаю, что они не будут использоваться в Today Extension, но для того, чтобы полностью избавиться от зависимости в этих файлах, мне нужно реорганизовать всего приложения. Есть ли способ обойти это?

Мой код Swift, поэтому я не могу использовать макросы компилятора, чтобы избежать выполнения этих строк кода.

#if! TARGET_IS_TODAY_EXTENSION #endif

ответ

4

Вы можете использовать макросы компилятора, хотя это не так гибок, как с Objective-C (и ИМО немного неправильно спроектированный). Если добавить что-то вроде -DTODAY_EXTENSION в раздел «Другая Swift Flags» настройки сборки для расширения сегодня, вы можете сделать что-то вроде этого в коде:

#if TODAY_EXTENSION 
     println("In today extension") 
    #else 
     println("Not in today ext") 
    #endif 

Это просто работает. Однако:

  • Компилятор, кажется, игнорирует макросы со значением, так что если вы используете что-то вроде -DTODAY_EXTENSION=1 это не будет иметь никакого эффекта. Оставьте значение и сделайте это -DTODAY_EXTENSION
  • #if работает при проверке макроса, но #ifdef нет.

У Apple есть some documentation on this, но мне все еще пришлось поэкспериментировать, чтобы заставить его работать.

0

Если код, который использует .shared, находится в структуре (то есть, cocoapod), то вы не можете использовать макросы компилятора. Здесь есть подход, который должен работать: iOS 8 Extension How To Detect Running

Смежные вопросы