Unity の iOS ビルド時に Settings.bundle を組み込む
Unity で iOS アプリを作るとき、iOS の設定に設定画面を追加することができる。 こういうの。
アプリ上で設定画面を作ってもいいが、簡単なテスト用アプリや、広く公開しないアプリなら、こっちで設定しまったほうが、バグも出ないし楽である。
iOS の設定画面を追加するには、Settings.bundle というファイルを Xcode のプロジェクトに組み込む必要がある。これは、Xcode のメニューから「File > New > File」を開き、「Settings.bundle」を選択することで作成できる。
設定した項目は、plist の Identifier を使って、Unity から PlayerPrefs
で引くことができる。
var userId = PlayerPrefs.GetString("userId");
ここで1つ注意なのが、PlayerPrefs
には PlayerPrefs.GetInt
や PlayerPrefs.GetFloat
があるが、なぜか機能せず、数値などを入力させたい場合は、自力でパースする必要があることだ。
int.TryParse(PlayerPrefs.GetString("userId"), out userId);
Settings.bundle は Xcode のメニューからも作成できるが、Unity のビルドプロセスに組み込むこともできる。
これは事前に Settings.bundle を用意しておいて、OnPostprocessBuild
で呼び出すことで組み込むことができる。
public class XcodeProjectUpdater { [PostProcessBuild] static void OnPostprocessBuild(BuildTarget buildTarget, string path) { if (buildTarget == BuildTarget.iOS) { AddSettingsBundle(buildTarget, path); } } static void AddSettingsBundle(BuildTarget buildTarget, string path) { // PBXプロジェクトファイルのフルパス string xcodeProjPath = Path.Combine(path, "Unity-iPhone.xcodeproj/project.pbxproj"); // プロジェクトファイルの読み込み PBXProject proj = new PBXProject(); string file = File.ReadAllText(xcodeProjPath); proj.ReadFromString(file); string targetGuid = proj.TargetGuidByName("Unity-iPhone"); string projectPath = "Settings.bundle"; string copyFrom = Path.Combine(Application.dataPath, "Editor/Settings.bundle"); // コピー元の Settings.bundle のパス string copyTo = Path.Combine(path, projectPath); // コピー先の Settings.bundle のパス FileUtil.DeleteFileOrDirectory(copyTo); FileUtil.CopyFileOrDirectory(copyFrom, copyTo); string fileGuid = proj.AddFile(copyTo, projectPath, PBXSourceTree.Source); proj.AddFileToBuild(targetGuid, fileGuid); // プロジェクトに追加する proj.WriteToFile(xcodeProjPath); } }