LoginSignup
13
11

More than 5 years have passed since last update.

Unity - XCodeビルド後の設定と、アプリ名ローカライズ自動化

Last updated at Posted at 2016-05-26

環境

  • Unity 5.3.2f1
    • Unity 5.3.2p1
    • Unity 5.3.2p2
  • XCode 7.3.1
  • Mac El Capitan 10.11.5
  • Unity初心者

前置き

既出の情報ばかりですが、個人的な備忘録も兼ねて載せておきます。
Unity 5.3.2のバグについても多少触れておりますので、皆様のご参考になれば幸いです。

Framework

UnityからXCodeプロジェクト出力後、[ Build Settings ]や[ Framework ]の追加・・・面倒ですよね。大抵、XCodeのフレームワークを利用する場合、CocoaPodsを利用していますが、Unity Cloud Buildとの連携が出来ませんでしたので、今回は別の方法を取りました。
(どなたか方法ご存知でしたら、、、)
Unity 5からはframeworkの導入が改善されたようで、Assets/Plugin/iOS/配下などに*.frameworkを置くだけでXCode向けビルド出力時に、XCodeプロジェクトのFrameworkに追加されます。

例) UnityAdsを追加した場合
スクリーンショット 2016-05-26 17.24.22.png

Build Settings

次にXCodeの[ BuildSettings ]です。
これだけであれば、標準のUnityEditor.iOS.Xcode.PBXProjectを利用するだけで実現できました。ただし、私の環境ではUnityEditor.iOS.Xcodeのnamespaceが見つからない現象に陥りました。

結果的にUnity 5.3.2p1のパッチが必要との事だったため、こちらからパッチを当てて解決しました・・・:sob:がっ!!
今度は、XCodeからビルドしたプロジェクトがスプラッシュから先に進まない(フリーズ)する不具合に直面しました。Unity 5.3.2p2のリリースノートを google翻y・・ 見てみると、730441にどうやら該当するバグがあったため、Unity 5.3.2p2のパッチをあてまして、この現象は解決しました。

脱線してしまいましたが、ようやく本題に戻ります、コードで説明します。
以下のファイルをAssets/Editor/配下に作成します。クラス名は任意です。
OnPostprocessBuild()は、XCodeビルド直後に呼ばれるイベントです。

XCodeSetting.cs
using UnityEngine;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEditor.Callbacks;
using UnityEditor.iOS.Xcode;

/// <summary>
/// XCodeビルド出力後に呼び出されるメソッド
/// XCode側で別途設定が必要な場合は、こちらで対応
/// </summary>
public class XCodeSetting
{
    [PostProcessBuild]
    public static void OnPostprocessBuild (BuildTarget buildTarget, string path)
    {
        // iOS以外は未処理
        if (buildTarget != BuildTarget.iOS) {
            return;
        }

        // プロジェクトファイル
        string projPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj";
        // 後々XCodeEditor-for-Unity利用するためフルパス
        UnityEditor.iOS.Xcode.PBXProject proj = new UnityEditor.iOS.Xcode.PBXProject ();
        proj.ReadFromFile (projPath);

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

        // BuildSettings
        // ENABLE_BITCODE OFF
        proj.SetBuildProperty (target, "ENABLE_BITCODE", "NO");

        // 設定を保存
        File.WriteAllText (projPath, proj.WriteToString ());

    }

ここでproj.SetBuildProperty()の第2引数で指定する名前は、XCode上で確認できます。
スクリーンショット 2016-05-26 17.49.37.png

アプリ名(アプリアイコンの下に表示される名前)のローカライズ(完全自動化については継続調査中!!)

  • 使うもの
  • 注意

    • XCodeEditor-for-Unity(dcariola)
      こちらのプラグインは、「Variant Group」に対応していないため今回の対応はそもそもできないとの結論に至っています。
  • 手順
    上記プラグインを落として、Assets/Editor配下におき、
    後は、こちらの方のコードを参考にして実装してみましたが、私の環境では出来ませんでした

    • どうやってもPBXVariantGroupセクションの追加がされず、XCode上でもローカライズ対象のファイルとして認識されませんでした。個々の単なるファイルにしかならないのです。リンク先の記事は2年も前なので、もしかするとXCodeのバージョンアップで出来なくなったのかなと思っています。
  • 暫定対応

    • 上記のことから、現時点では自動化に至っておりませんので、暫定的に以下にて対応しています
XCodeSetting.cs
    public static void OnPostprocessBuild (BuildTarget buildTarget, string path)
    {

〜 略 〜

        string plistFile = "InfoPlist.strings";

        // XCodeプロジェクトルートへ実体生成
        StreamWriter w = new StreamWriter (Path.Combine (path, plistFile), false);
        w.WriteLine (string.Format ("CFBundleDisplayName = \"{0}\";", "hogehoge"));
        w.WriteLine (string.Format ("//CFBundleDisplayName = \"{0}\";", "ほげほげ"));
        w.Close ();

        //// 参照追加(XCodeプロジェクト上で見れるようにする)
        pbxproj.AddFileToBuild (target, pbxproj.AddFile (Path.Combine (path, plistFile), plistFile, PBXSourceTree.Source));

        // 設定保存
        File.WriteAllText (projPath, pbxproj.WriteToString ());
  • XCodeプロジェクトを開くと、プロジェクト直下にInfoPlist.stringsファイルが出来るので、InfoPlist.stringsを選択し、Localize...を押します。 スクリーンショット 2016-06-01 19.36.52.png
  • 次のウィンドウは、そのままLocalizeを押します
    スクリーンショット 2016-06-01 19.40.09.png

  • これでローカライズ向けにファイルが変換されるため、日本語のローカライズを追加し、CFBundleDisplayName(日本向けのアプリ名)を日本語に変更します。
    スクリーンショット 2016-06-01 19.42.05.png

  • 完全自動化とまではいきませんでしたが、現状はここまでが精一杯でした・・・:mask: :droplet:

参考

いやぁ〜、Qiitaって本当に良いものですね、さよなら、さよなら

13
11
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
11