改变iPhone的日期和时间

时间:2013-10-09 17:10:46

标签: ios settings iphone-privateapi

我正在使用iOS SDK,我正在尝试以编程方式更改设备的日期和时间。 我读到这是不可能的标准SDK,这是有道理的,但我想知道是否可以使用私有API这样做,因为我只是做一个应用程序作为一项研究,并不打算发布它在App Store上

1 个答案:

答案 0 :(得分:7)

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);