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

适配iPad的iOS应用在M1 Mac上无法触发追踪授权,如何正确请求权限?

解决「专为iPad设计」的iOS App在M1 Mac上无法请求追踪权限的问题

核心限制说明

苹果官方明确:通过「Mac(专为iPad设计)」部署的iOS移植App,无法调用ATTrackingManager.requestTrackingAuthorization弹出授权对话框,且调用trackingAuthorizationStatus始终返回.notDetermined。这是因为这类App的追踪权限完全由用户在系统设置中手动控制,App没有主动发起请求的权限。

可行解决方案

1. 调整App权限请求逻辑

针对iOS App运行在Mac上的场景,修改现有代码:

  • 先判断当前运行环境是否为Mac平台
  • 若为Mac平台,跳过requestTrackingAuthorization调用,改为引导用户手动开启权限

修改后的示例代码:

if #available(iOS 14, *) {
    // 判断是否是iOS App运行在Mac上
    if ProcessInfo.processInfo.isiOSAppOnMac {
        // 引导用户前往系统设置开启追踪权限
        let alert = UIAlertController(title: "需要追踪权限", message: "请前往系统设置 > 隐私与安全性 > 追踪,开启允许本App追踪的权限", preferredStyle: .alert)
        alert.addAction(UIAlertAction(title: "前往设置", style: .default) { _ in
            guard let settingsUrl = URL(string: UIApplication.openSettingsURLString) else { return }
            UIApplication.shared.open(settingsUrl)
        })
        alert.addAction(UIAlertAction(title: "取消", style: .cancel))
        // 注意:需在主线程弹出alert
        DispatchQueue.main.async {
            self?.present(alert, animated: true)
        }
    } else {
        // 非Mac平台,正常请求权限
        ATTrackingManager.requestTrackingAuthorization { [weak self] status in
            switch status {
            case .authorized:
                DispatchQueue.main.async {
                    self?.didTrackingAuthorized?()
                }
            case .denied:
                print("FB - Denied")
            case .notDetermined:
                self?.setup()
                print("FB - Not Determined")
            case .restricted:
                print("FB - Restricted")
            @unknown default:
                print("FB - Unknown")
            }
        }
    }
}

2. 转为Mac Catalyst App(可选,若需主动弹窗请求)

如果你的业务需要主动弹出追踪授权对话框,可将App从「专为iPad设计」转为Mac Catalyst App:

  • 在Xcode的项目设置中,将部署目标改为「Mac Catalyst」
  • 确保Info.plist中添加NSUserTrackingUsageDescription键,描述追踪用途
  • 此时调用ATTrackingManager.requestTrackingAuthorization会在macOS上正常弹出授权对话框,和iOS平台逻辑一致

注意事项

  • 无论哪种方案,都必须在Info.plist中配置NSUserTrackingUsageDescription,否则即使在支持的平台也会请求失败
  • 引导用户前往设置时,需明确告知操作路径,避免用户找不到对应的设置项

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:30:43