PR

[Unity]iOSビルド時にNSPhotoLibraryAddUsageDescriptionとNSPhotoLibraryUsageDescriptionを自動で設定する方法

Unity

はじめに

前回紹介した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を書き換えるのは大変なので、こういうところで時短をして行きたいですね

おすすめ参考書

コメント

タイトルとURLをコピーしました