SlideShare a Scribd company logo
1 of 59
Download to read offline
Разработка приложений для iOS




          Лекция 5
         Разное



                            Глеб Тарасов
Возможности
  телефона
Интернет
Reachability
http://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html
Есть ли интернет?



Reachability *r = [Reachability
                      reachabilityForInternetConnection];
if (r.status != NotReachable)
{
    NSLog(@"Есть интернет");
}
WiFi или 3G


Reachability *r = [Reachability reachabilityForLocalWiFi];
if (r.status != NotReachable)
{
    NSLog(@"Есть wifi");
}
Акселерометр,
  гироскоп
Ориентация
UIInterfaceOrientation orientation =
    [UIApplication sharedApplication].statusBarOrientation;

if (UIInterfaceOrientationIsPortrait(orientation))
   NSLog(@"portrait");
else
    NSLog(@"landscape");


typedef enum {
    UIInterfaceOrientationPortrait,
    UIInterfaceOrientationPortraitUpsideDown,
    UIInterfaceOrientationLandscapeLeft,
    UIInterfaceOrientationLandscapeRight
} UIInterfaceOrientation;
Акселерометр

@interface MyViewController : UIViewController<UIAccelerometerDelegate>




- (void)viewDidLoad
{
    [super viewDidLoad];
    [[UIAccelerometer sharedAccelerometer] setDelegate:self];
    [[UIAccelerometer sharedAccelerometer] setUpdateInterval:0.01];
}


#pragma mark - UIAccelerometerDelegate

- (void)accelerometer:(UIAccelerometer *)accelerometer
                didAccelerate:(UIAcceleration *)acceleration
{
    NSLog(@"%g %g %g", acceleration.x, acceleration.y, acceleration.z);
}
1.0 по оси

ускорение +1.0g вдоль этой оси




Когда телефон лежит на столе:
            x=0
            y=0
           z = -1
Фильтр нижних
              частот
http://ru.wikipedia.org/wiki/Фильтр_нижних_частот


http://developer.apple.com/library/ios/#samplecode/
AccelerometerGraph/Introduction/Intro.html
Гироскоп
- (void)viewDidLoad
{
    [super viewDidLoad];
)   motionManager = [[CMMotionManager alloc] init];

    timer = [NSTimer scheduledTimerWithTimeInterval:1/30.0
                                             target:self
                                           selector:@selector(doGyroUpdate)
                                           userInfo:nil
                                            repeats:YES];
}




- (void)doGyroUpdate
{
    CMRotationRate rate = motionManager.gyroData.rotationRate;
)   NSLog(@"%g %g %g", rate.x, rate.y, rate.z);
}

                          радианы в секунду
Геолокация
Координаты
@interface Locator : NSObject<CLLocationManagerDelegate>




manager = [[CLLocationManager alloc] init];
manager.delegate = self;
manager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
[manager startUpdatingLocation];


- (void)locationManager:(CLLocationManager *)m
)   didUpdateToLocation:(CLLocation *)newLocation
           fromLocation:(CLLocation *)oldLocation
{

    CLLocationCoordinate2D coord = newLocation.coordinate;
    NSLog(@"%g %g", coord.latitude, coord.longitude);
}


          Центр Москвы: 55.747598, 37.626801
Компас
locationManager = [[CLLocationManager alloc] init];
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[locationManager setDelegate:self];
[locationManager startUpdatingHeading];



- (void)locationManager:(CLLocationManager *)manager
       didUpdateHeading:(CLHeading *)newHeading
{
    NSLog(@"%g", newHeading.magneticHeading);
}



      0 - север, 90 - восток, 180 - юг, 270 - запад
Работа с микрофоном
SpeakHere
http://developer.apple.com/library/ios/#samplecode/
SpeakHere/Introduction/Intro.html
Воспроизведение аудио
AVAudioPlayer

NSString *path = [[NSBundle mainBundle] pathForResource:@"file"
                                                 ofType:@"mp3"];
NSURL *url = [NSURL fileURLWithPath:path];
AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:url
                                                               error:nil];
[player play];
- (void) viewDidAppear:(BOOL)animated
{
    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
    [self becomeFirstResponder];
}



