我希望使用Xcode的方案来确定运行我的应用程序的服务器。我有一个应用程序从服务器获取其信息。像大多数人一样,我有一个开发服务器,一个登台服务器和一个生产服务器。
我希望为每个Xcode创建一个方案,其中Xcode将注入正确的URL。我是否复制了运行方案并添加了环境变量?这是最好的做事方式,我不特别希望在我的服务器类中使用#ifdef并在每次更改服务器时将其设置为代码。有人能指出我正确的方向吗?
仅供参考:我正在使用Xcode 5.0.2 iOS7 SDK。
[编辑]每个人都提出了一些很好的建议,但我觉得@ redent84的答案最适合我的需要。虽然我发现有趣的是没有人真正建议使用不同的方案。 [/编辑]
答案 0 :(得分:10)
我建议您为每个环境创建不同的XCode Targets。我建议您更改应用程序的应用程序标识符,例如,生产应用程序为com.mycompany.App
,DEVEL版本为com.mycompany.App-DEVEL
。这样,您可以在HockeyApp或TestFlight中单独跟踪应用程序,并且您可以同时在同一设备中同时使用这两个应用程序。
然后,添加为每个目标定义环境的预处理器宏。例如DEVEL
用于开发。
如果网址是硬编码的,只需添加#ifdef
指令即可选择网址:
#ifdef DEVEL
#define ENDPOINT_URL @"http://develserver:8080/EndPoint"
#elif defined(STAGING)
#define ENDPOINT_URL @"http://stagingserver:8080/EndPoint"
#else
#define ENDPOINT_URL @"http://app.mycompany.com/EndPoint"
#endif
这种方式不易出错,无法分发开发版本,更易于维护,并允许您将自定义代码添加到不同版本。例如,您可能希望在登录屏幕中包含版本号或显示用于开发的警报对话框,但不包括分发版本。
答案 1 :(得分:5)
在plist中使用一个键(对于每个模式,例如:URL_TO_USE),使用define创建一个'快捷方式'来获取值。
#define MyURL [[NSBundle mainBundle] objectForInfoDictionaryKey:@"URL_TO_USE"]
修改强>
您必须拥有多个目标。每个目标应指向不同的.plist文件。看到: How to configure independent sets of runtime settings in XCode
答案 2 :(得分:0)
我通过为每个方案设置自定义预处理器定义来处理这个问题。