Эта библиотека позволяет вам создавать несколько сред и управлять ими с помощью одного приложения, как если бы вы меняли контейнеры.
Это полезно, если вы хотите протестировать несколько учетных записей в промежуточном приложении.
Переключение языка: 日本語.
Обычно для одного приложения существует одна среда (Каталог, Пользовательские настройки, Файлы cookie, Кэш,...). Чтобы иметь несколько сред для отладки или управлять несколькими учетными записями, необходимо установить несколько одинаковых приложений. (с разными идентификаторами пакетов). При отладке могут быть случаи, когда учетные записи многократно проверяются при входе и выходе.
Поэтому мы подумали, что можно будет создать несколько сред в одном приложении и легко переключаться между ними. Вот почему мы создали эту библиотеку под названием 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 ( )
Вы можете получать уведомления при переключении контейнеров. Если вы хотите добавить дополнительную обработку, которая будет выполняться строго до и после переключения, используйте делегат, как описано ниже.
Делегат можно использовать для добавления дополнительной обработки при переключении контейнеров. Действия выполняются в следующем порядке.
// 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. 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 )
Лицензия MIT