• Save
И снова разработка под iOS. Павел Тайкало
Upcoming SlideShare
Loading in...5
×
 

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

on

  • 1,473 views

 

Statistics

Views

Total Views
1,473
Views on SlideShare
1,223
Embed Views
250

Actions

Likes
1
Downloads
0
Comments
0

5 Embeds 250

http://stanfy.com.ua 199
http://stanfy.com 36
http://ru.stanfy.com 10
http://feeds2.feedburner.com 4
http://feeds.feedburner.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

  • И сноваразработка под iOS
  • Разработка под iOS•• Данные в приложении• Проектирование User Flow• Работа с сетью• Автоматическая сборка
  • Данные вприложении
  • Данные в приложенииВиды данных (условно)• Данные пользователя• Настройки• Кэш• Защищенные
  • Данные пользователяКак хранить?• Как пришли, так и храним ;)• JSON/XML• Property Lists• База данных (sqlite3)• NSCoding (Key-Value archiving)• Свой супер-формат*
  • Данные пользователяКак выбрать?• Большие объемы данных• Сложные запросы к даннымБазы данных (sqlite3) CoreData, FMDB, sqlite3
  • Данные пользователяКак выбрать?• Небольшие наборы данных• Несложные выборки• Plist Files• XML / JSON• NSCoding• Свой супер формат*
  • Форматы данных
  • Формат передачи• XML• JSON• Protocol Buffers*• ССФ
  • Формат передачи• XML• JSON• Protocol Buffers*• ССФ
  • Представление данныхна устройстве Parser • NSDictionary • XML • NSObject
  • Представление данныхNSDictionary (XML)NSDictionary * user;UILabel * nameLabel;userNameLabel.text = [user objectForKey:@"name"];
  • Представление данныхNSDictionary (XML)NSDictionary * user;UILabel * nameLabel;...static const NSString * kUserNameKey = @"name";....userNameLabel.text = [user objectForKey:kUserNameKey];
  • Представление данныхNSDictionary • Нечитабельный код • Сложно отлавливать ошибки • Не известно, какие поля еще могут быть • Не известны типы полей • Избыточные данные
  • Представление данныхNSObject@interface User : NSObject@property(nonatomic,strong) NSString * name;@property(nonatomic,strong) int age;@end
  • Представление данныхNSObjectUser * user;UILabel * nameLabel;nameLabel.text = user.name;ageLabel.text =[NSString stringWithFormat:@"%d",user.age];
  • Представление данныхNSObject • Красивый код • Всегда известна модель • Подсветка синтаксиса* • Всегда известны типы полей • Проверка на этапе компиляции
  • Представление данныхна устройстве Parser NSObject
  • Данные в приложенииВиды данных (условно)• Данные пользователя• Настройки• Кэш• Защищенные
  • Настройки приложенияNSUserDefaults• Очень просто работать• Не для больших данных• Картинки• NSCoding• Интеграция с Settings.app• Не защищенное хранилище
  • Настройки приложенияNSUserDefaultsNSUserDefaults * defaults =[NSUserDefaults standardUserDefaults];[defaults setObject:@"tt.kilew" forKey:@"name"];[defaults synchronize];
  • Данные в приложенииВиды данных (условно)• Данные пользователя• Настройки• Кэш• Защищенные
  • Кэш в приложенииО чем надо всегда подумать• Сколько занимает?• Когда чистить?• Правила кэширования для ресурсов• Где хранить?• Сколько уровней?• Не забивать все пространство кэшем
  • Кэш в приложенииЕсть стандартные решения• NSURLCache• TTURLCache (Three20)• RestKit• Стандартные реализации, в основномкэшируют исключительно в памяти
  • Данные в приложенииВиды данных (условно)• Данные пользователя• Настройки• Кэш• Защищенные данные
  • Защищенные данныеKeychain• Логины• Явки• Пароли• Сертификаты• Закрытые ключиЦелый Security.framework
  • Данные в приложенииВ итоге• Выбираем формат• Стараемся избегать NSDictionary - представлений• Кэшируем с умом• Секретные данные - храним в KeyChain
  • Проектирование User Flow
  • Проектирование UserFlowО ролях• Дизайнер думает о дизайне• PM думает о проекте• FM думает о финансах• Программист думает обо всем по чуть-чуть ;)
  • Проектирование UserFlow Читаем ТЗ, Смотрим на дизайн Вспоминаем про • Model • View • Controller
  • Проектирование UserFlow Читаем ТЗ, Смотрим на дизайн Всегда можно сделать по-разному. Всегда нужно стараться быть на шаг впереди желаний заказчика
  • Проектирование UserFlow Читаем ТЗ, Смотрим на дизайн Стараемся выделять части, которые можно будет потом повторно использовать
  • Проектирование UserFlow Читаем ТЗ, Смотрим на дизайн Не пытаемся вместить все на один экран. Разделяем и властвуем
  • Проектирование UserFlow Читаем ТЗ, Смотрим на дизайн
  • Проектирование UserFlowЕще немного мыслей• Model - View - Controller• Подробные детали• UINavigationController• Независимые части приложения• UITabBarController
  • Проектирование UserFlowЕще немного мыслей• жизненный цикл UIViewController• данные - в модели• данные НЕ в UIView• UIViewController отвечает за свою задачу
  • Проектирование UserFlow UI Flow, Data Flow
  • Проектирование UserFlowИ еще немного мыслей• Решите, кто хранит данные• Каким образом другие доступаются к этим данным• Делегирование помогает для переиспользовании кода
  • Работа с сетью
  • Работа с сетьюОсновы• Всегда помним про задержки• Мы - на GbEthernet, пользователь на GPRS• Уменьшаем необходимостьпоследовательных запросов• Количество запросов vs Размер запросов• Сервер может и не ответить• Порядок ответов от сервера
  • Работа с сетьюОсновы• Используем доступные асинхронные API • NSURLConnection • ASIHTTPRequest • TTURLRequest• Помним про кэширование
  • Работа с сетьюUIKitС UIKit всегда работаем из главного потокаif ([NSThread isMainThread]) { [self updateView];} else { [self performSelectorOnMainThread: @selector(updateView) withObject:nil waitUntilDone:NO];}
  • Работа с сетьюParsing и иже с ним"Тяжелые" задачи необходимо выполнять вфоне.• Parsing• Сохранение в файловую систему• Долгие, заумные вычисления смыслажизни
  • Работа с сетьюReachability• Позволяет проверить состояние сети• Позволяет следить за изменениемсостояния сети• Для приложений, активно использующихсетевой трафик - обязателен
  • Работа с сетьюАрхитектурa"Отвяжитесь" от конкретной реализации. HTTP Reques APP t DB API Long calculation
  • Работа с сетьюАрхитектурaПриложение знает только про Request API Reques ? APP t API
  • Автоматическая сборка
  • Автоматическая сборкаЗачем, если для этого надо• Изучить xcodebuild• Перелопатить Интернет• Разобраться с профилми и сертификатами• Все настроить• Помочь другим настроить• И оно не будет работать,я уже пробовал(с)
  • Автоматическая сборкаЗачем?• Время - главный ресурс• Возможность собрать и закачатьприложение на телефон без Xcode• Можно заняться полезным делом, а не попять раз на день заливать на девайстестерам разные приложения разных версий• Выигрыш в больших командах
  • Автоматическая сборкаКто?• Разработчик на базе шаблона создаетфайлы конфигурации для проекта• Для каждого варианта сборки разработчикпредоставляет provisioning profile• Все на основе шаблонов• PM/Tester запускают необходимые имскрипты либо закачивают с HTTP-servera
  • Автоматическая сборкаКак?• xcodebuild• создание IPA-файла• создание plist файла• выкладывание на сервер• все самописное• есть и другие варианты (Jenkins, да иGoogle)
  • Автоматическая сборкаКак?
  • Автоматическая сборкаКонфигурация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/
  • Секретный iDevice (о чем забывают разработчики)
  • Секретный iDevice Cores : 4 CPU : 2 GHz ? RAM HDD : 8 GB : 250GB Netw :~100Mb GPURAM: 256MB
  • Секретный iDeviceПользователи непокупают симуляторы WWDC11 Videos
  • Simulator vs iDevice ?
  • Simulator vs iDevice • Большие картинки ? • Сложные вычисления • Все данные из сети • Утечки памяти • GPS модуль • Раздраженный пользователь
  • Спасибо за внимание!Тайкало Павелemail : ptaykalo@stanfy.com.uaskype : tt.kilewsite : http://stanfy.com.ua