該庫允許您使用單一應用程式建立和管理多個環境,就像交換容器一樣。
當您想要在臨時應用程式中測試多個帳戶時,這非常有用。
語言切換:日本語。
通常,一個應用程式有一種環境(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 ( )
切換容器時您可以收到通知。如果您想要新增在切換之前和之後嚴格執行的附加處理,請按如下所述使用委託。
Delegate可用於在切換容器時新增可選處理。這些操作按以下順序執行。
// 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 )
麻省理工學院許可證