تسمح لك هذه المكتبة بإنشاء وإدارة بيئات متعددة باستخدام تطبيق واحد، تمامًا كما لو كنت تقوم بتبديل الحاويات.
يعد هذا مفيدًا عندما تريد اختبار حسابات متعددة في تطبيق مرحلي.
تبديل اللغة: 日本語.
عادةً ما تكون هناك بيئة واحدة (الدليل، إعدادات المستخدم الافتراضية، ملفات تعريف الارتباط، ذاكرة التخزين المؤقت، ...) لتطبيق واحد. للحصول على بيئات متعددة لتصحيح الأخطاء أو للتعامل مع حسابات متعددة، يجب تثبيت تطبيقات متطابقة متعددة. (مع معرفات حزمة مختلفة). أثناء تصحيح الأخطاء، قد تكون هناك حالات يتم فيها فحص الحسابات بشكل متكرر عن طريق تسجيل الدخول وتسجيل الخروج.
لذلك، اعتقدنا أنه سيكون من الممكن إنشاء بيئات متعددة داخل التطبيق نفسه والتبديل بينها بسهولة. ولهذا السبب أنشأنا هذه المكتبة التي تسمى 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 )
العودة إلى الحالة قبل استخدام هذه المكتبة. على وجه التحديد، سيتم تمكين الحاوية الافتراضية وستتم إزالة جميع الملفات الأخرى المتعلقة بـ 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. يتم دعم 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 )
رخصة معهد ماساتشوستس للتكنولوجيا