2014年9月21日

iOS8 下定位 (CLLocationManager) 的改變

今天 iOS8 下測試下一班高鐵v1.8.1,發現定位的寫法也不一樣了.... >"< 舊的 CLLocationManager 寫法,在新安裝的 App 會出現定位不會被詢問的情形。


0921_002 


如上圖所示,原本 Xcode5.1.1 的定位,若沒有變更程式碼,用 Xcode6 去編繹,安裝後的 App 會發現在「隱私權」>「定位服務」下的應用程式呈現沒有設定(如圖 1.),新裝的 App 也不會因為 CLLocationManager startUpdatingLocation 詢問定位的權限了


在 iOS8 下,它改由 requestWhenInUseAuthorization 來詢問權限



if (nil == locationManager) 
{
locationManager = [[CLLocationManager alloc] init];
}

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
[locationManager requestWhenInUseAuthorization];

另外,要在 info.plist 設定詢問權限時的字串 NSLocationWhenInUseUsageDescription


0921_001


這樣在詢問的對話框就會出現上面設定的字串了


0921_003


上面定位有問題的情形倒是在以下情形是不會發生的




  1. 原本 iOS7 就安裝的App,升級到  iOS8,因為原本定位設定儲存了,不會有問題

  2. 在 iOS8 下,安裝 Xcode5.1.1 編繹出來的 App



Orignal From: iOS8 下定位 (CLLocationManager) 的改變