500 likes | 690 Views
iPhone – Walkthrough. By: Hector M Lugo-Cordero, MS Saad A Khan, MS EEL 6788. Agenda. History What you will need Model View Controller Objective-C Develop with XCode and Interface Builder Using the Sensors App Examples References. History.
E N D
iPhone – Walkthrough By: Hector M Lugo-Cordero, MS Saad A Khan, MS EEL 6788
Agenda • History • What you will need • Model View Controller • Objective-C • Develop with XCode and Interface Builder • Using the Sensors • App Examples • References
History • Emerges as a device which provides multimedia, Internet access, and smartphone • Collaboration with Cingular Wireless (now AT&T)
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)
What you will need • MAC computer • IPhone SDK • Xcode • Interface Builder • To test • Xcode build in simulator • IPhone and Apple’s developer license
iPhone Developer (Phone ID) In Xcode select: Window > Organizer
iPhone Developer (Certificate) Keychain Access (Applications Utilities) Select 2048 bits and RSA (after continue) Save to disk (remember location)
iPhone Developer (Assistant) Login to http://developer.apple.com/iphone, enter developer portal Launch Assistant
iPhone Developer (Key Inserts) Identify the app, phone, and enter phone ID (previously acquired with organizer)
iPhone Developer(Install Certificate) • Generate certificate from file generated by Keychain Access • After download the profile and certificate • Install on Xcode by dragging it
iPhone Developer (Deploy) • Select target device • Organizer allows to take screen shots • Console included
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)
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
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
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)
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
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]
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;
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]; }
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: Removing objects: Retain Release Alloc Autorelease Init Dealloc Copy
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
Objective-C (Autorelease example) • - (NSString *)fullName { NSString *result; result = [[NSString alloc] initWithFormat:@“%@ %@”, firstName, lastName]; return result; } [result release]; [result autorelease]; Memory leakage Returns nil OK
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)
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)
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; }
XCode • Replaced Project Builder • Organizes files • Includes an editor • Multiple testing targets • Useful for iPhone, MAC • Red link (app not build)
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
Using the sensors • Camera • Microphone • Proximity • Accelerometer • Magnetometer • GPS • Making calls • Sending messages
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;
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]);
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); }
Accelerometer • Range is [-0.5, 0.5] • Declare a class • Start accelerometer • Take measurements
Accelerometer (cont.) @interface AccelController: UIViewController<UIAccelerometerDelegate> { UIAccelerometer *accelerometer; } @end //start - (void)viewDidLoad { accelerometer = [UIAccelerometer sharedAccelerometer]; accelerometer.updateInterval = 0.1; accelerometer.delegate = self; [super viewDidLoad]; }
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); ... }
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 { ... }
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; }
GPS • Core location locationManager = [[CLLocationManager alloc] init]; locationManager.delegate = self; if( locationManager.locationServicesEnabled ) { [locationManager startUpdatingLocation]; } else { ...} locationManager.desiredAccuracy = kCLLocationAccuracyKilometer;
GPS (Delegate methods) - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation: (CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{ if( newLocation != oldLocation ) {…} } - (void)locationManager:(CLLocationManager *)manager didFailWithError: (NSError *)error {…}
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"]];
App Examples • Battery monitor • LocateMe • WhichWayIsUp • Accerlerometer
References • http://developer.apple.com/iphone • http://www.learningiphoneprogramming.com/ • http://mobiforge.com/developing/story/deploying-iphone-apps-real-devices • http://www.wikipedia.org