Это работает, чтобы получить время GPS:
#import <CoreLocation/CoreLocation.h>
CLLocation* gps = [[CLLocation alloc]
initWithLatitude:(CLLocationDegrees) 0.0
longitude:(CLLocationDegrees) 0.0];
NSDate* now = gps.timestamp;
Это не похоже на защиту от взлома.
Я пробовал этот код на iPhone 4 в режиме полета (iOS 6.1), и даже тогда он дает время, все в порядке. Но, к сожалению, это время, похоже, меняется с системными часами. Тьфу.
Забавно, что я обнаружил (все еще в режиме полета), что если вы изменяете системные часы (после поворота на off
Время и дата Set Automatically
), а затем поворачиваете Set Automatically
обратно на on
Машина восстанавливает реальное (оригинальное) время без заминки. это работает даже после включения питания телефона. Таким образом, кажется, что - это что-то вроде времени защиты от несанкционированного доступа, которое устройство поддерживает внутренне. Но как получить к этому доступ?
P.S. Обсуждение этого с 2010 года. Автор предпоследнего комментария попытался сделать это в убежище от радиоактивных осадков: поэтому ясно, что телефон не получает первозданного времени из какого-либо внешнего источника.
Приложение, июль 2013 г.
Нашел еще несколько постов ( здесь , здесь и здесь ) о другом виде измерения времени: времени загрузки ядра системы. Доступ к нему осуществляется через вызов примерно так: sysctlbyname("kern.boottime", &boottime, &size, NULL, 0);
. К сожалению, оно также меняется с учетом пользовательских данных и времени, даже без перезагрузки. Другая функция gettimeofday()
аналогичным образом зависит от определенного пользователем времени.