EnvironmentSwitcher
ReadMe: [英文] | [俄文]
EnvironmentSwitcher - 用于即时更改环境的库。适用于测试构建,适用于需要更改不同服务器和http端点的开发人员/测试人员/经理。
为什么?
在应用开发中,有时会出现这样的情况,即一个构建应该在不同的环境中进行测试。为此,开发人员应该创建一些具有相同的代码库但具有不同的http端点的构建。这会导致
- 为测试人员创建多个构建,这会减慢开发过程;
- 混淆,哪个构建号和版本与某个或另一个环境匹配。
该库有助于解决以下情况
- 一个构建应在开发服务器上测试,并检查合并到阶段服务器是否成功;
- 我们有不同的环境,具有不同的数据库和数据。构建应该在所有这些环境中进行测试;
- 检查是否成功发布到生产,并且
- 在之前的构建中没有任何东西被破坏;
- 在后端发布后,当前构建正常工作。
特点
- 列出可用的服务器
- 适应默认服务器
- 启动屏幕后,在启动画面加载前可选择服务器
- 作为其他界面之上的显示
UIWindow
和UIViewController
- 支持肖像和横屏Orientation
- 本地化 俄文
- 本地化 英文
- 在不同应用启动之间保存最后选择的设置
- 可配置性
- 第一次启动时对测试人员提供的交互式说明
- 扩展示例
- 文档
需求
- iOS 10.0+
- Xcode 10.2+
- Swift 5+
安装
CocoaPods
将以下条目添加到您的Podfile
pod 'EnvironmentSwitcher'
在终端中运行 pod install
命令后。不要忘记在您计划使用此库的文件中导入 import EnvironmentSwitcher
手动
从发行版下载 master
分支(稳定版本)或您感兴趣的其他版本。解压并将 Source
文件夹拖放到您的项目中。
如何工作
- 在初始化时设置可用服务器的列表,以及可选的默认服务器(如果没有设置,默认服务器为可用服务器列表的第一个元素)。
- 库将这些无形的按钮添加到主
UIWindow
中(屏幕水平中心,以及从小工具栏向顶部的小空隙)。按钮可见,不会覆盖屏幕内容或NavigationBar
中的标题。 - 在无形按钮上双击,将在这个区域显示带有图标的多功能按钮。此按钮可以覆盖内容。
- 长按2秒或更长时间,在主窗口上方添加新的
UIWindow
,并显示包含可提供服务器的视图控制器。
需要接收有关环境变化的通知的对象应为 EnvironmentSwitcherDelegate
协议的成员声明方法 func serverDidChanged(_ newServer: String)
。
UIViewController
之前。此时,UIApplication
中的 keyWindow
将会被替换。为了在启动第一个 UIViewController
之前正确选择环境,您应该在 AppDelegate
方法中初始化 EnvironmentSwitcher。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool
否则,您应该在初始化时将 shouldSelectOnStart
设置为 false
。在这种情况下,只能通过手动更改服务器来启动更改,并且不会替换 keyWindow
。
示例
使用自定义 UIWindow
容器运行
class MyWindowContainer: MainWindowContaner {
var mainWindow: UIWindow? {
return UIWindow()
}
}
//...
class SomeClass {
private(set) var switcher: EnvironmentSwitcher
init() {
let config = ServersListConfigurator(servers: ["https://production.com", "https://stage.com", "https://develop.com"], current: "https://stage.com")
let application = MyWindowContainer()
switcher = EnvironmentSwitcher(config, app: application)
switcher.delegate = self
}
}
extension SomeClass: EnvironmentSwitcherDelegate {
func serverDidChanged(_ newServer: String) {
print("New server is \(newServer)")
}
}
使用默认 UIWindow
容器运行,无首选服务器和禁用自动启动
class SomeClass {
private(set) var switcher: EnvironmentSwitcher
init() {
let config = ServersListConfigurator(servers: ["https://production.com", "https://stage.com", "https://develop.com"], shouldSelectOnStart: false)
switcher = EnvironmentSwitcher(config)
switcher.delegate = self
}
}
extension SomeClass: EnvironmentSwitcherDelegate {
func serverDidChanged(_ newServer: String) {
print("New server is \(newServer)")
}
}