iOS Swift4 未请求应用权限

iOS Swift4 Didn't Ask for Permission on App

我需要在我的应用程序中访问 CMAltimeter。 所以我当然需要征求许可。 我添加了 Privacy - Location When In Use Usage Description,当然还有 Privacy - Motion Usage Description,其值在 info.plist 中,但应用程序从不请求许可,授权状态始终未确定

(设备 -> iPhone XR iOS12)和最新的 Xcode。 我的登录 Xcode 只是使用我的 Apple ID 的个人团队,因为我们只在大学需要这个。 (直到今天我还没有购买开发者许可证) App 和 CoreMotion 运行。 (CMDeviceMotion 不需要权限)

func myDeviceMotionQFE(){
    if CMAltimeter.isRelativeAltitudeAvailable() {
        switch CMAltimeter.authorizationStatus() {
        case .notDetermined:
            print("Altimeter -> NotDetermined")
            break
        case .denied:
            print("Altimeter -> Denied")
            break
        case .restricted:
            print("Altimeter -> Restricted")
            break
        case .authorized:
            print("Altimeter -> Authorized")
}

欢迎光临!您需要做两件事才能获得测高数据的许可。首先是您已有的 plist 描述。第二个是调用CMAltimeter.authorizationStatus()。这将使用您在 plist 中的字符串请求用户的许可。

您可以获得 CMAltimeter CMAuthorizationStatus 中的四种结果之一:notDetermined、restricted、denied 或 authorized。如果你得到授权,你就可以走了。如果您被拒绝,则表示用户未授予他们许可。受限是这个位置数据有一些系统范围的限制(可能来自 MDM)。

在您的 Xcode 文档中搜索 CMAltimeter、authorizationStatus 和 CMAuthorizationStatus。

当您收到 "authorized" 响应时,您可以使用处理程序调用 startRelativeAltitudeUdpates,您的应用程序将在数据可用时获取更新。

我最初的问题是 startRelativeAltitudeUpdates(to:withHandler) 没有工作,并且被完全相同的问题所困扰: CMAltimeter.authorizationStatus() 总是 .notDetermined

然而结果是 CMAltimeter 实例超出范围并被自动 ARC'ed 并且处理程序不再被调用。

总结:IOS12中CMAltimeter没有requestAuthorization(),都不需要