2013-10-09 95 views
4

我正在嘗試使用iOS SDK,並試圖以編程方式更改設備的日期和時間。 我讀過標準SDK是不可能的,這很有道理,但我想知道是否可以使用私有API來做到這一點,因爲我只是在做一個應用程序作爲研究,而不打算髮布它在App Store更改iPhone的日期和時間

+0

AFAIK iPhone將始終同步時間到運營商。或許我錯了。 –

+1

這是一個可以關閉的選項。 – Redwarp

回答

6

1)添加到您的應用程序的權利com.apple.timed鍵設置爲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

是的。而且,'settimeofday'不能從沙盒應用中調用。 – creker

+4

嗨克里克,你能解釋如何鏈接到Xcode的CoreTime框架? –