首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

iOS 9 模擬器定位失效排查:權限設定與代理方法未觸發

     編輯:程式設計綜合問答

常見原因清單

  1. Info.plist 缺少隱私權限鍵(iOS 8+ 強制):
    • NSLocationWhenInUseUsageDescription(前台定位)
    • NSLocationAlwaysAndWhenInUseUsageDescription(前後台定位)
  2. CLLocationManagerDelegate 未正確設定:
    self.locationManager.delegate = self;
    [self.locationManager startUpdatingLocation];
  3. 模擬器未模擬位置:Xcode 模擬器頂部選單 Debug → Location → Custom Location 或選擇預設城市(如 "Apple HQ")。
  4. iOS 9 新增 App Transport Security (ATS):若定位服務涉及 HTTP 請求,需在 Info.plist 設定 NSAppTransportSecurity 例外。

最小可行程式碼

@import CoreLocation;

@interface ViewController () <CLLocationManagerDelegate>
@property (strong) CLLocationManager *locMgr;
@end

- (void)viewDidLoad {
    [super viewDidLoad];
    _locMgr = [[CLLocationManager alloc] init];
    _locMgr.delegate = self;
    _locMgr.desiredAccuracy = kCLLocationAccuracyBest;
    [_locMgr requestWhenInUseAuthorization]; // 觸發權限彈窗
    [_locMgr startUpdatingLocation];
}

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {
    CLLocation *loc = locations.lastObject;
    NSLog(@"Lat: %f, Lon: %f", loc.coordinate.latitude, loc.coordinate.longitude);
}

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
    NSLog(@"定位失敗: %@", error.localizedDescription);
}

排查步驟

  1. 確認 Console 有無「This app has attempted to access privacy-sensitive data without a usage description」警告 → 補 Info.plist。
  2. 真機測試:模擬器 GPS 精度極低,真機為準。
  3. 檢查 didFailWithError 錯誤碼:kCLErrorDenied(用戶拒絕授權)、kCLErrorLocationUnknown(暫時無法定位)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved