因为一直使用的Unity开发项目,对xcode不是很熟,但是每次出包是在是太麻烦了,所以打算弄个一键出包的工具。
在unity中,我们每次出包,unity有自动回调函数:
[PostProcessBuild(100)]
public static void OnPostProcessBuild(BuildTarget target, string pathToBuildProject)
{
}
其中PostProcessBuild在UnityEditor.Callbacks这个命名空间下。
我们给函数设置这个attribute后,Unity在每次到处工程师就会自动调用这个函数。注意:函数参数是固定的。
如果各位使用的Unity是最新版2017的话,就要容易很多,因为unity已经自带了很多函数功能,如果使用的是没有这些功能的版本的话,那么就需要各位自己导入了。
这是unity
已经帮我们处理好的XCode函数,不在需要我们自己在实现了。
下载解压运行,项目需要引用到一个nunit.framework的dll,各位可以自行百度或则在这个地址下载安装:
http://nunit.org/download/
安装完成后重新设置引用。因为这个工程的命名空间和Unity的命名空间是一样的,所以大家需要重新全局修改一下命名空间,可以直接全局替换,只要和Unity的不一样就可以了。
修改完成后到这一步大家就可以编译dll了,将编译的dll导入到unity中。
我们导出项目需要设置的一般是这几个部分:
1:Capabilities
2:info.plist文件
3:framework
4:源代码
我们一个一个来。
设置Capabilities:
public static void SetCapabilities(string pathToBuildProject)
{
string projPath = pathToBuildProject + "/Unity-iPhone.xcodeproj/project.pbxproj"; //项目路径,这个路径在mac上默认是不显示的,需要右键->显示包内容才能看到。unity到处的名字就是这个。
PBXProject _pbxProj = new PBXProject();//创建xcode project类
_pbxProj.ReadFromString(File.ReadAllText(projPath));//xcode project读入
string _targetGuid = _pbxProj.TargetGuidByName("Unity-iPhone");//获得Target名
var capManager = new ProjectCapabilityManager(projPath, "XXXXX(自己替换).entitlements", PBXProject.GetUnityTargetName());//创建设置Capability类
capManager.AddPushNotifications(true);//设置Capability
capManager.AddGameCenter();