Как проверить код, если текущая цель имеет доступную версию приложения для просмотра? - PullRequest
0 голосов
/ 10 января 2020

Я работаю в представлении, где я должен настроить его относительно наличия приложения Watch Watch.

Я знаю, что могу использовать:

[[WCSession defaultSession] isWatchAppInstalled]

(но это не то, что я хочу, потому что пользователь может удалить приложение из Apple Watch, но приложение iOS по-прежнему будет иметь версию Watch, доступную для установки)

также:

[[WCSession defaultSession] isPaired] не мой случай.

Ответы [ 2 ]

1 голос
/ 11 января 2020

На самом деле isWatchAppInstalled - правильный способ справиться с этим сценарием.

Как указано в документации:

Пользователь может выбрать установку только подмножества доступных приложений на Apple Watch. Значение этого свойства равно true, если приложение Watch, связанное с текущим приложением iOS, установлено на Apple Watch пользователя, или false, если оно не установлено.

https://developer.apple.com/documentation/watchconnectivity/wcsession/1615623-iswatchappinstalled

Свойство не заглядывает внутрь пакета, чтобы увидеть, доступно ли приложение Watch. Он вернет true, только если приложение Watch установлено на подключенных в данный момент Apple Watch. Если пользователь удалит приложение Watch из часов, оно вернет false.

0 голосов
/ 13 января 2020

После проверки текущего проекта, над которым я работаю, а также тестирования создания двух новых проектов для проверки пакетов (один проект с часами, а другой без часов), я увидел разницу между ними:

enter image description here

Разница в том, что проект с включенными часами имеет фазу сборки, в которой приложение Watch встроено в подкаталог «Часы».

Также мы можем видеть папку «Watch» при отображении содержимого пакета сборки в Finder:

enter image description here

Таким образом, условие, когда это iOS приложение имеет часы, встроенные в код:

+ (BOOL)isWatchAppEmbedded
{
    NSString *watchPath = [NSString stringWithFormat:@"%@/%@", [NSBundle mainBundle].resourcePath, @"Watch"];
    BOOL isDirectory = YES;

    if ([[NSFileManager defaultManager] fileExistsAtPath:watchPath isDirectory:&isDirectory]) {
        return YES;
    }

    return NO;
}
...