XUPorter使用说明
2019-02-27 21:14
429 查看
概述
在打包IOS的过程中,针对需要接入的不同SDK,包括源码、需要的库和框架等,若不使用一些辅助工具的话,需要在导出的IOS工程中手动进行,针对不同SDK的依赖库的添加等操作,路径设置等操作,会消耗大量的时间,于是需要一套自动化添加IOS端SDK相关配置的方案
Unity的支持
Unity中加入了[PostProcessBuild]标签,通过该标签标注的函数,在build player结束后会自动调用,于是便提供了一个添加或修改IOS工程配置的一个入口
XUPorter
使用方法
- 从对应Github项目中copy所有文件
- 放入Unity中的Editor目录下
- 确定一个存放projmods文件的目录
- 添加相关的SDK依赖文件,并添加对应的projmods配置文件
projmods文件配置说明
- group:所有由该projmods添加的文件和文件夹所属的Xcode中的group名称
- libs:在Xcode Build Phases中需要添加的动态链接库的名称,比如libz.dylib
- frameworks:在Xcode Build Phases中需要添加的框架的名称,比如Security.framework
- headerpaths:Xcode中编译设置中的Header Search Paths路径
- files:加入工程的文件名
- folders:加入工程的文件夹,其中所有的文件和文件夹都将被加入工程中
- linker_flags:添加到工程linker flag中的链接配置,比如-ObjC
- excludes:忽略的文件的正则表达式,匹配的文件将不会被加入工程中
备注:其中所有定义的路径都是基于当前projmods文件位置的相对路径
GT测试工具的接入
根据GT测试工具的官方文档,需要我们添加所需引用的系统framework如下:
- libz.dylib
- libsqlite3.dylib
- Security.framework
- CoreTelephony.framework
- AdSupport.framework
- AudioToolbox.framework
- SystemConfiguration.framework
- QuartzCore.framework
- CoreGraphics.framework
- UIKit.framework
文件目录如下
对应projmods文件内容如下
{ "group": "GT", "libs": [ "libz.tbd", "libsqlite3.tbd" ], "frameworks": [ "Security.framework", "CoreTelephony.framework", "AdSupport.framework", "AudioToolbox.framework", "SystemConfiguration.framework", "QuartzCore.framework", "CoreGraphics.framework", "UIKit.framework" ], "headerpaths": [], "files": [ "GT/GT.framework", "GT/Resources/GT.bundle" ], "folders": [], "excludes": ["^.*.meta$", "^.*.mdown$", "^.*.pdf$"], "compiler_flags": [], "linker_flags": [ "-ObjC" ] }
可发现"frameworks"标签中我们添加了GT测试工具框架所需的系统支持框架名称,而libz.tbd等动态链接库则写在"libs"标签后,需要引入的文件,GT.framework和GT.bundle则写在"files"标签后,用于后续加入项目中
XCode工程设置情况
完成IOS工程导出后,将对应工程导入XCode中可发现,projmods文件中的配置内容均生效
方案实现逻辑
- XCodePostProcess类中会有标记了[PostProcessBuild]便签的接口
#if UNITY_EDITOR [PostProcessBuild(999)] public static void OnPostProcessBuild(BuildTarget target, string pathToBuiltProject)
- 该接口中读取XCode工程文件
- 找到指定目录下的*.projmods文件,并根据文件内容向工程中添加文件或依赖库
var modsPath = Path.GetFullPath(Path.Combine(Application.dataPath, "../XCode/XUPorterMods")); Debug.Log("modsPath: " + modsPath); string[] files = Directory.GetFiles(modsPath, "*.projmods", SearchOption.TopDirectoryOnly); foreach (string file in files) { Debug.Log("ProjMod File: " + file); project.ApplyMod(file); } // 若是Profiling版本则需要把Profiling目录下的*.projmods文件也应用上 if (Game.OneKeyBuild.lastEnv == AppEnv.Profiling) { var profilingPath = Path.Combine(modsPath, "Profiling"); string[] profilingFiles = Directory.GetFiles(profilingPath, "*.projmods", SearchOption.TopDirectoryOnly); foreach (string file in profilingFiles) { Debug.Log("Profiling ProjMod File: " + file); project.ApplyMod(file); } }
- 针对不同SDK若有修改IOS项目代码的需求可以通过XClass类进行代码编辑,例如此处需要在游戏启动之后添加GT测试工具的启动代码
//编辑代码文件 EditorCode(path); /// <summary> /// 编辑代码 /// </summary> /// <param name="filePath"></param> private static void EditorCode(string filePath) { if (Game.OneKeyBuild.lastEnv == AppEnv.Profiling) { //读取UnityAppController.mm文件 XClass UnityAppController = new XClass(filePath + "/Classes/UnityAppController.mm"); //在指定代码后面增加一行代码 UnityAppController.WriteBelow("#include \"PluginBase/AppDelegateListener.h\"", "extern \"C\" \n { \n #include <GT/GT.h> \n }"); //在指定代码后面增加一行 UnityAppController.WriteBelow("// send notfications", "GT_DEBUG_INIT;"); } }
- 最后编辑完毕后保存项目类
// Finally save the xcode project project.Save();
采坑点
- 如果文件目录改动之后,需要将project.pbxproj文件删除重新生成,否则还会按照上次的路径进行XCode工程的配置
相关文章推荐
- adb logcat [option] [filter-specs]命令参数以及使用说明
- Robots.txt 协议详解及使用说明
- SylixOS 驱动调试软件使用说明
- 通用项目骨架使用说明
- Jquery.Validate验证框架的使用说明
- IR220使用说明
- cocos2dx 举例说明 convertToNodeSpace 与 convertToWorldSpace 的使用
- android performClick使用说明
- Ajax应用场景-Ajax使用说明
- vi使用说明(总用,总忘,还是抄在这里,以后好找)
- ASP 正则表达式的应用使用说明
- [译]使用jquery.cookie操作Cookie说明
- TM4C123G--移植MPU6050DMP库和函数使用说明
- Objective-C学习之NSDate简单使用说明
- phpcms使用说明及语法说明
- Git的使用说明
- IIS批量建站工具的使用说明
- Linux 视频设备驱动V4L2最常用的控制命令使用说明(1.02)
- matlab中find函数的使用说明 转自http://jia-wenbin.blog.163.com/blog/static/77667221201211131736689/
- Linux 视频设备驱动V4L2最常用的控制命令使用说明(1.02)