iOS Development                        Lecture 1 - The basicsPetr DvořákPartner & iOS Development Lead@joshis_tweets
Outline
Outline• iOS app development ecosystem  • Required hardware  • iOS Developer Account & App Store  • iOS Overview  • XCode ...
Outline• Objective-C and iOS SDK  • Basic language syntax  • Classes, protocols, categories  • Memory management
Outline• UI Elements on iOS  • Overview of the UI building blocks  • Storyboard / Interface Builder
Outline• Network aware applications  • Connecting to on-line resources  • Processing XML and JSON
iOS Ecosystem
Required hardware• Any computer/laptop with Mac OS X• Mac Mini - from 13 990 CZK• MacBook Pro 13” - from 27 990 CZK
iOS Developer Account• Bound to Apple ID  • Registration is free  • XCode/SDK download is free   •   but it offers develop...
iOS Developer Account• iOS Developer Program - $99 / year  • Installation on devices  • App Store publishing  • Support
Member Center• A dashboard website, a quick pointer  • Dev Centers  • Provisioning Portal  • iTunes Connect  • Resource Ce...
Developer Center• Separate dev centers for iOS, Mac OS   and Web development • A place to find   • Resources, videos, tuto...
Provisioning portal• Register your development devices  • max. 100 iOS devices / year  • one-time removal• Manage certific...
Provisioning profile• Development / Distribution profiles• A composite entity that contains  • Certificates  • AppID  • De...
Provisioning Process
iTunes Connect• Manage applications• Manage legal contracts• Sales statistics• Financial Reports, User Management,  Contact
Member Center• A dashboard that points to  • Dev Centers          ~ Learn & Do  • Provisioning Portal ~ Test  • iTunes Con...
App Store
iOS Overview
iOS Overview• Unix based, high performance• Strict memory management• Multi-tasking since iOS 4• Apps are sandboxed• Speci...
Memory management• Application receives memory  warnings from the OS• Must react on it quickly  • ... free up as much memo...
Multi-tasking• Application transitions among states  • Not Running  • Inactive  • Active  • Background  • Suspended
User’s perspective• Multitasking is  transparent• “List of last used apps”• “List of running apps”• Default.png should  re...
Multi-tasking• Apps may remain alive  • audio  • voip  • location  • newsstand  • external / bluetooth accessory
Application sandbox• Every application has a home folder  • Documents folder - is backed up  • Cache folder - isn’t backed...
Development Tools
XCode• IDE used for Mac / iOS development• Tight git VCS integration• LLVM / GCC compiler• App Store submit, ad-hoc archiv...
XCode - Project/Target
XCode - Storyboarding
XCode - Source Code
Instruments• Set of visual debugging tools  • Memory leaks / Zombie objects  • CPU / Activity monitoring  • Quartz perform...
iPhone/iPad Simulator• Almost like a real device• Intel instruction set• Inherits computer CPU and memory• Limited set of ...
Advanced demos
Advanced demos• Augmented reality  • Qualcom AR SDK for iOS •   https://developer.qualcomm.com/develop/     mobile-technol...
Augmented reality
Face Recognition
Objective-C & iOS SDK
Objective-C• Object oriented language• Derived from C• It’s not a C++, it’s not even similar• More similar to SmallTalk• D...
Confusing parts• Methods are called selectors• YES/NO instead of TRUE/FALSE• nil instead of null• self instead of this• *....
Confusing parts• Map is called NSDictionary• NSString constant is written as @”aa”• NS stands for NextStep• “hello” is a C...
Calling a selector• Java  int a = inst.method(12.0);  MyClass.staticMethod(a, b);• Objective-C  int a = [inst methodWithPa...
Selector • Yes, it is split in multiple parts   •   Named parameters improve readability   self.label.textColor = [UIColor...
Declaring a selector• Java  public int method(double number);  private static void staticMethod(int a, bool b);• Objective...
Declaring a class // Employee.h #import <Foundation/Foundation.h> @interface Employee: NSObject <EmployeeProtocol> {     N...
Defining a class // Employee.m #import “Employee.h” @implementation Employee @synthesize name = _name, surname; - (id) ini...
Defining a class ... - (void) greet {     NSLog(@”Hello, %@ %@!”, self.name, self.surname); } @end
Declaring a protocol• Protocol ~ Interface     // EmployeeProtocol.h     #import <Foundation/Foundation.h>     @protocol E...
Using a protocol                                           Protocol // Employee.h #import <Foundation/Foundation.h> @inter...
Declaring a category• Category = Extending class without  subclassing     // NSString+Crypto.h     #import <Foundation/Fou...
Declaring a category• Category = Extending class without  subclassing     // NSString+Crypto.m     #import "NSString+Crypt...
Class Extension• “Category” with nothing in the  brackets• Usually implemented in the class  implementation file• Used to ...
Blocks^    • Block = piece of code     • Used throughough the SDK     • ~ Lambda, ~ anonymous     • Blocks are clojures   ...
Blocks - UI Animations imageView.alpha = 0.0; [UIView animateWithDuration:1.0 animations:^{     imageView.alpha = 1.0; } c...
Blocks - Set filtering NSSet *iSet = [NSSet set]; // ... add objects to the set [set objectsPassingTest:^(id obj, BOOL *st...
Memory Management
Memory management• Every NSObject keeps a reference count• Object is created => references = 1  • note: created ~ init, ne...
Memory management• Before iOS 5: manual memory  management was needed • retain / release / autorelease • mechanical, tedio...
Since iOS 5 - ARC• Automatic Reference Counting is  available • Occurs during compilation • Still some libraries without A...
Autorelease pools• Every thread has a stack of   autorelease pools  • Object can register in the pool  • In due course, th...
Autorelease pools // HeavyMasacreComputator.m - (void) doSomething {     for (int i = 0; i <   TRILLION_TRILLIONS; i++) { ...
Autorelease pools // HeavyMasacreComputator.m - (void) doSomething {     for (int i = 0; i < TRILLION_TRILLIONS; i++) {   ...
Autorelease pools // HeavyMasacreComputator.m - pre iOS 5 - (void) doSomething {     for (int i = 0; i < TRILLION_TRILLION...
Ownership Qualifiers• How objects are assigned  • __strong            - retained  • __unsafe_unretained - not retained  • ...
Properties• Getter / Setter for the instance  variables• “Dot notation” for access• Flags in the header file• Synthesized ...
Properties• Property vs. iVar  • self.name ~ getter / setter used    • [self name];    • [self setName:@”Petr”];  • name  ...
Properties• Implied ownership qualifiers for iVar  • strong, retain, copy      => __strong • weak      => __weak • assign,...
UI Elements
UIKit - The Gist• Framework for iOS UI• UI Components, gesture recognizers• MVC approach  • UIViewController manages UIVie...
UIKit - MVC diagram               Model
UI Consistency• Controls and views are customizable• iOS is a very consistent platform, less  is often more• Follow iOS Hu...
iOS UI - Tools• Storyboard / Interface Builder• Hints in code for actions/outlets  • IBAction  • IBOutlet• “Segue” since i...
Network Aware Apps
Networking• Three classes to make it work •   [NSURL URLWithString:@”http://google.com”]; •   [NSURLRequest requestWithUrl...
Delegate• Similar to observer pattern  • “Only one instance of observer”• An object that receives callbacks• Uses protocol...
DataSource• Structure is the same as for the  delegate • not retained • bound by a protocol• Callbacks are used to feed da...
Connection callbacks// NSURLConnectionDataDelegate formal protocol since iOS 5// HTTP response- (void) connection:(NSURLCo...
Processing JSON• JSON-Framework  • New BSD Licence  • JSON parser and generator  • http://stig.github.com/json-    framewo...
Processing XML• TouchXML  • Modified BSD Licence  • DOM parser + XPath, XML   Namespaces • https://github.com/TouchCode/  ...
Resources•   Stack Overflow•   iOS Dev Center•   iOS Human Interface Guidelines•   View Controller Catalog for iOS•   clan...
Thank you                   http://www.inmite.eu/talksPetr DvořákPartner & iOS Development Lead@joshis_tweets
Upcoming SlideShare
Loading in...5
×

FI MUNI 2012 - iOS Basics

2,008

Published on

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

No Downloads
Views
Total Views
2,008
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
57
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

FI MUNI 2012 - iOS Basics

  1. 1. iOS Development Lecture 1 - The basicsPetr DvořákPartner & iOS Development Lead@joshis_tweets
  2. 2. Outline
  3. 3. Outline• iOS app development ecosystem • Required hardware • iOS Developer Account & App Store • iOS Overview • XCode and Instruments • The cool stuff you can do
  4. 4. Outline• Objective-C and iOS SDK • Basic language syntax • Classes, protocols, categories • Memory management
  5. 5. Outline• UI Elements on iOS • Overview of the UI building blocks • Storyboard / Interface Builder
  6. 6. Outline• Network aware applications • Connecting to on-line resources • Processing XML and JSON
  7. 7. iOS Ecosystem
  8. 8. Required hardware• Any computer/laptop with Mac OS X• Mac Mini - from 13 990 CZK• MacBook Pro 13” - from 27 990 CZK
  9. 9. iOS Developer Account• Bound to Apple ID • Registration is free • XCode/SDK download is free • but it offers development for iOS simulator only
  10. 10. iOS Developer Account• iOS Developer Program - $99 / year • Installation on devices • App Store publishing • Support
  11. 11. Member Center• A dashboard website, a quick pointer • Dev Centers • Provisioning Portal • iTunes Connect • Resource Center, Developer Support, Forums
  12. 12. Developer Center• Separate dev centers for iOS, Mac OS and Web development • A place to find • Resources, videos, tutorials, docs, ... • Early access downloads
  13. 13. Provisioning portal• Register your development devices • max. 100 iOS devices / year • one-time removal• Manage certificates• Register AppID• Create a provisioning profile
  14. 14. Provisioning profile• Development / Distribution profiles• A composite entity that contains • Certificates • AppID • Devices
  15. 15. Provisioning Process
  16. 16. iTunes Connect• Manage applications• Manage legal contracts• Sales statistics• Financial Reports, User Management, Contact
  17. 17. Member Center• A dashboard that points to • Dev Centers ~ Learn & Do • Provisioning Portal ~ Test • iTunes Connect ~ Distribute • Resource Center, Developer Support, Forums
  18. 18. App Store
  19. 19. iOS Overview
  20. 20. iOS Overview• Unix based, high performance• Strict memory management• Multi-tasking since iOS 4• Apps are sandboxed• Specific features accessed via public iOS SDK APIs
  21. 21. Memory management• Application receives memory warnings from the OS• Must react on it quickly • ... free up as much memory as possible as quickly as possible• ... otherwise, it’s killed
  22. 22. Multi-tasking• Application transitions among states • Not Running • Inactive • Active • Background • Suspended
  23. 23. User’s perspective• Multitasking is transparent• “List of last used apps”• “List of running apps”• Default.png should resemble the first app screen
  24. 24. Multi-tasking• Apps may remain alive • audio • voip • location • newsstand • external / bluetooth accessory
  25. 25. Application sandbox• Every application has a home folder • Documents folder - is backed up • Cache folder - isn’t backed up • tmp folder
  26. 26. Development Tools
  27. 27. XCode• IDE used for Mac / iOS development• Tight git VCS integration• LLVM / GCC compiler• App Store submit, ad-hoc archives• Distributed builds
  28. 28. XCode - Project/Target
  29. 29. XCode - Storyboarding
  30. 30. XCode - Source Code
  31. 31. Instruments• Set of visual debugging tools • Memory leaks / Zombie objects • CPU / Activity monitoring • Quartz performance • OpenGL ES performance
  32. 32. iPhone/iPad Simulator• Almost like a real device• Intel instruction set• Inherits computer CPU and memory• Limited set of device specific features • no push, no App Store, no phone calls, no accelerometer, ...
  33. 33. Advanced demos
  34. 34. Advanced demos• Augmented reality • Qualcom AR SDK for iOS • https://developer.qualcomm.com/develop/ mobile-technologies/augmented-reality• Face recognition • OpenCV library built for iOS • http://opencv.willowgarage.com
  35. 35. Augmented reality
  36. 36. Face Recognition
  37. 37. Objective-C & iOS SDK
  38. 38. Objective-C• Object oriented language• Derived from C• It’s not a C++, it’s not even similar• More similar to SmallTalk• Dynamic, improved in a rapid pace
  39. 39. Confusing parts• Methods are called selectors• YES/NO instead of TRUE/FALSE• nil instead of null• self instead of this• *.m files are implementation files
  40. 40. Confusing parts• Map is called NSDictionary• NSString constant is written as @”aa”• NS stands for NextStep• “hello” is a C/C++ string
  41. 41. Calling a selector• Java int a = inst.method(12.0); MyClass.staticMethod(a, b);• Objective-C int a = [inst methodWithParam:12.0]; [MyClass staticMethodWithParam1:a param2:b];
  42. 42. Selector • Yes, it is split in multiple parts • Named parameters improve readability self.label.textColor = [UIColor colorWithRed:1.0 green:0.0 blue:0.0 alpha:1.0]; NSString *imageName = [NSString stringWithFormat:@”image_%d.png”, i]; [[UIImage imageNamed:imgName] stretchableImageWithLeftCapWidth:27 topCapHeight:9]; string = [basePath stringByAppendingPathComponent: @"/some/file.txt"];
  43. 43. Declaring a selector• Java public int method(double number); private static void staticMethod(int a, bool b);• Objective-C - (int) methodWithParam:(double)number; + (void) staticMethodWithParam1:(int)a param2:(BOOL)b; // note: avoid “and”, “with”, ... in selector name // WRONG=> initWithName:andSurname: // OK=> initWithName:surname:
  44. 44. Declaring a class // Employee.h #import <Foundation/Foundation.h> @interface Employee: NSObject <EmployeeProtocol> { NSString _name; // often not necessary } @property (nonatomic, strong) NSString *name; @property (nonatomic, strong) NSString *surname; - (id) initWithName:(NSString*)name surname:(NSString*)surname; @end
  45. 45. Defining a class // Employee.m #import “Employee.h” @implementation Employee @synthesize name = _name, surname; - (id) initWithName:(NSString*)_name surname:(NSString*)_surname { self = [super init]; if (self != nil) { self.name = _name; self.surname = _surname; } return self; } ...
  46. 46. Defining a class ... - (void) greet { NSLog(@”Hello, %@ %@!”, self.name, self.surname); } @end
  47. 47. Declaring a protocol• Protocol ~ Interface // EmployeeProtocol.h #import <Foundation/Foundation.h> @protocol EmployeeProtocol <NSObject> - (void) greet; @optional - (void) greetPolitely; @end
  48. 48. Using a protocol Protocol // Employee.h #import <Foundation/Foundation.h> @interface Employee: NSObject <EmployeeProtocol> { int someInstanceVariable; } @property (nonatomic, strong) NSString *name; @property (nonatomic, strong) NSString *surname; - (id) initWithName:(NSString*)name surname:(NSString*)surname;
  49. 49. Declaring a category• Category = Extending class without subclassing // NSString+Crypto.h #import <Foundation/Foundation.h> @interface NSString (Crypto) - (NSString*) cryptedString; @end
  50. 50. Declaring a category• Category = Extending class without subclassing // NSString+Crypto.m #import "NSString+Crypto.h" @implementation NSString (Crypto) - (NSString*) cryptedString { ... } @end
  51. 51. Class Extension• “Category” with nothing in the brackets• Usually implemented in the class implementation file• Used to implement private properties or to mask read-only modifier on a property
  52. 52. Blocks^ • Block = piece of code • Used throughough the SDK • ~ Lambda, ~ anonymous • Blocks are clojures • __block type specifier
  53. 53. Blocks - UI Animations imageView.alpha = 0.0; [UIView animateWithDuration:1.0 animations:^{ imageView.alpha = 1.0; } completion:^(BOOL finished) { if (finished) { // ... } else { // ... } }];
  54. 54. Blocks - Set filtering NSSet *iSet = [NSSet set]; // ... add objects to the set [set objectsPassingTest:^(id obj, BOOL *stop) { return [self testValue:id]; // custom comparison }];
  55. 55. Memory Management
  56. 56. Memory management• Every NSObject keeps a reference count• Object is created => references = 1 • note: created ~ init, new, copy• Object is retained => references++• Object is released => references--• (references == 0) => dealloc
  57. 57. Memory management• Before iOS 5: manual memory management was needed • retain / release / autorelease • mechanical, tedious, boring MyClass inst = [[MyClass alloc] init]; // ... do something [inst release];
  58. 58. Since iOS 5 - ARC• Automatic Reference Counting is available • Occurs during compilation • Still some libraries without ARC MyClass inst = [[MyClass alloc] init]; // ... do something // object will get released in due course
  59. 59. Autorelease pools• Every thread has a stack of autorelease pools • Object can register in the pool • In due course, the pool sends release to the object • When drained, the pool sends release to the object • Useful when creating many objects
  60. 60. Autorelease pools // HeavyMasacreComputator.m - (void) doSomething { for (int i = 0; i < TRILLION_TRILLIONS; i++) { for (int j = 0; j < TRILLION; j++) { MyClass c = [[MyClass alloc] init]; // do stuff with my class } } }
  61. 61. Autorelease pools // HeavyMasacreComputator.m - (void) doSomething { for (int i = 0; i < TRILLION_TRILLIONS; i++) { @autoreleasepool { for (int j = 0; j < TRILLION; j++) { MyClass c = [[MyClass alloc] init]; // do stuff with my class } } } }
  62. 62. Autorelease pools // HeavyMasacreComputator.m - pre iOS 5 - (void) doSomething { for (int i = 0; i < TRILLION_TRILLIONS; i++) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; for (int j = 0; j < TRILLION; j++) { MyClass c = [[[MyClass alloc] init] autorelease]; // do stuff with my class } [pool drain]; } }
  63. 63. Ownership Qualifiers• How objects are assigned • __strong - retained • __unsafe_unretained - not retained • __weak - dtto, set to nil on dealloc • __autoreleasing - retained, autoreleased
  64. 64. Properties• Getter / Setter for the instance variables• “Dot notation” for access• Flags in the header file• Synthesized in the implementation file• Read-only / read-write properties
  65. 65. Properties• Property vs. iVar • self.name ~ getter / setter used • [self name]; • [self setName:@”Petr”]; • name ~ direct access to iVar • name = @”hello”;
  66. 66. Properties• Implied ownership qualifiers for iVar • strong, retain, copy => __strong • weak => __weak • assign, unsafe_unretained => __unsafe_unretained
  67. 67. UI Elements
  68. 68. UIKit - The Gist• Framework for iOS UI• UI Components, gesture recognizers• MVC approach • UIViewController manages UIView • UIViewController references model
  69. 69. UIKit - MVC diagram Model
  70. 70. UI Consistency• Controls and views are customizable• iOS is a very consistent platform, less is often more• Follow iOS Human Interface Guidelines
  71. 71. iOS UI - Tools• Storyboard / Interface Builder• Hints in code for actions/outlets • IBAction • IBOutlet• “Segue” since iOS 5 • View transitions for free
  72. 72. Network Aware Apps
  73. 73. Networking• Three classes to make it work • [NSURL URLWithString:@”http://google.com”]; • [NSURLRequest requestWithUrl:url]; • [NSURLConnection connectionWithRequest:request delegate:self] ???
  74. 74. Delegate• Similar to observer pattern • “Only one instance of observer”• An object that receives callbacks• Uses protocol to define the callbacks• Musn’t be retained to avoid retain cycles => “weak”
  75. 75. DataSource• Structure is the same as for the delegate • not retained • bound by a protocol• Callbacks are used to feed data to a view
  76. 76. Connection callbacks// NSURLConnectionDataDelegate formal protocol since iOS 5// HTTP response- (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;// Data chunk received- (void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;// All done- (void) connectionDidFinishLoading:(NSURLConnection *)conn;// Problem with connection- (void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error;
  77. 77. Processing JSON• JSON-Framework • New BSD Licence • JSON parser and generator • http://stig.github.com/json- framework/
  78. 78. Processing XML• TouchXML • Modified BSD Licence • DOM parser + XPath, XML Namespaces • https://github.com/TouchCode/ TouchXML
  79. 79. Resources• Stack Overflow• iOS Dev Center• iOS Human Interface Guidelines• View Controller Catalog for iOS• clang: a C language family frontend for LLVM• Augmented Reality (Vuforia™)• OpenCV Wiki• JSON Framework on GitHub• TouchXML on GitHub
  80. 80. Thank you http://www.inmite.eu/talksPetr DvořákPartner & iOS Development Lead@joshis_tweets
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×