ben*_*ink 12 xcode objective-c ios
我希望使用Xcode的方案来确定运行我的应用程序的服务器.我有一个应用程序从服务器获取其信息.像大多数人一样,我有一个开发服务器,一个登台服务器和一个生产服务器.
我希望为每个Xcode创建一个方案,其中Xcode将注入正确的URL.我是否复制了运行方案并添加了环境变量?这是最好的做事方式,我不特别希望在我的服务器类中使用#ifdef并在每次更改服务器时将其设置为代码.有人能指出我正确的方向吗?
仅供参考:我正在使用Xcode 5.0.2 iOS7 SDK.
[编辑]每个人都提出了一些很好的建议,但我觉得@ redent84的答案最适合我的需要.虽然我发现有趣的是没有人真正建议使用不同的方案.[/编辑]
red*_*t84 10
我建议您为每个环境创建不同的XCode目标.我建议您更改应用程序的应用程序标识符,例如,生产应用程序将是com.mycompany.App和DEVEL版本com.mycompany.App-DEVEL.这样,您可以在HockeyApp或TestFlight中单独跟踪应用程序,并且您可以同时在同一设备中同时使用这两个应用程序.
然后,添加为每个目标定义环境的预处理器宏.DEVEL例如,用于发展.
如果URL是硬编码的,只需添加一条#ifdef指令来选择URL:
#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
Run Code Online (Sandbox Code Playgroud)
这种方式不易出错,无法分发开发版本,更易于维护,并允许您将自定义代码添加到不同版本.例如,您可能希望在登录屏幕中包含版本号或显示用于开发的警报对话框,但不包括分发版本.
在plist中使用一个键(对于每个模式,例如:URL_TO_USE),使用define创建一个"快捷方式"来获取值.
#define MyURL [[NSBundle mainBundle] objectForInfoDictionaryKey:@"URL_TO_USE"]
Run Code Online (Sandbox Code Playgroud)
编辑
您必须拥有多个目标.每个目标应指向不同的.plist文件.请参阅: 如何在XCode中配置独立的运行时设置集