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

可以看见添加动态链接库,添加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

保存
XCMod.cs
之后,在修改XCProject.cs
,先按照规范添加一个方法
然后再XCProject.cs
的public void ApplyMod
方法里面调用即可。

最后我们再.projmods
添加字段"enable_bitcode": "NO",
.
补充:后面发现文件copy的时候xml
文件被copy到工程中了,但是没有被引用。
出现类似的问题在BXFileReference.cs
文件中添加


后面又发现我们这边之前
.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脚本传递参数的问题
网友评论