2015-09-18 3 views
7

Я создал приложение WatchKit с шаблоном XCode по умолчанию. Я добавил право на группу приложений для iOS Target, в Target App Attit Target и в Target Extension Target. (Это название приложения группа: group.com.lombax.fiveminutes) Затем я попытался получить доступ к общему URL папки как с IOS App и расширения WatchKit:containerURLForSecurityApplicationGroupIdentifier: дает разные результаты на симуляторе iPhone и Watch

Расширение:

@implementation ExtensionDelegate 

- (void)applicationDidFinishLaunching { 
    // Perform any final initialization of your application. 
    NSURL *test = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.lombax.fiveminutes"]; 
} 

IOS, приложение:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    // Override point for customization after application launch. 

    NSURL *test = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.lombax.fiveminutes"]; 
// ... 
} 

Однако test NSURL отличается:

КСН:

файла: /// Пользователи/Ломбардо/Library/Developer/CoreSimulator/Devices/38B983DB-342F-4A47-8C26-5D2C92CDB666/данные/Контейнеры/Shared/AppGroup/8DEE182E-AFE6-47DD-BA2B-6B0520158A8B/

на Watch:

файла: /// Пользователи/Ломбардо/Library/Developer/CoreSimulator/Devices/BF52D613-25FF-4092-A5B2-9C3F1B616160/данные/Контейнеры/Shared/AppGroup/CECB5EFC-7FBD-4C84-A878-1314CB7CF211/

И по этой причине я не могу поделиться данными между iOS App и WatchKit Extension.

I cannon попробуйте на реальном устройстве, так как у меня нет WatchOS 2.0 на моем Apple Watch. Любые советы? Благодаря

UPDATE Я сделал некоторые другие тесты:

  • установлен WatchOS 2, проблема все еще сохраняется на реальных устройствах.

Это магазин URL для моего iPhone:

NSURL * @ "Файл: /// частный/вар/мобильный/Контейнеры/Shared/AppGroup/3D05D159-94D6-409C-9A38 -90E0830D0C3F/FiveMinutes.sqlite "

И это магазин URL для моего Дозора:

NSURL * @" файл: /// приват д/вар/мобильный/Контейнеры/Shared/AppGroup/F1E89377-F456-4FC2-BAAC-3DD705EF381A/FiveMinutes.sqlite»

Два приложения читает и писать в-из двух различных .sqlite файлов.

  • на тренажере, если я жестко закодировать один из URL-адресов, как IOS симулятор и часы имитатора умеют читать-писать один и тот же .sqlite файл и обмениваться контентом. Тем не менее, это не возможно на реальных устройствах, так как расширение Часы не может писать на пути IOS:

URL: файл: /// частный/вар/мобильный/Контейнеры/Shared/AppGroup/3D05D159-94D6 -409C-9A38-90E0830D0C3F/Параметры FiveMinutes.sqlite: (null) ... возвращенная ошибка Ошибка домена = NSCocoaErrorDomain Код = 512 «Файл не может быть сохранен». UserInfo = {reason = Не удалось создать файл; code = 2} с помощью словаря userInfo { reason = "Не удалось создать файл; code = 2"; }

+0

Но вы пытались на самом деле положить файлы и получить к ним доступ? Бог знает, как работает симулятор и какие папки он использует. Говоря о watchOS 2.0. Теперь это родные приложения. Разве вы не должны добавлять право на просмотр приложения? – Yaroslav

+0

Да, я пытался писать файлы, и они помещаются в разные местоположения, iOS не может получить доступ к файлу часов, а часы не могут получить доступ к файлу iOS. Я добавил права на приложение iOS, приложение часов и расширение часов. Похоже, что это право добавлено в порядке, поскольку, если я изменю строку права на что-то другое, возвращаемый NSURL станет нулевым – LombaX

ответ

12

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

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

Часы Путь: Файл: /// Пользователи/Ломбардо/Library/Developer/CoreSimulator/Devices/BF52D613-25FF-4092-A5B2-9C3F1B616160/данные/Контейнеры/Shared/AppGroup/30B39103-ЦВЕБ-4C64-9531-FB27DC40180D/

IOS файл Путь: /// Люди/Ломбардо/Library/Developer/CoreSimulator/Devices/BF52D613-25FF-4092-A5B2-9C3F1B616160/данные/Контейнеры/Shared/AppGroup/30B39103-ЦВЕБ-4C64-9531-FB27DC40180D/

Затем я сделал первое, что каждый программист должен do: читать документы. В ПЕРВОЙ СТРАНИЦЕ переходного руководства WatchOS 2 есть это предложение:

Ваше расширение теперь хранит файлы и данные о компании Apple Watch. Любые данные, которые не являются частью вашего приложения Watch или набора дополнений WatchKit, должны быть получены из сети или из сопутствующего приложения iOS, запущенного на iPhone пользователя. Вы не можете полагаться на общий групповой контейнер для обмена файлами с вашим приложением iOS. Извлечение файлов включает перенос их по беспроводной сети в Apple Watch.

Смежные вопросы