環境
Unity 2020.3
Xcode 13.4および14 beta6
UnityからXcodeに書き出したプロジェクトにWidgetを載せる方法です。この先に進む前にUnityからSwiftを呼び出せるようにしておいてください。[Unity Swift 連携]などででてくるはずです。あと対象のプロジェクトがWidget無しでビルドに成功することを確認しておいてください。
Xcodeのメニュー、File > New > Target...からスクロールで下の方にあるWidget Extensionを選択、追加
ProjectがUnity-iPhoneになっているのを確認
左カラムのUnity-iPhoneを選択してTARGETSのwidgetを選択して対象iosのバージョンをUnity-iPhoneと揃える
以下の図のwidgetのArchitecturesをStandardArchitectureに変更
これでビルドしてみて正常にビルドされることを確認。
新規にwidgetフォルダ内にSwiftPlugin.mm SwiftPlugin.swiftとwidget.swiftの両方からアクセスできるAppDataStore.swiftを作る
元アプリからWidgetへの情報の送りかたは C# > SwiftPlugin.mm(Objective-c) > SwiftPlugin.swift > NSUserDefault > AppDateStore.swiftからUserDefault読み出し、という感じ。最初CoreDataでやろうとしたけどどうしてもエラーが取れなかった。あと元アプリとWidgetは完全に別扱いなのでUserDefault使うときはAppGroup設定しないと同じとこに読み書きできません。
widget関連のファイルとSwiftPluginの右カラムで設定するTarget Menbershipの設定は非常に厳密なので必ず以下のように設定。一個でもかけ違うとハマるので注意。ここで3日ハマってます。
これでSwiftPlugin.mm -> Swiftplugin.swiftからAppDataStore.swiftの関数を呼び出すことができるようになる。AppDataStore.swiftを通してUnity-iPhone、UnityFramework、widgetExtentionがやりとりするイメージ(だと思う)。