如何在特定应用程序中重新定义框架常量?

How to redefine framework constant in specific app?

我正在开发一个 Objective-C SDK,它分为两部分,一个包含视图的包和一个静态编译的库。此 SDK 与 REST API 通信,后者有两个部署、开发和生产。

注意: 当我说 "pointing to develop" 我的意思是 SDK 正在与开发 REST API 通信,当我说 "pointing to prod"我的意思是 SDK 正在与生产 REST API.

通信

我目前有一个名为 NetworkConstants.h 的常量文件,其中包含:


#ifdef DEBUG
// development REST API
#define API_BASE_URL @"http://xxx.xxx.xxx.xxx:port"
#else
// production REST API
#define API_BASE_URL @"http://api.company.com"
#endif

#define ROUTE_A API_BASE_URL @"/route_a"
#define ROUTE_B API_BASE_URL @"/route_b"
...

然后我会在需要的地方使用 ROUTE_...

此 SDK 当前位于包含 SDK 项目的工作区、非常 简单的测试应用程序,以及由同意测试我们产品的公司开发的演示应用程序(我说演示应用程序是因为我们用它来演示产品)。

目标

我希望能够将应用程序推送给团队成员(通过 iTune Connect),并让测试应用程序始终指向开发,演示应用程序始终指向生产(尽管我在开发时指向开发).

问题

当我将项目归档并提交到 iTune Connect 时,项目在 Release 中编译,因此 DEBUG 未设置且 SDK 指向 prod。我创建了一个自定义构建目标和构建脚本,用于在 Debug 中编译 SDK(因此应该设置 DEBUG)。然后,我将此构建目标作为 Target Dependancy 添加到测试应用程序的 Build Phases 中,并将构建目标生成的框架添加到测试应用程序 Linked Frameworks and Libraries 中。

这个^没有用。看起来 SDK 项目正在编译 DEBUG 未设置,即使我正在引用自定义构建脚本生成的框架并且此脚本使用 -configuration Debug 构建:(

感谢您提供的任何帮助,并提前致谢。

解决方案是进入测试应用程序的 Edit Scheme 菜单并将项目设置为存档在 Debug 而不是 Release