目录
原理:在构建出Xcode工程后使用XcodeAPI插件的API动态添加InfoPlist.strings文件到Xcode工程中,以此实现本地化应用名称。(最下方有效果演示)
原理:在构建出Xcode工程后使用XcodeAPI插件的API动态添加InfoPlist.strings文件到Xcode工程中,以此实现本地化应用名称。(最下方有效果演示)
为什么要这么做?因为工程往往都是自动构建的,而InfoPlist.string是需要打出Xcode后手动创建的,会比较麻烦(无法一键化打包了)。
https://github.com/zeyangl/UnityAppNameLocalizationForIOS
将github下载的工程里如上方文件夹整个拷贝到您的Unity工程 Editor 文件夹下
新建一个脚本放在Editor文件夹下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using ChillyRoom.UnityEditor.iOS.Xcode; //引用xcode头文件
using System.IO;
using UnityEditor.Callbacks;//[PostProcessBuild]特性所需的头文件
public class MYIOSBuilder : Editor {
/// <summary>
/// 构建ios前允许我们进行的操作
/// </summary>
/// <param name="BuildTarget">Build target.</param>
/// <param name="path">Path.</param>
[PostProcessBuild]
public static void OnPostprocessBuild (BuildTarget BuildTarget, string path)
{
if (BuildTarget == BuildTarget.iOS)
{
//1.根据build_path获取proj_path
string projpath = PBXProject.GetPBXProjectPath (path);
//创建proj对象
PBXProject proj = new PBXProject ();
//加载proj
proj.ReadFromString (File.ReadAllText (projpath));
//生成本地化文件配置
generateProjFile (proj);
//保存
proj.WriteToFile (projpath);
}
}
/// <summary>
/// 生成InfoPlist本地化文件到xcode上,发布出去的包就会带上我们的本地化文件并且生效
/// </summary>
/// <param name="proj">Proj.</param>
private static void generateProjFile(PBXProject proj)
{
string targetGuid = proj.TargetGuidByName (PBXProject.GetUnityTargetName ());
var codesign = Debug.isDebugBuild ? "iOS Developer":"iOS Distribution";
proj.SetBuildProperty (targetGuid, "CODE_SIGN_IDENTITY", codesign);//非发布版本为Develper,发布版为Distribution (代码标签)
proj.SetBuildProperty (targetGuid, "PROVISIONING_PROFILE_SPECIFIER", "Automatic");//自动
//localizable 自动添加Xcode语言文件 (这个目录下有.lproj ,每一个.lproj文件夹下都有 .strings本地化文件
var infoDirs = Directory.GetDirectories (Application.dataPath + "/IOSFile/lang/infoplist/");
for (var i = 0; i < infoDirs.Length; ++i) {
var files = Directory.GetFiles (infoDirs [i], "*.strings");
if (files != null & files.Length > 0) {
string filepath = files [0];
//个人理解:
//参数1:文件群组名(本地化文件群组名为"InfoPlist.strings"
//参数2:本地化文件名(保存于文件群组的文件名(Xcode上表现的名称?);
//参数3:本地化文件绝对路径(unity工程上的?)
proj.AddLocalization ("InfoPlist.strings", "InfoPlists.strings", filepath);
}
}
}
}
IOSFile/lang/infoplist下的三个文件夹en.lproj, zh-Hans.lproj , zh-Hant.lproj 分别是英文,简体,繁体文件夹,它们的命名是固定的,每一个文件夹下都有一个名为InfoPlist.strings的文件,这个就是本地化文件。这些文件夹都是要事先从Xcode工程里创建的,创建方法如下:
创建成功后如上图,右键打开本地
然后将创建好的这些.lproj文件拷贝到Unity下就完成了。
运行打包出的测试包:
2020年即将到来,辛苦了!