В соответствии с рекомендациями Apple (если я правильно понимаю), я сначала запрашиваю WhenInUse
авторизацию, чтобы включить базовую поддержку местоположения моего приложения (я делаю это в AppDelegate
) и увеличитьразрешения на Always
только в ViewController
, который фактически использует эту функцию.
// AppDelegate.swift
class AppDelegate: UIResponder, UIApplicationDelegate, CLLocationManagerDelegate {
var m_location_manager = CLLocationManager()
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
m_location_manager.delegate = self
if CLLocationManager.authorizationStatus() != .authorizedWhenInUse {
m_location_manager.requestWhenInUseAuthorization()
}
}
// MyViewController
class MyViewController: UIViewController, CLLocationManagerDelegate, GMSMapViewDelegate {
var m_location_manager = CLLocationManager()
override func viewDidLoad() {
super.viewDidLoad()
m_location_manager.delegate = self
if CLLocationManager.authorizationStatus() != .authorizedAlways {
m_location_manager.requestAlwaysAuthorization()
}
m_location_manager.desiredAccuracy = kCLLocationAccuracyBest
m_location_manager.startUpdatingLocation()
}
Мой info.plist выглядит так:
КогдаПри запуске приложения меня действительно спрашивают, хочу ли я авторизовать сервисы WhenInUse
location, и все в порядке.Однако, когда в MyView
, и, хотя все кажется, что все в порядке (без сбоев, кажется, что все работает), я получаю в консоли две подобные ошибки:
2018-10-11 15:17:26.174617+0300 MyApp[1174:245307] [Common] _BSMachError: port cd03; (os/kern) invalid capability (0x14) "Unable to insert COPY_SEND"
Обратите внимание, что упомянутый портне всегда одно и то же (я видел d303, 163603 и другие).