Ответ 1
Выход из симулятора iPhone позволит вам приблизиться к этому сценарию.
Я разрабатываю расширение watchOS, которое использует WCSession
для связи с iPhone. Тем не менее, я не владею Apple Watch и поэтому должен полагаться на Watch Simulator, чтобы проверить свой код.
Есть ли способ проверить сценарий, в котором Watch отключен от телефона в Simulator?
Если нет, есть ли какая-то документация или хорошо изученная запись в блоге, которая дает некоторое представление о поведении WCSession
в этом случае?
Выход из симулятора iPhone позволит вам приблизиться к этому сценарию.
Я не думаю, что это возможно, потому что Apple doc говорит,
Кроме того, приложения WatchKit имеют надежное соединение с имитированное хост-устройство, потому что оба они работают в симуляторе.
Apple упомянула об этом в разделе "Различие аппаратных средств" Руководство пользователя Simulator
Вы должны использовать if-запрос, доступен ли iPhone до запуска запроса WC:
if (WCSession.defaultSession().reachable) {
//do your request here
} else {
//handle non-reachability
}
Если вы хотите протестировать реакцию своего приложения на не достижимости, замените WCSession.defaultSession().reachable
на false
.
Я понимаю, что вы действительно хотите сценарий тестирования.
Но какое направление коммуникации вы хотите протестировать? Если вы проверяете документацию 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(....")
}
}
Выход из симулятора iPhone во время работы симулятора Apple Watch достигает определенного состояния, которое вы описываете... Как и в случае с Apple Watch, Watch Simulator отобразит значок отключенного телефона в верхней части экрана, когда вы выходите из Симулятор iPhone. См. Изображение ниже.
Существует еще одно состояние, которое означает, что WCSession
может общаться только тогда, когда оба приложения находятся на переднем плане. Поэтому вы также должны проверить сценарий, в котором подключены Watch и iPhone (оба имитатора запущены), но приложение iPhone не находится на переднем плане. (И аналогично, приложение iPhone на переднем плане, пока часы подключены, но приложение Watch не находится на переднем плане.)