Најбоље праксе и алати за иОС пројекат

Са Ксцоде шаблоном пројекта отвореног кода

Током рада на греенфиелд иОС пројектима често сам морао да започнем нови пројекат испочетка. Док смо то радили, ја и мој тим смо увек проводили пуно времена на основном постављању пројеката, попут интегрисања алата, постављања структуре пројекта, писања основних класа, интегрисања спољних библиотека итд.

Одлучио сам да се време проведено на покретању пројекта може уштедјети и процес се може углавном аутоматизирати. Записао сам све уобичајене најбоље праксе и алате које смо користили и припремио образац пројекта који смо ја и мој тим могли користити приликом покретања нових пројеката. Овај образац треба да уштеди време за постављање пројеката и такође да пружи заједничку основу на коју ће сваки члан тима бити навикнут тако да не морате размишљати и истраживати структуру и темеље пројекта. Увек ће бити исти.

Сваки алат или најбоља пракса која се налази у шаблону заслужују чланак сам, али хтео сам да покушам да сажмем сваку тачку и укратко објасним зашто сам их укључио.

Цоцоаподс

Мислим да овом није потребан увод. Ово је библиотека за управљање спољним зависностима за иОС пројекте. То је дуго времена и робусни су и борбени тестови у хиљадама (ако не и милионима) пројеката. Постоје алтернативни менаџери зависности попут Цартхаге-а, али сам одлучио да пођем са Цоцоаподс-ом, јер има најшири спектар пројеката отвореног кода који подржава. Употреба Цоцоаподса је врло једноставна и садржи индекс претраживања који вам омогућава да лако откријете пакете који су вам можда потребни.

Пројект шаблона долази са једноставним Подфилеом који укључује Свифтлинт и Р.свифт. Шаблон такође садржи Гемфиле за управљање верзијом Цоцоаподс која се користи за решавање зависности. Ово је често занемарено побољшање које спречава проблеме који настају када програмери у вашем тиму инсталирају зависности користећи различите верзије самог Цоцоаподса. Гемфиле се примењује користећи исту верзију Цоцоаподса у целом тиму.

Свифтлинт

Свифтлинт је врло користан алат за спровођење одређених правила и стила кодирања за сваког програмера у тиму. Можете то сматрати аутоматизованим системом за преглед кода који упозорава програмера на опасне ствари као што су одвикавање силе, покушаји присиљавања, покушаји присиљавања итд., Али и намеће уобичајени стил кодирања тако што ће сви програмери следити иста правила везана за „стил кода“ попут правила увлачења или размака. Ово има огромне предности не само уштеде времена за преглед кода вршењем тих основних провјера, већ и чини да све датотеке у пројекту изгледају познато што повећава њихову читљивост и као резултат њихово разумијевање од стране свих произвођача. Списак свих правила можете пронаћи овде. У предлошку је Свифтлинт инсталиран преко Цоцоаподс и укључен је у фазу Буилд Фасес, тако да се указује и упозорава програмер на свакој изградњи пројекта.

Р.свифт

Р.свифт је алат за снажно куцање ресурса са аутоматским довршавањем, као што су слике, откривања фонтова и локализације. То чини скенирањем вашег пројекта и генерисањем брзих класа потребних за добијање ресурса. Највећа продајна тачка ове библиотеке је да, док користи ресурсе, прави ваш код:

  • Потпуно куцано - мање кастинга и погађања који метод ће се вратити
  • Проверите време компилације - нема више погрешних низова који чине да се апликација сруши током извођења
  • Аутоматско довршавање - никад више не морате нагађати име слике / кључа / плоче с причама

Размотрите следећи код користећи службени АПИ стринг:

нека икона = УИИмаге (названа: „прилагођена икона“)

Ако погрешно написате име слике, овде ћете добити нулу. Ако било који члан вашег тима промени име сликовног ресурса, овај код ће се вратити на нулу или ће се срушити ако присилите да одврнете слику. Када користите Р.свифт ово постаје:

нека икона = Р.имаге.цустомИцон ()

Сада можете бити сигурни да икона заиста постоји (преводилац ће вас упозорити ако се не захваљује проверавању времена компилације) и ако сте сигурни да нећете уписати погрешку у имену иконе јер ћете користити аутоматско довршавање.

Р.свифт се инсталира преко Цоцоаподс и интегрише се у предложак као фаза састављања и генерираће класе Свифт омота на свакој групи. То значи да ако додате датотеку / слику / локализацију / фонт / боју / ниб итд., Она ће вам бити доступна помоћу Р.свифт након што саставите пројекат.

Одвојите АппДелегате за тестове

Често занемарена добра пракса је да имате засебну класу ТестАппДелегате током извођења тестова. Зашто је то добра идеја? Па, обично АппДелегате класа ради много посла при покретању апликације. Могло би поставити прозор, изградити основну структуру корисничког сучеља апликације, регистровати се за обавештења, поставити базу података, па чак и понекад упућивати АПИ позиве неким резервним сервисима. Јединствени тестови не би требало да имају нуспојаве. Да ли стварно не желите да упућујете случајне апи позиве и подесите сву структуру корисничког сучеља ваше апликације само да покренете неке тестове јединице?

