はじめに
Chat GPTにコードの相談をしていると時々非推奨のコードを返してくることがある。今回はLive Activityを実装する過程で非推奨コードのwarningと出会った。Live Activityのrequestに関する非推奨コードへどのように対応したかを備忘録も兼ねて書く。
遭遇したwarningは
'request(attributes:contentState:pushType:)' was deprecated in iOS 16.2: Use request(attributes:content:pushType:) instead
要はrequestの中のcontentStateの代わりにcontentを使えということらしい。
非推奨になった理由(Chat GPT曰く)
AppleはActivityKitのActivity.request
APIを更新し、これまでのcontentState
の代わりに、より精細な情報を一元的に管理できるActivityContent
を使う形式に変更しました。これは、ユーザーに常に最新の情報を提供し、通知の管理を柔軟かつ拡張性のあるものにするための改良です。ActivityContent
を使うことで、動的なコンテンツの有効期限を含めた情報を一括して設定できるようになり、アクティビティの管理がより明確になりました。
変更点について
今までのコード
非推奨となったコードの例:
let initialContentState = StatusAttributes.ContentState()
activity = try Activity<StatusAttributes>.request(
attributes: attributes,
contentState: initialContentState,
pushType: nil
)
contentState
パラメータを使用して、アクティビティの初期状態を設定していた。
新しいコード
変更後のコード例:
let content = ActivityContent(
state: initialContentState,
staleDate: nil
)
activity = try Activity<StatusAttributes>.request(
attributes: attributes,
content: content,
pushType: nil
)
このように、contentState
の代わりにActivityContent
クラスを使うことで、状態(state
)と有効期限(staleDate
)を一つにまとめて扱う形式に変更となった。
今までの型とiOS16.2以降の型
-
以前:
contentState
には、ActivityContentState
型のデータが渡されていた。 -
現在: 新たに
ActivityContent
型を使用し、その中に状態(state
)や有効期限(staleDate
)を含める形式になった。
どのように変更すれば良いか
-
ActivityContent
の作成
新しいActivityContent
オブジェクトを作成し、その中に初期状態(state
)と任意の有効期限(staleDate
)を設定する。let content = ActivityContent( state: initialContentState, staleDate: nil )
-
request
メソッドでcontent
を渡す
request
メソッドのcontent
パラメータに新しく作成したActivityContent
オブジェクトを渡す。activity = try Activity<StatusAttributes>.request( attributes: attributes, content: content, pushType: nil )
まとめ
Activity.request
メソッドの変更により、アクティビティの状態と有効期限を一つのActivityContent
で包括的に扱うことが求められるようになった。これにより、情報の管理がより明確で柔軟になり、ユーザーに常に最新の状態を届ける仕組みが強化されている。この変更に合わせてコードを修正することで、最新のAPIに対応し、将来の拡張にも備えることができる。
参考:
非推奨コードのドキュメント - request(attributes:contentState:pushType:)
推奨コードのドキュメント - request(attributes:content:pushType:)