В macOS я загружаю напоминания, используя EventKit.Все работает, но при первой загрузке напоминаний во время выполнения это занимает больше времени, чем после этого.Это означает, что пользователь должен ждать после запуска приложения, чтобы увидеть какие-либо напоминания, что не так приятно.Нативное приложение Reminders работает быстрее.
Вот некоторый код:
import Cocoa
import EventKit
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet weak var window: NSWindow!
let semaphore = DispatchSemaphore(value: 0)
func applicationDidFinishLaunching(_ aNotification: Notification) {
testReminders()
}
func testReminders() {
let eventStore = EKEventStore()
let incompletePredicate = eventStore.predicateForIncompleteReminders(withDueDateStarting: Date(), ending: Date(), calendars: nil)
// Get the access permission first
eventStore.requestAccess(to: .reminder, completion: { (granted, error) in
// Now test
self.semaphore.signal()
for _ in 0..<10 {
self.startMeasuring(eventStore, predicate: incompletePredicate)
}
})
}
func startMeasuring(_ eventStore: EKEventStore, predicate: NSPredicate) {
semaphore.wait()
let start = DispatchTime.now()
// Get the reminders
eventStore.fetchReminders(matching: predicate, completion: { (incompletedReminders: [EKReminder]?) -> Void in
let end = DispatchTime.now()
// Print out the elapsed time
let nanoTime = end.uptimeNanoseconds - start.uptimeNanoseconds
let timeInterval = Double(nanoTime) / 1_000_000_000
print("elapsed: \(timeInterval)")
self.semaphore.signal()
})
}
func applicationWillTerminate(_ aNotification: Notification) {
// Insert code here to tear down your application
}
}
Если вы работаете над кодом, убедитесь, что вы отметили «Календарь» в «App Sandbox» Возможности.
Вот выходные данные в секундах:
прошло: 9.322825215
прошло: 0.045737709
прошло: 0.036359244
прошло: 0.03218976
1014 * 1015998467* прошло: 0,034777283
прошло: 0,032737581
прошло: 0,04387221
прошло: 0,03941968
прошло: 0,044008471
9 секунд слишком долго.Как я могу это исправить?