[펌] Unity5のPostProcessBuildでXcode Capabilityの設定する方法
XcodeのCapabilityの各種設定をPostProcessBuildで行う方法です。
Pushの設定などを有効にするアレです。
ざっくり流れ
In-App Purchaseなどentitlementsファイルが不要なcapabilityの場合
- Unityのリポジトリから, 最新のXcode Manipulation API(以下Xcode API)を持ってくる
 - 既存のプロジェクトにインポートできるように修正する
 - 最新のAPIでPostProcessBuildのScriptを書く
 
iCloudなどentitlementsファイルが必要なcapabilityの場合
- 一旦先にビルドしてXcodeProjectを作成する
 - capabilityを設定し, entitlementsファイルを作成する
 - PostProcessBuildでentitlementsファイルとビルドプロパティを追加する
 - 以後entitlements file不要な場合に合流する
 
詳細な流れ
entitlementsファイルのいらないcapabilityの場合
Unityのリポジトリから, 最新のXcode APIを持ってくる
- https://bitbucket.org/Unity-Technologies/xcodeapi のリポジトリに行きます。
 - ライセンスファイルを読みライセンスを理解します
 - ブランチstableを取得します Revision 102
 

- リポジトリ内のXcodeフォルダをデスクトップなど作業環境にコピーします
 - ターミナルでXcodeディレクトリに移動し, 下記のコマンドでC#のソースコードのnamespaceを変更します.仮に変更後のnamespaceをUnity2017.iOS.Xcodeとします
 
$ pwd
Users/fullcorder/Desktop/Xcode 
$ find . -name '*.cs' | xargs sed -i "" 's/UnityEditor.iOS.Xcode/Unity2017.iOS.Xcode/g'
- Xcode/Propertiesディレクトリをは不要なので削除します
 - UnityプロジェクトのEditorディレクトリにXcodeフォルダごとインポートします
 
PostProcessBuildスクリプトを作成し下記のようにPBXProject#AddCapabilityを使って追加します
Unity2017.1のリファレンス
https://docs.unity3d.com/2017.1/Documentation/ScriptReference/iOS.Xcode.PBXProject.AddCapability.html
[PostProcessBuild]
public static void AddCapability(BuildTarget buildTarget, string path)
{
    if(EditorUserBuildSettings.activeBuildTarget != BuildTarget.iOS)
    {
        return;
    }
    string projPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj";
    var proj = new PBXProject();
    proj.ReadFromString(File.ReadAllText(projPath));
    string target = proj.TargetGuidByName(TargetGroup);
    proj.AddCapability(target, PBXCapabilityType.PushNotifications);
    proj.AddCapability(target, PBXCapabilityType.InAppPurchase);
    File.WriteAllText(projPath, proj.WriteToString());
}
- 以上ですあとはビルドすればOKです
 
entitlementsファイルが必要なcapabilityの場合
entitlementsファイルが必要な場合は, entitlementsファイルを作成したものをPostProcessBuildで追加し、あとはentitlementsファイルが不要な場合に合流します
entitlementsファイルを作成
- UnityでiOSビルドしてXcodeProjectを吐き出します
 - Capabilityタブに行き, Pushなどをこうなりたい状態, PostProcessBuild後で設定後の形にします
 - entitlementsファイルがXcodeプロジェクト内に作成されるので取り出してUnityProjectにインポートします
 - Unityフォーラムの下記ポストからEntitlementsPostProcess.csをDLしてUnityにインポートします
 
https://forum.unity3d.com/threads/how-to-put-ios-entitlements-file-in-a-unity-project.442277/
- EntitlementsPostProcess.csのSerializeFieldであるEntitlements Fileにentitlementsファイルを設定します
 - 以上でentitlementsファイル追加が完了します
 
以後、前述の手順と合わせてビルドすると無事, 設定反映したになっていると思います
(Plist編集は別途スクリプト書いてください)

その他
Unity2017からは多分使えるAPIなので、長いプロジェクトの場合, プラットフォーム依存コンパイルでUnity5のみ限定して今回変更したnamespaceを使うようにすると良いと思います。
環境
macOS Sierra
Unity 5.5.3f1
Xcode 8.3.2
参考 
https://bitbucket.org/Unity-Technologies/xcodeapi
https://forum.unity3d.com/threads/how-to-put-ios-entitlements-file-in-a-unity-project.442277/
[출처] https://qiita.com/fullcorder/items/b82c48022acd0b4ff957
Unity5のPostProcessBuildでXcode Capabilityの設定する方法 - Qiita
XcodeのCapabilityの各種設定を`PostProcessBuild`で行う方法です。 Pushの設定などを有効にするアレです。 # ざっくり流れ ### In-App Purchaseなどentitlementsフ...
qiita.com
'Unity3D > Script' 카테고리의 다른 글
| [펌] PostProcessing iOS Activate Background Mode for Push Notifications (0) | 2019.06.04 | 
|---|---|
| XCode-Capabilities-Push Notifications를 기본 ON 하는 방법 (0) | 2019.06.04 | 
| [펌] Enable Push Notification in XCode project by default? (0) | 2019.06.03 | 
| [펌] animation.sample() usage (0) | 2019.05.09 | 
| [펌] 타임서버에서 시각 가져와서 Unity 에서 사용하기 (NST, NIST) (0) | 2019.04.15 | 
