source

iOS 8에서 위치 서비스가 작동하지 않음

gigabyte 2023. 4. 24. 23:26
반응형

iOS 8에서 위치 서비스가 작동하지 않음

iOS 7에서 정상적으로 동작하던 앱이 iOS 8 SDK에서는 동작하지 않습니다.

CLLocationManager로케이션을 반환하지 않고 [설정]-> [로케이션 서비스]아래에 앱이 표시되지 않습니다.그 문제에 대해 구글을 검색해 봤지만 아무 것도 나오지 않았어요.뭐가 잘못됐나요?

나는 결국 내 문제를 스스로 해결하게 되었다.

8 SDK, iOS 8 SDK에 있다고 합니다.requestAlwaysAuthorization 로케이션의 경우) (「」)requestWhenInUseAuthorization가 있는 ) ('포그라운드'의 경우):CLLocationManager는 로케이션 업데이트를 시작하기 전에 필요합니다.

'있다'가 .NSLocationAlwaysUsageDescription ★★★★★★★★★★★★★★★★★」NSLocationWhenInUseUsageDescription를 누르다Info.plist프롬프트에 표시되는 메시지와 함께 표시됩니다.이것들을 더하면 내 문제가 해결된다.

여기에 이미지 설명 입력

자세한 내용은 Core-Location-Manager-Changes-in-ios-8을 참조하십시오.

저도 같은 문제로 머리를 뽑고 있었어요.Xcode는 다음 오류를 나타냅니다.

.MapKit로케이션 인증을 요구하지 않고 로케이션을 갱신합니다. 전화해야 합니다.-[CLLocationManager requestWhenInUseAuthorization] ★★★★★★★★★★★★★★★★★」-[CLLocationManager requestAlwaysAuthorization] 번째

그러나 위의 중 하더라도 에 info.plist에 info.plist의 한 가 표시되지 NSLocationAlwaysUsageDescription ★★★★★★★★★★★★★★★★★」NSLocationWhenInUseUsageDescription.

다음 행을 info.plist에 추가합니다.여기서 문자열 값은 사용자 위치에 액세스해야 하는 이유를 나타냅니다.

<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에서 이 프로젝트를 시작한 이후 이 엔트리가 누락된 것 같습니다.Xcode 6은 이러한 키에 대한 기본 엔트리를 추가할 수 있지만 확인되지 않았습니다.

이 두 가지 설정에 대한 자세한 내용은 여기를 참조하십시오.

iOS 7과의 하위 호환성을 확인하려면 사용자가 iOS 8 또는 iOS 7을 실행하고 있는지 확인해야 합니다. 예를 들어 다음과 같습니다.

#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];
- (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


}

info File 에도.플리스트여기에 이미지 설명 입력

Apple 문서에 따르면:

8의 ,NSLocationWhenInUseUsageDescription ★★★NSLocationAlwaysUsageDescriptionInfo.plist 。, 하기 전에, 에게, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」의 어느 쪽인가에 전화하는 .[self.myLocationManager requestWhenInUseAuthorization] ★★★★★★★★★★★★★★★★★」[self.myLocationManager requestAlwaysAuthorization]당신의 필요에 따라.Info.plist 。

사용자가 허가를 해주면, 그것은 평상시와 같은 업무입니다.권한을 거부하면 대리인에게 위치 업데이트에 대한 알림이 전달되지 않습니다.

- (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];
        }
    }

iOS 8에서는 로케이션을 작동시키려면 다음 두 가지 작업을 추가로 수행해야 합니다.Info.plist에 키를 추가하고 Location Manager에게 시작을 요청하는 권한을 요청합니다.새로운 로케이션 인가에는 2개의 Info.plist 키가 있습니다.이러한 키 중 하나 또는 둘 다 필요합니다.키가 둘 다 없는 경우 startUpdatingLocation을 호출할 수 있지만 Location Manager가 실제로 시작되지 않습니다.또한 대리인에게 실패 메시지를 발송하지 않습니다(시작하지 않았기 때문에 실패할 수 없습니다).또한 키 중 하나 또는 둘 다 추가해도 명시적으로 인가를 요청하지 않아도 실패합니다.따라서 먼저 다음 키 중 하나 또는 모두를 Info.plist 파일에 추가해야 합니다.

  • NSLocationWhen In Use Usage 설명
  • NSLocationAlways Usage 설명

