iOS 15 应用程序未在位置更改时处于终止状态启动

nil*_*nil 8 gps location appdelegate swift ios15

我在我的应用程序SS中添加了位置背景模式

但该应用程序仍然无法使用启动选项键启动

UIApplication.LaunchOptionsKey.location

这是我的应用程序委托代码,

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    addItem(name: "LaunchOptions: \(String(describing: launchOptions))")
    if let launchOptions = launchOptions {
        if launchOptions[UIApplication.LaunchOptionsKey.location] != nil {
            startLocationMonitoring()
        }
    }
    print("LaunchOptions: \(String(describing: launchOptions))")
    return true
}

func startLocationMonitoring() {
    locationManager?.delegate = nil
    locationManager = nil
    locationManager = CLLocationManager()
    locationManager?.delegate = self
    locationManager?.desiredAccuracy = kCLLocationAccuracyBestForNavigation
    locationManager?.distanceFilter = 1.0 // meters
    locationManager?.allowsBackgroundLocationUpdates = true
    locationManager?.activityType = .otherNavigation
    locationManager?.pausesLocationUpdatesAutomatically = false
    authStatusCheck()
    locationManager?.startUpdatingLocation()
}

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    print(locations)
    if let appDelegate = (UIApplication.shared.delegate as? AppDelegate) {
        for location in locations {
            appDelegate.addItem(newLocation: location)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

addItem 函数将位置更改或日志添加到核心数据

Luc*_*cho 1

现在您可以在场景委托上获得启动选项。这是一个简单的例子:

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {                
          if let response = connectionOptions.notificationResponse {
             //get your launch info from here
             let location = response.notification.request.content.userInfo[UIApplication.LaunchOptionsKey.location]
    ...
          }
        }
Run Code Online (Sandbox Code Playgroud)