環境
- 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を追加した場合
Build Settings
次にXCodeの[ BuildSettings ]です。
これだけであれば、標準のUnityEditor.iOS.Xcode.PBXProject
を利用するだけで実現できました。ただし、私の環境ではUnityEditor.iOS.Xcode
のnamespaceが見つからない現象に陥りました。
結果的にUnity 5.3.2p1のパッチが必要との事だったため、こちらからパッチを当てて解決しました・・・がっ!!
今度は、XCodeからビルドしたプロジェクトがスプラッシュから先に進まない(フリーズ)する不具合に直面しました。Unity 5.3.2p2のリリースノートを google翻y・・ 見てみると、730441にどうやら該当するバグがあったため、Unity 5.3.2p2のパッチをあてまして、この現象は解決しました。
脱線してしまいましたが、ようやく本題に戻ります、コードで説明します。
以下のファイルをAssets/Editor/
配下に作成します。クラス名は任意です。
OnPostprocessBuild()
は、XCodeビルド直後に呼ばれるイベントです。
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上で確認できます。
アプリ名(アプリアイコンの下に表示される名前)のローカライズ(完全自動化については継続調査中!!)
-
使うもの
-
注意
-
XCodeEditor-for-Unity(dcariola)
こちらのプラグインは、「Variant Group」に対応していないため今回の対応はそもそもできないとの結論に至っています。
-
XCodeEditor-for-Unity(dcariola)
-
手順
上記プラグインを落として、Assets/Editor
配下におき、
後は、こちらの方のコードを参考にして実装してみましたが、私の環境では出来ませんでした。 -
どうやっても
PBXVariantGroup
セクションの追加がされず、XCode上でもローカライズ対象のファイルとして認識されませんでした。個々の単なるファイルにしかならないのです。リンク先の記事は2年も前なので、もしかするとXCodeのバージョンアップで出来なくなったのかなと思っています。 -
暫定対応
-
上記のことから、現時点では自動化に至っておりませんので、暫定的に以下にて対応しています
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...
を押します。
-
これでローカライズ向けにファイルが変換されるため、日本語のローカライズを追加し、
CFBundleDisplayName
(日本向けのアプリ名)を日本語に変更します。
-
完全自動化とまではいきませんでしたが、現状はここまでが精一杯でした・・・
参考
- http://qiita.com/dancingpandor/items/cc497adb9f930d42ffd3
- http://qiita.com/monry/items/6f6507e7271caa3af42d
- Unity 5.3.2 のバグ関連
- https://issuetracker.unity3d.com/issues/ios-monodevelop-unityeditor-dot-ios-dot-xcode-namespace-isnt-recognised-in-monodevelop
- https://issuetracker.unity3d.com/issues/unity-hangs-when-selecting-objects-in-the-scene-view
いやぁ〜、Qiitaって本当に良いものですね、さよなら、さよなら