Periodeeでは経過時間表示画面で TimelineViewというSwiftUIのViewをしようしている。これは指定した間隔で内包するViewを更新してくれる。経過時間表示では1分単位で更新を指定している。
struct TimeKeepingView: View {
@EnvironmentObject var myModel: SessionModel
@Binding var session: Session
var today:String
var testingCurrentTime:String = ""
var body: some View {
//TimelineView(.everyMinute) { context in
//TimelineView(EveryMinuteTimelineSchedule()) { context in
TimelineView(.periodic(from: appStartDate, by: 60.0)) { context in
GeometryReader { geometry in
let gw = geometry.size.width
let gh = geometry.size.height
ZStack {
let cx = gw / 2
let cy = gh / 2
session.SetCurrentTime_Period(withTimeCode: context.date)
TimelineView内では、引数のcontextに格納されている dateを使用する必要があるのだが、このcontext.dateがおかしくなる。
アプリの起動時や、セッション切り替えで経過時間画面が再表示されると、複数回 TimelineViewが更新されてくるが、とあるタイミングで1秒以下の間隔で context.dateの時刻が数分ずれていく。そして突然正しい時刻に戻る。
新機能で Hapticによる通知を組み込んだことで、上記の挙動が露見した。しかもシミュレータでは発生せず、Apple Watch上でないと発生しない。
TimelineViewの指定方法を変えてみたが、効果は無く継続して調査中。