EnvironmentSwitcher 1.1.2

EnvironmentSwitcher 1.1.2

Stanislav Telnov维护。



  • Stas Telnov

EnvironmentSwitcher

Platforms iOS version Swift version CocoaPods License

ReadMe: [英文] | [俄文]

EnvironmentSwitcher - 用于即时更改环境的库。适用于测试构建,适用于需要更改不同服务器和http端点的开发人员/测试人员/经理。

⚠️️ 注意 强烈建议只在非生产构建中使用此库,不要将其用于应用商店构建。

为什么?

在应用开发中,有时会出现这样的情况,即一个构建应该在不同的环境中进行测试。为此,开发人员应该创建一些具有相同的代码库但具有不同的http端点的构建。这会导致

  • 为测试人员创建多个构建,这会减慢开发过程;
  • 混淆,哪个构建号和版本与某个或另一个环境匹配。

该库有助于解决以下情况

  • 一个构建应在开发服务器上测试,并检查合并到阶段服务器是否成功;
  • 我们有不同的环境,具有不同的数据库和数据。构建应该在所有这些环境中进行测试;
  • 检查是否成功发布到生产,并且
    • 在之前的构建中没有任何东西被破坏;
    • 在后端发布后,当前构建正常工作。

特点

  • 列出可用的服务器
  • 适应默认服务器
  • 启动屏幕后,在启动画面加载前可选择服务器
  • 作为其他界面之上的显示 UIWindowUIViewController
  • 支持肖像和横屏Orientation
  • 本地化 俄文
  • 本地化 英文
  • 在不同应用启动之间保存最后选择的设置
  • 可配置性
  • 第一次启动时对测试人员提供的交互式说明
  • 扩展示例
  • 文档

需求

  • iOS 10.0+
  • Xcode 10.2+
  • Swift 5+

安装

CocoaPods

将以下条目添加到您的Podfile

pod 'EnvironmentSwitcher'

在终端中运行 pod install 命令后。不要忘记在您计划使用此库的文件中导入 import EnvironmentSwitcher

手动

发行版下载 master 分支(稳定版本)或您感兴趣的其他版本。解压并将 Source 文件夹拖放到您的项目中。

如何工作

  1. 在初始化时设置可用服务器的列表,以及可选的默认服务器(如果没有设置,默认服务器为可用服务器列表的第一个元素)。
  2. 库将这些无形的按钮添加到主 UIWindow 中(屏幕水平中心,以及从小工具栏向顶部的小空隙)。按钮可见,不会覆盖屏幕内容或 NavigationBar 中的标题。
  3. 在无形按钮上双击,将在这个区域显示带有图标的多功能按钮。此按钮可以覆盖内容。
  4. 长按2秒或更长时间,在主窗口上方添加新的 UIWindow,并显示包含可提供服务器的视图控制器。

需要接收有关环境变化的通知的对象应为 EnvironmentSwitcherDelegate 协议的成员声明方法 func serverDidChanged(_ newServer: String)

⚠️️ 注意 默认情况下,EnvironmentSwitcher 以选择服务器模式初始化,在启动第一个 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)")
    }
}