T8b-IPhoneTutorial

advertisement
iPhone – Walkthrough
By: Hector M Lugo-Cordero, MS
Saad A Khan, MS
EEL 6788
1
Agenda
•
•
•
•
•
•
•
•
History
What you will need
Model View Controller
Objective-C
Develop with XCode and Interface Builder
Using the Sensors
App Examples
References
2
History
• Emerges as a device which provides
multimedia, Internet access, and smartphone
• Collaboration with Cingular Wireless (now
AT&T)
3
Releases
• Time magazine named it the invention of the
year in 2007
• Releases
– Original: January 9, 2007  Sale: January 29, 2007
– 3 G: July 11, 2008 (3G speed, assisted GPS)
– 3GS: June 8, 2009 (video cam and voice control)
4
Availability
5
Units in the world
Year
Units sold
2007
1,389,000
2008
11,625,000
2009
20,731,000
2010
8,737,000
Total
42,482,000
6
Hardware
Item
Description
Power
Original 3.7 V, 1400 mAh
3G: 3.7 V, 1150 mAh
3GS: 3.7 V, 1219 mAh
CPU
Original & 3G:
Samsung 32-bit RISC ARM 1176JZ(F)-S v1.0
620 MHz underclocked to 412 MHz
PowerVR MBX Lite 3D GPU
3GS:
Samsung S5PC100 ARM Cortex-A8
833 MHz underclocked to 600 MHz
PowerVR SGX GPU
Storage (Flash)
Original: 4, 8, 16 GB
3G: 8, 16 GB
3GS: 16, 32GB
7
Hardware
Item
Description
Memory
Original & 3G: 128 MB eDRAM
3GS: 256 MB eDRAM
Display
320 × 480 px, 3.5 in (89 mm), 2:3 aspect
ratio, 18-bit (262,144-color) LCD with 163
pixels per inch (ppi)
Input
Multi-touch touchscreen display, headset
controls, proximity and ambient light
sensors, 3-axis accelerometer
3GS also includes: digital compass
Camera
Original & 3G: 2.0 megapixels
3GS: 3.0 megapixels with video
(VGA at 30 fps)
8
Hardware
Item
Description
Connectivity
Wi-Fi (802.11b/g), Bluetooth 2.0+EDR, USB
2.0/Dock connector
GSM
3G also includes:
A-GPS; HSDPA
3GS also supports:
7.2 Mbps HSDPA
Bluetooth 2.1+EDR
Dimensions and Weight
Original (135 g):
115 mm (4.5 in) (h)
61 mm (2.4 in) (w)
11.6 mm (0.46 in) (d)
3G (133 g) & 3GS (135 g):
115.5 mm (4.55 in) (h)
62.1 mm (2.44 in) (w)
12.3 mm (0.48 in) (d)
9
What you will need
• MAC computer
• IPhone SDK
– Xcode
– Interface Builder
• To test
– Xcode build in simulator
– IPhone and Apple’s developer license
10
iPhone Developer (Phone ID)
In Xcode select: Window > Organizer
11
iPhone Developer (Certificate)
Keychain Access (Applications  Utilities)
Select 2048 bits and RSA (after continue)
Save to disk (remember location)
12
iPhone Developer (Assistant)
Login to http://developer.apple.com/iphone, enter developer portal
Launch Assistant
13
iPhone Developer (Key Inserts)
Identify the app, phone, and enter phone ID (previously acquired with organizer)
14
iPhone Developer(Install Certificate)
• Generate certificate from file generated by Keychain Access
• After download the profile and certificate
• Install on Xcode by dragging it
15
iPhone Developer (Deploy)
• Select target device
• Organizer allows to
take screen shots
• Console included
16
iPhone OS
• OS for iPhone, iPod Touch, and iPad
• Has a status bar above (signal strength, battery
status, time)
• A dock station is bellow (for main apps)
• Multitasking is available but only for Apple apps
• 3rd party apps are closed when Home button is
pressed.
• Force quit is available (holding power button
and then home button)
17
iPhone OS (Layers)
• Cocoa Touch
– User interface functionality, buttons,
pickers, scroll bars, etc.
– Wrappers to core services
• Media
– Core Audio, audio recording/mixing
– Open AL, Open GL
– Video playback
– PDF, JPG, PNG
18
iPhone OS (Layers)
• Core Services
– File Access, Address Book
– Threading
– Core Location
– Net Services, URL Utilities
• Core OS
– Security, Sockets
– Power Management
– Certificates, File System
19
Model View Controller
20
Model View Controller
• Main Window:
– App lives here
– Not much is done here
• App Delegate
– In charge of adding the view and controller to main
window
• App View Controller
– App Logic: the brains of the application (optional)
– App View: interface is designed here (GUI available)
21
Objective-C (History)
• Created early on 1980 by Brad Cox and Tom
Love at StepStone
• In 1986 Steve Jobs left Apple and started NeXT
– 1988 NeXT licensed Objective-C
• In 1996 Apple buys NeXT
– Steve Jobs returns to Apple
– Mac OS X is born
• It is object oriented
– Layer on top of C
22
Objective-C (Syntax)
•
•
•
•
•
Non object oriented operations identical to C
Object oriented follow the Smalltalk syntax
Methods are known as selectors
Calls are know as message
Example
– C++ call: object->method(arguments)
– Objective-C message: [object selector: arguments]
23
Objective-C (Dot Syntax)
• Introduced in Objective-C 2.0
• Getter
– int age = [person age];
– int age = person.age;
• Setter
– [person setAge: 25];
– person.age = 25;
• Better example
– [[person child] setAge: 1];  person.child.age = 1;
24
Objective-C (Methods)
• A dynamic data exists (i.e. id)
• -(id) selectorName: arg1 label2: arg2 label3: ar3
– Args are of the form: (type) name
– - denotes it is an instance method
– + denotes a class method
• Selectors are of type SEL
– Useful to see if a class responds to a method
• if ([obj respondsToSelector:sel]) {
[obj performSelector:sel withObject:self];
}
25
Objective-C (cont.)
• Including/Importing libraries
– #include: may cause cycles
– #import: includes the file if it is not already included
• Memory management (Reference count)
Making objects:
Retain
Alloc
Init
Copy
Removing objects:
Release
Autorelease
Dealloc
26
Objective-C (Autorelease)
• Perfect for returning variables created at a
method
• Methods that do not use autorelease
– “alloc” and “copy”
– We need to retain these objects
• All other methods that return an object include
autorelease
• We must follow these conventions
27
Objective-C (Autorelease example)
• - (NSString *)fullName {
NSString *result;
result = [[NSString alloc] initWithFormat:@“%@ %@”,
firstName, lastName];
[result
[result
release];
autorelease];
return result;
}
Memory leakage
Returns nil
OK
28
Objective-C (Implementation)
• Interfaces (protocols)
– Work the same way that in JAVA
• Delegates
– Are like protocols
– Handle events code
• Classes
– .h file (header)
– .m file (implementation)
29
Objective-C (Properties)
• Convenient for accessing object attributes
• Shortcut for getters/setters
• Allow to specify
– Access (e.g. read-only)
– Memory management policy (e.g. retain)
• atomic vs nonatomic
– nonatomic provides quicker access to the field
– atomic is better for when the field will be
read/write multiple times (multi threading)
30
Objective-C (Serialization)
• Known as archiving
• Done by overriding write: and read: methods
• Example:
-
-
(id) write: (TypedStream *) stream {
[super write:stream];
objc_write_types(stream, "i",
&person.age);
return self; }
(id) read: (TypedStream *) stream {
[super read:stream];
objc_read_types(stream, "i", &person.age);
return self; }
31
XCode
•
•
•
•
•
•
Replaced Project Builder
Organizes files
Includes an editor
Multiple testing targets
Useful for iPhone, MAC
Red link (app not build)
32
Interface Builder
• Works in collaboration with XCode
• Good for developing the App View
• Need to add keywords to the code
– IBOutlet translates to nothing
– IBAction translates to void
• Organized by category of usage
33
SDK Demo
34
Using the sensors
•
•
•
•
•
•
•
•
Camera
Microphone
Proximity
Accelerometer
Magnetometer
GPS
Making calls
Sending messages
35
Sensors on devices
36
Camera
• Use UIImagePickerController
• Implement UIImagePickerControllerDelegate
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = pickerDelegate; //can be self
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
Implement the following method in delegate (called after picture is taken)
- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary
*)editingInfo;
37
Microphone
• Core Audio library (AVAudioRecorder)
NSURL *url = [NSURL fileURLWithPath:@"/dev/null"];
NSDictionary *settings = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithFloat: 44100.0], AVSampleRateKey, [NSNumber
numberWithInt: kAudioFormatAppleLossless], AVFormatIDKey, [NSNumber
numberWithInt: 1], AVNumberOfChannelsKey, [NSNumber numberWithInt:
AVAudioQualityMax], AVEncoderAudioQualityKey, nil];
NSError *error;
recorder = [[AVAudioRecorder alloc] initWithURL:url settings:settings
error:&error];
if (recorder) {
[recorder prepareToRecord];
recorder.meteringEnabled = YES;
[recorder record]; }
else NSLog([error description]);
38
Proximity
• Turn them on
UIDevice *device = [UIDevice currentDevice];
device.proximityMonitoringEnabled = YES;
BOOL state = device.proximityState;
• Set notifications
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(proximityChanged:)
name: @"UIDeviceProximityStateDidChangeNotification"
object: device]; …
- (void) proximityChanged: (NSNotification *)note {
UIDevice *device = [note object];
NSLog(@"In proximity: %i", device.proximityState);
}
39
Accelerometer
•
•
•
•
Range is [-0.5, 0.5]
Declare a class
Start accelerometer
Take measurements
40
Accelerometer (cont.)
@interface AccelController:
UIViewController<UIAccelerometerDelegate> {
UIAccelerometer *accelerometer;
}
@end
//start
- (void)viewDidLoad {
accelerometer = [UIAccelerometer sharedAccelerometer];
accelerometer.updateInterval = 0.1;
accelerometer.delegate = self;
[super viewDidLoad];
}
41
Accelerometer (cont.)
- (void)accelerometer:(UIAccelerometer *)meter
didAccelerate:(UIAcceleration *)acceleration {
float x = acceleration.x;
float y = acceleration.y;
float z = acceleration.z;
float angle = atan2(y, x);
...
}
42
Magnetometer
• Core location, but available only for 3GS
LocationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
if( locationManager.locationServicesEnabled &&
locationManager.headingAvailable) {
[locationManager startUpdatingLocation];
[locationManager startUpdatingHeading];
} else {
...
}
43
Magnetometer (Delegate)
- (void)locationManager:(CLLocationManager *) manager
didUpdateHeading:(CLHeading *) newHeading {
if (newHeading.headingAccuracy > 0) {
CLLocationDirection theHeading =
newHeading.magneticHeading;
...
}
}
//to show calibration panel
-(BOOL)locationManagerShouldDisplayHeadingCalibration:
(CLLocationManager *)manager {
return YES;
}
44
GPS
• Core location
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
if( locationManager.locationServicesEnabled ) {
[locationManager startUpdatingLocation];
} else {
...}
locationManager.desiredAccuracy = kCLLocationAccuracyKilometer;
45
GPS (Delegate methods)
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation: (CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation{
if( newLocation != oldLocation ) {…}
}
- (void)locationManager:(CLLocationManager *)manager
didFailWithError: (NSError *)error {…}
46
Making calls, Emails, and SMS
• Calls, emails, and SMS are treated like URL
services (UIApplication.sharedApplication)
[[UIApplication sharedApplication] openURL:
[NSURL URLWithString:@"tel://123-456-7890"]];
[[UIApplication sharedApplication] openURL:[NSURL
URLWithString:@"mailto:emailAdress?subject=testMail
&body=its test mail."]];
[[UIApplication sharedApplication] openURL:[NSURL
URLWithString:@"sms:111"]];
47
App Examples
•
•
•
•
Battery monitor
LocateMe
WhichWayIsUp
Accerlerometer
48
References
• http://developer.apple.com/iphone
• http://www.learningiphoneprogramming.
com/
• http://mobiforge.com/developing/story/d
eploying-iphone-apps-real-devices
• http://www.wikipedia.org
49
Questions
50
Download