تحديث مكتبة SPPermission والكراهية

- " نوع ما من المكتبة ، تحديث شخص ما ... ما علاقة هايتر بها؟" لماذا أنا ، مطور ممتاز ، بحاجة لقضاء بعض الوقت على هذه المقالة؟ "

قد تعتقد يا صديقي العزيز. لا حاجة لإضاعة الوقت. هذه مجرد قراءة مسائية مع حصة من الضحك المضحك. سيتحدث النص عن مكتبة RequestPermission ومؤلفها الغامض.

لنبدأ بالشيء الرئيسي - تغيير العلامة التجارية! تمت إعادة تسمية المكتبة إلى SPPermission . لا أعرف ما إذا كانت هذه هي الحالة أم لا ، ولكن بعد تغيير الاسم ، فقد تم تعليقه على قمة GitHub في الأسبوع الثاني. نعم ، هناك مثل هذه القمة ، فهي مشروطة ، ولكن لا يزال من الممكن العثور على مشاريع مثيرة للاهتمام هناك. قام المؤلف (شخص غامض) بتحديث اللافتات على صفحة المشروع ، ووصف ، قسم كبير من الدونات مدرج. يا لها من جشع!

لكن دعنا ننتقل إلى المشروع نفسه:



كما ترى من الحجم الكبير للصور المتحركة (غير الأرثوذكسية 4 ميغا بايت) ، يطلب المشروع قائمة الأذونات ، هناك رموز ، نص. يمكنك حتى أن تقول أنها تبدو جيدة.

التثبيت


يمكنك ببساطة سحب شفرة المصدر إلى مشروعك ، هذا مجلد من الملفات المنظمة. ولا يمكنك أن تعاني من الهراء لبناء المكتبة باستخدام SocoaPods . لن أخبر الإيجابيات والسلبيات ، وليس عن هذه المقالة. أضف السطر إلى ملف pod :

pod 'SPPermission' 

وتحديث التبعيات. على الأرجح ، هذه هي أصعب خطوة على الإطلاق)

استخدم


إذا قمت بسحب الملفات إلى المشروع ، فإن وحدة SPPermission متاحة بالفعل. إذا لم تكن تعاني من هراء ، فقد استخدمت ocoaPods ، فيجب عليك استيراد المكتبة إلى وحدة التحكم:

 import SPPermission 

الآن في وظيفة viewDidAppear ، نسمي البناء التالي:

 override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) SPPermission.Dialog.request( with: [.camera, .calendar, .notification], on: self ) } 

نقوم بتمرير قائمة الأذونات ووحدة التحكم التي سنعرض عليها مربع الحوار. يبقى لبدء المشروع.

التخصيص


إذا كنت ، أيها الصديق العزيز ، قد عملت مع الجداول أو المجموعات ، فإن الكلمات المفوض ومصدر البيانات لن تخيف. وإذا كنت مهووسًا بالأنماط ، فستصرخ حتى:

- " واو! نهج قائم على البروتوكول! "

ترى! ترى؟ ولكن قلت أنه لن يكون مضحكا. ولكن بمجرد أن قرأت على هذا الخط ، دعنا ننتقل.

لنبدأ ببروتوكول SPPermissionDialogDataSource ، سيكون مسؤولاً عن تخصيص مربع الحوار وسيسمح بدمج أكثر ولاء للمكتبة في المشروع. دعونا نلقي نظرة على المعلمات:

 @objc public protocol SPPermissionDialogDataSource: class { @objc optional var dialogTitle: String { get } @objc optional var dialogSubtitle: String { get } @objc optional var dialogComment: String { get } @objc optional var allowTitle: String { get } @objc optional var allowedTitle: String { get } @objc optional var bottomComment: String { get } @objc optional var showCloseButton: Bool { get } @objc optional func name(for permission: SPPermissionType) -> String? @objc optional func description(for permission: SPPermissionType) -> String? @objc optional func image(for permission: SPPermissionType) -> UIImage? } 

لنكون صادقين ، لا أرى أي سبب للتحدث عن الجميع ، لأن أسمائهم تتحدث. دعونا نحلل اثنين من الغموض: التعليق السفلي و showCloseButton .

المعلمة الأولى مسؤولة عن التعليق تحت مربع الحوار ، على سبيل المثال ، يمكنك وضع المطالبة " انتقاد لإغلاق ":



المعلمة الثانية ، showCloseButton ، مسؤولة عن زر الإغلاق في الزاوية العلوية اليمنى من الشاشة. لدي أيضًا صورة مع مثال:



تسمح بعض الوظائف بإرجاع لا شيء ، وهذا ضروري إذا لم تكن بحاجة إلى تخصيص جميع الرؤوس / الرموز أو النص. يكفي إرجاع لا شيء لترك القيمة الافتراضية:

 func description(for permission: SPPermissionType) -> String? { if permission == .calendar { return "" } lse { return nil } } 

يبقى لتمرير كائن DataSource إلى الهيكل الرئيسي:

 SPPermission.Dialog.request( with: [.camera, .calendar, .microphone, .notification], on: self, dataSource: self ) 

مندوب


يسمح لك بتتبع بعض الأحداث. دعونا نلقي نظرة على البروتوكول:

 @objc public protocol SPPermissionDialogDelegate: class { @objc optional func didHide() @objc optional func didAllow(permission: SPPermissionType) } 

