И снова разработка под iOS. Павел Тайкало

1,497 views

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,497
On SlideShare
0
From Embeds
0
Number of Embeds
254
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

И снова разработка под iOS. Павел Тайкало

  1. 1. И сноваразработка под iOS
  2. 2. Разработка под iOS•• Данные в приложении• Проектирование User Flow• Работа с сетью• Автоматическая сборка
  3. 3. Данные вприложении
  4. 4. Данные в приложенииВиды данных (условно)• Данные пользователя• Настройки• Кэш• Защищенные
  5. 5. Данные пользователяКак хранить?• Как пришли, так и храним ;)• JSON/XML• Property Lists• База данных (sqlite3)• NSCoding (Key-Value archiving)• Свой супер-формат*
  6. 6. Данные пользователяКак выбрать?• Большие объемы данных• Сложные запросы к даннымБазы данных (sqlite3) CoreData, FMDB, sqlite3
  7. 7. Данные пользователяКак выбрать?• Небольшие наборы данных• Несложные выборки• Plist Files• XML / JSON• NSCoding• Свой супер формат*
  8. 8. Форматы данных
  9. 9. Формат передачи• XML• JSON• Protocol Buffers*• ССФ
  10. 10. Формат передачи• XML• JSON• Protocol Buffers*• ССФ
  11. 11. Представление данныхна устройстве Parser • NSDictionary • XML • NSObject
  12. 12. Представление данныхNSDictionary (XML)NSDictionary * user;UILabel * nameLabel;userNameLabel.text = [user objectForKey:@"name"];
  13. 13. Представление данныхNSDictionary (XML)NSDictionary * user;UILabel * nameLabel;...static const NSString * kUserNameKey = @"name";....userNameLabel.text = [user objectForKey:kUserNameKey];
  14. 14. Представление данныхNSDictionary • Нечитабельный код • Сложно отлавливать ошибки • Не известно, какие поля еще могут быть • Не известны типы полей • Избыточные данные
  15. 15. Представление данныхNSObject@interface User : NSObject@property(nonatomic,strong) NSString * name;@property(nonatomic,strong) int age;@end
  16. 16. Представление данныхNSObjectUser * user;UILabel * nameLabel;nameLabel.text = user.name;ageLabel.text =[NSString stringWithFormat:@"%d",user.age];
  17. 17. Представление данныхNSObject • Красивый код • Всегда известна модель • Подсветка синтаксиса* • Всегда известны типы полей • Проверка на этапе компиляции
  18. 18. Представление данныхна устройстве Parser NSObject
  19. 19. Данные в приложенииВиды данных (условно)• Данные пользователя• Настройки• Кэш• Защищенные
  20. 20. Настройки приложенияNSUserDefaults• Очень просто работать• Не для больших данных• Картинки• NSCoding• Интеграция с Settings.app• Не защищенное хранилище
  21. 21. Настройки приложенияNSUserDefaultsNSUserDefaults * defaults =[NSUserDefaults standardUserDefaults];[defaults setObject:@"tt.kilew" forKey:@"name"];[defaults synchronize];
  22. 22. Данные в приложенииВиды данных (условно)• Данные пользователя• Настройки• Кэш• Защищенные
  23. 23. Кэш в приложенииО чем надо всегда подумать• Сколько занимает?• Когда чистить?• Правила кэширования для ресурсов• Где хранить?• Сколько уровней?• Не забивать все пространство кэшем
  24. 24. Кэш в приложенииЕсть стандартные решения• NSURLCache• TTURLCache (Three20)• RestKit• Стандартные реализации, в основномкэшируют исключительно в памяти
  25. 25. Данные в приложенииВиды данных (условно)• Данные пользователя• Настройки• Кэш• Защищенные данные
  26. 26. Защищенные данныеKeychain• Логины• Явки• Пароли• Сертификаты• Закрытые ключиЦелый Security.framework
  27. 27. Данные в приложенииВ итоге• Выбираем формат• Стараемся избегать NSDictionary - представлений• Кэшируем с умом• Секретные данные - храним в KeyChain
  28. 28. Проектирование User Flow
  29. 29. Проектирование UserFlowО ролях• Дизайнер думает о дизайне• PM думает о проекте• FM думает о финансах• Программист думает обо всем по чуть-чуть ;)
  30. 30. Проектирование UserFlow Читаем ТЗ, Смотрим на дизайн Вспоминаем про • Model • View • Controller
  31. 31. Проектирование UserFlow Читаем ТЗ, Смотрим на дизайн Всегда можно сделать по-разному. Всегда нужно стараться быть на шаг впереди желаний заказчика
  32. 32. Проектирование UserFlow Читаем ТЗ, Смотрим на дизайн Стараемся выделять части, которые можно будет потом повторно использовать
  33. 33. Проектирование UserFlow Читаем ТЗ, Смотрим на дизайн Не пытаемся вместить все на один экран. Разделяем и властвуем
  34. 34. Проектирование UserFlow Читаем ТЗ, Смотрим на дизайн
  35. 35. Проектирование UserFlowЕще немного мыслей• Model - View - Controller• Подробные детали• UINavigationController• Независимые части приложения• UITabBarController
  36. 36. Проектирование UserFlowЕще немного мыслей• жизненный цикл UIViewController• данные - в модели• данные НЕ в UIView• UIViewController отвечает за свою задачу
  37. 37. Проектирование UserFlow UI Flow, Data Flow
  38. 38. Проектирование UserFlowИ еще немного мыслей• Решите, кто хранит данные• Каким образом другие доступаются к этим данным• Делегирование помогает для переиспользовании кода
  39. 39. Работа с сетью
  40. 40. Работа с сетьюОсновы• Всегда помним про задержки• Мы - на GbEthernet, пользователь на GPRS• Уменьшаем необходимостьпоследовательных запросов• Количество запросов vs Размер запросов• Сервер может и не ответить• Порядок ответов от сервера
  41. 41. Работа с сетьюОсновы• Используем доступные асинхронные API • NSURLConnection • ASIHTTPRequest • TTURLRequest• Помним про кэширование
  42. 42. Работа с сетьюUIKitС UIKit всегда работаем из главного потокаif ([NSThread isMainThread]) { [self updateView];} else { [self performSelectorOnMainThread: @selector(updateView) withObject:nil waitUntilDone:NO];}
  43. 43. Работа с сетьюParsing и иже с ним"Тяжелые" задачи необходимо выполнять вфоне.• Parsing• Сохранение в файловую систему• Долгие, заумные вычисления смыслажизни
  44. 44. Работа с сетьюReachability• Позволяет проверить состояние сети• Позволяет следить за изменениемсостояния сети• Для приложений, активно использующихсетевой трафик - обязателен
  45. 45. Работа с сетьюАрхитектурa"Отвяжитесь" от конкретной реализации. HTTP Reques APP t DB API Long calculation
  46. 46. Работа с сетьюАрхитектурaПриложение знает только про Request API Reques ? APP t API
  47. 47. Автоматическая сборка
  48. 48. Автоматическая сборкаЗачем, если для этого надо• Изучить xcodebuild• Перелопатить Интернет• Разобраться с профилми и сертификатами• Все настроить• Помочь другим настроить• И оно не будет работать,я уже пробовал(с)
  49. 49. Автоматическая сборкаЗачем?• Время - главный ресурс• Возможность собрать и закачатьприложение на телефон без Xcode• Можно заняться полезным делом, а не попять раз на день заливать на девайстестерам разные приложения разных версий• Выигрыш в больших командах
  50. 50. Автоматическая сборкаКто?• Разработчик на базе шаблона создаетфайлы конфигурации для проекта• Для каждого варианта сборки разработчикпредоставляет provisioning profile• Все на основе шаблонов• PM/Tester запускают необходимые имскрипты либо закачивают с HTTP-servera
  51. 51. Автоматическая сборкаКак?• xcodebuild• создание IPA-файла• создание plist файла• выкладывание на сервер• все самописное• есть и другие варианты (Jenkins, да иGoogle)
  52. 52. Автоматическая сборкаКак?
  53. 53. Автоматическая сборкаКонфигурацияPROFILE_NAME = ${BUILD_TYPE}.mobileprovisionPROJECT_NAME = SuperProjectPROJECT_APP_FILE_NAME=${PROJECT_NAME}SCHEME_NAME=${PROJECT_NAME}WORKSPACE_NAME=${PROJECT_NAME}IPHONE_SDK=iphoneos5.0SIGNING_IDENTITY="iPhone Developer: Logan Yohanson"BUILD_TARGET=""CLEAN_BEFORE_BUILD=0IPA_URL="http://mysite/${PROJECT_NAME}"http://blog.carbonfive.com/2011/05/04/automated-ad-hoc-builds-using-xcode-4/
  54. 54. Секретный iDevice (о чем забывают разработчики)
  55. 55. Секретный iDevice Cores : 4 CPU : 2 GHz ? RAM HDD : 8 GB : 250GB Netw :~100Mb GPURAM: 256MB
  56. 56. Секретный iDeviceПользователи непокупают симуляторы WWDC11 Videos
  57. 57. Simulator vs iDevice ?
  58. 58. Simulator vs iDevice • Большие картинки ? • Сложные вычисления • Все данные из сети • Утечки памяти • GPS модуль • Раздраженный пользователь
  59. 59. Спасибо за внимание!Тайкало Павелemail : ptaykalo@stanfy.com.uaskype : tt.kilewsite : http://stanfy.com.ua

×