iOS loyihasining eng yaxshi amaliyotlari va vositalari

Ochiq kodli Xcode loyiha shablonlari bilan

IOS-ning Greenfield loyihalarida ishlayotganda, men ko'pincha yangi loyihani noldan boshlashim kerak edi. Buni amalga oshirayotganda, men va mening jamoam har doim loyihalarni asosiy tuzilishiga ko'p vaqt sarfladilar, masalan, asboblarni birlashtirish, loyiha tuzilishini sozlash, bazaviy sinflarni yozish, tashqi kutubxonalarni o'rnatish va boshqalar.

Men loyihani ishga tushirishga sarflangan vaqtni tejashga va jarayon asosan avtomatlashtirishga qaror qildim. Men foydalangan odatiy eng yaxshi amaliyotlar va vositalarni yozib oldim va men va mening jamoam yangi loyihalarni boshlashda foydalanishlari mumkin bo'lgan loyiha shablonini tayyorladim. Ushbu shablon loyihani o'rnatish vaqtini tejashga imkon beradi, shuningdek, har bir guruh a'zosi odatlangan bo'lib, siz loyiha tuzilishi va poydevorini o'ylamasligingiz va o'rganmasligingiz kerak. Ular doimo bir xil bo'ladi.

Andozaga kiritilgan har bir vosita yoki eng yaxshi tajriba o'zi maqola olishga loyiq, ammo men har bir fikrni xulosa qilib, nima uchun ularni o'z ichiga olganim haqida qisqacha tushuntirish berishni xohlardim.

Kokoapodlar

