如何避免在Xcode的源代码管理中包含调试代码?

时间:2011-06-12 01:57:25

标签: xcode preprocessor

在测试我们的iOS应用时,我和我的团队需要禁用SSL证书验证。

目前,我们使用的是硬编码#define

// In Prefix.pch
#define ALLOW_INVALID_SSL_CERTS

// Elsewhere
#ifdef ALLOW_INVALID_SSL_CERTS
// Code to disable SSL certificate validation
#endif

因此,我们必须记得每次发布新版本时都删除#define

理想情况下,我们希望找到一种方法来在Xcode中启用一个不会被检入源代码控制的标志。

我发现使用应用程序参数([[NSProcessInfo processInfo] arguments)可以实现这一点;但是这可能是可利用的,因为攻击者可以在应用程序启动之前找到一种方法向应用程序提供有问题的参数。

还有另一种方法可以在Xcode中设置它吗?

2 个答案:

答案 0 :(得分:1)

尝试在构建设置中设置其他C标志,如调试设置中的-DDEBUG = 1,并在发布设置中将此设置为-DDEBUG = 0。然后在你的前缀文件中定义你的调试宏。

#if DEBUG
#define ALLOW_INVALID_SSL_CERTS 1
#else
#define ALLOW_INVALID_SSL_CERTS 0
#endif

我是这样做的。如果您想知道在哪里设置-DDEBUG选项,可以使用以下屏幕截图。

enter image description here

答案 1 :(得分:0)

尝试在开发机器上定义环境变量,例如IOS_PROJ_ALLOW_INVALID_CERT = 1(并确保它未在您的构建机器上定义)。

然后修改项目的预处理器宏构建设置,将ALLOW_INVALID_SSL_CERTS宏设置为$(IOS_PROJ_ALLOW_INVALID_CERT)env var的值。