Share
Embed
Transcript
33 slides
-
(1/8) NSAlarmKitUsageDescriptionͰڐՄऔΔ • ͍ͭͷΑ͏ʹΞϨΛιϨ͢ΕOK • Info.plistͷهࡌ • NSAlarmKitUsageDescription • ϦΫΤετ
• try await AlarmManager.shared.requestAuthorization() https://developer.apple.com/documentation/BundleResources/Information-Property-List/NSAlarmKitUsageDescription https://developer.apple.com/documentation/alarmkit/alarmmanager/requestauthorization() -
(2/8) ՔಇதͷΞϥʔϜͷϦετΛ࡞Δʢਪʣ • ҰཡͱετοϓϘλϯΛઌʹ࡞ΔɻΞϓϦΛΩϧͯ͠ফ͑ͯ͘Εͳ͍͔Β… • ͑ͦ͏ͳͷ • AlarmManager.shared.alarms • AlarmManager.shared.alarmUpdates
• AlarmManager.shared.stop(id:) https://developer.apple.com/documentation/alarmkit/alarmmanager/alarms https://developer.apple.com/documentation/alarmkit/alarmmanager/alarmupdates-swift.property https://developer.apple.com/documentation/alarmkit/alarmmanager/stop(id:) : Array : AsyncSequence -
(3/8) ΞϥʔϜىಈͷͨΊͷઃఆΛΈཱͯΔ • ΞϥʔϜ = ܾ·ͬͨεέδϡʔϧͰ௨ͯ͘͠ΕΔͷ • ࣝผ UUID •
ঢ়ଶ Alarm.State • .countdown / .scheduled • .paused • .alerting https://developer.apple.com/documentation/alarmkit/alarm/id-swift.property https://developer.apple.com/documentation/alarmkit/alarm/state-swift.enum -
(3/8) ΞϥʔϜىಈͷͨΊͷઃఆΛΈཱͯΔ • ΞϥʔϜ͝ͱͷใͷೖΕΛ࡞Δʢඞਢʣ • ۭͰ͍͍͔Β༻ҙ͠ɺ protocol AlarmMetadata ʹ४ڌͤ͞Δ •
WWDCಈըͷΩονϯλΠϚʔͰ frying / grilling ΛೖΕ͍ͯͨ ༲͛ͯΔͷ͔ম͍ͯΔͷ͔ https://developer.apple.com/documentation/alarmkit/alarmmetadata -
ίϯύΠϧ͕௨Βͳ͍ΜͰ͚͢ͲΥʂʁ • ͔ͯ͠͠ɿSE-0466 Control default actor isolation inference nonisolated struct
TeaBrewData: AlarmMetadata { } https://github.com/swiftlang/swift-evolution/blob/main/proposals/0466-control-default-actor-isolation.md https://developer.apple.com/videos/play/wwdc2025/245/ https://developer.apple.com/videos/play/wwdc2025/268/ https://developer.apple.com/videos/play/wwdc2025/270/ ͘͠ Λมߋ -
(3/8) ΞϥʔϜىಈͷͨΊͷઃఆΛΈཱͯΔ let alert = AlarmPresentation.Alert( title: , stopButton: ,
secondaryButton: , secondaryButtonBehavior: ) let alarmAttributes = AlarmAttributes( presentation: AlarmPresentation(alert: alert), metadata: TeaBrewData( ), tintColor: ) λΠτϧ ετοϓϘλϯͷઃఆ 2ͭͷϘλϯͷઃఆ .countdownʹ͢ΔͱϦϐʔτϘλϯʹͳΔ 2ͭͷϘλϯͷഎܠ৭͜ΕʹͳΔ ͖ͳͷΛೖΕΑ͏ʂ https://developer.apple.com/documentation/alarmkit/alarmpresentation/alert-swift.struct https://developer.apple.com/documentation/alarmkit/alarmbutton https://developer.apple.com/documentation/alarmkit/alarmpresentation/alert-swift.struct/secondarybuttonbehavior-swift.enum -
(3/8) ΞϥʔϜىಈͷͨΊͷઃఆΛΈཱͯΔ let countdownDuration = Alarm.CountdownDuration( preAlert: , postAlert: ...,
) let configuration = AlarmManager.AlarmConfiguration( countdownDuration: countdownDuration, attributes: attributes ) try await AlarmManager.shared.schedule( id: UUID(), configuration: configuration ) Ξϥʔτ͕໐Δ·Ͱͷඵ https://developer.apple.com/documentation/alarmkit/alarm/countdownduration-swift.struct https://developer.apple.com/documentation/alarmkit/alarmmanager/alarmcon fi guration https://developer.apple.com/documentation/alarmkit/alarmmanager/schedule(id:con fi guration:) Ξϥʔτ͕໐Δ·Ͱͷ࣌ؒʢεψʔζ࣌ʣ -
(4/8) Live ActivityΛཱͯΔ • ҰൠతͳExtensionActivityKitAppIntentsͷʹͳΔͷͰলུ • ͍ͭͱҧ͏ϙΠϯτ • attributesType
AlarmAttributes< >.self • AlarmKit͕ҰॹʹࣗಈͰactivityϦΫΤετͯ͘͠ΕΔ • खಈͰͷϦΫΤετෆཁɺNSSupportsLiveActivitiesෆཁ • զʑUIͱλοϓ࣌ͷॲཧ͚࣮ͩ͢ΕOK AlarmMetadataʹ४ڌͤͨ͞ΞϨ -
(5/8) ΞϥʔϜͷΓ࣌ؒͷܭࢉ • Live Activity༻ʹܭࢉ&ද͍ࣔͨ͠߹ • AlarmPresentationState.Mode ͔ΒඞཁͳใΛऔΕΔ • timerInterval:countsDown:
Λड͚औͬͯ͘ΕΔUIΛ͏ͱָ https://developer.apple.com/documentation/alarmkit/alarmpresentationstate/mode-swift.enum https://developer.apple.com/documentation/swiftui/progressview/init(timerinterval:countsdown:) https://developer.apple.com/documentation/swiftui/text/init(timerinterval:pausetime:countsdown:showshours:) ActivityConfiguration( for: AlarmAttributes< >.self ) { context in switch context.state.mode { case let .countdown(countdownMode): AlarmMetadataʹ४ڌͤͨ͞ΞϨ ↑ ͜Εʂ -
(5/8) ΞϥʔϜͷΓ࣌ؒͷܭࢉ • Χϯτμϯத startDate previouslyElapsedDuration Date.now totalCountdownDuration Ծͷ Χϯτμϯ
։࢝࣌ࠁ Ξϥʔτ ൃՐ࣌ࠁ ʢ༧ఆʣ ͜͜ͷClosedRange<Date>Λ͢ ࣮ࡍʹΧϯτμϯͯ͠Δظؒ ࣌ࠁ -
(5/8) ΞϥʔϜͷΓ࣌ؒͷܭࢉ • ϙʔζத • Ҋ1: ProgressView(value:)Λ͏ • Ҋ2: Durationͷformatted()Ͱ͍͍ײ͡ͷStringΛ࡞ͬͯΒ͏
• Ҋ3: Ҿ͖ଓ͖Text(timerInterval:pauseTime:...)Λ͏ • pauseTimeʹదͳDateΛೖΕ͓ͯ͘ͱࢭ·Γ·͢ -
(5/8) ΞϥʔϜͷΓ࣌ؒͷܭࢉ • Text(timerInterval:pauseTime:...)Ͱϙʔζ͢Δ߹ previouslyElapsedDuration totalCountdownDuration Ծͷ Χϯτμϯ ։࢝࣌ࠁ Ծͷ
Χϯτμϯ ऴྃ࣌ࠁ ԾͷΧϯτμϯ։࢝࣌ࠁΛT = now - previouslyElapsedDurationͱͨ͠ͱ͖ timerInterval: T … T + totalCountdownDuration, pauseTime: T + totalCountdownDuration - previouslyElapsedDuration Λ༩͓͚͑ͯΧϯτμϯࢭ·Δɻ ΊΜͲ͚ΕTΛUNIXΤϙοΫͱ͔ͷେੲͰ༻͢Εେৎ͍͚Δ͍͚Δʢࡶʣ ࣌ࠁ 👆Date.now͕͜͜ΑΓະདྷΛࢦ͢ͱΧϯτμϯఀࢭ͢ΔʢΑ͏ʹ͍ͨ͠ʣ 👆ϙʔζ࣌ʹText͕දࣔ͢Δ࣌ؒɺͭ·ΓΓ࣌ؒΛ͢