Unity导出XCode工程的时候自动修改工程设置添加依赖

代码如下

#if UNITY_IOS || UNITY_EDITOR
    // ios版本xcode工程维护代码
    [PostProcessBuild(999)]
    public static void OnPostprocessBuild(BuildTarget BuildTarget, string path)
    {
        if (BuildTarget == BuildTarget.iOS)
        {
            string projPath = PBXProject.GetPBXProjectPath(path);
            PBXProject proj = new PBXProject();
            proj.ReadFromString(File.ReadAllText(projPath));

            // 获取当前项目名字
            string target = proj.TargetGuidByName(PBXProject.GetUnityTargetName());

            // 对所有的编译配置设置选项
			proj.SetBuildProperty(target, "ENABLE_BITCODE", "NO");

			// 添加依赖库
			// 语音sdk
			proj.AddFrameworkToProject (target, "Security.framework", false);
			proj.AddFrameworkToProject (target, "JavaScriptCore.framework", false);
			proj.AddFrameworkToProject (target, "libc++.1.tbd", false);
			proj.AddFrameworkToProject (target, "libz.1.tbd", false);

            // 设置签名
            //			proj.SetBuildProperty (target, "CODE_SIGN_IDENTITY", "iPhone Distribution: _______________");
            //			proj.SetBuildProperty (target, "PROVISIONING_PROFILE", "********-****-****-****-************"); 

            // 保存工程
            proj.WriteToFile (projPath);

			// 修改plist
			string plistPath = path + "/Info.plist";
			PlistDocument plist = new PlistDocument();
			plist.ReadFromString(File.ReadAllText(plistPath));
			PlistElementDict rootDict = plist.root;

            // 语音所需要的声明,iOS10必须
            rootDict.SetString("NSContactsUsageDescription", "是否允许此游戏使用麦克风?");

            // 保存plist
            plist.WriteToFile (plistPath);
        }
    }
#endif

将以上代码跟其他的编辑器扩展代码一样,写在一个继承自Editor的类里面,放在Editor目录下面即可。

Unity提供了OnPostprocessBuild的函数,允许我们在编译打包完成后进行修改。

Unity最新版本是支持直接修改Xcode工程的,注意必须要安装了iOS的模块才有对应的类,其实这两个类就是一些文本操作,如果早期的Unity版本没有对应的函数,可以在Unity的官方开源项目里面去找。实在找不到自己写C#或者python脚本解析也是可以的。

上述代码执行了诸如添加依赖库,设置工程属性,修改plist等操作。


你可能感兴趣的:(Unity3D开发)