iPhone и Apple Watch не разделяют группу приложений

Я выдергиваю волосы из-за этой проблемы уже два дня. Я создаю небольшой файл фильма в приложении iPhone, который хочу отправить с iPhone для воспроизведения на Apple Watch. В качестве доказательства концепции я поместил аналогичный .mov в пакет приложения Apple Watch и смог без проблем воспроизвести его. Итак, я решил, что теперь, когда я хочу отправить на часы новый небольшой клип, я просто помещу его в контейнер App Group Shared и получу доступ к нему оттуда, а не из Bundle. Неа!

Я прошел через тонны S.O. сообщений, пробовал много разных подходов, но ничего не работает должным образом.

Прежде чем вы спросите, я несколько раз переделывал группу приложений, удалял старые из iTunes Connect, заново сгенерировал профили подготовки, очищал целевые объекты несколько раз, несколько раз удалял DerivedData, удалял приложения и запускал их несколько раз и пробовал практически все небольшие настройки и исправления, которые я мог найти на SO Ничего не помогает.

Я действительно думаю, что знаю, в чем проблема, но не знаю, как ее решить.

Вот код, который я использую как в приложении для iPhone, так и в приложении для часов, чтобы получить путь к общему контейнеру (этот фрагмент со стороны Watch):

let fileManager = FileManager.default
    let sharedContainer = fileManager
        .containerURL(
            forSecurityApplicationGroupIdentifier: "group.com.mycompany.myappname")

    let dirPath = sharedContainer?.path
     sharedFilePathOnWatch = (dirPath! as NSString).appendingPathComponent("watchPreview.mov")

    print ("Shared File Path on Watch: \(sharedFilePathOnWatch)")
    print ("Shared File Path from iPhone: \(sharedFilePath)")

Операторы печати показывают мне общий путь к файлу, который я отправляю на часы с iPhone (через Watch Connectivity), и общий путь, который разрешает приложение Watch.

Что я получаю, когда это запускает, следующее:

Общий путь к файлу на Watch: /private/var/mobile/Containers/Shared/AppGroup/94AA7797-528D-4E96-9623-23285BE0742B/watchPreview.mov

Общий путь к файлу с iPhone: /private/var/mobile/Containers/Shared/AppGroup/4D43C314-CCBD-4861-BF90-69A8AC71198C/watchPreview.mov

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

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

Итак, большие вопросы:

  1. Почему я разрешаю два разных пути в общих приложениях
  2. Как, черт возьми, мне передать свой маленький файл фильма с iPhone на Apple Watch

person FishTales    schedule 10.09.2017    source источник


Ответы (1)


С появлением watchOS2 и собственных watchOS приложений приложения Apple Watch больше не являются просто расширениями своих аналогов iOS и, следовательно, не используют общие группы приложений.

Вы не можете использовать группы приложений для обмена данными, начиная с watchOS2. Вы должны использовать WatchConnectivity структуру для передачи данных между вашими iOS и watchOS приложениями.

Дополнительную информацию по теме см. На странице Поддержание актуальности содержимого WatchOS. .

person Dávid Pásztor    schedule 10.09.2017
comment
Хорошо, я прочитал это (несколько раз, прежде чем задать свой вопрос), но запутанная часть находится во втором разделе, посвященном совместному использованию файлов во время выполнения, что я и пытаюсь сделать, заявляет следующее: Используйте общую группу приложений для обмениваться медиафайлами между интерфейсом приложения Watch и расширением WatchKit во время выполнения. Группа приложений создает безопасный контейнер, к которому могут получить доступ несколько процессов. Обычно каждый процесс выполняется в своей собственной изолированной среде, но группа приложений позволяет обоим процессам совместно использовать общий каталог. а затем переходит к инструкциям по настройке группы приложений, как это сделал я. - person FishTales; 11.09.2017
comment
Это сделано для обмена файлами между целевым объектом приложения WatchKit и целевым объектом расширения WatchKit, а не между приложениями iOS и watchOS. - person Dávid Pásztor; 11.09.2017
comment
Вот это да. Я не могу поверить, что в документации Apple об этом нет более ясного понимания. Я потратил пару дней, пытаясь понять это. - person Dylan Moore; 20.02.2018