このライブラリを使用すると、コンテナを交換するかのように、単一のアプリケーションで複数の環境を作成および管理できます。
これは、ステージング アプリケーションで複数のアカウントをテストする場合に便利です。
言語スイッチ: 日本語。
通常、1 つのアプリに対して 1 つの環境 (ディレクトリ、UserDefaults、Cookie、キャッシュなど) があります。デバッグ用に複数の環境を用意したり、複数のアカウントを処理したりするには、複数の同一のアプリをインストールする必要があります。 (バンドル 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ライセンス