حسنًا ، ليس كثيرًا ... وعلى الرغم من ذلك ، ما هو المطلوب أيضًا؟) لا أعتقد أن الأمر يستحق شرح الأحداث التي سيتم استدعاء الوظائف. الأسماء تتحدث. ألفت انتباهكم - يجب ألا ينسى المندوب الإشارة إلى:

 SPPermission.Dialog.request( with: [.camera, .calendar, .microphone, .notification], on: self, delegate: self dataSource: self ) 

أذونات




سيتم تجديد القائمة إذا كانت هناك اقتراحات أو انتقادات للمكتبة ، فمن الجدير إنشاء قضية جديدة هنا

الكعك


يجدر الانتباه إلى وظيفة مفيدة:

 func isAllow(_ permission: SPPermissionType) -> Bool 

سيتيح لك معرفة ما إذا كان المستخدم قد أعطى الإذن. لزيادة الولاء ، يوصى بطلب أذونات ليس في حزمة ، ولكن قبل الاستخدام. ولا يزيد عن 3 السابقين! على الرغم من أنني أجد صعوبة في التوصل إلى موقف أحتاج فيه أكثر) استخدم هذا:

 let isAvailableCamera = SPPermission.isAllow(.amera) 

لماذا التحديث


تبدو النسخة القديمة على هذا النحو ، وربما قبل عام لم يكن هناك شيء:



في الواقع ، لم أقم بتحديثه لمدة عام (حسنًا ، لا تتظاهر بأنك لم تفهم أنني مؤلف المكتبة) ، لكن في الآونة الأخيرة ، تلقيت رسالة ... على الرغم من أننا لنتحدث عن هذه القصة بعد ذلك بقليل. نحن نقوم بعمل جاد هنا!

العمارة


منذ حوالي عام ، كتبت مقالًا هزمت فيه مباشرةً عشاق الاستخدام غير المبرر للهندسة المعمارية. ولكني اعتقدت ذلك فقط ، ولم يتم سماع الرسالة الرئيسية. لم تتوقف رغبتي في تبسيط هذا العام. عندما تصورت إعادة التصميم ، أدركت أنه يجب إعادة كتابة المشروع ككل. هذا نوع من أجهزة الحفر مع القدرة على الاستماع إلى الراديو وقطع الخضار وسخان نصف المعدل. رأيته بعد عام! الآن يبدو لي من الغباء أن أكتب هذه المقالة ، مع وجود مثل هذا المثال المعقد. ربما في عام آخر ، سأجعل الأمر أسهل. دعونا نرى)

إذن ما هي القصة؟


انتهى sobsna التعليمي وننتقل إلى الثرثرة. قبل بضعة أسابيع تلقيت رسالة تطلب مني شرح كيفية عمل المكتبة. كان سؤالًا غريبًا ، وبما أنني تخليت عن المكتبة ، فقد أجبت ببساطة باستخدام قالب:

- " صديقي العزيز ، لا أدعم المكتبة الآن ، ليس لدي وقت فراغ. كل التوفيق "

لقد كتبتها للتو ، فقط في زابوغورسك. لقد نسيت. دخلت الخشخاش ، رأيت حوالي اثني عشر !!! الرسائل في مجلد الرسائل غير المرغوب فيها. حسنًا ، كل شيء ، من الواضح أن بعض البوابة قد تباعدت ، والآن كيف يمكنني إلغاء الاشتراك في بريدهم الإلكتروني! و nnnet ... كتب نفس الرجل لي ، هذه المرة فقط في غضب. في الرسائل ، اكتشفت أنني لست مؤلف المكتبة (لذلك ، لا يمكنني أن أقول) ، اكتشفت أن الأشخاص مثلي هم أكثر الناس فظاعة (ونحن بحاجة إلى حظر التسجيل في GitHub) ، اكتشفت أنني أريد الكثير من المال لعملي الذي لا قيمة له. المال؟ في الصفحة القديمة لم يكن هناك حتى شكل دونات. لكنني فهمت النقطة ، كان الرجل غاضبًا.

قررت المساعدة ، ولكن ليس بسبب اللطف - لقد كنت مهتمًا بشكل لا يصدق بما لا يصدق الذي يحتاج إلى تخصيص ، والذي أثار موجة كبيرة من الغضب. اتضح أنه كان يبحث عن طريقة تسمى عندما يتم إغلاق مربع الحوار. لم يكن هناك حد لضحكي من خلال الدموع! تم وصف المندوب في الإصدار الأول.

القصة حزينة ولكن حزينة أكثر! نعم نعم! وصفت له بالتفصيل شخصيا كيفية استخدام المندوبين ، إذا جاز التعبير ، الدورة العامة. لم أفوت فرصة الحصول على المتعة وقلت أن كل هذا كان على الصفحة الرئيسية للمشروع منذ البداية. حصلت على الجواب ... ولكن أردت أن أبكي أكثر:

" لقد بدأت البرمجة مؤخرًا ولا أريد فهم الوثائق. وداعا "

ضحكت لفترة طويلة.

ننتهي


لقد تم تقديم برنامج تعليمي قصير ، لأنني منتبه إلى أني سأترك روابط إلى الفاصل الزمني مع التصميم (أنا ألحق المسافات البادئة والألوان من التطبيقات الإلكترونية بشكل غير مضمون) ودرس تعليمي سيعرض كل ما وصفته هنا ، ولكن من الواضح.

جميع عمليات الترحيل الناجحة إلى Swift الجديد!

Source: https://habr.com/ru/post/ar430886/


All Articles