Есть ли способ определить фактическое время и дату в iOS (а не время устройства)

В iOS мне нужно знать фактическое время (UTC), а не время устройства. Другими словами, пользователь не должен иметь возможности изменять время или дату.

Все, что требует подключения к сети, не годится (поэтому доступ к серверу времени невозможен).

AFAIK, есть 2 теоретических способа добиться этого:

  • Используйте метку времени из сигнала спутника GPS
  • Получить текущее время от оператора

Проблема в том, что эта информация не раскрывается никаким API в iOS.

Есть ли другой способ?


person Philippe Leybaert    schedule 17.08.2012    source источник
comment
Просто из любопытства, почему это точное время так важно для вашего проекта? Если вы не возражаете, что я спрошу.   -  person Ryan Poolos    schedule 17.08.2012
comment
Регистрация времени. Он должен быть защищен от взлома.   -  person Philippe Leybaert    schedule 17.08.2012
comment
Независимо от того, какой вариант вы найдете, если телефон взломан, все ставки сняты.   -  person David H    schedule 17.08.2012
comment
@PhilippeLeybaert, у вас есть решение для этого?   -  person Karthik Mandava    schedule 12.01.2017


Ответы (3)


Большинство решений, которые вы могли бы найти (включая получение данных GPS от CoreLocation для доступа к информации о времени), ошибочны, поскольку они зависят от фактического устройства для доступа к времени и времени. Вам нужно будет подключиться к серверу времени (я бы посоветовал проверить сервер NTP). Я просматривал базовую структуру телефонии и не мог найти ничего, что обеспечивало бы сетевое время. Возможно, вы захотите заполнить отчет об ошибке и попросить Apple расширить один из классов, чтобы включить время.

person J2theC    schedule 17.08.2012

Вы можете взглянуть на secondFromGMTForDate: и secondFromGMT в NSTimeZone. Если смещение по Гринвичу увеличивается/уменьшается при изменении времени устройства, это дает возможность исправить ваши метки времени на GMT (и, возможно, преобразовать в UTC).

person Rein Spijkerman    schedule 17.08.2012
comment
Этот API по-прежнему использует часы устройства (установленные пользователем). Он не позволяет определить фактическое время UTC. - person Philippe Leybaert; 17.08.2012

Вы не можете получить необработанные данные GPS, а свойство временной метки CLLocation в locationManager:didUpdateLocations: установлено с системными часами.

person Bulma    schedule 06.01.2017
comment
Пробовал эту технику. Когда устройство переведено в режим полета, GPS определяет время устройства и преобразует его в GMT. Он даже не показывает местное время. Он не показывает фактическое время. - person Niranjan Molkeri; 01.02.2019