正確なタイミングが必要なアプリケーションを書いています。 この質問 と尋ねた後、NTPまたはおそらくSimpleNTPを使用して調査することにしました。
IPhone用のこれらのプロトコルのオープンソース実装はありますか?これまでのところ、私はなんとか 壊れたリンク を見つけることができました。 NTPには Cリファレンス実装 があることも知っているので、iPhoneで動作させるためにどれだけの労力が必要になるかを調べています。
更新:機能するリンクがあると思いましたが、ファイルではなくテキストのみを保存するWayback Machineへのリンクです 機能するリンク 。
ios-ntp という名前の小さなiOSライブラリがあります。過去に1つのプロジェクトで使用したことがありますが、かなりうまく機能しているようです。
2013年半ばの時点で、元のios-ntpプロジェクトにはいくつかの欠落部分があるため、元のsvnリポジトリをgithubにミラーリングしました。ここでコードの動作バージョンをチェックアウトできます: https://github.com/jessedc/iOS-ntp
私はおそらく OpenNTPD からコードをプルすることから始めます。
商用アプリケーションを開発していない場合は、Linuxソースを確認してください。
NTPを使用する必要があるが、iPhone(またはiPod)の時計を信頼したくない場合は、いつでもソケット(またはCocoaストリーム)を使用してサーバーに自分でクエリを実行できます。これは、世の中で最も単純なネットワークトランザクションの1つです。
商用アプリを開発しているので、他のすべてが失敗した場合、 RFC 20 はSNTPプロトコルを記述します。バックグラウンドタスクを必要としない市販のライブラリに関する情報はありません。iPhoneでは使用できません。
作成しているアプリケーションはわかりませんが、時計を信頼することがセキュリティや(ゲームの場合)チート防止などの重要な機能である場合は、NTPなどのオープンプロトコルに十分注意する必要があります。 -詐欺師は、あなたのNTPリクエストに対して中間者攻撃を行い、彼があなたに聞きたいことをアプリに伝えることができます。
これが潜在的に懸念される場合は、サーバーに時間に関する信頼できる唯一の情報源を構築し(たとえば、独自のタイムサービスを構築し、PK暗号で応答に署名する)、アプリの内部時計を許容できるクロックスキュー。
そのオープンソースを使用できます: https://github.com/huynguyencong/NHNetworkTime
[[NHNetworkClock sharedNetworkClock] syncWithComplete:^{
NSLog(@"%s - Time synced %@", __PRETTY_FUNCTION__, [NSDate networkDate]);
}];
そして使用:
NSDate *networkDate = [NSDate networkDate];