Your SlideShare is downloading. ×
0
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

2,071

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,071
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
47
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Разработка приложений для iOS Лекция 5 Разное Глеб Тарасов
  • 2. Возможности телефона
  • 3. Интернет
  • 4. Reachabilityhttp://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html
  • 5. Есть ли интернет?Reachability *r = [Reachability reachabilityForInternetConnection];if (r.status != NotReachable){ NSLog(@"Есть интернет");}
  • 6. WiFi или 3GReachability *r = [Reachability reachabilityForLocalWiFi];if (r.status != NotReachable){ NSLog(@"Есть wifi");}
  • 7. Акселерометр, гироскоп
  • 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
  • 12. Гироскоп
  • 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);} радианы в секунду
  • 14. Геолокация
  • 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 - запад
  • 17. Работа с микрофоном
  • 18. SpeakHerehttp://developer.apple.com/library/ios/#samplecode/SpeakHere/Introduction/Intro.html
  • 19. Воспроизведение аудио
  • 20. AVAudioPlayerNSString *path = [[NSBundle mainBundle] pathForResource:@"file" ofType:@"mp3"];NSURL *url = [NSURL fileURLWithPath:path];AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];[player play];
  • 21. - (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; } }}
  • 22. Воспроизведение видео
  • 23. MPMoviePlayerViewControllerNSString *path = [[NSBundle mainBundle] pathForResource:@"file" ofType:@"mp4"];NSURL *url = [NSURL fileURLWithPath:path];MPMoviePlayerViewController *c = [[MPMoviePlayerViewController alloc] initWithContentURL:url];[self presentModalViewController:c animated:YES];
  • 24. Фото и видео
  • 25. Фото/видео с камеры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 *)pickerdidFinishPickingMediaWithInfo:(NSDictionary *)info{ UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; [picker dismissModalViewControllerAnimated:YES];}
  • 26. Фото/видео из альбомов UIImagePickerController *c = [[UIImagePickerController alloc] init]; c.delegate = self; c.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;- (void)imagePickerController:(UIImagePickerController *)pickerdidFinishPickingMediaWithInfo:(NSDictionary *)info{ NSURL *url = [info objectForKey:UIImagePickerControllerMediaURL];}
  • 27. Поддержка iPad
  • 28. if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone){ self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil];}else{ self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil];}
  • 29. if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone){ self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];}else{ self.viewController = [[ViewController_iPad alloc] initWithNibName:@"ViewController_iPad" bundle:nil];}
  • 30. @implementation UIViewController (Utils)+ (id)fromNib{ NSString *nibName = NSStringFromClass(self); return [self fromNib:nibName];}+ (id)fromNib:(NSString *)nibName{ return [[self alloc] initWithNibName:nibNamebundle:nil];}@end
  • 31. SplitViewController
  • 32. Платные приложенияПлатное приложение Бесплатное приложение настройка на itunesconnect.apple.com Бесплатное демо + Платное приложение Бесплатное приложение + InApp Purchases настройка на itunesconnect.apple.com + поддержка в приложении
  • 33. 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:^{ // ... отказался }];
  • 34. Демонстрация
  • 35. Инструменты
  • 36. XCode
  • 37. Debugger
  • 38. Instruments
  • 39. Регистрация в Apple~ 2-3 недели ~ 1 месяц корпоративный аккаунт индивидуальный аккаунт регистрация факс с выпиской из ЕГРЮЛ телефонный звонок по-английски ФИО в графе «Разработчик» в виртуальная карта AppStore (Яндекс.Деньги, QIWI) Несколькоhttp://faxzero.com/ факс с оплатой разработчиков на портале аккаунт
  • 40. iOS Dev Center (http://developer.apple.com)
  • 41. iTunes Connect (http://itunesconnect.apple.com)
  • 42. App Annie (http://appannie.com)
  • 43. Testflight (http://testflightapp.com)
  • 44. Закрепим понимание
  • 45. При запуске приложения создаем корневойконтроллер и кладем его вwindow.rootViewControllerНесколько экранов - несколько UIViewControllerПереходы между экранами:- UINavigationController- UITabBarController- presentModalViewControllerКаждый экран (контроллер) рисуем вInterfaceBuilderЕсли кода много - логику отрисовкивыносим в отдельный наследник UIView
  • 46. Для изменения дизайна используем png-графикуНе забываем про @2x для retina-экрановБольшинство изменений интерфейса делаем санимациейМинимальный размер элемента, на которыйпользователь должен нажать: 44px
  • 47. С сервером общаемся через XML или JSONРаботаем с сетью в фоновом потокеФайлы локально сохраняем в Documents или CachesЕсли нужно сохранить пару строк - используемNSUserDefaultsЕсли нужно сохранять много данных –CoreDataЗагрузка больших файлов – ASIHTTPRequest
  • 48. Перед выпуском в AppStore обязательно проверитьработу на реальном устройствеТестируем желательно на самом старомподдерживаемом девайсеТестируем на всех поддерживаемых iOSПри выпуске новой версии не забыть проверитьобновлениеОзнакомиться с AppStore Review Guidelineshttps://developer.apple.com/appstore/guidelines.html
  • 49. Книгиhttp://habrahabr.ru/post/118282/
  • 50. Книги
  • 51. iTunesU Stanford University, Курс CS 193Phttp://www.stanford.edu/class/cs193p
  • 52. iTunesU WWDC videoshttps://developer.apple.com/videos/wwdc/2011/
  • 53. Примерыhttp://www.raywenderlich.com/
  • 54. Вопросыhttp://stackoverflow.com/
  • 55. Совсем всё! Глеб Тарасов gleb34@gmail.com twitter.com/pilot34

×