iOS-разработка
Все объяснения, задачи и лабораторная в одном месте.
Можно сохранить страницу в PDF через печать браузера. Для печати разборы ответов раскрываются автоматически.
1. Экосистема iOS и app lifecycle
Объяснение
Приложение переходит между foreground, background и завершением. ОС ограничивает фоновую работу. Состояние, нужное после перезапуска, должно быть сохранено, а не только находиться в памяти view.
Задача для самостоятельного решения
Можно ли рассчитывать на бесконечную фоновую синхронизацию?
Показать разбор ответа
Нет: система управляет временем и условиями. Сохраняйте очередь работы и обеспечивайте восстановление после прерывания.
2. SwiftUI layout, state и navigation
Объяснение
SwiftUI описывает интерфейс как функцию состояния. Владение моделью определяет место её создания и хранения. Идентичность элементов списка влияет на сохранение локального состояния и анимации.
Задача для самостоятельного решения
Почему случайный UUID при каждом построении строки списка вреден?
Показать разбор ответа
SwiftUI видит новый элемент вместо прежнего, теряет его состояние и лишний раз перестраивает UI. Используйте устойчивый идентификатор данных.
3. Concurrency и networking
Объяснение
async/await упрощает ожидание сети. Обновление UI должно соблюдать изоляцию главного actor. Отмена запроса и обработка неверного ответа — отдельные ветви состояния.
Задача для самостоятельного решения
Как предотвратить показ устаревшего поиска?
Показать разбор ответа
Отменить предыдущую Task или проверить идентификатор актуального запроса до изменения модели. Учитывайте, что отмена кооперативна.
4. Persistence и offline mode
Объяснение
Локальный кеш ускоряет чтение, но нуждается в версии и политике устаревания. Долговременные пользовательские записи отличаются от удаляемого кеша. Конфликт синхронизации требует сохранения пользовательского намерения.
Задача для самостоятельного решения
Можно ли очищать каталог пользовательских документов как кеш?
Показать разбор ответа
Нет. Потеря кеша восстанавливается из источника, а уникальная пользовательская работа — нет. Разделите хранение и резервирование этих классов данных.
5. Accessibility, tests и Instruments
Объяснение
VoiceOver использует доступные названия и порядок элементов. Dynamic Type меняет размер текста. Instruments выявляет задержки, утечки и лишнюю работу. Крупный шрифт не должен обрезать основное действие.
Задача для самостоятельного решения
Как проверить карточку с длинным заголовком?
Показать разбор ответа
Включить большой Dynamic Type, проверить перенос строк, порядок VoiceOver и доступность кнопок. Фиксированная высота текстового блока часто ломает сценарий.
6. Signing, privacy и release process
Объяснение
Подпись определяет происхождение и разрешения приложения. Запрашивать доступ к данным следует в контексте действия. Release-проверка включает privacy-настройки, endpoint и восстановление покупки, если она есть.
Задача для самостоятельного решения
Когда объяснять запрос камеры?
Показать разбор ответа
Когда пользователь начинает действие, которому нужна камера, с ясным назначением. Отказ должен иметь предусмотренный сценарий, а не считаться исключением.
Лабораторная работа
Подготовка
Xcode и учебный SwiftUI-проект. Поместите view в приложение.
Учебный пример
import SwiftUI
struct CounterView: View {
@State private var count = 0
var body: some View {
Button("Нажатий: \(count)") { count += 1 }
}
}Как работает пример и что ожидать
State принадлежит идентичности view в дереве и меняет отображение при нажатии. Этот пример не сохраняет значение после полного перезапуска. Он показывает локальное состояние; долговременные заметки должны храниться отдельно.
Итоговая работа
Создайте приложение заметок с локальным хранилищем, загрузкой API и отменой Task при уходе. Проверьте VoiceOver, Dynamic Type, offline-режим и миграцию данных. Подготовьте release-проверку на устройстве.
Проверка результата
1. Опишите исходные данные и условия запуска, чтобы другой человек мог повторить работу.
2. Приложите результат обычного сценария и сравните его с ожидаемым.
3. Проверьте неверный вход, граничный случай и отказ зависимости, если она есть.
4. Объясните выбранное решение и известное ограничение.
5. Сохраните исправления после самопроверки вместе с примером, который раньше не работал.
Как оценить работу
По каждому пункту поставьте 0 (не выполнено), 1 (выполнено с пробелами) или 2 (результат воспроизводим и объяснён). Если обязательный сценарий не работает, вернитесь к нему независимо от общей суммы. Это рубрика самопроверки: сайт не исполняет присланный код и не выдаёт автоматическую оценку проекта.