Cette bibliothèque vous permet de créer et de gérer plusieurs environnements avec une seule application, comme si vous échangeiez des conteneurs.
Ceci est utile lorsque vous souhaitez tester plusieurs comptes dans une application intermédiaire.
Changement de langue : 日本語.
Normalement, il existe un environnement (Répertoire, UserDefaults, Cookies, Cache, ...) pour une application. Pour disposer de plusieurs environnements de débogage ou pour gérer plusieurs comptes, plusieurs applications identiques doivent être installées. (avec différents identifiants de bundle). Lors du débogage, il peut arriver que les comptes soient vérifiés à plusieurs reprises en se connectant et en se déconnectant.
Par conséquent, nous avons pensé qu’il serait possible de créer plusieurs environnements au sein de la même application et de basculer facilement entre eux. C'est pourquoi nous avons créé cette bibliothèque appelée AppContainer
.
Défaut | Débogage1 |
---|---|
Conteneur de sélection | Liste des conteneurs | Informations sur le conteneur |
---|---|---|
extension AppContainer {
static let group = . init ( groupIdentifier : " YOUR APP GROUP IDENTIFIER " )
}
let container = try AppContainer . standard . createNewContainer ( name : " Debug1 " )
Le conteneur d'origine est nommé DEFAULT
et possède un UUID de 00000000-0000-0000-0000-0000-0000-00000000000000000000
. Vous pouvez le vérifier avec la propriété isDefault
.
let containers : [ Container ] = AppContainer . standard . containers
let activeContainer : Container ? = AppContainer . standard . activeContainer
Il est recommandé de redémarrer l'application après avoir appelé cette méthode.
try AppContainer . standard . activate ( container : container )
try AppContainer . standard . activateContainer ( uuid : uuid )
Si le conteneur que vous supprimez est en cours d'utilisation, activez le conteneur par défaut avant de le supprimer.
try AppContainer . standard . delete ( container : container )
try AppContainer . standard . deleteContainer ( uuid : uuid )
try AppContainer . standard . clean ( container : container )
try AppContainer . standard . cleanContainer ( uuid : uuid )
Revenir à l’état avant l’utilisation de cette bibliothèque. Plus précisément, le conteneur DEFAULT sera activé et tous les autres fichiers liés à AppContainer seront supprimés.
try AppContainer . standard . reset ( )
Vous pouvez recevoir des notifications lorsque vous changez de conteneur. Si vous souhaitez ajouter un traitement supplémentaire à effectuer strictement avant et après le changement, utilisez le délégué comme décrit ci-dessous.
Le délégué peut être utilisé pour ajouter un traitement facultatif lors du changement de conteneur. Les actions sont effectuées dans l'ordre suivant.
// 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)
Cette bibliothèque permet de définir plusieurs délégués. Ajoutez ce qui suit.
AppContainer . standard . delegates . add ( self ) // if self is AppContainerDelegate compliant
Il est maintenu dans une référence faible et sera automatiquement libéré lorsque l'objet sera libéré. Si vous souhaitez désactiver le délégué, écrivez ce qui suit.
AppContainer . standard . delegates . remove ( self ) // if self conforms to AppContainerDelegate
Lors du changement de conteneur, presque tous les fichiers, à l'exception de certains fichiers système, sont enregistrés et restaurés dans le répertoire du conteneur. Vous pouvez définir les fichiers à exclure de ces déplacements.
Par exemple, ce qui suit est un exemple de cas dans lequel vous souhaitez utiliser UserDefault couramment dans tous les conteneurs. Ce fichier ne sera ni enregistré ni restauré lors du changement de conteneur.
appcontainer . customExcludeFiles = [
" Library/Preferences/<Bundle Identifier>.plist "
]
Tous les chemins de fichiers se terminant par le contenu de customExcludeFiles seront exclus du déplacement. Par exemple, la configuration suivante exclura le fichier nommé XXX.yy
sous tous les répertoires.
appcontainer . customExcludeFiles = [
" XXX.yy "
]
Fournit une interface utilisateur pour utiliser AppContainer. SwiftUI et UIKit sont pris en charge.
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 )
Licence MIT