Esta biblioteca permite criar e gerenciar vários ambientes com um único aplicativo, como se você estivesse trocando containers.
Isso é útil quando você deseja testar várias contas em um aplicativo de teste.
Mudança de idioma: 日本語.
Normalmente existe um ambiente (Diretório, UserDefaults, Cookies, Cache, ...) para um aplicativo. Para ter vários ambientes para depuração ou para lidar com várias contas, vários aplicativos idênticos devem ser instalados. (com diferentes IDs de pacote). Na depuração, pode haver casos em que as contas são verificadas repetidamente por meio de login e logout.
Portanto, pensamos que seria possível criar vários ambientes dentro do mesmo aplicativo e alternar entre eles facilmente. É por isso que criamos esta biblioteca chamada AppContainer
.
Padrão | Depuração1 |
---|---|
Selecionar contêiner | Lista de contêineres | Informações do contêiner |
---|---|---|
extension AppContainer {
static let group = . init ( groupIdentifier : " YOUR APP GROUP IDENTIFIER " )
}
let container = try AppContainer . standard . createNewContainer ( name : " Debug1 " )
O contêiner original é denominado DEFAULT
e possui um UUID de 00000000-0000-0000-0000-0000-0000-00000000000000000000
. Você pode verificar isso com a propriedade isDefault
.
let containers : [ Container ] = AppContainer . standard . containers
let activeContainer : Container ? = AppContainer . standard . activeContainer
Recomenda-se reiniciar o aplicativo após chamar este método.
try AppContainer . standard . activate ( container : container )
try AppContainer . standard . activateContainer ( uuid : uuid )
Se o contêiner que você está excluindo estiver em uso, ative o contêiner Padrão antes de excluí-lo.
try AppContainer . standard . delete ( container : container )
try AppContainer . standard . deleteContainer ( uuid : uuid )
try AppContainer . standard . clean ( container : container )
try AppContainer . standard . cleanContainer ( uuid : uuid )
Reverta para o estado anterior ao uso desta biblioteca. Especificamente, o contêiner DEFAULT será habilitado e todos os outros arquivos relacionados ao AppContainer serão removidos.
try AppContainer . standard . reset ( )
Você pode receber notificações ao trocar de contêiner. Se você deseja adicionar processamento adicional a ser feito estritamente antes e depois da troca, use delegado conforme descrito abaixo.
Delegate pode ser usado para adicionar processamento opcional ao alternar contêineres. As ações são executadas na seguinte ordem.
// 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 que vários delegados sejam definidos. Adicione o seguinte.
AppContainer . standard . delegates . add ( self ) // if self is AppContainerDelegate compliant
Ele é mantido em uma referência fraca e será liberado automaticamente quando o objeto for liberado. Se você deseja desativar o delegado, escreva o seguinte.
AppContainer . standard . delegates . remove ( self ) // if self conforms to AppContainerDelegate
Ao alternar contêineres, quase todos os arquivos, exceto alguns arquivos do sistema, são salvos e restaurados no diretório do contêiner. Você pode definir arquivos a serem excluídos dessas movimentações.
Por exemplo, a seguir está um exemplo de caso em que você deseja usar UserDefault normalmente em todos os contêineres. Este arquivo não será salvo ou restaurado ao trocar de contêiner.
appcontainer . customExcludeFiles = [
" Library/Preferences/<Bundle Identifier>.plist "
]
Todos os caminhos de arquivo que terminam com o conteúdo de customExcludeFiles serão excluídos da movimentação. Por exemplo, a configuração a seguir excluirá o arquivo denominado XXX.yy
em todos os diretórios.
appcontainer . customExcludeFiles = [
" XXX.yy "
]
Fornece UI para usar o AppContainer. SwiftUI e UIKit são suportados.
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 )
Licença MIT