• 14
  • Dec

最近把 Manico 加入 Paddle 支付的支持后,我就一直在考虑如何更好的维护多个分支。毕竟现在 Manico 有官方版本(主要是可以用支付宝和 Paypal 支付),Paddle 版本(通过 Paddle 的支持)和 Mac App Store 版本。

之前我是通过 Git 的 branch 来管理官方版本和 Mac App Store 版本的,多了一个 Paddle 版本后,不能再通过开个 branch 的方式来做这些了,不然维护将会越来越困难。经朋友指点,我开始使用「Target」的方式来管理维护一个 App 的多个分支,折腾了半天基本搞定了,非常酷!

Manico 针对不同的支付平台有不同的版本,主要的不同在于支付环节的不同(Mac App Store除外),而具体核心代码是相同的,如果用 Git 分支来管理不同版本,在后期软件的新特性增加中,在碰到代码合并的情况时会比较痛苦。

而用 Multi-Target 的方式,只需要维护同一套代码,在代码中用 C Flags 来进行选择性的编译,从而生成不同的版本。

当然一切不仅仅是用 C Flags 来控制不同的代码而已,Xcode 的 Target 能控制你生成对象的几乎一切,包括产品名称是什么,链接什么样的库,复制什么样的资源文件等等。甚至包括从哪里更新,比如我用 Sparkle 来控制 Manico 的自动更新,我可以让官方版本和 Paddle 版本从不同的地址去更新,这样这两个版本就会比较相对独立地去运作了。

以下是我弄好 Multi-Target 后的 Manico,我想要编译不同的版本,只需要选择不同的 Scheme 就可以了,唯一需要注意的是,编译前后要清理一下,不然会混在一块。不知道除了在 Pre-Action 里面做清理工作外,还有什么方式能让这些 Target 在不同的文件夹里去编译?

Manico Multi-Targets

嗯,基本上就是这样。

Tag: Xcode.

<推广> Manico 是一个专门为 OS X 高效率人士设计的 App 启动与切换工具,使用它将加倍电脑日常使用的效率。

» You can leave a comment.

6 Comments

  1. zerone

    网站没有rss订阅吗

  2. boreme

    你好, 我想问一下, 我也是这样做的,

    但多个targets如果要加新类库需要导入新的framework, 就要每个target都要加一次, 还有比如设置 -fno-objc-arc 之类都要每个target重复一次

    有什么统一添加管理的方法吗?

    • 我也是这样操作的,毕竟不同的 Target 有不同配置,Xcode 无法为你智能的管理,该加什么 Framework 不该加什么只有你自己清楚。

  3. phnix

    唐巧也有一篇介绍用target来管理相似项目的博文。http://blog.devtang.com/blog/2013/10/17/the-tech-detail-of-ape-client-1/

Leave a Comment