自动修改 Unity3d 导出的 Xcode 项目
2017-03-31 14:55
375 查看
在 Unity3d 导出 iOS 项目后,常常需要定制一些选项,例如指定额外的 framework,修改 Info.plist 等。
Unity3d 在导出工程的时候提供两个选项:替换整个项目「replace」和追加变动「append」。一旦使用了 replace 选项,之前所有手工设置的变更都会丢失,需要重新设置。
那么有没有一种方法可以在导出项目的时候对 Xcode 项目进行自动化配置呢?正好 Unity3d 官方提供了一个叫 xcodeapi 的项目,提供了一套简单易用的接口满足一些常见的定制需求。
从 bitbucket 上下载 xcodeapi 的源码,放到 Unity 项目的 Assets 目录下任意位置,例如 /path/to/project/Assets/Editor/xcodeapi 然后创建一个 MonoBehaviour 的子类,并在其中实现带有 [PostProcessBuild] 属性的 public static void OnPostprocessBuild (BuildTarget BuildTarget, string path); 方法:
如果有多个 PostProcessBuild 属性,可以使用 [PostProcessBuildAttribute(1)] 来指明运行的顺序,详情见此文档。
Unity3d 在导出工程的时候提供两个选项:替换整个项目「replace」和追加变动「append」。一旦使用了 replace 选项,之前所有手工设置的变更都会丢失,需要重新设置。
那么有没有一种方法可以在导出项目的时候对 Xcode 项目进行自动化配置呢?正好 Unity3d 官方提供了一个叫 xcodeapi 的项目,提供了一套简单易用的接口满足一些常见的定制需求。
从 bitbucket 上下载 xcodeapi 的源码,放到 Unity 项目的 Assets 目录下任意位置,例如 /path/to/project/Assets/Editor/xcodeapi 然后创建一个 MonoBehaviour 的子类,并在其中实现带有 [PostProcessBuild] 属性的 public static void OnPostprocessBuild (BuildTarget BuildTarget, string path); 方法:
如果有多个 PostProcessBuild 属性,可以使用 [PostProcessBuildAttribute(1)] 来指明运行的顺序,详情见此文档。
using UnityEngine; using UnityEditor; using UnityEditor.Callbacks; using UnityEditor.iOS.Xcode; using System.Collections; using System.IO; public class XCodeProjectMod : MonoBehaviour { [PostProcessBuild] public static void OnPostprocessBuild (BuildTarget BuildTarget, string path) { if (BuildTarget == BuildTarget.iPhone) { // 添加额外的 AssetsLibrary.framework // 用于检测相册权限等功能 string projPath = PBXProject.GetPBXProjectPath (path); PBXProject proj = new PBXProject (); proj.ReadFromString (File.ReadAllText (projPath)); string target = proj.TargetGuidByName ("Unity-iPhone"); // add extra framework(s) proj.AddFrameworkToProject (target, "AssetsLibrary.framework", false); // set code sign identity & provisioning profile proj.SetBuildProperty (target, "CODE_SIGN_IDENTITY", "iPhone Distribution: _______________"); proj.SetBuildProperty (target, "PROVISIONING_PROFILE", "********-****-****-****-************"); // rewrite to file File.WriteAllText (projPath, proj.WriteToString ()); // 由于我的开发机是英文系统,但游戏需要设置为中文; // 需要在修改 Info.plist 中的 CFBundleDevelopmentRegion 字段为 zh_CN // Get plist string plistPath = path + "/Info.plist"; PlistDocument plist = new PlistDocument(); plist.ReadFromString(File.ReadAllText(plistPath)); // Get root PlistElementDict rootDict = plist.root; // Change value of CFBundleDevelopmentRegion in Xcode plist rootDict.SetString("CFBundleDevelopmentRegion", "zh_CN"); PlistElementArray urlTypes = rootDict.CreateArray("CFBundleURLTypes"); // add weixin url scheme PlistElementDict wxUrl = urlTypes.AddDict(); wxUrl.SetString("CFBundleTypeRole", "Editor"); wxUrl.SetString("CFBundleURLName", "weixin"); PlistElementArray wxUrlScheme = wxUrl.CreateArray("CFBundleURLSchemes"); wxUrlScheme.AddString("____________"); // Write to file File.WriteAllText(plistPath, plist.WriteToString()); } } }
相关文章推荐
- 修改Xcode自动生成的文件注释来导出API文档
- Unity成功导出Xcode工程后自动修改一些设置
- unity3d导出xcode项目使用afnetworking 3框架导致_kUTTagClassMIMEType 问题解决方案
- 修改Xcode自动生成的文件注释来导出API文档
- Unity3d 导出 xcode 项目 编译错误解决方案 xcode6 U3DScreenToNGUIScreen
- 修改Xcode自动生成的文件注释来导出API文档
- Unity导出XCode工程的时候自动修改工程设置添加依赖
- 在mac ox s虚拟机中的unity3D项目编译生成并导出的xcode项目无法在ios设备中运行
- 修改Xcode自动生成的文件注释来导出API文档
- Xcode修改项目名称
- Xcode修改项目名
- 项目修改客商分公司客商助记码自动更新trigger
- 设置eclipse在编译运行项目之前自动保存修改的文件
- 利用xcode自动生成项目文档
- VS2008 修改模板,让项目文件自动添加版权信息
- Unity3D For iPhone游戏引擎之构建游戏框架与导出IOS项目(一)
- 实践出真知--关于ios项目重命名的实践 (xcode 4.3.1) ,以及svn 导出项目命令
- Unity3D 游戏引擎之构建游戏框架与导出IOS项目(一)
- IOS开发Xcode修改项目名
- 怎么修改XCode项目的名称