如何管理上百个渠道包?

XcodeiBcker • 于 2015-10-10 19:50:04 +0800 • 最后由 iBcker2015-12-04 00:41:56 +0800 6256 阅读

file

手上有个项目要打一百多个渠道包,每个包的icon,启动图名字等都不一样。怎么破?

Target的失败尝试

最初,我采取了建target的办法处理。常规来说,这也是大家推荐的办法,但当建到30个Target后,Xcode操作变得越来越卡,并且每次添加一个新的类,都要勾选这几十个target确实很烦人,也容易遗漏,看来不是太好的方案~~

思考

一度陷入僵局后开始思考还有什么可以利用的。

1.脚本?

这时候没准大家想到了用脚本去控制打包。那调试的时候又不好针对指定渠道包测试,有bug难以处理最终等弊端。

2.新建工程,把公用部分打成fremawork?

这是个疯狂的想法,虽然解决了多target卡的问题,但规模庞大难以维护

3.新建工程,把公用部分弄成子工程?

和方法二一样···

回归Xcode

Xcode是一个很强大的工具,其中集成了很多可配置的元素。所以我相信利用Xcode自带的功能就能解决这个问题,所以开始想到了Xcode的配置文件.xcconfig文件

xcconfig

xcconfig是Xcode的一个工程配置文件,可以作为的一个补充配置Xcode,我们常用的Cocoapods就是用这东西来链接生成的静态库。大概长这样

file

Xcode中在这里选择

file

所以,我的思路是

给每个渠道包新建一个xcconfig文件,用来管理APP名字,ShareSDK key等一些需要特殊处理的地方。 APPIcon和启动图的管理就在Xcode的BuildPhases里的添加RunScript,进行拷贝替换。

最终就成了这样子 file

每次想调试那个渠道的工程也简单,只要把

Configurations里的debug项改成先要调试的config就行了

file

打包时就直接用脚本,通过--config选项能够指定加载哪个渠道的配置,例如:

xcodebuild -target "tuangouproject" -configuration Release -sdk iphoneos build -xcconfig "Build Config/$name.xcconfig" 1>/dev/null

打包脚本无非就是遍历整个配置文件夹,挨个打包就行了,一百个渠道部刷刷刷就打完了,完全没压力

整个世界清净··

file

本帖只提供方案,并不是一个基础教程,所以xconfig的新建过程没详细写,如果你还不知道xcconfig怎么用,可以先参考这里: Using xcconfig files for your XCode Project

回复: 16
  • hugrup 2015-10-25 01:01:23 +0800

    mark,以后用到尝试下

  • SnapeServerus 2015-11-24 19:30:50 +0800

    可以通过xcconfig来控制copy bundle resources吗??

  • iBcker 2015-11-24 23:59:07 +0800

    @SnapeServerus 好像没这个配置

  • SnapeServerus 2015-11-25 18:47:28 +0800

    @iBcker 那其实有别的方法去控制bundle resources吗?shell可以吗?因为不同渠道包经常会引用相同的bundle文件(比如支付宝的bundle),这样会有问题。。

  • selforder 2015-11-26 23:23:05 +0800

    warning 我竟然在不是很明白的情况下看完了 我好厉害

  • yumengbdw 2015-11-27 00:30:50 +0800

    AppIcon和launchImage怎么更改的。

  • iBcker 2015-11-27 00:32:18 +0800

    @yumengbdw 在runscript阶段直接拷贝过去替换即可

  • yumengbdw 2015-11-27 18:37:25 +0800

    读取xcconfig里面配置的内容,如:UmengKey是怎么读取的,用预编译宏吗。

  • iBcker 2015-11-28 01:57:16 +0800

    @yumengbdw 回你邮件了~

  • linhuaxiechunhong 2015-12-04 00:17:35 +0800

    xcconfig里面配置的内容如何读去啊,也发我一份,可以吗?

  • linhuaxiechunhong 2015-12-04 00:21:47 +0800

    @iBcker xcconfig里面配置的内容如何读取啊,也发我一份,可以吗,找了好久都没找到如何读取?

  • iBcker 2015-12-04 00:24:12 +0800

    @linhuaxiechunhong 我写出来吧

    邮件内容:

    要在代码里读取,我还加了另一个地方
    在某个config写入下面这个试试
    GCCPREPROCESSORDEFINITIONS = $(value) kUmengKey=@\"$(UmengKey)\”
    然后代码里就有kUmengKey这个宏了

  • linhuaxiechunhong 2015-12-04 00:25:47 +0800

    @iBcker 谢谢啦,救了亲命了!

  • iBcker 2015-12-04 00:29:17 +0800

    @linhuaxiechunhong config是可以include的,可以把这部分公用的宏配置放在一个公共的config里,然后其他各个渠道对应的config包含这个配置。

    例如我写: #include "CommonConfig.xcconfig"

  • linhuaxiechunhong 2015-12-04 00:34:21 +0800

    @iBcker 不行啊,我试过了 ,找不到这个宏!

  • iBcker 2015-12-04 00:41:56 +0800

    @linhuaxiechunhong 行的,你在检查一下工程: 这个配置文件用了么? 是OC的代码么

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,见 Emoji cheat sheet
  • @name 会链接到用户页面,并会通知他
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
Ctrl+Enter