【问题标题】:How to use a preprocessor definition symbol in Xcode to do some actions如何在 Xcode 中使用预处理器定义符号来执行一些操作
【发布时间】:2013-11-19 01:51:47
【问题描述】:

在我的应用程序中,我为下一个版本实现的某些部分工作,

所以我们需要阻止这些版本的一些实现。

我们的上级让我使用 pre 宏处理器,有 #ifDef, endif 这样的,你需要定义版本号在构建设置中作为预处理器宏

我在构建设置中添加了一个用户定义的设置“App_Version”,

" 我如何使用它

#ifDef AppVersion 1.0
NSLOG (current version implementation)
else
NSLOG (NEXT version implementation)

其实我对它不太了解,所以我的解释很差

【问题讨论】:

    标签: objective-c xcode macros xcode5


    【解决方案1】:
    #if App_Version == 1.0
    

    我不记得 XCode 中新的预处理器宏是如何定义的,但我认为您没有正确定义它。见How do I define preprocessor macros in Xcode 4?

    但是,远不推荐使用预处理器宏来处理此类事情。

    你应该

    1. 创建一个从包中读取应用程序版本的方法
    2. 调用方法检查版本并使用标准if-elseif-else

    虽然我无法想象在 iPhone 开发中为什么要使用这样的宏/方法。您要构建多少个版本的应用程序?我为 iOS 实现的所有应用程序只需要 1 个版本 - 最新版本。我看不出你有什么理由要从当前代码构建旧的应用程序版本。

    使用版本控制系统,如果您要将下一个版本的功能实现到当前代码中,请使用专用分支!否则这只是一团糟,你的主管……不聪明……因为没有看到它。

    【讨论】:

      【解决方案2】:

      编译器不需要(或不想)知道有关应用程序版本的任何信息(它是应用程序提交过程的信息)。这不应该用预处理器宏来完成,除非你想定义你自己的(即使那样,我也不推荐它)。您应该在运行时检查应用程序版本

      [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
      

      并基于此防止在当前版本中访问新功能。更一般地说,我会考虑使用像 git flow 这样的分支模型来处理这样的事情。当您有 3,4,5 ... 版本要处理时会发生什么。预处理器宏将成为管理的噩梦。

      【讨论】:

        猜你喜欢
        • 2010-09-26
        • 1970-01-01
        • 2011-12-12
        • 1970-01-01
        • 2021-01-17
        • 2014-01-17
        • 1970-01-01
        • 1970-01-01
        • 2012-12-29
        相关资源
        最近更新 更多