Esta biblioteca le permite crear y administrar múltiples entornos con una sola aplicación, como si estuviera intercambiando contenedores.
Esto es útil cuando desea probar varias cuentas en una aplicación de prueba.
Cambio de idioma: 日本語.
Normalmente hay un entorno (Directorio, UserDefaults, Cookies, Caché, ...) para una aplicación. Para tener múltiples entornos para depurar o manejar múltiples cuentas, se deben instalar varias aplicaciones idénticas. (con diferentes ID de paquete). Durante la depuración, puede haber casos en los que las cuentas se verifiquen repetidamente iniciando y cerrando sesión.
Por lo tanto, pensamos que sería posible crear múltiples entornos dentro de la misma aplicación y cambiar entre ellos fácilmente. Por eso creamos esta biblioteca llamada AppContainer
.
Por defecto | Depurar1 |
---|---|
Seleccionar contenedor | Lista de contenedores | Información del contenedor |
---|---|---|
extension AppContainer {
static let group = . init ( groupIdentifier : " YOUR APP GROUP IDENTIFIER " )
}
let container = try AppContainer . standard . createNewContainer ( name : " Debug1 " )
El contenedor original se denomina DEFAULT
y tiene un UUID de 00000000-0000-0000-0000-0000-0000-00000000000000000000
. Puedes comprobarlo con la propiedad isDefault
.
let containers : [ Container ] = AppContainer . standard . containers
let activeContainer : Container ? = AppContainer . standard . activeContainer
Se recomienda reiniciar la aplicación después de llamar a este método.
try AppContainer . standard . activate ( container : container )
try AppContainer . standard . activateContainer ( uuid : uuid )
Si el contenedor que está eliminando está en uso, active el contenedor predeterminado antes de eliminarlo.
try AppContainer . standard . delete ( container : container )
try AppContainer . standard . deleteContainer ( uuid : uuid )
try AppContainer . standard . clean ( container : container )
try AppContainer . standard . cleanContainer ( uuid : uuid )
Vuelva al estado anterior a que se utilizara esta biblioteca. Específicamente, se habilitará el contenedor DEFAULT y se eliminarán todos los demás archivos relacionados con AppContainer.
try AppContainer . standard . reset ( )
Puede recibir notificaciones al cambiar de contenedor. Si desea agregar procesamiento adicional que se realizará estrictamente antes y después del cambio, use delegado como se describe a continuación.
Delegado se puede utilizar para agregar procesamiento opcional al cambiar de contenedor. Las acciones se realizan en el siguiente orden.
// 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)
Esta biblioteca permite configurar varios delegados. Añade lo siguiente.
AppContainer . standard . delegates . add ( self ) // if self is AppContainerDelegate compliant
Se mantiene en una referencia débil y se liberará automáticamente cuando se libere el objeto. Si desea desarmar al delegado, escriba lo siguiente.
AppContainer . standard . delegates . remove ( self ) // if self conforms to AppContainerDelegate
Al cambiar de contenedor, casi todos los archivos, excepto algunos archivos del sistema, se guardan y restauran en el directorio del contenedor. Puede configurar archivos para que se excluyan de estos movimientos.
Por ejemplo, el siguiente es un ejemplo de un caso en el que desea utilizar UserDefault de forma común en todos los contenedores. Este archivo no se guardará ni restaurará al cambiar de contenedor.
appcontainer . customExcludeFiles = [
" Library/Preferences/<Bundle Identifier>.plist "
]
Todas las rutas de archivo que terminen con el contenido de customExcludeFiles se excluirán del movimiento. Por ejemplo, la siguiente configuración excluirá el archivo denominado XXX.yy
de todos los directorios.
appcontainer . customExcludeFiles = [
" XXX.yy "
]
Proporciona una interfaz de usuario para usar AppContainer. Se admiten SwiftUI y 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 )
Licencia MIT