Используя CLLocationManager в SpringBoard, но получил ошибку: в зависимости от устаревшей авторизации по требованию, которая не поддерживается для новых приложений

Я использую CLLocationManager в SpringBoard или imagent, но когда я выделяю CLLocationManager, я получил ошибку with:depending on legacy on-demand authorization, which is not supported for new apps, даже в локализованном процессе, я получил ту же ситуацию...

%hook SpringBoard
-(void)applicationDidFinishLaunching: (id)application {
    CLLocationManager *locationMgr = [[CLLocationManager alloc] init];
    %orig;
}
%end

Вопрос в том, как я могу получить информацию о местоположении в таком процессе? Или если я могу изменить права на приложение?

1 ответ

Решение

Это все из-за изменений в iOS 8. На предыдущих версиях iOS как минимум locationd имел com.apple.locationd.preauthorized право, которое дает доступ к местоположению без разрешения пользователя. Теперь даже locationd не имеет его То же самое с SpringBoard а также imagent, Конечно, существо locationd он может получить доступ к местоположению через свои собственные API - locationd это демон определения местоположения, который обрабатывает все, от авторизации до фильтрации и обработки необработанных данных о местоположении из различных источников.

Вы можете изменить их Info.plist но это не поможет - эти приложения по-прежнему не будут авторизованы. С SpringBoard Вы должны будете отобразить предупреждение по умолчанию, чтобы позволить ему получить доступ к местоположению. С locationd а также imagent Вы, вероятно, ничего не можете сделать - они демоны. У демонов нет пользовательского интерфейса, поэтому они не могут отображать какие-либо предупреждения для запроса разрешения. Чтобы решить эту систему, демоны используют права доступа к чему-либо без разрешения пользователя (например, личная информация).

Теперь, как вы можете решить эту проблему, кроме запроса разрешения от пользователя для SpringBoard:

  • Напишите свой собственный демон с подписью com.apple.locationd.preauthorized право. Таким образом, вы можете получить доступ к местоположению без каких-либо разрешений. Ваш демон всегда будет уполномочен сделать это по умолчанию.
  • Отказаться от системных приложений с com.apple.locationd.preauthorized, Это своего рода хак, против которого я лично выступаю в данном случае, так как написание демона решает все проблемы. Если вы все еще хотите сделать это, прочитайте мой ответ здесь
Другие вопросы по тегам