Службы определения местоположения в программе командной строки в Mac OS

Я написал простую программу, которая использует службы определения местоположения Cocoa для получения текущего положения пользователя. На MacBook Pro работает без проблем. Однако на MacBook Air этого нет.

У меня остался код Operation could not be completed. (kCLErrorDomain error 1.), и я уже много чего пытался исправить (например, установка разрешений). После установки флажка для приложения в настройках конфиденциальности, чтобы включить службы определения местоположения для приложения, оно исчезает, как только я запускаю приложение.

Для инициализации сервисов я использую метод startUpdatingLocation класса CLLocationManager.

Есть ли способ решить проблему?


person az4dan    schedule 30.08.2012    source источник
comment
услуги локализации и определения местоположения — разные вещи. Я предполагаю, что вы говорите о последнем.   -  person JeremyP    schedule 30.08.2012
comment
Я, спасибо за поправку.   -  person az4dan    schedule 30.08.2012
comment
CoreLocation требуется WiFi в OS X. Подключен ли MacBook Air к сети WiFi?   -  person Felix    schedule 02.09.2012
comment
Да, его отключили, к сожалению.   -  person az4dan    schedule 02.09.2012


Ответы (2)


Ответ тривиален - я забыл установить права на исполняемый файл, который запускается файлом plist в /Library/LaunchDaemons/. Простой chmod 007 решает проблему.

person az4dan    schedule 07.09.2012

Ошибка kCLErrorDomain 1 означает, что вам было отказано в доступе к службам определения местоположения. Скорее всего, они были отключены. См. раздел отключение служб определения местоположения. Если вы перейдете в «Системные настройки» -> «Безопасность» -> «Конфиденциальность», там есть поле «Включить службы определения местоположения», которое вы можете отметить. Кроме того, метод класса authorStatus возвращает статус вашего текущего доступа к службам определения местоположения. Его состояние определяется как следующее перечисление:

typedef enum {
   kCLAuthorizationStatusNotDetermined = 0, //user hasn't allowed/denied
   kCLAuthorizationStatusRestricted, //app level restriction, cannot be lifted by user
   kCLAuthorizationStatusDenied, //explicit user denial, or disabled in settings
   kCLAuthorizationStatusAuthorized //self explanitory
} CLAuthorizationStatus;

Надеюсь, что это поможет вам в некотором роде. Мой единственный совет, кроме этого, поскольку я сам не использовал службы определения местоположения, это прочитать документацию и, надеюсь, найти что-то, что поможет.

person Metabble    schedule 01.09.2012