이 두 키 모두 문자열이 필요합니다.

로케이션 서비스가 필요한 이유를 설명합니다.iOS 7과 같이 "Location is required to find your where"와 같은 문자열을 입력할 수 있습니다.이 문자열은 InfoPlist.strings 파일에서 현지화할 수 있습니다.

여기에 이미지 설명 입력

Xcode 5로 컴파일할 수 있는 솔루션:

#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];

위치를 묻는 이전 코드는 iOS 8에서 작동하지 않습니다. 위치 인증에 대해 다음 방법을 사용할 수 있습니다.

- (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];
    }
}

iOS 8에서는 로케이션을 작동시키려면 다음 두 가지 작업을 추가로 수행해야 합니다.Info.plist에 키를 추가하고 Location Manager에게 시작을 요청하는 권한을 요청합니다.

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>

코드에 추가

if (IS_OS_8_OR_LATER)
{
    [locationmanager requestWhenInUseAuthorization];

    [locationmanager requestAlwaysAuthorization];
}

Swift 개발자의 일반적인 오류 중 하나는 다음과 같습니다.

''에 '하다'에 ''에 대한 값을 .NSLocationWhenInUseUsageDescription ★★★★★★★★★★★★★★★★★」NSLocationAlwaysUsageDescription.

그래도 승인을 요청하는 창이 뜨지 않으면 줄을 그었는지 확인합니다.var locationManager = CLLocationManager()의 View Controller »viewDidLoad, 전화, 전화를 걸어도.locationManager.requestWhenInUseAuthorization()이치노"viewDidLoad" "locationManager" "ViewDidLoad" "LocationManager" "ViewDidLoad" "LocationManager" "ViewDidLoad" "LocationManager" "ViewDid

입니다.var locationManager = CLLocationManager()클래스 메서드의 최상위에 있습니다.

★★의 앞[locationManager startUpdatingLocation];iOS8 로케이션서비스 요청은 다음과 같습니다.

if([locationManager respondsToSelector:@selector(requestAlwaysAuthorization)])
    [locationManager requestAlwaysAuthorization];

★★★를 Info.plist " " 를 합니다.NSLocationAlwaysUsageDescription값를 들어, 「」등)을 합니다.We do our best to preserve your battery life.)

앱이 열려 있는 동안에만 위치 서비스가 필요한 경우 다음을 대체합니다.

requestAlwaysAuthorizationrequestWhenInUseAuthorization...

NSLocationAlwaysUsageDescriptionNSLocationWhenInUseUsageDescription.

iOS8로 업그레이드된 앱을 작업하다가 위치정보가 작동하지 않게 되었습니다.[ Debug ]영역에서 다음과 같은 오류가 발생할 수 있습니다.

Trying to start MapKit location updates without prompting for location authorization. Must call -[CLLocationManager requestWhenInUseAuthorization] or -[CLLocationManager requestAlwaysAuthorization] first.

을 사용법 번째 추가는 " " " 입니다.NSLocationAlwaysUsageDescription"Cisco.plist"는 다음과 같이 입력합니다.

여기에 이미지 설명을 입력하십시오.

이 키의 값을 입력하지 않았습니다.아직 동작하고 있고, 사내 앱이기 때문에 신경 쓰지 않습니다.또, 이미 로케이션 서비스를 이용하고 싶다고 하는 타이틀이 있기 때문에, 불필요한 것은 하고 싶지 않았습니다.

다음으로 iOS 8의 조건을 작성했습니다.

