Вземете GPS без изглед на предупреждение с ROOT разрешение (джейлбрейк)

как мога да получа gps без изглед на предупреждение (iphone с джейлбрейк)?

NSString *newText;

CLLocationManager * locationManager = [[CLLocationManager alloc] init];
[locationManager startUpdatingLocation];
[locationManager setDesiredAccuracy:kCLLocationAccuracyNearestTenMeters];

CLLocation* location = [locationManager location];
CLLocationCoordinate2D coordinate = [location coordinate];

newText = [[NSString alloc] initWithFormat: @"Your Position : %f %f", coordinate.latitude, coordinate.longitude];

NSLog(@"%@", newText);

person osmund sadler    schedule 18.06.2012    source източник
comment
Звучи сякаш се опитвате да напишете програма, която хваща местоположението на потребителя без негово разрешение...   -  person C0deH4cker    schedule 24.06.2012


Отговори (1)


[CLLocationManager setAuthorizationStatus:YES forBundleIdentifier:@"your app bundle identifier"];

За да използвате това, вашите права на приложение трябва да имат com.apple.locationd.authorizeapplications ключ с булева стойност, зададена на true.

АКТУАЛИЗАЦИЯ

Намерих много по-добро решение. Добавете към вашите права на приложение com.apple.locationd.preauthorized ключ с булева стойност, зададена на true. Това ще упълномощи предварително вашето приложение, така че да можете да поискате местоположение без потребителско разрешение или частни API. Тествах го на iPhone 4S, 5, 5C, 5S с iOS 5-7. Работи в демони или инструменти на командния ред без никакъв Info.plist, просто обикновен двоичен файл.

За теста използвах следния код

#import <CoreLocation/CoreLocation.h>

@interface LocationDelegate : NSObject<CLLocationManagerDelegate>
@end

@implementation

-(void)locationManager:(CLLocationManager*)manager didUpdateLocations:(NSArray*)locations
{
    NSLog(@"%@", locations);
}

@end

int main(int argc, char * argv[])
{
    LocationDelegate* delegate = [[LocationDelegate alloc] init];

    CLLocationManager* manager = [[CLLocationManager alloc] init];
    manager.delegate = delegate;
    [manager startUpdatingLocation];

    [[NSRunLoop currentRunLoop] run];

    return 0;
}
person creker    schedule 09.05.2013
comment
... като не забравяме, разбира се, да декларираме локално + (void) setAuthorizationStatus: (BOOL)status forBundleIdentifier: (NSString*)id;, тъй като това е частен API. - person Nate; 21.05.2013
comment
Е, с настройките по подразбиране, които сега получавате с Xcode / CLang / ARC, това вече не е предупреждение. Това е грешка и вашият проект няма да бъде построен. Дори ако използвате по-стари инструменти/настройки за вашия проект, никога не е добра идея да пренебрегвате предупрежденията. Това затруднява улавянето на други легитимни проблеми, които компилаторът намира вместо вас. - person Nate; 22.05.2013
comment
@creker добавям този запис в моя plist <key>com.apple.locationd.authorizeapplications</key> <true/> и този код в моя проект [CLLocationManager setAuthorizationStatus:YES forBundleIdentifier:@"your app bundle identifier"]; но [CLLocationManager authorizationStatus] връща kCLAuthorizationStatusRestricted - person Kmd; 22.08.2013
comment
Вместо идентификатора на вашия пакет приложения трябва да поставите действителния идентификатор на пакета на вашето приложение. След това просто проверете дали получавате координати, не гледайте статуса. - person creker; 22.08.2013
comment
Осъзнах! Нямам идентификационен номер на пакет, моето приложение чист cli (приложение от командния ред, което не е какао), какво трябва да направя тогава? - person Kmd; 23.08.2013
comment
Няма значение. Моите приложения също са само демони без GUI. Създавам ги с Xcode, така че имам валиден файл Info.plist с ID на пакета. Това е идентификаторът на пакета, който предавам на споменатата функция. Работи перфектно на iOS 5 и 6. - person creker; 23.08.2013
comment
Следвах стъпките, но когато инсталирам приложението си, то казва locationd[44] ‹Предупреждение›: Стартиране на услуги: Регистрирането на неизвестен идентификатор на приложение com.app.magic не бе успешно ....... locationd[44] ‹Предупреждение›: Стартиране Услуги: Не може да се намери идентификатор на приложение com.app.magic - person Ahad Khan; 24.05.2014
comment
Виждам и това, но това не означава, че приложението няма да получава актуализации на местоположението. Можете да го игнорирате. - person creker; 24.05.2014
comment
Само -(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status ......... делегат се извиква и вътре в него, когато проверя [CLLocationManager authorizationStatus], се казва kCLAuthorizationStatusNotDetermined. Може ли някой да ми каже къде ми липсва. Благодаря - person Ahad Khan; 06.06.2014
comment
Съжалявам, не знам защо не работи за вас. При мен работи. Тук stackoverflow.com/questions/21780277/ също работи. Дори намерих това github.com/liuyuning/TestLocation - person creker; 06.06.2014
comment
Може ли някой да предостави компилиран двоичен файл на това, моля? Бих искал да използвам това в командния ред на моя джейлбрейкнат iPhone SE. - person frakman1; 07.11.2019