Digital Identity is Under Attack: FIDO Paris Seminar.pptx
201010 SPLASH Tutorial
1. Programming with iPhone SDK
Xcode 3.2.4 - iOS 4.1
Javier González Sánchez
Maria Elena Chávez Echeagaray
Copyright is held by the author/owner(s).
SPLASH 2010, October 17-21, 2010. Reno, Nevada, USA
5. iOS Devices
Screen size. iPhone 4 960 x 640 pixels and
iPad 1024 x 768 pixels.
Light mobiles. iPod (3.56 oz), iPad (1.6 lb),
iPhone (4.8 oz).
Yesterday one application at a time. Today
multitasking.
Only one window. iPhone applications only
can have one window at a time.
Five seconds limit. When the user hits the
home button, your application will have 5
seconds to save data, close and give up its
control. If it takes more than that, it will be
terminated.
5
6. iOS Devices
CPU. Apple A4 ≈ 1 GHz.
Memory administration. iPod & iPad (256
MB), iPhone (512 MB) of RAM. Without a
“garbage collector”.
Storage. iPod (8, 32 & 64 GB), iPad(16-64
GB), iPhone (16-32 GB).
File Management. It provides each
application with a sandbox (2GB), where the
apps can read/write files and store data.
Multitouch user interface.
Other features. iPhone includes Core
Location, built-in camera and photo library, a
built-in accelerometer, digital compass,
proximity sensor, and ambient light sensor.
And a Phone with WiFi.
6
9. iOS Developer Program
There is a free SDK that allows you to create your applications, and test
them in a Simulator on your Mac. Ok!, so what?, Is this a business?
There is a Individual/Company program or the Enterprise program. They cost
$99 and $299 (annual) respectively. There is also the option of the University
program for free. Once you sign into any program you can upload your
applications to your device (iPod, iPad, iPhone) or distribute them through
the App Store.
They take care of the process (30% revenue), you can take then care of your
development.
September 2009 = 85,000 apps in the Apple Store, September 2010 =
250,000 apps.
September 2009 = 2K millions downloads in the Apple Store, September
2010 = 6.5 millions downloads.
9
12. Frameworks
Foundation
Cocoa Touch
UIKit
OpenGL ES, Quartz,
Media
OpenAL, Core Audio,
Core Animation
Core Location,
Core Services
CFNetwork,
SQLite | Core Data
Security,
UNIX sockets
Core OS
File system
Memory allocation 12
13. Tools
We will be working with:
Xcode. Apple's Integrated Development Environment (IDE).
Interface Builder (IB). Environment to facilitate the development of your GUI's
and to give functionality to its components.
iPhone Simulator. It allows you to run your applications on your Mac.
NOTE: iOS SDK does not allow you to upload your applications to your device
(iPod / iPad / iPhone) or distribute them in the App Store.
Instruments. Environment which lets you analyze the performance of your
applications while running in the simulator or on a device.
13
15. Interface Builder
Library
View
.xib file
View
Design area
GUI elements 15
16. Interface Builder
Interface Builder is the tool you use to assemble your application’s user
interface visually.
After you’ve placed the components on the window’s surface, you can
establish the relationships between those components and your code.
When your interface looks the way you want it, you save the contents
to a nib file, which is a custom resource file format.
The nib files you create in Interface Builder contain all the information
that the UI Kit needs to recreate the same objects in your application at
runtime. Loading a nib file creates runtime versions of all the objects
stored in the file, configuring them exactly as they were in Interface
Builder.
16
20. Objective-C
Is a simple computer language designed to enable sophisticated OO programming.
Extends the standard ANSI C language by providing syntax for defining classes,
methods, and properties, as well as other constructs that promote dynamic
extension of classes.
Based mostly on Smalltalk (class syntax and design), one of the first object-oriented
programming languages.
Includes the traditional object-oriented concepts, such as encapsulation,
inheritance, and polymorphism.
20
21. Files
Extension Source Type
.h Header files. Header files contain class, type, function, and
constant declarations.
.m Source files. This is the typical extension used for source files
and can contain both Objective-C and C code.
.mm Source files. A source file with this extension could contain C++
code in addition to Objective-C and C code.
This extension should be used only if you actually refer to C++
classes or features from your Objective-C code.
21
22. #import
To include header files in your source code, you can use the standard #include, but….
Objective-C provides a better way: #import. it makes sure that the same file is never
included more than once.
#import
“MyAppDelegate.h”
#import
“MyViewController.h”
#import
<UIKit/UIKit.h>
22
23. Class
The specification of a class in Objective-C requires two distinct pieces: the
interface (.h files) and the implementation (.m files).
The interface portion contains the class declaration and defines the instance
variables and methods associated with the class.
@interface
…
@end
The implementation portion contains the actual code for the methods of the
class.
@implementation
…
@end
23
24. Class
Class name
@interface
MyClass
:
NSObject
Parent class
{
int
count;
id
data;
Instance variables
NSString*
name;
}
-‐
(id)initWithString:(NSString
*)aName;
methods
+
(MyClass
*)createMyClassWithString:
(NSString
*)
aName;
@end
24
25. Class
@implementation
MyClass
Class name
-‐
(id)initWithString:(NSString
*)
aName
{
if
(self
=
[super
init])
{
count
=
0;
data
=
nil;
methods
name
=
[aName
copy];
return
self;
}
}
+
(MyClass
*)createMyClassWithString:
(NSString
*)
aName
{
return
[[[self
alloc]
initWithString:aName]
autorelease];
}
@end
25
26. Methods
A class in Objective-C can declare two types of methods:
Instance method is a method whose execution is scoped to a particular instance of
the class. In other words, before you call an instance method, you must first create
an instance of the class.
Class methods, by comparison, do not require you to create an instance.
Method type identifier One or more signature keywords
-‐(void)insertObject:(id)anObject
atIndex:(NSUInteger)index;
Return type Parameters with (type) and name
26
27. Methods
So
the
declaration
of
the
method
insertObject
would
be:
-‐(void)insertObject:(id)anObject
atIndex:(NSUInteger)index
Method type identifier, is (-) to instance methods, (+) to class methods.
And
the
line
to
call
the
method
would
be:
[myArray
insertObject:anObj
atIndex:0];
27
28. Properties
They are simply a shorthand for defining methods (getters and setters) that
access existing instance variables.
Properties do not create new instance variables in your class declaration.
Reduce the amount of redundant code you have to writ, because most
accessor methods are implemented in similar ways.
You specify the behavior you want using the property declaration and then
synthesize actual getter and setter methods based on that declaration at
compile time.
28
29. Properties
In the interface we have:
{
BOOL
flag;
NSString*
myObject;
UIView*
rootView;
}
@property
BOOL
flag;
@property
(copy)
NSString*
myObject;
//
Copy
the
object
during
assignement.
@property
(readonly)
UIView*
rootView;
//
Create
only
a
getter
method.
…
And in the implementation side we have:
@synthesize
flag;
@synthesize
myObject;
@synthesize
rootView;
…
myObject.flag
=
YES;
CGRect
viewFrame
=
myObject.rootView.frame;
29
30. Properties
Writability
Readwrite. You can read/write it. This is the default value.
Readonly. You can only read it.
Setter semantics (mutually exclusive)
Assign. Specifies that the setter uses simple assignment. This is the default value.
Retain. Specifies that a pointer should be retained.
Copy. Specifies that a copy of the object should be used for assignment.
Atomicity (multithreading)
Nonatomic. Specifies that accessor methods are not atomic.
The default value is atomic but there is no need to specify it.
30
31. Protocols and Delegates
Protocols are not classes themselves. They simply define an interface that other objects
are responsible for implementing
A protocol declares methods that can be implemented by any class.
In iOS OS, protocols are used frequently to implement delegate objects. A delegate
object is an object that acts on behalf of, or in coordination with, another object.
The declaration of a protocol looks similar to that of a class interface, with the exceptions
that protocols do not have a parent class and they do not define instance variables.
In the case of many delegate protocols, adopting a protocol is simply a matter of
implementing the methods defined by that protocol. There are some protocols that
require you to state explicitly that you support the protocol, and protocols can specify
both required and optional methods.
31
33. Demo: Fraction
Fraction.h
Fraction.m
#import
<Foundation/NSObject.h>
#import
"Fraction.h"
#import
<stdio.h>
@interface
Fraction:
NSObject
{
int
numerator;
@implementation
Fraction
int
denominator;
}
@synthesize
numerator;
//Properties
instead
of
getters
and
@synthesize
denominator;
//setters
@property
(nonatomic)
int
numerator;
//
Output
Print
@property
(nonatomic)
int
denominator;
-‐(void)
print
{
printf("%i/%i",
numerator,denominator);
}
//Output
print
@end
-‐(void)
print;
…
@end
33
34. Demo: Fraction
main.m
#import <stdio.h>
#import "Fraction.h"
int main( int argc, const char *argv[] ) {
Fraction *frac = [[Fraction alloc] init];
frac.numerator = 1;
frac.denominator=3;
printf( "The fraction is: " );
[frac print];
printf( "n" );
[frac release]
return 0;
}
34
35. Strings
The NSString class provides an object wrapper.
Supports storing arbitrary-length strings, support for Unicode, printf-style
formatting utilities, and more.
Shorthand notation for creating NSString objects from constant values.
Precede a normal, double-quoted string with the @ symbol.
NSString*
myString
=
@”Hello
Worldn";
NSString*
anotherString
=
[NSString
stringWithFormat:@"%d
%s",
1,
@"String”];
35
41. View (go back to IB)
View
Include
XIB files
IBOutlet
IBAction
Protocol
implementation
Model Controller
Delegates
UIApplicationDelegate
UIAccelerometerDelegate
UILocationManagerDelegate
41
42. Controller
View
Include
XIB files
IBOutlet
IBAction
Protocol
implementation
Model Controller
Delegates
UIApplicationDelegate
UIAccelerometerDelegate
UILocationManagerDelegate
42
43. Outlets and Actions
Outlet: is a pointer that points an
object in the NIB file.
• Action: objects in the nib can trigger
special methods in our controller. These
special methods are known as action
methods.
43
46. Connecting
We need to connect the elements in the interface with its functionality, i.e., we have
to connect our View with the File's Owner.
With this connection we are telling our controller that when our application starts it
loads the TutorialEvaluationViewController.xib file into memory and get control of it.
UI
46
51. Handling Touch Events
All UIViewController inherit from UIResponder, and is able to handle touch Event.
In order to do this we use these three methods:
-‐
(void)touchesBegan:(NSSet
*)touches
withEvent:(UIEvent
*)event;
-‐
(void)touchesMoved:(NSSet
*)touches
withEvent:(UIEvent
*)event;
-‐
(void)touchesEnded:(NSSet
*)touches
withEvent:(UIEvent
*)event;
51
56. AutoRotate
The UIViewController class provides the infrastructure needed to rotate your interface and
adjust the position of views automatically in response to orientation changes.
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation interfaceOrientation {
return YES;
//return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
interfaceOrientation values:
UIInterfaceOrientationPortrait
UIInterfaceOrientationPortraitUpsideDown
UIInterfaceOrientationLandscapeLeft
UIInterfaceOrientationLandscapeRight
56
60. Reading the Accelerometer
UIAccelerometer object in UIKit allow you to access to the raw accelerometer
data directly. This object reports the current accelerometer values.
To get an instance of this class, call the sharedAccelerometer method of
UIAccelerometer class.
The updateInterval property define the reporting interval in seconds.
-‐(void)viewDidLoad
{
UIAccelerometer
*accelerometer
=
[UIAccelerometer
sharedAccelerometer];
accelerometer.delegate
=
self;
accelerometer.updateInterval
=
1.0/60;
[super
viewDidLoad];
}
60
61. Reading the Accelerometer
A delegate (UIAccelerometerDelegate) will receive acceleration events.
@interface
FooViewController:
UIViewController
<UIAccelerometerDelegate>
Use accelerometer:didAccelerate: method to process accelerometer data.
-‐(void)accelerometer:(UIAccelerometer
*)accelerometer
didAccelerate:
(UIAcceleration
*)acceleration
{
NSString
*s
=
[[NSString
alloc]
initWithFormat:@"%f,
%f,
%f",
acceleration.x,
acceleration.y,
acceleration.z];
accLabel.text
=
s;
[s
release];
}
61
65. Core Location
The Core Location framework monitors signals coming from cell phone towers
and Wi-Fi hotspots and uses them to triangulate the user's current position.
65
66. Step One: CLLocationManager
Create an instance of CLLocationManager class.
It
is
necessary
to
include
the
CoreLocation.framework
#import
<CoreLocation/CoreLocation.h>
@interface
FooViewController:
UIViewController<CLLocationManagerDelegate>
To begin receiving notifications, assign a delegate and call the
startUpdatingLocation method.
-‐(void)viewDidLoad
{
CLLocationManager
*locationManager=
[[CLLocationManager
alloc]
init];
[locationManager
startUpdatingLocation];locationManager.delegate
=
self;
locationManager.distanceFilter
=
kCLDistanceFilterNone;
locationManager.desiredAccuracy
=
kCLLocationAccuracyBest;
}
66
72. Quartz
Quartz 2D is the primary two-dimensional graphics rendering
API for iOS, part of the Core Graphics framework.
It offers features such as: Draw or display bitmap images,
Work with PDF documents, Beziers curves, Transformations,
and gradients.
72
73. Coding a new view
#import
<UIKit/UIKit.h>
@interface
myView
:
UIView
{
CGPoint
myPoint;
int
x;
int
y;
}
@property
CGPoint
myPoint;
@property
int
x;
@property
int
y;
-‐(void)draw;
@end
73
74. Coding a new view
@implementation
myView
@synthesize
myPoint;
@synthesize
x;
@synthesize
y;
-‐(id)initWithCoder:(NSCoder
*)coder
{
if
(self
=
[super
initWithCoder:coder])
{
x=self.bounds.size.width
/
2;
y=self.bounds.size.height
/
2;
}
return
self;
}
-‐(void)touchesBegan:(NSSet
*)touches
withEvent:(UIEvent
*)event{
UITouch
*t
=
[touches
anyObject];
CGPoint
point
=
[t
locationInView:t.view];
x
=
point.x;
y
=
point.y;
[self
setNeedsDisplay];
}
74
78. OpenGL | ES
OpenGL is an open, cross-platform graphics standard with
broad industry support. OpenGL greatly eases the task of
writing real-time 2D or 3D graphics applications by providing a
mature, well-documented graphics processing pipeline that
supports the abstraction of current and future hardware
accelerators.
78
86. Presenters
Javier González Sánchez
Arizona State University
javiergs@asu.edu
www.javiergs.com
Maria Elena Chávez Echeagaray
Arizona State University
helenchavez@asu.edu
www.helenchavez.com
86