[펌] 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
'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 |