はじめに
前回紹介したNatShare。UnityでSNS共有する機能を簡単に実装できる素晴らしいアセットなのですが、1点だけ不便な点があります。
それは画像を保存する際にiOSでは説明文をInfo.plistに必ず追加しなければならないのですが、それに対応していないことです。この説明文がないと
そこで今回はNSPhotoLibraryAddUsageDescriptionとNSPhotoLibraryUsageDescriptionを自動で設定する方法を紹介します。
環境
- Unity 2020.1.9f1
実装方法
スクリプトを用意
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
#if UNITY_IOS
using UnityEditor;
using UnityEditor.Build;
using UnityEditor.Build.Reporting;
using UnityEditor.iOS.Xcode;
public class iOSPostprocessBuild : IPostprocessBuildWithReport
{
public int callbackOrder { get { return 0; } }
public void OnPostprocessBuild(BuildReport report)
{
if (report.summary.platform == BuildTarget.iOS)
{
string path = Path.Combine(report.summary.outputPath, "Info.plist");
PlistDocument plist = new PlistDocument();
plist.ReadFromFile(path);
plist.root.SetString("NSPhotoLibraryUsageDescription", "ここに説明文");
plist.root.SetString("NSPhotoLibraryAddUsageDescription", "ここに説明文");
plist.WriteToFile(path);
}
}
}
#endif
内容は簡単でビルドする際に呼ばれるPostprocessBuild内でInfo.plistを書き換える処理を追記。
さらにUnityEditor.iOS.XcodeはiOSのプラットフォームに依存しているので、プリプロセッサで切っています。(要は#if UNITY_IOS 〜 #endifで囲っておかないとAndroidでビルドエラーになる)
スクリプトをEditorフォルダへ格納
必ずEditorフォルダに格納して下さい。Editorフォルダに格納しないとビルドエラーになります。
EditorフォルダはUnityの特殊フォルダで、Editor系の処理を書いた際はEditorフォルダに格納する必要があります。(回避方法はありますがここでは割愛)
iOSのビルド
あとはiOSのビルドを実行してXcodeプロジェクトを書き出せば、Info.plistにNSPhotoLibraryAddUsageDescriptionとNSPhotoLibraryUsageDescriptionが追記されているはずです
最後に
ビルドの度にInfo.plistを書き換えるのは大変なので、こういうところで時短をして行きたいですね
コメント