이 라이브러리를 사용하면 마치 컨테이너를 교체하는 것처럼 단일 애플리케이션으로 여러 환경을 만들고 관리할 수 있습니다.
이는 스테이징 애플리케이션에서 여러 계정을 테스트하려는 경우에 유용합니다.
언어 전환: 日本語.
일반적으로 하나의 앱에는 하나의 환경(Directory, UserDefaults, Cookies, Cache 등)이 있습니다. 디버깅을 위한 여러 환경을 갖거나 여러 계정을 처리하려면 동일한 앱을 여러 개 설치해야 합니다. (다른 번들 ID 사용) 디버깅을 하다 보면 로그인과 로그아웃을 반복해서 계정을 확인하는 경우가 있을 수 있습니다.
따라서 동일한 앱 내에서 여러 환경을 만들고 쉽게 전환할 수 있다고 생각했습니다. 이것이 우리가 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 사용을 위한 UI를 제공합니다. 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 라이센스