Расширения общего доступа - это тип расширения приложения в iOS, которое расширяет функциональность вашего приложения. Пользователи смогут делиться другими формами контента с вашим приложением. Подумайте о том, чтобы поделиться статьей, которая вам нравится в Safari, через WhatsApp, а своими фотографиями - через Instagram. Nativescript версии 5.3 также представил бета-версию поддержки общих расширений. Я работал с NativeScript над запуском приложения с расширением общего доступа в производство и нашел общий процесс приятным.

Праймер для обмена расширениями

Прежде чем приступить к созданию расширения общего доступа, давайте разберемся, как работают расширения общего доступа. Расширения общего доступа связаны с вашим основным приложением, но имеют собственный жизненный цикл и среду. В отличие от вашего хост-приложения, расширение общего ресурса не запускается, пока пользователь не выберет его на листе общего доступа iOS. Еще одна вещь, на которую следует обратить внимание, заключается в том, что расширение общего ресурса не обменивается данными и не обменивается данными напрямую с хост-приложением. В iOS связанные приложения и расширения обмениваются данными через группы приложений.

Создание расширения общего ресурса в NativeScript

Создание расширения общего ресурса в NativeScript во многом похоже на то, как вы делаете это изначально через Xcode. Если у вас уже есть опыт работы с этим изначально, не стесняйтесь сразу переходить к части, относящейся к NativeScript. В остальном процесс выглядит так:

  • Использование Xcode для формирования расширения общего ресурса
  • Интеграция его в процесс сборки NativeScript
  • Кодирование расширения для вашего общего ресурса
  • Совместное использование данных с вашим хост-приложением

Создание шаблона для расширения общего ресурса с помощью Xcode

Во-первых, мы захотим использовать Xcode для создания каркаса нашего расширения общего ресурса. Это даст нам базовое расширение рабочего ресурса. Откройте проект Xcode iOS приложения NativeScript, расположенный в platforms/ios. NativeScript использует CocoaPods, поэтому убедитесь, что вы открыли файл .xcworkspace, а не файл .xcodeproj.

В мире уже существует бесчисленное множество руководств, в которых описывается, как это сделать в Xcode, поэтому я свяжу вас с официальным руководством Apple вместо того, чтобы повторять его здесь. Не стесняйтесь выбирать Swift или Objective-C, поскольку оба будут работать с NativeScript.

После этого вам нужно будет настроить группу приложений для обмена данными между вашим расширением и основным приложением. В Xcode перейдите на вкладку возможностей вашего проекта, чтобы создать новую группу приложений. В своем списке целей проекта перейдите в основное хост-приложение и также включите для него группу приложений.

Интеграция расширения общего доступа в приложение NativeScript

У вас уже есть расширение рабочего ресурса в вашем проекте Xcode, но оно еще не интегрировано в NativeScript. Однако, поскольку это создается внутри Xcode, NativeScript переопределит их при следующем запуске tns prepare.

В Xcode вы увидите недавно созданную папку для вашего расширения общего ресурса. Скопируйте содержимое в app/App_Resources/iOS/extensions/your_share_extension_folder. Теперь, когда вы запускаете tns prepare, он копируется в ваш проект Xcode.

Когда вы сейчас создаете и запускаете свое приложение в Simulator, вы должны увидеть новое расширение общего доступа для своего приложения, когда откроете общий лист в Safari. Поздравляю!

Получение данных расширения общего доступа в вашем приложении NativeScript

Это руководство не будет вдаваться в подробности кодирования расширения общего ресурса. Вместо этого давайте рассмотрим, как мы можем получить данные, которыми вы поделились с вашего расширения. Подводя итог тому, что мы сделали ранее, мы создали группу приложений, которая позволит нам обмениваться данными между расширением и основным приложением.

В вашем расширении вы, вероятно, будете сохранять данные в группе приложений через UserDefaults:

self.userDefaults = [[NSUserDefaults alloc] initWithSuiteName:GROUP_IDENTIFIER];
[self.userDefaults setObject:shareJsonString forKey:@"share"]; 

В NativeScript модуль Application Settings используется для взаимодействия с NSUserDefaults iOS. Однако настройки приложения ограничиваются взаимодействием только с пользовательскими настройками приложения по умолчанию. Для этого с нашей группой приложений нам придется использовать собственные API.

import { isIOS } from 'tns-core-modules/platform';

const userDefaults = isIOS ? NSUserDefaults.alloc().initWithSuiteName('group.com.yourapp.shareext') : undefined;

# Retrieving the value from a key
userDefaults.valueForKey(key) 

Отладка расширения вашего общего ресурса

При использовании Nativescript CLI для создания и запуска вашего приложения вы увидите, что консоль выводит журналы только из вашего хост-приложения. Если вам нужно более глубокое ведение журнала или использовать другие стратегии отладки, такие как точки останова, вам нужно будет настроить расширение общего ресурса в Xcode и запустить его. Журналы, связанные с расширением общего доступа, будут выведены в консоль Xcode.

В целом, процесс разработки расширения общего ресурса в NativeScript прошел для меня довольно гладко. Хотя поддержка NativeScript находится только в бета-версии, ее достаточно для развертывания в условиях дикой природы в качестве производственного приложения. Создание расширения общего ресурса само по себе является сложной задачей, и тем более делать это в NativeScript. Я уверен, что упустил из виду некоторые детали при написании этого руководства. Не стесняйтесь обращаться к нам, если есть еще что-то, что я могу уточнить, или у вас есть какие-либо вопросы / отзывы.

Этот пост был впервые написан в моем личном блоге, где вы можете найти больше постов, связанных с разработкой NativeScript. Не стесняйтесь обращаться ко мне напрямую через LinkedIn или Twitter.