「Unityのビルドポストプロセス時に、どの署名を使うかXCodeのプロジェクトファイル設定を変更する」
というだけのシンプルなサンプルソースがネット上に転がってなかったので書いてみました。
PBXProjectクラスではフレームワークの追加とかプロジェクトファイルにできることならなんでも出来ますが、そのへんの応用例は他のブログなどを参照していただければ。
Assets/Editor/PostBuildProcess.cs
using UnityEngine;
using UnityEditor;
using UnityEditor.Callbacks;
using UnityEditor.iOS.Xcode;
public class PostBuildProcess
{
[PostProcessBuild]
public static void OnPostProcessBuild(BuildTarget buildTarget, string path)
{
if( buildTarget==BuildTarget.iOS )
{
ProcessForiOS( path );
}
}
private static void ProcessForiOS(string path)
{
string projPath = PBXProject.GetPBXProjectPath( path );
PBXProject proj = new PBXProject ();
proj.ReadFromFile( projPath );
string target = proj.TargetGuidByName( PBXProject.GetUnityTargetName() );
string debugConfig = proj.BuildConfigByName( target, "Debug" );
string releaseConfig = proj.BuildConfigByName( target, "Release" );
proj.SetBuildPropertyForConfig( debugConfig, "CODE_SIGN_IDENTITY[sdk=iphoneos*]", "iPhone Developer" );
proj.SetBuildPropertyForConfig( releaseConfig, "CODE_SIGN_IDENTITY[sdk=iphoneos*]", "iPhone Distribution: XXXXXX" );
proj.WriteToFile( projPath );
}
}
2016/05/19
プロジェクトファイル名などの文字列がマジックワードになっていたのですが、関数で取得できることに気が付いたのでリファクタリングしています。
path + "/Unity-iPhone.xcodeproj/project.pbxproj";
↓
PBXProject.GetPBXProjectPath( path );
proj.BuildConfigByName( target, "Release" );
↓
proj.TargetGuidByName( PBXProject.GetUnityTargetName() );