Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
301 views
in Technique[技术] by (71.8m points)

ios - Changing iPhone's date and time

I'm toying with iOS SDK, and I'm trying to change the device's date and time programmatically. I read that it's not possible with the standard SDK, which makes sense, but I'm wondering if it's possible to do so with the private APIs, as I'm just doing an app as a study, and do not intend to publish it on the App Store

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

1) Add to your app entitlements com.apple.timed key with bool value set to YES

2) Disable automatic time setting (and timezone if you want)

Link to private CoreTime.framework. Declare these functions

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

Disable automatic time setting

TMSetAutomatocTimeEnabled(YES);

If you want to know in which state these settings are you can use these functions

BOOL TMIsAutomaticTimeEnabled();
BOOL TMIsAutomaticTimeZoneEnabled();

3) Change current date and time

Declare these

struct timezone
{
    int tz_minutewest;
    int tz_dsttime;
};

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

This API is public in OS X so you can find documentation here https://developer.apple.com/library/ios/documentation/System/Conceptual/ManPages_iPhoneOS/man2/settimeofday.2.html

As an example we will set clock 10 minutes forward

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

settimeofday(&tv, NULL);

4) Notify about date/time change

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...