Совместное использование данных UDP в приложениях (многозадачность для фона/переднего плана или многоэкранного экрана) в iOS

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

В прошлом (iOS 8 и ниже) мы запускали наше приложение в фоновом режиме для записи данных и другого приложения на переднем плане. К сожалению, похоже, что только одно приложение смогло привязываться к входящим данным UDP (что имеет смысл), однако с предстоящими возможностями "бок о бок" я задавался вопросом, существует ли какое-либо решение для обмена данными между приложениями.

Единственное, о чем я мог подумать, это как-то заставить наше приложение захватить данные и перепродать его другому приложению, но я не знаю, возможно ли это в iOS, и даже если бы это было так, как вы будет определять, кто имеет блокировку потока UDP.

Документация на яблоки по адресу https://developer.apple.com/library/prerelease/ios/documentation/WindowsViews/Conceptual/AdoptingMultitaskingOniPad/index.html#//apple_ref/doc/uid/TP40015145, похоже, не содержит много информации.

Ответ 1

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

Из iCloud Design Guide:

Когда вы включаете документы iCloud или CloudKit, Xcode настраивает ваше приложение для доступа к контейнеру iCloud, имя которого основано на идентификатор пакета приложений. Большинство приложений должны иметь доступ только к контейнер по умолчанию. Если ваши приложения обмениваются данными между собой, включите параметр "Определить пользовательские контейнеры" и добавить один или несколько идентификаторы контейнеров, которые вы используете для обмена данными.

Sourced From Apple ~ см. оригинал для более подробной информации

Совместное использование контейнеров между приложениями

При необходимости настройте приложение для использования нескольких контейнеров или совместного использования контейнера с другими приложениями. Например, вы можете использовать одно приложение внутри, чтобы создавать типы записей и записывать программно, чтобы вернуть базу данных в известное состояние. Это приложение должно использовать тот же контейнер, что и приложение для конечного пользователя, которое вы разрабатываете и тестируете. Чтобы сделать это, вы разрешаете первому приложению использовать контейнер по умолчанию второго приложения или создавать пользовательский контейнер, который оба приложения используют. Приложения iOS и Mac также могут быть настроены для совместного использования одних и тех же контейнеров.

Добавить контейнеры в приложение

Выберите существующий идентификатор контейнера, используемый другим приложением или создайте новый.

Чтобы добавить контейнер в приложение

В панели "Возможности" в настройках iCloud выберите "Укажите пользовательские контейнеры".

Когда вы ранее выбрали службу CloudKit, Xcode создал идентификатор контейнера по умолчанию для вашего приложения, который соответствует идентификатору пакета. Рядом с идентификатором контейнера по умолчанию появляется флажок.

1

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

Снимок экрана ниже показывает, что приложение "Куратор" и "Галерея" совместно используют контейнер приложений "Галерея приложений".

2

Создание пользовательских контейнеров

В качестве альтернативы создайте пользовательский контейнер, совместно используемый несколькими приложениями.

Важно: только администраторы команд могут создавать контейнеры. Если вы являетесь физическим лицом, вы являетесь агентом команды (с правами администратора) для своей команды.

Чтобы создать пользовательский контейнер

Если выбрано "Использовать контейнер по умолчанию", выберите "Укажите пользовательские контейнеры".

Нажмите кнопку "Добавить" (+) в нижней части таблицы. В появившемся диалоговом окне введите идентификатор контейнера, который вы хотите добавить.

Предупреждение: вы не можете удалить идентификатор контейнера, поэтому тщательно выберите идентификатор контейнера.

Идентификатор контейнера начинается с iCloud. за которым следует строка в обратном DNS-обозначении, как в идентификаторе контейнера iCloud.com.example.gkumar1.SharedGallery.

3

Нажмите "ОК".

Xcode добавляет новый идентификатор контейнера в файл прав проекта проекта Xcode и в Member Center.

Если вы хотите поделиться новым идентификатором контейнера с другим приложением, добавьте контейнер в приложение, как описано в разделе "Добавить контейнеры в приложение".

Проверить свои шаги

Вы можете просмотреть все идентификаторы контейнера для своей команды в настройках iCloud или в Центре пользователей. В Центре-члене вы также можете добавлять контейнеры и редактировать имена контейнеров.

Чтобы просмотреть идентификаторы контейнеров в Центре-члене

В Центре участников выберите Сертификаты, Идентификаторы и Профили. В разделе "Идентификаторы" выберите контейнеры iCloud.

4