2014-05-13 62 views
1

我正在使用iOS-ntp framework,我收到了一個我無法理解的奇怪行爲。 目前的13:14,但我改變了時間的設備上,以13:34的時候我做了folioing電話:iOS-ntp返回與設備相同的值

NSDate *deviceDate = [NSDate date]; 
[NetworkClock sharedNetworkClock]; 
NSDate *networkDate = [NSDate networkDate]; 
NSLog(@"deviceDate =%@", deviceDate); 
NSLog(@"networkDate =%@", networkDate); 

我得到的是:

deviceDate =2014-05-13 13:34:37 
networkDate =2014-05-13 13:34:38 

很顯然,我預計:

deviceDate =2014-05-13 13:34:37 
networkDate =2014-05-13 13:14:38 

我如何得到相同的日期值?

在此先感謝。

編輯: 偵聽我從所述服務器向所述應用程序截取該數據包的連接:

網絡時間協議(NTP 3版,服務器)

參考ID:212.82.32.15

參考時間戳:2014年5月16日14:56:40.999638000 UTC

來源時間戳:2014年5月16日18:25:02.688373000 UTC

接收時間戳:5月16日2014年15:15:14.862829000 UTC

傳送時間戳:5月16日2014年15:15:14.862889000 UTC

在此之後,框架調用返回18:25

+0

嘗試在設備的「日期和時間」首選項中停用「自動設置」。 – jamapag

+0

只是一個瘋狂的猜測,但它可能還沒有收到任何NTP響應,所以偏移量爲0.在將其視爲啓動之前,您至少應該給它30秒。 – Petesh

+0

@jamapag它被禁用。 –

回答

2

編輯事實證明,缺少配置文件在這種情況下不是問題。請進一步閱讀。

算法中有邏輯決定某些時間戳是無效的;這用於確定時間是否可信。通過確定服務器時鐘是否設置爲小於1小時前做出此決定。它使用您當前的時間作爲參考點

當我將時鐘向前傾斜了幾個小時(並且我目前處於UTC + 1(夏令時))時,我從來沒有得到同步,因爲這段時間總是會出現至少幾個小時即對此的測試將永遠不會有很好的價值。

如果您註釋掉的檢查:

(-[[self dateFromNetworkTime:&ntpServerBaseTime] timeIntervalSinceNow] < 3600.0) 
evaluatePacket方法NetAssociation.m

,你避免這種情況的檢查,並能得到更大程度的偏移。我已將github reference鏈接到與主節點相關的補丁。

一旦您的時鐘顯着失控,無法與NTP同步即可視爲安全功能,但由於我們只是使用它來計算系統時鐘和網絡時鐘之間的增量,因此它不會「T實際上給了我們什麼在這種情況下

它的相對不良記錄的框架,但你需要的ntp.hosts文件從框架資源目錄複製到使用框架的項目,並確保該文件被複製爲部分應用程序Build PhasesCopy Bundle Resources部分。

如果您不復制該文件,則該框架沒有時間參考使用,因此從不確定要使用的偏移量,從而導致操作系統時刻一直處於運行狀態。

框架的cocoapods版本不使用此配置文件,而是使用方法networkDateWithServer:(NSString *)server,它允許您明確指定要使用的NTP服務器。

該框架可能會以更恰當的方式作出反應(例如記錄文件的缺失)而不是繼續進行,但這是一個設計決定。

+0

該文件是構建階段中的「複製包資源」部分的一部分 –

+0

而且您已驗證該文件存在於生成的可執行文件的應用包中,並且包含一系列ntp服務器可以通過手機進行訪問,我已經完成了一個運行在iPad Air和iPhone 5S上的虛擬項目,它已經重建了64位的框架,如果可以的話,[從設備中窺探流量](http:// zoooot。 com/1405/sniffing-your-ios-devices-network-traffic),並驗證你是否發送NTP請求並接收NTP響應 – Petesh

+0

我不知道如何找到應用程序包中的文件,但我會嘗試你的snooping建議 –