Open6

Unity上で設定したデータをiOSのウィジェットから読み込めるようにする

半年くらい前にやった気がするけど手順を全て忘れたのでメモしながらやっていく。

  • ウィジェットはSwiftで記述する予定
  • Swiftのデータ読み書きにはUserDefaultsというインターフェース[1]を使用するらしい
  • Unity側でUserDefaultsの読み込み元と同じ場所に情報が書き込めれば良さそう

というわけでやっていく。

脚注
  1. https://qiita.com/uhooi/items/429cac9b798b9c0937ae ↩︎

Unityからの情報書き込みはC#→Objective-C→Swift のネイティブプラグインを作って

UserDefaults.standard.set({}, forKey: {キー})

を呼んで上げる必要があるかなーと思った。
けど、ふとUserDefaultsの保存先はUnityのPlayerPrefsの場所と一緒なんじゃないかと思い調べてみる。

PlayerPrefsの保存先[1]

~/Library/Preferences/com.ExampleCompanyName.ExampleProductName.plist.

UserDefaultsの保存先[2]

/AppData/Library/Preferences/<bundle-identifier>.plist

なんか一緒そうな雰囲気

脚注
  1. https://docs.unity3d.com/ScriptReference/PlayerPrefs.html ↩︎

  2. https://crystalminds.medium.com/where-are-the-standard-userdefaults-stored-d02bf74854ff ↩︎

テストプロジェクトを作ってたらxcode上でwidgetのプレビューが表示されない問題に直面。
Unityが出力したプロジェクトじゃなくて単体プロジェクトを作成したらプレビューは表示される。
プロジェクトのビルドの設定が違う?と思い調べてみる。

https://forum.unity.com/threads/xcode-legacy-build-system-is-deprecated.999532/
それっぽいのがあった。
Unityだとなぜか出力されたxcodeプロジェクトがlegacyを使ってるみたい。

Xcodeプロジェクト上で
File → ProjectSetting → BuildSystem
を「NewBuildSystem」に変更

Targets -> Unity iPhone -> Framework でIntentFrameworkを追加

iOS 14 does not support 32-bit programs

architectureをarm64のみに変更

ログインするとコメントできます