首页 > Unity3D频道 > 【Unity3D研究院之游戏开发】 > Unity3D研究院之IOS全自动编辑framework、plist、oc代码(六十七)
2014
06-09

Unity3D研究院之IOS全自动编辑framework、plist、oc代码(六十七)

Unity打IOS时会先生成一个Xcode工程,如果你需要增加一些第三方的framework那么需要手动一条一条的添加,这太烦了。。而且可能你还需要修改Plist文件,甚至还可能要修改unity自动生成的oc代码,每次打包都要修改的话,那太累了。。这篇文章就是全自动打包的第一步。。建议使用XUPorter,我在它的基础上拓展了两个类,一个用来修改plist,一个用来修改unity生成出来的OC代码。文章的最后我会给出代码。。

那么我用一个比较变态的SDK举个例子ShareSDK,它就需要自动添加framework,修改plist,还有要修改oc的代码。第一步打开XUPorter/Mods/share.projmods 文件。

 frameworks分成两种,一种是系统自带的framework还有一种是第三方的framework。 “frameworks”节点里面放的是系统自带的frameworks。”files”节点里面放的是第三方做出来的framework。 尤其是第三方的framework如果位置放的不对,就不会被xcode所引用的!切记切记!!

folders:可以把某个文件夹下的所有文件拷贝在xcode工程里面,一般sdk都会附带一些oc的代码文件,最好通过folders把oc的代码拷贝在工程里面。或者你也可以把oc的代码放在plugins下面,同样打包的时候也会拷贝进xcode工程。

unity打完IOS或者Android包以后会自动回调一个静态方法。

 自动添加framework的原理其实就是等包打完以后,在这个方法里面进行文件的操作,把需要的framework plist oc 代码拷贝进去,或者修改它们。。

 

在回到ShareSDK上,在接微信平台的时候,它们需要在pList 里面增加URL types选项,这里我通过XCPlist增加一行 或者替换一行。

 

 ShareSDK在接入微信平台的时候 必须修改Unity生成的UnityAppController.mm 文件,这里我通过 XClass 自动修改UnityAppController.mm生成的代码。 主要是增加代码和替换代码 两部分。。

像这样,我就可以把unity生成的代码修改了。。

Unity3D研究院之IOS全自动编辑framework、plist、oc代码(六十七) - 雨松MOMO程序研究院 - 1

最后是工程地址:http://pan.baidu.com/s/1i3gLDTN

建议大家把工程下载下来看看一基本上就明白它的工作原理了。如果你掌握者本篇文章的知识 那么恭喜你 自动化打包就已经完成了一半。。 现在我们已经可以自动化生成 xcode工程了,等有时间的话我会把下一半shell 自动化打包.ipa的方法在整理出来。。

雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!

--

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。

  1. 雨松大大求解,1.Xcode8.0 Capabilities 里边的 Push Notifications 怎么通过代码设置打开? 2.Build Phases 里边的Compile Sources里边的 .m 文件有的需要添加-fno-objc-arc 标签,怎么通过代码添加上这种标签?

  2. momo大神问个问题 ,projmod文件的 “compiler_flags”这个标签改怎么用啊,我现在用到了第三方的开源库 AFWorking 需要在配置compile flags的参数为 -fobjc -arc。我试了”compiler_flags”:[“-fobjc -arc”]这个写好像不对。

  3. momo大神,讲的非常好。[奥特曼]
    顺便请教下 如果unity编译Xcode项目的时候,需要添加Associated Domains 得值,可以通过这个插件实现吗?

  4. 我这边需要加入ios钥匙链,其中苹果给的范例代码需要给单独文件加编译选项“-fno-objc-arc”,这个有什么办法吗

  5. 雨松大大,我想问下,Xcode 生成完成得时候 总是会显示 DXTPlugInCompatibilityUUIDs的报错 ,这个是什么原因?有什么解决的例子吗?

    • 可以考虑集成到 Unity 的时候改名,导出到 Xcode 中之后再改回来。或者放在 Unity 之外的文件夹中,到 Xcode 中用脚本将它加进去。

  6. hi momo师兄,关于修改UnityAppController.mm 的方法,我想到另一个解决方案,就是派生一个UnityAppController的子类CustomUnityAppController,将然后将涉及到 对UnityAppController的修改都在CustomUnityAppController中实现,并将main.mm中的”const char* AppControllerClassName = “UnityAppController”;” 修改为”const char* AppControllerClassName = “CustomUnityAppController”;” 这样做代码维护性要高一些。

  7. MOMO大神问个问题哈,”folders”: [“ShareSDK/”], 这样写就可以把这个文件夹下的所有东西拷贝到Xcode工程里了?这个ShareSDK的文件夹我看您的demo里放在XUPorterMods路径下了,我也把要加的文件夹放在了这个路径下,projmods 文件中我也写了这个文件夹名,但是打包出的Xcode工程中并没加进去这些东西啊,这是什么问题呢

  8. MOMO大神请教一下,在接某sdk时 它需要将assets文件夹拖入xcode工程的SDK目录下并选择Create folder references for any added folders.之后就变成蓝色文件夹了。但在xcode工程之前拖入好进入到打开工程再编译好运行就不行,MOMO遇到过这样的SDK吗?如果不能用命令行或代码实现,就不能自动化了。。。%>_<%

  9. 哦,那么例如我想添加libz.dylib,那么我只需要将这个libz.dylib添加到share.projmods的lib里就可以了吗? 但我这样添加我并没有在导出的工程里面看到加载进来的这个dylib,当我将libz.dylib放到share.projmods的framework中后,导出的xcode工程是能在framework中看到libz.dylib的,但是framework列表里面libz.dylib是红色字体显示的,这是代表没有正常导入吗?