Thursday, April 23, 2009 at 10:17 PM | 0 comments  
Here's an article I found on CVS.

CVS
Posted by JP
Monday, April 13, 2009 at 11:59 PM | 0 comments  
Sample Curriculum 3 was revised a little bit.

Here's version 4.
Posted by JP
Wednesday, April 8, 2009 at 10:12 PM | 0 comments  
My third attempt at a curriculum is up.

Here
Posted by JP
Monday, March 30, 2009 at 1:32 PM | 0 comments  
If you want to do web stuff on your IPhone, like getting files from somewhere, use NSURL

Reference

Here's a document on URL loading for http downloading.

Here
Posted by JP
Thursday, March 26, 2009 at 1:34 PM | 0 comments  
Posted by JP
Wednesday, March 25, 2009 at 5:32 PM | 0 comments  
Take a look at what there is so far:
Video 1
Posted by JP
Tuesday, March 24, 2009 at 10:39 PM | 0 comments  
For someone whose first language isn't Objective-C, it's also good to know the difference between forward declarations (using @class) and #import

Tutorial
Posted by JP
A lot of Objective-C you can pick up as you go along doing IPhone development, but there are several things that are a lot different than in other languages like java.

Check out a tutorial here:
Tutorial
Posted by JP
For my current project I needed a way to add a navigation bar to a tab bar. I know how to do a tab bar by itself and a navigation bar by itself and wasn't sure how to do them together. I stumbled across a video on the iphone development forums that cleared things up a bit.

Click Here for Video
Posted by JP
Thursday, March 19, 2009 at 2:36 PM | 0 comments  
New Features!

Check out some of the new features in the new SDK. One that I'm very excited about is the ability to access your IPhone music library which means we can have apps that do things like play songs depending on your running tempo, or even have power hour plugins.
Posted by JP
Wednesday, March 18, 2009 at 11:57 AM | 0 comments  
Here's my first attempt that putting a curriculum together:

Sample Curriculum 1

I. Introduction to IPhone Development

a. Getting Started (page 2)
1) Intel based Mac running Leopard
2) IPhone SDK
3) IPhone

b. Objective-C (page 5)
1) Pick it up as you go along
2) Objective-C resources

c. Limitations of the IPhone (page 6)
1) What you can and cannot do
2) Important programming practices

d. Setting up a project (page 11)
1) Tour of the development environment
2) Interface builder

II. Model View Controller Paradigm

a. Introduction to MVC (page 30)

b. Basic User Interaction (page 31)
1) Chapter Tutorial

c. More User Interaction (page 53)
1) Chapter Tutorial

d. Multiview Applications (page 113)
1) Chapter Tutorial

e. Tab Bars (page 139)
1) Chapter Tutorial

* Temperature Conversion Assignment

f. Table Views (page 185)
1) Chapter Tutorial

g. Navigation Bar (page 231)
1) Chapter Tutorial

III. Data Persistence

a. Application Settings (page 303)
1) Chapter Tutorial

b. Basic Data Persistence (page 329)
1) Plist Tutorial
2) Archiving Tutorial
3) SQLite Tutorial

IV. Features

a. Animation (page 361)
1) Quartz Tutorial
2) OpenGL Tutorial

b. Accelerometer (page 441)
1) Tutorial

*Etch-a-Sketch Assignment

c. GPS (page 429)
1) Tutorial

d. Camera (page 463)
1) Tutorial

e. Autorotation and Autosizing (page 89)
1) Tutorial

f. Taps, Touches, and Gestures (page 401)
1) Tutorial

*Final Project

V. The Development Process

a. Planning your Application

b. Application Tuning

c. Application Testing

d. Application Publishing
Posted by JP
Monday, March 2, 2009 at 3:16 PM | 0 comments  
Here are some tips I picked up while trying to create some of my own projects.

1) To access the application delegate class do this:

YourAppDelegate *appDelegate = (YourAppDelegate *)[[UIApplication sharedApplication] delegate];

Then you can access objects from that class.

2) When using TextFields/TextViews you'll want to conform to the UITextFieldDelegate and UITextViewDelegate protocols. That way when you are done typing in either field you can hide the keyboard with the following code:

-(BOOL)textFieldShouldReturn:(UITextField *)theTextField
{
  if(theTextField == textField)
  {
     [textField resignFirstResponder];
  }
  return YES;
}

