Watchkit — общий код — фреймворк, расширение приложения, группы приложений, добавить цель или просто скопировать файлы?

У меня есть существующее приложение, и я добавляю в него приложение Watch. У меня есть несколько файлов .swift с кодом из моего основного приложения, которые мне нужно будет использовать для приложения watchkit (функции и некоторые константы и т. д.). Меня смущают варианты обмена этим кодом — как мне узнать, какой из них попробовать и использовать?

Создать группу приложений, собственную структуру, расширение приложения? На самом деле я начал просто копировать файлы .swift в папку моего приложения watchkit и заметил, что когда вы добавляете файл в Xcode в появившемся диалоговом окне, вы получаете флажки «Добавить в цели», так что это заставило меня задуматься - есть ли способ просто изменить свойства моих файлов .swift в главном разделе приложения и отметить там приложение WatchKit в разделе «Добавить к целям»?

Кажется, это был бы выход, не так ли?

спасибо за любую помощь


person Tommy Draughn    schedule 07.04.2015    source источник


Ответы (2)


Я решил, что просто щелкаю файлы и добавляю их в обе цели. (цель приложения iphone и цель расширения Apple Watch).

Чтобы исправить проблему с общим приложением, я использовал это:

#if (SL_TARGET_APP_EXTENSION == NO)
    [[UIApplication sharedApplication] .....
#endif 

SL_TARGET_APP_EXTENSION — это макрос препроцессора, добавленный в цель расширения Apple Watch.

Надеюсь, поможет.

person Javier Flores Font    schedule 07.04.2015
comment
Я пытаюсь это сделать и столкнулся с проблемой с этой строкой кода в одном из файлов, которые я добавил в цель расширения просмотра: пусть appDelegate = UIApplication.sharedApplication().delegate as AppDelegate - это дает мне ошибку недоступен: вместо этого используйте решения на основе контроллера представления, где это уместно. Я читаю об этом сейчас .. bah - person Tommy Draughn; 07.04.2015
comment
Итак, я думаю, это означает, что для вашего приложения вам не нужно общее приложение для приложения для часов? Что мне делать, если мне это нужно? - person Tommy Draughn; 07.04.2015
comment
Вы не можете, посмотрите по этой ссылке: developer.apple.com/library/prerelease/ios/documentation/ Доступ к объекту sharedApplication, поэтому нельзя использовать какие-либо методы этого объекта - person Javier Flores Font; 07.04.2015
comment
Я использую это общее приложение только для удаления объектов из основных данных. Это то, для чего ты его тоже используешь? Что вы сделали, чтобы обойти эту проблему? - person Tommy Draughn; 07.04.2015
comment
Эта библиотека использует coredata в watchkit и не имеет доступа к sharedApplicaton: github.com/aalittle/CoreDataWatchKit Надеюсь, это помогает - person Javier Flores Font; 07.04.2015
comment
Большое спасибо, Хавьер. Это отличный пример с небольшим 10-минутным видео. И, по-видимому, ответ на мой первоначальный вопрос заключается в том, что вы не выберете один из этих методов, но вам нужно будет использовать почти все из них. Для тех, кто застрял на этом, просто посмотрите видео, и вы поймете, что я имею в виду (это youtube, который идет с github Javier, указанным выше - youtube.com/watch?v=-vR0d7jTuxo&feature=youtu.be - person Tommy Draughn; 08.04.2015

Чтобы поделиться кодом между приложением Apple Watch и вашим основным приложением, вам нужно создать фреймворк с этим общим кодом. Вы сами сказали, что приложение Apple Watch — это совершенно новая цель — оно не будет ничего знать о вашем существующем коде.

Создавая группу приложений, вы также можете поделиться NSUserDefaults: с помощью initWithSuiteName, а для Coredata вы можете пойти по маршруту общего контейнера.

person Dreaming In Binary    schedule 07.04.2015
comment
Хорошо, понял - спасибо. Чтобы помочь мне понять, почему я не могу просто добавить расширение watchkit к целевому членству файлов? - person Tommy Draughn; 07.04.2015
comment
Не обращайте внимания на этот вопрос комментария, теперь я понял - вы были правы. Просто у меня еще не было всех частей. Большое тебе спасибо. - person Tommy Draughn; 08.04.2015