5. Данные пользователя
Как хранить?
• Как пришли, так и храним ;)
• JSON/XML
• Property List's
• База данных (sqlite3)
• NSCoding (Key-Value archiving)
• Свой супер-формат*
14. Представление данных
NSDictionary
• Нечитабельный код
• Сложно отлавливать ошибки
• Не известно, какие поля еще могут быть
• Не известны типы полей
• Избыточные данные
16. Представление данных
NSObject
User * user;
UILabel * nameLabel;
nameLabel.text = user.name;
ageLabel.text =
[NSString stringWithFormat:@"%d",user.age];
17. Представление данных
NSObject
• Красивый код
• Всегда известна модель
• Подсветка синтаксиса*
• Всегда известны типы полей
• Проверка на этапе компиляции
23. Кэш в приложении
О чем надо всегда подумать
• Сколько занимает?
• Когда чистить?
• Правила кэширования для ресурсов
• Где хранить?
• Сколько уровней?
• Не забивать все пространство кэшем
24. Кэш в приложении
Есть стандартные решения
• NSURLCache
• TTURLCache (Three20)
• RestKit
• Стандартные реализации, в основном
кэшируют исключительно в памяти
25. Данные в приложении
Виды данных (условно)
• Данные пользователя
• Настройки
• Кэш
• Защищенные данные
27. Данные в приложении
В итоге
• Выбираем формат
• Стараемся избегать NSDictionary - представлений
• Кэшируем с умом
• Секретные данные - храним в KeyChain
29. Проектирование User
Flow
О ролях
• Дизайнер думает о дизайне
• PM думает о проекте
• FM думает о финансах
• Программист думает обо всем по чуть-чуть ;)
30. Проектирование User
Flow Читаем ТЗ, Смотрим на дизайн
Вспоминаем про
• Model
• View
• Controller
31. Проектирование User
Flow Читаем ТЗ, Смотрим на дизайн
Всегда можно сделать по-разному.
Всегда нужно стараться быть на шаг впереди желаний заказчика
32. Проектирование User
Flow Читаем ТЗ, Смотрим на дизайн
Стараемся выделять части, которые можно будет потом
повторно использовать
33. Проектирование User
Flow Читаем ТЗ, Смотрим на дизайн
Не пытаемся вместить все на один экран.
Разделяем и властвуем
35. Проектирование User
Flow
Еще немного мыслей
• Model - View - Controller
• Подробные детали
• UINavigationController
• Независимые части приложения
• UITabBarController
36. Проектирование User
Flow
Еще немного мыслей
• жизненный цикл UIViewController
• данные - в модели
• данные НЕ в UIView
• UIViewController отвечает за свою задачу
38. Проектирование User
Flow
И еще немного мыслей
• Решите, кто хранит данные
• Каким образом другие доступаются к этим данным
• Делегирование помогает для переиспользовании кода
40. Работа с сетью
Основы
• Всегда помним про задержки
• Мы - на GbEthernet, пользователь на GPRS
• Уменьшаем необходимость
последовательных запросов
• Количество запросов vs Размер запросов
• Сервер может и не ответить
• Порядок ответов от сервера
41. Работа с сетью
Основы
• Используем доступные асинхронные API
• NSURLConnection
• ASIHTTPRequest
• TTURLRequest
• Помним про кэширование
42. Работа с сетью
UIKit
С UIKit всегда работаем из главного потока
if ([NSThread isMainThread]) {
[self updateView];
} else {
[self performSelectorOnMainThread:
@selector(updateView)
withObject:nil
waitUntilDone:NO];
}
43. Работа с сетью
Parsing и иже с ним
"Тяжелые" задачи необходимо выполнять в
фоне.
• Parsing
• Сохранение в файловую систему
• Долгие, заумные вычисления смысла
жизни
44. Работа с сетью
Reachability
• Позволяет проверить состояние сети
• Позволяет следить за изменением
состояния сети
• Для приложений, активно использующих
сетевой трафик - обязателен
48. Автоматическая сборка
Зачем, если для этого надо
• Изучить xcodebuild
• Перелопатить Интернет
• Разобраться с профилми и сертификатами
• Все настроить
• Помочь другим настроить
• И оно не будет работать,я уже пробовал
(с)
49. Автоматическая сборка
Зачем?
• Время - главный ресурс
• Возможность собрать и закачать
приложение на телефон без Xcode
• Можно заняться полезным делом, а не по
пять раз на день заливать на девайс
тестерам разные приложения разных версий
• Выигрыш в больших командах
50. Автоматическая сборка
Кто?
• Разработчик на базе шаблона создает
файлы конфигурации для проекта
• Для каждого варианта сборки разработчик
предоставляет provisioning profile
• Все на основе шаблонов
• PM/Tester запускают необходимые им
скрипты либо закачивают с HTTP-server'a
51. Автоматическая сборка
Как?
• xcodebuild
• создание IPA-файла
• создание plist файла
• выкладывание на сервер
• все самописное
• есть и другие варианты (Jenkins, да и
Google)