Как Slack модернизира мобилното си приложение и го направи напълно Swift на iOS
Връзка към оригинала (дата на публикуване: 2022/01/15)
Slack успя да модернизира своите приложения за iOS и Android и да прегърне новите тенденции в дизайна. Това позволява пълно преминаване към Swift за iOS, наред с други неща.
Когато инженерите на Slack решиха да обновят своите приложения за iOS и Android, те трябваше да се изправят пред реалността на две кодови бази на няколко години. Кодовата му база се разраства органично, натрупвайки значителен технически дълг с течение на времето. След като изоставихме идеята за цялостно пренаписване и повторна употреба на код в различни платформи, решихме да направим цялостно преработване.
За да постигне този резултат, екипът си постави три различни цели. Те включват стабилизиране на кодовата база за премахване на технически дълг, модулиране на приложения в отделни компоненти и модернизиране на усилията за дизайн и стек на технологии.
Стабилизирането беше първата стъпка. Например в iOS пренаписахме останалата част от приложението, което все още беше написано на Objective-C, в Swift. Според инженерите на Slack съвместното съществуване на код на Swift и Objective-C в един и същи проект забавя компилирането и оказва влияние върху производителността. Изискванията за оперативна съвместимост обаче възпрепятстваха приемането на нови функции на езика Swift.
Освен това трябваше да пренапишем код, който осъществява директен достъп до Core Data, за да използваме нашата собствена рамка за устойчивост, базирана на Core Data. Това подобрява производителността и стабилността. По подобен начин всички мрежови операции са пренаписани, за да използват рамката за взаимно свързване.
В Android по-голямата част от работата беше насочена към разделяне на няколко монолита, използвани за достъп до мрежа и база данни. Последният използва SQLDelight и мигрира всички съществуващи SQLite заявки. Освен това екипът на Slack възприе модела на хранилището. Това улеснява подобряването на производителността чрез поддържане на по-интелигентно кеширане.
Ключов елемент от фазата на стабилизиране беше проследяването на напредъка с помощта на ясни показатели, свързани с всяка от горните цели. Например, за да проследи прехода от Objective-C към Swift, екипът използва скрипт за преброяване на броя на оставащите Objective-C файлове. Освен това преброяването на остарелите имена на класове и имена на методи ми помогна да разбера останалата част от пътя към моята цел.
Както споменахме по-рано, модулирането има за цел да отдели много компоненти от два съществуващи монолита. Това усилие намали взаимозависимостите и времето за изграждане, което нарастваше заедно с кодовата база. Но голям принос има възможността отделните екипи да работят по по-независим начин.
Инженерите на Slack предоставиха много повече предистория и подробности за фазата на стабилизиране на проекта, отколкото могат да бъдат обобщени тук. Така че не пропускайте оригиналната публикация за пълната картина.