if ([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
    [_locationManager requestAlwaysAuthorization];
}

후에, 「 」를 참조해 주세요.locationManager:didChangeAuthorizationStatus:'''콜:

- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:  (CLAuthorizationStatus)status
{
    [self gotoCurrenLocation];
}

그리고 이제 모든 것이 잘 작동한다.항상 그렇듯이 설명서를 참조하십시오.

하위 호환성을 갖춘 솔루션:

SEL requestSelector = NSSelectorFromString(@"requestWhenInUseAuthorization");
if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined &&
    [self.locationManager respondsToSelector:requestSelector]) {
    [self.locationManager performSelector:requestSelector withObject:NULL];
} else {
    [self.locationManager startUpdatingLocation];
}

NSLocation 설정Info.plist의 WhenInUseUsageDescription 키

Xcode 경고를 생성하지 않는 하위 호환성 솔루션:

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];
}

NSLocationWhenInUseUsageDescriptionInfo.plist

iOS 버전 11.0+의 경우: 셋업NSLocationAlwaysAndWhenInUseUsageDescriptionInfo.plist의 키와 .. 2번으로 하다

이것은 ios 8의 문제입니다.이것을 코드에 추가합니다.

if (IS_OS_8_OR_LATER)
{
    [locationmanager requestWhenInUseAuthorization];

    [locationmanager requestAlwaysAuthorization];
}

및 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>

iOS 8에서 사용자 위치에 액세스하려면 다음을 추가해야 합니다.

NSLocationAlwaysUsageDescription in the Info.plist 

사용자에게 현재 위치를 가져올 수 있는 권한을 요청합니다.

목표-C 절차 아래 지침을 따르십시오.

iOS-11의 경우 iOS 11의 경우 다음 답변을 참조하십시오. iOS 11 위치 액세스

두 개의 키를 목록에 추가하고 아래 그림과 같은 메시지를 제공해야 합니다.

 1. NSLocationAlwaysAndWhenInUseUsageDescription 
 2. NSLocationWhenInUseUsageDescription
 3. NSLocationAlwaysUsageDescription

여기에 이미지 설명 입력 iOS-10 이하의 경우:

NSLocationWhenInUseUsageDescription

여기에 이미지 설명 입력

locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyThreeKilometers;
if([locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]){
    [locationManager requestWhenInUseAuthorization];
}else{
    [locationManager startUpdatingLocation];
} 

위임 방식

#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];
}

신속한 절차

다음의 순서에 따릅니다.

iOS-11의 경우 iOS 11의 경우 다음 답변을 참조하십시오. iOS 11 위치 액세스

두 개의 키를 목록에 추가하고 아래 그림과 같은 메시지를 제공해야 합니다.

 1. NSLocationAlwaysAndWhenInUseUsageDescription 
 2. NSLocationWhenInUseUsageDescription
 3. NSLocationAlwaysUsageDescription

여기에 이미지 설명 입력 iOS-10 이하의 경우:

여기에 이미지 설명 입력

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()
    }
}

위임 방식

//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을 사용하는 사용자의 경우, Xamarin 5.5.3 Build 6 또는 XCode 6.1의 드롭다운에서 사용할 수 없었기 때문에 수동으로 info.plist에 키를 추가해야 했습니다.NSLocationUsageDescription 그 에 「이러다」라고 하는 「이러다만, 그 에 「이러다」라고 하는 사태가 발생했습니다.CLLocationManager을 사용하다

        // ** 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]);

}

여러 Info.plist 파일을 가진 모든 사용자를 위한 작은 도우미...

find . -name Info.plist | xargs -I {} /usr/libexec/PlistBuddy -c 'Add NSLocationWhenInUseUsageDescription string' {} 

필요한 태그를 현재 디렉토리(및 하위 폴더)의 모든 Info.plist 파일에 추가합니다.

또 다른 예는 다음과 같습니다.

find . -name Info.plist | xargs -I {} /usr/libexec/PlistBuddy -c 'Set NSLocationWhenInUseUsageDescription $YOURDESCRIPTION' {} 

그러면 모든 파일에 설명이 추가됩니다.

이러한 업데이트를 위해 코코아 키 정보를 항상 사용할 수 있습니다. 다음 링크입니다.

https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html #//apple_ref/doc/uid/TP40009251-SW26

즐거운 시간 되세요.

iOS9에서도 유사한 오류가 발생합니다(Xcode 7 및 Swift 2에서 작동).위치 인증을 요청하지 않고 MapKit 위치 업데이트를 시작하려고 합니다. CLLocationManager 요청을 호출해야 합니다.사용시인증] 또는 [CLLocation Manager 요청][ Always Authorization ]를 클릭합니다.튜토리얼을 팔로우하고 있었는데 튜터가 iOS8과 Swift 1.2를 사용하고 있었습니다.Xcode 7과 Swift 2에 몇 가지 변경이 있습니다.이 코드를 발견하면 문제없이 동작합니다(도움이 필요한 경우).

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)
    }
}

마지막으로 info.plist에 입력했습니다.정보 속성 목록: NSLocationInUseUsageDescription 값: 앱에 직원을 위한 위치 서버가 필요한 경우

iOS에서 사용자 위치에 액세스하기 위해.두 개의 키를 추가해야 합니다.

NSLocationWhen In Use Usage 설명

NSLocationAlways Usage 설명

Info.plist 파일로 변환합니다.

    <key>NSLocationWhenInUseUsageDescription</key>
    <string>Because I want to know where you are!</string>
    <key>NSLocationAlwaysUsageDescription</key>
    <string>Want to know where you are!</string>

아래 이미지를 참조하십시오.

Info.plist 이미지

  1. 추가 ★★NSLocationWhenInUseUsageDescription ★★★★★★★★★★★★★★★★★」NSLocationAlwaysUsageDescription 사용)하는 문자열 (GPS 사용)info.plist타の타

  2. 다음을 실행하여 권한 요청:

    [self init Location Manager: location Manager];

서 ★★★★★initLocationManager 말합니다

// asks for GPS authorization on iOS 8
-(void) initLocationManager:(CLLocationManager *) locationManager{

    locationManager = [[CLLocationManager alloc]init];

    if([locationManager respondsToSelector:@selector(requestAlwaysAuthorization)])
        [locationManager requestAlwaysAuthorization];
}

가 각 에 는, 해 주세요.info.plist각 타겟에 대해 앱은 사용자에게 묻지 않습니다.if 7 및 7과의 호환성을 합니다.respondsToSelector:7 및 method iOS 7의 하는 것만이 미래의 합니다.

저에게 있어서 문제는 그 수업이CLLocationManagerDelegate이 때문에 모든 위임 메서드가 호출되지 않았습니다.흔한 상황은 아니지만 누군가를 도울 수 있을 때를 대비해서 언급해야겠다고 생각했어요.

는 그 는 in in in in in in in in in in in in에 추가한다.InfoPlist.stringsiOS 8.4에서는 iPad mini 2 입니다.그것도 효과가 있어요.키를 세팅하지 않아요NSLocationWhenInUseUsageDescription, 「 」에서는, 「 」라고 Info.plist.


InfoPlist.strings:

"NSLocationWhenInUseUsageDescription" = "I need GPS information....";

실타래에 의하면as in iOS 7"InfoPlist.strings" 입니다. 테스트에서는,는, 할 수 .InfoPlist.strings.

따라서 가장 먼저 해야 할 일은 다음 중 하나의 > 키를 Info.plist 파일에 추가하는 것입니다.

  • NSLocationWhen In Use Usage 설명
  • NSLocationAlways Usage 설명

이 두 키 모두 위치 서비스가 필요한 이유를 설명하는 문자열을 사용합니다.iOS 7과 같이 "Location is required to find your where"와 같은 문자열을 입력할 수 있습니다. 문자열은 InfoPlist.strings 파일에서 현지화할 수 있습니다.


갱신:

의 방식이 좋다고 생각합니다.키 추가Info.plist합니다.InfoPlist.strings.

언급URL : https://stackoverflow.com/questions/24062509/location-services-not-working-in-ios-8

반응형