我需要做一些測試,包括將「電話」向後和向前移動數天。我想在模擬器上做到這一點。是否有任何可用的黑客,允許更改模擬器上看到的日期,而不必更改Mac日期?有沒有辦法改變iOS模擬器上的日期/時間(除了更改Mac設置)?
回答
如果您要創建應用程序,只需更改應用程序中的日期以進行測試,並在發佈時刪除它。
除了如果你需要在20個不同的測試日期你必須重新編譯20個不同的時間。 (雖然我認爲可以把日期放入plist中)。而且你可能有'[NSDate date]'或者等價於代碼中的幾個地方,或者你不能控制源代碼的模塊。 –
看起來像是非常艱難...如何使用xcodebuild
來自動構建和運行應用程序,並使用systemsetup -setdate <mm:dd.yy>
在不同運行之間更改日期?那麼你不需要改變任何代碼。
沒有任何評論的Downvotes是相當無用的。 – JOM
您可以使用方法swizzling在運行時替換[NSDate date]
的實現以返回您選擇的值。
欲瞭解有關方法swizzling的更多信息,請參閱http://www.icodeblog.com/2012/08/08/using-method-swizzling-to-help-with-test-driven-development/。
謝謝你的想法!我實現了它(見下面的答案) –
我需要自動測試我的應用程序,這需要更改系統時間。我做了,湯姆建議:快樂的哈克方法攪拌。
爲了說明性的目的,我只更改了[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);
顯然,請確保在部署的應用程序中使用非此功能。 最後,我只能同意答案之前,這是相當可疑的蘋果爲什麼不添加本地支持。
我喜歡你的答案,但不明白如何做到這一點。你能詳細說明一下嗎?在哪裏寫這個自定義+(NSDate *)日期類方法?在類別(擴展)?請提及在源代碼中寫入此方法的位置以及如何使用然後實現此解決方案。這對於和我一樣困惑的其他人也是非常有用的。提前致謝。 –
@NiteshBorad我只是在一個文件中添加所有內容,然後調用它,如果你的應用程序以DEBUG模式啓動(可以在'main.m'或你的AppDelegate中完成)。以下是一個示例實現:https://gist.github.com/Sebastian-Hojas/01a23ccb5b1a0051997715ee5ec4862f –
- 1. 有沒有辦法在JSON中更改日期時間格式?
- 2. 有沒有辦法改變anyDensity Manifest設置的運行時間?
- 3. 有沒有辦法在模擬器中更改iOS7.1'按鈕形狀'設置?
- 4. 有沒有辦法在MySql上更改日期格式?
- 5. 有沒有辦法讓c#中的日期更改通知?
- 6. TYPO3有沒有辦法改變標題日期格式?
- 7. 有沒有辦法改變反應路由器上的商店更改?
- 8. 如果用戶沒有更改日期,請設置變量
- 9. 有沒有辦法使用Swift訪問和修改iOS設置?
- 10. 更改時區沒有改變的日期格式
- 11. 有沒有辦法改變UILocalNotification的時間前的文本?
- 12. iOS模擬器沒有更新位置
- 13. 有沒有辦法檢測用戶何時更改了設備上的時鐘時間?
- 14. 有沒有辦法在JDatePicker上設置日期值
- 15. 有沒有辦法在java中獲取未修改的日期和時間?
- 16. 有沒有辦法改變使用JavaScript瀏覽區域設置?
- 17. 有沒有辦法在豬身上添加日期時間?
- 18. 有沒有辦法在WinUSB下更改設備配置?
- 19. jQuery jsonp緩存,有沒有辦法改變時間戳url key?
- 20. 更改iOS設備日期
- 21. 更改iOS模擬器設備名稱
- 22. 有沒有辦法批量更改時間?
- 23. 是他們沒有辦法更改輸入日期格式HTML5
- 24. 有沒有辦法更新SpriteKit中的紋理,除了手動更改它們?
- 25. 有沒有辦法爲Twilio SMS發送請求設置日期和時間?
- 26. MVC3有沒有辦法改變剃刀
- 27. 有沒有辦法改變JOptionPane.showMessageDialog字體?
- 28. 有沒有辦法改變url是iframe?
- 29. 有沒有辦法清除我所有的TFS掛起更改?
- 30. 有沒有辦法減慢模擬器上的所有動畫?
我發現這是最簡單的:http://stackoverflow.com/questions/1699671/how-to-change-time-and-timezone-in-iphone-simulator – Hahnemann