【Swift】Dynamic island をとりあえず使ってみる
SwiftKotlin愛好会アドベントカレンダー14日目の記事です。
概要
ライブアクティビティを表示するための仕組みとしてiPhone14 Proから新しく追加されたDynamic islandを使ってみる記事です。
いくつかチュートリアルがあったのですが、UIの作成などが多く、とりあえず動かすという観点からは複雑すぎるものが多かったので、最小限のコードで表示させてみるところまでの手順を紹介します。
ソースコードはこちら
環境
MacOS Version 13.0.1(22A400)
Xcode Version 14.1 (14B47b)
手順
プロジェクトの作成
PlatformはiOS
Applicationはappを選択
プロジェクト名はここでは、LiveActivitiesとする
Targetの追加
Target名はここでは、OrderStatusとする
エクステンションのschemeを有効にするか聞かれるので、Cancelと答える
Target Membershipの追加
OrderStatusLiveActivity.swiftをメインのプロジェクトから参照できるようにTargetMembershipのLiveActivitiesにチェックをつける
info.plistにNSSupportsLiveActivitesを追加し値をYesにする
画面にLiveActivityを呼び出すボタンを追加
ContentView.swiftを以下のように変更
import SwiftUI
import ActivityKit
struct ContentView: View {
var body: some View {
VStack {
Button("Add Live Activity") {
addLiveActivity()
}
}
.padding()
}
func addLiveActivity(){
let orderAttributes = OrderStatusAttributes(name: "test")
let initialContentState = OrderStatusAttributes.ContentState(value: 1)
do{
let activity = try Activity<OrderStatusAttributes>.request(attributes: orderAttributes, contentState: initialContentState)
print("Activity Added Successfully. id: \(activity.id)")
}catch{
print(error.localizedDescription)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Targetを作った時にデフォルトのAttributesとContentStateのコードが書かれているので、それに従ってActivityを設定します。
Activity<T>.request()
の部分で実際にLiveActivityを追加しています。
実行
アプリの画面
ホーム画面 デフォルトのViewとしてLeadingにはLがTrailingにはTが表示されている
Dynamic islandを長押しすると、ExpandedのViewが表示される
ロック画面
トラブルシューティング
SendProcessControlEvent:toPid: encountered an error: Error
ビルドスキームがエクステンションになっていないか確認
The operation couldn’t be completed. (com.apple.ActivityKit.ActivityInput error 1.)
info.plistにNSSupportsLiveActivitiesを設定
Cannot find 'OrderStatusAttributes' in scope
OrderStatusLiveActivity.swiftのTarget MembershipにLiveActivitiesがチェックされているか確認
Discussion