UnityプロジェクトをJenkinsを使用してXCode8対応した

  • 25
    いいね
  • 5
    コメント

XCode7で正常にビルドできていたところからどう修正したかの備忘録です。

環境
- Unity5.3.5f1
- XCode8.0

xcodebuildコマンドでめっちゃエラーでる

シェルスクリプト
xcodebuild -project "${XCODE_PROJECT_FILE}" \
  -configuration "${CONFIGURATION}" \
  CODE_SIGN_IDENTITY="${CODESIGN_NAME}" \
  PROVISIONING_PROFILE="${PROVISIONING_PROFILE}"
Signing for Unity-iPhone requires a development team. Select a development team in the project editor.
Code signing is required for product type 'Application' in SDK 'iOS 10.0'

このような感じでビルドが成功しない。

  • どうやらXCode8からCodesign/ProvisioningProfileは Automatic にすることが推奨されている
  • xcodeprojectの設定とxcodebuildによる指定が異なる場合、Archive化できない

解決法

xcodeproj(project.pbxproj)の設定をUnityの XCodeAPI で上書き

XCodeProjectUpdater.cs

  [PostProcessBuild]
  static void OnPostProcessBuild(BuildTarget buildTarget, string path)
  {
    string projPath = buildPath + "/Unity-iPhone.xcodeproj/project.pbxproj";

    PBXProject proj = new PBXProject();
    proj.ReadFromString(File.ReadAllText(projPath));

    string target = proj.TargetGuidByName("Unity-iPhone");

    // 色々設定更新(実際はJenkinsのオプション引数で各種情報を取得)
    proj.SetBuildProperty(target, "DEVELOPMENT_TEAM", teamPrefix); // チーム名はADCで確認できるPrefix値を設定する
    proj.SetBuildProperty(target, "CODE_SIGN_IDENTITY", codesignName);
    proj.SetBuildProperty(target, "PROVISIONING_PROFILE_SPECIFIER", provisioningProfileName); // XCode8からProvisioning名で指定できる

    proj.WriteToFile(projPath);
  }

Jenkins側のシェルではオプションを指定せずにビルドを行う

シェルスクリプト
xcodebuild -project "${XCODE_PROJECT_FILE}" -configuration "${CONFIGURATION}"

上記処置でビルドは無事成功したが、
Unity Cloud Buildを利用することになる日は近い・・・!

参考:
Xcode 8: xcodebuildで、Automatic Signingに対応する
[iOS 10] Xcode 8 の新しい Signing 機能について
What’s New in Xcode