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

iOS 15 app not launching in killed state with location change

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

但是,该应用仍未使用启动选项键启动

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

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

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

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