2015-12-25 26 views
10

Tworzę rozszerzenie watchOS, które używa WCSession do komunikacji z iPhonem. Jednak nie posiadam zegarka Apple Watch i dlatego muszę polegać na Symulatorze zegarków, aby przetestować mój kod.Sposób testowania scenariusza, w którym zegarek Apple nie jest połączony z iPhonem

Czy istnieje sposób na przetestowanie scenariusza, w którym zegarek jest odłączony od telefonu w symulatorze?

Jeśli nie, czy jest jakiś dokument lub dobrze zbadany post na blogu, który daje wgląd w zachowanie się w tym przypadku: WCSession?

Odpowiedz

3

Zakończenie symulacji iPhone'a powinno pozwolić na przybliżenie tego scenariusza.

+0

Dobry pomysł! Naprawdę nie mogę wysłać danych do iPhone'a po wyjściu z symulatora. Jednak "session.reachable" jest nadal "prawda" na zegarku, a błąd jaki dostaję w 'errorHandler' z' sendMessage (...) 'to' Code = 7001 "Nieznany błąd WatchConnectivity." 'W/the underlying błąd to "Kod = 23" Przekroczono limit czasu ". Czy to właśnie dostajesz na zegarek, gdy iPhone nie jest w zasięgu? – fabian789

+0

To jest jeden z możliwych błędów, ale tylko wtedy, gdy trafisz przyzwoicie mały wyścig. Innym bardziej prawdopodobnym jest błąd nieosiągalny (uważam, że 7007). – ccjensen

+0

Ok. Zgodnie z 'WCError.h', rzeczywiście jest to 7007. Ale tak zazwyczaj,' session.reachable' będzie "false", gdy iPhone się rozłączy? – fabian789

2

Nie sądzę więc jej możliwe dlatego, że Apple doc mówi

Dodatkowo aplikacje WatchKit mieć niezawodne połączenie symulowanego urządzenia hosta ponieważ oba działają w symulatorze.

Jabłko wspomniano ten sprzętowo punkt różnicy Simulator User Guide

+0

Interesujący link, dzięki! Jednak moim zdaniem nie wyklucza to w pełni możliwości symulowania mojego scenariusza! – fabian789

1

należy użyć if-zapytanie, czy iPhone jest osiągalny przed rozpoczęciem Request WC:

if (WCSession.defaultSession().reachable) { 

    //do your request here 

} else { 

    //handle non-reachability 

} 

Jeśli chcesz przetestować reakcja Twojej aplikacji na niedostępność wystarczy zastąpić WCSession.defaultSession().reachable z false.

+0

Dziękuję za wejście, ale miałem na myśli "test" w sensie testowania mojego kodu, a nie jak testować osiągalność kodu _in_ :) – fabian789

1

Rozumiem, że rzeczywiście chcesz stworzyć scenariusz testowy.

Ale jaki kierunek komunikacji chcesz przetestować? Jeśli sprawdzisz dokumentację WCSession, zawsze określa ona zachowanie zegarka i urządzenia iOS.

Co masz na myśli mówiąc "odłączony"?

Można sprawdzić WCSession.defaultSession().reachable ale dokumentacją stanach

iOS, wartość TAK, gdy sparowany Apple Obserwować jest w zasięgu i powiązany Watch aplikacja jest uruchomiona na pierwszym planie.

Możesz sprawdzić na paired, ale musisz również sprawdzić na watchAppInstalled.

Uważam, że cała komunikacja jest asynchroniczna. Chcesz sprawdzić swój kod errorHandler: jak w

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

myślę, że nie jest możliwe, aby przetestować go na symulatorze. Możesz tylko tymczasowo skopiować swój kod błęduHandler, aby odpowiedziećHandlerowi na testowanie.

Oto kod używam do testowania dostępność:

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

oraz w _modelController

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

Chciałbym przetestować lub "zasymulować" scenariusz świata rzeczywistego, w którym iPhone nie jest blisko zegarka i zobacz, jak zachowuje się API 'WatchConnectivity'. – fabian789

0

Quit symulatora iPhone natomiast symulator Apple Obserwować pracuje osiąga określony stan, który Cię opis ... Podobnie jak w przypadku rzeczywistego zegarka Apple Watch Simulator po wyłączeniu symulatora iPhone'a wyświetli ikonę odłączenia telefonu u góry ekranu. Zobacz zdjęcie poniżej.

Istnieje jeszcze jeden stan do rozważenia, który polega na tym, że WCSession może komunikować się tylko wtedy, gdy obie aplikacje znajdują się na pierwszym planie. Dlatego powinieneś przetestować scenariusz, w którym Watch i iPhone są połączone (oba symulatory działają), ale aplikacja na iPhone'a nie jest na pierwszym planie. (Podobnie jest z aplikacją iPhone na pierwszym planie, gdy zegarek jest podłączony, ale aplikacja Zegarek nie jest na pierwszym planie.) Apple Watch Simulator with disconnected iPhone Simulator

+0

Niestety nie działa to dla mnie w Xcode 8. Dodatkowo bit na temat aplikacji na iPhone'a w tle jest nieprawidłowy; aplikacja na telefon iPhone może być komunikowana, gdy jest w tle, ale nie w aplikacji do oglądania. –