- (void)remoteControlReceivedWithEvent:(UIEvent *)receivedEvent
{

    if (receivedEvent.type == UIEventTypeRemoteControl)
    {

        switch (receivedEvent.subtype)
        {

            case UIEventSubtypeRemoteControlTogglePlayPause:
                [self playPause];
                break;

            case UIEventSubtypeRemoteControlPreviousTrack:
                [self rewind];
                break;

            case UIEventSubtypeRemoteControlNextTrack:
                [self forward];
                break;

            default:
                break;
        }
    }
}
Воспроизведение видео
MPMoviePlayerViewController
NSString *path = [[NSBundle mainBundle] pathForResource:@"file"
                                                 ofType:@"mp4"];
NSURL *url = [NSURL fileURLWithPath:path];

MPMoviePlayerViewController *c
    = [[MPMoviePlayerViewController alloc] initWithContentURL:url];

[self presentModalViewController:c animated:YES];
Фото и видео
Фото/видео с камеры
UIImagePickerController *c = [[UIImagePickerController alloc] init];
c.delegate = self;
c.sourceType = UIImagePickerControllerSourceTypeCamera;
c.mediaTypes = [NSArray arrayWithObject:(NSString *)kUTTypeMovie];

[self presentModalViewController:c animated:YES];



- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];


    [picker dismissModalViewControllerAnimated:YES];
}
Фото/видео из альбомов

 UIImagePickerController *c = [[UIImagePickerController alloc] init];
 c.delegate = self;
 c.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;




- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    NSURL *url = [info objectForKey:UIImagePickerControllerMediaURL];
}
Поддержка iPad
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
{
    self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPhone"
                                                           bundle:nil];
}
else
{
    self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPad"
                                                           bundle:nil];
}
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
{
    self.viewController = [[ViewController alloc] initWithNibName:@"ViewController"
                                                           bundle:nil];
}
else
{
    self.viewController = [[ViewController_iPad alloc] initWithNibName:@"ViewController_iPad"
                                                           bundle:nil];
}
@implementation UIViewController (Utils)

+ (id)fromNib
{
    NSString *nibName = NSStringFromClass(self);
    return [self fromNib:nibName];
}

+ (id)fromNib:(NSString *)nibName
{
    return [[self alloc] initWithNibName:nibName
bundle:nil];
}

@end
SplitViewController
Платные приложения
Платное приложение                         Бесплатное приложение
       настройка на
  itunesconnect.apple.com




     Бесплатное демо + Платное приложение


    Бесплатное приложение + InApp Purchases
                                  настройка на
                             itunesconnect.apple.com
                                        +
                            поддержка в приложении
InApp Purchases
   StoreKit
   http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StoreKitGuide/Introduction/Introduction.html




  MKStoreKit
  https://github.com/MugunthKumar/MKStoreKit

[[MKStoreManager sharedManager] buyFeature:self.appleId onComplete:^(NSString *featureId, NSData *receiptData) {
             // ... купил
            } onCancelled:^{
              // ... отказался
            }];
Демонстрация
Инструменты
XCode
Debugger
Instruments
Регистрация в Apple
~ 2-3 недели                                       ~ 1 месяц
                                          корпоративный
                                             аккаунт
    индивидуальный
        аккаунт
                        регистрация               факс с выпиской
                                                     из ЕГРЮЛ

                                                 телефонный звонок
                                                    по-английски
  ФИО в графе
 «Разработчик» в      виртуальная карта
    AppStore             (Яндекс.Деньги, QIWI)


                                                      Несколько
http://faxzero.com/    факс с оплатой              разработчиков на
                                                       портале
                               аккаунт
