2013-10-09 2 views
4

Я играю с iOS SDK, и я пытаюсь изменить дату и время устройства программно. Я читал, что это невозможно в стандартном SDK, что имеет смысл, но мне интересно, можно ли это сделать с помощью частных API, поскольку я просто занимаюсь приложением в качестве исследования и не собираюсь публиковать это на App StoreИзменение даты и времени iPhone

+0

AFAIK iPhone всегда будет синхронизировать время с носителем. Возможно, я ошибаюсь. –

+1

Это опция, которая может быть отключена. – Redwarp

ответ

6

1) Добавить в ваши права приложения com.apple.timed ключа со значением BOOL, установленное в YES

2) Отключить автоматическую настройку времени (и часовой пояс, если вы хотите)

Ссылки на частную CoreTime.framework. Объявляем этим функциям

void TMSetAutomaticTimeEnabled(BOOL); 
void TMSetAutomaticTimeZoneEnabled(BOOL); 

Отключить автоматическую установку времени

TMSetAutomatocTimeEnabled(YES); 

Если вы хотите знать, в каком состоянии эти настройки вы можете использовать эти функции

BOOL TMIsAutomaticTimeEnabled(); 
BOOL TMIsAutomaticTimeZoneEnabled(); 

3) Изменение текущей даты и время

Объявление

struct timezone 
{ 
    int tz_minutewest; 
    int tz_dsttime; 
}; 

void settimeofday(struct timeval*, struct timezone*); 

Этот API является открытым в OS X, так что вы можете найти документацию здесь https://developer.apple.com/library/ios/documentation/System/Conceptual/ManPages_iPhoneOS/man2/settimeofday.2.html

В качестве примера мы будем установить часы 10 минут вперед

struct timeval tv; 
tv.tv_sec = [[NSDate dateWithTimeIntervalSinceNow:600] timeIntervalSince1970]; 
tv.tv_usec = 0; 

settimeofday(&tv, NULL); 

4) Сообщить об изменении даты/времени

CFNotificationCenterPostNotification(CFNotificationCenterGetDarwinNotifyCenter(), CFSTR("SignificantTimeChangeNotification"), NULL, NULL, CFNotificationSuspensionBehaviorDeliverImmediately); 
+0

Привет. Я получаю следующую ошибку: «Исполняемый был подписан с недействительными правами». Так что, наверное, мне нужно устройство с джейлбрейком? – Redwarp

+1

Да. Furthemore, 'settimeofday' не может быть вызван из изолированного приложения. – creker

+4

Привет, крекер, не могли бы вы объяснить, как связать с каркасом CoreTime в Xcode? –

Смежные вопросы