我正在构建一个 iOS 应用程序,它可以在 iOS 日历中以编程方式创建事件。 我的代码在任何 iOS 模拟器中运行时都可以完美运行。但当安装在任何物理设备中时,它根本就不会。我做错了什么?
当调用 requestAccess() 函数时,无论是在 onAppear 方法上,还是在按钮内部,它都不起作用。这似乎是一个身份验证问题,但没有理由它在模拟器中工作而不是在物理设备中工作。
有人遇到过同样的问题吗? 有什么想法吗?或者推荐?
import Foundation
import EventKit
class EventModel {
let eventStore = EKEventStore()
let todayDate : Date = Date()
func requestAccess() {
let status = EKEventStore.authorizationStatus(for: .event)
if status == .authorized {
print("Access is already granted.")
} else {
print(status.rawValue)
eventStore.requestFullAccessToEvents { success, error in
if success && error == nil {
print("Access has been granted.")
} else {
print(error)
print("Access request failed with error: \(error?.localizedDescription ?? "Unknown error")")
}
}
}
}
//more code and other stuff
}
我能够在我们的应用程序中解决同样的问题 - 对我们来说,原因是我们没有更新我们的
info.plist
。
我们需要为 iOS 17 中的新日历权限添加条目。根据您的具体情况,您需要添加其中一项/两项:
<key>NSCalendarsFullAccessUsageDescription</key>
<string>YOUR DESCRIPTION</string>
<key>NSCalendarsWriteOnlyAccessUsageDescription</key>
<string>YOUR DESCRIPTION</string>
请注意,您可能还需要保留旧的
NSCalendarsUsageDescription
条目,以便在旧版本的 iOS 上仍然可以使用。
希望这有帮助!