iOS Dev Center (http://developer.apple.com)
iTunes Connect (http://itunesconnect.apple.com)
App Annie (http://appannie.com)
Testflight (http://testflightapp.com)
Закрепим понимание
При запуске приложения создаем корневой
контроллер и кладем его в
window.rootViewController
Несколько экранов - несколько UIViewController
Переходы между экранами:
- UINavigationController
- UITabBarController
- presentModalViewController
Каждый экран (контроллер) рисуем в
InterfaceBuilder
Если кода много - логику отрисовки
выносим в отдельный наследник UIView
Для изменения дизайна используем png-графику

Не забываем про @2x для retina-экранов

Большинство изменений интерфейса делаем с
анимацией

Минимальный размер элемента, на который
пользователь должен нажать: 44px
С сервером общаемся через XML или JSON
Работаем с сетью в фоновом потоке
Файлы локально сохраняем в Documents или Caches
Если нужно сохранить пару строк - используем
NSUserDefaults

Если нужно сохранять много данных –
CoreData

Загрузка больших файлов – ASIHTTPRequest
Перед выпуском в AppStore обязательно проверить
работу на реальном устройстве

Тестируем желательно на самом старом
поддерживаемом девайсе

Тестируем на всех поддерживаемых iOS

При выпуске новой версии не забыть проверить
обновление

Ознакомиться с AppStore Review Guidelines
https://developer.apple.com/appstore/guidelines.html
Книги




http://habrahabr.ru/post/118282/
Книги
iTunesU
 Stanford University, Курс CS 193P
http://www.stanford.edu/class/cs193p
iTunesU
                WWDC videos
https://developer.apple.com/videos/wwdc/2011/
Примеры
http://www.raywenderlich.com/
Вопросы
http://stackoverflow.com/
Совсем всё!
       Глеб Тарасов
       gleb34@gmail.com
       twitter.com/pilot34

More Related Content

What's hot

Пластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьПластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьMoscow.pm
 
Разработка приложений для Android на С++. Юрий Береза, Shturmann
Разработка приложений для Android на С++. Юрий Береза, ShturmannРазработка приложений для Android на С++. Юрий Береза, Shturmann
Разработка приложений для Android на С++. Юрий Береза, Shturmannyaevents
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПzfconfua
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Vasya Petrov
 
Продвинутое использование ActiveRecord в Yii2
Продвинутое использование ActiveRecord в Yii2Продвинутое использование ActiveRecord в Yii2
Продвинутое использование ActiveRecord в Yii2Paul Klimov
 
Как перестать отлаживать асинхронный код и начать жить / Андрей Саломатин (Pr...
Как перестать отлаживать асинхронный код и начать жить / Андрей Саломатин (Pr...Как перестать отлаживать асинхронный код и начать жить / Андрей Саломатин (Pr...
Как перестать отлаживать асинхронный код и начать жить / Андрей Саломатин (Pr...Ontico
 

What's hot (7)

Пластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьПластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать жить
 
Разработка приложений для Android на С++. Юрий Береза, Shturmann
Разработка приложений для Android на С++. Юрий Береза, ShturmannРазработка приложений для Android на С++. Юрий Береза, Shturmann
Разработка приложений для Android на С++. Юрий Береза, Shturmann
 
Vuejs composition API
Vuejs composition APIVuejs composition API
Vuejs composition API
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОП
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
 
Продвинутое использование ActiveRecord в Yii2
Продвинутое использование ActiveRecord в Yii2Продвинутое использование ActiveRecord в Yii2
Продвинутое использование ActiveRecord в Yii2
 
Как перестать отлаживать асинхронный код и начать жить / Андрей Саломатин (Pr...
Как перестать отлаживать асинхронный код и начать жить / Андрей Саломатин (Pr...Как перестать отлаживать асинхронный код и начать жить / Андрей Саломатин (Pr...
Как перестать отлаживать асинхронный код и начать жить / Андрей Саломатин (Pr...
 

Similar to Школа-Студия разработки приложений для iOS. 5 лекция. Разное

Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobileUA Mobile
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationAndrii Dzynia
 
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersШкола-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersГлеб Тарасов
 
Fun with core graphics
Fun with core graphicsFun with core graphics
Fun with core graphicsSoftTechnics
 
CodeFest 2011. Бусыгин Р. — Создание кастомных интерфейсов для iOS
CodeFest 2011. Бусыгин Р. — Создание кастомных интерфейсов для iOSCodeFest 2011. Бусыгин Р. — Создание кастомных интерфейсов для iOS
CodeFest 2011. Бусыгин Р. — Создание кастомных интерфейсов для iOSCodeFest
 
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOSКурсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOSГлеб Тарасов
 
iOS-05_1-UIKit
iOS-05_1-UIKitiOS-05_1-UIKit
iOS-05_1-UIKitNoveo
 
iOS-05_2-UIKit
iOS-05_2-UIKitiOS-05_2-UIKit
iOS-05_2-UIKitNoveo
 
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Ontico
 
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Интуит. Разработка приложений для iOS. Лекция 5. Сложные ViewsИнтуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Интуит. Разработка приложений для iOS. Лекция 5. Сложные ViewsГлеб Тарасов
 
"Погружение в Robolectric" Дмитрий Костырев (Avito)
"Погружение в Robolectric"  Дмитрий Костырев (Avito)"Погружение в Robolectric"  Дмитрий Костырев (Avito)
"Погружение в Robolectric" Дмитрий Костырев (Avito)AvitoTech
 
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетьюИнтуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетьюГлеб Тарасов
 
AndroidMVPHelper
AndroidMVPHelperAndroidMVPHelper
AndroidMVPHelperDataArt
 
Антон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в androidАнтон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в androidDataArt
 
FPUG Dzyga presentation
FPUG Dzyga presentationFPUG Dzyga presentation
FPUG Dzyga presentationIvan Filimonov
 
2014.12.06 01 Александр Чернышев — Нафига Козе Баян или нужен ли вам swift, и...
2014.12.06 01 Александр Чернышев — Нафига Козе Баян или нужен ли вам swift, и...2014.12.06 01 Александр Чернышев — Нафига Козе Баян или нужен ли вам swift, и...
2014.12.06 01 Александр Чернышев — Нафига Козе Баян или нужен ли вам swift, и...HappyDev
 
Интуит. Разработка приложений для iOS. Лекция 3. Views
Интуит. Разработка приложений для iOS. Лекция 3. ViewsИнтуит. Разработка приложений для iOS. Лекция 3. Views
Интуит. Разработка приложений для iOS. Лекция 3. ViewsГлеб Тарасов
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneCodeFest
 
Всеволод Шмыров, Яндекс
Всеволод Шмыров, ЯндексВсеволод Шмыров, Яндекс
Всеволод Шмыров, ЯндексElena Voynova
 
Как навести порядок в коде вашего web-приложения, Андрей Чебукин
Как навести порядок в коде вашего web-приложения, Андрей Чебукин Как навести порядок в коде вашего web-приложения, Андрей Чебукин
Как навести порядок в коде вашего web-приложения, Андрей Чебукин Sigma Software
 

Similar to Школа-Студия разработки приложений для iOS. 5 лекция. Разное (20)

Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobile
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test Automation
 
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersШкола-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
 
Fun with core graphics
Fun with core graphicsFun with core graphics
Fun with core graphics
 
CodeFest 2011. Бусыгин Р. — Создание кастомных интерфейсов для iOS
CodeFest 2011. Бусыгин Р. — Создание кастомных интерфейсов для iOSCodeFest 2011. Бусыгин Р. — Создание кастомных интерфейсов для iOS
CodeFest 2011. Бусыгин Р. — Создание кастомных интерфейсов для iOS
 
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOSКурсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
 
iOS-05_1-UIKit
iOS-05_1-UIKitiOS-05_1-UIKit
iOS-05_1-UIKit
 
iOS-05_2-UIKit
iOS-05_2-UIKitiOS-05_2-UIKit
iOS-05_2-UIKit
 
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
 
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Интуит. Разработка приложений для iOS. Лекция 5. Сложные ViewsИнтуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
 
"Погружение в Robolectric" Дмитрий Костырев (Avito)
"Погружение в Robolectric"  Дмитрий Костырев (Avito)"Погружение в Robolectric"  Дмитрий Костырев (Avito)
"Погружение в Robolectric" Дмитрий Костырев (Avito)
 
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетьюИнтуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
 
AndroidMVPHelper
AndroidMVPHelperAndroidMVPHelper
AndroidMVPHelper
 
Антон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в androidАнтон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в android
 
FPUG Dzyga presentation
FPUG Dzyga presentationFPUG Dzyga presentation
FPUG Dzyga presentation
 
2014.12.06 01 Александр Чернышев — Нафига Козе Баян или нужен ли вам swift, и...
2014.12.06 01 Александр Чернышев — Нафига Козе Баян или нужен ли вам swift, и...2014.12.06 01 Александр Чернышев — Нафига Козе Баян или нужен ли вам swift, и...
2014.12.06 01 Александр Чернышев — Нафига Козе Баян или нужен ли вам swift, и...
 
Интуит. Разработка приложений для iOS. Лекция 3. Views
Интуит. Разработка приложений для iOS. Лекция 3. ViewsИнтуит. Разработка приложений для iOS. Лекция 3. Views
Интуит. Разработка приложений для iOS. Лекция 3. Views
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows Phone
 
Всеволод Шмыров, Яндекс
Всеволод Шмыров, ЯндексВсеволод Шмыров, Яндекс
Всеволод Шмыров, Яндекс
 
Как навести порядок в коде вашего web-приложения, Андрей Чебукин
Как навести порядок в коде вашего web-приложения, Андрей Чебукин Как навести порядок в коде вашего web-приложения, Андрей Чебукин
Как навести порядок в коде вашего web-приложения, Андрей Чебукин
 

More from Глеб Тарасов

Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.
Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.
Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.Глеб Тарасов
 
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...Глеб Тарасов
 
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPadИнтуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPadГлеб Тарасов
 
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейсИнтуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейсГлеб Тарасов
 
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с даннымиИнтуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с даннымиГлеб Тарасов
 
Интуит. Разработка приложений для iOS. Лекция 4. Controllers
Интуит. Разработка приложений для iOS. Лекция 4. ControllersИнтуит. Разработка приложений для iOS. Лекция 4. Controllers
Интуит. Разработка приложений для iOS. Лекция 4. ControllersГлеб Тарасов
 
Интуит. Разработка приложений для iOS. Лекция 2. Objective-C
Интуит. Разработка приложений для iOS. Лекция 2. Objective-CИнтуит. Разработка приложений для iOS. Лекция 2. Objective-C
Интуит. Разработка приложений для iOS. Лекция 2. Objective-CГлеб Тарасов
 
Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.
Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.
Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.Глеб Тарасов
 
Презентация проекта Ulect
Презентация проекта Ulect Презентация проекта Ulect
Презентация проекта Ulect Глеб Тарасов
 
Презентация для Foundation Institute
Презентация для Foundation InstituteПрезентация для Foundation Institute
Презентация для Foundation InstituteГлеб Тарасов
 
Делаем жизнь лучше с CocoaPods
Делаем жизнь лучше с CocoaPodsДелаем жизнь лучше с CocoaPods
Делаем жизнь лучше с CocoaPodsГлеб Тарасов
 
Школа-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с даннымиШкола-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с даннымиГлеб Тарасов
 
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-CШкола-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-CГлеб Тарасов
 
Глеб Тарасов. Портфолио
Глеб Тарасов. ПортфолиоГлеб Тарасов. Портфолио
Глеб Тарасов. ПортфолиоГлеб Тарасов
 
Курсы по мобильной разработке под iOS. 6 лекция. Инструменты
Курсы по мобильной разработке под iOS. 6 лекция. ИнструментыКурсы по мобильной разработке под iOS. 6 лекция. Инструменты
Курсы по мобильной разработке под iOS. 6 лекция. ИнструментыГлеб Тарасов
 
Курсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с даннымиКурсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с даннымиГлеб Тарасов
 

More from Глеб Тарасов (20)

Gleb Tarasov. Portfolio
Gleb Tarasov. PortfolioGleb Tarasov. Portfolio
Gleb Tarasov. Portfolio
 
Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.
Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.
Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.
 
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...
 
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPadИнтуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
 
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейсИнтуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
 
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с даннымиИнтуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
 
Интуит. Разработка приложений для iOS. Лекция 4. Controllers
Интуит. Разработка приложений для iOS. Лекция 4. ControllersИнтуит. Разработка приложений для iOS. Лекция 4. Controllers
Интуит. Разработка приложений для iOS. Лекция 4. Controllers
 
Интуит. Разработка приложений для iOS. Лекция 2. Objective-C
Интуит. Разработка приложений для iOS. Лекция 2. Objective-CИнтуит. Разработка приложений для iOS. Лекция 2. Objective-C
Интуит. Разработка приложений для iOS. Лекция 2. Objective-C
 
Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.
Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.
Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.
 
Презентация проекта Ulect
Презентация проекта Ulect Презентация проекта Ulect
Презентация проекта Ulect
 
Презентация для Foundation Institute
Презентация для Foundation InstituteПрезентация для Foundation Institute
Презентация для Foundation Institute
 
Делаем жизнь лучше с CocoaPods
Делаем жизнь лучше с CocoaPodsДелаем жизнь лучше с CocoaPods
Делаем жизнь лучше с CocoaPods
 
msumobi2. Лекция 2
msumobi2. Лекция 2msumobi2. Лекция 2
msumobi2. Лекция 2
 
msumobi2. Лекция 1
msumobi2. Лекция 1msumobi2. Лекция 1
msumobi2. Лекция 1
 
Школа-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с даннымиШкола-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с данными
 
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-CШкола-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
 
ShareKit. Evernote Dev Meetup
ShareKit. Evernote Dev MeetupShareKit. Evernote Dev Meetup
ShareKit. Evernote Dev Meetup
 
Глеб Тарасов. Портфолио
Глеб Тарасов. ПортфолиоГлеб Тарасов. Портфолио
Глеб Тарасов. Портфолио
 
Курсы по мобильной разработке под iOS. 6 лекция. Инструменты
Курсы по мобильной разработке под iOS. 6 лекция. ИнструментыКурсы по мобильной разработке под iOS. 6 лекция. Инструменты
Курсы по мобильной разработке под iOS. 6 лекция. Инструменты
 
Курсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с даннымиКурсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с данными
 

Школа-Студия разработки приложений для iOS. 5 лекция. Разное

  • 1. Разработка приложений для iOS Лекция 5 Разное Глеб Тарасов
  • 5. Есть ли интернет? Reachability *r = [Reachability reachabilityForInternetConnection]; if (r.status != NotReachable) { NSLog(@"Есть интернет"); }
  • 6. WiFi или 3G Reachability *r = [Reachability reachabilityForLocalWiFi]; if (r.status != NotReachable) { NSLog(@"Есть wifi"); }
  • 8. Ориентация UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation; if (UIInterfaceOrientationIsPortrait(orientation)) NSLog(@"portrait"); else NSLog(@"landscape"); typedef enum { UIInterfaceOrientationPortrait, UIInterfaceOrientationPortraitUpsideDown, UIInterfaceOrientationLandscapeLeft, UIInterfaceOrientationLandscapeRight } UIInterfaceOrientation;
  • 9. Акселерометр @interface MyViewController : UIViewController<UIAccelerometerDelegate> - (void)viewDidLoad { [super viewDidLoad]; [[UIAccelerometer sharedAccelerometer] setDelegate:self]; [[UIAccelerometer sharedAccelerometer] setUpdateInterval:0.01]; } #pragma mark - UIAccelerometerDelegate - (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration { NSLog(@"%g %g %g", acceleration.x, acceleration.y, acceleration.z); }
  • 10. 1.0 по оси ускорение +1.0g вдоль этой оси Когда телефон лежит на столе: x=0 y=0 z = -1
  • 11. Фильтр нижних частот http://ru.wikipedia.org/wiki/Фильтр_нижних_частот http://developer.apple.com/library/ios/#samplecode/ AccelerometerGraph/Introduction/Intro.html
  • 13. - (void)viewDidLoad { [super viewDidLoad]; ) motionManager = [[CMMotionManager alloc] init]; timer = [NSTimer scheduledTimerWithTimeInterval:1/30.0 target:self selector:@selector(doGyroUpdate) userInfo:nil repeats:YES]; } - (void)doGyroUpdate { CMRotationRate rate = motionManager.gyroData.rotationRate; ) NSLog(@"%g %g %g", rate.x, rate.y, rate.z); } радианы в секунду
  • 15. Координаты @interface Locator : NSObject<CLLocationManagerDelegate> manager = [[CLLocationManager alloc] init]; manager.delegate = self; manager.desiredAccuracy = kCLLocationAccuracyHundredMeters; [manager startUpdatingLocation]; - (void)locationManager:(CLLocationManager *)m ) didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { CLLocationCoordinate2D coord = newLocation.coordinate; NSLog(@"%g %g", coord.latitude, coord.longitude); } Центр Москвы: 55.747598, 37.626801
  • 16. Компас locationManager = [[CLLocationManager alloc] init]; locationManager.desiredAccuracy = kCLLocationAccuracyBest; [locationManager setDelegate:self]; [locationManager startUpdatingHeading]; - (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading { NSLog(@"%g", newHeading.magneticHeading); } 0 - север, 90 - восток, 180 - юг, 270 - запад
  • 20. AVAudioPlayer NSString *path = [[NSBundle mainBundle] pathForResource:@"file" ofType:@"mp3"]; NSURL *url = [NSURL fileURLWithPath:path]; AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; [player play];
  • 21.
  • 22. - (void) viewDidAppear:(BOOL)animated { [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; [self becomeFirstResponder]; } - (void)remoteControlReceivedWithEvent:(UIEvent *)receivedEvent { if (receivedEvent.type == UIEventTypeRemoteControl) { switch (receivedEvent.subtype) { case UIEventSubtypeRemoteControlTogglePlayPause: [self playPause]; break; case UIEventSubtypeRemoteControlPreviousTrack: [self rewind]; break; case UIEventSubtypeRemoteControlNextTrack: [self forward]; break; default: break; } } }
  • 24. MPMoviePlayerViewController NSString *path = [[NSBundle mainBundle] pathForResource:@"file" ofType:@"mp4"]; NSURL *url = [NSURL fileURLWithPath:path]; MPMoviePlayerViewController *c = [[MPMoviePlayerViewController alloc] initWithContentURL:url]; [self presentModalViewController:c animated:YES];
  • 26. Фото/видео с камеры UIImagePickerController *c = [[UIImagePickerController alloc] init]; c.delegate = self; c.sourceType = UIImagePickerControllerSourceTypeCamera; c.mediaTypes = [NSArray arrayWithObject:(NSString *)kUTTypeMovie]; [self presentModalViewController:c animated:YES]; - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; [picker dismissModalViewControllerAnimated:YES]; }
  • 27.
  • 28. Фото/видео из альбомов UIImagePickerController *c = [[UIImagePickerController alloc] init]; c.delegate = self; c.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { NSURL *url = [info objectForKey:UIImagePickerControllerMediaURL]; }
  • 29.
  • 31.
  • 32. if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil]; } else { self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil]; }
  • 33. if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil]; } else { self.viewController = [[ViewController_iPad alloc] initWithNibName:@"ViewController_iPad" bundle:nil]; }
  • 34. @implementation UIViewController (Utils) + (id)fromNib { NSString *nibName = NSStringFromClass(self); return [self fromNib:nibName]; } + (id)fromNib:(NSString *)nibName { return [[self alloc] initWithNibName:nibName bundle:nil]; } @end
  • 36. Платные приложения Платное приложение Бесплатное приложение настройка на itunesconnect.apple.com Бесплатное демо + Платное приложение Бесплатное приложение + InApp Purchases настройка на itunesconnect.apple.com + поддержка в приложении
  • 37. InApp Purchases StoreKit http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StoreKitGuide/Introduction/Introduction.html MKStoreKit https://github.com/MugunthKumar/MKStoreKit [[MKStoreManager sharedManager] buyFeature:self.appleId onComplete:^(NSString *featureId, NSData *receiptData) { // ... купил } onCancelled:^{ // ... отказался }];
  • 40. XCode
  • 43. Регистрация в Apple ~ 2-3 недели ~ 1 месяц корпоративный аккаунт индивидуальный аккаунт регистрация факс с выпиской из ЕГРЮЛ телефонный звонок по-английски ФИО в графе «Разработчик» в виртуальная карта AppStore (Яндекс.Деньги, QIWI) Несколько http://faxzero.com/ факс с оплатой разработчиков на портале аккаунт
  • 44. iOS Dev Center (http://developer.apple.com)
  • 49. При запуске приложения создаем корневой контроллер и кладем его в window.rootViewController Несколько экранов - несколько UIViewController Переходы между экранами: - UINavigationController - UITabBarController - presentModalViewController Каждый экран (контроллер) рисуем в InterfaceBuilder Если кода много - логику отрисовки выносим в отдельный наследник UIView
  • 50. Для изменения дизайна используем png-графику Не забываем про @2x для retina-экранов Большинство изменений интерфейса делаем с анимацией Минимальный размер элемента, на который пользователь должен нажать: 44px
  • 51. С сервером общаемся через XML или JSON Работаем с сетью в фоновом потоке Файлы локально сохраняем в Documents или Caches Если нужно сохранить пару строк - используем NSUserDefaults Если нужно сохранять много данных – CoreData Загрузка больших файлов – ASIHTTPRequest
  • 52. Перед выпуском в AppStore обязательно проверить работу на реальном устройстве Тестируем желательно на самом старом поддерживаемом девайсе Тестируем на всех поддерживаемых iOS При выпуске новой версии не забыть проверить обновление Ознакомиться с AppStore Review Guidelines https://developer.apple.com/appstore/guidelines.html
  • 55. iTunesU Stanford University, Курс CS 193P http://www.stanford.edu/class/cs193p
  • 56. iTunesU WWDC videos https://developer.apple.com/videos/wwdc/2011/
  • 59. Совсем всё! Глеб Тарасов gleb34@gmail.com twitter.com/pilot34