Skip to main content

カレンダーのアクセスなければダイアログ表示

こんな感じか

swift
  .sheet(isPresented: $appData.dispRequestAccessDialog) {
appData.updateRequestStatus() // onDismiss
} content: {
VStack {
Text("Allow access to calendar")
Text("description ...")

if appData.authStatus == .denied {
Link("Open App Settings", destination: URL(string: UIApplication.openSettingsURLString)!)
} else {
Button("Request Access") {
requestAccess()
}
}
}
}
.onAppear {
requestAccess()
}
.onChange(of: scenePhase) { _, newPhase in
if newPhase == .active {
appData.resetValues()
}
}

func requestAccess() {
EventKitUtil.requestAccess(to: .event) { (granted: Bool, error: Error?) in
appData.updateRequestStatus()
if let error = error {
print(error)
}
}
}
swift
class ApplicationData: ObservableObject {
var authStatus: EKAuthorizationStatus = .notDetermined
var dispRequestAccessDialog: Bool = false
...

func updateRequestStatus() {
authStatus = EventKitUtil.getAuthorizationStatus(for: .event).status
dispRequestAccessDialog = authStatus != .fullAccess
}
}