Updated Version of Course

An updated version of this couse including newer topics (e.g. iPad, iOS 4.x, etc.) is being offering during the Fall 2010 semester.

The updated course materials can be found at: cs491f10.wordpress.com

Final Project — Presentation & Demonstration

Due Date (for Slide Submission)

Wednesday, December 16th — 11:59pm


Final project presentations and live demonstrations will occur during the time allotted for the final exam (Thursday, December 17th 6–8pm). Each group will be scheduled a 4 minute chunk of time for their presentation and demonstration. This 4 minute time limit will be strictly enforced. The specific order of presenters will be determined next class.

Your presentation should consist of a minute or so of slides which present an introduction to your application, followed by an actual live demonstration of your app.

Your slides must be in PDF format and should contain the following content…

  • Title slide — consisting of app icon, app name and team member names
  • App Description slide — a one slide overview of your application
  • Frameworks and Libraries slide — a one slide that lists frameworks or libraries used by the app and mentions what they were used for
  • Backup Demo Slides — in the event that something fails during your live demo, you should have screen captures that are capable of being used as backup

Your demonstration should highlight the key features of your application. You are strongly encouraged to rehearse your demonstration ahead of time.

Demo Information

I will be building and installing all apps into the iPhone Simulator on my laptop for the demonstration. To ensure a smooth demo, I recommend the following…

  • When testing your app, I would strongly suggest that you remove your app from the simulator and try a fresh install before submitting to avoid any issues caused by (lack of) residual artifacts.
  • Perform a dry run on the demo hardware — I will be holding special office hours Tuesday, December 15th 5:30–7:00pm where you can stop by and do a dry run on the actual machine that will be used for the demos.

If your app requires features that are not supported on the simulator (such as camera, accelerometer, etc.) email me as soon as possible so we can make the necessary accommodations.


To submit your slides, open up a terminal, navigate to the directory containing your slides then issue the command:

submit cs491i final-slides slides.pdf

Final Project — Mock App Store Submission

Due Date

Tuesday, December 15th — 11:59pm


If you were publishing an application on the App Store, you would need to provide information about your app for submission. To simulate that experience, you will prepare a “mock App Store” submission.

For this write up I’ve provided a zip file which you must use as a template for writing up the details of your app. This zipfile includes an HTML file that when viewed in a web browser displays a page similar to that on the App Store.

Specifically you must edit the following in index.html:

  • Copy your app’s icon (a 57x57px PNG file) into the directory and update the app icon’s image tag to show your icon. Note, you needn’t try to apply Apple’s rounding, beveling, or highlighting — I have a script that will generate the rounded version as seen in the simulator, including honoring the “Icon already includes gloss and bevel effects” flag.
  • Update the HTML to include your app’s name.
  • Update the HTML to include your name(s).
  • Update the Apple Frameworks Used list to include all frameworks imported by your app.
  • Update the Third Party Libraries Used list to include all libraries used by your app. If you aren’t using any third party libraries or classes, you may remove this section.
  • Replace the sample description text with your own app’s description. Do not use any special HTML or emoji within the paragraphs. If your app requires features found on certain devices (i.e. a camera) state so in the description. Do not include testimonials or reviews like you may see in some descriptions.
  • Include up to 5 screenshots (must be 320x480px or 480x320px PNGs) and captions from your app.

All “Mock App Store” submissions will be aggregated and posted on the course blog prior to the final presentations.

To get a feel for the content provided in app descriptions, I encourage you to take a look at apps that are on the store. Some of the more popular apps that I feel have pretty good descriptions are included below:


Once you’ve made the changes to the provided HTML file and swapped out the sample icon and images with your own package it up by zipping up the entire directory.

To submit your mock app store submission, open up a terminal, navigate to your zip file then issue the command:

submit cs491i final-appstore appstore.zip

Final Project — Source Code Submission

Due Date

Monday, December 14th — 11:59pm

Grading Criteria

