ไลบรารีนี้ช่วยให้คุณสร้างและจัดการสภาพแวดล้อมที่หลากหลายด้วยแอปพลิเคชันเดียว เหมือนกับว่าคุณกำลังสลับคอนเทนเนอร์
สิ่งนี้มีประโยชน์เมื่อคุณต้องการทดสอบหลายบัญชีในแอปพลิเคชันชั่วคราว
สลับภาษา: 日本語.
โดยปกติจะมีสภาพแวดล้อมเดียว (ไดเร็กทอรี, UserDefaults, คุกกี้, แคช, ...) สำหรับหนึ่งแอป หากต้องการมีหลายสภาพแวดล้อมสำหรับการดีบักหรือจัดการหลายบัญชี ต้องติดตั้งแอปที่เหมือนกันหลายรายการ (ที่มีรหัสบันเดิลที่แตกต่างกัน) ในการแก้ไขจุดบกพร่อง อาจมีบางกรณีที่บัญชีถูกตรวจสอบซ้ำ ๆ โดยการเข้าสู่ระบบและออกจากระบบ
ดังนั้นเราจึงคิดว่าเป็นไปได้ที่จะสร้างสภาพแวดล้อมที่หลากหลายภายในแอปเดียวกันและสลับระหว่างสภาพแวดล้อมเหล่านั้นได้อย่างง่ายดาย นี่คือเหตุผลที่เราสร้างไลบรารีนี้ชื่อ 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 "
]
จัดเตรียม UI สำหรับการใช้ 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 )
ใบอนุญาตเอ็มไอที