Men buni kirishga muhtoj deb o'ylamayman. Bu iOS loyihalari uchun tashqi qaramlikni boshqarish uchun kutubxona. Bu uzoq vaqtdan beri mavjud bo'lib, minglab (agar millionlab bo'lmasa) loyihalarida kuchli va jangovor sinovlardan o'tgan. Karfagen singari muqobil qaramlik menejerlari mavjud, ammo men Cocoapods bilan borishga qaror qildim, chunki u ochiq manbali loyihani qo'llab-quvvatlaydi. Cocoapodlarni ishlatish juda oson va u sizga kerak bo'lishi mumkin bo'lgan paketlarni osongina topishga imkon beradigan qidirish indeksidir.

Andoza loyihasi Swiftlint va R.swiftni o'z ichiga olgan oddiy Podfile bilan birga keladi. Andoza, shuningdek, bog'liqlikni hal qilish uchun ishlatiladigan Cocoapods versiyasini boshqarish uchun Gemfile-ni ham o'z ichiga oladi. Bu ko'pincha e'tibordan chetda qoladigan yaxshilanish, bu sizning guruhingizdagi ishlab chiquvchilar Cocoapodlarning turli xil versiyalaridan foydalangan holda bog'liqlikni o'rnatishda yuzaga keladigan muammolarni oldini oladi. Gemfile butun jamoada bir xil Cocoapods-dan foydalanadi.

Swiftlint

Swiftlint - bu har bir dasturchi uchun ma'lum qoidalar va kodlash uslubini joriy qilish uchun juda foydali vositadir. Siz buni avtomatlashtirilgan kodlarni ko'rib chiqish tizimi deb hisoblashingiz mumkin, bu dasturchini kuchni echish, majburlash, kuch sinash va hokazo kabi xavfli narsalar to'g'risida ogohlantiradi, lekin barcha dasturchilar bir xil "kod uslubi" bilan bog'liq qoidalarga amal qilishiga amin bo'lish orqali umumiy kodlash uslubini qo'llaydi. oraliq yoki oraliq qoidalar kabi. Bu shunchaki asosiy tekshiruvlarni amalga oshirish orqali kodlarni ko'rib chiqish vaqtini tejash bilan bir qatorda, loyihadagi barcha fayllarni tanish ko'rinishga olib keladi, bu esa ularning o'qilishini va natijada barcha dasturchilar tomonidan tushunilishini oshiradi. Barcha qoidalar ro'yxatini bu erda topishingiz mumkin. Ushbu shablonda Swiftlint Cocoapods orqali o'rnatiladi va "Qurilish bosqichlari" bosqichiga kiritilgan, shuning uchun har bir loyihani yaratishda ishlab chiqaruvchiga ogohlantiradi va ogohlantiradi.

R.swift

R.swift - bu rasmlarni, shriftlarning segmentlari va lokalizatsiya kabi kuchli yozilgan, avtoto'ldiradigan manbalarni olish uchun vositadir. Bu sizning loyihangizni skanerlash va manbalarni olish uchun zarur bo'lgan tezkor sinflarni yaratish orqali amalga oshiriladi. Ushbu kutubxonaning eng katta savdo nuqtasi shundan iboratki, resurslardan foydalanganda u sizning kodingizni yaratadi:

  • To'liq yozildi - kamroq kasting va qanday usul qaytib kelishini taxmin qilish
  • Kompilyatsiya vaqti tekshirildi - ish vaqtida ishlamay qolishiga olib keladigan noto'g'ri satrlar yo'q
  • Avtomatik to'ldirilgan - bu rasm / nib / hikoya taxtasi nomini boshqa hech qachon taxmin qilmaslik kerak

Rasmiy API yordamida quyidagi kodni ko'rib chiqing:

ruxsat belgisi = UIImage (nom: "Custom-icon")

Agar siz rasm nomini noto'g'ri yozsangiz, bu erda nil bo'ladi. Agar sizning jamoangizning biron bir a'zosi rasm manbaini nomini o'zgartirsa, bu kod nolga qaytariladi yoki agar siz rasmni ochishga majbur qilsangiz buziladi. R.swift-dan foydalanganda quyidagilar bo'ladi:

ruxsat belgisi = R.image.customIcon ()

Endi siz ikonka haqiqatan ham mavjudligiga amin bo'lishingiz mumkin (kompilyator sizni vaqtni tekshirishga yordam bermasa, sizni ogohlantiradi) va siz ishonch hosil qilsangiz, ikonka nomiga xato yozmasligingiz kerak, chunki siz avtoto'ldirishni ishlatasiz.

R.swift Cocoapods orqali o'rnatiladi va shablonga "Qurilish fazasi" sifatida birlashtirilgan va har bir qurishda Swift o'rash sinflarini yaratadi. Agar siz fayl / rasm / lokalizatsiya / font / color / nib va ​​hokazolarni qo'shsangiz, bu siz loyihani tuzganingizda R.swift-dan foydalanib sizga taqdim etiladi.

Sinovlar uchun alohida AppDelegate

Sinovlarni bajarishda alohida TestAppDelegate sinfi bo'lishi ko'pincha e'tibordan chetda qolmaydi. Nega bu yaxshi fikr? Odatda, AppDelegate sinfi dasturni ishga tushirishda juda ko'p ishlarni bajaradi. U oynani o'rnatishi, ilovaning asosiy UI tuzilishini yaratishi, bildirishnomalarni ro'yxatdan o'tkazishi, ma'lumotlar bazasini o'rnatishi va ba'zida ba'zi serverlar xizmatiga API qo'ng'iroqlarini amalga oshirishi mumkin. Birlik testlari hech qanday yon ta'sirga ega bo'lmasligi kerak. Siz chindan ham tasodifiy api qo'ng'iroqlarini amalga oshirib, UI-ning barcha tuzilmalarini faqat bir nechta sinovlarni bajarish uchun o'rnatishni xohlamaysizmi?

TestAppDelegate shuningdek, sinov to'plamini bajarish paytida faqat bir marta ishga tushirishni xohlaydigan kodga ega bo'lish uchun juda yaxshi joy. U kodlarni o'z ichiga olishi mumkin.

Ushbu andoza dastur uchun asosiy kirish joyi bo'lgan main.swift faylini o'z ichiga oladi. Ushbu faylda hozirda ishlayotgan muhitni tekshirish usullari mavjud va agar u sinov muhiti bo'lsa, TestAppDelegate-ni chaqiradi.

Tuzuvchi ishlash profillar bayroqlari

Swift - bu ajoyib til, undan foydalanish oson va Objective-C (IMO) dan ancha xavfsizroqdir. Ammo u birinchi marta ishga tushirilganida, uning bitta katta salbiy tomoni bor edi - vaqtni qisqartirish. Oradan 2 kun o'tgach, men Swift kodining 40k qatorini (o'rta o'lchamdagi loyiha) o'z ichiga olgan loyihada ishladim. Kod juda sodda va generiklar uchun juda og'ir edi va toza tuzishni tayyorlash uchun 5 daqiqa vaqt ketdi. Siz ozgina o'zgartirish kiritganingizda, loyiha qayta tiklanadi va o'zgarishlarni ko'rish uchun 2 daqiqa vaqt ketadi. Bu men yaratgan eng yomon tajribalardan biri edi va men Swift-dan foydalanishni to'xtatdim.

O'sha paytdagi yagona echim, loyihani tuzish vaqtlarini sinab ko'rish va profilni tuzish va kodingizni shu tarzda o'zgartirishga harakat qilish edi, bu kompilyatorni tezroq ishlashiga imkon beradi. Bunga yordam berish uchun Apple ba'zi bir norasmiy kompilyator bayroqlarini taqdim etadi, ular uslublar to'plamini tuzishda yoki ifoda turini hal qilishda juda uzoq davom etganda sizni ogohlantiradi. Men ushbu bayroqlarni shablon loyihasiga qo'shdim, shunda sizga ilova uchun uzoq kompilyatsiya vaqtlari haqida sizni ogohlantirishadi.

Hozirgi vaqtda qurilish vaqtlari sezilarli darajada yaxshilandi va siz kamdan-kam hollarda qurilish vaqtini yaxshilash uchun kodingizni o'zgartirishingiz kerak bo'ladi. Biroq, loyiha juda katta bo'lganda muammoni hal qilishga urinib ko'rish uchun oldinroq bilish yaxshiroqdir.

Dev / sahna / ishlab chiqarish konfiguratsiyasi

Yana bir yaxshi amaliyot (yoki kerak deb ayta olaman) bu ishlab chiqish, tayyorlash va ishlab chiqarish uchun alohida konfiguratsiyalar va atrof-muhit parametrlariga ega bo'lishdir. Hozirgi kunda deyarli har bir ilova ba'zi turdagi xizmatlarga ulanishi kerak va odatda, ushbu xizmatlar bir nechta muhitga o'rnatiladi. Dasturlash muhiti har kuni tarqatish uchun va dasturchilar uchun ularning kodini sinash uchun ishlatiladi. Sahna muhiti sinovchilar va mijozlarni sinovdan o'tkazish uchun barqaror nashrlarda foydalaniladi. Biz hammamiz ishlab chiqarish muhiti uchun nima ekanligini bilamiz.

IOS loyihasida bir nechta muhitni qo'llab-quvvatlash usullaridan biri bu loyiha darajasidagi konfiguratsiyalarni qo'shishdir.

Loyiha darajasining konfiguratsiyasi

Konfiguratsiyalarni aniqlaganingizdan so'ng, siz har bir muhit uchun o'zgaruvchilarni o'z ichiga olgan Configuration.plist faylini yaratishingiz mumkin.

Konfiguratsiya.plist

Loyihani amalga oshirayotganda qaysi konfiguratsiyani ishlatish kerakligini belgilashingiz mumkin. Buni tuzish sxemasida qilishingiz mumkin.

Keyin siz loyihaning Info.plist fayliga bitta qo'shimcha mulkni qo'shishingiz kerak. Ushbu mulkning qiymati ish vaqtida ishlaydigan konfiguratsiya nomiga nisbatan dinamik ravishda hal qilinadi.

Bularning barchasi shablonda siz uchun oldindan tuzilgan.

Qolgan narsa bu tuzish sxemasida tanlangan konfiguratsiyaga qarab, ish vaqtida ushbu o'zgaruvchilarni olishlari mumkin bo'lgan sinfni yozishdir. Ushbu shablonda hozirgi muhit uchun o'zgaruvchilarni olish mumkin bo'lgan ConfigurationManager sinfi mavjud. Siz qanday ishlashini ko'rish uchun Github-da ushbu sinfning bajarilishini tekshirishingiz mumkin.

Readme

Har bir loyihada hech bo'lmaganda qaramlikni o'rnatish va loyihani boshqarish bo'yicha ko'rsatmalar mavjud bo'lgan asosiy Readme bo'lishi kerak. Shuningdek, u loyiha arxitekturasi va modullarining tavsiflarini o'z ichiga olishi kerak. Afsuski, ishlab chiquvchilar hujjatlarni yozishni yoqtirmaydilar (o'qish bu qismdir) va men bir necha oylar davomida ishlab chiqilgan va hatto asosiy Readme-ga ega bo'lgan loyihani ko'rdim. Ushbu asosiy readme-ni yozib olishdan xalos bo'lish uchun shablonda o'rnatish va loyiha tuzilishini qamrab oladigan standart o'qish rejimi mavjud. Andoza yordamida yangi loyihani qurganingizda, avtomatik ravishda Readme qo'shiladi.

