Mit dieser Bibliothek können Sie mehrere Umgebungen mit einer einzigen Anwendung erstellen und verwalten, als würden Sie Container austauschen.
Dies ist nützlich, wenn Sie mehrere Konten in einer Staging-Anwendung testen möchten.
Sprachumschaltung: 日本語.
Normalerweise gibt es eine Umgebung (Verzeichnis, Benutzereinstellungen, Cookies, Cache, ...) für eine App. Um mehrere Umgebungen zum Debuggen zu haben oder mehrere Konten zu verwalten, müssen mehrere identische Apps installiert sein. (mit unterschiedlichen Bundle-IDs). Beim Debuggen kann es vorkommen, dass Konten durch An- und Abmelden wiederholt überprüft werden.
Daher dachten wir, dass es möglich wäre, mehrere Umgebungen innerhalb derselben App zu erstellen und problemlos zwischen ihnen zu wechseln. Aus diesem Grund haben wir diese Bibliothek namens AppContainer
erstellt.
Standard | Debug1 |
---|---|
Container auswählen | Containerliste | Containerinformationen |
---|---|---|
extension AppContainer {
static let group = . init ( groupIdentifier : " YOUR APP GROUP IDENTIFIER " )
}
let container = try AppContainer . standard . createNewContainer ( name : " Debug1 " )
Der ursprüngliche Container heißt DEFAULT
und hat eine UUID von 00000000-0000-0000-0000-0000-0000-00000000000000000000
. Sie können dies mit der Eigenschaft isDefault
überprüfen.
let containers : [ Container ] = AppContainer . standard . containers
let activeContainer : Container ? = AppContainer . standard . activeContainer
Es wird empfohlen, die Anwendung nach dem Aufruf dieser Methode neu zu starten.
try AppContainer . standard . activate ( container : container )
try AppContainer . standard . activateContainer ( uuid : uuid )
Wenn der Container, den Sie löschen, verwendet wird, aktivieren Sie den Standardcontainer, bevor Sie ihn löschen.
try AppContainer . standard . delete ( container : container )
try AppContainer . standard . deleteContainer ( uuid : uuid )
try AppContainer . standard . clean ( container : container )
try AppContainer . standard . cleanContainer ( uuid : uuid )
Stellen Sie den Zustand wieder her, bevor diese Bibliothek verwendet wurde. Insbesondere wird der DEFAULT-Container aktiviert und alle anderen AppContainer-bezogenen Dateien werden entfernt.
try AppContainer . standard . reset ( )
Sie können Benachrichtigungen erhalten, wenn Sie den Container wechseln. Wenn Sie zusätzliche Verarbeitung hinzufügen möchten, die ausschließlich vor und nach dem Wechsel durchgeführt werden soll, verwenden Sie „delegate“ wie unten beschrieben.
Delegate kann verwendet werden, um beim Wechseln von Containern eine optionale Verarbeitung hinzuzufügen. Die Aktionen werden in der folgenden Reihenfolge ausgeführt.
// 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)
Mit dieser Bibliothek können mehrere Delegaten festgelegt werden. Fügen Sie Folgendes hinzu.
AppContainer . standard . delegates . add ( self ) // if self is AppContainerDelegate compliant
Es wird in einer schwachen Referenz gehalten und automatisch freigegeben, wenn das Objekt freigegeben wird. Wenn Sie den Delegaten deaktivieren möchten, schreiben Sie Folgendes.
AppContainer . standard . delegates . remove ( self ) // if self conforms to AppContainerDelegate
Beim Wechseln des Containers werden fast alle Dateien mit Ausnahme einiger Systemdateien gespeichert und im Containerverzeichnis wiederhergestellt. Sie können festlegen, dass Dateien von diesen Verschiebungen ausgeschlossen werden.
Das Folgende ist beispielsweise ein Beispiel für einen Fall, in dem Sie UserDefault in allen Containern gemeinsam verwenden möchten. Diese Datei wird beim Containerwechsel nicht gespeichert oder wiederhergestellt.
appcontainer . customExcludeFiles = [
" Library/Preferences/<Bundle Identifier>.plist "
]
Alle Dateipfade, die mit dem Inhalt von „customExcludeFiles“ enden, werden von der Verschiebung ausgeschlossen. Die folgende Konfiguration schließt beispielsweise die Datei mit dem Namen XXX.yy
in allen Verzeichnissen aus.
appcontainer . customExcludeFiles = [
" XXX.yy "
]
Stellt eine Benutzeroberfläche für die Verwendung von AppContainer bereit. SwiftUI und UIKit werden unterstützt.
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 )
MIT-Lizenz