iOS Development
                        Lecture 1 - The basics



Petr Dvořák
Partner & iOS Development Lead
@joshis_tweets
Outline
Outline
• iOS app development ecosystem
  • Required hardware
  • iOS Developer Account & App Store
  • iOS Overview
  • XCode and Instruments
  • The cool stuff you can do
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 development for iOS simulator
       only
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 Center, Developer
   Support, Forums
Developer Center
• Separate dev centers for iOS, Mac OS
   and Web development
 • A place to find
   • Resources, videos, tutorials, docs, ...
   • Early access downloads
Provisioning portal
• Register your development devices
  • max. 100 iOS devices / year
  • one-time removal
• Manage certificates
• Register AppID
• Create a provisioning profile
Provisioning profile
• Development / Distribution profiles
• A composite entity that contains
  • Certificates
  • AppID
  • Devices
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 Connect       ~ Distribute
  • Resource Center, Developer
   Support, Forums
App Store
iOS Overview
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
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
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
  resemble the first app
  screen
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 up
  • tmp folder
Development Tools
XCode
• IDE used for Mac / iOS development
• Tight git VCS integration
• LLVM / GCC compiler
• App Store submit, ad-hoc archives
• Distributed builds
XCode - Project/Target
XCode - Storyboarding
XCode - Source Code
Instruments
• Set of visual debugging tools
  • Memory leaks / Zombie objects
  • CPU / Activity monitoring
  • Quartz performance
  • OpenGL ES performance
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, ...
Advanced demos
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
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
• Dynamic, improved in a rapid pace
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
Confusing parts
• Map is called NSDictionary
• NSString constant is written as @”aa”
• NS stands for NextStep
• “hello” is a C/C++ string
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];
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"];
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:
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
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;
 }

 ...
Defining a class
 ...

 - (void) greet {
     NSLog(@”Hello, %@ %@!”, self.name, self.surname);
 }

 @end
Declaring a protocol
• Protocol ~ Interface
     // EmployeeProtocol.h

     #import <Foundation/Foundation.h>

     @protocol EmployeeProtocol <NSObject>

     - (void) greet;

     @optional

     - (void) greetPolitely;

     @end
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;
Declaring a category
• Category = Extending class without
  subclassing

     // NSString+Crypto.h

     #import <Foundation/Foundation.h>

     @interface NSString (Crypto)

     - (NSString*) cryptedString;

     @end
Declaring a category
• Category = Extending class without
  subclassing

     // NSString+Crypto.m

     #import "NSString+Crypto.h"

     @implementation NSString (Crypto)

     - (NSString*) cryptedString { ... }

     @end
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
Blocks


^    • Block = piece of code
     • Used throughough the SDK
     • ~ Lambda, ~ anonymous
     • Blocks are clojures
       • __block type specifier
Blocks - UI Animations
 imageView.alpha = 0.0;
 [UIView animateWithDuration:1.0 animations:^{
     imageView.alpha = 1.0;
 } completion:^(BOOL finished) {
     if (finished) {
         // ...
     } else {
         // ...
     }
 }];
Blocks - Set filtering
 NSSet *iSet = [NSSet set];
 // ... add objects to the set


 [set objectsPassingTest:^(id obj, BOOL *stop) {
     return [self testValue:id]; // custom comparison
 }];
Memory Management
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
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];
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
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
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
         }
     }
 }
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
             }
         }
     }
 }
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];
     }
 }
Ownership Qualifiers
• How objects are assigned
  • __strong            - retained


  • __unsafe_unretained - not retained


  • __weak              - dtto, set to nil on dealloc


  • __autoreleasing     - retained, autoreleased
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
Properties
• Property vs. iVar
  • self.name ~ getter / setter used
    • [self name];
    • [self setName:@”Petr”];
  • name          ~ direct access to iVar
    • name = @”hello”;
Properties
• Implied ownership qualifiers for iVar
  • strong, retain, copy
      => __strong
 • weak
      => __weak
 • assign, unsafe_unretained
       => __unsafe_unretained
UI Elements
UIKit - The Gist
• Framework for iOS UI
• UI Components, gesture recognizers
• MVC approach
  • UIViewController manages UIView
  • UIViewController references model
UIKit - MVC diagram
               Model
UI Consistency
• Controls and views are customizable
• iOS is a very consistent platform, less
  is often more
• Follow iOS Human Interface
  Guidelines
