美文网首页
Unity自动化Xcode配置XUPorter简单优化

Unity自动化Xcode配置XUPorter简单优化

作者: 临川慕容吹雪 | 来源:发表于2018-12-29 11:05 被阅读38次

我们公司打包用的Unity版本是5.0.4,比较老的版本。没办法目前公司的unity暂时不能升级。所以对xcode工程修改还得用喵神的XUPorter,关于XUPorter的说明见喵神的博文Unity编译至Xcode工程后自动添加文件和库的方法.Unity5以后的版本都内置了导出Xcode工程以后对Xcode工程各种操作修改。
我们公司现在unity打xcode是使用C#写的面板,然后通过XUPorter修改xcode配置。并且还是手动打包。

XUPorter标准配置:

projmods

可以看见添加动态链接库,添加frameworks,以及"linker_flags"等常用的配置都支持,可是修改xcode的一些build Setting参数配置没有。比如bitcode特性,Unity5.3.2版本才开始支持,所以之前版本需要主动设置为NO.还有enable object-c Exceptions需要手动设置YES,每次打完包我都要在xcode工程里面手动修改,
闲暇的时候我看了下xuporter代码,针对build Setting参数配置做了些简单修改。这里就单独就修改bitcode做下说明。
首先我们再XUPorter工程里的文件XCodeEditor.cs按照他们的规范
添加常量

protected const string ENABLE_BITCODE_KEY = "ENABLE_BITCODE";

然后再XCodeEditor.cs文件里面添加以下方法:

public bool AddEnableBitcodeFlags( string flag = "NO")
        {
            bool modified = false;
            
            if( !ContainsKey( BUILDSETTINGS_KEY ) )
                this.Add( BUILDSETTINGS_KEY, new PBXSortedDictionary() );
            if( !((PBXDictionary)_data[BUILDSETTINGS_KEY]).ContainsKey(ENABLE_BITCODE_KEY ) ) {
                ((PBXDictionary)_data[BUILDSETTINGS_KEY]).Add(ENABLE_BITCODE_KEY , flag );
                modified = true;
            }
            Debug.Log ("AddEnableBitcodeFlags="+modified);
            return modified;
        }

将文件XCodeEditor.cs保存之后。我们再修改XCMod.cs类。这个类就是获取.projmods字段配置的
XCMod添加属性字段enable_bitcode

F565338E-A1B7-4C6A-8F34-A60B1F6DE217.png
保存XCMod.cs之后,在修改XCProject.cs,先按照规范添加一个方法
690D8600-999A-4A78-9875-C2824FEE4425.png

然后再XCProject.cspublic void ApplyMod方法里面调用即可。

CE2B5B0F-9D22-4883-8CB7-43F413DBCFB4.png 。

最后我们再.projmods添加字段"enable_bitcode": "NO",.

补充:后面发现文件copy的时候xml文件被copy到工程中了,但是没有被引用。
出现类似的问题在BXFileReference.cs文件中添加

typeNames
typePhases
后面又发现我们这边之前.projmods里面加libs加的动态库没有关联xcode进去。原因Xcode7以后.dylib的库都找不到了(其实也能找到,后面会介绍),取而代之的则是与其同名的.tbd库.而[XUPorter] (https://github.com/onevcat/XUPorter).之前就是libs链接动态库就是关联.dylib后缀的动态库。
依然是在BXFileReference.cs文件public static readonly Dictionary<string, string> typeNames的字典里面添加一个{".tdb","sourcecode.text-based-dylib-definition"},在public static readonly Dictionary<string, string> typePhases的字典里面添加一个{".tbd","PBXFrameworksBuildPhase"}

由于XUPorter没在维护,如果我们的unity版本过低需要使用XUPorter,如果需要额外修改一些其他xcode参数配置,就可以按照上面类似修改了,其他详细XUPorter说明可参考
Unity编译iOS工程的自动化配置(XUPorter)
Unity3D研究院之IOS全自动编辑framework、plist、oc代码
如果unity版本比较新,是可以不用XUPorter的,在Unity5以后的版本都内置了导出Xcode工程以后对Xcode工程各种操作修改
我们也可以用有图形界面工具设置xcode工程配置,可参考Unity iOS一键打包之淘汰 XUPorter

其他问题记录:解决Unity不能调用shell脚本传递参数的问题

相关文章

网友评论

      本文标题:Unity自动化Xcode配置XUPorter简单优化

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