以实例演示Xcode中的Targets如何管理开发的构建的
标准的软件开发实践是在不同的开发环境下开发不同版本的软件,像我们案例中讲到的开发iphone应用。应用程序的开发版本通常使用一个不同于生产环境的数据库(或如分析的其他系统)。这就是为什么我们应该为不同的环境中使用单独的服务器和数据库。开发人员在测试期间通常都使用虚拟图像或虚拟数据。在测试环境中,使用诸如 “test comment”, “argharghargh” 和 “one more test comment”之类的测试数据并不少见。显然,你不希望你的真实用户看到这样的消息。如果你的应用程序使用了一个分析系统的情况下,你甚至会在测试阶段发送成千上万的事件。同样的,你不会把测试数据和生产数据放在同一个数据库中。这就是为什么总是推荐区分开发和生产环境。
在使用两个独立的环境时,你的应用程序需要有一个办法找出它应该连接到的环境。一种常用的方法是在你的主应用代理里定义一个全局变量,它会将您的应用程序初始化为开发或生产模式。
enum environmentType {
case development, production
}
let environment:environmentType = .production
switch environment {
case .development:
// set web service URL to development
// set API keys to development
print(“It‘s for development”)
case .production:
// set web service URL to production
// set API keys to production
print(“It’s for production”)
}
这种方法需要你每次切换环境时改变全局变量。虽然这种方法也许快捷,方便,但是它有一些重要的限制。首先,因为我们在开发和生产两个环境中使用一个Bundle ID,你不能在一台设备上安装应用的两个版本。当你需要要测试开发版本的应用程序时,同时仍在该设备上使用生产版本的应用,这就变的不方便了。此外,这种方法很有可能将应用的开发版本上传到应用商店。如果你忘记了改变这个全局变量,你将会上传错误的应用给你的用户。我记得有一次在提交应用程序到应用商店之前我忘记改变全局变量,用户下载的是应用的开发版本,这是可怕的。
在这篇文章中,我将展示一个更好的方法来区分开发和生产构建。具体而言,我们将在Xcode中创建一个开发的target。这种方法法适用于新的和现有的大型项目,所以你可以用一个现有的应用程序对照本教程。
通过应用这种方法,应用的开发和生产版本将使用相同的基础代码,但可以有不同的图标,bundle ID 和指向不同的数据库。发布和提交过程将会非常简单。最重要的是,你的测试人员和经理可以在同一设备上安装两个版本的应用程序,所以他们完全知道他们在体验哪个版本。
非常好我支持^.^
(0) 0%
不好我反对
(0) 0%