Gitignore

Hozirgi kunda ko'pgina loyihalar GIT-ni o'zlarining versiyalarini boshqarish tizimi sifatida ishlatmoqdalar. GIT-dan foydalanganda, odatda, loyihadagi ba'zi papka yoki olingan ma'lumotlar papkasi kabi ba'zi fayllar yoki papkalarni e'tibordan chetda qoldirmaysiz. Sizning iOS loyihangizga mos keladigan gignignore faylini izlash muammosidan xalos bo'lish uchun, shablon Github yordamchilari tomonidan taqdim etilgan standart gitignore-ni o'z ichiga oladi.

Chiziqlar va bildirishnomalarni qayta ishlash uchun asosiy sinflar

Hozirgi kunda deyarli har bir ilova chuqur izohlar va bildirishnomalar bilan ishlashi kerak. Buning uchun ishlab chiqaruvchi AppDelegate sinfiga ma'lum miqdorda qozon kodini yozishi kerak. Ushbu shablon o'z ichiga qamrab olgan va shuningdek, chuqur bog'lanishlar va bildirishnomalar bilan ishlashni osonlashtiradigan asosiy sinflarni ham beradi.

Xulosa

Xulosa qilish uchun shablon eng yaxshi tajribalarni o'z ichiga oladi va uchinchi tomonning foydali vositalarini birlashtiradi. Bu sizni va bizning jamoamizni yangi loyihani amalga oshirishga sarflagan vaqtini tejashga, shuningdek loyihaning qolgan qismi uchun umumiy va mustahkam poydevor yaratishga yordam beradi. Bu sizga yaxshi xizmat qilsin!

PS: Agar sizda shablon bo'yicha biron bir muammo yoki xususiyat mavjud bo'lsa, menga Github-da biron bir masalani qoldiring. Bo'sh vaqtimda buni hal qilishga harakat qilaman.