iPhone项目不变

Ami*_*neG 2 iphone xcode constants objective-c c-preprocessor

我想在我的项目中有一个常量来改变Lite和Pro版本.我不认为这是最好的方式,但我想:

  1. 在我的app委托中添加一个常量

    #define BUILD_PRO 1 //0 => LITE, 1 => PRO
    
    Run Code Online (Sandbox Code Playgroud)
  2. 当我需要它时,我导入appDelegate并测试它:

    #import "myAppDelegate.h"
    
    Run Code Online (Sandbox Code Playgroud)

    然后

    #if (BUILD_PRO==1)
    NSLog(@"this is pro version");
    #endif
    
    Run Code Online (Sandbox Code Playgroud)

问题是此代码在某些文件中有效,在其他文件中无效.我没有找到任何解释这种行为; 有人有解释吗?

从同一个项目中获得两个版本(pro和lite)的正确方法是什么?

Red*_*ing 7

是的.预处理器定义是实现它的方法.

我想它是在一些文件而不是其他文件中工作,因为有些文件可能不包含你的myAppDelegate.h文件,因此没有得到定义.我建议定义"Lite版本"和"专业版"目标,并在每个目标的构建配置中设置预处理器变量.

一旦你创建了一个精简版目标(只需在你的"专业版"目标上选择重复的目标上下文菜单项来创建精简版):

  • 进入项目/编辑目标"专业版"菜单项
  • 转到构建选项卡,找到预处理部分(向下).
  • 将BUILD_PRO = 1添加到"预处理宏"部分.

这样您就不必更改任何头文件,只需要构建精简或完整目标.如果您需要在产品的任何位置添加专业版功能,请使用:

#ifdef BUILD_PRO
// do some pro stuff
#endif
Run Code Online (Sandbox Code Playgroud)