59
Разное Разработка приложений для iOS Лекция 5 Глеб Тарасов

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

  • Upload
    -

  • View
    2.786

  • Download
    5

Embed Size (px)

DESCRIPTION

 

Citation preview

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

Разное

Разработка приложений для iOS

Лекция 5

Глеб Тарасов

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

Возможности телефона

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

Интернет

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

Есть ли интернет?

Reachability *r = [Reachability reachabilityForInternetConnection];

if (r.status != NotReachable){ NSLog(@"Есть интернет");}

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

WiFi или 3G

Reachability *r = [Reachability reachabilityForLocalWiFi];if (r.status != NotReachable){ NSLog(@"Есть wifi");}

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

Акселерометр,гироскоп

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

Ориентация

UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;

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

typedef enum { UIInterfaceOrientationPortrait, UIInterfaceOrientationPortraitUpsideDown, UIInterfaceOrientationLandscapeLeft, UIInterfaceOrientationLandscapeRight} UIInterfaceOrientation;

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

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

@interface MyViewController : UIViewController<UIAccelerometerDelegate>

#pragma mark - UIAccelerometerDelegate

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration

{ NSLog(@"%g %g %g", acceleration.x, acceleration.y, acceleration.z);}

Акселерометр

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

Когда телефон лежит на столе:x = 0y = 0z = -1

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

1.0 по оси

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

Фильтр нижних частот

http://developer.apple.com/library/ios/#samplecode/AccelerometerGraph/Introduction/Intro.html

http://ru.wikipedia.org/wiki/Фильтр_нижних_частот

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

Гироскоп

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

- (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); }

радианы в секунду

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

Геолокация

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

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

@interface Locator : NSObject<CLLocationManagerDelegate>

- (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

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

Компас

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

locationManager = [[CLLocationManager alloc] init]; locationManager.desiredAccuracy = kCLLocationAccuracyBest; [locationManager setDelegate:self]; [locationManager startUpdatingHeading];

0 - север, 90 - восток, 180 - юг, 270 - запад

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

Работа с микрофоном

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

http://developer.apple.com/library/ios/#samplecode/SpeakHere/Introduction/Intro.html

SpeakHere

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

Воспроизведение аудио

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

AVAudioPlayer

NSString *path = [[NSBundle mainBundle] pathForResource:@"file" ofType:@"mp3"];NSURL *url = [NSURL fileURLWithPath:path];AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];[player play];

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

- (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; } }}

- (void) viewDidAppear:(BOOL)animated{ [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; [self becomeFirstResponder];}

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

Воспроизведение видео

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

NSString *path = [[NSBundle mainBundle] pathForResource:@"file" ofType:@"mp4"];NSURL *url = [NSURL fileURLWithPath:path];

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

[self presentModalViewController:c animated:YES];

MPMoviePlayerViewController

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

Фото и видео

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

Фото/видео с камеры

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];}

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

Фото/видео из альбомов

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

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{ NSURL *url = [info objectForKey:UIImagePickerControllerMediaURL]; }

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

Поддержка iPad

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

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil];} else { self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil];}

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

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];} else { self.viewController = [[ViewController_iPad alloc] initWithNibName:@"ViewController_iPad" bundle:nil];}

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

@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

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

SplitViewController

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

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

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

Бесплатное приложение + InApp Purchases

настройка на itunesconnect.apple.com

настройка на itunesconnect.apple.com

+ поддержка в приложении

Платные приложения

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

InApp Purchases

MKStoreKit

https://github.com/MugunthKumar/MKStoreKit

StoreKithttp://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StoreKitGuide/Introduction/Introduction.html

[[MKStoreManager sharedManager] buyFeature:self.appleId onComplete:^(NSString *featureId, NSData *receiptData) { // ... купил } onCancelled:^{ // ... отказался }];

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

Демонстрация

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

Инструменты

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

XCode

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

Debugger

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

Instruments

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

Регистрация в Apple

индивидуальный аккаунт

регистрация

виртуальная карта

факс с оплатой

корпоративный аккаунт

факс с выпиской из ЕГРЮЛ

телефонный звонок по-английски

аккаунт

Несколько разработчиков на

портале

ФИО в графе «Разработчик» в

AppStore

~ 2-3 недели ~ 1 месяц

(Яндекс.Деньги, QIWI)

http://faxzero.com/

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

iOS Dev Center (http://developer.apple.com)

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

iTunes Connect (http://itunesconnect.apple.com)

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

App Annie (http://appannie.com)

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

Testflight (http://testflightapp.com)

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

Закрепим понимание

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

Несколько экранов - несколько UIViewController

Переходы между экранами:- UINavigationController- UITabBarController- presentModalViewController

Каждый экран (контроллер) рисуем в InterfaceBuilder

Если кода много - логику отрисовки выносим в отдельный наследник UIView

При запуске приложения создаем корневой контроллер и кладем его в window.rootViewController

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

Для изменения дизайна используем png-графику

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

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

Минимальный размер элемента, на который пользователь должен нажать: 44px

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

С сервером общаемся через XML или JSON

Работаем с сетью в фоновом потоке

Файлы локально сохраняем в Documents или Caches

Если нужно сохранить пару строк - используем NSUserDefaults

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

Загрузка больших файлов – ASIHTTPRequest

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

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

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

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

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

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

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

Книги

http://habrahabr.ru/post/118282/

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

Книги

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

iTunesUStanford University, Курс CS 193P

http://www.stanford.edu/class/cs193p

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

iTunesUWWDC videos

https://developer.apple.com/videos/wwdc/2011/

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

Примерыhttp://www.raywenderlich.com/

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

Вопросыhttp://stackoverflow.com/