Pustaka ini memungkinkan Anda membuat dan mengelola beberapa lingkungan dengan satu aplikasi, sama seperti Anda menukar container.
Ini berguna ketika Anda ingin menguji beberapa akun dalam aplikasi pementasan.
Peralihan Bahasa: 日本語.
Biasanya ada satu lingkungan (Direktori, UserDefaults, Cookies, Cache, ...) untuk satu aplikasi. Untuk memiliki beberapa lingkungan untuk melakukan debug atau menangani banyak akun, beberapa aplikasi identik harus diinstal. (dengan ID bundel berbeda). Dalam proses debug, mungkin ada kasus di mana akun diperiksa berulang kali dengan masuk dan keluar.
Oleh karena itu, kami pikir adalah mungkin untuk membuat beberapa lingkungan dalam aplikasi yang sama dan beralih di antara lingkungan tersebut dengan mudah. Inilah sebabnya kami membuat perpustakaan yang disebut AppContainer
.
Bawaan | Debug1 |
---|---|
Pilih Wadah | Daftar Kontainer | Info Kontainer |
---|---|---|
extension AppContainer {
static let group = . init ( groupIdentifier : " YOUR APP GROUP IDENTIFIER " )
}
let container = try AppContainer . standard . createNewContainer ( name : " Debug1 " )
Kontainer asli diberi nama DEFAULT
dan memiliki UUID 00000000-0000-0000-0000-0000-0000-00000000000000000000
. Anda dapat memeriksanya dengan properti isDefault
.
let containers : [ Container ] = AppContainer . standard . containers
let activeContainer : Container ? = AppContainer . standard . activeContainer
Disarankan untuk memulai ulang aplikasi setelah memanggil metode ini.
try AppContainer . standard . activate ( container : container )
try AppContainer . standard . activateContainer ( uuid : uuid )
Jika container yang Anda hapus sedang digunakan, aktifkan container Default sebelum menghapusnya.
try AppContainer . standard . delete ( container : container )
try AppContainer . standard . deleteContainer ( uuid : uuid )
try AppContainer . standard . clean ( container : container )
try AppContainer . standard . cleanContainer ( uuid : uuid )
Kembalikan ke keadaan sebelum perpustakaan ini digunakan. Secara khusus, kontainer DEFAULT akan diaktifkan dan semua file terkait AppContainer lainnya akan dihapus.
try AppContainer . standard . reset ( )
Anda dapat menerima notifikasi saat berpindah container. Jika Anda ingin menambahkan pemrosesan tambahan yang harus dilakukan secara ketat sebelum dan sesudah peralihan, gunakan delegasi seperti dijelaskan di bawah.
Delegasi dapat digunakan untuk menambahkan pemrosesan opsional saat berpindah kontainer. Tindakan tersebut dilakukan dalam urutan berikut.
// 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)
Perpustakaan ini memungkinkan beberapa delegasi untuk ditetapkan. Tambahkan yang berikut ini.
AppContainer . standard . delegates . add ( self ) // if self is AppContainerDelegate compliant
Itu disimpan dalam referensi yang lemah dan akan dilepaskan secara otomatis ketika objek dibebaskan. Jika Anda ingin menghapus delegasi, tulis yang berikut ini.
AppContainer . standard . delegates . remove ( self ) // if self conforms to AppContainerDelegate
Saat berpindah container, hampir semua file kecuali beberapa file sistem disimpan dan dikembalikan ke direktori container. Anda dapat mengatur file untuk dikecualikan dari pemindahan ini.
Misalnya, berikut adalah contoh kasus di mana Anda ingin menggunakan UserDefault secara umum di semua container. File ini tidak akan disimpan atau dipulihkan saat berpindah wadah.
appcontainer . customExcludeFiles = [
" Library/Preferences/<Bundle Identifier>.plist "
]
Semua jalur file yang diakhiri dengan konten customExcludeFiles akan dikecualikan dari pemindahan. Misalnya, konfigurasi berikut akan mengecualikan file bernama XXX.yy
di semua direktori.
appcontainer . customExcludeFiles = [
" XXX.yy "
]
Menyediakan UI untuk menggunakan AppContainer. SwiftUI dan UIKit didukung.
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 )
Lisensi MIT