
لذلك ، مايو 2018. تم إجراء 7 محاولات خلال 7 سنوات لبدء برمجة شيء ما لنظام التشغيل iOS. وفي كل مرة نفس الشيء: الهدف- C شيء مخيف وغير مفهوم ، ثم لا توجد فكرة. ثم مرحبًا World ، مرة واحدة سنويًا ، بشكل عام ، لم تسير الأمور ...
هذه المرة ، رمز Xcode جديد ولغة جديدة بالنسبة لي Swift ... وفكرة جديدة ، أريد دفع الإشعارات لخادم Zabbix الخاص بي. لم يكن هناك مخزون رسمي ، ولم يكن هناك عملاء في ذلك الوقت ...
وقبل ذلك ، أرسل الروبوت الآلي البرقيات إلى الدفع ، لكنه بدأ غير مرغوب فيه ووصل روسكومنادزور في الوقت المناسب ... إن حظر العربة لا يلعب دورًا خاصًا ، لأن هناك Mikrotik وكان على الفور "ثابت".
تقرر كتابة إشعار Zabbix ، والذي لن يكون فقط للإشعارات.
كما اتضح ، لن يؤدي إلقاء الإخطارات فقط. تحتاج إلى كتابة تطبيق وتثبيته وأخذ رمز مميز منه ورفع الخادم لإرسال إشعارات الدفع ...
كانت تجربة البرمجة فقط في PHP. سويفت مختلفة ، لكنها لا تبدو مخيفة مثل الهدف- C في ذلك الوقت. و Xcode نفسها جيدة مثل IDE الذي يحول التعليمات البرمجية من القديم إلى الجديد ، ويجعل تلميحات.
بادئ ذي بدء ، تدريب مقاطع الفيديو ، وتعلم Zabbix API نفسها. ولكن بعد ذلك ، مادة تلو الأخرى ، كيف يعمل NSURLSession ، ما هي الأطر الموجودة.
كان الإصدار الأول فقط قادراً على تسجيل الدخول إلى خادم Zabbix وإعطاء المشغلات والمضيفين. ثم أضيفت وجهات نظر من الرسوم البيانية والقيم ، الخ
سأتناول بعض النقاط التي صادفتها أثناء كتابة الطلب.
الأطر
الأطر لم تدخل. إنهم "رائعون" ومريحون ، لكنني لا أريد إصلاح المشروع في وقت لاحق بسبب حقيقة أن شيئًا ما قد تغير. وقد حدث هذا بالفعل. بالنسبة لي ، قررت عدم استخدامها ، ومن الأفضل أن أخترع دراجتي لفهم كيف يعمل كل شيء. لطلبات JSON ، هناك Alamofire ، لكنني أستخدم NSURLSession المدمج بسبب هذا يكفي لكل شيء.
اختبارات
لقد مر أكثر من عام عندما قررت إضافة اختبارات :)
اعتقدت أن هذا الشيء الرائع سينقذ العالم ... لكن ... كتبت عدة اختبارات مختلفة ، بدسها هنا ... وجاء الكسل. لا أرى مهام حتى الآن في مثل هذا المشروع الصغير لتخصيص الكثير من الوقت للاختبارات ... وهذه هي المرة فقط لاختبارات الكود ، ناهيك عن اختبارات واجهة المستخدم.

التشفير
كانت هناك عدة نقاط للتشفير.
تريد Apple من خلال كتيباتها تشفير جميع الطلبات. وهذا صحيح. ولكن كما أظهرت الممارسة ، لم يرغب الجميع في القيام بـ https من أجل Zabbix. في البداية ، لم يكن لدي خيار (إعدادات أمان نقل التطبيقات) الذي يسمح بحركة مرور HTTP الخالصة ، والتي صُلبت من أجلها في المراجعات في AppStore) ، ثم قمت بتشغيلها بدون المغامرة. لم يتعرف Xcode على السطر الخاص بي حتى قمت بإعادة إنشاء ملف Info.plist بأكمله.
وأيضًا ، تريد Apple معرفة كل شيء عن التطبيق الخاص بك ، ولا تقع حركة https المعتادة تحت هذا. ولكن إذا كنت ترغب في تشفير شيء "بطريقة صعبة" ، فيرجى إبلاغ السلطات الأمريكية.

