Я в сфере iOS-разработки с 2009 года, но только в это время задумался с суммарном стэке технологий, которые должен знать уважающий себя iOS-разработчик. Знания – это вещь, на самом деле очень, очень субъективная. Для кого-то они необходимы, а кому-то вообще не нужны.
Тем не менее я подготовил список паттернов и технологий, с которыми так или иначе пришлось столкнуться за последние 7 лет. Надеюсь, что для кого-то он будет очень полезен с точки зрения определения вектора дальнейшего развития. Постараюсь прокомментировать каждый раздел списка:
Языки программирования
- Objective-C
- Swift
- Java
- C/C++
- C#
- Kotlin
Разумеется, в сфере iOS в 99% случаях используются языки Objective-C и/или Swift, но тем не менее всегда полезно знать и другие, их плюсы и минусы. К тому же большинство крупных библиотек (openssl, opencv и т.д.) написаны на C/C++.
ООП
- Полиморфизм
- Инкапсуляция
- Наследование
- Абстракция
Ну куда в наше время без понимания Объектно-Ориентированного Программирования?
Парадигмы
- MVC
- MVP
- MVVM
- VIPER
Лично я сторонник MVC (правда с разделением обязанностей контроллера, чтобы он не был Massive, а не как нас учит Apple), но тем не менее крайне желательно знать и другие подходы, их +/-.
Паттерны
- Singleton
- Protocols
- Closures
- Extensions
- Optionals
- Nullability
- Generics
- Tuples
- Notifications
Крайне важно знать возможности языков и их гибкость для более лаконичного написания кода.
Xcode
- Signing
- Capabilities
- Entitlements
- MRC
- ARC
- Assets
- Aggregate
- Runtime
- Documentation
Вы можете писать на альтернативных IDE (например, AppCode), но в любом случае сначала надо изучить Xcode, его капризы и его возможности.
iOS SDK Frameworks
- CoreData
- CoreAnimation
- CoreText
- CoreImage
- CoreMotion
- CoreSpotlight
- QuartzCore
- MapKit
- AVFoundation
- WatchKit
- HealthKit
- CloudKit
- GameKit
- EventKit
- LocalAuthentication
- Contacts
- Messages
- AddressBook
- AssetsLibrary
- Photos
- MediaPlayer
- Intents
- SiriKit
- NotificationCenter
- UserNotifications
- StoreKit
- Speech
- Security
- NetworkExtension
- WebKit
- SpriteKit
- SceneKit
Как-то себя поймал на мысли, что не так важно и затратно изучить язык программирования, как сам SDK платформы, его возможности. За 7 лет до сих пор не использовал более 90% фреймворков iOS SDK из-за лимита времени / отсутствия необходимости. А ведь каждый год Apple добавляет новые!
iOS/macOS
- Keychain
- Sandbox
- URL Scheme
- Push Notifications
- Local Notifications
- Background Modes
- In-App Purchase
- Data Protection
Это базовые термины, которые на мой взгляд необходимо знать пользователю iOS/macOS, не говоря уже о разработчике.
UI
- AutoLayout
- Size Classes
- AutoResizing
- Material Design
- Image Slicing
- Vector Image
Умение конструировать интерфейс неотделимо от процесса разработки iOS-приложения.
Контроль версий
- Git
- Svn
- Mercurial
Куда без Гита в современном мире? Но иногда полезно знать и другие системы контроля версий.
Системы трекинга
- Jira
- TFS
- Redmine
Очень важно не только уметь использовать системы для трекинга задач, но и полюбить их
Многопоточность
- GCD
- NSThread
- NSOperation
Мы же не консольное приложение пишем, так ведь? Apple предоставила нам несколько путей для использования многопоточности, у каждой свои +/-.
DevOps
- Continuous Integration
- Continuous Delivery
- Unit Testing
- UI Testing
- Autobuilds
- Autotesting
- Mobile Device Management
- Jenkins
- Fastlane
- SwiftLint
Довольно часто за последнее время мы слышим это волшебное слово. Чаще всего в этом процессе Dev развит намного лучше, чем Ops, из-за тех или иных ограничений политики компании.
Сетевое взаимодействие
- Rest
- XML
- JSON
- Soap
- SSL
- App Transport Security
Я уже и забыл, когда последний раз писал приложение, у которого не было бы клиент-серверного взаимодействия.
Командное взаимодействие
- Agile
- Scrum
- Kanban
- Waterfall
За последние несколько лет Agile захватил почти все IT-компании, но не везде это применяют правильно.
Apple
- iOS Provisioning Portal
- iTunes Connect
Эти порталы были практически сразу добавлены в закладки моего браузера.
Сторонние библиотеки
- GoogleAnalytics
- YandexMetric
- Crashlytics
- Flurry
- GoogleMaps
- YandexMaps
- OpenStreetMaps
- Facebook SDK
- Twitter SDK
- VK SDK
- Reveal
Вообще я противник использования сторонних библиотек в своих проектах, если в этом нет необходимости. Почему многие используют AFNetworking, если можно сделать свой более легкий без лишней мишуры? Перед встраиванием открытых модулей третьих лиц в свой проект крайне важно полностью изучить коды на предмет закладок и корректной работоспособности именно в Вашем проекте. Давайте пофантазируем: Легко может быть такое, что запуская приложение на симуляторе, коды стороннего компонента будут сканировать коды проекта (а такие возможности у iOS Simulator имеются через NSFileManager) и высылать их на свой удаленный сервер. Вот поэтому я и не люблю лишние зависимости. Исключения составляют библиотеки для подключениям к всем известным сервисам, модули к которым самим писать было бы глупо и бессмысленно.
Пишите свои комментарию по этому поводу, а также вещи, которые вы считаете необходимыми для того, чтобы быть желанным iOS-разработчиком в любой IT-компании.