iOS 17 中存取 Apple Calendar 的权限变更

iOS 17 中存取 Apple Calendar 的权限变更

最近我在更新我的个人专案,準备在 App Store 上架。这个专案最初是在 iOS 17 发布之前开发的。在 iOS 17 中,存取 Apple Calendar 的权限方式有了改变,所以我花了一些时间对程式码进行调整。这边记录下在不同 iOS 版本中存取行事曆权限的方法。

在 iOS 17 以前的存取方法

步骤概述

在 iOS 17 之前,要使用 Apple Calendar 需要遵循以下步骤:

Info.plist 设定:在 Info.plist 中新增取用权限键值。程式码实现:在程式码中 import EventKit 并调用存取权限的 instance method。

Info.plist 设定

在 Info.plist 新增取用权限键值,方法如下:

在文件左侧的档案目录中选择 Info.plist,然后新增 Privacy - Calendars Usage Description 这个键值。在 Value 中描述取用权限的原因,这将在取用权限 Alert 中显示给用户。

或者使用 source code 模式开启 Info.plist,并新增以下字段:

<key>NSCalendarsUsageDescription</key><string>这个 App 想要取用行事曆</string>

Sample Code

//  ViewController.swiftimport UIKitimport EventKitclass ViewController: UIViewController {    let eventStore = EKEventStore()    override func viewDidLoad() {        super.viewDidLoad()                eventStore.requestAccess(to: .event) { granted, error in            if let error = error {                print("Error requesting access: \(error.localizedDescription)")                return            }            if granted {                print("Access granted in earlier versions of iOS")            } else {                print("Access not granted in earlier versions of iOS")            }        }    }}

在 iOS 17 以后的存取方法

新的 Info.plist 设定

在 iOS 17 及以后的版本中,对 Info.plist 的设定有所调整。根据所需的存取权限类型,你可以使用下列两种设定之一:

完整取用(读写):使用 Privacy - Calendars Full Access Usage Description

或以 source code 形式添加:<key>NSCalendarsFullAccessUsageDescription</key>

仅建立行程(只写):使用 Privacy - Calendars Write Only Usage Description

或以 source code 形式添加:<key>NSCalendarsWriteOnlyAccessUsageDescription</key>

Sample Code

在 iOS 17 中,你需要使用新的 API 方法来请求存取权限:

完整取用:调用 requestFullAccessToEvents(completion:)仅建立行程:调用 requestWriteOnlyAccessToEvents(completion:)
//  ViewController.swiftimport UIKitimport EventKitclass ViewController: UIViewController {    let eventStore = EKEventStore()    override func viewDidLoad() {        super.viewDidLoad()                if #available(iOS 17.0, *) {            eventStore.requestFullAccessToEvents { granted, error in                if let error = error {                    print("Error requesting access: \(error.localizedDescription)")                    return                }                                if granted {                    print("Granted")                } else {                    print("Not granted")                }            }        } else {            // Fallback on earlier versions            eventStore.requestAccess(to: .event) { granted, error in                if let error = error {                    print("Error requesting access: \(error.localizedDescription)")                    return                }                                if granted {                    print("Access granted in earlier versions of iOS")                } else {                    print("Access not granted in earlier versions of iOS")                }            }        }           }}

参考资料:

NSCalendarsUsageDescription
NSCalendarsFullAccessUsageDescription
NSCalendarsWriteOnlyAccessUsage
requestAccess(to:completion:)
requestFullAccessToEvents(completion:)
requestWriteOnlyAccessToEvents(completion:)


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章