عند الاتصال بأحد مستخدمي التطبيق ، كان هناك طلب لتشفير رسائل PUSH من البداية إلى النهاية. يجب تشفير الرسالة على خادم Zabbix ، وفك تشفيرها فقط على الهاتف. لمثل هذا الشيء ، لدى Apple إشعارات "قابلة للتغيير". أي إذا وصل "محتوى قابل للتغيير" ، فأنت بحاجة إلى تغيير شيء ما وفقًا لما تكتبه. كان لدي فك تشفير الرسالة.
سياسة Apple هنا ليست ضد استخدام أنواع التشفير القياسية. هل تريد شيئًا خاصًا بك ، كما كتبت أعلاه ، أعطني قطعة من الورق ويمكن أن تبين لي المفتاح؟ ...
لقد استخدمت lib CommonCrypto lib ، لذلك يعتبر هذا النوع القياسي من التشفير. اضطررت إلى الفوضى مع رمز ، ل معظم الأمثلة إما قديمة أو صرخت Xcode بأنها ليست آمنة أو ليس لديها أي شيء للعمل مع وحدات البايت والبيانات مباشرةً ، أو كانت ممتعة مع IV OpenSSL-a ، الإزاحة لم تكن صحيحة ، ثم لم يكن شيء آخر على حق. نتيجة لذلك ، كان من الممكن عمل شفرة غير مشفرة ، والعمل بشكل صحيح مع OpenSSL عند تشفير الرسائل.
دوائر قصيرة
والموضوع الأكثر إثارة بالنسبة لي ... لم أستطع كتابة رمز غير متزامن .... حتى الآن ، على الأقل لم أفهم كثيرًا كيف تعمل عمليات الإغلاق هذه.

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

نعم ، لدي كل شيء في Storyboard واحد. وأنا أعلم أن هذا ليس غاية ، ولكن حتى الآن هناك عدد قليل من الشاشات. ربما سوف أضعها في xibs لاحقًا.
جلب iOS 13 تغييرات على شاشات العرض. في السابق ، تم عرض جميع الشاشات الجديدة على أنها PUSH أي ملء الشاشة. الآن يمكن سحب هذه الشاشة وسيتم إغلاقها.
بشكل عام ، حدث خطأ إذا قمت بالنقر فوق LogOut ويمكنك ببساطة طي نموذج تسجيل الدخول مرة أخرى. يحدث هذا فقط إذا تم تجميع Xcode الأخير 11. يتم تصحيحه ببساطة عن طريق تعيين خيار العرض لعرضه في وضع ملء الشاشة فقط.
أيضًا في iOS 13 ، ظهر SwiftUI ، ولكن إذا قمت بإعادة التطبيق الآن ، فهذا يعني نسيان أولئك الذين يستخدمون التطبيق على الأجهزة القديمة مع البرامج الثابتة القديمة ...
تخطيط AppStore
على الرغم من أنني كتبت الطلب بنفسي ، فقد قررت نشره في AppStore. كل ما عليك هو دفع 100 دولار في السنة فقط. الحقيقة ما زالت تتحقق من التطبيق ، واشرح لماذا هذا التطبيق ، إلخ.
لأن تطبيق Zabbix ، على الشعار أردت استخدام شيء يقول عن Zabbix. لكن لم يكن هناك. كتبت رسالة إلى Zabbix تطلب فيها إمكانية استخدام شكل الحرف Z ... لكن لا. لذلك ، قمت برسم أيقونة بلدي ، منحنى مائل ، لكنني)
المالية
التطبيق ما يقرب من 2 سنة. أنفق 200 دولار فقط للحصول على التطبيق في AppStore. وبصرف النظر عن التنمية ودفع الخادم.

يحتوي التطبيق على إعلان من Google ... والذي أحضر ... ... $ 5
جلب تعطيل الإعلانات 88 دولارًا ... لكن الحد الأقصى للسحب هو من 150 دولارًا.
بعد ذلك ، سأحذف الإعلانات بشكل عام بمجرد بلوغ الحد الأقصى للسحب.
دفع الخادم
نعم ، نعم ، بدأ كل شيء بالنسبة له ... إعلامات الدفع مطلوبة. بمجرد القيام بذلك حتى تتمكن من تشفير انتهازي ، تحول العديد منهم إلى مشفر.
هناك 2 خوادم ، موسكو وهولندا في 2 روبل / يوم. DNS موازنة ، Nginx ج دعونا تشفير ، PHP النصي لاستقبال وإرسال.
في البداية ، كان هناك خادم مجاني على Amazon (15 gig of traffic ...) ، لكن مع بدء الوقت ، اشتريت VPS-ku للانتقال إلى هناك. لقد وجدت اللحظة التي كانت DDOS في طريقها إلى مزود الاستضافة ولم يكن vps متاحًا لمدة 12 ساعة ... 2 روبل أريد أكثر. حسنًا ، كنت لا أزال على موقع أمازون ولم يؤثر فيي بعد. لذلك ، تم أخذ واحد آخر مقابل روبلين يوميًا ولكن في موقع مختلف. على الأقل بعض التسامح مع الخطأ و 15 غيغا بايت حركة ... الاهتمامات الرئيسية لحركة المرور الأمازون ، ddos الصغيرة ، وحصلت على المال.
أردت استخدام Cloudflare كموازن ، لكنهم يريدون تفويض المجال بالكامل لهم ، وليس ضمن المجال.
بعض الإحصاءات
ما يقرب من 6 آلاف التنزيلات في المجموع. والبرازيل في القمة ... من كان يظن)

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