该库允许您使用单个应用程序创建和管理多个环境,就像交换容器一样。
当您想要在临时应用程序中测试多个帐户时,这非常有用。
语言切换:日本语。
通常,一个应用程序有一种环境(Directory、UserDefaults、Cookies、Cache...)。要拥有多个调试环境或处理多个帐户,必须安装多个相同的应用程序。 (具有不同的捆绑 ID)。在调试时,可能会出现通过登录和注销来重复检查帐户的情况。
因此,我们认为可以在同一个应用程序中创建多个环境并在它们之间轻松切换。这就是我们创建这个名为AppContainer
库的原因。
默认 | 调试1 |
---|---|
选择集装箱 | 集装箱清单 | 集装箱信息 |
---|---|---|
extension AppContainer {
static let group = . init ( groupIdentifier : " YOUR APP GROUP IDENTIFIER " )
}
let container = try AppContainer . standard . createNewContainer ( name : " Debug1 " )
原始容器名为DEFAULT
,UUID 为00000000-0000-0000-0000-0000-0000-00000000000000000000
。您可以使用属性isDefault
进行检查。
let containers : [ Container ] = AppContainer . standard . containers
let activeContainer : Container ? = AppContainer . standard . activeContainer
建议调用此方法后重新启动应用程序。
try AppContainer . standard . activate ( container : container )
try AppContainer . standard . activateContainer ( uuid : uuid )
如果您要删除的容器正在使用中,请在删除之前激活默认容器。
try AppContainer . standard . delete ( container : container )
try AppContainer . standard . deleteContainer ( uuid : uuid )
try AppContainer . standard . clean ( container : container )
try AppContainer . standard . cleanContainer ( uuid : uuid )
恢复到使用该库之前的状态。具体来说,将启用 DEFAULT 容器,并删除所有其他与 AppContainer 相关的文件。
try AppContainer . standard . reset ( )
切换容器时您可以收到通知。如果您想添加在切换之前和之后严格执行的附加处理,请按如下所述使用委托。
Delegate可用于在切换容器时添加可选处理。这些操作按以下顺序执行。
// the `activate` method is called
// ↓↓↓↓↓↓↓↓↓↓
func appContainer ( _ appContainer : AppContainer , willChangeTo toContainer : Container , from fromContainer : Container ? ) // Delegate(before container switch)
// ↓↓↓↓↓↓↓↓↓↓
// Container switching process (library)
// ↓↓↓↓↓↓↓↓↓↓
func appContainer ( _ appContainer : AppContainer , didChangeTo toContainer : Container , from fromContainer : Container ? ) // Delegate (after container switch)
该库允许设置多个委托。添加以下内容。
AppContainer . standard . delegates . add ( self ) // if self is AppContainerDelegate compliant
它被保存在弱引用中,并且当对象被释放时会自动释放。如果您想取消设置委托,请编写以下内容。
AppContainer . standard . delegates . remove ( self ) // if self conforms to AppContainerDelegate
切换容器时,除了部分系统文件外,几乎所有文件都会保存并恢复到容器目录中。您可以设置要从这些移动中排除的文件。
例如,以下是您希望在所有容器中共同使用 UserDefault 的情况示例。切换容器时不会保存或恢复该文件。
appcontainer . customExcludeFiles = [
" Library/Preferences/<Bundle Identifier>.plist "
]
所有以 customExcludeFiles 内容结尾的文件路径都将从移动中排除。例如,以下配置将排除所有目录下名为XXX.yy
的文件。
appcontainer . customExcludeFiles = [
" XXX.yy "
]
提供使用 AppContainer 的 UI。支持 SwiftUI 和 UIKit。
import AppContainerUI
// show Container List
ContainerListView ( appContainer : . standard , title : String = " Containers " )
// container info view
ContainerInfoView ( appContainer : . standard , container : container )
import AppContainerUI
// show Container List
ContainerListViewController ( appContainer : . standard , title : String = " Containers " )
// container info view
ContainerInfoViewController ( appContainer : . standard , container : container )
麻省理工学院许可证