Используя 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
, Это своего рода хак, против которого я лично выступаю в данном случае, так как написание демона решает все проблемы. Если вы все еще хотите сделать это, прочитайте мой ответ здесь