iOS UI - Tools
• Storyboard / Interface Builder
• Hints in code for actions/outlets
  • IBAction
  • IBOutlet
• “Segue” since iOS 5
  • View transitions for free
Network Aware Apps
Networking
• Three classes to make it work
 •   [NSURL URLWithString:@”http://google.com”];

 •   [NSURLRequest requestWithUrl:url];

 •   [NSURLConnection connectionWithRequest:request
                                   delegate:self]




                              ???
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”
DataSource
• Structure is the same as for the
  delegate
 • not retained
 • bound by a protocol
• Callbacks are used to feed data to
  a view
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;
Processing JSON
• JSON-Framework
  • New BSD Licence
  • JSON parser and generator
  • http://stig.github.com/json-
    framework/
Processing XML
• TouchXML
  • Modified BSD Licence
  • DOM parser + XPath, XML
   Namespaces
 • https://github.com/TouchCode/
   TouchXML
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
Thank you
                   http://www.inmite.eu/talks



Petr Dvořák
Partner & iOS Development Lead
@joshis_tweets

FI MUNI 2012 - iOS Basics

  • 1.
    iOS Development Lecture 1 - The basics Petr Dvořák Partner & iOS Development Lead @joshis_tweets
  • 2.
  • 3.
    Outline • iOS appdevelopment ecosystem • Required hardware • iOS Developer Account & App Store • iOS Overview • XCode and Instruments • The cool stuff you can do
  • 4.
    Outline • Objective-C andiOS SDK • Basic language syntax • Classes, protocols, categories • Memory management
  • 5.
    Outline • UI Elementson iOS • Overview of the UI building blocks • Storyboard / Interface Builder
  • 6.
    Outline • Network awareapplications • Connecting to on-line resources • Processing XML and JSON
  • 7.
  • 8.
    Required hardware • Anycomputer/laptop with Mac OS X • Mac Mini - from 13 990 CZK • MacBook Pro 13” - from 27 990 CZK
  • 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.
    iOS Developer Account •iOS Developer Program - $99 / year • Installation on devices • App Store publishing • Support
  • 11.
    Member Center • Adashboard website, a quick pointer • Dev Centers • Provisioning Portal • iTunes Connect • Resource Center, Developer Support, Forums
  • 12.
    Developer Center • Separatedev centers for iOS, Mac OS and Web development • A place to find • Resources, videos, tutorials, docs, ... • Early access downloads
  • 13.
    Provisioning portal • Registeryour development devices • max. 100 iOS devices / year • one-time removal • Manage certificates • Register AppID • Create a provisioning profile
  • 14.
    Provisioning profile • Development/ Distribution profiles • A composite entity that contains • Certificates • AppID • Devices
  • 15.
  • 16.
    iTunes Connect • Manageapplications • Manage legal contracts • Sales statistics • Financial Reports, User Management, Contact
  • 17.
    Member Center • Adashboard that points to • Dev Centers ~ Learn & Do • Provisioning Portal ~ Test • iTunes Connect ~ Distribute • Resource Center, Developer Support, Forums
  • 18.
  • 19.
  • 20.
    iOS Overview • Unixbased, high performance • Strict memory management • Multi-tasking since iOS 4 • Apps are sandboxed • Specific features accessed via public iOS SDK APIs
  • 21.
    Memory management • Applicationreceives 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.
    Multi-tasking • Application transitionsamong states • Not Running • Inactive • Active • Background • Suspended
  • 23.
    User’s perspective • Multitaskingis transparent • “List of last used apps” • “List of running apps” • Default.png should resemble the first app screen
  • 24.
    Multi-tasking • Apps mayremain alive • audio • voip • location • newsstand • external / bluetooth accessory
  • 25.
    Application sandbox • Everyapplication has a home folder • Documents folder - is backed up • Cache folder - isn’t backed up • tmp folder
  • 26.
  • 27.
    XCode • IDE usedfor Mac / iOS development • Tight git VCS integration • LLVM / GCC compiler • App Store submit, ad-hoc archives • Distributed builds
  • 28.
  • 29.
  • 30.
  • 31.
    Instruments • Set ofvisual debugging tools • Memory leaks / Zombie objects • CPU / Activity monitoring • Quartz performance • OpenGL ES performance
  • 32.
    iPhone/iPad Simulator • Almostlike 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.
  • 34.
    Advanced demos • Augmentedreality • 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.
  • 36.
  • 37.
  • 38.
    Objective-C • Object orientedlanguage • Derived from C • It’s not a C++, it’s not even similar • More similar to SmallTalk • Dynamic, improved in a rapid pace
  • 39.
    Confusing parts • Methodsare called selectors • YES/NO instead of TRUE/FALSE • nil instead of null • self instead of this • *.m files are implementation files
  • 40.
    Confusing parts • Mapis called NSDictionary • NSString constant is written as @”aa” • NS stands for NextStep • “hello” is a C/C++ string
  • 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.
    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.
    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.
    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.
    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.
    Defining a class ... - (void) greet { NSLog(@”Hello, %@ %@!”, self.name, self.surname); } @end
  • 47.
    Declaring a protocol •Protocol ~ Interface // EmployeeProtocol.h #import <Foundation/Foundation.h> @protocol EmployeeProtocol <NSObject> - (void) greet; @optional - (void) greetPolitely; @end
  • 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.
    Declaring a category •Category = Extending class without subclassing // NSString+Crypto.h #import <Foundation/Foundation.h> @interface NSString (Crypto) - (NSString*) cryptedString; @end
  • 50.
    Declaring a category •Category = Extending class without subclassing // NSString+Crypto.m #import "NSString+Crypto.h" @implementation NSString (Crypto) - (NSString*) cryptedString { ... } @end
  • 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.
    Blocks ^ • Block = piece of code • Used throughough the SDK • ~ Lambda, ~ anonymous • Blocks are clojures • __block type specifier
  • 53.
    Blocks - UIAnimations imageView.alpha = 0.0; [UIView animateWithDuration:1.0 animations:^{ imageView.alpha = 1.0; } completion:^(BOOL finished) { if (finished) { // ... } else { // ... } }];
  • 54.
    Blocks - Setfiltering NSSet *iSet = [NSSet set]; // ... add objects to the set [set objectsPassingTest:^(id obj, BOOL *stop) { return [self testValue:id]; // custom comparison }];
  • 55.
  • 56.
    Memory management • EveryNSObject 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.
    Memory management • BeforeiOS 5: manual memory management was needed • retain / release / autorelease • mechanical, tedious, boring MyClass inst = [[MyClass alloc] init]; // ... do something [inst release];
  • 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.
    Autorelease pools • Everythread 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.
    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.
    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.
    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.
    Ownership Qualifiers • Howobjects are assigned • __strong - retained • __unsafe_unretained - not retained • __weak - dtto, set to nil on dealloc • __autoreleasing - retained, autoreleased
  • 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.
    Properties • Property vs.iVar • self.name ~ getter / setter used • [self name]; • [self setName:@”Petr”]; • name ~ direct access to iVar • name = @”hello”;
  • 66.
    Properties • Implied ownershipqualifiers for iVar • strong, retain, copy => __strong • weak => __weak • assign, unsafe_unretained => __unsafe_unretained
  • 67.
  • 68.
    UIKit - TheGist • Framework for iOS UI • UI Components, gesture recognizers • MVC approach • UIViewController manages UIView • UIViewController references model
  • 69.
    UIKit - MVCdiagram Model
  • 70.
    UI Consistency • Controlsand views are customizable • iOS is a very consistent platform, less is often more • Follow iOS Human Interface Guidelines
  • 71.
    iOS UI -Tools • Storyboard / Interface Builder • Hints in code for actions/outlets • IBAction • IBOutlet • “Segue” since iOS 5 • View transitions for free
  • 72.
  • 73.
    Networking • Three classesto make it work • [NSURL URLWithString:@”http://google.com”]; • [NSURLRequest requestWithUrl:url]; • [NSURLConnection connectionWithRequest:request delegate:self] ???
  • 74.
    Delegate • Similar toobserver 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.
    DataSource • Structure isthe same as for the delegate • not retained • bound by a protocol • Callbacks are used to feed data to a view
  • 76.
    Connection callbacks // NSURLConnectionDataDelegateformal 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.
    Processing JSON • JSON-Framework • New BSD Licence • JSON parser and generator • http://stig.github.com/json- framework/
  • 78.
    Processing XML • TouchXML • Modified BSD Licence • DOM parser + XPath, XML Namespaces • https://github.com/TouchCode/ TouchXML
  • 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.
    Thank you http://www.inmite.eu/talks Petr Dvořák Partner & iOS Development Lead @joshis_tweets