Совместное использование файлов несколькими целями

У меня есть приложение для iOS (Single View Application), которое я создал еще в 2012 году. Теперь я хочу добавить в решение цель «Сегодняшнее расширение». Я добавил сегодняшнее расширение как отдельную цель. Проблема, с которой я столкнулся, заключается в том, что я не могу использовать ни один из файлов, которые я добавил в свой исходный проект.

Даже если я импортирую заголовки, я все равно не могу создать экземпляры классов, которые принадлежали моему исходному проекту. Как я могу разделить классы между двумя целями.

ГЛАВНАЯ ПРОБЛЕМА:

Основная проблема заключается в том, что я создаю базу данных SQLITE в целевом объекте по умолчанию. База данных хранится в каталоге документов основного приложения. Проблема в том, что сегодняшнее расширение не может получить доступ к этому каталогу, и даже если я сохраню путь в NSUserDefaults, он все равно не сможет получить к нему доступ.


person john doe    schedule 30.04.2015    source источник
comment
Есть ли ошибки, связанные с импортом заголовков? Какое конкретное сообщение об ошибке / проблема не позволяет вам создать экземпляры классов из исходного проекта?   -  person Craig Otis    schedule 30.04.2015


Ответы (3)


Вы должны зарегистрировать файл в своем инспекторе, чтобы поделиться им с целевым расширением Today.

введите описание изображения здесь
Выберите файл .m и в правом столбце (инспектор) вы можно проверить "Целевое членство" файла. Просто добавьте его в свое расширение.
(На картинке выше Weather Live - Suisse - это сегодняшнее расширение и другие регулярные целевые приложения).

person David 'mArm' Ansermot    schedule 30.04.2015
comment
Спасибо! Я попробую. Я изменил целевое членство одного класса на сегодняшнее расширение, но оно вызывает несколько других классов, поэтому похоже, что мне нужно вручную добавить много классов в цель сегодняшнего расширения. - person john doe; 30.04.2015
comment
Да, иногда это довольно раздражает, но я не знаю другого способа добавить файлы к вашему расширению. - person David 'mArm' Ansermot; 30.04.2015
comment
Другая проблема заключается в том, что база данных хранится в каталоге Documents одного целевого объекта, к которому нельзя получить доступ из текущего целевого расширения. - person john doe; 30.04.2015
comment
Это другой вопрос - person David 'mArm' Ansermot; 30.04.2015

По ссылкам Zubair ниже:

  • Создайте группу приложений (например, group.com.yourcompany.app) и назначьте ее как вашему приложению, так и вашему виджету.
  • При открытии документа, чтобы получить для него NSURL, используйте, например:

    NSURL *storeURL ;
    
    storeURL= [[[NSFileManager defaultManager]
                containerURLForSecurityApplicationGroupIdentifier:@"group.com.yourcompany.app"]
               URLByAppendingPathComponent:@"yourdatabase.sqlite"];
    

Не обязательно использовать общую структуру, но это позволяет избежать дублирования кода.

person asoonh    schedule 01.05.2015

  • Вам необходимо создать встроенную платформу для обмена кодом между расширением вашего приложения и приложением, в котором оно находится.

  • Чтобы включить совместное использование данных, используйте Xcode или портал разработчика, чтобы включить группы приложений для содержащего приложения и содержащихся в нем расширений приложений.

Вот ссылки на документацию Apple

Добавление группы приложений

Обработка общих сценариев в приложениях и расширениях

это описывает все, что вам нужно.

person M Zubair Shamshad    schedule 30.04.2015
comment
Встроенный фреймворк не требуется, и он говорит не о совместном использовании данных, а о совместном использовании файлов кода. - person David 'mArm' Ansermot; 30.04.2015
comment
@ David'mArm'Ansermot Чтобы поделиться кодом, вы должны использовать встроенный фреймворк, вот что я сказал - person M Zubair Shamshad; 30.04.2015