Grading criteria for the final project will be based on the criteria from the week-long assignments…

  • Correctness of application
  • Appearance of application
  • Adherence to Objective-C and iPhone coding conventions
  • Neatly formatted and indented code
  • Well documented header files
  • Absence of significant performance issues
  • Absence of memory leaks

…as well as…

  • Scope — Is the app sufficiently complex? Does it deliver what was proposed?
  • Polish — How polished is the app? Does it have a launch screen image? Does it have an app icon? Is the app appropriately named? Is the user experience well thought out?
  • Interesting, novelty and uniqueness — Is the app interesting, or is it just a remake of an already existing app? What’s the overall coolness factor?
  • Required Elements — Does it contain multiple views? Does it persist some form of data?
  • Suggested Elements — Does it contain sound effects? Does it contain animation?


Like all of the week-long projects this semester, you will need to submit your source code and necessary resources for grading. You should remove your build directory and zip up the directory containing your Xcode project.

To submit your final project source code, open up a terminal, navigate to your zip file then issue the command:

submit cs491i final-code project.zip

Assignment 8 — Redrawing the View

I’ve had several people email me with issues redrawing the board on touch events. Since this seems to be a semi-common problem, I thought I’d take a moment to address it here.

The problem is likely caused by not all of the draw code being executed. If you take a look at the GLView class’s drawView method, you’ll see that there’s some code before and after the call to the delegate’s (the view controller) drawView: method. It is this code that actually does the screen refresh.

- (void)drawView {
  glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
  [delegate drawView:self];
  glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
  [context presentRenderbuffer:GL_RENDERBUFFER_OES];

So, by simply calling the view controller’s drawView: method the screen refresh doesn’t happen. To ensure this code gets called, instead of invoking the view controller’s drawRect: method simply invoke the GLView’s (the view controllers view property) drawRect method like so…

[(GLView *)self.view drawView];

iPhone Development Internships with Mindgrub Technologies

I was recently contacted by Mindgrub Technologies about several iPhone (and BlackBerry) development internship positions they have available. They’re looking for 3-5 students for 2-3 day a week part-time positions. Additional details below…


Mindgrub seeks Computer Science students proficient in C/C++ or Java to help with developing iPhone and Blackberry Apps for various client projects. Candidates should be able to work independently and as part of a team. Object oriented programming and flexibility to move from project to project as needed a major plus!! Other skills such as JavaScript and CSS know-how also a plus, but not a must.

  • Position: Part-time internship
  • Location: Baltimore, MD
  • Rate: $9-$12/Hr.

You can get additional information about Mindgrub on their website at: mindgrub.com.

Email résumés to jobs@mindgrub.com for consideration.

Assignment 6 — Adding the MapKit Framework

I thought I’d take a moment to post about a problem a couple of people have been having. If you’re getting the following error, it is probably the result of not having added the MapKit framework…

*** Terminating app due to uncaught exception ‘NSInvalidUnarchiveOperationException’, reason: ‘*** -[NSKeyedUnarchiver decodeObjectForKey:]: cannot decode object of class (MKMapView)’

Under Xcode 3.2 (the screenshots in the notes) MapKit is pre-populated in the Add → Existing Frameworks… dialog and simply requires selecting MapKit from the list. However under Xcode 3.1 you have to do a bit more work. Follow the steps below for adding MapKit to your project if you haven’t done so already…

1) Open Finder and browse to /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/System/Library/Frameworks as shown below (you may need to adjust the path a little if using a SDK newer than 3.0 with Xcode 3.1)…

Finder Window

Finder Window

2) Select the MapKit.framework fold and drag-and-drop it into the root of your Xcode project as shown below…

DnD Framework into Xcode

DnD Framework into Xcode

3) You should uncheck the box that states “Copy items into destination group’s folder (if needed)”, and press Add…

Copy Dialog

Copy Dialog

4) The MapKit framework should now appear under your project with the rest of the frameworks and your app should now contain the necessary MapKit libraries to run.

The Added Framework

The Added Framework