Есть ли способ определить фактическое время и дату в iOS (не время устройства)
В iOS мне нужно знать фактическое время (UTC), а не время устройства. Другими словами, у пользователя не должно быть возможности вмешиваться в время или дату.
Все, что требует подключения к сети, не годится (поэтому доступ к серверу времени невозможен).
AFAIK, есть 2 теоретических способа достижения этого:
- Используйте метку времени из спутникового сигнала GPS
- Получить текущее время от перевозчика
Проблема в том, что эта информация не раскрывается никаким API в iOS.
Есть ли другой способ?
3 ответа
Большинство решений, которые вы можете найти (включая получение данных GPS из CoreLocation для доступа к информации о времени), имеют недостатки, поскольку они зависят от фактического устройства для доступа ко времени. Вам нужно будет подключиться к серверу времени (я бы посоветовал проверить наличие NTP-сервера). Я смотрел на основную структуру телефонии и не мог найти ничего, что обеспечивало бы время в сети. Возможно, вы захотите заполнить отчет об ошибке и попросить Apple расширить один из классов, чтобы включить время.
Вы могли бы взглянуть на secondsFromGMTForDate: и secondsFromGMT в NSTimeZone. Если смещение GMT увеличивается / уменьшается при изменении времени устройства, это дает возможность скорректировать ваши метки времени в GMT (и, вероятно, преобразовать в UTC).
Вы не можете получить к необработанным данным GPS и свойству метки времени CLLocation в locationManager:didUpdateLocations
: устанавливается с системными часами