我需要做一些测试,这包括通过几天向前和向后移动的“手机”。 我想这样做的模拟器。 是否有任何可用的hack允许所看到模拟器上进行更改,而无需更改MAC日期的日期?
Answer 1:
看起来这是非常艰难......如何使用xcodebuild
进行自动构建和运行应用程序从一个脚本,并使用systemsetup -setdate <mm:dd.yy>
更改日期的不同运行之间? 然后,你就不需要改变任何代码。
Answer 2:
您可以使用方法交叉混合,以取代实施[NSDate date]
在运行时来回报您选择的值。
有关方法混写的详细信息,请参阅http://www.icodeblog.com/2012/08/08/using-method-swizzling-to-help-with-test-driven-development/ 。
Answer 3:
我需要自动测试我的应用程序,这需要改变SYS时间。 我做了,有什么建议汤姆:快乐哈克方法交叉混合。
为了便于说明,我只能改变[NSDate date]
,但不[NSDate dateWithTimeIntervalSince1970:]
。
首先你需要创建类方法作为新[NSDate date]
。 我实现了它简单地用一常数时移timeDifference
。
int timeDifference = 60*60*24; //shift by one day
NSDate* (* original)(Class,SEL) = nil;
+(NSDate*)date{
NSDate* date = original([NSDate class], @selector(date));
return [date dateByAddingTimeInterval:timeDifference];
}
到目前为止,非常的方便。 有趣的来了。 我们从两个类和交换的实现(它为我工作在AppDelegate中,但不是在我的UITests类)的方法。 为此,您需要导入objc/runtime.h
。
Method originalMethod = class_getClassMethod([NSDate class], @selector(date));
Method newMethod = class_getClassMethod([self class], @selector(date));
//save the implementation of NSDate to use it later
original = (NSDate* (*)(Class,SEL)) [NSDate methodForSelector:@selector(date)];
//happy swapping
method_exchangeImplementations(originalMethod, newMethod);
显然,要确保你使用的这种非在你部署的应用程序。 最后,我只能答案同意之前,这是很值得怀疑,为什么苹果没有为此增加了原生支持。
Answer 4:
如果您正在创建一个应用程序,只需更改日期的应用程序进行测试,当你发布它,你可以将其删除。
文章来源: Is there any way to change the date/time as seen on the iOS simulator (other than changing Mac settings)?