我如何pipe理构buildiPhone应用程序的精简版和付费版本?

我开始想要考虑构build我的iPhone应用程序的精简版。 我在网上发现了一些关于这个过程的内容,即:

http://developer.apple.com/tools/XCode/XCodeprojects.html

http://www.pacificspirit.com/blog/2009/01/27/building_for_multiple_iphone_targets_in_xcode

我特别感兴趣的是简化pipe理哪些文件包含在我的应用程序的不同版本中的过程,因为我不断修改和增强付费版本。

原来的答案是从应用程序购买前几天。 现在正确的答案是发送一个单一的二进制文件,并通过应用程序升级提供您的付费版本。 它的代码稍多一些,但它是单一的货物,你的转换率可能会更好。

不过,如果你仍然想要你的应用程序的版本:

Xcode对多个目标有很好的支持。

从项目菜单中select“新build目标…”。 添加另一个iPhone可执行文件(cocoa触摸应用程序),然后你可以在资源的基础上指定哪些项目包含在你的目标中。 这可以包括只编译您的付费版本的某些代码。

右击“组和文件”列表标题(顶部lhs)并启用“目标成员”,可以快速获取当前目标中包含的和未包含的视觉反馈。

您可以在build立模拟器或iPhone之间进行切换时,以相同方式切换构build不同的目标。

要在构build时指定特定类的行为方式,您可以做两件事 – 包括两个版本的类,这两个版本分别针对各自的目标构build,或者可以为预处理器设置构build时间标记。 在“群组和文件”列表中select目标,然后在该目标上select“获取信息”。 转到生成选项卡并search“预处理”。 您应该看到一个名为“预处理macros”的项目,将LITE添加到您的lite目标中,并以相同的方式将付费添加到您的付费目标。

在源文件中,您可以在编译时确定使用#ifdef LITE等编译的版本。

更进一步,您可以基于#ifdef LITE设置全局标志或AppDelegate成员variables,并更改Lite和付费应用程序在运行时的行为。 虽然我不确定自己有什么价值。

作为开发人员,您希望尽可能less编写代码(减less错误,减less时间)。 由于版本差异,你将不得不投入更多的工作和单独的testing。

除非你正在制作一个昂贵的黑客工具,否则你可能会考虑尽可能保持简单的差异 – 只要有一些隐藏的偏好或设置。 这样,大部分检查和testing都会在两个版本中完成相同的工作,只有很less的代码会有所不同。 关键的问题不是让自己成为开发者。

有不同版本的原因是为了确保免费不能被砍成“付费”的版本。 那些试图绕过这种简单限制的人主要是那些将越狱手机的人。 不pipe你做什么,你都不会在任何情况下得到他们的钱,除非他们如此惊叹,否则他们只是为了表示赞赏而购买。

“花园”的创造者详细介绍了在这里创build精简版的不同方法的优缺点:

http://gamesfromwithin.com/from-full-to-lite-in-under-an-hour

我发现成功与:

教程 – 相同的Xcode项目为iPhone创build多个产品 http://adeem.me/blog/2009/04/18/tutorial-same-xcode-project-create-multiple-products-for-iphone/

它涵盖了Roger Nolan在他对问题的回答中提到的大部分内容,而是逐步采用屏幕截图。

它允许您使用C#ifdef在您的应用程序中包含或排除function。

有些细节并不完全正确 – 因为我相信Xcode的不同之处 – 但是找出正确的/新的方法来完成每一步并不难。

注意:您将不得不去苹果公司,并为Lite版本的应用程序获取新的应用程序ID。 本教程中概述的步骤将创buildinfo.plist文件的副本,您可能会重命名为infoLite.plisttypes – 在此文件中,您需要更改“Bundle Identifier”以匹配这个新的appID 。

使用iPhone 3.0,您可以使用应用程序内购买,而不必使用多个应用程序即可解锁全部function。 我也认为这样可以避免人们免费获得这个,但是我不太确定。

我使用了一个git分支。 我分支我的主要应用程序,并做了一些调整,以禁用一堆内容。 现在我主要在主分公司工作,在重大事态发生的时候,最近又转为精简合并。 工作得很好。

更好的方法是只有一个项目,多个目标,而不是每个版本的应用程序。 那么什么是目标: 多个目标