Нативна розробка iOS-застосунку на Objective-C
Objective-C — не legacy у сенсі «застаріло та не працює». Це production-ready мова з повною підтримкою Apple SDK, яка до сих пір компілюється в ті ж бінарики, що й Swift. Різниця в тому, що нові API Apple виходять з Swift-first аннотаціями, а деякі concurrency-фічі недоступні. Для підтримки існуючих ObjC-кодових баз або особливих вимог клієнта — це повністю рабочий шлях.
Коли це актуально
Основний сценарій: крупна кодова база на Objective-C, яку нецілеспрямовано повністю мігрувати. Додавання нового функціоналу на ObjC підтримує одноманітність, знижує ризик помилок на Swift/ObjC boundary та спрощує ревью для команди.
Другий сценарій: C/C++ інтеграція. Objective-C++ (.mm файли) дозволяє прямо змішувати C++ та ObjC код — це вітається в embedded, audio, game-рушіях, де core library написана на C++. Swift вибивает C++ через bridging header, але це складніше та менш прозоро.
Архітектура та паттерни
MVC — стандарт UIKit, але в ObjC він особливо схильний перетворюватися в Massive View Controller. Делегуємо логіку в окремі класи: NSObject-нащадки як service layer, NSOperation / NSOperationQueue для керованої конкурентності, NSNotificationCenter для слабосвязаних подій.
Паттерни управління пам'яттю: ARC закриває більшість кейсів, але __weak та __unsafe_unretained потребують обережності в delegate-паттернах та block-калбеках. retain cycle у ObjC block — self захоплюється неявно, потрібен __weak typeof(self) weakSelf = self + __strong typeof(weakSelf) strongSelf = weakSelf всередину блока.
Мережевий шар: NSURLSession з completion handlers або Alamofire (котрий прекрасно працює з ObjC через bridging). JSON-парсинг: NSJSONSerialization нативно або Mantle для model mapping.
Типові проблеми в ObjC-проектах
EXC_BAD_ACCESS на nil-dereference відбувається рідше тому, що повідомлення nil в ObjC повертає 0/nil замість краху — але це ж маскує логічні помилки. NSZombies (Edit Scheme → Diagnostics → Enable Zombie Objects) допомагає ловити звернення до звільнених об'єктів у Debug-сборках.
Category collision: два різні pod'и додають категорію на NSString з однаковим іменем методу — undefined behavior. Проявляється як випадковий краш або неочікуване поведінка. Рішення: namespace-префікси методів категорій (my_trimmed замість trimmed).
Xcode 15 видає попередження на ObjC код, який не був помічений NS_SWIFT_UNAVAILABLE — це не помилки, але варто їх розібрати.
Процес
Аналогічний Swift-розробці: Clean Architecture адаптується під ObjC без втрат. Unit-тестування через XCTest працює ідентично. Fastlane для CI/CD — без змін. Firebase Crashlytics, Amplitude, Segment — всі підключаються через CocoaPods з ObjC-сумісними API.
Строки та вартість — аналогічні Swift-розробці порівнюваного масштабу. Простий застосунок: 3–4 тижні. Складний з інтеграціями: 2–3 місяці. Розраховується індивідуально після аналізу ТЗ.







