Как проверить сценарий, где Apple Watch не подключен к iPhone

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

Есть ли способ проверить сценарий, в котором Watch отключен от телефона в Simulator?

Если нет, есть ли какая-то документация или хорошо изученная запись в блоге, которая дает некоторое представление о поведении WCSession в этом случае?

Ответ 1

Выход из симулятора iPhone позволит вам приблизиться к этому сценарию.

Ответ 2

Я не думаю, что это возможно, потому что Apple doc говорит,

Кроме того, приложения WatchKit имеют надежное соединение с имитированное хост-устройство, потому что оба они работают в симуляторе.

Apple упомянула об этом в разделе "Различие аппаратных средств" Руководство пользователя Simulator

Ответ 3

Вы должны использовать if-запрос, доступен ли iPhone до запуска запроса WC:

if (WCSession.defaultSession().reachable) {

   //do your request here

} else {

   //handle non-reachability

}

Если вы хотите протестировать реакцию своего приложения на не достижимости, замените WCSession.defaultSession().reachable на false.

Ответ 4

Я понимаю, что вы действительно хотите сценарий тестирования.

Но какое направление коммуникации вы хотите протестировать? Если вы проверяете документацию WCSession, она всегда указывает на поведение для часов и устройства iOS.

Кроме того, что вы имеете в виду под "отключением"?

Вы можете проверить WCSession.defaultSession().reachable, но состояния документации

В iOS значение равно YES, когда парные Apple Watch находятся в диапазоне и соответствующее приложение Watch работает на переднем плане.

Вы можете проверить paired, но вам также нужно проверить watchAppInstalled.

Я считаю, что все коммуникации асинхронны. Вы хотите проверить свой код errorHandler:, как в

- (void)sendMessageData:(NSData *)data
    replyHandler:(void (^)(NSData *replyMessageData))replyHandler
    errorHandler:(void (^)(NSError *error))errorHandler

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

Вот код, который я использую для проверки доступности:

if WCSession.isSupported() {
    let session = WCSession.defaultSession()
     session.delegate = _modelController
     session.activateSession()
    _modelController!.transferArrayToWatchWithSession()
}

и внутри _modelController

func transferArrayToWatchWithSession() {
    let session = WCSession.defaultSession()
    if WCSession.isSupported() && session.watchAppInstalled {
        session.transferUserInfo([kWatchControlsDictKey:self.verifiedWatchArray])
    } else {
        log.info(....")
    }
}

Ответ 5

Выход из симулятора iPhone во время работы симулятора Apple Watch достигает определенного состояния, которое вы описываете... Как и в случае с Apple Watch, Watch Simulator отобразит значок отключенного телефона в верхней части экрана, когда вы выходите из Симулятор iPhone. См. Изображение ниже.

Существует еще одно состояние, которое означает, что WCSession может общаться только тогда, когда оба приложения находятся на переднем плане. Поэтому вы также должны проверить сценарий, в котором подключены Watch и iPhone (оба имитатора запущены), но приложение iPhone не находится на переднем плане. (И аналогично, приложение iPhone на переднем плане, пока часы подключены, но приложение Watch не находится на переднем плане.) Симулятор Apple Watch с отключенным симулятором iPhone