为什么 EKEventStore().requestFullAccessToEvents() 适用于模拟器,但不适用于真实设备?

问题描述 投票:0回答:1

我正在构建一个 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

    }
ios swift swiftui calendar eventkit
1个回答
0
投票

我能够在我们的应用程序中解决同样的问题 - 对我们来说,原因是我们没有更新我们的

info.plist

我们需要为 iOS 17 中的新日历权限添加条目。根据您的具体情况,您需要添加其中一项/两项:

<key>NSCalendarsFullAccessUsageDescription</key>
<string>YOUR DESCRIPTION</string>
<key>NSCalendarsWriteOnlyAccessUsageDescription</key>
<string>YOUR DESCRIPTION</string>

请注意,您可能还需要保留旧的

NSCalendarsUsageDescription
条目,以便在旧版本的 iOS 上仍然可以使用。

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.