-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
  if([text isEqualToString:@"\n"])
  {
    [self.textView resignFirstResponder];
    return NO;
  }
  return YES;
}

3) It's possible to detect when a tab bar controller switches tabs. This is done by specifying a delegate of the tab bar controller, similar to specifying the delegate of the text field. Implement the tab bar controller delegate protocol. Set an object that you want to be the delegate for the tab bar controller, and in that class implement this method:

(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
Posted by JP
Thursday, February 26, 2009 at 2:58 PM | 0 comments  
My last summaries were mainly about broader topics. The things that I've covered recently are cool features so here is a summary of the features I've covered:

4. Features
  • Animation
  • Touches
  • Accelerometer
  • Location
  • Camera
Posted by JP
The last chapter that I covered before the completion of this book was on using the camera. One of the IPhone's main limitations is that you are generally restricted to your own application's "sandbox" meaning that you can not access things outside of your own data. The camera is an exception to this. An application can not only access your camera, but can also access your library. In a simple application that I made through following the tutorial, you can either take a picture with your camera, or choose a picture from your library and it will display it on the screen. It is a very simple application that allows you to see how this works.
Posted by JP
Another awesomely cool feature of the IPhone and IPod Touch is the built in accelerometer which can detect when the device is moving. The accelerometer is a 3-dimensional one in that it can detect movement in any direction. This lends to some interesting applications including ones that sense whether the IPhone is being shook (maybe to erase a drawing in a paint program) or tilted (to steer a car in a racing program) among others. Luckily, it's very simple to use. I followed two tutorials from this chapter. One detects if the device is being shook and makes a breaking glass sound and shows a picture of a broken screen. The other simulates the rolling of a marble depending on how you tilt your screen. Both are very cool. I've uploaded the sample code.



Posted by JP
Tuesday, February 24, 2009 at 5:27 PM | 0 comments  
I finally got to learn how to use the Location functionality of the IPhone. The IPhone can determine your location via GPS, cell phone triangulation, or WIFI. It will automatically use whatever is available. It is fairly accurate within 10 meters. It will drain your battery however if you are constantly polling for location so make sure to be careful about polling. It was very easy to use the Location API as most of the work is done for you. This opens up many new possibilities for application ideas.


Posted by JP
I just got through a relatively short chapter on touches/taps/gestures. The IPhone can recognize up to 5 fingers touching the screen at once and can figure out how many consecutive taps one finger is doing. You can also program the IPhone to recognize certain gestures. In one of the tutorials I was able to get the IPhone to recognize a checkmark gesture. The code is uploaded.




Posted by JP
Sunday, February 22, 2009 at 12:07 PM | 0 comments  
I finally got to start doing animation! There are two main ways to do animation. The first is using Quartz and the second is with OpenGL-ES. Quartz is really simple to use and with it you can easily create 2-D animations. OpenGL-ES is for 2-D and 3-D animations and is much more powerful and much more difficult to use than Quartz. It takes advantage of various hardware acceleration mechanisms to draw things efficiently unlike Quartz. For this tutorial I made a paint application using both Quartz and OpenGL-ES. Using Quartz was much simpler for this application. Without prior knowledge of how OpenGL works, beginners might want to stick with Quartz for their 2-D creations.
Posted by JP
I finished the chapter on data persistence. Being able to save application data is very important for applications that require things to be saved between different runs of the application. There are three main ways of persisting data; property lists, archiving, and SQLite3.

Property lists are really easy and convenient but only work for serializable objects that can be put into a dictionary or array. You can't put custom classes into property lists though.

Archiving allows you to write any objects to files as long as you specify how it will be done by supporting certain protocols.

SQLite3 is the IPhone's version of SQL. It is for storing large amounts of data in a database. This requires knowledge of the SQL language. I didn't do much with this because this book doesn't talk too much about SQL.
Posted by JP
Tuesday, February 17, 2009 at 2:34 PM | 0 comments  
Here's a continuation of my last summary to help tie things together into a curriculum idea.

2. Model View Controller (continued)
  • Navigation Bar --> tables, Nav application
  • Auto rotation --> show how to use this
3. Data Persistence
  • Settings --> AppSettings
  • Property Lists
  • Archiving
  • SQLite3
Posted by JP