Jak zmienić strefę czasową w symulatorze iPhone?Jak zmienić czas i strefę czasową w symulatorze iPhone'a?
Odpowiedz
Zgaduję Wykorzystuje swoją strefę czasową systemu, więc zmieniając TZ w preferencjach systemowych prawdopodobnie rade
Hmm ... Nie mam tej opcji na moim symulatorze. Na moim telefonie jest to w Ustawienia -> Ogólne -> Data i czas. Na moim symulatorze sekcja Data i czas nie istnieje. –
Oh ...zmień go w preferencjach systemowych urządzenia, a nie ustawienia symulatora. Dobrze. To się udało! –
Jeden problem w tym, czas Symulator jest aktualizowany po 2 mennice zmiany czasu systemowego. dowolna metoda, która jednocześnie zmienia czas symulatora ... – AsifHabib
Zrestartuj Simulator po zmianie ustawienia czasu i daty systemowej ujrzycie zmiany odzwierciedlone. To zadziałało dla mnie.
Okropne rozwiązanie (ze strony Apple'a, nie twoja odpowiedź). Jest to dokładnie to, co symulator powinien być w stanie zrobić, jako bezpieczną alternatywę dla faktycznego zmieniania czasu systemowego i potencjalnego niszczenia rzeczy na komputerze. – devios1
@devios to jest prawdziwsze niż kiedykolwiek z Oglądaj – Lewis42
@ Lewis42, co masz na myśli? –
Podczas zmiany strefy czasowej, znalazłem najłatwiejszy sposób, aby to zrobić, klikając zegar na pasku menu. A następnie wybierając "Otwórz datę & Preferencje czasowe", a następnie wybierz zakładkę Strefa czasowa.
Alternatywnie Preferencje systemowe -> Data i czas i wybierz zakładkę Strefa czasowa.
Po prostu wskaźnik dla każdego, kto może nie znać się na OSX.
To nie jest odpowiedź, więc powinien to być komentarz. Liczba programistów iOS, którzy nie znają systemu OS X, wynosi ... zero. – phatmann
Przydałoby się, gdyby firma Apple dostarczyła "Simulate date", ponieważ zawierała menu "Simulate Location". To, co robię, to ustawić punkt przerwania natychmiast po uzyskaniu daty (zapisanie jej w zmiennej), a następnie zmodyfikować wartość. Lub po prostu zmodyfikuj miejsce, w którym czekam na zmianę daty i spraw, by zwracała wartość true.
To jest stara nitka, ale jest najbliżej mojego pytania. Muszę symulować strefę czasową w Europie, ta metoda działa dla mnie. Przejdź do "Stuknij strefę czasową" zamiast "Data & Czas" dotknij. Odznacz pole "Ustaw strefę czasową automatycznie przy użyciu bieżącej lokalizacji" i przesuń pionowy prostokąt (z niebieską kropką na nim), aby zasymulować czas systemowy.
zaproponowałem automatyczne rozwiązanie problemu zmiany czasu, który zawiera metody hacky swizzling: https://stackoverflow.com/a/34793193/829338. Zakładam, że powinno to również działać, aby odpowiednio zmienić strefę czasową.
Potrzebowałem automatycznie przetestować aplikację, która wymagała zmiany czasu systemu. Zrobiłem to, co Tom zasugerował: szczęśliwą, hackowatą metodę, która swizuje.
Do celów poglądowych zmieniam tylko [NSDate date]
, ale nie [NSDate dateWithTimeIntervalSince1970:]
.
Najpierw musisz utworzyć metodę klasy, która służy jako nowa [data NSDate]. Zaimplementowałem to, aby po prostu przesunąć czas o stały odstęp czasowy.
int timeDifference = 60*60*24; //shift by one day
NSDate* (* original)(Class,SEL) = nil;
+(NSDate*)date{
NSDate* date = original([NSDate class], @selector(date));
return [date dateByAddingTimeInterval:timeDifference];
}
Do tej pory dość łatwe. Teraz zaczyna się zabawa. Dostajemy metody z obu klas i wymieniamy implementację (działało to dla mnie w AppDelegate, ale nie w mojej klasie UITests). W tym celu należy zaimportować objc/runtime.h
.
Method originalMethod = class_getClassMethod([NSDate class], @selector(date));
Method newMethod = class_getClassMethod([self class], @selector(date));
//save the implementation of NSDate to use it later
original = (NSDate* (*)(Class,SEL)) [NSDate methodForSelector:@selector(date)];
//happy swapping
method_exchangeImplementations(originalMethod, newMethod);
IIRC to nie zadziała dla testowania lokalnych powiadomień. –
Zmiana czasu systemowego i daty nie jest rozwiązaniem. Ma to wpływ na wszystkie aplikacje Mac, w tym znaczniki czasu xcode. Prawidłowe zachowanie polega na tym, że każda zmiana lokalizacji symulatora musi zmienić strefę czasową i czasową. Wszystkie inne rzeczy są tylko obejściem. Mam nadzieję, że Apple to naprawi. – Rudi