İOS 7'de iyi çalışan uygulamam iOS 8 SDK ile çalışmıyor.
CLLocationManager
bir konum döndürmüyor ve uygulamamı Ayarlar -> Konum Servisleri altında da görmüyorum . Bu konuda Google'da bir arama yaptım, ancak hiçbir şey gelmedi. Ne yanlış olabilir?
İOS 7'de iyi çalışan uygulamam iOS 8 SDK ile çalışmıyor.
CLLocationManager
bir konum döndürmüyor ve uygulamamı Ayarlar -> Konum Servisleri altında da görmüyorum . Bu konuda Google'da bir arama yaptım, ancak hiçbir şey gelmedi. Ne yanlış olabilir?
Yanıtlar:
Sonunda kendi sorunumu çözdüm.
Görünüşe göre iOS 8 SDK'da, requestAlwaysAuthorization
(arka plan konumu için) veya requestWhenInUseAuthorization
(yalnızca ön plandayken konum) CLLocationManager
konum güncellemelerine başlamadan önce çağrı yapılması gerekiyor.
Ayrıca olması gerekir NSLocationAlwaysUsageDescription
veya NSLocationWhenInUseUsageDescription
anahtar Info.plist
bir mesajla istemi görüntülenecek. Bunları eklemek sorunumu çözdü.
Umarım başka birine yardımcı olur.
EDIT: Daha kapsamlı bilgi için, bir göz atın: Core-Location-Manager-Değişiklikler-in-ios-8
Saçımı da aynı sorunla çekiyordum. Xcode size şu hatayı verir:
MapKit
Konum yetkilendirmesi sormadan konum güncellemelerini başlatmaya çalışıyorum . Aramalı-[CLLocationManager requestWhenInUseAuthorization]
veya-[CLLocationManager requestAlwaysAuthorization]
önce.
Ancak yukarıdaki yöntemlerden birini uygulasanız bile, info.plist NSLocationAlwaysUsageDescription
veya için bir giriş olmadığı sürece kullanıcıdan bilgi istemez NSLocationWhenInUseUsageDescription
.
Bilgi satırınıza aşağıdaki satırları ekleyin; burada dize değerleri kullanıcıların konumuna erişmeniz için gerekeni gösterir
<key>NSLocationWhenInUseUsageDescription</key>
<string>This application requires location services to work</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>This application requires location services to work</string>
Xcode 5'te bu projeyi başlattığımdan beri bu girişlerin eksik olabileceğini düşünüyorum. Xcode 6 bu anahtarlar için varsayılan girişler ekleyebilir, ancak onaylamadı.
Bu iki Ayar hakkında daha fazla bilgiyi burada bulabilirsiniz
Bunun iOS 7 ile geriye doğru uyumlu olduğundan emin olmak için kullanıcının iOS 8 veya iOS 7 çalıştırıp çalıştırmadığını kontrol etmelisiniz. Örneğin:
#define IS_OS_8_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
//In ViewDidLoad
if(IS_OS_8_OR_LATER) {
[self.locationManager requestAlwaysAuthorization];
}
[self.locationManager startUpdatingLocation];
if ([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) { ...
requestAlwaysAuthorization
. Benim ek solüsyon içinde bu çizgiyi kullanmaktı if
yerine normal bir yöntem çağrısının açıklamada: [self.locationManager performSelector:@selector(requestAlwaysAuthorization)];
. Belki bu diğer insanlar için açıktır, ama çözmem biraz zaman aldı. Son Xcode 6 piyasaya sürülene kadar doğru çözüm olduğunu düşünüyorum.
__IPHONE_OS_VERSION_MAX_ALLOWED
( #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
) kullanarak koşullu olarak derlemektir ( )
- (void)startLocationManager
{
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.distanceFilter = kCLDistanceFilterNone; //whenever we move
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[locationManager startUpdatingLocation];
[locationManager requestWhenInUseAuthorization]; // Add This Line
}
Ve info.plist Dosyanıza
Apple belgelerine göre:
İOS 8'den itibaren, uygulamanızın Info.plist dosyasında bir NSLocationWhenInUseUsageDescription
veya NSLocationAlwaysUsageDescription
anahtar değerinin bulunması gerekir. Daha sonra, konum güncellemelerine kaydolmadan önce, arayarak [self.myLocationManager requestWhenInUseAuthorization]
veya [self.myLocationManager requestAlwaysAuthorization]
ihtiyacınıza bağlı olarak kullanıcıdan izin istemeniz gerekir. Info.plist'e girdiğiniz dize, sonraki iletişim kutusunda görüntülenir.
Kullanıcı izin verirse, her zamanki gibi iş yapar. İzin vermezlerse, temsilci konum güncellemeleri hakkında bilgilendirilmez.
- (void)viewDidLoad
{
[super viewDidLoad];
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
if([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]){
NSUInteger code = [CLLocationManager authorizationStatus];
if (code == kCLAuthorizationStatusNotDetermined && ([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)] || [self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)])) {
// choose one request according to your business.
if([[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSLocationAlwaysUsageDescription"]){
[self.locationManager requestAlwaysAuthorization];
} else if([[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSLocationWhenInUseUsageDescription"]) {
[self.locationManager requestWhenInUseAuthorization];
} else {
NSLog(@"Info.plist does not contain NSLocationAlwaysUsageDescription or NSLocationWhenInUseUsageDescription");
}
}
}
[self.locationManager startUpdatingLocation];
}
> #pragma mark - CLLocationManagerDelegate
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
NSLog(@"didFailWithError: %@", error);
UIAlertView *errorAlert = [[UIAlertView alloc]
initWithTitle:@"Error" message:@"Failed to Get Your Location" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[errorAlert show];
}
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
NSLog(@"didUpdateToLocation: %@", newLocation);
CLLocation *currentLocation = newLocation;
if (currentLocation != nil) {
longitudeLabel.text = [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.longitude];
latitudeLabel.text = [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.latitude];
}
}
İOS 8'de konumun çalışması için iki ek şey yapmanız gerekir: Info.plist'inize bir anahtar ekleyin ve konum yöneticisinden başlamasını isteyen bir yetki isteyin. Yeni konum yetkilendirmesi için iki Info.plist anahtarı vardır. Bu anahtarlardan biri veya her ikisi de gereklidir. Anahtarlardan hiçbiri orada değilse, startUpdatingLocation öğesini çağırabilirsiniz, ancak konum yöneticisi aslında başlamaz. Temsilciye bir hata mesajı göndermez (hiç başlamadığından başarısız olamaz). Anahtarlardan birini veya her ikisini eklerseniz ancak açıkça yetkilendirme isteğinde bulunmayı unutursanız da başarısız olur. Yapmanız gereken ilk şey, Info.plist dosyanıza aşağıdaki anahtarlardan birini veya her ikisini eklemektir:
Bu tuşların her ikisi de bir dize alır
Bu, konum hizmetlerine neden ihtiyacınız olduğunu açıklamaktadır. İOS 7'de olduğu gibi InfoPlist.strings dosyasında yerelleştirilebilen “Nerede olduğunuzu öğrenmek için konum gereklidir” gibi bir dize girebilirsiniz.
Xcode 5'te derlenebilecek çözümüm:
#ifdef __IPHONE_8_0
NSUInteger code = [CLLocationManager authorizationStatus];
if (code == kCLAuthorizationStatusNotDetermined && ([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)] || [self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)])) {
// choose one request according to your business.
if([[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSLocationAlwaysUsageDescription"]){
[self.locationManager requestAlwaysAuthorization];
} else if([[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSLocationWhenInUseUsageDescription"]) {
[self.locationManager requestWhenInUseAuthorization];
} else {
NSLog(@"Info.plist does not contain NSLocationAlwaysUsageDescription or NSLocationWhenInUseUsageDescription");
}
}
#endif
[self.locationManager startUpdatingLocation];
Konum sormanın eski kodu iOS 8'de çalışmaz. Konum yetkilendirme için bu yöntemi deneyebilirsiniz:
- (void)requestAlwaysAuthorization
{
CLAuthorizationStatus status = [CLLocationManager authorizationStatus];
// If the status is denied or only granted for when in use, display an alert
if (status == kCLAuthorizationStatusAuthorizedWhenInUse || status == kCLAuthorizationStatusDenied) {
NSString *title;
title = (status == kCLAuthorizationStatusDenied) ? @"Location services are off" : @"Background location is not enabled";
NSString *message = @"To use background location you must turn on 'Always' in the Location Services Settings";
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:title
message:message
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"Settings", nil];
[alertView show];
}
// The user has not enabled any location services. Request background authorization.
else if (status == kCLAuthorizationStatusNotDetermined) {
[self.locationManager requestAlwaysAuthorization];
}
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 1) {
// Send the user to the Settings for this app
NSURL *settingsURL = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
[[UIApplication sharedApplication] openURL:settingsURL];
}
}
İOS 8'de konumun çalışması için iki ek şey yapmanız gerekir: Info.plist'inize bir anahtar ekleyin ve konum yöneticisinden başlamasını isteyen bir yetki isteyin
Info.plist:
<key>NSLocationUsageDescription</key>
<string>I need location</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>I need location</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>I need location</string>
Bunu kodunuza ekleyin
if (IS_OS_8_OR_LATER)
{
[locationmanager requestWhenInUseAuthorization];
[locationmanager requestAlwaysAuthorization];
}
Swift geliştiricileri için yaygın bir hata:
Öncelikle plist'e NSLocationWhenInUseUsageDescription
veya için bir değer eklediğinizden emin olun NSLocationAlwaysUsageDescription
.
Eğer varsa hala bir pencere yetki isteyen açılır göremiyorum, sen çizgiyi koyarak olup olmadığını görmek için bakmak var locationManager = CLLocationManager()
için Görünüm Kontrolörünün içinde viewDidLoad
yöntemle. Eğer yaparsanız, arasanız bile locationManager.requestWhenInUseAuthorization()
, hiçbir şey görünmez. Bunun nedeni, viewDidLoad yürütüldükten sonra locationManager değişkeninin serbest bırakılmasıdır (temizlenir).
Çözüm, var locationManager = CLLocationManager()
sınıf yönteminin en üstündeki satırı bulmaktır .
Daha önce [locationManager startUpdatingLocation];
bir iOS8 konum hizmetleri isteği ekleyin:
if([locationManager respondsToSelector:@selector(requestAlwaysAuthorization)])
[locationManager requestAlwaysAuthorization];
Uygulamanızı düzenleyin ve kullanıcıya görüntülenecek dize değerine sahip bir Info.plist
anahtar ekleyin NSLocationAlwaysUsageDescription
(örneğin,We do our best to preserve your battery life.
)
Uygulamanızın yalnızca uygulama açıkken konum hizmetlerine ihtiyacı varsa değiştirin:
requestAlwaysAuthorization
ile requestWhenInUseAuthorization
ve
NSLocationAlwaysUsageDescription
ile NSLocationWhenInUseUsageDescription
.
İOS 8'e yükseltilmiş bir uygulama üzerinde çalışıyordum ve konum hizmetleri çalışmayı durdurdu. Muhtemelen şu şekilde Hata Ayıklama alanında hata alırsınız:
Trying to start MapKit location updates without prompting for location authorization. Must call -[CLLocationManager requestWhenInUseAuthorization] or -[CLLocationManager requestAlwaysAuthorization] first.
En az müdahaleci prosedürü yaptım. Öncelikle NSLocationAlwaysUsageDescription
info.plist'inize giriş ekleyin :
Bu anahtarın değerini doldurmadım. Bu hala çalışıyor ve bu bir şirket içi uygulama olduğundan endişelenmiyorum. Ayrıca, zaten konum hizmetlerini kullanmak isteyen bir başlık var, bu yüzden gereksiz bir şey yapmak istemiyordu.
Sonra iOS 8 için bir koşul oluşturdum:
if ([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
[_locationManager requestAlwaysAuthorization];
}
Bundan sonra locationManager:didChangeAuthorizationStatus:
yöntem çağrılır:
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus: (CLAuthorizationStatus)status
{
[self gotoCurrenLocation];
}
Ve şimdi her şey yolunda gidiyor. Her zaman olduğu gibi, belgelere bakın .
Geriye dönük uyumluluk ile çözüm:
SEL requestSelector = NSSelectorFromString(@"requestWhenInUseAuthorization");
if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined &&
[self.locationManager respondsToSelector:requestSelector]) {
[self.locationManager performSelector:requestSelector withObject:NULL];
} else {
[self.locationManager startUpdatingLocation];
}
Info.plist'inizde NSLocationWhenInUseUsageDescription anahtarını ayarlayın
locationManager: (CLLocationManager *)manager didFailWithError: (NSError *)error
. Ancak, if deyimine startUpdatingLocation öğesini eklemeyi unuttu, böylece kabul ettikten veya reddettikten sonra, aslında startUpdateLocation'ı çağırmaz.
Xcode uyarıları oluşturmayan geriye dönük uyumluluğa sahip çözüm:
SEL requestSelector = NSSelectorFromString(@"requestWhenInUseAuthorization");
if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined &&
[self.locationManager respondsToSelector:requestSelector]) {
((void (*)(id, SEL))[self.locationManager methodForSelector:requestSelector])(self.locationManager, requestSelector);
[self.locationManager startUpdatingLocation];
} else {
[self.locationManager startUpdatingLocation];
}
Kurulum NSLocationWhenInUseUsageDescription
anahtarı Info.plist
.
İOS sürümü 11.0+ İçin Kurulumu: NSLocationAlwaysAndWhenInUseUsageDescription
Gözlerinde farklı anahtarın Info.plist
. diğer 2 tuşla birlikte.
Bu ios 8 ile ilgili bir sorundur Kodunuza ekleyin
if (IS_OS_8_OR_LATER)
{
[locationmanager requestWhenInUseAuthorization];
[locationmanager requestAlwaysAuthorization];
}
ve info.plist'e:
<key>NSLocationUsageDescription</key>
<string>I need location</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>I need location</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>I need location</string>
NSLocationUsageDescription
iOS8 + 'da kullanılmaz
Objective-C Prosedürü Aşağıdaki talimatları izleyin:
İOS-11 için iOS 11 için şu Yanıt'a göz atın: iOS 11 konum erişimi
Pliste iki Anahtar eklemeniz ve aşağıdaki resimdeki gibi mesaj sağlamanız gerekir:
1. NSLocationAlwaysAndWhenInUseUsageDescription
2. NSLocationWhenInUseUsageDescription
3. NSLocationAlwaysUsageDescription
NSLocationWhenInUseUsageDescription
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyThreeKilometers;
if([locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]){
[locationManager requestWhenInUseAuthorization];
}else{
[locationManager startUpdatingLocation];
}
Delege Yöntemleri
#pragma mark - Lolcation Update
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
NSLog(@"didFailWithError: %@", error);
UIAlertView *errorAlert = [[UIAlertView alloc]
initWithTitle:@"Error" message:@"Failed to Get Your Location" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[errorAlert show];
}
-(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
{
switch (status) {
case kCLAuthorizationStatusNotDetermined:
case kCLAuthorizationStatusRestricted:
case kCLAuthorizationStatusDenied:
{
// do some error handling
}
break;
default:{
[locationManager startUpdatingLocation];
}
break;
}
}
- (void)locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray *)locations
{
CLLocation *location = [locations lastObject];
userLatitude = [NSString stringWithFormat:@"%f", location.coordinate.latitude] ;
userLongitude = [NSString stringWithFormat:@"%f",location.coordinate.longitude];
[locationManager stopUpdatingLocation];
}
Hızlı Prosedür
Aşağıdaki talimatları izleyin:
İOS-11 için iOS 11 için şu Yanıt'a göz atın: iOS 11 konum erişimi
Pliste iki Anahtar eklemeniz ve aşağıdaki resimdeki gibi mesaj sağlamanız gerekir:
1. NSLocationAlwaysAndWhenInUseUsageDescription
2. NSLocationWhenInUseUsageDescription
3. NSLocationAlwaysUsageDescription
import CoreLocation
class ViewController: UIViewController ,CLLocationManagerDelegate {
var locationManager = CLLocationManager()
//MARK- Update Location
func updateMyLocation(){
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyThreeKilometers;
if locationManager.respondsToSelector(#selector(CLLocationManager.requestWhenInUseAuthorization)){
locationManager.requestWhenInUseAuthorization()
}
else{
locationManager.startUpdatingLocation()
}
}
Delege Yöntemleri
//MARK: Location Update
func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
NSLog("Error to update location :%@",error)
}
func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
switch status {
case .NotDetermined: break
case .Restricted: break
case .Denied:
NSLog("do some error handling")
break
default:
locationManager.startUpdatingLocation()
}
}
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let location = locations.last! as CLLocation
var latitude = location.coordinate.latitude
var longitude = location.coordinate.longitude
}
Xamarin'i kullananlar NSLocationWhenInUseUsageDescription
için, Xamarin 5.5.3 Build 6 veya XCode 6.1'deki açılır listelerde bulunmadığından info.plist'e el ile anahtar eklemem gerekiyordu - sadece NSLocationUsageDescription
listede bulunuyordu ve bu CLLocationManager
da sessizce başarısız olur.
// ** Don't forget to add NSLocationWhenInUseUsageDescription in MyApp-Info.plist and give it a string
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
// Check for iOS 8. Without this guard the code will crash with "unknown selector" on iOS 7.
if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
[self.locationManager requestWhenInUseAuthorization];
}
[self.locationManager startUpdatingLocation];
// Location Manager Delegate Methods
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
NSLog(@"%@", [locations lastObject]);
}
Birden fazla Info.plist dosyasına sahip olan hepiniz için küçük bir yardımcı ...
find . -name Info.plist | xargs -I {} /usr/libexec/PlistBuddy -c 'Add NSLocationWhenInUseUsageDescription string' {}
Gerekli etiketi geçerli dizindeki (ve alt klasörlerin) tüm Info.plist dosyalarına ekler.
Diğeri:
find . -name Info.plist | xargs -I {} /usr/libexec/PlistBuddy -c 'Set NSLocationWhenInUseUsageDescription $YOURDESCRIPTION' {}
Açıklamanızı tüm dosyalara ekler.
Bu güncellemeler için Kakao Anahtarları bilgilerini her zaman parmaklarınızın ucunda tutun , işte link:
Zevk almak.
İOS9'da benzer bir hata alıyorum (Xcode 7 ve Swift 2 ile çalışıyor): Konum yetkisi sormadan MapKit konum güncellemelerini başlatmaya çalışıyorum. Önce - [CLLocationManager isteğiWhenInUseAuthorization] veya - [CLLocationManager requestAlwaysAuthorization] çağrısı yapılmalıdır. Bir öğreticiyi takip ediyordum ama öğretmen iOS8 ve Swift 1.2 kullanıyordu. Xcode 7 ve Swift 2'de bazı değişiklikler var, bu kodu buldum ve benim için iyi çalışıyor (birinin yardıma ihtiyacı varsa):
import UIKit
import MapKit
import CoreLocation
class MapViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {
// MARK: Properties
@IBOutlet weak var mapView: MKMapView!
let locationManager = CLLocationManager()
override func viewDidLoad() {
super.viewDidLoad()
self.locationManager.delegate = self
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
self.locationManager.requestWhenInUseAuthorization()
self.locationManager.startUpdatingLocation()
self.mapView.showsUserLocation = true
}
// MARK: - Location Delegate Methods
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let location = locations.last
let center = CLLocationCoordinate2D(latitude: location!.coordinate.latitude, longitude: location!.coordinate.longitude)
let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 1, longitudeDelta: 1))
self.mapView.setRegion(region, animated: true)
}
func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
print("Errors: " + error.localizedDescription)
}
}
Son olarak, bunu info.plist'e koydum: Bilgi Özellik Listesi: NSLocationWhenInUseUsageDescription Değer: Uygulama, personel için konum sunucularına ihtiyaç duyuyor
İOS'ta kullanıcıların konumuna erişmek için. İki anahtar eklemeniz gerekiyor
NSLocationWhenInUseUsageDescription
NSLocationAlwaysUsageDescription
Info.plist dosyasına.
<key>NSLocationWhenInUseUsageDescription</key>
<string>Because I want to know where you are!</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>Want to know where you are!</string>
Aşağıdaki resme bakın.
Her hedefin her birinde GPS kullanılmasını isteyen anahtar NSLocationWhenInUseUsageDescription
veya anahtar NSLocationAlwaysUsageDescription
(arka plan GPS kullanımı) ekleyin info.plist
.
Çalıştırarak izin isteyin:
[self initLocationManager: locationManager];
Nerede initLocationManager
:
// asks for GPS authorization on iOS 8
-(void) initLocationManager:(CLLocationManager *) locationManager{
locationManager = [[CLLocationManager alloc]init];
if([locationManager respondsToSelector:@selector(requestAlwaysAuthorization)])
[locationManager requestAlwaysAuthorization];
}
Anahtarlar info.plist
her hedef için her biri üzerinde değilse , uygulamanın kullanıcıya sormayacağını unutmayın. if
İOS 7 ile uyumluluk sağlar ve respondsToSelector:
yöntem sadece iOS 7 ve 8 için konuyu çözmek yerine gelecek uyumluluğu garanti eder.
Ben bu anahtarı eklemek InfoPlist.strings
de iOS 8.4, iPad Mini 2. Çok çalışır. Ben herhangi bir tuşa gibi ayarlamayın NSLocationWhenInUseUsageDescription
skinTenimde, Info.plist
.
InfoPlist.strings :
"NSLocationWhenInUseUsageDescription" = "I need GPS information....";
Bu iş parçacığı üzerinde Baz örgüt, as in iOS 7
, InfoPlist.strings lokalize edilebilir. Testimde, bu anahtarlar doğrudan dosyada yapılandırılabilir InfoPlist.strings
.
Yapmanız gereken ilk şey, aşağıdaki anahtarlardan birini veya her ikisini de Info.plist dosyanıza eklemektir:
- NSLocationWhenInUseUsageDescription
- NSLocationAlwaysUsageDescription
Bu anahtarların her ikisi de, konum hizmetlerine neden ihtiyacınız olduğunu açıklayan bir dize alır. Gibi olan “Konum nerede olduğunu öğrenmek için gereklidir” gibi bir dize girebilirsiniz iOS 7 , InfoPlist.strings dosyasında lokalize edilebilir.
GÜNCELLEME:
Bence @IOS
yöntemi daha iyi. Anahtarına Info.plist
boş bir değer ekleyin ve yerelleştirilmiş dizeler ekleyin InfoPlist.strings
.