You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xcode编译PWABuilder生成iOS应用报UNAuthorizationStatus无ephemeral成员

报错原因

UNAuthorizationStatus的ephemeral成员是iOS 14.0才新增的API,你当前Xcode项目设置的最低系统部署版本(iOS Deployment Target)低于14.0时,对应低版本iOS SDK里没有这个枚举值的定义,编译器就会抛出找不到成员的错误。
PWABuilder自动生成的iOS工程默认会把最低部署版本设为iOS 12或13,没有做新API的版本适配,就会触发这个编译问题。

解决方法

根据你是否需要兼容iOS 14以下的系统,二选一即可:

  • 方案一:不需要兼容iOS14以下版本时,直接修改项目部署版本
    打开Xcode左侧文件树选中项目根节点,切到General选项卡,在Deployment Info分类下把iOS Deployment Target修改为14.0或更高版本,清空编译缓存后重新构建即可消除报错。
  • 方案二:需要兼容低版本系统时,添加API可用性标注
    不要直接删除ephemeral相关逻辑,否则iOS14+系统下临时通知权限、App Clip场景的权限判断会出错。给对应case加上iOS版本可用性标注即可,修改后的完整代码如下:
func handlePushPermission() {
    UNUserNotificationCenter.current().getNotificationSettings () { settings in
            switch settings.authorizationStatus {
            case .notDetermined:
                let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
                UNUserNotificationCenter.current().requestAuthorization(
                    options: authOptions,
                    completionHandler: { (success, error) in
                        if error == nil {
                            if success == true {
                                returnPermissionResult(isGranted: true)
                                DispatchQueue.main.async {
                                  UIApplication.shared.registerForRemoteNotifications()
                                }
                            }
                            else {
                                returnPermissionResult(isGranted: false)
                            }
                        }
                        else {
                            returnPermissionResult(isGranted: false)
                        }
                    }
                )
            case .denied:
                returnPermissionResult(isGranted: false)
            case .authorized, .provisional:
                returnPermissionResult(isGranted: true)
            @available(iOS 14.0, *)
            case .ephemeral:
                returnPermissionResult(isGranted: true)
            @unknown default:
                return;
            }
        }
}
func handlePushState() {
    UNUserNotificationCenter.current().getNotificationSettings () { settings in
        switch settings.authorizationStatus {
        case .notDetermined:
            returnPermissionState(state: "notDetermined")
        case .denied:
            returnPermissionState(state: "denied")
        case .authorized:
            returnPermissionState(state: "authorized")
        case .provisional:
            returnPermissionState(state: "provisional")
        @available(iOS 14.0, *)
        case .ephemeral:
            returnPermissionState(state: "ephemeral")
        @unknown default:
            returnPermissionState(state: "unknown")
            return;
        }
    }
}

补充说明:加了@available(iOS 14.0, *)标注后,编译器只会在iOS14及以上的SDK上下文中识别ephemeral这个case,低版本下会自动忽略该分支,不会再报编译错误,同时不影响高版本系统下的逻辑正确性。

内容的提问来源于stack exchange,提问作者Alvartetex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 13:03:12