所以我正在开展一个学习项目,我正在尝试创建一个包含 URL 存储的头文件,以便您只需更改一个标志即可从调试更改为生产。这就是我试图用编译器做的事情,这显然是错误的。我找不到任何有关如何在 Objective-C 中执行此操作的信息,所以这就是我来到这里的原因。
#define DEBUG 1
#if DEBUG
NSString *URL = @"dev.myserver.com";
#else
NSString *URL = @"myserver.com";
#endif
@interface GlobalURLRefrences : NSObject {
//NSString *URL; removed this
}
//@property (nonatomic, retain) NSString *URL; removed this
@end
现在我不确定是否需要将其声明为属性(property)。另外,一旦正确编译了它,如何从外部类访问它(当然在您 #import
globalURL 的类之后)任何关于正确方法的指导将不胜感激.
最佳答案
Geoff:我的 Mac App Store 应用程序需要这种条件来验证收据,我使用单独的构建配置和 -D
标志来完成此操作。在调试配置中,添加一个编译器标志,例如 -DDEBUG_BUILD
(注意开头的双 D 并且没有空格。),然后使用
#ifdef DEBUG_BUILD
#define SERVER_URL_STRING @"http://dev.myserver.com"
#else
#define SERVER_URL_STRING @"http://myserver.com"
#endif
这样,您就不必在每次构建生产时记住交换#define
。 (你最终会忘记的。每个人都会忘记。) - 如果你这样做,那么你也不需要 @property
或 ivar 声明。- 刚刚看到你已经把它们拿出来了。
关于iphone - 条件编译和 Objective-C/Xcode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4441397/