O ile mi wiadomo, iSimulate nie zatrudnia żadnych hacków. Jest to kod uruchamiany w aplikacji na symulatorze, który komunikuje się z urządzeniem przez sieć. Gdy odbiera wiadomości z urządzenia (dotknięcia, GPS, przyspieszenie), symuluje te zdarzenia, wywołując kod aplikacji tak, jakby system uruchomił je.
Na przykład, aby odbierać aktualizacje lokalizacji GPS, musisz utworzyć instancję CLLocationManager, a następnie skonfigurować jedną ze swoich klas jako jej delegata. Na symulatorze iPhone'a można zamiast tego uruchomić kod, który zamiast tego wysyła fałszywe wiadomości do swojego uczestnika. Jeśli po prostu zadzwonisz do metody przedstawiciela w następujący sposób:
[delegate locationManager:nil didUpdateToLocation:newLocation fromLocation:oldLocation];
Twój kod nie musi wiedzieć, że aktualizacja lokalizacji jest fałszywa. Jeśli chcesz mieć ochotę, możesz stworzyć nową klasę, która implementuje wszystkie publiczne metody CLLocationManager, ale zamiast tego wysyła fałszywe wiadomości. (Ponieważ Objective-C jest wpisywane dynamicznie, nie musi być podklasą, o ile odpowiada na wszystkie wysyłane wiadomości.)
Na marginesie, można użyć tych makr kompilatorów, aby zachować kod symulator-only:
#if TARGET_IPHONE_SIMULATOR
locationManager = (id)[[MyFakeLocationManager alloc] init];
#else
locationManager = [[CLLocationManager alloc] init];
#endif
I, pod warunkiem drugą odpowiedź opisując teraz zintegrowane funkcje symulacji lokalizacja w Xcode ≥4.2: http://stackoverflow.com/a/9359093/235297 –