Написать приложение для iOS. Приложение должно состоять из одного экрана со списком. Список данных в формате JSON приложение загружает из интернета по ссылке, необходимо распарсить эти данные и отобразить их в списке.
- SwiftGen для шрифтов и изображений
- SwiftFormat (pre-commit git hook)
- swiftlint (build phase)
- GitHub actions + fastlane
- iOS 13+
- Поддержка iPhone и iPad
- GitFlow
- Светлая + тёмная темы
- UICollectionViewDiffableDatasource + CompositionalFlowLayout
- VIPER (without router as there is no routing)
- Виброотдача для алертов
- Мониторинг подключения к интернету
- Динамическое отображение иконки отсутвия интернета
- Логирование ошибок и ивентов
- При нажатии на номер сотрудника - action sheet с возможностью позвонить по номеру
- Сетевые запросы на URLSession
- Кэширование запроса на 1 час
- SwipeToRefresh с принудительным обновлением данных при наличие интернета
- Unit Тесты
- UI тесты (snapshot проверка)
- Выгрузка логов тестов в github actions artefacts при проваленном тестировании
- Поддержка вертикальной и горизонтальной ориентации
Требования по выполнению:
- Приложение работает на iOS 13 и выше
- Реализована поддержка iPhone и iPad
- Список отсортирован по алфавиту
- Кэширование ответа на 1 час
- Обработаны случаи потери сети / отсутствия соединения
Внешний вид приложения: по возможности, лаконичный, но, в целом, на усмотрение кандидата.
- Приложение написано на языке Swift
- Пользовательский интерфейс приложения настроен в InterfaceBuilder (в Storiboard или Xib файлы) или кодом без использования SwiftUI
- Для отображения списка используется UITableView, либо UICollectionView
- Для запроса данных используется URLSession
- Код должен быть выложен в git-репозиторий на github.com и отправлен нам.
Пример данных API:
{
"company": {
"name":"Avito",
"employees": [
{
"name": "John",
"phone_number": "769453",
"skills": ["Swift", "iOS"]
},
{
"name": "Diego",
"phone_number": "987924",
"skills": ["Kotlin", "Android"]
},
{
"name": "Alfred",
"phone_number": "452533",
"skills": ["Objective-C", "Android", "Photoshop"]
},
{
"name": "John",
"phone_number": "212456",
"skills": ["Java", "Python"]
},
{
"name": "Mat",
"phone_number": "778975",
"skills": ["Android", "MovieMaker"]
},
{
"name": "Bob",
"phone_number": "456468",
"skills": ["Groovy", "Kotlin"]
},
{
"name": "Marty",
"phone_number": "321789",
"skills": ["Android", "PHP", "C#"]
}
]
}
}