相关文章推荐
在Unity打包iOS的过程中,有的时候需要引用一些framework、修改增加plist文件或者做打包工具的时候希望能够直接配置证书。这个时候如果全凭打包出来之后再手动去修改会非常麻烦。好在Unity5.x之后Unity提供了一些接口能够让我们在导出xCode项目的时候自动设置一些东西,下面就来看看iOS打包过程中的自动设置吧。

C#准备工作

首先,创建一个C#文件。由于这个C#文件实在编辑器下执行的,所以要将它放在Editor文件夹下。
然后引入一些必要的命名空间:
using UnityEditor;
using UnityEditor.iOS.Xcode;
using UnityEditor.Callbacks;
using System.Collections;
using System.IO;

OnPostProcessBuild方法

该方法用于在build Xcode项目后调用,并且执行里面的内容。对iOS的一些设置就是在这个方法里做的。
[PostProcessBuild]
static void OnPostprocessBuild(BuildTarget target, string pathToBuildProject){
        do something 
这里会得到一个pathToBuildProject的路径。这个路径就是我们项目build出来的路径,很重要!
注意:这里要加上PostProcessBuild属性。

添加framework

1、要获取。xcodeproj文件的路径。
string _projPath = PBXProject.GetPBXProjectPath (pathToBuildProject);

2、new()一个PBXProject对象,然后从上面获取的路径中读出字符串。
PBXProject _pbxProj = new PBXProject ();
_pbxProj.ReadFromString (File.ReadAllText (_projPath));

3、获取targetGUID
string _targetGuid = _pbxProj.TargetGuidByName ("Unity-iPhone");

4、在做好这些准备之后,我们就能够添加一些想要的framework,方法也很简单,使用AddFrameworkToProject方法。
_pbxProj.AddFrameworkToProject (_targetGuid, "StoreKit.framework", true);

这里第一个参数是第三部中获取到的GUID,第二个参数是framework名(这里一定要是。framework为后缀),第三个参数是用来设置framework是require还是optional。

添加其他文件

除了添加framework外,也许我们还要添加其他文件,例如。tbd后缀的文件。
同样的使用上面new()出来的PBXProject对象,使用它的AddFileToBuild方法:
_pbxProj.AddFileToBuild(_targetGuid, _pbxProj.AddFile("usr/lib/libz.tbd", "Frameworks/libz.tbd", PBXSourceTree.Sdk));
这里的第二个参数要注意:需要从固定的路径中获取对应的文件。AddFile()方法详细见官方文档。

设置BuildSetting

其实,Xcode下的BuildSetting项内的内容也能够通过代码修改。例如:我们这里要设置证书,就是直接这样:
_pbxProj.SetBuildProperty (_targetGuid, "CODE_SIGN_IDENTITY", code_sign_identity);  
第二个参数代表的就是在BuildSetting中的一些可修改的属性,这些具体的属性可以在Xcode项目中右键。xcodeproj —> 选择显示包内容 —> project.pbxproj文件中的buildSettings下都能够找到。

修改plist文件

1、获取plist文件路径
string _plistPath = pathToBuildProject + "/Info.plist";

2、创建PlistDocument对象,读取路径中的内容并且获取根字典(plist其实是一个字典)。
PlistDocument _plist = new PlistDocument ();
_plist.ReadFromString (File.ReadAllText (_plistPath));
        PlistElementDict _rootDic = _plist.root;

3、修改plist中某个key的值或者添加一个key:
_rootDic.SetString ("View controller-based status bar appearance", "NO");
使用SetString方法不仅可以修改已经存在的key - value对。还能够添加自己定义的key - value。

4、plist其他类型的添加

代码中还能够为plist文件添加其他类型的值,具体的自己查文档吧。

最后的写入

记住:最后修改完一定要再次写入文件一次!
File.WriteAllText(_plistPath, _plist.WriteToString());
[PostProcessBuild]
static void OnPostprocessBuild(BuildTarget target, string pathToBuildProject){
        ModifyProj (pathToBuildProject);
        SetPlist (pathToBuildProject);
public static void ModifyProj(string pathToBuildProject){
        string _projPath = PBXProject.GetPBXProjectPath (pathToBuildProject);
        PBXProject _pbxProj = new PBXProject ();
        _pbxProj.ReadFromString (File.ReadAllText (_projPath));
        string _targetGuid = _pbxProj.TargetGuidByName ("Unity-iPhone");
        //*******************************添加framework*******************************//
        _pbxProj.AddFrameworkToProject (_targetGuid, "StoreKit.framework", true);
        //*******************************添加tbd*******************************//
        _pbxProj.AddFileToBuild(_targetGuid, _pbxProj.AddFile("usr/lib/libz.tbd", "Frameworks/libz.tbd", PBXSourceTree.Sdk));
        //*******************************设置buildsetting*******************************//
        _pbxProj.SetBuildProperty (_targetGuid, "CODE_SIGN_IDENTITY", code_sign_identity);  
        File.WriteAllText(_projPath, _pbxProj.WriteToString());
static void SetPlist(string pathToBuildProject){
        string _plistPath = pathToBuildProject + "/Info.plist";
        PlistDocument _plist = new PlistDocument ();
        _plist.ReadFromString (File.ReadAllText (_plistPath));
        PlistElementDict _rootDic = _plist.root;
        _rootDic.SetString ("View controller-based status bar appearance", "NO");
        File.WriteAllText(_plistPath, _plist.WriteToString());
来自:https://blog.csdn.net/xxwlzfb/article/details/52673975

如社区发表内容存在侵权行为,您可以 点击这里 查看侵权投诉指引

 
推荐文章