【问题标题】:How to build a free version from a paid version without duplicating the Xcode 4 project?如何在不复制 Xcode 4 项目的情况下从付费版本构建免费版本?
【发布时间】:2011-12-10 12:13:54
【问题描述】:

我听说可以通过使用目标和条件编译指令(如

)来构建应用程序的不同变体,而无需复制 Xcode 项目
IF !FREE_VERSION 
[self loadGreatFeature];
ELSE
[self loadBoringFeature];

所以:

  • 如何设置 Xcode 4 以便能够区分构建/归档项目的免费版本还是付费版本?

  • 如何告诉 Xcode 4 在付费版本中包含一组特定的图像和其他资源,但在免费版本中不包含(反之亦然)?

  • 如何告诉 Xcode 4 构建免费或付费版本? (不要一直构建它们,因为这会减慢开发速度)

  • 这种方法有哪些注意事项?

我知道复制 Xcode 项目的注意事项是什么:一旦我修复了任一版本的错误,我必须在另一个版本中做同样的事情。进行改进和修改也是如此。

【问题讨论】:

    标签: iphone ios xcode xcode4 conditional


    【解决方案1】:

    在 Xcode 中打开您的项目并选择 Project Navigator 中的顶级项目。您应该会看到项目的目标列表。

    为您的应用的免费版本创建一个新目标。一个简单的方法是控制并单击与您想要的相似的当前目标并复制它。

    选择您的新目标。在 Build Phases 选项卡中,您可以控制哪些源文件将被构建为该目标的一部分,以及为其复制哪些资源。在 Build Settings 选项卡中搜索 Preprocessor Macros 并为所有构建配置添加一个新宏,例如 MYAPPLITE=1。然后,您可以在代码中进行条件编译,例如:

    #ifdef MYAPPLITE
        [self loadBoringFeature];
    #else
        [self loadGreatFeature];
    #endif
    

    最后,从产品菜单中选择Edit Scheme...。应该已经为您的新目标创建了一个新方案。如果需要,您可以在 Manage Schemes 表中重命名它。您可以在此处控制构建、运行、归档等新目标的特定设置。

    要在构建免费版本或付费版本之间切换,您只需更改活动方案。

    唯一真正需要注意的是,您需要使新目标的设置保持最新。

    【讨论】:

    • 为什么“MYAPPLITE=1”中有“=1”? “MYAPPLITE”还不够吗?
    • 解决方案“唯一真正需要注意的是,您需要使新目标的设置保持最新。”:在复制目标之前,我将所有目标特定设置转移到项目级别.现在两个目标都从项目中继承了这些设置。
    • 已完成上述步骤。但是,当我构建免费版本时,该应用程序立即崩溃,并且没有登录控制台。可能是什么问题?
    • 是的,您可以省略“=1”,我出于习惯添加了一个值。关于崩溃 - 最初新目标应该与原始目标完全相同,该目标仍然可以构建和运行吗?
    • 是的。发现崩溃发生是因为我没有删除设备上以前安装的应用程序。现在它起作用了。条件编译除外。它现在可以工作了,但不知何故 Xcode 4 并没有在 #else 部分语法高亮任何条件代码......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    • 2023-03-06
    • 2015-09-09
    • 1970-01-01
    相关资源
    最近更新 更多