ТестАппДелегате је такође сјајно место за код који желите да покренете само једном током извођења тестног пакета. Може да садржи код који ствара исмијавање, записивање мрежних захтева итд.

Предложак садржи датотеку маин.свифт која је главна улазна тачка за апликацију. Ова датотека има методе које проверавају какво је окружење тренутно користи апликација и ако је тестно окружење, позива ТестАппДелегате.

Заставе за профилирање перформанси компајлера

Свифт је сјајан језик, лакши за употребу и много сигурнији од Објецтиве-Ц (ИМО). Али када је први пут представљен, имао је један велики недостатак - време састављања. Повратак у Свифт 2 дана, радио сам на пројекту који је имао 40к линија Свифт кода (пројекат средње величине). Код је био веома тежак с генеричким закључивањем и закључивањем типа и требало је готово 5 минута да се састави чиста верзија. Када сте направили чак и малу промену, пројекат би се прекомпоновао и требало вам је око 2 минута да видите промену. То је било једно од најгорих искуства програмера које сам икада имао и замало сам престао користити Свифт због њега.

Једино решење тада било је покушати профилирати време компилације пројекта и покушати да промените свој код на такав начин да би компајлер био бржи. Да би вам помогао у томе, Аппле уводи неке неслужбене заставице компајлера које би вас упозориле при састављању тела методе или решавању типа израза предуго. Додао сам те заставице пројекту предлошка, тако да ћете од почетка бити упозоравани о дугим временима састављања за вашу апликацију.

Данас су времена израде драматично побољшана и врло ретко је потребно подешавати код само да бисте побољшали време израде. Али ипак је боље знати унапред да покушате да решите проблем када пројекат постане превелик.

Конфигурације за развој / монтажу / производњу

Још једна добра пракса (или могу рећи да је неопходна) је да постоје одвојене конфигурације и променљиве окружења за развојно, фазно и производно окружење. Готово свака апликација у данашње време мора да се повеже с неком врстом резервне услуге и обично су ти сервиси распоређени у више окружења. Развојно окружење се користи за свакодневне размене и за развој материјала како би тестирали свој код. Заштитно окружење користи се за стабилна издања за тестере и клијенте за тестирање. Сви знамо чему служи производно окружење.

Један од начина за подршку више окружења у иОС пројекту је додавање конфигурација на нивоу пројекта.

Конфигурације нивоа пројекта

Једном када дефинишете конфигурације, можете да креирате датотеку Цонфигуратион.плист која садржи променљиве за свако окружење.

Цонфигуратион.плист

Приликом покретања пројекта можете одредити коју конфигурацију треба користити. То можете да урадите у шеми израде.

Затим морате додати још једну особину у датотеку пројекта Инфо.плист. Вредност овог својства биће динамично решена током извођења на име тренутне конфигурације.

Ово је све унапред конфигурисано за вас у шаблону.

Једино што преостаје је написати класу која може дохватити те варијабле током извођења, овисно о конфигурацији одабраној у шеми градње. Предложак садржи класу ЦонфигуратионМанагер која може дохватити варијабле за тренутно окружење. Можете проверити имплементацију те класе на Гитхуб-у да бисте видели како она функционише.

Реадме

Сваки пројекат треба да има основни Реадме који барем има упутства како инсталирати зависности и покренути пројекат. Такође треба да садржи опис архитектуре и модула пројекта. Нажалост, програмери не воле да пишу документацију (реадме је део тога) и видео сам пројекат који се месецима развијао и имали су чак и основни Реадме. Да бисте уклонили терет писања овог основног читања, шаблон садржи стандардни реадме који покрива инсталацију и структуру пројекта. Када поставите нови пројекат помоћу обрасца, аутоматски ћете укључити Реадме.

Гитигноре

Данас већина пројеката користи ГИТ као свој систем контроле верзија. Када користите ГИТ, обично не желите да игноришете неке датотеке или мапе у пројекту, као што су фасцикла за изградњу или изведена мапа података. Да би вам уштедио проблем у тражењу гитигноре датотеке која одговара вашем иОС пројекту, шаблон укључује стандардни гитигноре који пружају Гитхуб сарадници.

Базне класе за руковање дубинским везама и нотификацијама

Готово свака апликација у данашње време мора да обрађује дубинске везе и обавештења. Да би то постигао, програмер мора написати одређену количину коде на плочи у класи АппДелегате. Предложак је обухваћен и пружа основне базе које олакшавају рад са дубинским везама и нотификацијама.

Резиме

Укратко, предложак покушава да укључи најбоље праксе и интегрише корисне алате треће стране. Ово би требало да уштеди вас и наш тим проведених на новом постављању пројеката, а такође да пружи заједничку и снажну основу за остатак пројекта. Нека вам добро послужи!

ПС: Ако имате било каквих проблема или захтева за функцију предлошка, једноставно ми оставите проблем на Гитхуб-у. Покушаћу да је решим у слободно време.