美文网首页征服Unity3dUnityEditorunity优化
【unity】xcode打包自动配置及工具

【unity】xcode打包自动配置及工具

作者: 黒可乐 | 来源:发表于2018-10-24 10:14 被阅读12次

    写在前面

    这个是很久就想去看看的知识点,之前一直觉得很繁琐,可能会很麻烦,今天花了点时间研究了一下。

    基础

    为什么需要配置?
    我们知道我们打苹果包的流程是:先由unity工程导出xcode工程,然后使用xcode打成苹果包。这里导出的xcode工程其中有些xcode配置unity是帮我们配置好了的,比如版本号,产品名等。但是我们自定义导入的第三方SDK,需要的一些权限或者是库,这里unity是不会帮我们配置的。这样就需要我们手动配置一下。

    自动配置
    基本原理:我们都知道xcode工程会有proj文件和info.plist文件。就和我们使用unity写代码是会生成csproj文件一样。这些文件就是工程的一些配置,我们只需要更改这些文件既可以,最直接方式就是我们用文本的方式读取该文件,然后修改读出来的内容即可。unity这里帮我们把这些文件序列化好了。我们直接使用api即可。官方api

    官方api

    怎么用
    实际很简单,我们可以理解为读取json文件然后unity已经把json文件的序列化对象做好了。我们直接实例即可。最开始我们需要获得这个json文件的字符串,我们是通过:

    [PostProcessBuild]
    public static void OnPostprocessBuild(BuildTarget buildTarget, string path)
    {
        if (buildTarget == BuildTarget.iOS)
        {}
      }
    

    通过unity自带的一个方法OnPostprocessBuild,这个方法会在我们打包导工程的时候调用。然后我们根据路径读出字符串即可。

    //获得proj文件
    string projPath = PBXProject.GetPBXProjectPath(path);
    PBXProject xcodeProj = new PBXProject();
    xcodeProj.ReadFromString(File.ReadAllText(projPath));
    

    这里获得了proj的对象后,在对其做一些属性的修改。

    var targetName = xcodeProj.TargetGuidByName(PBXProject.GetUnityTargetName());
    //添加依赖库
    xcodeProj.AddFrameworkToProject(targetName, "libz.dylib", true);
    xcodeProj.AddFrameworkToProject(targetName, "MessageUI.framework", true);
    //设置关闭bitcode
    xcodeProj.SetBuildProperty(targetName, "ENABLE_BITCODE", "NO");
    //添加苹果自带功能
    xcodeProj.AddCapability(targetName, PBXCapabilityType.GameCenter);
    //保存工程
    xcodeProj.WriteToFile(projPath);
    

    然后对工程中的info.plist设置也是同样的。做法先读出来然后直接设置即可。

    //修改plist
    var plistPath = Path.Combine(path, "Info.plist");
    PlistDocument plist = new PlistDocument();
    plist.ReadFromString(File.ReadAllText(plistPath));
    var rootDict = plist.root;
    // 语音权限
    rootDict.SetString("NSMicrophoneUsageDescription", "是否允许此游戏使用麦克风?");
    // 地址权限
    rootDict.SetString("NSLocationAlwaysUsageDescription", "");
    rootDict.SetString("NSLocationUsageDescription", "");
    rootDict.SetString("NSLocationWhenInUseUsageDescription", "");
    
    //保存plist
    plist.WriteToFile(plistPath);
    File.WriteAllText(projPath,xcodeProj.WriteToString());
    

    工具

    我们又想了如果我们每次打包修改一个原则,添加一个sdk需要加一些权限啥的有需要改代码,这得多麻烦。就想要不直接在unity里面做一个xcode的配置表。这样就完美遵守开封闭原则。
    这次我机制的在网上搜索了一下,果不其然有老哥跟我的想法一样,试试了这个工具,相当的完善靠谱啊!

    工具截图
    看到没,功能是不是很完善!很厉害!下面还有一些功能,替换脚本,修改脚本啥的!
    这个是工具工程GitHub
    我打了一个unity package包,可以直接用这个。

    参考文章:
    https://answers.unity.com/questions/1074471/is-it-possible-to-use-the-xcode-manipulation-api-t.html
    https://blog.csdn.net/blog_lee/article/details/52400535
    http://www.xuanyusong.com/archives/4026
    https://docs.unity3d.com/ScriptReference/iOS.Xcode.PBXProject.html

    相关文章

      网友评论

        本文标题:【unity】xcode打包自动配置及工具

        本文链接:https://www.haomeiwen.com/subject/mhxazftx.html