はじめに
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.requestAPIを更新し、これまでの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:)