<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Planet iPhone SDK</title>
    <link>http://www.planetiphonesdk.com</link>
    <description>iPhone development news and information</description>
    <item>
      <title>Research On A “New Middle Class” Of Indie iPhone Game Developers</title>
      <link>http://feedproxy.google.com/~r/MobileOrchard/~3/-LfSUZAgNsg/</link>
      <description>&lt;div style=&quot;margin-top: 10px; margin-bottom: 10px; border: 2px solid #def; padding: 5px;&quot;&gt;&lt;img src=&quot;http://www.mobileorchard.com/wp-content/uploads/2009/08/gl.jpg&quot; align=&quot;left&quot;&gt;&lt;a href=&quot;http://feedproxy.google.com/opengl&quot;&gt;iPhone OpenGL Programming Workshop&lt;/a&gt;: Sept 26-27, Denver.&lt;br /&gt;
&lt;a href=&quot;http://360idev.com/&quot;&gt;360iDev Conference&lt;/a&gt; promotion: save $399 when you attend both!&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;http://www.mobileorchard.com/wp-content/uploads/2009/08/coalminer.jpg&quot; class=&quot;left&quot;&gt;&lt;/p&gt;
&lt;p&gt;In September, at the &lt;a href=&quot;http://360idev.com/&quot;&gt;360iDev Conference&lt;/a&gt;, I&amp;#8217;m giving a talk titled  &lt;a href=&quot;http://www.mobileorchard.com/speaking-at-360idev-on-developer-owned-iphone-businesses/&quot;&gt;Warm, Clothed and Fed: Developer Run iPhone Businesses&lt;/a&gt;.  &lt;/p&gt;
&lt;p&gt;A big part of the talk will be about where your money comes from in an iPhone business.  You can categorize iPhone businesses into three segments based on revenue sources: &lt;/p&gt;
&lt;p&gt;You can make money from (1) people purchasing your apps, (2) companies purchasing your time to create apps, or (3) developers purchasing your goodies to make making or selling apps easier.&lt;/p&gt;
&lt;p&gt;Peter Farago, of the mobile analytics firm &lt;a href=&quot;http://flurry.com&quot;&gt;Flurry&lt;/a&gt;, has released some data for the &lt;em&gt;game segment&lt;/em&gt; of the &lt;em&gt;people pay for your apps&lt;/em&gt; category of iPhone businesses in a post titled &lt;a href=&quot;http://blog.flurry.com/bid/24163/Rise-of-the-New-Middle-Class-Indie-iPhone-App-Developers-Part-I&quot;&gt;Rise of the New Middle Class: Indie iPhone App Developers&lt;/a&gt;.  &lt;/p&gt;
&lt;p&gt;The piece&amp;#8217;s central investigation is whether or not established game companies dominate the store.  There are two prongs to its thrust:   &lt;/p&gt;
&lt;p&gt;First, the article compares the composition of the top-25 games on the App Store as compared to the top-25 games in AT&amp;#038;T&amp;#8217;s broader market &amp;#8220;Media Mall.&amp;#8221;  The latter was dominated by EA, accounting for a 36% share of the pie; 9 other companies made up the remainder.  The former was more fragmented, with Gameloft commanding the largest share at 12% and 22 other publishers evenly splitting the remainder; notably absent: EA.&lt;/p&gt;
&lt;p&gt;Second, the article examines the headway indie developers have made, over time, entering the top-25.  Since September of last year, indie developers have had as many as 16 of the top-25 and have never had fewer than 11 of the spots.  Peter&amp;#8217;s post offerers evidence contrary to the common belief that indies are being squeezed from the App Store.&lt;/p&gt;
&lt;p&gt;Peter&amp;#8217;s article effectively makes the case that indies can be successful.  However, there&amp;#8217;s a bit of a Hollywood element to this kind of research.  Just as every actor dreams of being &lt;em&gt;a name&lt;/em&gt;, every game dev dreams of creating the &lt;em&gt;next big game&lt;/em&gt;.  &lt;/p&gt;
&lt;p&gt;Is there an iPhone version of the not-a-star working actor?  My as yet unsubstantiated hunch is that, in the game segment, the downward price pressure and typically long development cycles make this tough.  &lt;/p&gt;
&lt;p&gt;I&amp;#8217;ll be fleshing out the data to test this hypothesis for my talk, but for the moment let&amp;#8217;s assume it&amp;#8217;s true.  If it is, this either reducing game dev time or looking to other/non-game categories that can support a larger ticket.  There&amp;#8217;s a lot to say on both of those topics; I&amp;#8217;ll follow up in future posts and in my talk at 360iDev.&lt;/p&gt;
&lt;div style=&quot;font-size: 75%; margin-top: 1em&quot;&gt;Photo credit: &lt;a href=&quot;http://www.flickr.com/photos/albertof/1512912095/&quot;&gt;http://www.flickr.com/photos/albertof/1512912095/&lt;/a&gt;&lt;/div&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/MobileOrchard/~4/-LfSUZAgNsg&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
      <pubDate>Thu, 13 Aug 2009 10:43:03 -0700</pubDate>
      <dc:date>2009-08-13T10:43:03-07:00</dc:date>
    </item>
    <item>
      <title>Boot Camp Imminent</title>
      <link>http://iphonedevelopment.blogspot.com/2009/08/boot-camp-imminent.html</link>
      <description>Well, it's not just under 48 hours until I teach my first &lt;a href=&quot;http://iphonebootcampnyc.com/iPhone_Boot_Camp/Welcome.html&quot; target=&quot;_blank&quot;&gt;workshop&lt;/a&gt;. I'm a little harried right now. I'm comfortable teaching and speaking in front of groups, but I've never taught anything of this scope before, so I underestimated the prep time involved. I haven't slept much this week, and the situation doesn't look like it'll get much better before Friday.&lt;br /&gt;&lt;br /&gt;If you e-mail me, IM, or tweet me in the next few days, please don't be offended if you don't get a response. I will try to catch up after the weekend and will be responding only to urgent e-mails in the meantime. I'm going to be mostly shutting out the world in an effort to get everything done and make sure that I'm satisfied with the workshop materials.&lt;br /&gt;&lt;br /&gt;Despite the stress, I'm actually very happy with what I've gotten done so far. I think I'm really starting to understand what makes iPhone programming hard for both new programmers and experienced programmers coming from other languages. I guess we'll find out in a few days if I'm right about that, though.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;BR/&gt;&lt;font size=&quot;2&quot;&gt;&lt;center&gt;&amp;copy;2009 Jeff LaMarche. &lt;br/&gt;
http://iphonedevelopment.blogspot.com&lt;/center&gt;&lt;/font&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2947441758360063609-1726184598174090676?l=iphonedevelopment.blogspot.com'/&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 12 Aug 2009 07:29:00 -0700</pubDate>
      <dc:date>2009-08-12T07:29:00-07:00</dc:date>
    </item>
    <item>
      <title>Tutorial: Easy Audio Playback With AVAudioPlayer</title>
      <link>http://feedproxy.google.com/~r/MobileOrchard/~3/_COHenP2dMs/</link>
      <description>&lt;p&gt;&lt;img src=&quot;http://www.mobileorchard.com/wp-content/uploads/2009/08/reel.jpg&quot; class=&quot;left&quot;&gt;&lt;/p&gt;
&lt;p&gt;The iPhone SDK&amp;#8217;s AVFoundation framework includes AVAudioPlayer, an easy, feature rich, Objective-C based way of playing audio files.  &lt;/p&gt;
&lt;p&gt;This tutorial demonstrates how to use AVAudioPlayer.  When you’ve finished the tutorial you’ll have created a simple app that plays an MP3 audio file in a loop when the app starts.&lt;/p&gt;
&lt;h3&gt;Source/Github&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;http://github.com/dcgrigsby/AudioPlayer&quot;&gt;code for this tutorial&lt;/a&gt; is available on GitHub.  You can either clone the repository or download &lt;a href=&quot;http://github.com/dcgrigsby/AudioPlayer/zipball/master&quot;&gt;this zip&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Creating The Project&lt;/h3&gt;
&lt;p&gt;Launch Xcode and create a new View-Based iPhone application called AudioPlayer:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol style=&quot;font-size: 90%&quot;&gt;
&lt;li&gt;Create a new project using &lt;em&gt;File &amp;gt; New Project&amp;#8230;&lt;/em&gt; from Xcode&amp;#8217;s menu&lt;/li&gt;
&lt;li&gt;Select &lt;em&gt;View-based Application&lt;/em&gt; from the &lt;em&gt;iPhone OS &amp;gt; Application&lt;/em&gt; section, click &lt;em&gt;Choose&amp;#8230;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Name the project as &lt;em&gt;AudioPlayer&lt;/em&gt; and click &lt;em&gt;Save&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Adding The AVFoundation Framework&lt;/h3&gt;
&lt;p&gt;In order to use the SDK&amp;#8217;s AVAudioPlayer class, we&amp;#8217;ll need to add the AVFoundation framework to the project:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol style=&quot;font-size: 90%&quot;&gt;
&lt;li&gt;Expand the &lt;em&gt;Targets&lt;/em&gt; branch in the &lt;em&gt;Groups &amp;#038; Files&lt;/em&gt; panel of the project&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Control-click or right-click the &lt;em&gt;AudioPlayer&lt;/em&gt; item&lt;/li&gt;
&lt;li&gt;Choose &lt;em&gt;Add &gt; Existing Frameworks&amp;#8230;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Click the &lt;em&gt;+&lt;/em&gt; button at the bottom left beneath &lt;em&gt;Linked Libraries&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Choose &lt;em&gt;AVFoundation.framework&lt;/em&gt; and click &lt;em&gt;Add&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;AVFoundation.framework&lt;/em&gt; will now be listed under &lt;em&gt;Linked Libraries&lt;/em&gt;.  Close the window&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;Next, we&amp;#8217;ll import the AVFoundation headers in our view controller&amp;#8217;s interface file and set up an AVAudioPlayer instance variable:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol style=&quot;font-size: 90%&quot;&gt;
&lt;li&gt;Expand the &lt;em&gt;AudioPlayer&lt;/em&gt; project branch in the &lt;em&gt;Groups &amp;#038; Files&lt;/em&gt; panel of the project&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Expand the  &lt;em&gt;Classes&lt;/em&gt; folder&lt;/li&gt;
&lt;li&gt;Edit &lt;em&gt;AudioPlayerViewController.h&lt;/em&gt; by selecting it
&lt;li&gt;Update the file.  Changes are bold:&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;
&lt;pre&gt;
#import &amp;lt;UIKit/UIKit.h&amp;gt;
&lt;b&gt;#import &amp;lt;AVFoundation/AVFoundation.h&amp;gt;&lt;/b&gt;

@interface AudioPlayerViewController : UIViewController {
	&lt;b&gt;AVAudioPlayer *audioPlayer;&lt;/b&gt;
}

@end
&lt;/pre&gt;
&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Adding An Audio File&lt;/h3&gt;
&lt;p&gt;We&amp;#8217;ll need an audio file for playback.   We&amp;#8217;ll, unimaginatively, call the fille &lt;em&gt;audiofile.mp3&lt;/em&gt;.  Add it to the project:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol style=&quot;font-size: 90%&quot;&gt;
&lt;li&gt;Control-click or right click on the &lt;em&gt;Resources&lt;/em&gt; folder in the &lt;em&gt;Groups &amp;#038; Files&lt;/em&gt; panel of the project&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Select &lt;em&gt;Add &gt; Existing Files&amp;#8230;&lt;/em&gt; from the context menu&lt;/li&gt;
&lt;li&gt;Locate and select the file for import and click &lt;em&gt;Add&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Check the &lt;em&gt;Copy items into destination group&amp;#8217;s folder (if needed)&lt;/em&gt; box and click &lt;em&gt;Add&lt;/em&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Starting Audio Playback&lt;/h3&gt;
&lt;p&gt;We&amp;#8217;ll start the audio playback in ViewDidLoad:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol style=&quot;font-size: 90%&quot;&gt;
&lt;li&gt;Uncomment the boilerplate &lt;em&gt;ViewDidLoad&lt;/em&gt; method&lt;/li&gt;
&lt;li&gt;Update it as follows.  Changes are bold:&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;
&lt;pre&gt;
- (void)viewDidLoad {
	[super viewDidLoad];&lt;b&gt;

	NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@&quot;%@/audiofile.mp3&quot;, [[NSBundle mainBundle] resourcePath]]];

	NSError *error;
	audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&amp;#038;error];
	audioPlayer.numberOfLoops = -1;

	if (audioPlayer == nil)
		NSLog([error description]);
	else
		[audioPlayer play];

&lt;/b&gt;}
&lt;/pre&gt;
&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;AVAudioPlayer is initialized with a URL, so we create one whose path points to the audio file in our on-the-phone resources directory.  Setting the audio player&amp;#8217;s &lt;code&gt;numberOfLoops&lt;/code&gt; property to a negative number causes it to loop indefinitely.   After configuring the player, we start the playback by sending the &lt;code&gt;play&lt;/code&gt; message to the object.&lt;/p&gt;
&lt;p&gt;Remember to release the audioPlayer in &lt;code&gt;dealloc&lt;/code&gt;.  Changes are bold:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;pre&gt;
- (void)dealloc {
	&lt;b&gt;[audioPlayer release];&lt;/b&gt;
	[super dealloc];
}
&lt;/pre&gt;
&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;More Capabilities&lt;/h3&gt;
&lt;p&gt;You can adjust the volume of the player, check/set the time played so far and pause or stop playback:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;pre&gt;
audioPlayer.volume = 0.5; // 0.0 - no volume; 1.0 full volume
NSLog(@&quot;%f seconds played so far&quot;, audioPlayer.currentTime);
audioPlayer.currentTime = 10; // jump to the 10 second mark
[audioPlayer pause];
[audioPlayer stop]; // Does not reset currentTime; sending play resumes
&lt;/pre&gt;
&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Finally, you can implement the &lt;code&gt;AVAudioPlayerDelegate&lt;/code&gt; protocol to, among other things, be notified when audio finishes playing &amp;#8212; perhaps to move onto the next song in a playlist.&lt;/p&gt;
&lt;div style=&quot;font-size: 75%; margin-top: 1em&quot;&gt;Photo credit: &lt;a href=&quot;http://www.flickr.com/photos/mattblaze/2695044170/&quot;&gt;http://www.flickr.com/photos/mattblaze/2695044170/&lt;/a&gt;&lt;/div&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/MobileOrchard/~4/_COHenP2dMs&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
      <pubDate>Tue, 11 Aug 2009 12:02:18 -0700</pubDate>
      <dc:date>2009-08-11T12:02:18-07:00</dc:date>
    </item>
    <item>
      <title>OpenGL ES Update</title>
      <link>http://iphonedevelopment.blogspot.com/2009/08/opengl-es-update.html</link>
      <description>I know there's probably one or two people out there who would like to see another entry in the &lt;a href=&quot;http://iphonedevelopment.blogspot.com/2009/05/opengl-es-from-ground-up-table-of.html&quot; target=&quot;_blank&quot;&gt;OpenGL ES from the Ground Up&lt;/a&gt; series. &lt;br /&gt;&lt;br /&gt;The good news is, I started one a while back, right after WWDC. It's a fairly extensive introduction to OpenGL ES 2.0 and shaders.&lt;br /&gt;&lt;br /&gt;The bad news is, I have no idea when I'll have time to finish it. I'm behind on writing the next book, plus I'm frantically trying to get ready for the iPhone Boot Camp NYC this weekend (boy, that snuck up on me). I will finish it at some point, though.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;BR/&gt;&lt;font size=&quot;2&quot;&gt;&lt;center&gt;&amp;copy;2009 Jeff LaMarche. &lt;br/&gt;
http://iphonedevelopment.blogspot.com&lt;/center&gt;&lt;/font&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2947441758360063609-7612272510881498541?l=iphonedevelopment.blogspot.com'/&gt;&lt;/div&gt;</description>
      <pubDate>Mon, 10 Aug 2009 18:50:00 -0700</pubDate>
      <dc:date>2009-08-10T18:50:00-07:00</dc:date>
    </item>
    <item>
      <title>Simulator: Quick Launch, Easy Video Recording. Device: Hardware Goodies. iSimulate: A Compromise</title>
      <link>http://feedproxy.google.com/~r/MobileOrchard/~3/2jeVIWXMLNw/</link>
      <description>&lt;p&gt;&lt;img src=&quot;http://www.mobileorchard.com/wp-content/uploads/2009/08/isimulate.jpg&quot; class=&quot;left&quot;&gt;&lt;/p&gt;
&lt;p&gt;There are a lot of reasons to use the iPhone simulator and a few reasons not to.  &lt;/p&gt;
&lt;p&gt;During development, I like to see my changes in the app ASAP; I use the simulator because waiting while a build is pushed to a device interrupts &lt;a href=&quot;http://en.wikipedia.org/wiki/Flow_(psychology)&quot;&gt;flow&lt;/a&gt;.  Later, when it&amp;#8217;s time to create an app screencast, it&amp;#8217;s a darn sight easier to use the simulator too.&lt;/p&gt;
&lt;p&gt;Of course, the simulator isn&amp;#8217;t perfect. Testing performance and tracking elusive memory leaks are best done on the device.  And the simulator&amp;#8217;s support of multi-touch, location and accelerometer is thin to non-existent.  &lt;/p&gt;
&lt;p&gt;This last set of limitations makes it tough for me to use the simulator precisely when I want to: during development and for screencasts.  This is where &lt;a href=&quot;http://www.vimov.com/isimulate&quot;&gt;iSimulate&lt;/a&gt; comes in.&lt;/p&gt;
&lt;p&gt;iSimulate is an iPhone app and library intended for iPhone app developers.  With it, you run your app in the simulator and but take multi-touch, accelerometer and Core Location capabilities from an actual iPhone.  &lt;/p&gt;
&lt;p&gt;I was skeptical of iSimulate&amp;#8217;s PR pitch that it &amp;#8220;takes literally 2 minutes to get it running on an application.&amp;#8221;  Having now used it with Apple&amp;#8217;s &lt;a href=&quot;http://developer.apple.com/iphone/prerelease/library/samplecode/AccelerometerGraph/index.html&quot;&gt;AccelerometerGraph&lt;/a&gt; and &lt;a href=&quot;http://developer.apple.com/iphone/prerelease/library/samplecode/Touches/index.html&quot;&gt;Touches&lt;/a&gt; sample apps, as well as one of my own apps, I can confirm that it really only does take a couple of minutes to set up:&lt;/p&gt;
&lt;p&gt;To use it, you add their library to your project, include Core Location (if it&amp;#8217;s not already part of the project), add a linker flag, launch their app on your phone and launch the app in the simulator.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;d like to see them make a couple of enhancements to the on-phone app:&lt;/p&gt;
&lt;p&gt;First, the on-phone app is arranged in a landscape orientation, so my natural tendency is to hold the phone in this orientation.  If my app runs in portrait mode &amp;#8212; as most do &amp;#8212; the touches are rotated by 90-degrees.  Of course I should just hold the phone in portrait mode.  Nevertheless, I&amp;#8217;d like the phone app to have the same orientation as what&amp;#8217;s displayed in the similator.&lt;/p&gt;
&lt;p&gt;Second, it&amp;#8217;s difficult to aim.  When I put a finger down it&amp;#8217;s never exactly on the target I was aiming for.  This lowers the production quality of screencasts.  It&amp;#8217;d be nice if the on-phone app mirrored the simulator&amp;#8217;s display, even at a low frame rate.&lt;/p&gt;
&lt;p&gt;That said, it&amp;#8217;s a dandy application and works as advertised.  Details, documentation and pricing information &lt;a href=&quot;http://www.vimov.com/isimulate&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/MobileOrchard/~4/2jeVIWXMLNw&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
      <pubDate>Mon, 10 Aug 2009 09:14:52 -0700</pubDate>
      <dc:date>2009-08-10T09:14:52-07:00</dc:date>
    </item>
    <item>
      <title>My Last Word on Dot Notation</title>
      <link>http://iphonedevelopment.blogspot.com/2009/08/my-last-word-on-dot-notation.html</link>
      <description>The dot notation discussion has taken far more of my time lately than it was wise for me to spend. I've said pretty much all that I need to say on the topic at this point. I don't care if you use it, just don't tell me I'm wrong for doing so. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Just for the record&lt;/b&gt;, I was horribly opposed to Objective-C's dot notation when it first came on the scene. i had programmed in both C++ and Java over the years, but I much preferred Objective-C, and I saw dot notation as being a step backwards and a really bad idea for a number of reasons.&lt;br /&gt;&lt;br /&gt;For the book, Dave and I decided we were going to follow Apple's lead when it came to coding style and coding conventions, so I bit the bullet and started using properties for the book exercises. Now that I've used them regularly for about a year and a half, I have completely changed my opinion, and I'm pretty sure a lot of my original issues with dot notation were just rationalizations of my own resistance to change.&lt;br /&gt;&lt;br /&gt;Arguing theory has only so much merit. In practice, with a little thought and understanding, properties and dot notation work well and can be used to make code considerably more readable and faster to write. If you haven't spent some real quality time using them - if you are arguing only from language theory - then you need to spend some time with them before you condemn them further.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;BR/&gt;&lt;font size=&quot;2&quot;&gt;&lt;center&gt;&amp;copy;2009 Jeff LaMarche. &lt;br/&gt;
http://iphonedevelopment.blogspot.com&lt;/center&gt;&lt;/font&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2947441758360063609-2915748027787496425?l=iphonedevelopment.blogspot.com'/&gt;&lt;/div&gt;</description>
      <pubDate>Mon, 10 Aug 2009 07:09:00 -0700</pubDate>
      <dc:date>2009-08-10T07:09:00-07:00</dc:date>
    </item>
    <item>
      <title>How to Use Dot Notation and Properties</title>
      <link>http://iphonedevelopment.blogspot.com/2009/08/how-to-use-dot-notation-and-properties.html</link>
      <description>Since we're talking so much about dot notation, I though I should link to a &lt;a href=&quot;http://eschatologist.net/blog/?p=160&quot; target=&quot;_blank&quot;&gt;fabulously awesome blog post by Chris Hanson&lt;/a&gt; that tells how you should use dot notation and properties.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;BR/&gt;&lt;font size=&quot;2&quot;&gt;&lt;center&gt;&amp;copy;2009 Jeff LaMarche. &lt;br/&gt;
http://iphonedevelopment.blogspot.com&lt;/center&gt;&lt;/font&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2947441758360063609-7131612023605987680?l=iphonedevelopment.blogspot.com'/&gt;&lt;/div&gt;</description>
      <pubDate>Sun, 09 Aug 2009 14:31:00 -0700</pubDate>
      <dc:date>2009-08-09T14:31:00-07:00</dc:date>
    </item>
    <item>
      <title>Dot Notation Redux: Google's Style Guide</title>
      <link>http://iphonedevelopment.blogspot.com/2009/08/dot-notation-redux-google-style-guide.html</link>
      <description>Before I get into this post, let me make a few things absolutely clear. I do not want my intentions misunderstood. &lt;br /&gt;&lt;ul&gt;&lt;li&gt;When coding for yourself, do what feels right to you. If you don't like dot notation, don't use it, and don't feel like you should apologize for not using it.&lt;/li&gt;&lt;li&gt;When coding for a client or employer who has a coding style guide or other published coding conventions, use those, even if they disagree with your personal opinion of the &quot;right&quot; way to code. In a group programming environment, consistency is extremely valuable.&lt;/li&gt;&lt;/ul&gt;My goal here is not to tell you that you must or should use dot notation, it is only to refute the idea that dot notation shouldn't have been added to the language and that it inherently makes code harder to read.&lt;br /&gt;&lt;br /&gt;My illustrious writing partner, &lt;a href=&quot;http://www.davemark.com/&quot; target=&quot;_blank&quot;&gt;Dave Mark&lt;/a&gt; tweeted today about the &lt;a href=&quot;http://google-styleguide.googlecode.com/svn/trunk/objcguide.xml&quot; target=&quot;_blank&quot;&gt;Google Objective-C Style Guide's argument against using dot notation in Objective-C&lt;/a&gt;, which reads as follows:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;&lt;ol&gt;&lt;li&gt;Dot notation is purely syntactic sugar for standard method calls,whose readability gains are debatable. It just gives you another way to make method calls.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;It obscures the type that you are dereferencing. When one sees:&lt;pre&gt;[foo setBar:1]&lt;/pre&gt; it is immediately clear that you are working with an Objective-C object. When one sees &lt;pre&gt;foo.bar = 1&lt;/pre&gt; it is not clear if foo is an object, or a struct/union/C++ class. &lt;br /&gt;&lt;/li&gt; &lt;li&gt;It allows you to do method calls that look like getters.&lt;br /&gt;            &lt;pre&gt;NSString *upperCase = @&quot;foo&quot;.uppercaseString;&lt;/pre&gt; which is not only confusing, but difficult to spot in a code review.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;It hides method calls.&lt;br /&gt;            &lt;pre&gt;bar.value += 10;&lt;/pre&gt;is actually two separate method calls (one to set and one to get) and if your properties are not simple you may find a lot of work being done in a hidden manner.&lt;/li&gt;&lt;/ol&gt;&lt;/i&gt;&lt;/blockquote&gt;As you read through these, they sound rather logical, and possibly even compelling. But in reality, they are not logical at all. In fact, the whole argument is basically one series of logical fallacies. Let's look at the specific arguments in order and then put the pieces together at the end.&lt;br /&gt;&lt;br /&gt;&lt;H3&gt;The First Argument: the Non Argument&lt;/H3&gt;&lt;blockquote&gt;&lt;i&gt;Dot notation is purely syntactic sugar for standard method calls,whose readability gains are debatable. It just gives you another way to make method calls.&lt;/i&gt;&lt;/blockquote&gt;This first &quot;argument&quot; contains no actual argument against the use of dot notation. The first part of the first sentence is taken almost verbatim from &lt;a href=&quot;http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/&quot; target=&quot;_blank&quot;&gt;The Objective-C 2.0 Programming Language&lt;/a&gt; on Apple's site and is just a restatement (out of context) of how dot notation is implemented.&lt;br /&gt;&lt;br /&gt;The second half of the first sentence is an attempt to discount one of the benefits of dot notation by simply dismissing it offhand without evidence or support. &lt;br /&gt;&lt;br /&gt;The second sentence is simply an attempt to bolster the arguments that follow by trivializing dot notation as &quot;just&quot; something we can already do. It's sort of like saying that jet engines do not add value over propellers because they're &quot;just&quot; another way to create thrust. Every construct in any programming language that's higher-level than assembly is &quot;just&quot; another way to do something we can already do. This sentence has no semantic or logical value, it's simply here to set a negative tone toward the use of dot notation without actually offering any facts or reasons not to use it. This first &quot;argument&quot; is rhetoric, nothing more.&lt;br /&gt;&lt;br /&gt;&lt;H3&gt;The Second Argument: the Invalid Assumption&lt;/H3&gt;&lt;blockquote&gt;&lt;i&gt;It obscures the type that you are dereferencing.&lt;/i&gt;&lt;/blockquote&gt;This argument brings to mind the arguments for &lt;a href=&quot;http://en.wikipedia.org/wiki/Hungarian_notation&quot; target=&quot;_blank&quot;&gt;Hungarian Notation&lt;/a&gt;. The argument for Hungarian Notation is that when you look at a variable, you know right away what it is. By prefixing every variable with a jumble of individual letters, each with its own meaning, you know (in theory) all that there is to know about that variable just by glancing at it. &lt;br /&gt;&lt;br /&gt;In reality, you don't see much Hungarian Notation these days. Variables with semantic meaning - those that use words that are recognizable by and have meaning to the brain - work much better. We may not know the variable's specific type, but we know what purpose it serves, which is really more important. &lt;br /&gt;&lt;br /&gt;Dot notation doesn't &quot;obscure&quot; the type you are dereferencing unless there's some reason why you would know the type from looking just at that line of code. This argument makes the assumption that we already know and that we should know what the type of &lt;font face=&quot;monospace&quot;&gt;foo&lt;/font&gt; is. Sure, with bracket notation, we know we're dealing with an object, but we don't know what kind of object it is from looking at this one line of code in a vacuum.&lt;br /&gt;&lt;br /&gt;But, when do you ever look at a line of code in a vacuum? You don't. Code has no meaning taken out of context. If it was vital that we know everything about a variable from looking at it out of context, then we'd all be using Hungarian Notation. Yet we're not.&lt;br /&gt;&lt;br /&gt;Somewhere, probably not more than a few lines above &lt;pre&gt;        foo.bar = 1&lt;/pre&gt;is either a declaration of &lt;font face=&quot;monospace&quot;&gt;foo&lt;/font&gt; or the start of the method. If you're confused about the type, generally scrolling up a few lines can resolve that confusion. If that doesn't work (because it's an instance or global variable, for example), command-double-clicking on it will take you to its declaration and then you'll know its type.&lt;br /&gt;&lt;br /&gt;You can't obscure something that you don't have a reason to know. The amount of information that bracket notation gives us over dot notation is trivial and not enough to make an informed decision about what the code is doing anyway, so you &lt;b&gt;have&lt;/b&gt; to consider its context. If it's not your code, you have to look at the preceding code to understand it anyway.&lt;br /&gt;&lt;br /&gt;&lt;H3&gt;The Third Argument: the Red Herring&lt;/H3&gt;&lt;blockquote&gt;&lt;i&gt;It allows you to do method calls that look like getters.&lt;/i&gt;&lt;/blockquote&gt;Allows? This argument is that it's bad because it &quot;allows&quot; you to do something? And what it allows you to do is create method calls that look like getters? What are getters? They are a kind of method, right? Am I missing something here? &lt;br /&gt;&lt;br /&gt;Any programming language, to be useful, has to allow some kinds of bad code. I doubt it's possible to create a programming language that doesn't &quot;allow&quot; an inexperienced programmer to do all sorts of completely horrible things. I could come up with dozens of examples of ways that Objective-C 1.0 &quot;allows&quot; you to do bad things. This isn't an argument, it's a one-line example of bad code that's being passed off as an argument. It's disingenuous because there's nothing to prevent you from creating methods that look like getters but aren't without dot notation. There's no language-level constraint on that in Objective-C, and no compile-time checks for it regardless of whether dot notation is used. Dot notation changes this in no way whatsoever.&lt;br /&gt;&lt;br /&gt;I actually find it hard to believe that an experienced Objective-C programmer would even attempt this argument because, frankly, it sounds like an argument you'd get from a C++ programmer. Objective-C is a permissive language. It's in Objective-C's DNA to let you do things. It's weakly typed and handles at runtime many things that are handled at compile-time in C++ (and all other OO languages based on the Simula object model). These are intentional design decisions. This language is designed to give you a lot of flexibility and puts trust in the developer that you'll use its features appropriately. Objective-C's dot notation doesn't run contrary to that in the slightest. In fact, it's a logical extension of that underlying philosophy. They're faulting dot notation for something that's inherent in Objective-C&lt;br /&gt;&lt;br /&gt;&lt;H3&gt;The Fourth Argument: Missing the Point&lt;/H3&gt;&lt;blockquote&gt;&lt;i&gt;It hides method calls.&lt;/i&gt;&lt;/blockquote&gt;Why yes, yes it does. The sample line of code supporting this &quot;argument&quot;&lt;pre&gt;        bar.value += 10;&lt;/pre&gt;will result in exactly the expected behavior if you're using dot notation to represent object state. If the &lt;font face=&quot;monospace&quot;&gt;value&lt;/font&gt; and &lt;font face=&quot;monospace&quot;&gt;setValue:&lt;/font&gt; methods are something other than an accessor/mutator pair, then this it is true that this line of code could cause unexpected results, but the fault for that lies not with dot notation, but rather with a programmer who made extremely poor method naming choices, essentially lying to the world about their methods by not respecting the naming convention for accessors and mutators. Under this scenario, you'd have exactly the same problem with this line of code that doesn't use dot notation:&lt;pre&gt;        [bar setValue:[bar value] + 10];&lt;/pre&gt;In other words, this argument is only a problem when somebody does bad things with their code, and it's just as much of a problem when not using dot notation.&lt;blockquote&gt;&lt;b&gt;Whoops!&lt;/b&gt; It was pointed out in the comments that I sorta missed the point on this one, and that the &quot;problem&quot; is that there are two method calls when someone who didn't understand dot notation might reasonably think there was only one. My response to that is: so what? How is it a problem if the result is correct? The code used to illustrate the problem will achieve the results that you should reasonably expect. After the line of code, &lt;font face=&quot;monospace&quot;&gt;value&lt;/font&gt; will be correct. The fact that there are two messages sent and not one will not matter in the vast, vast majority of situations. What counts is that the result is correct, and in the example, it would be assuming the accessor and mutator are correctly implemented. If you're having performance problems and determine through profiling that it's caused by the extra message, then you optimize by implementing a method that increments the value in just one call. It's still a non-issue.&lt;/blockquote&gt;&lt;br /&gt;&lt;H3&gt;Illusory Arguments&lt;/H3&gt;The law has an interesting concept called an &lt;a href=&quot;http://en.wikipedia.org/wiki/Illusory_promise&quot; target=&quot;blank&quot;&gt;illusory promise&lt;/a&gt; (or condition), which is a promise that really isn't a promise at all. It's something that looks like a promise, and is couched in the language of a promise, but which simply isn't a promise.&lt;br /&gt;&lt;br /&gt;These arguments against dot notation in Google's Objective-C Style Guide are illusory arguments. The first one, isn't an argument at all. The second rests on assumptions that are provably untrue (that you know what type a variable is from looking at just its line of code). The remaining two are predicated on a programmer doing something wrong and can both be demonstrated just as easily without using dot notation. &lt;br /&gt;&lt;br /&gt;Google makes the case that dot notation is bad because it can result in confusing code when a developer pays no attention to established naming conventions or makes really poor design choices. But these problems have nothing to do with dot notation. Poorly written code is poorly written code. The simple fact of the matter is, if you're trying to read code like that, nothing is going to help. With, or without dot notation, the code will be hard to read because it's bad. The correct solution in that situation is to fire or train the developer who wrote the offending code.&lt;br /&gt;&lt;br /&gt;&lt;H3&gt;How I Use Dot Notation&lt;/H3&gt;&lt;br /&gt;But, there are ways in which dot notation can be used to make code more readable. The way I use it (picked up from Apple's sample code) is to use properties and dot notation to represent object state, and bracket notation when calling methods that represent behavior or trigger actions. In fact, it could be argued that using bracket notation for both state and behavior has at least as much potential for causing confusion as using dot notation does. Take this line of code, for example &lt;pre&gt;        [foo setIsOn:YES]&lt;/pre&gt;Am I setting state or triggering behavior? It could be either. It could be both. To know for sure, I have to check the documentation for the method being called. If, on the other hand, I've used dot notation and properties to separate out state from behavior, it's instantly understood that &lt;pre&gt;        foo.isOn = YES;&lt;/pre&gt;is setting state, but &lt;pre&gt;        [foo turnOn];&lt;/pre&gt; is triggering behavior (which may, of course, affect state). Yes, this requires consistent design choices, but all good coding does. If you throw that out as a requirement, you can argue that anything is bad.&lt;br /&gt;&lt;br /&gt;Arguing against letting people use dot notation because some people will make poor decisions is ignorant. It's basically saying &quot;I don't like it, so you shouldn't use it&quot;, and when you state it like that, it sounds kinda silly, doesn't it?&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;BR/&gt;&lt;font size=&quot;2&quot;&gt;&lt;center&gt;&amp;copy;2009 Jeff LaMarche. &lt;br/&gt;
http://iphonedevelopment.blogspot.com&lt;/center&gt;&lt;/font&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2947441758360063609-7705088746729335963?l=iphonedevelopment.blogspot.com'/&gt;&lt;/div&gt;</description>
      <pubDate>Sun, 09 Aug 2009 12:53:00 -0700</pubDate>
      <dc:date>2009-08-09T12:53:00-07:00</dc:date>
    </item>
    <item>
      <title>This Week in iPhone News  - August 7/2009</title>
      <link>http://feedproxy.google.com/~r/MobileOrchard/~3/W-20xaDjUXY/</link>
      <description>&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/paulieparker/742766158/&quot;&gt;&lt;img src=&quot;http://www.mobileorchard.com/wp-content/uploads/2009/08/742766158_a2d85e4b59.jpg&quot; class=&quot;left&quot; width=&quot;200&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://flyosity.com/application-design/iphone-application-design-patterns.php&quot;&gt;iPhone Application UI Design Patterns&lt;/a&gt;  Great discussion on how best to design your next iPhone application by following these UI design patterns.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://gamesfromwithin.com/?p=561&quot;&gt;Environment Mapping Demo with OpenGL ES 1.1&lt;/a&gt;  Check out Noel&amp;#8217;s environment mapping demo which is taken from his upcoming book &lt;a href=&quot;http://www.amazon.com/dp/1430225076&quot;&gt;iPhone SDK 3.0 Projects&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.bit-101.com/blog/?p=2294&quot;&gt;iPhone Dev: The Honeymoon is Over&lt;/a&gt;  Thoughts of a well known Flash developer after he spent the last 6 months developing for the iPhone.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://dashes.com/anil/2009/07/apple-secrecy-does-not-scale.html&quot;&gt;Apple: Secrecy Does Not Scale&lt;/a&gt;  A discussion on how Apple should improve in the future with regards to secrecy as its products become more and more prevalent in society.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.9to5mac.com/apple_gets_its_game_on&quot;&gt;Apple and Gaming - The New Growth Story&lt;/a&gt;  An overview of Apple&amp;#8217;s history with the game industry and how things have changed.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.mobilecrunch.com/2009/08/03/apple-bans-app-stores-3rd-most-prolific-developer/&quot;&gt;Apple Bans App Store&amp;#8217;s 3rd-most Prolific Developer&lt;/a&gt;  Details on a recent event where Apple banned a very prolific developer&amp;#8217;s applications from the App Store.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.techcrunch.com/2009/08/03/rumor-netflix-streaming-coming-to-the-iphone/&quot;&gt;Rumor: Netflix Streaming Coming to the iPhone&lt;/a&gt;  I sure hope this rumor is true.  With Apple&amp;#8217;s recent HTTP streaming implementation on the iPhone, Netflix seems like a natural fit.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://21gingerman.wordpress.com/2009/08/03/iphone-dev-camp-3-weekend-recap/&quot;&gt;iPhone Dev Camp 3 Weekend Recap&lt;/a&gt;  Summary of the events at this year&amp;#8217;s iPhone Dev Camp at the Yahoo headquarters this past weekend.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blog.jwegener.com/2009/08/03/million-dollar-iphone-app-market-sizing/&quot;&gt;The Definitive Guide to iPhone App Market Sizing&lt;/a&gt;  A good analysis of how to estimate the market for your next iPhone application.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blog.boxedice.com/2009/07/10/how-to-build-an-apple-push-notification-provider-server-tutorial/&quot;&gt;How to Build an Apple Push Notification Provider Server&lt;/a&gt;  A great tutorial on how to use the new push notification features of iPhone 3.0.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.gamasutra.com/view/feature/4101/postmortem_ngmocodemiurge_.php&quot;&gt;Postmortem: ngmoco/Demiurge Studios&amp;#8217; WordFu&lt;/a&gt;  A great way to learn about application/game development is to learn from other&amp;#8217;s successes and failures.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://apple.slashdot.org/story/09/08/05/2034219/Apple-Balks-Finally-Relents-At-Possible-User-Queries-of-Dictionary-App?from=rss&quot;&gt;Apple Balks, Finally Relents, at Possible User Queries of Dictionary App&lt;/a&gt;  Apple has been getting a lot of flack lately due to its removal of certain applications from the App Store.  Read more about what one application went through.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://thecoffeedesk.com/news/index.php/2009/08/06/iphone-daemon/&quot;&gt;iPhone Background Apps without Jailbreaking or Push&lt;/a&gt;  Note: this is for educational purposes only.  A great read for iPhone developers concerned with the security of App Store applications.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.wired.com/gadgetlab/2009/08/cydia-app-store/&quot;&gt;Rejected by Apple, iPhone Developers Go Underground&lt;/a&gt;  Details on the other side of iPhone application development: jailbreaking and Cydia.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://aclevertwist.com/p/top-5-tips-for-iphone-app-icon-design&quot;&gt;Top 5 Tips for iPhone App Icon Design&lt;/a&gt;&lt;/p&gt;
&lt;div style=&quot;font-size: 75%; margin-top: 1em&quot;&gt;Photo credit: &lt;a href=&quot;http://www.flickr.com/photos/paulieparker/742766158/&quot;&gt;http://www.flickr.com/photos/paulieparker/742766158/&lt;/a&gt;&lt;/div&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/MobileOrchard/~4/W-20xaDjUXY&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
      <pubDate>Fri, 07 Aug 2009 07:21:05 -0700</pubDate>
      <dc:date>2009-08-07T07:21:05-07:00</dc:date>
    </item>
    <item>
      <title>The Dot Notation Controversy</title>
      <link>http://iphonedevelopment.blogspot.com/2009/08/dot-notation-controversy.html</link>
      <description>&lt;blockquote&gt;&lt;b&gt;&lt;i&gt;Sorry!&lt;/b&gt; It was Joe Conway, not Aaron who wrote the post. I've corrected the article below. The salient points are unchanged, but my apologies for mis-attributing&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;I knew that some developers didn't particularly care for Objective-C 2.0's dot notation, but I didn't realize how strongly some of them felt about it.  Joe Conway of the &lt;a href=&quot;http://bignerdranch.com/&quot; target=&quot;_blank&quot;&gt;Big Nerd Ranch&lt;/a&gt; has a &lt;a href=&quot;http://weblog.bignerdranch.com/?p=83&quot; target=&quot;_blank&quot;&gt;very strongly worded post&lt;/a&gt; about the horrors of dot notation.&lt;br /&gt;&lt;br /&gt;I have a lot of respect for Joe and the Big Nerd Ranch, and reading his post, I understand his complaints. He has identified some situations where dot notation can lead to confusion. In practice, however, I don't personally find the use of properties confusing in the slightest and think telling people to never, ever, ever use them is misguided imposition of a personal preference rather than sage advice. If there is anything close to a consensus on dot notation in the Objective-C developer community, it is that dot notation is a positive addition to the language. &lt;br /&gt;&lt;br /&gt;Although, in terms of how they are implemented, dot notation and properties are orthogonal, I tend to think of them as working hand in hand. I always use dot notation for properties and bracket notation the rest of the time. Instead of making my code harder to read, I personally find that it makes it much easier. The only possible point of confusion I've had with this approach comes when accessing &lt;font face=&quot;monospace&quot;&gt;struct&lt;/font&gt; or &lt;font face=&quot;monospace&quot;&gt;union&lt;/font&gt; members owned by properties, but in practice, it just isn't a meaningful problem for me and it's offset by the benefit of separating exposure of state from exposure of behavior, something that has no language-level support in Objective-C prior to 2.0 and no language level support at all in most OO languages (though C# does, so kudos to Microsoft for that).&lt;br /&gt;&lt;br /&gt;My only issue with dot notation, if you could call it an issue, is that since it doesn't mean exactly the same thing as it does in many other OO languages like Java or C++, it can be a bit of a stumbling block for experienced programmers who are new to Objective-C (and with the iPhone, there are a lot of those lately). It can be difficult for these people to make the transition because they subconsciously transfer their understanding of dot notation to Objective-C and think they understand something that they don't. The result of that is typically memory management problems that frustrate the hell out of them. But that's not really an issue with the language, it's just a training issue and hardly an insurmountable one. There are many happy, well-adjusted former C++ and Java programmers among the iPhone developer ranks.&lt;br /&gt;&lt;br /&gt;So, keep in mind that although there are a few well-respected and knowledgeable developers who strongly dislike dot-notation, there are many more well-respected and knowledgeable developers who do use and like them (and I do too). You should definitely read Joe's post and give his opinion weight. He has been working with and teaching the language for quite some time and he's a really, really smart guy.  But keep in mind that what you're reading is just one opinion.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;BR/&gt;&lt;font size=&quot;2&quot;&gt;&lt;center&gt;&amp;copy;2009 Jeff LaMarche. &lt;br/&gt;
http://iphonedevelopment.blogspot.com&lt;/center&gt;&lt;/font&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2947441758360063609-2992981268472554170?l=iphonedevelopment.blogspot.com'/&gt;&lt;/div&gt;</description>
      <pubDate>Fri, 07 Aug 2009 06:39:00 -0700</pubDate>
      <dc:date>2009-08-07T06:39:00-07:00</dc:date>
    </item>
    <item>
      <title>Translations and Xcode</title>
      <link>http://iphonedevelopment.blogspot.com/2009/08/translations-and-xcode.html</link>
      <description>Chris Hanson has a &lt;a href=&quot;http://eschatologist.net/blog/?p=224&quot; target=&quot;_blank&quot;&gt;really handy post&lt;/a&gt; today. In the localization chapter of Beginning iPhone Development, we mentioned that Apple recommended using the ISO two letter language code for your localizations, but that Xcode used the older style language codes for your development base language. Chris shows how to work around this inconsistency.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;BR/&gt;&lt;font size=&quot;2&quot;&gt;&lt;center&gt;&amp;copy;2009 Jeff LaMarche. &lt;br/&gt;
http://iphonedevelopment.blogspot.com&lt;/center&gt;&lt;/font&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2947441758360063609-3667202659117898072?l=iphonedevelopment.blogspot.com'/&gt;&lt;/div&gt;</description>
      <pubDate>Fri, 07 Aug 2009 06:17:00 -0700</pubDate>
      <dc:date>2009-08-07T06:17:00-07:00</dc:date>
    </item>
    <item>
      <title>Conferences, Gaming and Icons: Oh My!</title>
      <link>http://feedproxy.google.com/~r/MobileOrchard/~3/MwTVdHsvmLE/</link>
      <description>&lt;p&gt;I&amp;#8217;m greatly pleased with Mobile Orchard&amp;#8217;s sponsors.  And not just for their money.  Our sponsors make me smile because, without exception, they&amp;#8217;re the kind of outfits that I want to succeed.  &lt;/p&gt;
&lt;p&gt;Our sponsors are what folks in my family would call &lt;em&gt;good citizens&lt;/em&gt; &amp;#8212; upstanding people who participate in our community, not corporate vampires trying to tap a vein.  Examples:&lt;/p&gt;
&lt;p&gt;Peter Bakhyryev wrote our tutorial on &lt;a href=&quot;http://www.mobileorchard.com/tutorial-networking-and-bonjour-on-iphone/&quot;&gt;Networking and Bonjour on iPhone&lt;/a&gt; &amp;#8212; at the moment, it&amp;#8217;s our third most popular item, without mentioning his &lt;a href=&quot;http://byteclub.com/platform&quot;&gt;multi-player network gaming platform&lt;/a&gt;.  &lt;/p&gt;
&lt;p&gt;Without upping the price, Eddie Wilson has added 40 &lt;a href=&quot;http://eddit.com/shop/iphone_ui_icon_set/&quot;&gt;icons to his set&lt;/a&gt; bringing it up to 160 total.  Coldly calculating an ROI for the additional time invested would likely show that he&amp;#8217;s doing it because he&amp;#8217;s passionate about building attractive UIs.&lt;/p&gt;
&lt;p&gt;And the &lt;a href=&quot;360idev.com&quot;&gt;360|iDev&lt;/a&gt; team offers what amounts to a $1000+ conference at half the price.  Plus, they&amp;#8217;ll knock 20% off the price if you take our &lt;a href=&quot;http://www.mobileorchard.com/opengl&quot;&gt;iPhone OpenGL Class&lt;/a&gt; before the conference.&lt;/p&gt;
&lt;p&gt;Here are their pitches:&lt;/p&gt;
&lt;table border=&quot;0&quot; style=&quot;border: none; margin-left: 1em; margin-bottom: 1em&quot;&gt;
&lt;tr&gt;
&lt;td style=&quot;border: none&quot;&gt;&lt;a href=&quot;http://www.mobileorchard.com/a-flurry-of-market-data/?administer_redirect_3=http://eddit.com/shop/iphone_ui_icon_set/&quot;&gt;&lt;img src=&quot;http://www.mobileorchard.com/wp-content/uploads/2009/05/iphone_icon_set_125x125.png&quot;&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;border: none&quot; valign=&quot;middle&quot; &gt;The &lt;a href=&quot;http://www.mobileorchard.com/a-flurry-of-market-data/?administer_redirect_3=http://eddit.com/shop/iphone_ui_icon_set/&quot;&gt;iPhone UI icon set&lt;/a&gt; gives app developers an extensive library of icons for use in their Tab Bar and Tool Bar item objects. 160 png icons and a sample app for browsing the set - $69.
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: none&quot;&gt;&lt;a href=&quot;http://www.mobileorchard.com/2099-360idev-discount-for-opengl-workshop-attendees/?administer_redirect_4=http://www.360idev.com/&quot;&gt;&lt;img src=&quot;http://www.mobileorchard.com/wp-content/uploads/2009/07/360i.jpg&quot;&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;border: none&quot; valign=&quot;middle&quot; &gt;&lt;a href=&quot;http://www.mobileorchard.com/2099-360idev-discount-for-opengl-workshop-attendees/?administer_redirect_4=http://www.360idev.com/&quot;&gt;360|iDev&lt;/a&gt; is the only iPhone developer conference you should attend. Okay, maybe WWDC too. For less than $500, you get 3 days with 40+ sessions from luminaries like Brent Simmons, Noel Llopis, Jonathan Saggau, Bill Dudney and more.
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: none&quot;&gt;&lt;a href=&quot;http://www.mobileorchard.com/2099-360idev-discount-for-opengl-workshop-attendees/?administer_redirect_5=http://byteclub.com/platform&quot;&gt;&lt;img src=&quot;http://www.mobileorchard.com/wp-content/uploads/2009/08/byteclub.png&quot;&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;border: none&quot; valign=&quot;middle&quot; &gt;
ByteClub makes it easy to add &lt;a href=&quot;http://www.mobileorchard.com/2099-360idev-discount-for-opengl-workshop-attendees/?administer_redirect_5=http://byteclub.com/platform&quot;&gt;online real-time and turn-based multiplayer capabilities&lt;/a&gt; to your iPhone games or multiuser apps. In some cases, you won&amp;#8217;t even need to invest into hosting your own servers.
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/MobileOrchard/~4/MwTVdHsvmLE&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
      <pubDate>Wed, 05 Aug 2009 20:00:01 -0700</pubDate>
      <dc:date>2009-08-05T20:00:01-07:00</dc:date>
    </item>
    <item>
      <title>Multi-Row Delete in 3.0</title>
      <link>http://iphonedevelopment.blogspot.com/2009/08/multi-row-delete-in-30.html</link>
      <description>The &lt;a href=&quot;http://networkpx.blogspot.com&quot; target=&quot;_blank&quot;&gt;networkpx Project Blog&lt;/a&gt; has an interesting &lt;a href=&quot;http://networkpx.blogspot.com/2009/07/multiple-row-selection-with-uitableview.html&quot; target=&quot;_blank&quot;&gt;post on doing multi-row delete under SDK 3.0&lt;/a&gt;. It's a good post, even if they do credit the excellent &lt;a href=&quot;http://cocoawithlove.com&quot; target=&quot;_blank&quot;&gt;Cocoa with Love&lt;/a&gt; blog for &quot;introducing&quot; a technique that I &lt;a href=&quot;http://iphonedevelopment.blogspot.com/2008/10/table-view-multi-row-edit-mode.html&quot; target=&quot;_blank&quot;&gt;demonstrated three months earlier&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Anyway, the ability to do multi-row delete is now built-into &lt;font face=&quot;monospace&quot;&gt;UITableView&lt;/font&gt; starting with SDK 3.0, meaning you can now implement multi-row delete it with just few lines of code.  Yay.&lt;br /&gt;&lt;br /&gt;Or, perhaps not. &lt;br /&gt;&lt;br /&gt;Unfortunately, using this functionality requires you to return an undocumented &lt;font face=&quot;monospace&quot;&gt;UITableViewCellEditingStyle&lt;/font&gt; value from &lt;font face=&quot;monospace&quot;&gt;tableView:editingStyleForRowAtIndexPath:&lt;/font&gt; in order to turn this feature on. To fully utilize the functionality, you have to use and override other undocumented, private methods.&lt;br /&gt;&lt;br /&gt;Technically, doing that in an application submitted to the App Store violates your SDK agreement and is grounds for having your application rejected.&lt;br /&gt;&lt;br /&gt;Will your apps be rejected if you do it? Who knows? Maybe yes, maybe no. It's even possible that people using the older, manual technique will get their apps rejected for using private methods even though that technique doesn't, similar to the &lt;a href=&quot;http://theappleblog.com/2008/12/13/developer-says-he-uses-cover-flow-app-is-rejected-developer-surprised/&quot; target=&quot;_blank&quot;&gt;Coverflow debacle&lt;/a&gt; from last year.&lt;br /&gt;&lt;br /&gt;Now, I'm not going to advise you whether to use this functionality in your apps. It's a risk, and you have to decide how risk tolerant you are. I am going to advise that if you have any desire to use this functionality at all, go now and open a bug report with Apple requesting that they make the multi-row delete functionality available to developers.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;BR/&gt;&lt;font size=&quot;2&quot;&gt;&lt;center&gt;&amp;copy;2009 Jeff LaMarche. &lt;br/&gt;
http://iphonedevelopment.blogspot.com&lt;/center&gt;&lt;/font&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2947441758360063609-6139940634777277218?l=iphonedevelopment.blogspot.com'/&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 05 Aug 2009 09:39:00 -0700</pubDate>
      <dc:date>2009-08-05T09:39:00-07:00</dc:date>
    </item>
    <item>
      <title>NinjaWords</title>
      <link>http://iphonedevelopment.blogspot.com/2009/08/ninjawords.html</link>
      <description>&lt;a href=&quot;http://daringfireball.net/2009/08/ninjawords&quot; target=&quot;_blank&quot;&gt;John Gruber says pretty much all that needs to be said on this&lt;/a&gt;.  Not a sign that things are heading in the right direction, I&quot;m afraid.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;BR/&gt;&lt;font size=&quot;2&quot;&gt;&lt;center&gt;&amp;copy;2009 Jeff LaMarche. &lt;br/&gt;
http://iphonedevelopment.blogspot.com&lt;/center&gt;&lt;/font&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2947441758360063609-1935169159403406730?l=iphonedevelopment.blogspot.com'/&gt;&lt;/div&gt;</description>
      <pubDate>Tue, 04 Aug 2009 18:47:00 -0700</pubDate>
      <dc:date>2009-08-04T18:47:00-07:00</dc:date>
    </item>
    <item>
      <title>20%/$99 360iDev Discount For OpenGL Workshop Attendees</title>
      <link>http://feedproxy.google.com/~r/MobileOrchard/~3/6ps6WH3uRlw/</link>
      <description>&lt;p&gt;&lt;a href=&quot;http://www.360idev.com/&quot;&gt;&lt;img src=&quot;http://www.mobileorchard.com/wp-content/uploads/2009/07/360i.jpg&quot; class=&quot;left&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Our mutual admiration society with the good folks at the &lt;a href=&quot;http://www.360idev.com/&quot;&gt;360iDev Conference&lt;/a&gt; continues!&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m pleased to say that we&amp;#8217;ve arranged a &lt;b&gt;20%/$99 conference discount&lt;/b&gt; for attendees of Noel&amp;#8217;s &lt;a href=&quot;http://www.mobileorchard.com/iphone-opengl-programming-training-class/&quot;&gt;OpenGL iPhone Programming Class&lt;/a&gt; that immediately precedes the conference. &lt;/p&gt;
&lt;p&gt;When you add up the discount to attend 360iDev, the discount we&amp;#8217;re offering on our class to people who attend both, and our (still available) early-bird pricing you&amp;#8217;ll &lt;b&gt;save over $600.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;360iDev is about half sold-out &amp;#8212; that that&amp;#8217;s the case this far our is impressive.  Our last two classes have sold out before their early bird registration clocked out.  Odds are good that both will be widely attended; good idea to register early.&lt;/p&gt;
&lt;p&gt;Our class in the same hotel and the same discounted room rate applies.&lt;/p&gt;
&lt;p&gt;To get the discount, &lt;a href=&quot;http://www.mobileorchard.com/iphone-opengl-programming-training-class/&quot;&gt;register for the class&lt;/a&gt; and, once you do, we&amp;#8217;ll send you a coupon code you can use when you register for 360iDev.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/MobileOrchard/~4/6ps6WH3uRlw&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
      <pubDate>Tue, 04 Aug 2009 13:37:07 -0700</pubDate>
      <dc:date>2009-08-04T13:37:07-07:00</dc:date>
    </item>
    <item>
      <title>Accessing HTTP Headers From An NSURLRequest</title>
      <link>http://feedproxy.google.com/~r/MobileOrchard/~3/AemQ49UQcJw/</link>
      <description>&lt;p&gt;&lt;img src=&quot;http://www.mobileorchard.com/wp-content/uploads/2009/08/header.jpg&quot; class=&quot;right&quot; width=&quot;150&quot;&gt;&lt;/p&gt;
&lt;p&gt;Rudi Farkas left this comment on my tutorial demonstrating how to use &lt;a href=&quot;http://www.mobileorchard.com/tutorial-json-over-http-on-the-iphone/&quot;&gt;JSON over HTTP on the iPhone&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;I would like to get to the HTTP headers that accompanied the response to a query sent via NSURLRequest.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;This falls under the &lt;em&gt;easy, but not obvious&lt;/em&gt; class of iPhone programming problems.  Worthy of a quick post:&lt;/p&gt;
&lt;p&gt;The headers for an HTTP connection are included in the &lt;code&gt;NSHTTPURLResponse&lt;/code&gt; class.  If you have an &lt;code&gt;NSHTTPURLResponse&lt;/code&gt; variable you can easily get the headers out as a &lt;code&gt;NSDictionary&lt;/code&gt; by sending the allHeaderFields message.&lt;/p&gt;
&lt;p&gt;For synchronous requests &amp;#8212; not recommended, because they block &amp;#8212; it&amp;#8217;s easy to populate an NSHTTPURLResponse:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;pre&gt;
NSURL *url = [NSURL URLWithString:@&quot;http://www.mobileorchard.com&quot;];
NSURLRequest *request = [NSURLRequest requestWithURL: url];
NSHTTPURLResponse *response;
[NSURLConnection sendSynchronousRequest: request returningResponse: &amp;#038;response error: nil];
if ([response respondsToSelector:@selector(allHeaderFields)]) {
	NSDictionary *dictionary = [response allHeaderFields];
	NSLog([dictionary description]);
}
&lt;/pre&gt;
&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;With an asynchronous request you have to do a little more work.  When the callback &lt;code&gt;connection:didReceiveResponse:&lt;/code&gt; is called, it is passed an &lt;code&gt;NSURLResponse&lt;/code&gt; as the second parameter.  You can cast it to an &lt;code&gt;NSHTTPURLResponse&lt;/code&gt; like so: &lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;pre&gt;
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
	NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response;
	if ([response respondsToSelector:@selector(allHeaderFields)]) {
		NSDictionary *dictionary = [httpResponse allHeaderFields];
		NSLog([dictionary description]);
	}
}
&lt;/pre&gt;
&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Updated based on Ben&amp;#8217;s comment.  See below for details.&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;font-size: 75%; margin-top: 1em&quot;&gt;Photo credit: &lt;a href=&quot;http://www.flickr.com/photos/zachstern/165641306/&quot;&gt;http://www.flickr.com/photos/zachstern/165641306/&lt;/a&gt;&lt;/div&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/MobileOrchard/~4/AemQ49UQcJw&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
      <pubDate>Tue, 04 Aug 2009 12:23:40 -0700</pubDate>
      <dc:date>2009-08-04T12:23:40-07:00</dc:date>
    </item>
    <item>
      <title>Forums Are Back!</title>
      <link>http://feedproxy.google.com/~r/icodeblog/~3/xLRs20xAW1M/</link>
      <description>&lt;p&gt;&lt;img class=&quot;alignright size-full wp-image-1260&quot; title=&quot;users&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/08/users.png&quot; alt=&quot;users&quot; width=&quot;253&quot; height=&quot;238&quot; /&gt;After the server switch, we seemed to have lost the forums.  They are now back up at &lt;a href=&quot;http://icodeblog.com/forum&quot;&gt;http://icodeblog.com/forum&lt;/a&gt; .&lt;/p&gt;
&lt;p&gt;I will do my best to keep up with them (as I have tended to neglect them in the past).  Just, please don&amp;#8217;t write posts like &amp;#8220;Would you make a tutorial about creating an online craps game that allows user chat&amp;#8221;.  I will not write your programs for you.  I guess in some users case &lt;a href=&quot;http://icodeblog.com/2009/07/08/look-familiar/&quot;&gt;I already have&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;So feel free to chat it up in the forums.  If you have suggestions or improvements to them, leave your comments at the bottom of this post.&lt;/p&gt;
&lt;p&gt;Happy iCoding!&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/icodeblog/~4/xLRs20xAW1M&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
      <pubDate>Tue, 04 Aug 2009 10:25:36 -0700</pubDate>
      <dc:date>2009-08-04T10:25:36-07:00</dc:date>
    </item>
    <item>
      <title>A Mac App Store</title>
      <link>http://iphonedevelopment.blogspot.com/2009/08/mac-app-store.html</link>
      <description>Back before WWDC, one of my long-shot predictions was the creation of a Mac App Store following the same business model as the iPhone App Store. It didn't come true, and now with the various issues surrounding the App Store, I've changed my mind that it would be a good idea. I've come to the conclusion that I like not having Apple as the gatekeeper for what Apps can do.&lt;br /&gt;&lt;br /&gt;But, it's nearly impossible to argue that the App Store isn't convenient. It has its issues, but its a great idea, which is why the App Store is flourishing despite all the negative press.&lt;br /&gt;&lt;br /&gt;Now, a third-party called &lt;a href=&quot;http://appbodega.com/&quot; target=&quot;_blank&quot;&gt;Bodega&lt;/a&gt; is extending the idea to Mac applications, and it's a snazzy little application.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/_QLwms0mVa4w/SneibwU4kuI/AAAAAAAAAdE/SO34586VP4M/s1600-h/BodegaScreenSnapz001.jpg&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 262px;&quot; src=&quot;http://1.bp.blogspot.com/_QLwms0mVa4w/SneibwU4kuI/AAAAAAAAAdE/SO34586VP4M/s400/BodegaScreenSnapz001.jpg&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5365936078747898594&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In some ways, Bodega outdoes Apple's iTunes Store. The interface is clean and easy to use, and it's filled with lots of little touches reminiscent of the &lt;a href=&quot;http://en.wikipedia.org/wiki/Delicious_Generation&quot; target=&quot;_blank&quot;&gt;Delicious Generation&lt;/a&gt;. For example, when you move the window around when the &quot;Featured&quot; option is selected, the little hanging signs you can see in the picture above swing with gravity and creak as they move. It's an unnecessary, yet completely satisfying little touch.&lt;br /&gt;&lt;br /&gt;This project is still in its infancy, but it shows a lot of promise and it's one I'm definitely going to keep an eye on.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;BR/&gt;&lt;font size=&quot;2&quot;&gt;&lt;center&gt;&amp;copy;2009 Jeff LaMarche. &lt;br/&gt;
http://iphonedevelopment.blogspot.com&lt;/center&gt;&lt;/font&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2947441758360063609-5483000988870620912?l=iphonedevelopment.blogspot.com'/&gt;&lt;/div&gt;</description>
      <pubDate>Mon, 03 Aug 2009 19:47:00 -0700</pubDate>
      <dc:date>2009-08-03T19:47:00-07:00</dc:date>
    </item>
    <item>
      <title>Me, the Hypocrite Apparently</title>
      <link>http://iphonedevelopment.blogspot.com/2009/08/me-hypocrite-apparently.html</link>
      <description>Today, I saw somebody tweeting about signing a petition to get DRM off of the Kindle. I &lt;a href=&quot;http://twitter.com/jeff_lamarche/status/3114212009&quot; target=&quot;_blank&quot;&gt;tweeted&lt;/a&gt; that the best way to &quot;vote&quot; on something like that is with your dollars. If you buy a Kindle and then sign a petition about the DRM on it, you haven't really given Amazon much motivation to stop using DRM. Since you bought it, you obviously didn't care enough about DRM to not purchase it, so if Amazon doesn't stop using DRM… well, they've already got your money and probably will continue getting your money in the future. At least from the point of view of an MBA, such a petition is essentially meaningless; it has about as much significance as the mewling of kittens. Money talks more loudly than petitions.&lt;br /&gt;&lt;br /&gt;Now, I consider what I tweeted to be a truism. I wasn't particularly intending to take a stand on DRM by posting it. I was just stating a simple fact: If you feel strongly about DRM (or anything else), you shouldn't buy a product that uses it because your dollars are the only meaningful way of voting when it comes to for-profit corporations. If you want a DRM-free Kindle, you should refuse to buy a Kindle until Amazon stops using DRM.&lt;br /&gt;&lt;br /&gt;Generally speaking, I'm not a big fan of DRM, but I'm not much of an ideologue, either. I'm practical about the whole thing. With some products, the benefits outweigh the potential harm of DRM, with others, they don't. With the iPhone, for example, the convenience and benefits outweigh the negatives by a long shot. Sure, I would rather the iPhone didn't have DRM, but I'm not going to stop using it because it has it (although it is almost certainly true that I buy less music and movies as a result of the fact that they are delivered with DRM). And, yes, the threat of having purchased apps deleted by an un-appealable decision by some unnamed person at Apple is a fear but, in reality, it's not enough of a threat to make me give up my iPhone. Maybe someday it will be, but today it's not even close.&lt;br /&gt;&lt;br /&gt;There are other products, like the Kindle where, for me, the DRM tips the scales enough in the other direction that I don't buy the product. They don't offer enough of a benefit for me personally to offset the threat of having my &lt;a href=&quot;http://pogue.blogs.nytimes.com/2009/07/17/some-e-books-are-more-equal-than-others/&quot; target=&quot;_blank&quot;&gt;books deleted behind my back&lt;/a&gt;, for example. Obviously, based on how well the Kindle has sold, the value proposition of the Kindle is different for me than it is for a lot of other people.&lt;br /&gt;&lt;br /&gt;The long and short of it is that DRM is just one factor among many that I consider when making a purchase decision. Or, in other words, I'm pretty standard geek consumer.&lt;br /&gt;&lt;br /&gt;Anyway… a little while after I tweeted that, I was basically &lt;a href=&quot;http://twitter.com/_abk/status/3114689921&quot; target=&quot;_blank&quot;&gt;called out as a hypocrite&lt;/a&gt; for making that statement because my publisher puts DRM on the electronic versions of my book. The implication being, it would seem, that you can't say anything about DRM unless you give away all of your creative output for free? Yeah, that makes sense.&lt;br /&gt;&lt;br /&gt;Frankly, I do not like being called a hypocrite. Over the last two years, I have probably given away the equivalent of at least a thousand hours worth of my time (and probably much more) writing tutorials and sample code for my blog. Additionally, I spend at least an hour a day helping other people with programming problems over e-mail, IM and Twitter, none of which I get paid for. Now, I enjoy doing all that, but idiots like this &quot;John Doe&quot; sometimes make me really regret the time I've spent in that way. If I had used all that time doing contracting work or writing an additional book, I would be considerably wealthier right now.&lt;br /&gt;&lt;br /&gt;Here's the simple truth of the matter: I have no input into how Apress delivers their eBooks. I have no contractual right to control that part of the process. I wouldn't be tempted to do so, but if if I did decide to make some ideological stand on DRM by, say, refusing to finish my current writing obligations unless Apress stopped using DRM, Apress would likely (and rightly) hold me in breach of contract. It's unlikely to the point of being ridiculous that they would stop using DRM as a result of one author being an asshole.&lt;br /&gt;&lt;br /&gt;To state it simply, I'm an author, not a publisher, and just one of literally dozens (maybe hundreds) of Apress authors. Heck, I'm not even the only author on the books I work on! I have a great relationship with Apress and I very much like the people there that I interact with there. But I'm not them. And yet I still have opinions. Fancy that.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;BR/&gt;&lt;font size=&quot;2&quot;&gt;&lt;center&gt;&amp;copy;2009 Jeff LaMarche. &lt;br/&gt;
http://iphonedevelopment.blogspot.com&lt;/center&gt;&lt;/font&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2947441758360063609-4631034839326513279?l=iphonedevelopment.blogspot.com'/&gt;&lt;/div&gt;</description>
      <pubDate>Mon, 03 Aug 2009 18:01:00 -0700</pubDate>
      <dc:date>2009-08-03T18:01:00-07:00</dc:date>
    </item>
    <item>
      <title>Interview with Rhomobile: GPL3 Cross-Platform Mobile App Development In Ruby</title>
      <link>http://feedproxy.google.com/~r/MobileOrchard/~3/nM5_9AaR46Y/</link>
      <description>&lt;p&gt;&lt;img src=&quot;http://www.mobileorchard.com/wp-content/uploads/2009/07/roads.jpg&quot; class=&quot;left frame&quot; width=&quot;150&quot;&gt;&lt;/p&gt;
&lt;p&gt;In this interview with &lt;a href=&quot;http://www.rhomobile.com/&quot;&gt;Rhomobile&lt;/a&gt; founder &lt;a href=&quot;http://www.adamblum.com/&quot;&gt;Adam Blum&lt;/a&gt; we discuss their GPL3 framework for creating cross-platform mobile apps, their GPL3 mobile data sync-server, their hosted offering to simplify cross-platform mobile app builds, and the work they did to get Ruby onto an iPhone.&lt;/p&gt;
&lt;p&gt;You can listen using the Flash player below, download the &lt;a href=&quot;http://podcast.mobileorchard.com/podcast/021-Rhomobile.mp3&quot;&gt;MP3&lt;/a&gt;, or subscribe to the iPhone Developer Podcast using the instructions at the bottom of this post.&lt;/p&gt;
&lt;p&gt;&lt;object type=&quot;application/x-shockwave-flash&quot; data=&quot;http://podcast.mobileorchard.com/wp-content/plugins/podcasting/player/player.swf&quot; width=&quot;290&quot; height=&quot;24&quot; id=&quot;audioplayer1&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://podcast.mobileorchard.com/wp-content/plugins/podcasting/player/player.swf&quot; /&gt;&lt;param name=&quot;FlashVars&quot; value=&quot;playerID=1&amp;amp;soundFile=http%3A%2F%2Fpodcast.mobileorchard.com%2Fpodcast%2F021-Rhomobile.mp3&quot; /&gt;&lt;param name=&quot;quality&quot; value=&quot;high&quot; /&gt;&lt;param name=&quot;menu&quot; value=&quot;false&quot; /&gt;&lt;param name=&quot;wmode&quot; value=&quot;transparent&quot; /&gt;&lt;/object&gt;&lt;/p&gt;
&lt;p&gt;For easy scanning of the interview, here is what was covered and when:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul style=&quot;font-size: 90%&quot;&gt;
&lt;li&gt;1:00 The &amp;#8220;future of mobile&amp;#8221; &amp;#8212; tag/imperative programming approaches; occasional disconnectedness; web standards, but with a delay
&lt;/li&gt;
&lt;li&gt;4:00 Overview of Rhodes cross-platform app creation
&lt;/li&gt;
&lt;li&gt;5:00 Rhodes: MVC framework, native apps atop html templates
&lt;/li&gt;
&lt;li&gt;6:00 Ruby on iPhone
&lt;/li&gt;
&lt;li&gt;10:00 Minimalist ORM persistence model
&lt;/li&gt;
&lt;li&gt;11:00 Data synchronization with Rhosync
&lt;/li&gt;
&lt;li&gt;12:00 Native experience from HTML UI?
&lt;/li&gt;
&lt;li&gt;15:00 Performance
&lt;/li&gt;
&lt;li&gt;19:00 Cross platform considerations
&lt;/li&gt;
&lt;li&gt;20:00 RhoHub: build for other platforms on their servers
&lt;/li&gt;
&lt;li&gt;21:00 Open source licensing, commercial options
&lt;/li&gt;
&lt;li&gt;22:00 Non GPL pricing
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Keep up to date with our iPhone developers&amp;#8217; podcast&lt;/h3&gt;
&lt;p&gt;Subscribe to our iPhone Development Podcast in one of two great ways:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Use the podcast&amp;#8217;s feed with the feed app of your choice:&lt;/strong&gt; &lt;span style=&quot;font-family: -webkit-monospace;&quot;&gt;&lt;a href=&quot;http://podcast.mobileorchard.com/feed/podcast/&quot;&gt;http://podcast.mobileorchard.com/feed/podcast/&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Subscribe using iTunes&lt;/strong&gt; by &lt;a href=&quot;http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=294369513&quot;&gt;clicking here&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;We hope you enjoy the podcast, and if you have any suggestions of who we should interview (or want to be interviewed yourself), use our &lt;a href=&quot;http://feedproxy.google.com/contact&quot;&gt;Contact Page&lt;/a&gt; or leave a comment below. Thanks for listening!&lt;/p&gt;
&lt;div style=&quot;font-size: 75%; margin-top: 1em&quot;&gt;Music credit: &lt;a href=&quot;http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?id=280716114&amp;#038;s=143441&quot;&gt;Silent Night by the Travesties&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;font-size: 75%; margin-top: 1em&quot;&gt;Photo credit: &lt;a href=&quot;http://www.flickr.com/photos/auntiep/7069142/&quot;&gt;http://www.flickr.com/photos/auntiep/7069142/&lt;/a&gt;&lt;/div&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/MobileOrchard/~4/nM5_9AaR46Y&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
      <pubDate>Mon, 03 Aug 2009 10:00:42 -0700</pubDate>
      <dc:date>2009-08-03T10:00:42-07:00</dc:date>
    </item>
    <item>
      <title>iSimulate</title>
      <link>http://iphonedevelopment.blogspot.com/2009/08/isimulate.html</link>
      <description>One of the difficult aspects of making an iPhone program is marketing it. One thing that helps is a professional quality video of the program in action. This is especially true for games. However, since the iPhone Simulator doesn't have access to the accelerometer, camera, or the full capabilities of the multi-touch screen, it can be difficult to get a professional looking video.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewArtist?id=298417671&quot; target=&quot;_blank&quot;&gt;iSimulate (App Store Link)&lt;/a&gt; is a great option for developers. It's a standalone program that runs on your iPhone that will send the inputs from the iPhone to the simulator. This means you can run a program in your simulator and control it by touching or tilting your actual phone. This allows you to use a screen capture program to capture flawless video, even if your program uses features not available on the simulator.&lt;br /&gt;&lt;br /&gt;Right now, you can get iSimulate for $3.99, but only for today. Tomorrow, the prices rises to $7.99 until August 8, then increases to $15.99, until August 16 when it reaches its full price of $31.99. Although $32 is still a small price to pay to get a professional quality video, if you're interested in the program, you can save yourself some money by buying now.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;BR/&gt;&lt;font size=&quot;2&quot;&gt;&lt;center&gt;&amp;copy;2009 Jeff LaMarche. &lt;br/&gt;
http://iphonedevelopment.blogspot.com&lt;/center&gt;&lt;/font&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2947441758360063609-1365675804386151768?l=iphonedevelopment.blogspot.com'/&gt;&lt;/div&gt;</description>
      <pubDate>Mon, 03 Aug 2009 04:59:00 -0700</pubDate>
      <dc:date>2009-08-03T04:59:00-07:00</dc:date>
    </item>
    <item>
      <title>This Concerns Me Greatly</title>
      <link>http://iphonedevelopment.blogspot.com/2009/08/this-concerns-me-greatly.html</link>
      <description>Yes, I'm a little behind. I've been gone for a week, so this is probably not news to any of you, but &lt;a href=&quot;http://www.riverturn.com/blog/?p=455&quot; target=&quot;_blank&quot;&gt;this&lt;/a&gt; really upsets me, so I'm writing about it. I try to give Apple the benefit of the doubt when they make decisions that seem unfair or arbitrary, fully cognizant of the fact that I'm not privy to all the factors that went into the decision.&lt;br /&gt;&lt;br /&gt;But, this... Well..., if this is true,  it would seem to indicate that maybe I've been wrong in giving Apple the benefit of the doubt. That maybe those who have let out a hue and cry over every little Apple decision they didn't like had a more accurate picture of the situation.&lt;br /&gt;&lt;br /&gt;If it's true that Apple won't even give more than a boilerplate reason for pulling an application that had been on the App Store for four months and won't tell the developers what the specific conflicts are so they can fix them, then I think there is more than a little cause for concern. Especially troubling is that now RiverTurn, since they are unable to support or update their app thanks to Apple's decision to pull their application, would like to give refunds, but will have to pay not just their share of the income, but Apple's as well, even though they are only trying to do what's right after Apple put them in a tough situation. This means they not only lose whatever income they might have made in the last four months, but they also have pay out additional money on top of what they invested to develop and market their application.&lt;br /&gt;&lt;br /&gt;The FCC has &lt;a href=&quot;http://www.gizmodo.com.au/2009/08/apple-expects-google-voice-app-developers-to-pay-refunds-out-of-pocket/&quot; target=&quot;_blank&quot;&gt;decided to investigate&lt;/a&gt; the situation. I'll be interested to see if anything comes of it. I don't have much faith in the FCC, that's for sure, but maybe they can do something good for a change.&lt;br /&gt;&lt;br /&gt;Lately I've been bashing Microsoft a lot for making poor decisions and failing to recognize the reality of their situation. In most respects, Apple has been on a roll, making good decisions and making elegant products that people are clamoring to buy even in a poor economy. But, Apple has to realize that a large part of the success of the iPhone has been the App Store. Given that they've based much of their advertising around that single point, it's clear that they do recognize it.&lt;br /&gt;&lt;br /&gt;From the start, third party developers have had to live with an arbitrary review process that potentially meant they could spend lots of time and money and end up completely unable to sell their application for failing to comply with some unwritten rule. That was bad enough, and certainly has had a chilling effect on third party application development. The App Store was so hot, though, that most developers accepted the risk, figuring the potential reward outweighed the risk.&lt;br /&gt;&lt;br /&gt;This decision by Apple adds a new aspect that is almost certain to drive away some of the most innovative developers. Not only do we have to worry about whether our apps will be approved by the somewhat arbitrary review process, but now we have to worry about having their approved applications removed.&lt;br /&gt;&lt;br /&gt;I don't have enough evidence to be able to say I know for sure why Apple did this or why they handled it in this way, but if they don't take steps to fix this and to communicate that they're aware of the problem, it will leave a black stain on their reputation in the eyes of even the most ardent fanboys.&lt;br /&gt;&lt;br /&gt;It really concerns me and I hope Apple fixes it, quickly. Apple should, at very least, pay their own share of the refunds. If the people making the decisions have a soul, though, they should offer to pay the full amount of the refund and probably do even more. Riverturn expended time and resources to create a program that any reasonable person would believe complied with the App Store policies and SDK agreement. There are several other apps on the store that haven't been pulled that allow voice communications over wi-fi, including the iPhone Skype App. Heck, Apple's own reviewers must have felt the same way, since they approved the application and it was on sale for four months before somebody said &quot;hey, let's pull this&quot;.&lt;br /&gt;&lt;br /&gt;Apple, please make this situation right and then fix whatever internal policies allowed it such an injustice to happen.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;BR/&gt;&lt;font size=&quot;2&quot;&gt;&lt;center&gt;&amp;copy;2009 Jeff LaMarche. &lt;br/&gt;
http://iphonedevelopment.blogspot.com&lt;/center&gt;&lt;/font&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2947441758360063609-2045229253785058796?l=iphonedevelopment.blogspot.com'/&gt;&lt;/div&gt;</description>
      <pubDate>Sun, 02 Aug 2009 08:18:00 -0700</pubDate>
      <dc:date>2009-08-02T08:18:00-07:00</dc:date>
    </item>
    <item>
      <title>How to deal with iPhone Device Provisioning without Stabbing Your Eyes Out</title>
      <link>http://feedproxy.google.com/~r/icodeblog/~3/xKZHKnbS1Xs/</link>
      <description>&lt;h1&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;Introduction&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;So for any developer than has joined the iPhone Development program and attempted to throw their app on their phone, the process of provisioning is a familiar and likely painful process. Like many developer you may have several projects going on possibly for several organizations. You can think of provisioning as the paper work your app needs to fill out in order to &amp;#8220;board&amp;#8221; your phone. The process involves ____ steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Get an iPhone Developer Account&lt;/li&gt;
&lt;li&gt;Create a certificate request&lt;/li&gt;
&lt;li&gt;Download your approved certificate&lt;/li&gt;
&lt;li&gt;Register your device&lt;/li&gt;
&lt;li&gt;Create an App Id for some app (eg. com.exampleComapny.exampleProduct&lt;/li&gt;
&lt;li&gt;Create a provisioning profile that says an app with a certain App ID can run on a device with a certain ID&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;While there may be a headache or two in the first several steps, Apple does provide a fairly robust overview of how to accomplish those things. We are going to focus on a developer who has gone through these steps and has a provisioning profile available on their machine. Now you may have multiple provisioning profiles on a single machine, but doing that just involves more work. I use this quick trick to modify projects to my provioioning profile so that I can help  test etc.&lt;/p&gt;
&lt;h1&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;Instructions&lt;/span&gt;&lt;/h1&gt;
&lt;h3&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;Step 1&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Assuming you already have a project created, open up the terminal and navigate into the directory for the project. In my case I have a project called &amp;#8220;MyTesterProject&amp;#8221;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/Picture-15.png&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-1237&quot; title=&quot;Picture 15&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/07/Picture-15.png&quot; alt=&quot;Picture 15&quot; width=&quot;553&quot; height=&quot;265&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;Step 2&lt;br /&gt;
&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Now if we do an ls command we can see that there is a .xcodeproj in this directory. We are going to navigate into that. Although in Finder this may look like a file, it is actually a bundle or folder that has things contained in it. Using the change directory command (cd) we can navigate into the project.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/Picture-161.png&quot;&gt;&lt;img class=&quot;alignleft size-full wp-image-1238&quot; title=&quot;Picture 16&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/07/Picture-161.png&quot; alt=&quot;Picture 16&quot; width=&quot;274&quot; height=&quot;137&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/Picture-17.png&quot;&gt;&lt;img class=&quot;alignright size-full wp-image-1239&quot; title=&quot;Picture 17&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/07/Picture-17.png&quot; alt=&quot;Picture 17&quot; width=&quot;277&quot; height=&quot;130&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&lt;/h3&gt;
&lt;h3&gt;&lt;/h3&gt;
&lt;h3&gt;&lt;/h3&gt;
&lt;h3&gt;&lt;/h3&gt;
&lt;h3&gt;&lt;/h3&gt;
&lt;h3&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;Step 3&lt;br /&gt;
&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Listing out the directory here we can see that there are several files. The one we are going to focus on is project.pbxproj. This is the file that contains all the configuration settings for this project. What I do here through the terminal is use the command mate to open text mate, however you may use vi or pico or whatever other text editor you like to open the file.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/Picture-18.png&quot;&gt;&lt;img class=&quot;alignleft size-full wp-image-1240&quot; title=&quot;Picture 18&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/07/Picture-18.png&quot; alt=&quot;Picture 18&quot; width=&quot;287&quot; height=&quot;107&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/Picture-19.png&quot;&gt;&lt;img class=&quot;size-large wp-image-1241 alignright&quot; title=&quot;Picture 19&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/07/Picture-19-1024x640.png&quot; alt=&quot;Picture 19&quot; width=&quot;254&quot; height=&quot;158&quot; /&gt; &lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;Step 4&lt;br /&gt;
&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Now you are going to search for whatever developer this project is currently linked to. For this example lets pretend that this project is configured for a provisioning profile for &amp;#8220;Collin Ruffenach&amp;#8221; but we want to change it. Search through this document and find the developers name.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/Picture-20.png&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-1242&quot; title=&quot;Picture 20&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/07/Picture-20.png&quot; alt=&quot;Picture 20&quot; width=&quot;582&quot; height=&quot;207&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;Step 5&lt;br /&gt;
&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;You will find the name in a section of text that looks similar to this. You need to replace whatever name is there with your name. The other important field begins with &amp;#8220;PROVISIONING_ PROFILE&amp;#8221;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/Picture-21.png&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-1243&quot; title=&quot;Picture 21&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/07/Picture-21.png&quot; alt=&quot;Picture 21&quot; width=&quot;709&quot; height=&quot;238&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The number that you are to replace the provisioning profile number with will be found in xCode. If you go into xCode and into the Window menu, you will see an option for organizer. In organizer you can see all your provisioning profiles. Pick the one you have made for your self and get the Profile Identifier, this is what you will put for the PROVISIONING_PROFILE:&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/Picture-25.png&quot;&gt;&lt;img class=&quot;alignleft size-full wp-image-1247&quot; title=&quot;Picture 25&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/07/Picture-25.png&quot; alt=&quot;Picture 25&quot; width=&quot;181&quot; height=&quot;181&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/Picture-26.png&quot;&gt;&lt;img class=&quot;alignright size-full wp-image-1248&quot; title=&quot;Picture 26&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/07/Picture-26.png&quot; alt=&quot;Picture 26&quot; width=&quot;224&quot; height=&quot;160&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/Picture-27.png&quot;&gt;&lt;img class=&quot;aligncenter size-large wp-image-1249&quot; title=&quot;Picture 27&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/07/Picture-27-1024x542.png&quot; alt=&quot;Picture 27&quot; width=&quot;419&quot; height=&quot;220&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;Step 6&lt;br /&gt;
&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;The last thing to do is go into the info.plist file for the project and make sure to change the Bundle Identifier to match the one for the provisioning profile you have. I know at first this seems like a kind of invasive way to do things, but it has really sped up my development and testing time. Hope this tip works for you guys. Thanks for reading and Happy Coding!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/Picture-24.png&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-1246&quot; title=&quot;Picture 24&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/07/Picture-24.png&quot; alt=&quot;Picture 24&quot; width=&quot;557&quot; height=&quot;177&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/icodeblog/~4/xKZHKnbS1Xs&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
      <pubDate>Fri, 31 Jul 2009 16:51:33 -0700</pubDate>
      <dc:date>2009-07-31T16:51:33-07:00</dc:date>
    </item>
    <item>
      <title>This Week in iPhone News - July 31/2009</title>
      <link>http://feedproxy.google.com/~r/MobileOrchard/~3/rgQhgqTzD7E/</link>
      <description>&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/kitcowan/712113503/&quot;&gt;&lt;img src=&quot;http://www.mobileorchard.com/wp-content/uploads/2009/07/fly-app.jpg&quot; class=&quot;left&quot; width=&quot;150&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.appleinsider.com/articles/09/07/24/apples_much_anticipated_tablet_device_coming_early_next_year.html&quot;&gt;Apple&amp;#8217;s much-anticipated tablet device coming early next year&lt;/a&gt;  While this may only be a rumor, there are a lot of signs pointing towards Apple releasing some sort of a tablet-like device next year.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.motally.com/&quot;&gt;Motally is Mobile Analytics&lt;/a&gt;  It&amp;#8217;s worth taking a look at this mobile usage statistics tracking/reporting tool.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://lifehacker.com/5324574/create-an-iphone-document-scanner-from-cardboard&quot;&gt;Create an iPhone Document Scanner from Cardboard&lt;/a&gt;  Check out this nifty little hack for &amp;#8220;scanning&amp;#8221; your documents with the iPhone 3G S.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.theiphoneblog.com/2009/07/28/apple-rejects-google-voice-apps/&quot;&gt;Apple Removes Google Voice Apps from App Store&lt;/a&gt;  More controversy over the recent decision by Apple to remove all Google Voice related applications.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.148apps.com/news/dear-steve-fix-app-store-approval-process/&quot;&gt;Dear Steve, Please Fix the App Store Approval Process&lt;/a&gt;  A clear and concise piece on what Apple can do to improve the App Store approval process.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.iphoneflow.com/items/1856&quot;&gt;Types vs. Objects&lt;/a&gt;  A handy review of the differences between the two main variables types in Objective-C.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://appreview.tumblr.com/&quot;&gt;Application Submission Feedback&lt;/a&gt;  Great ongoing collection of reasons why certain applications have been rejected from the App store.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://games.venturebeat.com/2009/07/29/party-crashers-iphonesocial-game-makers-draw-the-envy-of-old-guard-casual-game-companies/&quot;&gt;iPhone/Social Games Make Old-Guard Casual Game Companies Envious&lt;/a&gt;  Part one of a two-part story on how the casual game market is evolving.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://digg.com/apple/The_iPhone_Apps_Economy_Who_is_Making_All_The_Money&quot;&gt;The iPhone Apps Economy:  Who is Making all the Money?&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://theappleblog.com/2009/07/29/official-apple-idisk-app-finally-released/&quot;&gt;Official Apple iDisk App Finally Released&lt;/a&gt;  MobileMe iDisk app is now available for download.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://gizmodo.com/5325539/apples-chickenshit-approval-process-has-gone-too-far&quot;&gt;Apple&amp;#8217;s Approval Process Has Gone Too Far&lt;/a&gt;  More critiques on the App Store approval process.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://digg.com/apple/iPhone_Jailbreaking_Could_Crash_Cell_Towers_Apple_Claims&quot;&gt;iPhone Jailbreaking Could Crash Cell Towers, Apple Claims&lt;/a&gt;  Fear, uncertainty, and doubt from Apple regarding iPhone jailbreaking?  You decide.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://crave.cnet.co.uk/software/0,39029471,49303105,00.htm&quot;&gt;AVG Antivirus Coming to iPhone and OSX&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.forbes.com/2009/07/28/hackers-iphone-apple-technology-security-hackers.html&quot;&gt;How to Hijack &amp;#8216;Every iPhone in the World&amp;#8217;&lt;/a&gt;  Read more on the latest news concerning a recently announced unpactched iPhone bug related to malicious SMS messages.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.phonesuit.com/products/MiLi_Pro_iPhone_iPod_Video_Projector-18-10.html&quot;&gt;MiLi Pro - iPhone, iPod Video Projector&lt;/a&gt;  Interesting miniature projector for iPhone and iPod devices.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.mobilecrunch.com/2009/07/30/iphone-devs-litefree-mobile-apps-really-pay-off/?awesm=tcrn.ch_1lV2&amp;amp;utm_campaign=techcrunch&amp;amp;utm_medium=tcrn.ch-twitter&amp;amp;utm_source=direct-tcrn.ch&amp;amp;utm_content=techcrunch-autopost&quot;&gt;iPhone Devs: Lite/Free Mobile Apps Really Pay Off&lt;/a&gt;  A testimony from the developer of iCombat on how successful using a lite version has been in conjunction with a paid version of his application.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.makeuseof.com/tag/cool-iphone-keypad-codes/&quot;&gt;11 Cool iPhone Keypad Codes&lt;/a&gt;  Want to know more about your mobile carrier, phone, and billing details?  Try these codes you can enter into your phone&amp;#8217;s keypad.&lt;/p&gt;
&lt;div style=&quot;font-size: 75%; margin-top: 1em&quot;&gt;Photo credit: &lt;a href=&quot;http://www.flickr.com/photos/kitcowan/712113503/&quot;&gt;http://www.flickr.com/photos/kitcowan/712113503/&lt;/a&gt;&lt;/div&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/MobileOrchard/~4/rgQhgqTzD7E&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
      <pubDate>Fri, 31 Jul 2009 08:44:16 -0700</pubDate>
      <dc:date>2009-07-31T08:44:16-07:00</dc:date>
    </item>
    <item>
      <title>iPhone Development: Where is all the $$$</title>
      <link>http://feedproxy.google.com/~r/icodeblog/~3/3B9EPgKMyEY/</link>
      <description>&lt;p&gt;Hey guys,&lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/xCodeIcon.png&quot;&gt;&lt;img class=&quot;alignright size-medium wp-image-1229&quot; title=&quot;xCodeIcon&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/07/xCodeIcon-300x300.png&quot; alt=&quot;xCodeIcon&quot; width=&quot;300&quot; height=&quot;300&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So this is the first post we are doing that is more about developers than about developing. The Guardian put up a great &lt;a title=&quot;The App Economy&quot; href=&quot;http://www.guardian.co.uk/technology/2009/jul/29/iphone-apps&quot; target=&quot;_blank&quot; onclick=&quot;pageTracker._trackPageview('/outgoing/www.guardian.co.uk/technology/2009/jul/29/iphone-apps?referer=');&quot;&gt;article&lt;/a&gt; today talking about the app store, developers and what is driving sales. The app store has most certainly solidified itself, at least for the time being, as the most dominant mobile application distribution system; but what does the future of the &amp;#8220;App Economy&amp;#8221; look like?&lt;/p&gt;
&lt;p&gt;The App Store is really unique in the tech world. There has never been anything that allows consumers and developers to have &amp;#8220;instant&amp;#8221; (sort of for developers) access to such a wide spread digital software storefront. The idea of a piece of software being an impulse buy didn&amp;#8217;t really exist before the App Store, and it is interesting to study the evolution of the apps as well as the evolution of sales. Currently the big winner in app categories is games, little games especially. Got five minutes before that meeting? Pull out &lt;a title=&quot;PapiJump in the App Store&quot; href=&quot;http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=285800495&amp;amp;mt=8&quot; target=&quot;_blank&quot; onclick=&quot;pageTracker._trackPageview('/outgoing/phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=285800495_amp_mt=8&amp;amp;referer=');&quot;&gt;PapiJump&lt;/a&gt; or maybe &lt;a title=&quot;Paper Toss in the App Store&quot; href=&quot;http://click.linksynergy.com/fs-bin/stat?id=saW0nB/fQ6o&amp;amp;offerid=146261&amp;amp;type=3&amp;amp;subid=0&amp;amp;tmpid=1826&amp;amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252FWebObjects%252FMZStore.woa%252Fwa%252FviewSoftware%253Fid%253D317917431%2526mt%253D8%2526uo%253D6%2526partnerId%253D30&quot; target=&quot;_blank&quot; onclick=&quot;pageTracker._trackPageview('/outgoing/click.linksynergy.com/fs-bin/stat?id=saW0nB/fQ6o_amp_offerid=146261_amp_type=3_amp_subid=0_amp_tmpid=1826_amp_RD_PARM1=http_253A_252F_252Fitunes.apple.com_252FWebObjects_252FMZStore.woa_252Fwa_252FviewSoftware_253Fid_253D317917431_2526mt_253D8_2526uo_253D6_2526partnerId_253D30&amp;amp;referer=');&quot;&gt;Paper Toss&lt;/a&gt;. But these are fleeting. As the App Store gets older, apps will need to evolve in order to keep consumers spending.&lt;/p&gt;
&lt;p&gt;A great example of that is a sponsor of our site. &lt;a title=&quot;Right Signature in the App Store&quot; href=&quot;http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=306459477&amp;amp;mt=8&quot; target=&quot;_blank&quot; onclick=&quot;pageTracker._trackPageview('/outgoing/itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=306459477_amp_mt=8&amp;amp;referer=');&quot;&gt;Right Signature&lt;/a&gt; allows users to send documents to people when a signature is required. This was all done through a web interface until they made their iPhone app. Now lawyers, business owners, anyone can be on the go and sign and return paperwork from anywhere. It is incredible how much time this saves compared to the traditional method of getting people to sign documents. Instead of Print, Mail, Sign, Mail Back; it is Email, Sign.&lt;/p&gt;
&lt;p&gt;This is a great example of the internet integration that is going to be vital to most apps coming out. While the iPhone is a pretty incredible device it could never do any high level video processing or other processor intensive task. Thankfully, the internet allows the iPhone to act as a little window into whatever  you would like. You can use your servers to do all the processing and send the result back to the user. Imagine it like sending an SAT test to a tutor online and just getting back the answers. There was a lot of work involved in getting the answers, but in reality all the answers is not very much data.&lt;/p&gt;
&lt;p&gt;This is one of the real problems with many new iPhone developers. New developers will get their Objective C down perfectly and suddenly realize that their needs to be a large web based aspect to their app in order to achieve the functionality they are looking for. Most of these &amp;#8220;web based aspects&amp;#8221; will be simple things, like a high score board for instance. However with a well structures web/iphone architecture you could have a large amount of your app be pulled from the web, allowing you to change your app without putting out a new release on the app store. This kind of approach I think should be utilized more for even small things in apps. If the background to a game or the logo of a game changed throughout the course of a year because the images were updated online, this would add some nice personality to some apps that you think have become stagnant. While this does alienate some of the iPod Touch users, a developer could ensure a complete app packadged up requiring no internet yet still incorperate this technique.&lt;/p&gt;
&lt;p&gt;Coming up here on iCodeBlog we will be making a full app through several screencasts that we will put in the app store. Right now we are thinking of a small game, but we will make sure to include at lease one web based service within the app. Anyways, make sure to check out the &lt;a title=&quot;The App Economy&quot; href=&quot;http://www.guardian.co.uk/technology/2009/jul/29/iphone-apps&quot; onclick=&quot;pageTracker._trackPageview('/outgoing/www.guardian.co.uk/technology/2009/jul/29/iphone-apps?referer=');&quot;&gt;Guardian Article&lt;/a&gt;. Great stuff. Thanks for reading and happy coding!&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/icodeblog/~4/3B9EPgKMyEY&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
      <pubDate>Wed, 29 Jul 2009 18:21:18 -0700</pubDate>
      <dc:date>2009-07-29T18:21:18-07:00</dc:date>
    </item>
    <item>
      <title>Combatting Ringtone App Pricing Pressure With Application Suites And Shared Pasteboards</title>
      <link>http://feedproxy.google.com/~r/MobileOrchard/~3/ayYpvagZ7U0/</link>
      <description>&lt;p&gt;&lt;img src=&quot;http://www.mobileorchard.com/wp-content/uploads/2009/07/bundle.jpg&quot; class=&quot;left frame&quot; width=&quot;150&quot;&gt;&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m self employed, work from home, and earn a living as a blogger.  Consequently, I don&amp;#8217;t have much of a work-life balance.  I&amp;#8217;m reading &lt;a href=&quot;http://www.feelinggood.com/&quot;&gt;Feeling Good&lt;/a&gt; by David Burns to rectify this.  It&amp;#8217;s basically &lt;a href=&quot;http://www.davidco.com/what_is_gtd.php&quot;&gt;Getting Things Done&lt;/a&gt; meets &lt;a href=&quot;http://lifehacker.com&quot;&gt;Life Hacker&lt;/a&gt; for mental health.  &lt;/p&gt;
&lt;p&gt;The book is brimming with, for lack of a better label, workflow/procedures/metrics/instrumentation for feeling good.  Every one of these belongs in an app on the iPhone.  A couple of examples: The Burns Depression Checklist &amp;#8212; 25 questions to calculate a weekly numeric mood score. Mental Biofeedback &amp;#8212; golf ticker for daily negative thoughts.&lt;/p&gt;
&lt;p&gt;While reading, as part of back of the envelope return on investment calculation, I kept a mental tally of how long it&amp;#8217;d take to implement the items.  I had a target price for the application in mind; unfortunately, even the most optimistic volume numbers didn&amp;#8217;t justify the time investment.  Jacking the price up wouldn&amp;#8217;t help; it&amp;#8217;d price out of the market.&lt;/p&gt;
&lt;p&gt;The features shared some common data and &lt;em&gt;felt&lt;/em&gt; (pun intended) like they belonged together.  Most often, this pairing would be expressed by putting each feature  into e.g., individual tabs in a single app.  However, most people mix and match the tools they use from the book; so most users wouldn&amp;#8217;t use most of the tabs.  This would violate the principle having apps with elegant but compact functionality.&lt;/p&gt;
&lt;p&gt;So, there were two strikes against doing this work.  I was ready to move on and sat down to write an earlier piece on &lt;a href=&quot;http://www.mobileorchard.com/new-in-iphone-30-tutorial-series-part-3-copy-paste-with-uipasteboard/&quot;&gt;using pasteboards&lt;/a&gt; in iPhone 3.0 applications.  While writing the piece it dawned on me that I could knock down both problems using a shared pasteboard:&lt;/p&gt;
&lt;p&gt;Instead of creating one large app, I could create many and use a shared pasteboard to share data and URL launching to tie them together into a suite.&lt;/p&gt;
&lt;p&gt;These apps could each be priced at or around my target price, with maybe one or two for free as &lt;em&gt;loss leaders&lt;/em&gt;.  Buyers would pick up apps, each more or less with &lt;em&gt;ring tone&lt;/em&gt; pricing, as they mixed and matched their way the book.  My intuition tells me that this would net &lt;em&gt;at least 3x the revenue&lt;/em&gt; over one big app.&lt;/p&gt;
&lt;p&gt;Plus, you get more placement (and the resulting sales bump) in the new/updated lists when you stagger your update releases across more numerous smaller apps than the single shot you&amp;#8217;d get by updating a monolithic app.&lt;/p&gt;
&lt;h3&gt;Using Shared Pasteboards&lt;/h3&gt;
&lt;p&gt;Creating a shared pasteboard whose contents persist when one application closes and another opens take only two lines:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;pre&gt;
UIPasteboard *suitePasteboard = [UIPasteboard pasteboardWithName:@&quot;suitePasteBoard&quot; create:YES];
suitePasteBoard.persistent = YES;
&lt;/pre&gt;
&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Thereafter you can use the pasteboard with the same ease that you&amp;#8217;d use the system pasteboard.  See our article &lt;a href=&quot;http://www.mobileorchard.com/new-in-iphone-30-tutorial-series-part-3-copy-paste-with-uipasteboard/&quot;&gt;New In iPhone 3.0 Tutorial Series, Part 3: Copy &amp;#038; Paste With UIPasteboard&lt;/a&gt; for pasteboard usage.&lt;/p&gt;
&lt;h3&gt;In-App Purchase&lt;/h3&gt;
&lt;p&gt;You could use in-app purchase for the same end.  Aside from the previously mentioned new/update bump these compare and contrast the two methods:&lt;/p&gt;
&lt;p&gt;I  wonder about consumer push back on in-app purchase.  I already paid you for your app and resent you asking me to pony up again.  Separate apps are, well, separate.  Plus, I suspect that consumers will expect purchases of non-perishable items (e.g., new features, not poker chips) to be priced well below the initial purchase price; there&amp;#8217;s probably more pressure to go to $0.99 here than in the app store.&lt;/p&gt;
&lt;p&gt;Using small apps with pasteboards and URL schemes is a loose coupling.  In-app purchase is more monolithic.  Discuss amongst yourselves whether the overhead of creating, maintaining and getting multiple small apps into the store is easier than creating and updating a large one.  There&amp;#8217;s probably a second article on this one, but that&amp;#8217;ll have to wait for another time.&lt;/p&gt;
&lt;div style=&quot;font-size: 75%; margin-top: 1em&quot;&gt;Photo credit: &lt;a href=&quot;http://www.flickr.com/photos/tamnluproductions/422558934/&quot;&gt;http://www.flickr.com/photos/tamnluproductions/422558934/&lt;/a&gt;&lt;/div&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/MobileOrchard/~4/ayYpvagZ7U0&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
      <pubDate>Wed, 29 Jul 2009 14:34:00 -0700</pubDate>
      <dc:date>2009-07-29T14:34:00-07:00</dc:date>
    </item>
    <item>
      <title>Getting Images From The iPhone Photo Library Or Camera Using UIImagePickerController</title>
      <link>http://feedproxy.google.com/~r/icodeblog/~3/LsZxqV6Vbqo/</link>
      <description>&lt;p&gt;This will be a simple tutorial showing you how to access the iPhone&amp;#8217;s photo library as well as the camera.  Since the 3.0 update, the methods for picking photos have been &lt;a href=&quot;http://en.wikipedia.org/wiki/Deprecation&quot; onclick=&quot;pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Deprecation?referer=');&quot;&gt;deprecated&lt;/a&gt;.  So this will be a &lt;strong&gt;3.0 and above&lt;/strong&gt; tutorial.&lt;/p&gt;
&lt;p&gt;We will be creating an applicaiton that will allow you to pick a photo from the library or camera and display it on the screen.  Here is a screenshot of what the app will look like:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/photo-21.jpg&quot;&gt;&lt;img class=&quot;alignnone size-full wp-image-1204&quot; title=&quot;photo 2&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/07/photo-21.jpg&quot; alt=&quot;photo 2&quot; width=&quot;320&quot; height=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Let&amp;#8217;s go ahead and get started&amp;#8230;&lt;/p&gt;
&lt;h2&gt;1. Create A New View Based Application&lt;/h2&gt;
&lt;p&gt;I called mine photoApp (I will be using this name as reference)&lt;/p&gt;
&lt;h2&gt;2. Create The IBOutlets and IBAction&lt;/h2&gt;
&lt;p&gt;Open &lt;strong&gt;photoAppViewController.h&lt;/strong&gt; and add the following code&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;objc&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #6e371a;&quot;&gt;#import &lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #a61390;&quot;&gt;@interface&lt;/span&gt; PhotoAppViewController &lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt; UIViewController | UIImagePickerControllerDelegate, UINavigationControllerDelegate | &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#123;&lt;/span&gt;
	UIImageView &lt;span style=&quot;color: #002200;&quot;&gt;*&lt;/span&gt; imageView;
	UIButton &lt;span style=&quot;color: #002200;&quot;&gt;*&lt;/span&gt; choosePhotoBtn;
	UIButton &lt;span style=&quot;color: #002200;&quot;&gt;*&lt;/span&gt; takePhotoBtn;
&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #a61390;&quot;&gt;@property&lt;/span&gt; &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;nonatomic, retain&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt; IBOutlet UIImageView &lt;span style=&quot;color: #002200;&quot;&gt;*&lt;/span&gt; imageView;
&lt;span style=&quot;color: #a61390;&quot;&gt;@property&lt;/span&gt; &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;nonatomic, retain&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt; IBOutlet UIButton &lt;span style=&quot;color: #002200;&quot;&gt;*&lt;/span&gt; choosePhotoBtn;
&lt;span style=&quot;color: #a61390;&quot;&gt;@property&lt;/span&gt; &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;nonatomic, retain&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt; IBOutlet UIButton &lt;span style=&quot;color: #002200;&quot;&gt;*&lt;/span&gt; takePhotoBtn;
&amp;nbsp;
&lt;span style=&quot;color: #002200;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;IBAction&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt; getPhoto&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #a61390;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt; sender;
&amp;nbsp;
&lt;span style=&quot;color: #a61390;&quot;&gt;@end&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;Important&lt;/span&gt;: Replace the &lt;strong&gt;|&lt;/strong&gt; in the interface declaration with &lt;strong&gt;&amp;lt; &lt;/strong&gt;and &lt;strong&gt;&amp;gt;&lt;/strong&gt;.  I just used the vertical pipe bc wordpress was replacing it with html encoding.&lt;/p&gt;
&lt;p&gt;Notice that we implement the &lt;strong&gt;UIImagePickerControlDelegate&lt;/strong&gt; and the &lt;strong&gt;UINavigationControllerDelegate. &lt;/strong&gt;These are both needed to properly interface with the image picker.  The rest of this stuff should be pretty strait forward if you have been reading our tutorials.  We set up some outlets to the buttons we are using (this will be to determine which button was pressed).  There is also and IBAction that will get called when the user presses either of the buttons.  This method (getPhoto) will show the ImagePicker.&lt;/p&gt;
&lt;h2&gt;3. Create The Interface&lt;/h2&gt;
&lt;p&gt;Open up photoAppViewController.xib in Interface builder and follow these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Drag a UIImageView on to the main view&lt;/li&gt;
&lt;li&gt;Set the &lt;strong&gt;Mode&lt;/strong&gt; of the UIImageView to &lt;strong&gt;Aspect Fit&lt;/strong&gt; in the Attribute inspector&lt;/li&gt;
&lt;li&gt;Drag a UIButton on to the view and title it &lt;strong&gt;Choose Photo&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Drag another UIButton on to the view and title it &lt;strong&gt;Take Photo&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The interface should look something like this:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/screenshot_013.png&quot;&gt;&lt;img class=&quot;alignnone size-full wp-image-1209&quot; title=&quot;screenshot_01&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/07/screenshot_013.png&quot; alt=&quot;screenshot_01&quot; width=&quot;320&quot; height=&quot;502&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;4. Connect The IBoutlets and IBAction&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Connect choosePhotoBtn to the UIButton titled &lt;strong&gt;Choose Photo&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Connect takePhotoBtn to the UIButton titled &lt;strong&gt;Take Photo&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Connect the imageView to the UIImageView&lt;/li&gt;
&lt;li&gt;Connect the &lt;strong&gt;Touch Up Inside&lt;/strong&gt; callback on each of the buttons to the &lt;strong&gt;getPhoto &lt;/strong&gt;method&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;When you click on &lt;strong&gt;File&amp;#8217;s Owner&lt;/strong&gt; the connection inspector should look like this:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/screenshot_014.png&quot;&gt;&lt;img class=&quot;alignnone size-full wp-image-1211&quot; title=&quot;screenshot_01&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/07/screenshot_014.png&quot; alt=&quot;screenshot_01&quot; width=&quot;289&quot; height=&quot;213&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Close Interface Builder&lt;/p&gt;
&lt;h2&gt;5. Implement The getPhoto Method&lt;/h2&gt;
&lt;p&gt;Open &lt;strong&gt;PhotoAppViewController.m &lt;/strong&gt;and add the following code:&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;objc&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #a61390;&quot;&gt;@synthesize&lt;/span&gt; imageView,choosePhotoBtn, takePhotoBtn;
&amp;nbsp;
&lt;span style=&quot;color: #002200;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;IBAction&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt; getPhoto&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #a61390;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt; sender &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#123;&lt;/span&gt;
	UIImagePickerController &lt;span style=&quot;color: #002200;&quot;&gt;*&lt;/span&gt; picker &lt;span style=&quot;color: #002200;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;UIImagePickerController alloc&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt; init&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;;
	picker.delegate &lt;span style=&quot;color: #002200;&quot;&gt;=&lt;/span&gt; self;
&amp;nbsp;
	&lt;span style=&quot;color: #a61390;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;UIButton &lt;span style=&quot;color: #002200;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt; sender &lt;span style=&quot;color: #002200;&quot;&gt;==&lt;/span&gt; choosePhotoBtn&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#123;&lt;/span&gt;
		picker.sourceType &lt;span style=&quot;color: #002200;&quot;&gt;=&lt;/span&gt; UIImagePickerControllerSourceTypeSavedPhotosAlbum;
	&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #a61390;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#123;&lt;/span&gt;
		picker.sourceType &lt;span style=&quot;color: #002200;&quot;&gt;=&lt;/span&gt; UIImagePickerControllerSourceTypeCamera;
	&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
	&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;self presentModalViewController&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;picker animated&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #a61390;&quot;&gt;YES&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;;
&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Make sure you synthesize your view properties.  Here is what is going on in this method.&lt;/p&gt;
&lt;p&gt;We first create a new UIImagePickerController object.  This is a view controller and can be displayed any way you would normally display a view controller (pop on to a navigation view stack, load in a tab view, present as modalviewcontroller).  Next, we set the delegate of the picker to our viewController.  This just means the picker will call a method inside of this class when the user picks a photo.&lt;/p&gt;
&lt;p&gt;Next, we determine which button was pressed.  Since both buttons were connected to this method, we can see which one called it by using ==.  Now, here is where Apple has done a great job.  The difference between displaying the camera and photo library comes from setting a single property in the picker.  Looking at the code, it should be pretty obvious which is which.&lt;/p&gt;
&lt;p&gt;Finally, we call presentModalViewController with our picker.  This will animate the picker into view from the bottom of the screen to the top.  Depending on the button you press, you should see one of the views below:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/photo-3.jpg&quot;&gt;&lt;img class=&quot;size-full wp-image-1202 alignnone&quot; title=&quot;photo 3&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/07/photo-3.jpg&quot; alt=&quot;photo 3&quot; width=&quot;320&quot; height=&quot;480&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/photo.jpg&quot;&gt;&lt;img class=&quot;size-full wp-image-1214 alignnone&quot; title=&quot;photo&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/07/photo.jpg&quot; alt=&quot;photo&quot; width=&quot;320&quot; height=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;6. Displaying The Selected Image&lt;/h2&gt;
&lt;p&gt;Once a photo is selected or taken, the ImagePicker will callback to a method in our class called &lt;strong&gt;didFinishPickingMediaWithInfo&lt;/strong&gt;.  Add the following code to your &lt;strong&gt;PhotoAppViewController.m&lt;strong&gt; &lt;/strong&gt;file. &lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;objc&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #002200;&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #a61390;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;imagePickerController&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;UIImagePickerController &lt;span style=&quot;color: #002200;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;picker didFinishPickingMediaWithInfo&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #400080;&quot;&gt;NSDictionary&lt;/span&gt; &lt;span style=&quot;color: #002200;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;info &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#123;&lt;/span&gt;
	&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;picker dismissModalViewControllerAnimated&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #a61390;&quot;&gt;YES&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;;
	imageView.image &lt;span style=&quot;color: #002200;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;info objectForKey&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #bf1d1a;&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color: #bf1d1a;&quot;&gt;&amp;quot;UIImagePickerControllerOriginalImage&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;;
&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The first line just hides the picker.  The next sets to &lt;strong&gt;image&lt;/strong&gt; property of our image view to an image returned from the picker.  The picker actually returns an NSDictionary.  That is because the other key &lt;a href=&quot;http://developer.apple.com/iPhone/library/documentation/UIKit/Reference/UIImagePickerControllerDelegate_Protocol/UIImagePickerControllerDelegate/UIImagePickerControllerDelegate.html#//apple_ref/doc/c_ref/UIImagePickerControllerMediaType&quot; onclick=&quot;pageTracker._trackPageview('/outgoing/developer.apple.com/iPhone/library/documentation/UIKit/Reference/UIImagePickerControllerDelegate_Protocol/UIImagePickerControllerDelegate/UIImagePickerControllerDelegate.html_//apple_ref/doc/c_ref/UIImagePickerControllerMediaType?referer=');&quot;&gt;UIImagePickerControllerMediaType&lt;/a&gt;; will return whether this is a video or an image.&lt;/p&gt;
&lt;p&gt;And there you have it.  A way to get photos from the iPhone&amp;#8217;s image library or camera.  If you have any comments or questions, feel free to write them in the comments section of this post or &lt;a href=&quot;http://twitter.com/brandontreb&quot; onclick=&quot;pageTracker._trackPageview('/outgoing/twitter.com/brandontreb?referer=');&quot;&gt;write them to me on twitter&lt;/a&gt;.  You can download the source below. Happy iCoding!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/PhotoApp.zip&quot;&gt;iPhone Tutorial &amp;#8211; PhotoApp.zip&lt;/a&gt;&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/icodeblog/~4/LsZxqV6Vbqo&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
      <pubDate>Tue, 28 Jul 2009 15:23:33 -0700</pubDate>
      <dc:date>2009-07-28T15:23:33-07:00</dc:date>
    </item>
    <item>
      <title>Programmatically Getting a Screencapture of any UIView</title>
      <link>http://feedproxy.google.com/~r/icodeblog/~3/mPJFjofKSFc/</link>
      <description>&lt;h1&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;Introduction&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;Hey guys. This post is in response to a comment made in my &lt;a title=&quot;NSTimers: The Poor Mans Threading&quot; href=&quot;http://icodeblog.com/2009/07/23/nstimer-the-poor-mans-threading-code-snapshot/&quot; target=&quot;_blank&quot;&gt;last post about NSTimers&lt;/a&gt;. Techy asked if we could do a post on how to take screenshots programmatically using the iPhone SDK. For this minor project we will be creating a small web browser application that will start at www.google.com, and have a button on a toolbar at the bottom to take a picture of the web view and save it into you photo library. Lets take a look.&lt;/p&gt;
&lt;h1&gt;&lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/Screenshots.png&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-1191&quot; title=&quot;Screenshots&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/07/Screenshots.png&quot; alt=&quot;Screenshots&quot; width=&quot;465&quot; height=&quot;457&quot; /&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;h1&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;Source&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;You can get the source here: &lt;a title=&quot;Screenshot Source&quot; href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/ScreenCapture.zip&quot;&gt;Screenshot Project&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;Steps&lt;/span&gt;&lt;/h1&gt;
&lt;h3&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;Step 1&lt;br /&gt;
&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Create a view based application in xCode. Call it whatever.&lt;/p&gt;
&lt;h3&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;Step 2&lt;br /&gt;
&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;In the header for your view controller declare the following:&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;objc&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #6e371a;&quot;&gt;#import &lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #a61390;&quot;&gt;@interface&lt;/span&gt; ScreenCaptureViewController &lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt; UIViewController
&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#123;&lt;/span&gt;
	IBOutlet UIWebView &lt;span style=&quot;color: #002200;&quot;&gt;*&lt;/span&gt;webview;
&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #a61390;&quot;&gt;@property&lt;/span&gt; &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;nonatomic, retain&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt; IBOutlet UIWebView &lt;span style=&quot;color: #002200;&quot;&gt;*&lt;/span&gt;webview;
&amp;nbsp;
&lt;span style=&quot;color: #002200;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;IBAction&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;captureScreen&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #a61390;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;sender;
&amp;nbsp;
&lt;span style=&quot;color: #a61390;&quot;&gt;@end&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;Step 3&lt;br /&gt;
&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Open up your view controller&amp;#8217;s XIB file.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Drag in a UIToolbar and put it at the bottom of the screen.&lt;/li&gt;
&lt;li&gt;Drag in a UIToolbarButtom and name it appropriately.&lt;/li&gt;
&lt;li&gt;Drag in a flexible space holder on either side of the button to center it.&lt;/li&gt;
&lt;li&gt;Drag in a UIWebView to take up the rest of the screen above the toolbar.&lt;/li&gt;
&lt;li&gt;Connect the UIWebView to our webview IBOutlet.&lt;/li&gt;
&lt;li&gt;Connect out UIToolbarButton to our IBAction catureScreen:(id)sender.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;Step 4&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Uncomment out the viewDidLoad method and use the following code:&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;objc&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #002200;&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #a61390;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;viewDidLoad
&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;super viewDidLoad&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;;
&amp;nbsp;
    &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;webview loadRequest&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #400080;&quot;&gt;NSURLRequest&lt;/span&gt; requestWithURL&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #400080;&quot;&gt;NSURL&lt;/span&gt; URLWithString&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #bf1d1a;&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color: #bf1d1a;&quot;&gt;&amp;quot;http://www.google.com&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;;
&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;Step 5&lt;br /&gt;
&lt;/span&gt;&lt;/h3&gt;
&lt;h3&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt; &lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;All the is left to do is create the IBAction captureScreen. This is the code for the method, place it in the main file for your view controller.&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;objc&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #002200;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;IBAction&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;captureScreen&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #a61390;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;sender
&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#123;&lt;/span&gt;
	UIGraphicsBeginImageContext&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;webview.frame.size&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;;
	&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;self.view.layer renderInContext&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;UIGraphicsGetCurrentContext&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;;
	UIImage &lt;span style=&quot;color: #002200;&quot;&gt;*&lt;/span&gt;viewImage &lt;span style=&quot;color: #002200;&quot;&gt;=&lt;/span&gt; UIGraphicsGetImageFromCurrentImageContext&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;;
	UIGraphicsEndImageContext&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;;
	UIImageWriteToSavedPhotosAlbum&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;viewImage, &lt;span style=&quot;color: #a61390;&quot;&gt;nil&lt;/span&gt;, &lt;span style=&quot;color: #a61390;&quot;&gt;nil&lt;/span&gt;, &lt;span style=&quot;color: #a61390;&quot;&gt;nil&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;;
&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h1&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;Conclusion&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;So that is it. You can use this general code to take a screenshot of any UIView subclass. All you need to do is replace webview.frame.size in the third line with foobar.frame.size where foobar is any UIView subclass. Hope this answered your question Techy. Happy Coding.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/icodeblog/~4/mPJFjofKSFc&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
      <pubDate>Mon, 27 Jul 2009 10:41:36 -0700</pubDate>
      <dc:date>2009-07-27T10:41:36-07:00</dc:date>
    </item>
    <item>
      <title>Voices That Matter Conference</title>
      <link>http://www.cimgf.com/2009/07/24/voices-that-matter-conference/</link>
      <description>&lt;p&gt;October 17th and October 18th of this year, the Voices That Matter conference will be occurring in Boston.  I will be speaking at this conference on the subject of Core Animation.  In addition to myself, there is a very nice list of speakers at this conference including Aaron Hillegass, Daniel Jalkut, Fraser Speirs and many others.  &lt;/p&gt;
&lt;p&gt;&lt;center&gt;&lt;img src=&quot;http://www.cimgf.com/wp-content/uploads/2009/07/150x150joinmeiphonevtm.jpg&quot; alt=&quot;Voices That Matter&quot; title=&quot;Voices That Matter&quot; width=&quot;150&quot; height=&quot;150&quot;/&gt;&lt;/center&gt;&lt;/p&gt;
&lt;h2&gt;Early Signup&lt;/h2&gt;
&lt;p&gt;Currently, you can get $200.00 off the the price of the conference if you sign up before the 12th of September. &lt;/p&gt;
&lt;p&gt;In addition, if you use the speaker code &amp;#8216;PHASPKR&amp;#8217;, you can receive an additional $150.00 off the price.  That is a combined discount of $350.00 if you sign up before September 12th.&lt;/p&gt;
&lt;p&gt;http://www.voicesthatmatter.com/iphone2009/&lt;/p&gt;
</description>
      <pubDate>Fri, 24 Jul 2009 20:41:06 -0700</pubDate>
      <dc:date>2009-07-24T20:41:06-07:00</dc:date>
    </item>
    <item>
      <title>iPhone Programming Tutorial: Animating A Game Sprite</title>
      <link>http://feedproxy.google.com/~r/icodeblog/~3/5uMt0LxYV3I/</link>
      <description>&lt;p&gt;One thing I have noticed about many of the games in the app store is they lack animation.  Of course, the huge companies like Sega and PopCap have some pretty amazing animation, but what about us indie iPhone game developers?&lt;/p&gt;
&lt;p&gt;&lt;center&gt;[See post to watch QuickTime movie]&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;Well, Apple has made it quite simple to do animations.  I really feel this method is often overlooked.  I will show you in just a few lines of code, how to completely animate your game images.  I will walk you through creating a simple application that uses animation.  If you don&amp;#8217;t care about creating the app and just want the animation code, &lt;a href=&quot;#animation&quot;&gt;you can skip to this step&lt;/a&gt;.  We will be making an animation of Ryu throwing some punches.&lt;/p&gt;
&lt;h2&gt;1. Create  A View Based Application&lt;/h2&gt;
&lt;p&gt;I&amp;#8217;m not going to explain this one&amp;#8230;&lt;/p&gt;
&lt;h2&gt;2. Add These Images To Your Resources Folder&lt;/h2&gt;
&lt;p&gt;Download&lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/ryu.zip&quot;&gt;ryu.zip&lt;/a&gt;&lt;a href=&quot;http://brandontreb.com/wp-content/uploads/2009/07/ryu1.zip&quot; onclick=&quot;pageTracker._trackPageview('/outgoing/brandontreb.com/wp-content/uploads/2009/07/ryu1.zip?referer=');&quot;&gt;&lt;/a&gt; and unzip it.  Then drag the unzipped files into your &lt;strong&gt;Resources&lt;/strong&gt; folder.  Note: Sprite sheet downloaded from&lt;a href=&quot;http://panelmonkey.org/&quot; onclick=&quot;pageTracker._trackPageview('/outgoing/panelmonkey.org/?referer=');&quot;&gt; http://panelmonkey.org/&lt;/a&gt;.  This file contains 12 images of Ryu from Street Fighter punching.  It also has the background to Blanca&amp;#8217;s stage just for fun.&lt;/p&gt;
&lt;h2&gt;3. Create The Background&lt;/h2&gt;
&lt;p&gt;You don&amp;#8217;t have to do this step, it&amp;#8217;s just to make it pretty.&lt;/p&gt;
&lt;p&gt;Double click on &lt;strong&gt;whateveryoucalledyourapplicationViewController.xib&lt;/strong&gt; to open it in Interface Builder.  Click the arrow button on the view to rotate it.  If you don&amp;#8217;t what I am talking about, check out &lt;a href=&quot;http://icodeblog.com/2009/07/09/integrating-twitter-into-your-applications/&quot;&gt;this post&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Drag a UIImageView on to the screen and stretch it to fill the entire iPhone screen.  In the Attributes inspector select &lt;strong&gt;sfst-blanka.jpg&lt;/strong&gt;.  Make sure mode is set to &lt;strong&gt;center&lt;/strong&gt; as this image has very low resolution. It should look something like this (I have added a black background color).&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img class=&quot;size-full wp-image-1175 aligncenter&quot; title=&quot;screenshot_01&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/07/screenshot_011.png&quot; alt=&quot;screenshot_01&quot; width=&quot;480&quot; height=&quot;342&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;4. Creating The Animation&lt;/h2&gt;
&lt;p&gt;&lt;a name=&quot;#animation&quot;&gt; &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Open up &lt;strong&gt;yourApplicationViewController.m &lt;/strong&gt;and add the following code to the &lt;strong&gt;viewDidLoad&lt;/strong&gt; method.&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;objc&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #002200;&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #a61390;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;viewDidLoad &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;super viewDidLoad&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;;
	&lt;span style=&quot;color: #400080;&quot;&gt;NSArray&lt;/span&gt; &lt;span style=&quot;color: #002200;&quot;&gt;*&lt;/span&gt; imageArray  &lt;span style=&quot;color: #002200;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #400080;&quot;&gt;NSArray&lt;/span&gt; alloc&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt; initWithObjects&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;
							&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;UIImage imageNamed&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #bf1d1a;&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color: #bf1d1a;&quot;&gt;&amp;quot;1.png&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;,
							&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;UIImage imageNamed&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #bf1d1a;&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color: #bf1d1a;&quot;&gt;&amp;quot;2.png&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;,
							&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;UIImage imageNamed&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #bf1d1a;&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color: #bf1d1a;&quot;&gt;&amp;quot;3.png&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;,
							&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;UIImage imageNamed&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #bf1d1a;&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color: #bf1d1a;&quot;&gt;&amp;quot;4.png&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;,
							&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;UIImage imageNamed&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #bf1d1a;&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color: #bf1d1a;&quot;&gt;&amp;quot;5.png&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;,
							&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;UIImage imageNamed&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #bf1d1a;&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color: #bf1d1a;&quot;&gt;&amp;quot;6.png&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;,
							&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;UIImage imageNamed&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #bf1d1a;&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color: #bf1d1a;&quot;&gt;&amp;quot;7.png&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;,
							&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;UIImage imageNamed&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #bf1d1a;&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color: #bf1d1a;&quot;&gt;&amp;quot;8.png&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;,
							&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;UIImage imageNamed&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #bf1d1a;&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color: #bf1d1a;&quot;&gt;&amp;quot;9.png&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;,
							&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;UIImage imageNamed&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #bf1d1a;&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color: #bf1d1a;&quot;&gt;&amp;quot;10.png&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;,
							&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;UIImage imageNamed&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #bf1d1a;&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color: #bf1d1a;&quot;&gt;&amp;quot;11.png&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;,
							&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;UIImage imageNamed&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #bf1d1a;&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color: #bf1d1a;&quot;&gt;&amp;quot;12.png&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;,
							&lt;span style=&quot;color: #a61390;&quot;&gt;nil&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;;
	UIImageView &lt;span style=&quot;color: #002200;&quot;&gt;*&lt;/span&gt; ryuJump &lt;span style=&quot;color: #002200;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;UIImageView alloc&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt; initWithFrame&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;
		CGRectMake&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #2400d9;&quot;&gt;100&lt;/span&gt;, &lt;span style=&quot;color: #2400d9;&quot;&gt;125&lt;/span&gt;, &lt;span style=&quot;color: #2400d9;&quot;&gt;150&lt;/span&gt;, &lt;span style=&quot;color: #2400d9;&quot;&gt;130&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;;
	ryuJump.animationImages &lt;span style=&quot;color: #002200;&quot;&gt;=&lt;/span&gt; imageArray;
	ryuJump.animationDuration &lt;span style=&quot;color: #002200;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #2400d9;&quot;&gt;1.1&lt;/span&gt;;
	ryuJump.contentMode &lt;span style=&quot;color: #002200;&quot;&gt;=&lt;/span&gt; UIViewContentModeBottomLeft;
	&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;self.view addSubview&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;ryuJump&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;;
	&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;ryuJump startAnimating&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;;
&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;For all of you &amp;#8220;1337&amp;#8243; coders that are going to post in the comments telling me &amp;#8220;Why don&amp;#8217;t you use a for loop to load the images&amp;#8221; (very nerdy voice): I am doing it like this, so it is obvious what is going on.  I want to show that you must populate the array with images.&lt;/p&gt;
&lt;p&gt;So here is what is going on in this code:&lt;/p&gt;
&lt;p&gt;We first create an array of &lt;strong&gt;UIImage&lt;/strong&gt;s.  Next, we allocate our &lt;strong&gt;UIImageView&lt;/strong&gt;.&lt;strong&gt; &lt;/strong&gt;The next part is where the magic happens&amp;#8230; Apple has given you a property of UIImageView that is an array of images.  The UIImageView class has a built in functionality to cycle through images at a given interval (hence animating them).&lt;/p&gt;
&lt;p&gt;The next variable we see is the animation duration.  This is the number of seconds it takes to cycle through all of the images.  The default value for this is the number of images multiplied by 1/30.  This will give you a 30 fps frame rate.  Since we have 12 images and not 30, this duration would make our Ryu look like he was on crack.&lt;/p&gt;
&lt;p&gt;In our case, the default would be 12 * (1/30) or .4 . We are going to slow this down significantly to 1.1.  Go ahead and play with this number when creating your animation.&lt;/p&gt;
&lt;p&gt;The next variable is the &lt;strong&gt;contentMode&lt;/strong&gt;.  The content mode determines how the image will fit inside the UIImageView frame.  Since our animation images vary in size, we just make the frame as large as the largest image and set the contentMode to UIViewContentModeBottomLeft.  What this means is, draw the image withough scaling and place it in the bottom left of the UIImageView.  Read up on contentMode to figure out what will be right for your applicaiton.&lt;/p&gt;
&lt;p&gt;Finally, we just add the UIImageView to our main view and call the &lt;strong&gt;startAnimating &lt;/strong&gt;method on it.  This will start the animation of these images.  There are also some other helpful methods you might use when doing animation.  They include &lt;strong&gt;stopAnimating&lt;/strong&gt; and &lt;strong&gt;isAnimating&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;5. Make Sure The Device Starts In Landscape Mode&lt;/h2&gt;
&lt;p&gt;In this example, we assumed that the device was in landscape mode.  Again, read &lt;a href=&quot;../2009/07/09/integrating-twitter-into-your-applications/&quot;&gt;this post&lt;/a&gt; to see how to do this.  It involves adding&lt;strong&gt; Initial interface orientation&lt;/strong&gt; to the info.plist file and adding this code to your viewController.m file.&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;objc&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #002200;&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #a61390;&quot;&gt;BOOL&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;shouldAutorotateToInterfaceOrientation&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;UIInterfaceOrientation&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;interfaceOrientation &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span style=&quot;color: #11740a; font-style: italic;&quot;&gt;// Return YES for supported orientations&lt;/span&gt;
    &lt;span style=&quot;color: #a61390;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;interfaceOrientation &lt;span style=&quot;color: #002200;&quot;&gt;==&lt;/span&gt; UIInterfaceOrientationLandscapeLeft&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;;
&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;That concludes our simple animation tutorial.  Post a question or &lt;a href=&quot;http://twitter.com/brandontreb&quot; onclick=&quot;pageTracker._trackPageview('/outgoing/twitter.com/brandontreb?referer=');&quot;&gt;ask me on Twitter&lt;/a&gt; if you need help.  You can download the source for this tutorial &lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/AnimationApp.zip&quot;&gt;here&lt;/a&gt;. Happy iCoding!&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/icodeblog/~4/5uMt0LxYV3I&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
      <pubDate>Fri, 24 Jul 2009 10:52:15 -0700</pubDate>
      <dc:date>2009-07-24T10:52:15-07:00</dc:date>
    </item>
    <item>
      <title>Interesting Contrast</title>
      <link>http://iphonedevelopment.blogspot.com/2009/07/interesting-contrast.html</link>
      <description>Definitely a sign of the times: Two days ago, Apple announced another &lt;a href=&quot;http://www.apple.com/pr/library/2009/07/21results.html&quot; target=&quot;_blank&quot;&gt;best non-holiday quarter ever&lt;/a&gt;, handily beating analysts' predictions. Today, the once-unstoppable Microsoft reported a &lt;a href=&quot;http://www.microsoft.com/msft/earnings/FY09/earn_rel_q4_09.mspx&quot; target=&quot;_blank&quot;&gt;17% drop in revenue&lt;/a&gt;, marking the first full-year decline in revenue in Microsoft's history and missing analysts predictions by a wide margin. &lt;br /&gt;&lt;br /&gt;It's obviously a good time to be a Mac user. It's been a long time since I've heard anyone predict the death of Apple (a favorite pasttime of analysts and pundits for years) and ignorant comments about Macs being &quot;toys&quot; or &quot;not for serious work&quot; are almost non-existent except for a few bitter and lonely commenters on Reddit and Digg. &lt;br /&gt;&lt;br /&gt;The problems Microsoft is having, no they are not Microsoft's fault.  It's the global slowdown and other things that they have no control over and couldn't have possibly predicted.  &lt;br /&gt;&lt;br /&gt;Let's face it, Microsoft has &quot;Victim Syndrome&quot;. They're not fixing their problems because they haven't truly accepted that they're doing anything wrong. They go so far as to pat themselves on the back for cutting costs and laying people off, saying&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;In light of that environment, it was an excellent achievement to deliver over $750 million of operational savings compared to the prior year quarter.&lt;/i&gt;&lt;/blockquote&gt; Seriously? Operational savings? That's a pussy way of putting it, but I guess &quot;layoffs&quot; sounds too negative. And how does the word &quot;excellent&quot; even get worked into reporting a substantial decline in revenue? And how do they title their release? &lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;The company delivered operational efficiency and innovation in a difficult environment&lt;/i&gt;&lt;/blockquote&gt; Now, compare that with Apple's post-Jobs &lt;a href=&quot;http://www.apple.com/pr/library/2000/dec/05q1results.html&quot; target=&quot;_blank&quot;&gt;earnings statement from December 2000&lt;/a&gt; where they had some similar problems. Right in the title, they called their results &quot;disappointing&quot;. Although Apple pointed out the global PC slump as a contributing factor, the reasons they gave for the loss were that they didn't plan well enough. Apple's approach was, when you cut through the anaylst-speak, to say &quot;we fucked up, we know it, and we're going to fix it&quot;. They acknowledged the problem.&lt;br /&gt;&lt;br /&gt;Microsoft, on the other hand, is trying to convince everyone (themselves included, perhaps) that they are still headed in the right direction and are doing just great, despite overwhelming evidence to the contrary. What they should be telling us is that they've got problems and they know it, and they've got a plan for fixing those problems. &lt;br /&gt;&lt;br /&gt;Microsoft needs an intervention, badly. They need somebody to be a real friend and tell them the harsh truth: that they've got a problem and they need help.&lt;br /&gt;&lt;br /&gt;I've said it before, but I think Microsoft is desperately overdue for a change of leadership. It takes a long time to turn a big ship around, so the sooner Microsoft can get someone with vision at the helm, the better it will be for Microsoft.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;BR/&gt;&lt;font size=&quot;2&quot;&gt;&lt;center&gt;&amp;copy;2009 Jeff LaMarche. &lt;br/&gt;
http://iphonedevelopment.blogspot.com&lt;/center&gt;&lt;/font&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2947441758360063609-8314601509576944990?l=iphonedevelopment.blogspot.com'/&gt;&lt;/div&gt;</description>
      <pubDate>Thu, 23 Jul 2009 13:54:00 -0700</pubDate>
      <dc:date>2009-07-23T13:54:00-07:00</dc:date>
    </item>
    <item>
      <title>Waving the Red Flag</title>
      <link>http://iphonedevelopment.blogspot.com/2009/07/waving-red-flag.html</link>
      <description>Craig Hockenberry has just posted &lt;a href=&quot;http://furbo.org/2009/07/23/waving-a-red-flag/&quot; target=&quot;_blank&quot;&gt;a very important piece of information for anyone with applications on the App Store.&lt;/a&gt;. Go read it.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;BR/&gt;&lt;font size=&quot;2&quot;&gt;&lt;center&gt;&amp;copy;2009 Jeff LaMarche. &lt;br/&gt;
http://iphonedevelopment.blogspot.com&lt;/center&gt;&lt;/font&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2947441758360063609-6338490605150598395?l=iphonedevelopment.blogspot.com'/&gt;&lt;/div&gt;</description>
      <pubDate>Thu, 23 Jul 2009 12:16:00 -0700</pubDate>
      <dc:date>2009-07-23T12:16:00-07:00</dc:date>
    </item>
    <item>
      <title>Waving a red flag</title>
      <link>http://furbo.org/2009/07/23/waving-a-red-flag/</link>
      <description>&lt;p&gt;As a result of my &lt;a href=&quot;http://furbo.org/2009/07/10/year-two/&quot;&gt;last essay&lt;/a&gt;, it has come to my attention that there is a simple and effective way to get Apple&amp;#8217;s attention for critical bug fixes. An email to &lt;code&gt;appreview@apple.com&lt;/code&gt; that explains the critical problem and which product is affected will help speed your update through the system.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Use this email address only for issues with application reviews.&lt;/strong&gt; If you have a problem with iTunes, getting paid or any other part of the App Store business, use the Contact Us section of iTunes Connect.&lt;/p&gt;
&lt;p&gt;Don&amp;#8217;t abuse this important communication channel, or we&amp;#8217;ll lose it.&lt;/p&gt;
</description>
      <pubDate>Thu, 23 Jul 2009 12:05:04 -0700</pubDate>
      <dc:date>2009-07-23T12:05:04-07:00</dc:date>
    </item>
    <item>
      <title>NSTimer: The Poor Man’s Threading – Code Snapshot</title>
      <link>http://feedproxy.google.com/~r/icodeblog/~3/PMeV8mVF3XE/</link>
      <description>&lt;h1&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;Introduction&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;Hey guys. So usually the posts we put up here involve screencasts and presentations, but we are going to start also posting small less time consuming pieces for the site. Today I bring to you a small project involving NSTimers. Today we are going to build an app that represents a horse race. We will create a view with 6 small UIView squares with a blue background at the bottom of the screen, we will use a timer to move a random one of them forward a random amount of distance. Let&amp;#8217;s get started!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/Picture-16.png&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-1164&quot; title=&quot;Picture 16&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/07/Picture-16.png&quot; alt=&quot;Picture 16&quot; width=&quot;351&quot; height=&quot;693&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;Source&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;You can get the source here: &lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/NSTimerDemo.zip&quot;&gt;NSTimerDemo&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;Steps&lt;/span&gt;&lt;/h1&gt;
&lt;h3&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;Step 1&lt;br /&gt;
&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Create a view based application in xCode. Call it whatever.&lt;/p&gt;
&lt;h3&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;Step 2&lt;br /&gt;
&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;In your view controller class header file add:&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;objc&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #400080;&quot;&gt;NSTimer&lt;/span&gt; &lt;span style=&quot;color: #002200;&quot;&gt;*&lt;/span&gt;myTimer;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;Step 3&lt;br /&gt;
&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;In your view controller class, uncomment out the viewDidLoad method and fill in the following code:&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;objc&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #002200;&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #a61390;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;viewDidLoad
&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#123;&lt;/span&gt;
      &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;super viewDidLoad&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;;
&amp;nbsp;
      CGRect workingFrame;
      workingFrame.origin.x &lt;span style=&quot;color: #002200;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #2400d9;&quot;&gt;15&lt;/span&gt;;
      workingFrame.origin.y &lt;span style=&quot;color: #002200;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #2400d9;&quot;&gt;400&lt;/span&gt;;
      workingFrame.size.width &lt;span style=&quot;color: #002200;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #2400d9;&quot;&gt;40&lt;/span&gt;;
      workingFrame.size.height &lt;span style=&quot;color: #002200;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #2400d9;&quot;&gt;40&lt;/span&gt;;
&amp;nbsp;
      &lt;span style=&quot;color: #a61390;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #a61390;&quot;&gt;int&lt;/span&gt; i &lt;span style=&quot;color: #002200;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #2400d9;&quot;&gt;0&lt;/span&gt;; i &lt;span style=&quot;color: #002200;&quot;&gt;&amp;amp;&lt;/span&gt;lt; &lt;span style=&quot;color: #2400d9;&quot;&gt;6&lt;/span&gt;; i&lt;span style=&quot;color: #002200;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;
      &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#123;&lt;/span&gt;
           UIView &lt;span style=&quot;color: #002200;&quot;&gt;*&lt;/span&gt;myView &lt;span style=&quot;color: #002200;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;UIView alloc&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt; initWithFrame&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;workingFrame&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;;
           &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;myView setTag&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;i&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;;
           &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;myView setBackgroundColor&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;UIColor blueColor&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;;
&amp;nbsp;
           workingFrame.origin.x &lt;span style=&quot;color: #002200;&quot;&gt;=&lt;/span&gt; workingFrame.origin.x &lt;span style=&quot;color: #002200;&quot;&gt;+&lt;/span&gt; workingFrame.size.width &lt;span style=&quot;color: #002200;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: #2400d9;&quot;&gt;10&lt;/span&gt;;
           &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;self.view addSubview&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;myView&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;;
      &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
      myTimer &lt;span style=&quot;color: #002200;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #400080;&quot;&gt;NSTimer&lt;/span&gt; scheduledTimerWithTimeInterval&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;.1 target&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;self selector&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #a61390;&quot;&gt;@selector&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;moveACar&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt; userInfo&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #a61390;&quot;&gt;nil&lt;/span&gt; repeats&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #a61390;&quot;&gt;YES&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;;
  &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;Step 4&lt;br /&gt;
&lt;/span&gt;&lt;/h3&gt;
&lt;h3&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt; &lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;In your view controller class, add the following method:&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;objc&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #002200;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #a61390;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;moveACar
&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#123;&lt;/span&gt;
      &lt;span style=&quot;color: #a61390;&quot;&gt;int&lt;/span&gt; r &lt;span style=&quot;color: #002200;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #a61390;&quot;&gt;rand&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #002200;&quot;&gt;%&lt;/span&gt; &lt;span style=&quot;color: #2400d9;&quot;&gt;6&lt;/span&gt;;
      NSLog&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #bf1d1a;&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color: #bf1d1a;&quot;&gt;&amp;quot;My number is %d&amp;quot;&lt;/span&gt;, r&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
      &lt;span style=&quot;color: #a61390;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;UIView &lt;span style=&quot;color: #002200;&quot;&gt;*&lt;/span&gt;aView &lt;span style=&quot;color: #a61390;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;self.view subviews&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;
      &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#123;&lt;/span&gt;
           &lt;span style=&quot;color: #a61390;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;aView tag&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span style=&quot;color: #002200;&quot;&gt;==&lt;/span&gt; r&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;
           &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#123;&lt;/span&gt;
                &lt;span style=&quot;color: #a61390;&quot;&gt;int&lt;/span&gt; movement &lt;span style=&quot;color: #002200;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #a61390;&quot;&gt;rand&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #002200;&quot;&gt;%&lt;/span&gt; &lt;span style=&quot;color: #2400d9;&quot;&gt;100&lt;/span&gt;;
                CGRect workingFrame &lt;span style=&quot;color: #002200;&quot;&gt;=&lt;/span&gt; aView.frame;
                workingFrame.origin.y &lt;span style=&quot;color: #002200;&quot;&gt;=&lt;/span&gt; workingFrame.origin.y &lt;span style=&quot;color: #002200;&quot;&gt;-&lt;/span&gt; movement;
&amp;nbsp;
                &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;UIView beginAnimations&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #a61390;&quot;&gt;nil&lt;/span&gt; context&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #a61390;&quot;&gt;NULL&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;;
                &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;UIView setAnimationDuration&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;.2&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;;
                &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;aView setFrame&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;workingFrame&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;;
                &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;UIView commitAnimations&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;;
&amp;nbsp;
                &lt;span style=&quot;color: #a61390;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;workingFrame.origin.y &lt;span style=&quot;color: #002200;&quot;&gt;&amp;amp;&lt;/span&gt;lt; &lt;span style=&quot;color: #2400d9;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;
                &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#123;&lt;/span&gt;
                    &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;myTimer invalidate&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;;
                &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#125;&lt;/span&gt;
           &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#125;&lt;/span&gt;
      &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h1&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;Conclusion&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;So that is it. Timers are really cool and come in handy for all sorts of small problems in a project. Happy coding.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/icodeblog/~4/PMeV8mVF3XE&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
      <pubDate>Thu, 23 Jul 2009 11:28:26 -0700</pubDate>
      <dc:date>2009-07-23T11:28:26-07:00</dc:date>
    </item>
    <item>
      <title>Microsoft's Ads Redux</title>
      <link>http://iphonedevelopment.blogspot.com/2009/07/microsofts-ads-redux.html</link>
      <description>A &lt;a href=&quot;http://iphonedevelopment.blogspot.com/2009/04/another-microsoft-ad.html&quot; target=&quot;_blank&quot;&gt;while back&lt;/a&gt;, I took Microsoft's new Laptop Hunter series of television advertisements to task for being ill-advised. This line pretty much summed up my point:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;Price is the competitive advantage of generic brands and sweatshop-backed superstores.&lt;/i&gt;&lt;/blockquote&gt;and this was the crux of my argument:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;Now, this [approach] will resonate with some people. There are always people who take a certain pride in buying things cheaply under the assumption that anytime you pay less you get a better value and it's a waste of time comparing the actual products. I doubt that people who think like that are a particularly large percentage of the population. Maybe they are, and maybe this is a brilliant ad, and I'm simply overestimating people. Only time will tell, but I suspect that these ads will help Apple as much as they help Microsoft and, if they have any effect at all, it will simply be to polarize the consumer market even further, giving Apple more of the higher-end, higher-profit sales, and cementing Windows as the operating system of the &quot;cheap&quot; computer. Most people will interpret &quot;just as good&quot; as meaning &quot;not as good&quot;. &lt;/i&gt;&lt;/blockquote&gt;To the extent that I predicted that Microsoft's ads would not have an impact, I was completely 100% wrong. These ads have almost definitely impacted computer purchasing decisions over the last several months. However, unfortunately for Microsoft, the effect the ads seem to have had is &lt;a href=&quot;http://www.betanews.com/joewilcox/article/Apple-has-91-of-market-for-1000-PCs-says-NPD/1248313624&quot;&gt;exactly what I predicted&lt;/a&gt;. The PC market is getting polarized, with Apple becoming the OS of choice for high-end, high-margin computers.&lt;br /&gt;&lt;br /&gt;Microsoft still has overall market share probably in the 80-90% range, which is more than substantial. In fact, it can't be described in any other way than &quot;dominant&quot;. There are very few industries where any player has that kind of market share. &lt;br /&gt;&lt;br /&gt;But, the bulk of the new computers being sold with Windows on them are sub-$1,000 systems. If you look at the systems being sold in that price range, they are mostly computers with outdated components like slower (and less) RAM and older integrated graphics chips. Now, there are plenty of consumers in this price range, and Microsoft is still making a lot of money from their OEM sales. &lt;br /&gt;&lt;br /&gt;But, Apple is now dominating the more lucrative, higher-margin computers, and that dominance has been trending up fairly rapidly. &lt;br /&gt;&lt;br /&gt;This is bad for Microsoft in a number of ways. First, the higher the percentage of low-end, basically obsolete computers that there are running Windows, the smaller the potential market for cool new OS-level features in future versions of Windows is. That means that the opportunities for selling higher-margin retail copies of Windows 7 to existing customers (as opposed to those being sold with a new computer) will be considerably less than the installed base. It's also bad for Microsoft's dominance in the PC game industry. One of the most commonly leveled (and perfectly true) accusations against the Mac is that there aren't many games for it. Cutting edge games, however, usually want to leverage the power of the latest and greatest hardware. If 91% of the systems costing $1,000 or more being sold are Macs, don't think game companies aren't going to take notice. &lt;br /&gt;&lt;br /&gt;But, the biggest and worst problem for Microsoft is just what I stated above. They're setting themselves up as a generic brand. By competing only on price, and touting only price in their advertisements, rather than the actual technological advantages they do have (and they definitely do have some), their current marketing campaigns are instilling and reinforcing the idea that Microsoft creates bland, mediocre, but affordable and serviceable products. They are basically saying the same thing in their ads as Apple is.&lt;br /&gt;&lt;br /&gt;You can argue all day long that your product is better, but if that runs contrary to what you're telling consumers with your marketing, then you're just pissing in the wind. In terms of future sales, it doesn't matter whether Windows is better, it matters whether consumers believe it is better, and Microsoft has stopped telling consumers that.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;BR/&gt;&lt;font size=&quot;2&quot;&gt;&lt;center&gt;&amp;copy;2009 Jeff LaMarche. &lt;br/&gt;
http://iphonedevelopment.blogspot.com&lt;/center&gt;&lt;/font&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2947441758360063609-6856319902104075477?l=iphonedevelopment.blogspot.com'/&gt;&lt;/div&gt;</description>
      <pubDate>Thu, 23 Jul 2009 10:22:00 -0700</pubDate>
      <dc:date>2009-07-23T10:22:00-07:00</dc:date>
    </item>
    <item>
      <title>August 14 Workshop Update</title>
      <link>http://iphonedevelopment.blogspot.com/2009/07/august-14-workshop-update.html</link>
      <description>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://iphonemasterclasses.eventbrite.com/&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 53px;&quot; src=&quot;http://3.bp.blogspot.com/_QLwms0mVa4w/SmdrcADZJ0I/AAAAAAAAAcU/1206BiAcT80/s400/masterbanner.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5361372010202605378&quot; /&gt;&lt;/a&gt;&lt;br /&gt;The &lt;a href=&quot;http://iphonemasterclasses.eventbrite.com/&quot; target=&quot;_blank&quot;&gt;August 14&lt;/a&gt; workshop, for which I am one of the two instructors is filling up fast. I'll be teaching the second part of the workshop on iPhone development; Steve Kochan, author of &lt;i&gt;Programming in Objective-C 2.0&lt;/i&gt;, will be teaching the first part on Objective-C. You can sign up for either the 3-day iPhone session, the 3-day Objective-C session, or do the combined 6-day workshop.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;BR/&gt;&lt;font size=&quot;2&quot;&gt;&lt;center&gt;&amp;copy;2009 Jeff LaMarche. &lt;br/&gt;
http://iphonedevelopment.blogspot.com&lt;/center&gt;&lt;/font&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2947441758360063609-7135491845967073867?l=iphonedevelopment.blogspot.com'/&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 22 Jul 2009 12:26:00 -0700</pubDate>
      <dc:date>2009-07-22T12:26:00-07:00</dc:date>
    </item>
    <item>
      <title>Voices That Matter iPhone Conference | Special iCodeBlog Reader Discount</title>
      <link>http://feedproxy.google.com/~r/icodeblog/~3/F0OMtOWCJTU/</link>
      <description>&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://www.voicesthatmatter.com/iphone2009/&quot; onclick=&quot;pageTracker._trackPageview('/outgoing/www.voicesthatmatter.com/iphone2009/?referer=');&quot;&gt;&lt;img class=&quot;size-full wp-image-1144 aligncenter&quot; title=&quot;150x150JoinMeiPhoneVTM&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/07/150x150JoinMeiPhoneVTM.jpg&quot; alt=&quot;150x150JoinMeiPhoneVTM&quot; width=&quot;150&quot; height=&quot;150&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Calling all iPhone Developers.  Pearson Education has hooked iCodeBlog up with a sweet discount to this year&amp;#8217;s Voices &lt;a href=&quot;http://www.voicesthatmatter.com/iphone2009/&quot; onclick=&quot;pageTracker._trackPageview('/outgoing/www.voicesthatmatter.com/iphone2009/?referer=');&quot;&gt;That Matter iPhone developers conference&lt;/a&gt;.  The conference will take place in Boston starting October 17th.  Here is some info from them (&lt;strong&gt;Including a coupon code for our readers&lt;/strong&gt;)&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Coming to you direct from Addison-Wesley Professional, which has published some of the leading books in the field, the &lt;a href=&quot;http://www.voicesthatmatter.com/iphone2009/&quot; onclick=&quot;pageTracker._trackPageview('/outgoing/www.voicesthatmatter.com/iphone2009/?referer=');&quot;&gt;Voices That Matter: iPhone Developers Conference&lt;/a&gt; is taking place October 17-18 in Boston! This conference is designed for Mac developers looking for a succinct, easy way to get up to speed on the specific skills needed to build, test and distribute successful applications for the iPhone and iPod touch. &lt;strong&gt;Erica Sadun, author of The iPhone Developer’s Cookbook and our event’s technical chair, will lead an&lt;/strong&gt; &lt;a href=&quot;http://iphone2009.crowdvine.com/calendar&quot; onclick=&quot;pageTracker._trackPageview('/outgoing/iphone2009.crowdvine.com/calendar?referer=');&quot;&gt;epic group of speakers&lt;/a&gt; at the conference including Aaron Hillegass, Andy Ihnatko, Jon Rentzsch, Steve Kochan, Fraser Speirs, Lee Barney and lots of others. At this unique event, you will:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Learn the skills needed to build, test, and distribute successful applications for the iPhone and iPod Touch&lt;/li&gt;
&lt;li&gt;Choose the session topics you need to become an iPhone development master&lt;/li&gt;
&lt;li&gt;Network with developers equally as passionate about this exciting platform and where its going&lt;/li&gt;
&lt;li&gt;Leverage your existing skills in a new and profitable way&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;&lt;strong&gt;SPECIAL SAVINGS! &lt;/strong&gt;&lt;/span&gt;As someone that reads this blog, you can save $100 on your conference registration by providing priority code PHBLOG when registering. &lt;a href=&quot;http://www.voicesthatmatter.com/iphone2009/register.aspx&quot; onclick=&quot;pageTracker._trackPageview('/outgoing/www.voicesthatmatter.com/iphone2009/register.aspx?referer=');&quot;&gt;Register&lt;/a&gt; &lt;strong&gt;before September 12th and save a total of $300&lt;/strong&gt; as this $100 discount is combined with the early bird pricing!&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Just in case you were too lazy to read that copy, the coupon code is: &lt;strong&gt;PHBLOG&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I will be there for sure and would love to meet some of the readers in person. Hope to see you there. Happy iCoding!&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/icodeblog/~4/F0OMtOWCJTU&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
      <pubDate>Wed, 22 Jul 2009 09:35:01 -0700</pubDate>
      <dc:date>2009-07-22T09:35:01-07:00</dc:date>
    </item>
    <item>
      <title>Code Snippet: Prevent The iPhone From Sleeping</title>
      <link>http://feedproxy.google.com/~r/icodeblog/~3/_sojrolxO1E/</link>
      <description>&lt;p&gt;The code below will prevent the iPhone from dimming its screen and ultimately going to sleep.  Use it wisely as you don&amp;#8217;t want your application becoming notorious for being a battery hog &lt;img src='http://icodeblog.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /&gt; &lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;objc&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;UIApplication sharedApplication&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;.idleTimerDisabled &lt;span style=&quot;color: #002200;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #a61390;&quot;&gt;YES&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Happy iCoding!&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/icodeblog/~4/_sojrolxO1E&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
      <pubDate>Wed, 22 Jul 2009 09:11:11 -0700</pubDate>
      <dc:date>2009-07-22T09:11:11-07:00</dc:date>
    </item>
    <item>
      <title>Anyone else having issues with MPMoviePlayerController in iPhone OS 3.0?</title>
      <link>http://feedproxy.google.com/~r/icodeblog/~3/EIGbj_1fE9I/</link>
      <description>&lt;p&gt;Ok, so I&amp;#8217;m currently updating an application for work and am getting some strange behavior with MPMoviePlayerController when trying to stream video.  The problem is:&lt;/p&gt;
&lt;p&gt;When the user presses the &amp;#8220;Done&amp;#8221; button on the player during the buffering stage (right after it finishes saying &amp;#8220;loading video&amp;#8230;&amp;#8221; but before the video starts playing), the player hides and the audio (for the video) begins to play in the background.  At this point, there are 3 ways for it to stop.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Start playing another video&lt;/li&gt;
&lt;li&gt;Press the home button and exit the app&lt;/li&gt;
&lt;li&gt;Wait for the video to finish playing&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Here is my code for playing the video.&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;objc&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #002200;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #a61390;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;playMovieAtURL&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #400080;&quot;&gt;NSURL&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;theURL
&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#123;&lt;/span&gt;
	MPMoviePlayerController&lt;span style=&quot;color: #002200;&quot;&gt;*&lt;/span&gt; theMovie &lt;span style=&quot;color: #002200;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;MPMoviePlayerController alloc&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;
	initWithContentURL&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;theURL&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;;
&amp;nbsp;
	theMovie.scalingMode &lt;span style=&quot;color: #002200;&quot;&gt;=&lt;/span&gt; MPMovieScalingModeNone;
	theMovie.movieControlMode &lt;span style=&quot;color: #002200;&quot;&gt;=&lt;/span&gt; MPMovieControlModeDefault;
&amp;nbsp;
	&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #400080;&quot;&gt;NSNotificationCenter&lt;/span&gt; defaultCenter&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt; addObserver&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;self
		selector&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #a61390;&quot;&gt;@selector&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;myMovieFinishedCallback&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;
		name&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;MPMoviePlayerPlaybackDidFinishNotification
		object&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;theMovie&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;;
&amp;nbsp;
	&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;theMovie play&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;;
&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #002200;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #a61390;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;myMovieFinishedCallback&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #400080;&quot;&gt;NSNotification&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;aNotification
&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
	MPMoviePlayerController&lt;span style=&quot;color: #002200;&quot;&gt;*&lt;/span&gt; theMovie &lt;span style=&quot;color: #002200;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;aNotification object&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;;
	&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #400080;&quot;&gt;NSNotificationCenter&lt;/span&gt; defaultCenter&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt; removeObserver&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;self
		name&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;MPMoviePlayerPlaybackDidFinishNotification
		object&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;theMovie&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;;
&amp;nbsp;
	&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;theMovie release&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;;
&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Is this a 3.0 issue or am I doing something dumb?  I have sent a support ticket to Apple and will post a solution if I find one. Please let me know in the comments if you are having the same issue and how you solved it (if you did).&lt;br /&gt;
Happy iCoding!&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/icodeblog/~4/EIGbj_1fE9I&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
      <pubDate>Tue, 21 Jul 2009 11:58:40 -0700</pubDate>
      <dc:date>2009-07-21T11:58:40-07:00</dc:date>
    </item>
    <item>
      <title>To VBO or Not to VBO...</title>
      <link>http://iphonedevelopment.blogspot.com/2009/07/to-vbo-or-not-to-vbo.html</link>
      <description>&lt;a href=&quot;https://twitter.com/dlpasco&quot; target=&quot;_blank&quot;&gt;Daniel Pasco&lt;/a&gt; of &lt;a href=&quot;http://blackpixel.com/&quot; target=&quot;_blank&quot;&gt;Black Pixel Luminance&lt;/a&gt; has an interesting &lt;a href=&quot;http://blackpixel.com/blog/399/iphone-vertex-buffer-object-performance/&quot; target=&quot;_blank&quot;&gt;blog post&lt;/a&gt; today on the comparative performance between using VBOs and not using VBOs.&lt;br /&gt;&lt;br /&gt;Surprising results, to say the least, and it really makes you wonder why Apple is recommending VBOs for the iPhone.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;BR/&gt;&lt;font size=&quot;2&quot;&gt;&lt;center&gt;&amp;copy;2009 Jeff LaMarche. &lt;br/&gt;
http://iphonedevelopment.blogspot.com&lt;/center&gt;&lt;/font&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2947441758360063609-3950689372005167050?l=iphonedevelopment.blogspot.com'/&gt;&lt;/div&gt;</description>
      <pubDate>Tue, 21 Jul 2009 11:33:00 -0700</pubDate>
      <dc:date>2009-07-21T11:33:00-07:00</dc:date>
    </item>
    <item>
      <title>Improved Blender Export</title>
      <link>http://iphonedevelopment.blogspot.com/2009/07/improved-blender-export.html</link>
      <description>Thanks to some help from some readers, I've got a new and improved version of the &lt;a href=&quot;http://innerloop.biz/code/objc.py.zip&quot;&gt;Blender Export Script for Objective-C&lt;/a&gt;. This new version works correctly regardless of whether there's a texture. If you've used vertex paint, it will export the vertex colors. If you have neither vertex colors or a mapped texture, then it will just export the vertices and normals. It will also update the drawing code as appropriate to the data that's been exported.&lt;br /&gt;&lt;br /&gt;Also, new with this version, you don't need to triangulate the faces, nor do you need to apply modifiers. Those will happen automatically in the export without affecting your original model. That should make it easier to update and maintain the models you use in your iPhone apps.&lt;br /&gt;&lt;br /&gt;You can download the new script from the link above. I'm including the script here for the curious:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note of warning:&lt;/b&gt; I have not tested this script very thoroughly, so caveat emptor! Fixes and improvement suggestions welcome, as always.&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;textmate-source mac_classic&quot;&gt;&lt;span class=&quot;source source_python&quot;&gt;&lt;span class=&quot;comment comment_line comment_line_number-sign comment_line_number-sign_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_python&quot;&gt;#&lt;/span&gt;!BPY&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_block string_quoted_double_block_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;br /&gt;Name: 'Objective-C Header (.h)'&lt;br /&gt;Blender: 244&lt;br /&gt;Group: 'Export'&lt;br /&gt;Tooltip: 'Exports header file for use with the OpenGL ES template for iPhone available from http://iphonedevelopment.blogspot.com/'&lt;br /&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;keyword keyword_control keyword_control_import keyword_control_import_python&quot;&gt;import&lt;/span&gt; Blender&lt;br /&gt;&lt;span class=&quot;keyword keyword_control keyword_control_import keyword_control_import_from keyword_control_import_from_python&quot;&gt;from&lt;/span&gt; Blender &lt;span class=&quot;keyword keyword_control keyword_control_import keyword_control_import_python&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_python&quot;&gt;*&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;keyword keyword_control keyword_control_import keyword_control_import_python&quot;&gt;import&lt;/span&gt; bpy&lt;br /&gt;&lt;span class=&quot;keyword keyword_control keyword_control_import keyword_control_import_python&quot;&gt;import&lt;/span&gt; bpy&lt;br /&gt;&lt;span class=&quot;keyword keyword_control keyword_control_import keyword_control_import_python&quot;&gt;import&lt;/span&gt; os&lt;br /&gt;&lt;br /&gt;        &lt;br /&gt;&lt;span class=&quot;meta meta_function meta_function_python&quot;&gt;&lt;span class=&quot;storage storage_type storage_type_function storage_type_function_python&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;entity entity_name entity_name_function entity_name_function_python&quot;&gt;write_obj&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_begin punctuation_definition_parameters_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function meta_function_parameters meta_function_parameters_python&quot;&gt;&lt;span class=&quot;variable variable_parameter variable_parameter_function variable_parameter_function_python&quot;&gt;filepath&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_end punctuation_definition_parameters_end_python&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_function punctuation_section_function_begin punctuation_section_function_begin_python&quot;&gt;:&lt;/span&gt;&lt;/span&gt;    &lt;br /&gt;    out &lt;span class=&quot;keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_python&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;&lt;span class=&quot;support support_type support_type_python&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;filepath, &lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;w&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    sce &lt;span class=&quot;keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_python&quot;&gt;=&lt;/span&gt; bpy.data.scenes.active&lt;br /&gt;    ob &lt;span class=&quot;keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_python&quot;&gt;=&lt;/span&gt; sce.objects.active&lt;br /&gt;    mesh &lt;span class=&quot;keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_python&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;Mesh.New&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;        &lt;br /&gt;    &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;mesh.getFromObject&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;ob.name&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    editmode &lt;span class=&quot;keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_python&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;Window.EditMode&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;keyword keyword_control keyword_control_flow keyword_control_flow_python&quot;&gt;if&lt;/span&gt; editmode: &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;Window.EditMode&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;constant constant_numeric constant_numeric_integer constant_numeric_integer_decimal constant_numeric_integer_decimal_python&quot;&gt;0&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    has_quads &lt;span class=&quot;keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_python&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;constant constant_language constant_language_python&quot;&gt;False&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;keyword keyword_control keyword_control_flow keyword_control_flow_python&quot;&gt;for&lt;/span&gt; f &lt;span class=&quot;keyword keyword_operator keyword_operator_logical keyword_operator_logical_python&quot;&gt;in&lt;/span&gt; mesh.faces:&lt;br /&gt;        &lt;span class=&quot;keyword keyword_control keyword_control_flow keyword_control_flow_python&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;&lt;span class=&quot;support support_function support_function_builtin support_function_builtin_python&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;keyword keyword_operator keyword_operator_comparison keyword_operator_comparison_python&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;constant constant_numeric constant_numeric_integer constant_numeric_integer_decimal constant_numeric_integer_decimal_python&quot;&gt;4&lt;/span&gt;:&lt;br /&gt;            has_quads &lt;span class=&quot;keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_python&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;constant constant_language constant_language_python&quot;&gt;True&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;keyword keyword_control keyword_control_flow keyword_control_flow_python&quot;&gt;break&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;span class=&quot;keyword keyword_control keyword_control_flow keyword_control_flow_python&quot;&gt;if&lt;/span&gt; has_quads:&lt;br /&gt;        oldmode &lt;span class=&quot;keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_python&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;Mesh.Mode&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;Mesh.Mode&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;meta meta_item-access meta_item-access_python&quot;&gt;Mesh.SelectModes&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;meta meta_item-access meta_item-access_arguments meta_item-access_arguments_python&quot;&gt;&lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;FACE&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        mesh.sel &lt;span class=&quot;keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_python&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;constant constant_language constant_language_python&quot;&gt;True&lt;/span&gt;&lt;br /&gt;        tempob &lt;span class=&quot;keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_python&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;sce.objects.new&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;mesh&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;mesh.quadToTriangle&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;constant constant_numeric constant_numeric_integer constant_numeric_integer_decimal constant_numeric_integer_decimal_python&quot;&gt;0&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;comment comment_line comment_line_number-sign comment_line_number-sign_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_python&quot;&gt;#&lt;/span&gt; more=0 shortest length&lt;br /&gt;&lt;/span&gt;        oldmode &lt;span class=&quot;keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_python&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;Mesh.Mode&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;oldmode&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;sce.objects.unlink&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;tempob&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;Mesh.Mode&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;oldmode&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;    objectname &lt;span class=&quot;keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_python&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;ob.getData&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;constant constant_language constant_language_python&quot;&gt;True&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    basename &lt;span class=&quot;keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_python&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;objectname.capitalize&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;out.write&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;#import &quot;OpenGLCommon.h&quot;&lt;span class=&quot;constant constant_character constant_character_escape constant_character_escape_linefeed constant_character_escape_linefeed_python&quot;&gt;\n\n\n&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;    &lt;span class=&quot;keyword keyword_control keyword_control_flow keyword_control_flow_python&quot;&gt;if&lt;/span&gt; (mesh.faceUV):&lt;br /&gt;        &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;out.write&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;static const TexturedVertexData3D &lt;span class=&quot;constant constant_other constant_other_placeholder constant_other_placeholder_python&quot;&gt;%s&lt;/span&gt;VertexData[] = {&lt;span class=&quot;constant constant_character constant_character_escape constant_character_escape_linefeed constant_character_escape_linefeed_python&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_python&quot;&gt;%&lt;/span&gt; basename&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;keyword keyword_control keyword_control_flow keyword_control_flow_python&quot;&gt;for&lt;/span&gt; face &lt;span class=&quot;keyword keyword_operator keyword_operator_logical keyword_operator_logical_python&quot;&gt;in&lt;/span&gt; mesh.faces:&lt;br /&gt;            &lt;span class=&quot;keyword keyword_control keyword_control_flow keyword_control_flow_python&quot;&gt;for&lt;/span&gt; (vert, uvert) &lt;span class=&quot;keyword keyword_operator keyword_operator_logical keyword_operator_logical_python&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;&lt;span class=&quot;support support_function support_function_builtin support_function_builtin_python&quot;&gt;zip&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;face.verts, face.uv&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;:&lt;br /&gt;                &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;out.write&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;constant constant_character constant_character_escape constant_character_escape_tab constant_character_escape_tab_python&quot;&gt;\t&lt;/span&gt;{/*v:*/{&lt;span class=&quot;constant constant_other constant_other_placeholder constant_other_placeholder_python&quot;&gt;%f&lt;/span&gt;, &lt;span class=&quot;constant constant_other constant_other_placeholder constant_other_placeholder_python&quot;&gt;%f&lt;/span&gt;, &lt;span class=&quot;constant constant_other constant_other_placeholder constant_other_placeholder_python&quot;&gt;%f&lt;/span&gt;}, &lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_python&quot;&gt;%&lt;/span&gt; (vert.co.x, vert.co.y, vert.co.z) &lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;                &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;out.write&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;/*n:*/{&lt;span class=&quot;constant constant_other constant_other_placeholder constant_other_placeholder_python&quot;&gt;%f&lt;/span&gt;, &lt;span class=&quot;constant constant_other constant_other_placeholder constant_other_placeholder_python&quot;&gt;%f&lt;/span&gt;, &lt;span class=&quot;constant constant_other constant_other_placeholder constant_other_placeholder_python&quot;&gt;%f&lt;/span&gt;}, &lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_python&quot;&gt;%&lt;/span&gt; (vert.no.x, vert.no.y, vert.no.z)&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;                &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;out.write&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;/*t:*/{&lt;span class=&quot;constant constant_other constant_other_placeholder constant_other_placeholder_python&quot;&gt;%f&lt;/span&gt;, &lt;span class=&quot;constant constant_other constant_other_placeholder constant_other_placeholder_python&quot;&gt;%f&lt;/span&gt;}&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_python&quot;&gt;%&lt;/span&gt; ( uvert.x, uvert.y ) &lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;                &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;out.write&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;},&lt;span class=&quot;constant constant_character constant_character_escape constant_character_escape_linefeed constant_character_escape_linefeed_python&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;out.write&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;};&lt;span class=&quot;constant constant_character constant_character_escape constant_character_escape_linefeed constant_character_escape_linefeed_python&quot;&gt;\n\n&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;keyword keyword_control keyword_control_flow keyword_control_flow_python&quot;&gt;elif&lt;/span&gt; (mesh.vertexColors):&lt;br /&gt;        &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;out.write&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;static const ColoredVertexData3D &lt;span class=&quot;constant constant_other constant_other_placeholder constant_other_placeholder_python&quot;&gt;%s&lt;/span&gt;VertexData[] = {&lt;span class=&quot;constant constant_character constant_character_escape constant_character_escape_linefeed constant_character_escape_linefeed_python&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_python&quot;&gt;%&lt;/span&gt; basename&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;keyword keyword_control keyword_control_flow keyword_control_flow_python&quot;&gt;for&lt;/span&gt; face &lt;span class=&quot;keyword keyword_operator keyword_operator_logical keyword_operator_logical_python&quot;&gt;in&lt;/span&gt; mesh.faces:&lt;br /&gt;            &lt;span class=&quot;keyword keyword_control keyword_control_flow keyword_control_flow_python&quot;&gt;for&lt;/span&gt; (vert, color) &lt;span class=&quot;keyword keyword_operator keyword_operator_logical keyword_operator_logical_python&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;&lt;span class=&quot;support support_function support_function_builtin support_function_builtin_python&quot;&gt;zip&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;face.verts, face.col&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;:&lt;br /&gt;                &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;out.write&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;constant constant_character constant_character_escape constant_character_escape_tab constant_character_escape_tab_python&quot;&gt;\t&lt;/span&gt;{/*v:*/{&lt;span class=&quot;constant constant_other constant_other_placeholder constant_other_placeholder_python&quot;&gt;%f&lt;/span&gt;, &lt;span class=&quot;constant constant_other constant_other_placeholder constant_other_placeholder_python&quot;&gt;%f&lt;/span&gt;, &lt;span class=&quot;constant constant_other constant_other_placeholder constant_other_placeholder_python&quot;&gt;%f&lt;/span&gt;}, &lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_python&quot;&gt;%&lt;/span&gt; (vert.co.x, vert.co.y, vert.co.z) &lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;                &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;out.write&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;/*n:*/{&lt;span class=&quot;constant constant_other constant_other_placeholder constant_other_placeholder_python&quot;&gt;%f&lt;/span&gt;, &lt;span class=&quot;constant constant_other constant_other_placeholder constant_other_placeholder_python&quot;&gt;%f&lt;/span&gt;, &lt;span class=&quot;constant constant_other constant_other_placeholder constant_other_placeholder_python&quot;&gt;%f&lt;/span&gt;}, &lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_python&quot;&gt;%&lt;/span&gt; (vert.no.x, vert.no.y, vert.no.z)&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;                &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;out.write&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;/*c:*/{&lt;span class=&quot;constant constant_other constant_other_placeholder constant_other_placeholder_python&quot;&gt;%f&lt;/span&gt;, &lt;span class=&quot;constant constant_other constant_other_placeholder constant_other_placeholder_python&quot;&gt;%f&lt;/span&gt;, &lt;span class=&quot;constant constant_other constant_other_placeholder constant_other_placeholder_python&quot;&gt;%f&lt;/span&gt;, &lt;span class=&quot;constant constant_other constant_other_placeholder constant_other_placeholder_python&quot;&gt;%f&lt;/span&gt;}&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_python&quot;&gt;%&lt;/span&gt; ( color.r &lt;span class=&quot;keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_python&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;constant constant_numeric constant_numeric_float constant_numeric_float_python&quot;&gt;255.0&lt;/span&gt;, color.g &lt;span class=&quot;keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_python&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;constant constant_numeric constant_numeric_float constant_numeric_float_python&quot;&gt;255.0&lt;/span&gt;, color.b &lt;span class=&quot;keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_python&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;constant constant_numeric constant_numeric_float constant_numeric_float_python&quot;&gt;255.0&lt;/span&gt;, color.a &lt;span class=&quot;keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_python&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;constant constant_numeric constant_numeric_float constant_numeric_float_python&quot;&gt;255.0&lt;/span&gt;) &lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;                &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;out.write&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;},&lt;span class=&quot;constant constant_character constant_character_escape constant_character_escape_linefeed constant_character_escape_linefeed_python&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;out.write&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;};&lt;span class=&quot;constant constant_character constant_character_escape constant_character_escape_linefeed constant_character_escape_linefeed_python&quot;&gt;\n\n&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;keyword keyword_control keyword_control_flow keyword_control_flow_python&quot;&gt;else&lt;/span&gt;:&lt;br /&gt;        out.write&lt;br /&gt;        &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;out.write&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;static const VertexData3D &lt;span class=&quot;constant constant_other constant_other_placeholder constant_other_placeholder_python&quot;&gt;%s&lt;/span&gt;VertexData[] = {&lt;span class=&quot;constant constant_character constant_character_escape constant_character_escape_linefeed constant_character_escape_linefeed_python&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_python&quot;&gt;%&lt;/span&gt; basename&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;keyword keyword_control keyword_control_flow keyword_control_flow_python&quot;&gt;for&lt;/span&gt; face &lt;span class=&quot;keyword keyword_operator keyword_operator_logical keyword_operator_logical_python&quot;&gt;in&lt;/span&gt; mesh.faces:&lt;br /&gt;            &lt;span class=&quot;keyword keyword_control keyword_control_flow keyword_control_flow_python&quot;&gt;for&lt;/span&gt; vert &lt;span class=&quot;keyword keyword_operator keyword_operator_logical keyword_operator_logical_python&quot;&gt;in&lt;/span&gt; face.verts:&lt;br /&gt;                &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;out.write&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;constant constant_character constant_character_escape constant_character_escape_tab constant_character_escape_tab_python&quot;&gt;\t&lt;/span&gt;{/*v:*/{&lt;span class=&quot;constant constant_other constant_other_placeholder constant_other_placeholder_python&quot;&gt;%f&lt;/span&gt;, &lt;span class=&quot;constant constant_other constant_other_placeholder constant_other_placeholder_python&quot;&gt;%f&lt;/span&gt;, &lt;span class=&quot;constant constant_other constant_other_placeholder constant_other_placeholder_python&quot;&gt;%f&lt;/span&gt;}, &lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_python&quot;&gt;%&lt;/span&gt; (vert.co.x, vert.co.y, vert.co.z) &lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;                &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;out.write&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;/*n:*/{&lt;span class=&quot;constant constant_other constant_other_placeholder constant_other_placeholder_python&quot;&gt;%f&lt;/span&gt;, &lt;span class=&quot;constant constant_other constant_other_placeholder constant_other_placeholder_python&quot;&gt;%f&lt;/span&gt;, &lt;span class=&quot;constant constant_other constant_other_placeholder constant_other_placeholder_python&quot;&gt;%f&lt;/span&gt;} &lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_python&quot;&gt;%&lt;/span&gt; (vert.no.x, vert.no.y, vert.no.z)&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;                &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;out.write&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;},&lt;span class=&quot;constant constant_character constant_character_escape constant_character_escape_linefeed constant_character_escape_linefeed_python&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;out.write&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;};&lt;span class=&quot;constant constant_character constant_character_escape constant_character_escape_linefeed constant_character_escape_linefeed_python&quot;&gt;\n\n&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;span class=&quot;keyword keyword_control keyword_control_flow keyword_control_flow_python&quot;&gt;if&lt;/span&gt; editmode: &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;Window.EditMode&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;constant constant_numeric constant_numeric_integer constant_numeric_integer_decimal constant_numeric_integer_decimal_python&quot;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;out.write&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;#define k&lt;span class=&quot;constant constant_other constant_other_placeholder constant_other_placeholder_python&quot;&gt;%s&lt;/span&gt;NumberOfVertices&lt;span class=&quot;constant constant_character constant_character_escape constant_character_escape_tab constant_character_escape_tab_python&quot;&gt;\t&lt;/span&gt;&lt;span class=&quot;constant constant_other constant_other_placeholder constant_other_placeholder_python&quot;&gt;%i&lt;/span&gt;&lt;span class=&quot;constant constant_character constant_character_escape constant_character_escape_linefeed constant_character_escape_linefeed_python&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_python&quot;&gt;%&lt;/span&gt; (basename, &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;&lt;span class=&quot;support support_function support_function_builtin support_function_builtin_python&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;mesh.faces&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_python&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;constant constant_numeric constant_numeric_integer constant_numeric_integer_decimal constant_numeric_integer_decimal_python&quot;&gt;3&lt;/span&gt;) &lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;out.write&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;// Drawing Code:&lt;span class=&quot;constant constant_character constant_character_escape constant_character_escape_linefeed constant_character_escape_linefeed_python&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;out.write&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;// glEnableClientState(GL_VERTEX_ARRAY);&lt;span class=&quot;constant constant_character constant_character_escape constant_character_escape_linefeed constant_character_escape_linefeed_python&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;keyword keyword_control keyword_control_flow keyword_control_flow_python&quot;&gt;if&lt;/span&gt; (mesh.faceUV):&lt;br /&gt;        &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;out.write&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;// glEnableClientState(GL_TEXTURE_COORD_ARRAY);&lt;span class=&quot;constant constant_character constant_character_escape constant_character_escape_linefeed constant_character_escape_linefeed_python&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;keyword keyword_control keyword_control_flow keyword_control_flow_python&quot;&gt;elif&lt;/span&gt; (mesh.vertexColors):&lt;br /&gt;        &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;out.write&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;// glEnableClientState(GL_COLOR_ARRAY);&lt;span class=&quot;constant constant_character constant_character_escape constant_character_escape_linefeed constant_character_escape_linefeed_python&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;out.write&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;// glEnable(GL_COLOR_MATERIAL)&lt;span class=&quot;constant constant_character constant_character_escape constant_character_escape_linefeed constant_character_escape_linefeed_python&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;out.write&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;// glEnableClientState(GL_NORMAL_ARRAY);&lt;span class=&quot;constant constant_character constant_character_escape constant_character_escape_linefeed constant_character_escape_linefeed_python&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;out.write&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;// glVertexPointer(3, GL_FLOAT, sizeof(TexturedVertexData3D), &amp;amp;&lt;span class=&quot;constant constant_other constant_other_placeholder constant_other_placeholder_python&quot;&gt;%s&lt;/span&gt;VertexData[0].vertex);&lt;span class=&quot;constant constant_character constant_character_escape constant_character_escape_linefeed constant_character_escape_linefeed_python&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_python&quot;&gt;%&lt;/span&gt; basename&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;out.write&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;// glNormalPointer(GL_FLOAT, sizeof(TexturedVertexData3D), &amp;amp;&lt;span class=&quot;constant constant_other constant_other_placeholder constant_other_placeholder_python&quot;&gt;%s&lt;/span&gt;VertexData[0].normal);&lt;span class=&quot;constant constant_character constant_character_escape constant_character_escape_linefeed constant_character_escape_linefeed_python&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_python&quot;&gt;%&lt;/span&gt; basename&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;keyword keyword_control keyword_control_flow keyword_control_flow_python&quot;&gt;if&lt;/span&gt; (mesh.faceUV):&lt;br /&gt;        &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;out.write&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;// glTexCoordPointer(2, GL_FLOAT, sizeof(TexturedVertexData3D), &amp;amp;&lt;span class=&quot;constant constant_other constant_other_placeholder constant_other_placeholder_python&quot;&gt;%s&lt;/span&gt;VertexData[0].texCoord);&lt;span class=&quot;constant constant_character constant_character_escape constant_character_escape_linefeed constant_character_escape_linefeed_python&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_python&quot;&gt;%&lt;/span&gt; basename&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;keyword keyword_control keyword_control_flow keyword_control_flow_python&quot;&gt;elif&lt;/span&gt; (mesh.vertexColors):&lt;br /&gt;        &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;out.write&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;// glColorPointer(4, GL_FLOAT, sizeof(ColoredVertexData3D), &amp;amp;&lt;span class=&quot;constant constant_other constant_other_placeholder constant_other_placeholder_python&quot;&gt;%s&lt;/span&gt;VertexData[0].color);&lt;span class=&quot;constant constant_character constant_character_escape constant_character_escape_linefeed constant_character_escape_linefeed_python&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_python&quot;&gt;%&lt;/span&gt; basename&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;out.write&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;// glDrawArrays(GL_TRIANGLES, 0, k&lt;span class=&quot;constant constant_other constant_other_placeholder constant_other_placeholder_python&quot;&gt;%s&lt;/span&gt;NumberOfVertices);&lt;span class=&quot;constant constant_character constant_character_escape constant_character_escape_linefeed constant_character_escape_linefeed_python&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_python&quot;&gt;%&lt;/span&gt; basename&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;out.write&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;// glDisableClientState(GL_VERTEX_ARRAY);&lt;span class=&quot;constant constant_character constant_character_escape constant_character_escape_linefeed constant_character_escape_linefeed_python&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;keyword keyword_control keyword_control_flow keyword_control_flow_python&quot;&gt;if&lt;/span&gt; (mesh.faceUV):&lt;br /&gt;        &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;out.write&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;// glDisableClientState(GL_TEXTURE_COORD_ARRAY);&lt;span class=&quot;constant constant_character constant_character_escape constant_character_escape_linefeed constant_character_escape_linefeed_python&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;keyword keyword_control keyword_control_flow keyword_control_flow_python&quot;&gt;elif&lt;/span&gt; (mesh.vertexColors):&lt;br /&gt;        &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;out.write&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;// glDisableClientState(GL_NORMAL_ARRAY);&lt;span class=&quot;constant constant_character constant_character_escape constant_character_escape_linefeed constant_character_escape_linefeed_python&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;out.write&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;// glDisable(GL_COLOR_MATERIAL);&lt;span class=&quot;constant constant_character constant_character_escape constant_character_escape_linefeed constant_character_escape_linefeed_python&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;out.write&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;// glDisableClientState(GL_NORMAL_ARRAY);&lt;span class=&quot;constant constant_character constant_character_escape constant_character_escape_linefeed constant_character_escape_linefeed_python&quot;&gt;\n\n\n&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;out.close&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;filename &lt;span class=&quot;keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_python&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;os.path.splitext&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;Blender.Get&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;&lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;filename&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta meta_item-access meta_item-access_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;meta meta_item-access meta_item-access_arguments meta_item-access_arguments_python&quot;&gt;&lt;span class=&quot;constant constant_numeric constant_numeric_integer constant_numeric_integer_decimal constant_numeric_integer_decimal_python&quot;&gt;0&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_python&quot;&gt;Blender.Window.FileSelector&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_begin punctuation_definition_arguments_begin_python&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_function-call meta_function-call_arguments meta_function-call_arguments_python&quot;&gt;write_obj, &lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_single-line string_quoted_double_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;&quot;&lt;/span&gt;Export&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;string string_quoted string_quoted_single string_quoted_single_single-line string_quoted_single_single-line_python&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_python&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;constant constant_other constant_other_placeholder constant_other_placeholder_python&quot;&gt;%s&lt;/span&gt;.h&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_python&quot;&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_python&quot;&gt;%&lt;/span&gt; filename&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_arguments punctuation_definition_arguments_end punctuation_definition_arguments_end_python&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;font size=&quot;2&quot;&gt;&lt;i&gt;Thanks to Scott Lyons and Dennis Ippel for their Python and Blender API smarts. I couldn't have gotten this far without their help.&lt;/i&gt;&lt;/font&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;BR/&gt;&lt;font size=&quot;2&quot;&gt;&lt;center&gt;&amp;copy;2009 Jeff LaMarche. &lt;br/&gt;
http://iphonedevelopment.blogspot.com&lt;/center&gt;&lt;/font&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2947441758360063609-7306280047603001570?l=iphonedevelopment.blogspot.com'/&gt;&lt;/div&gt;</description>
      <pubDate>Tue, 21 Jul 2009 09:18:00 -0700</pubDate>
      <dc:date>2009-07-21T09:18:00-07:00</dc:date>
    </item>
    <item>
      <title>Refactoring Nav from Chapter 9</title>
      <link>http://iphonedevelopment.blogspot.com/2009/07/refactoring-nav-from-chapter-9.html</link>
      <description>I received an interesting question (in the form of a tweet) today about Chapter 9. An observant reader asked if there was a way to &quot;DRY&quot; (Don't Repeat Yourself) the code where we add all the controllers to the array that drives the root view controller's table, this code here:&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;textmate-source mac_classic&quot;&gt;&lt;span class=&quot;source source_objc source_objc_iphone&quot;&gt;- (&lt;span class=&quot;storage storage_type storage_type_c&quot;&gt;void&lt;/span&gt;)viewDidLoad &lt;span class=&quot;meta meta_block meta_block_c&quot;&gt;{&lt;br /&gt;    self&lt;span class=&quot;variable variable_other variable_other_dot-access variable_other_dot-access_c&quot;&gt;.title&lt;/span&gt; = &lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;First Level&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    &lt;span class=&quot;support support_class support_class_cocoa&quot;&gt;NSMutableArray&lt;/span&gt; *array = &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;support support_class support_class_cocoa&quot;&gt;NSMutableArray&lt;/span&gt; &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;alloc&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;init&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;span class=&quot;comment comment_line comment_line_double-slash comment_line_double-slash_c++&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_c&quot;&gt;//&lt;/span&gt; Disclosure Button&lt;br /&gt;&lt;/span&gt;    DisclosureButtonController *disclosureButtonController =&lt;br /&gt;        &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;DisclosureButtonController &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;alloc&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;        initWithStyle:UITableViewStylePlain&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    disclosureButtonController&lt;span class=&quot;variable variable_other variable_other_dot-access variable_other_dot-access_c&quot;&gt;.title&lt;/span&gt; = &lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;Disclosure Buttons&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    disclosureButtonController&lt;span class=&quot;variable variable_other variable_other_dot-access variable_other_dot-access_c&quot;&gt;.rowImage&lt;/span&gt; = &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;UIImage &lt;br /&gt;        imageNamed:&lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;disclosureButtonControllerIcon.png&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;array &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;addObject&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;disclosureButtonController&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;disclosureButtonController &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;release&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;  &lt;br /&gt;&lt;br /&gt;    &lt;span class=&quot;comment comment_line comment_line_double-slash comment_line_double-slash_c++&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_c&quot;&gt;//&lt;/span&gt; Check List &lt;br /&gt;&lt;/span&gt;    CheckListController *checkListController = &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;CheckListController &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;alloc&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        initWithStyle:UITableViewStylePlain&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    checkListController&lt;span class=&quot;variable variable_other variable_other_dot-access variable_other_dot-access_c&quot;&gt;.title&lt;/span&gt; = &lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;Check One&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    checkListController&lt;span class=&quot;variable variable_other variable_other_dot-access variable_other_dot-access_c&quot;&gt;.rowImage&lt;/span&gt; = &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;UIImage &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;imageNamed&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;checkmarkControllerIcon.png&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;array &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;addObject&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;checkListController&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;checkListController &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;release&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;span class=&quot;comment comment_line comment_line_double-slash comment_line_double-slash_c++&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_c&quot;&gt;//&lt;/span&gt; Table Row Controls&lt;br /&gt;&lt;/span&gt;    RowControlsController *rowControlsController = &lt;br /&gt;        &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;RowControlsController &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;alloc&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;        initWithStyle:UITableViewStylePlain&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    rowControlsController&lt;span class=&quot;variable variable_other variable_other_dot-access variable_other_dot-access_c&quot;&gt;.title&lt;/span&gt; = &lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;Row Controls&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    rowControlsController&lt;span class=&quot;variable variable_other variable_other_dot-access variable_other_dot-access_c&quot;&gt;.rowImage&lt;/span&gt; = &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;UIImage &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;imageNamed&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;rowControlsIcon.png&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;array &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;addObject&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;rowControlsController&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;rowControlsController &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;release&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class=&quot;comment comment_line comment_line_double-slash comment_line_double-slash_c++&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_c&quot;&gt;//&lt;/span&gt; Move Me&lt;br /&gt;&lt;/span&gt;    MoveMeController *moveMeController = &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;MoveMeController &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;alloc&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        initWithStyle:UITableViewStylePlain&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    moveMeController&lt;span class=&quot;variable variable_other variable_other_dot-access variable_other_dot-access_c&quot;&gt;.title&lt;/span&gt; = &lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;Move Me&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    moveMeController&lt;span class=&quot;variable variable_other variable_other_dot-access variable_other_dot-access_c&quot;&gt;.rowImage&lt;/span&gt; = &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;UIImage &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;imageNamed&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;moveMeIcon.png&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;array &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;addObject&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;moveMeController&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;moveMeController &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;release&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;span class=&quot;comment comment_line comment_line_double-slash comment_line_double-slash_c++&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_c&quot;&gt;//&lt;/span&gt; Delete Me&lt;br /&gt;&lt;/span&gt;    DeleteMeController *deleteMeController = &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;DeleteMeController &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;alloc&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;        initWithStyle:UITableViewStylePlain&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    deleteMeController&lt;span class=&quot;variable variable_other variable_other_dot-access variable_other_dot-access_c&quot;&gt;.title&lt;/span&gt; = &lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;Delete Me&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    deleteMeController&lt;span class=&quot;variable variable_other variable_other_dot-access variable_other_dot-access_c&quot;&gt;.rowImage&lt;/span&gt; = &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;UIImage &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;imageNamed&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;deleteMeIcon.png&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;array &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;addObject&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;deleteMeController&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;deleteMeController &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;release&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;span class=&quot;comment comment_line comment_line_double-slash comment_line_double-slash_c++&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_c&quot;&gt;//&lt;/span&gt; President View/Edit&lt;br /&gt;&lt;/span&gt;    PresidentsViewController *presidentsViewController = &lt;br /&gt;        &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;PresidentsViewController &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;alloc&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;        initWithStyle:UITableViewStylePlain&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    presidentsViewController&lt;span class=&quot;variable variable_other variable_other_dot-access variable_other_dot-access_c&quot;&gt;.title&lt;/span&gt; = &lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;Detail Edit&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    presidentsViewController&lt;span class=&quot;variable variable_other variable_other_dot-access variable_other_dot-access_c&quot;&gt;.rowImage&lt;/span&gt; = &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;UIImage &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;imageNamed&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;detailEditIcon.png&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;array &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;addObject&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;presidentsViewController&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;presidentsViewController &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;release&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;    &lt;br /&gt;&lt;br /&gt;    self&lt;span class=&quot;variable variable_other variable_other_dot-access variable_other_dot-access_c&quot;&gt;.controllers&lt;/span&gt; = array;&lt;br /&gt;    &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;array &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;release&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;variable variable_language variable_language_objc&quot;&gt;super&lt;/span&gt; &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;viewDidLoad&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;It's a good spot. This is, in fact, a prime candidate for refactoring. Notice how similar all the chunks of code are. With the exception of the controller class, title, and image name, each chunk of code is basically identical.&lt;br /&gt;&lt;br /&gt;The answer to whether this can be DRY'ed, yes. This can be refactored in Objective-C and probably should. We didn't do it in the book basically because Chapter 9 was already long enough without having to use Class objects or the Objective-C runtime, and we were concerned this would add something confusing to an already long and difficult chapter.&lt;br /&gt;&lt;br /&gt;But, my blog doesn't have to be only beginner friendly, so let's look at how we could refactor this chunk of code. First and foremost, let's start by changing the &lt;font face=&quot;monospace&quot;&gt;controllers&lt;/font&gt; property from an &lt;font face=&quot;monospace&quot;&gt;NSArray&lt;/font&gt; to an &lt;font face=&quot;monospace&quot;&gt;NSMutableArray&lt;/font&gt; so its contents can be modified by an instance method.&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;textmate-source mac_classic&quot;&gt;&lt;span class=&quot;source source_objc source_objc_iphone&quot;&gt;&lt;span class=&quot;meta meta_preprocessor meta_preprocessor_c meta_preprocessor_c_include&quot;&gt;#&lt;span class=&quot;keyword keyword_control keyword_control_import keyword_control_import_include keyword_control_import_include_c&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;string string_quoted string_quoted_other string_quoted_other_lt-gt string_quoted_other_lt-gt_include string_quoted_other_lt-gt_include_c&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_c&quot;&gt;&amp;lt;&lt;/span&gt;Foundation/Foundation.h&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_c&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;meta meta_interface-or-protocol meta_interface-or-protocol_objc&quot;&gt;&lt;span class=&quot;storage storage_type storage_type_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_storage punctuation_definition_storage_type punctuation_definition_storage_type_objc&quot;&gt;@&lt;/span&gt;interface&lt;/span&gt; &lt;span class=&quot;entity entity_name entity_name_type entity_name_type_objc&quot;&gt;FirstLevelViewController&lt;/span&gt; &lt;span class=&quot;punctuation punctuation_definition punctuation_definition_entity punctuation_definition_entity_other punctuation_definition_entity_other_inherited-class punctuation_definition_entity_other_inherited-class_objc&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;entity entity_other entity_other_inherited-class entity_other_inherited-class_objc&quot;&gt;UITableViewController&lt;/span&gt;&lt;span class=&quot;meta meta_divider meta_divider_objc&quot;&gt; &lt;/span&gt;&lt;span class=&quot;meta meta_scope meta_scope_interface meta_scope_interface_objc&quot;&gt;&lt;span class=&quot;meta meta_block meta_block_c&quot;&gt;{&lt;br /&gt;    &lt;span class=&quot;support support_class support_class_cocoa&quot;&gt;NSMutableArray&lt;/span&gt; *controllers;&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;meta meta_property-with-attributes meta_property-with-attributes_objc&quot;&gt;&lt;span class=&quot;keyword keyword_other keyword_other_property keyword_other_property_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_keyword punctuation_definition_keyword_objc&quot;&gt;@&lt;/span&gt;property&lt;/span&gt; &lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;keyword keyword_other keyword_other_property keyword_other_property_attribute&quot;&gt;nonatomic&lt;/span&gt;, &lt;span class=&quot;keyword keyword_other keyword_other_property keyword_other_property_attribute&quot;&gt;retain&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;)&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;support support_class support_class_cocoa&quot;&gt;NSMutableArray&lt;/span&gt; *controllers;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;storage storage_type storage_type_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_storage punctuation_definition_storage_type punctuation_definition_storage_type_objc&quot;&gt;@&lt;/span&gt;end&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;Next, we can create a method that will add a controller to that array. Since the items that are not the same between the various chunks of code are the controller class, the title, and the image name, we need the method to take arguments for each of those. &lt;br /&gt;&lt;br /&gt;If we know and have access at compile time to all the classes that we will be using, we can do this pretty easily by creating a method that takes a &lt;font face=&quot;monospace&quot;&gt;Class&lt;/font&gt; object. This is the object that represents the singleton meta-object that exists for every Objective-C class. When you call a class method, you are actually calling a method on this object and you can call class methods on &lt;font face=&quot;monospace&quot;&gt;Class&lt;/font&gt; objects. So, in this scenario where we know all the classes we'll be using, we can write this method:&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;textmate-source mac_classic&quot;&gt;&lt;span class=&quot;source source_objc source_objc_iphone&quot;&gt;- (&lt;span class=&quot;storage storage_type storage_type_c&quot;&gt;void&lt;/span&gt;)addControllerOfClass:(&lt;span class=&quot;storage storage_type storage_type_objc&quot;&gt;Class&lt;/span&gt;)controllerClass usingTitle:(&lt;span class=&quot;support support_class support_class_cocoa&quot;&gt;NSString&lt;/span&gt; *)title withImageNamed:(&lt;span class=&quot;support support_class support_class_cocoa&quot;&gt;NSString&lt;/span&gt; *)imageName &lt;span class=&quot;meta meta_block meta_block_c&quot;&gt;{&lt;br /&gt;    SecondLevelViewController *controller = &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;controllerClass &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;alloc&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;initWithStyle&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;UITableViewStylePlain&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    controller&lt;span class=&quot;variable variable_other variable_other_dot-access variable_other_dot-access_c&quot;&gt;.title&lt;/span&gt; = title;&lt;br /&gt;    controller&lt;span class=&quot;variable variable_other variable_other_dot-access variable_other_dot-access_c&quot;&gt;.rowImage&lt;/span&gt; = &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;UIImage &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;imageNamed&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;imageName&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;variable variable_language variable_language_objc&quot;&gt;self&lt;/span&gt;.controllers &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;addObject&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;controller&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;controller &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;release&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;We create an instance of the correct class by calling &lt;font face=&quot;monospace&quot;&gt;alloc&lt;/font&gt; on the &lt;font face=&quot;monospace&quot;&gt;Class&lt;/font&gt; object, which returns an instance, which we can then initialize ordinarily. We declare this an instance to be the abstract superclass of all the second level controllers, &lt;font face=&quot;monospace&quot;&gt;SecondLevelViewController&lt;/font&gt;, which allows us to use both the &lt;font face=&quot;monospace&quot;&gt;title&lt;/font&gt; and rowImage&lt;/font&gt; properties without having to typecast or set the values by key.&lt;br /&gt;&lt;br /&gt;Then, our &lt;font face=&quot;monospace&quot;&gt;viewDidLoad&lt;/font&gt; method becomes much, much shorter and without all the repeated code:&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;textmate-source mac_classic&quot;&gt;&lt;span class=&quot;source source_objc source_objc_iphone&quot;&gt;- (&lt;span class=&quot;storage storage_type storage_type_c&quot;&gt;void&lt;/span&gt;)viewDidLoad &lt;span class=&quot;meta meta_block meta_block_c&quot;&gt;{&lt;br /&gt;    self&lt;span class=&quot;variable variable_other variable_other_dot-access variable_other_dot-access_c&quot;&gt;.title&lt;/span&gt; = &lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;First Level&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    &lt;span class=&quot;support support_class support_class_cocoa&quot;&gt;NSMutableArray&lt;/span&gt; *array = &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;support support_class support_class_cocoa&quot;&gt;NSMutableArray&lt;/span&gt; &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;alloc&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;init&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    self&lt;span class=&quot;variable variable_other variable_other_dot-access variable_other_dot-access_c&quot;&gt;.controllers&lt;/span&gt; = array;&lt;br /&gt;    &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;array &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;release&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    &lt;br /&gt;    &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;variable variable_language variable_language_objc&quot;&gt;self&lt;/span&gt; &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;addControllerOfClass&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;DisclosureButtonController &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;class&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;support support_function support_function_any-method support_function_any-method_name-of-parameter support_function_any-method_name-of-parameter_objc&quot;&gt;usingTitle&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;Disclosure Buttons&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;support support_function support_function_any-method support_function_any-method_name-of-parameter support_function_any-method_name-of-parameter_objc&quot;&gt;withImageNamed&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;disclosureButtonControllerIcon.png&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;variable variable_language variable_language_objc&quot;&gt;self&lt;/span&gt; &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;addControllerOfClass&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;CheckListController &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;class&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;support support_function support_function_any-method support_function_any-method_name-of-parameter support_function_any-method_name-of-parameter_objc&quot;&gt;usingTitle&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;Check One&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;support support_function support_function_any-method support_function_any-method_name-of-parameter support_function_any-method_name-of-parameter_objc&quot;&gt;withImageNamed&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;checkmarkControllerIcon.png&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;; &lt;br /&gt;    &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;variable variable_language variable_language_objc&quot;&gt;self&lt;/span&gt; &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;addControllerOfClass&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;RowControlsController &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;class&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;support support_function support_function_any-method support_function_any-method_name-of-parameter support_function_any-method_name-of-parameter_objc&quot;&gt;usingTitle&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;Row Controls&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;support support_function support_function_any-method support_function_any-method_name-of-parameter support_function_any-method_name-of-parameter_objc&quot;&gt;withImageNamed&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;rowControlsIcon.png&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;variable variable_language variable_language_objc&quot;&gt;self&lt;/span&gt; &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;addControllerOfClass&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;MoveMeController &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;class&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;support support_function support_function_any-method support_function_any-method_name-of-parameter support_function_any-method_name-of-parameter_objc&quot;&gt;usingTitle&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;Move Me&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;support support_function support_function_any-method support_function_any-method_name-of-parameter support_function_any-method_name-of-parameter_objc&quot;&gt;withImageNamed&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;moveMeIcon.png&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;variable variable_language variable_language_objc&quot;&gt;self&lt;/span&gt; &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;addControllerOfClass&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;DeleteMeController &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;class&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;support support_function support_function_any-method support_function_any-method_name-of-parameter support_function_any-method_name-of-parameter_objc&quot;&gt;usingTitle&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;Delete Me&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;support support_function support_function_any-method support_function_any-method_name-of-parameter support_function_any-method_name-of-parameter_objc&quot;&gt;withImageNamed&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;deleteMeIcon.png&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;variable variable_language variable_language_objc&quot;&gt;self&lt;/span&gt; &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;addControllerOfClass&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;PresidentsViewController &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;class&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;support support_function support_function_any-method support_function_any-method_name-of-parameter support_function_any-method_name-of-parameter_objc&quot;&gt;usingTitle&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;Detail Edit&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;support support_function support_function_any-method support_function_any-method_name-of-parameter support_function_any-method_name-of-parameter_objc&quot;&gt;withImageNamed&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;detailEditIcon.png&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    &lt;br /&gt;    &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;variable variable_language variable_language_objc&quot;&gt;super&lt;/span&gt; &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;viewDidLoad&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;But, what if you don't know all the classes at compile time? Say, if you want to create a generic class to go into a static library? You can still do it, but you lose the compile-time check for the class and have to use an Objective-C runtime method to derive a &lt;font face=&quot;monospace&quot;&gt;Class&lt;/font&gt; object from the name of the class. Easy enough, though. Under that scenario, here's our new method:&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;textmate-source mac_classic&quot;&gt;&lt;span class=&quot;source source_objc source_objc_iphone&quot;&gt;- (&lt;span class=&quot;storage storage_type storage_type_c&quot;&gt;void&lt;/span&gt;)addControllerOfName:(&lt;span class=&quot;support support_class support_class_cocoa&quot;&gt;NSString&lt;/span&gt; *)controllerClassName usingTitle:(&lt;span class=&quot;support support_class support_class_cocoa&quot;&gt;NSString&lt;/span&gt; *)title withImageNamed:(&lt;span class=&quot;support support_class support_class_cocoa&quot;&gt;NSString&lt;/span&gt; *)imageName &lt;span class=&quot;meta meta_block meta_block_c&quot;&gt;{&lt;br /&gt;    &lt;br /&gt;    &lt;span class=&quot;storage storage_type storage_type_objc&quot;&gt;Class&lt;/span&gt; controllerClass =&lt;span class=&quot;meta meta_function-call meta_function-call_c&quot;&gt;&lt;span class=&quot;punctuation punctuation_whitespace punctuation_whitespace_function-call punctuation_whitespace_function-call_leading punctuation_whitespace_function-call_leading_c&quot;&gt; &lt;/span&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_c&quot;&gt;objc_getClass&lt;/span&gt;(&lt;/span&gt;&lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;controllerClassName &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;UTF8String&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;);&lt;br /&gt;    SecondLevelViewController *controller = &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;controllerClass &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;alloc&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;initWithStyle&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;UITableViewStylePlain&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    controller&lt;span class=&quot;variable variable_other variable_other_dot-access variable_other_dot-access_c&quot;&gt;.title&lt;/span&gt; = title;&lt;br /&gt;    controller&lt;span class=&quot;variable variable_other variable_other_dot-access variable_other_dot-access_c&quot;&gt;.rowImage&lt;/span&gt; = &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;UIImage &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;imageNamed&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;imageName&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;variable variable_language variable_language_objc&quot;&gt;self&lt;/span&gt;.controllers &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;addObject&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;controller&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;controller &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;release&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;Notice that the only difference is that we take an &lt;font face=&quot;monospace&quot;&gt;NSString *&lt;/font&gt; parameter rather than a &lt;font face=&quot;monospace&quot;&gt;Class&lt;/font&gt; parameter, and then we get the correct &lt;font face=&quot;monospace&quot;&gt;Class&lt;/font&gt; object using the Objective-C runtime function called &lt;font face=&quot;monospace&quot;&gt;objc_getClass()&lt;/font&gt;. This function actually takes a C-string, not an &lt;font face=&quot;monospace&quot;&gt;NSString&lt;/font&gt;, so we get a C-string using the &lt;font face=&quot;monospace&quot;&gt;UTF8String&lt;/font&gt; instance method on our &lt;font face=&quot;monospace&quot;&gt;NSString&lt;/font&gt;.&lt;br /&gt;&lt;br /&gt;In this case, we have to change our &lt;font face=&quot;monospace&quot;&gt;viewDidLoad&lt;/font&gt; method slightly to pass string constants, rather than &lt;font face=&quot;monospace&quot;&gt;Class&lt;/font&gt; objects:&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;textmate-source mac_classic&quot;&gt;&lt;span class=&quot;source source_objc source_objc_iphone&quot;&gt;- (&lt;span class=&quot;storage storage_type storage_type_c&quot;&gt;void&lt;/span&gt;)viewDidLoad &lt;span class=&quot;meta meta_block meta_block_c&quot;&gt;{&lt;br /&gt;    self&lt;span class=&quot;variable variable_other variable_other_dot-access variable_other_dot-access_c&quot;&gt;.title&lt;/span&gt; = &lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;First Level&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    &lt;span class=&quot;support support_class support_class_cocoa&quot;&gt;NSMutableArray&lt;/span&gt; *array = &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;support support_class support_class_cocoa&quot;&gt;NSMutableArray&lt;/span&gt; &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;alloc&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;init&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    self&lt;span class=&quot;variable variable_other variable_other_dot-access variable_other_dot-access_c&quot;&gt;.controllers&lt;/span&gt; = array;&lt;br /&gt;    &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;array &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;release&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    &lt;br /&gt;    &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;variable variable_language variable_language_objc&quot;&gt;self&lt;/span&gt; &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;addControllerOfName&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;DisclosureButtonController&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;support support_function support_function_any-method support_function_any-method_name-of-parameter support_function_any-method_name-of-parameter_objc&quot;&gt;usingTitle&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;Disclosure Buttons&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;support support_function support_function_any-method support_function_any-method_name-of-parameter support_function_any-method_name-of-parameter_objc&quot;&gt;withImageNamed&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;disclosureButtonControllerIcon.png&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;variable variable_language variable_language_objc&quot;&gt;self&lt;/span&gt; &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;addControllerOfName&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;CheckListController&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;support support_function support_function_any-method support_function_any-method_name-of-parameter support_function_any-method_name-of-parameter_objc&quot;&gt;usingTitle&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;Check One&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;support support_function support_function_any-method support_function_any-method_name-of-parameter support_function_any-method_name-of-parameter_objc&quot;&gt;withImageNamed&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;checkmarkControllerIcon.png&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;; &lt;br /&gt;    &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;variable variable_language variable_language_objc&quot;&gt;self&lt;/span&gt; &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;addControllerOfName&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;RowControlsController&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;support support_function support_function_any-method support_function_any-method_name-of-parameter support_function_any-method_name-of-parameter_objc&quot;&gt;usingTitle&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;Row Controls&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;support support_function support_function_any-method support_function_any-method_name-of-parameter support_function_any-method_name-of-parameter_objc&quot;&gt;withImageNamed&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;rowControlsIcon.png&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;variable variable_language variable_language_objc&quot;&gt;self&lt;/span&gt; &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;addControllerOfName&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;MoveMeController&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;support support_function support_function_any-method support_function_any-method_name-of-parameter support_function_any-method_name-of-parameter_objc&quot;&gt;usingTitle&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;Move Me&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;support support_function support_function_any-method support_function_any-method_name-of-parameter support_function_any-method_name-of-parameter_objc&quot;&gt;withImageNamed&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;moveMeIcon.png&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;variable variable_language variable_language_objc&quot;&gt;self&lt;/span&gt; &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;addControllerOfName&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;DeleteMeController&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;support support_function support_function_any-method support_function_any-method_name-of-parameter support_function_any-method_name-of-parameter_objc&quot;&gt;usingTitle&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;Delete Me&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;support support_function support_function_any-method support_function_any-method_name-of-parameter support_function_any-method_name-of-parameter_objc&quot;&gt;withImageNamed&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;deleteMeIcon.png&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;variable variable_language variable_language_objc&quot;&gt;self&lt;/span&gt; &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;addControllerOfName&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;PresidentsViewController&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;support support_function support_function_any-method support_function_any-method_name-of-parameter support_function_any-method_name-of-parameter_objc&quot;&gt;usingTitle&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;Detail Edit&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;support support_function support_function_any-method support_function_any-method_name-of-parameter support_function_any-method_name-of-parameter_objc&quot;&gt;withImageNamed&lt;span class=&quot;punctuation punctuation_separator punctuation_separator_arguments punctuation_separator_arguments_objc&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;string string_quoted string_quoted_double string_quoted_double_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_objc&quot;&gt;@&quot;&lt;/span&gt;detailEditIcon.png&lt;span class=&quot;punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_objc&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;    &lt;br /&gt;    &lt;span class=&quot;meta meta_bracketed meta_bracketed_objc&quot;&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_begin punctuation_section_scope_begin_objc&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;variable variable_language variable_language_objc&quot;&gt;super&lt;/span&gt; &lt;span class=&quot;meta meta_function-call meta_function-call_objc&quot;&gt;&lt;span class=&quot;support support_function support_function_any-method support_function_any-method_objc&quot;&gt;viewDidLoad&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;punctuation punctuation_section punctuation_section_scope punctuation_section_scope_end punctuation_section_scope_end_objc&quot;&gt;]&lt;/span&gt;&lt;/span&gt;;&lt;br /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Either of these options will be much easier to maintain and extend than the version in the book. You should be on the lookout for refactoring opportunities in your own code, as well. Sometimes an ounce of refactoring can save a pound of headache down the line.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;BR/&gt;&lt;font size=&quot;2&quot;&gt;&lt;center&gt;&amp;copy;2009 Jeff LaMarche. &lt;br/&gt;
http://iphonedevelopment.blogspot.com&lt;/center&gt;&lt;/font&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2947441758360063609-4204460543169606568?l=iphonedevelopment.blogspot.com'/&gt;&lt;/div&gt;</description>
      <pubDate>Mon, 20 Jul 2009 10:03:00 -0700</pubDate>
      <dc:date>2009-07-20T10:03:00-07:00</dc:date>
    </item>
    <item>
      <title>OpenGL ES Tips and Tricks for Game Programming</title>
      <link>http://iphonedevelopmentbits.com/opengl-es-tips-and-tricks-for-game-programming/</link>
      <description>&lt;p&gt;We all know OpenGL ES only accepts textures that are power 2. What if we have non standard textures ? &lt;a href=&quot;http://craiggiles.wordpress.com/aboutme/&quot;&gt;Craig Giles&lt;/a&gt; has posted a &lt;a href=&quot;http://craiggiles.wordpress.com/2009/07/19/opengl-es-texture2d-power-of-two/&quot;&gt;solution&lt;/a&gt; for the same with the code snippet.&lt;/p&gt;
&lt;p&gt;[source &lt;a href=&quot;http://craiggiles.wordpress.com/&quot;&gt;Journey into XNA&lt;/a&gt;]&lt;/p&gt;
</description>
      <pubDate>Mon, 20 Jul 2009 00:32:52 -0700</pubDate>
      <dc:date>2009-07-20T00:32:52-07:00</dc:date>
    </item>
    <item>
      <title>Fixed &amp; Improved Blender Export Script</title>
      <link>http://iphonedevelopment.blogspot.com/2009/07/fixed-improved-blender-export-script.html</link>
      <description>The &lt;a href=&quot;http://innerloop.biz/code/objc.py.zip&quot;&gt;Blender Objective-C Export Script&lt;/a&gt; script has been updated to fix some problems, and to use interleaved data structures. There's a &lt;a href=&quot;http://innerloop.biz/code/ship.zip&quot;&gt;sample project&lt;/a&gt;, complete with a (cheap &amp; dirty) texture, the source Blender project and the UV template for the ship.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/_QLwms0mVa4w/SmDYBK3r3AI/AAAAAAAAAb8/WfA2c3Hpg30/s1600-h/iPhone+SimulatorScreenSnapz001.jpg&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 208px; height: 400px;&quot; src=&quot;http://2.bp.blogspot.com/_QLwms0mVa4w/SmDYBK3r3AI/AAAAAAAAAb8/WfA2c3Hpg30/s400/iPhone+SimulatorScreenSnapz001.jpg&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5359521071180274690&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's intended to be used with my &lt;a href=&quot;http://innerloop.biz/code/Empty%20OpenGL%20ES%20Application.zip&quot;&gt;my OpenGL ES Xcode Template&lt;/a&gt;, as it uses data structures that are declared in &lt;i&gt;OpenGLCommon.h&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;This version also gives you the code you need to use to draw it, except for loading and binding the texture, although you can see from the &lt;a href=&quot;http://innerloop.biz/code/ship.zip&quot;&gt;sample project&lt;/a&gt; that doing that is easy if you use the &lt;font face=&quot;monospace&quot;&gt;OpenGLTexture2D&lt;/font&gt; class included with the project.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note&lt;/b&gt;:The Texture2D class doesn't currently deal with the y-axis inversion problem, so flip your textures vertically before exporting.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;BR/&gt;&lt;font size=&quot;2&quot;&gt;&lt;center&gt;&amp;copy;2009 Jeff LaMarche. &lt;br/&gt;
http://iphonedevelopment.blogspot.com&lt;/center&gt;&lt;/font&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2947441758360063609-4513927938293386276?l=iphonedevelopment.blogspot.com'/&gt;&lt;/div&gt;</description>
      <pubDate>Fri, 17 Jul 2009 12:53:00 -0700</pubDate>
      <dc:date>2009-07-17T12:53:00-07:00</dc:date>
    </item>
    <item>
      <title>A Little Ego Boost for a Friday</title>
      <link>http://iphonedevelopment.blogspot.com/2009/07/little-ego-boost-for-friday.html</link>
      <description>As I write this, the new edition of our book holds the #1 spot, and the old edition holds the #2 spot in the Mobile Devices category on Amazon:&lt;br /&gt;&lt;img src=&quot;http://img149.imageshack.us/img149/3231/safariscreensnapz001.jpg&quot; /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;BR/&gt;&lt;font size=&quot;2&quot;&gt;&lt;center&gt;&amp;copy;2009 Jeff LaMarche. &lt;br/&gt;
http://iphonedevelopment.blogspot.com&lt;/center&gt;&lt;/font&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2947441758360063609-293028046464968375?l=iphonedevelopment.blogspot.com'/&gt;&lt;/div&gt;</description>
      <pubDate>Fri, 17 Jul 2009 09:34:00 -0700</pubDate>
      <dc:date>2009-07-17T09:34:00-07:00</dc:date>
    </item>
    <item>
      <title>Server Upgrade Aftermath</title>
      <link>http://feedproxy.google.com/~r/icodeblog/~3/zTuR8ZJczU4/</link>
      <description>&lt;p&gt;The server upgrade is finally complete.  And as a result, iCodeblog is faster and more reliable than ever. We have just finished linking back up the assets (videos, screenshots, etc&amp;#8230;) and are ready to start blogging again.&lt;/p&gt;
&lt;p&gt;For those of you who are wondering what hosting we decided to go with&amp;#8230;  Well, we want to wait a few months and see how things go before disclosing this. But I can honestly say, we are very happy with the speed increase.&lt;/p&gt;
&lt;p&gt;So stay tuned, we have some killing tutorials on the way.&lt;/p&gt;
&lt;p&gt;Thank you for all of your patience and happy iCoding!&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/icodeblog/~4/zTuR8ZJczU4&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
      <pubDate>Fri, 17 Jul 2009 08:05:04 -0700</pubDate>
      <dc:date>2009-07-17T08:05:04-07:00</dc:date>
    </item>
    <item>
      <title>WWDC 2009 Videos Available for Purchase</title>
      <link>http://iphonedevelopment.blogspot.com/2009/07/wwdc-2009-videos-available-for-purchase.html</link>
      <description>Apple is now offering the &lt;a href=&quot;http://developer.apple.com/products/videos.html&quot; target=&quot;_blank&quot;&gt;videos from WWDC 2009 for sale&lt;/a&gt; for none-attendees.&lt;br /&gt;&lt;br /&gt;I've had several people ask me if they should buy these videos or ask if they &quot;are worth it&quot;. &lt;br /&gt;&lt;br /&gt;I've held off responding to those inquiries so far, not to be rude, but because I wanted to make sure that I was careful about my recommendation. You see, I find this a difficult question to answer for someone else. If I hadn't gone to WWDC, I would buy them without hesitation. It's hours and hours of information ranging from beginner level to advanced, with a considerable amount of information about what's been newly added and what's coming in future releases. &lt;br /&gt;&lt;br /&gt;Your situations may not be the same as mine. As a full-time writer and programmer working only with Apple technologies, it's really important that I stay on top of things. I need to be aware of what's available as well as what's coming down the pipeline. For many independent Mac and iPhone developers, those things are equally important so they can adjust their product roadmap appropriately. For me, and I would guess for many independent developers, the answer really would be &quot;can you afford not to&quot;. As a business expense, $300 or $500 isn't very much.&lt;br /&gt;&lt;br /&gt;For a casual developer, however, someone with one or two iPhone applications in the store, the equation becomes more a question of can you afford them. $300 per track, or $500 for both is very reasonable for the amount of information contained in the videos and slides, but whether it's worth it for you will depend on your own financial situation and whether you need or can use that information. I don't want to give a recommendation that causes anyone to spend money they don't have or can't afford.&lt;br /&gt;&lt;br /&gt;Are the videos great? Yes, most of them are really great. Are they fairly priced? Yes. Should you buy them?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; I'm going to have to leave that last one to you, sorry.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;BR/&gt;&lt;font size=&quot;2&quot;&gt;&lt;center&gt;&amp;copy;2009 Jeff LaMarche. &lt;br/&gt;
http://iphonedevelopment.blogspot.com&lt;/center&gt;&lt;/font&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2947441758360063609-4277800239139118290?l=iphonedevelopment.blogspot.com'/&gt;&lt;/div&gt;</description>
      <pubDate>Fri, 17 Jul 2009 05:53:00 -0700</pubDate>
      <dc:date>2009-07-17T05:53:00-07:00</dc:date>
    </item>
    <item>
      <title>Beginning iPhone 3 Development is Available</title>
      <link>http://iphonedevelopment.blogspot.com/2009/07/beginning-iphone-3-development-is.html</link>
      <description>Just got the word that the new edition of &lt;a href=&quot;http://www.amazon.com/Beginning-iPhone-Development-Exploring-SDK/dp/1430224592/&quot; target=&quot;_blank&quot;&gt;Beginning iPhone 3 Development&lt;/a&gt; is now available. This is the updated version of our first book, not the new book that covers intermediate and SDK-3 specific topics.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/_QLwms0mVa4w/Sl9h1fe2TMI/AAAAAAAAAb0/xB6AM_fgu-8/s1600-h/cover.jpg&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 302px; height: 400px;&quot; src=&quot;http://1.bp.blogspot.com/_QLwms0mVa4w/Sl9h1fe2TMI/AAAAAAAAAb0/xB6AM_fgu-8/s400/cover.jpg&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5359109653206027458&quot; /&gt;&lt;/a&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;BR/&gt;&lt;font size=&quot;2&quot;&gt;&lt;center&gt;&amp;copy;2009 Jeff LaMarche. &lt;br/&gt;
http://iphonedevelopment.blogspot.com&lt;/center&gt;&lt;/font&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2947441758360063609-3791463771323989711?l=iphonedevelopment.blogspot.com'/&gt;&lt;/div&gt;</description>
      <pubDate>Thu, 16 Jul 2009 10:19:00 -0700</pubDate>
      <dc:date>2009-07-16T10:19:00-07:00</dc:date>
    </item>
    <item>
      <title>Gah! Up is Down! Right is Wrong! Make it Stop!</title>
      <link>http://iphonedevelopment.blogspot.com/2009/07/gah-up-is-down-right-is-wrong-make-it.html</link>
      <description>Today, some programmer named Zed Shaw wrote a blog post titled &lt;a href=&quot;http://zedshaw.com/blog/2009-07-15.html&quot; target=&quot;_blank&quot;&gt;Is BSD The [sic] New GPL?&lt;/a&gt;. The crux of his article is that because a few people have, dog forbid, proselytized for the BSD license and tried to get some other projects that are currently using the restrictive GPL license to switch  to the BSD license because the viral GPL license prevents code from flowing equally in both directions between the projects that, therefore, the BSD license is now just as bad as the GPL.&lt;br /&gt;&lt;br /&gt;What... the... Fuck?&lt;br /&gt;&lt;br /&gt;Because a few people suggested that, hey, maybe you guys would consider dropping some of those restrictions on your code so we can all, like, share equally, Zed Fucking Shaw thinks that's exactly the same as a viral license that puts restrictions, in perpetuity, on the code you write as well as on all derivative products, and any code that happened to have been stored on the same hard drive as your product for a little while&lt;sup&gt;1&lt;/sup&gt;. I'd expect anti-logic like this from a marketing executive, lawyer, or clergyman, but not from a programmer. This is a pathetic excuse for logic. It's Orwellian logic. Right is wrong. Up is down. It's not missing the point, it's closing your eyes and screaming &quot;nah-nah-nah&quot; so you can claim you're unaware of the fucking point.&lt;br /&gt;&lt;br /&gt;Now, I'm a big fan of openness. Almost every line of code that I've ever written that wasn't written specifically for a client or employer has been released in some form, either under a liberal license like the BSD or MIT license or simply given out as public domain code&lt;sup&gt;2&lt;/sup&gt;. But I have not used and will not use the GPL. In fact, when people ask me if they can include code I've written in a GPL'd project (which they don't have to do, so I do appreciate the gesture) I always grant permission, but specifically request that they document the fact that my code is not covered by the project license.&lt;br /&gt;&lt;br /&gt;I'm not a fan of the GPL quite simply because I don't see the GPL as &quot;open&quot;. The GPL is not defined by what it is, it's defined by what it isn't. It's &quot;against&quot; proprietary closed source code. It's against corporations. It's against software as a commercial product. It's all about what it's not. It's a political movement replete with a &lt;a href=&quot;http://www.gnu.org/gnu/manifesto.html&quot; target=&quot;_blank&quot;&gt;manifesto&lt;/a&gt;. No joke. A fucking manifesto. The GPL is about openness in the same way that Stalin was about peace and kindness. And you know what? I don't want my code tied up in a political movement. If I want to share, I'll happily share with no expectation of a direct return. If I don't want to (or can't) share, I won't publish my code.&lt;br /&gt;&lt;br /&gt;Sir Isaac Newton uttered a very famous line long ago in what is one of the greatest displays of modesty ever recorded. He said, &quot;If I have seen further it is only by standing on the shoulders of giants.&quot; And that modest statement sums up the way science, and all meaningful pursuit of knowledge works. Knowledge is expanded when it is shared. When solutions to problems are shared, that frees us up to tackle the next obstacle rather than spending time solving problems that have already been solved by others. Which, if you read their propaganda, is exactly what the GNU foundation people think they believe. But anyone who has actually read their license terms knows that obviously they don't, because you can't reconcile that with the viral restrictions in their licenses. If you truly believe that knowledge is not a zero-sum game, and that sharing knowledge tends to increase the sum of societal knowledge, then you don't go putting petty restrictions on your knowledge.&lt;br /&gt;&lt;br /&gt;Sometimes, when you fight fire with fire, all you get is a bigger fire and you certainly don't put out a fire by loudly exclaiming that water is the new fire.&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;&lt;i&gt;Footnotes&lt;/i&gt;&lt;br /&gt;&lt;font face=&quot;1&quot;&gt;&lt;b&gt;1&lt;/b&gt; - Okay, I'm kidding about the last one.&lt;br /&gt;&lt;b&gt;2&lt;/b&gt; - Well, that's not completely true. I also don't release code that I know is bad because I don't want people copying or learning from code I know has serious problems.&lt;/font&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;BR/&gt;&lt;font size=&quot;2&quot;&gt;&lt;center&gt;&amp;copy;2009 Jeff LaMarche. &lt;br/&gt;
http://iphonedevelopment.blogspot.com&lt;/center&gt;&lt;/font&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2947441758360063609-8707201142829881933?l=iphonedevelopment.blogspot.com'/&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 15 Jul 2009 20:32:00 -0700</pubDate>
      <dc:date>2009-07-15T20:32:00-07:00</dc:date>
    </item>
    <item>
      <title>Site Up Host Moved</title>
      <link>http://feedproxy.google.com/~r/icodeblog/~3/z5fQ3ZLOT2c/</link>
      <description>&lt;p&gt;Today we experienced a server outage at our hosting provider. We were unable to get a clear idea of a time for resolution and decided it was best to move hosts to a scalable cloud-based service that can grow with our increasing traffic.&lt;/p&gt;
&lt;p&gt;Thank you to everyone for your patience. We&amp;#8217;ve almost completed our migration&amp;#8211;just waiting on our assets to upload which include our very large screencast files. Please give us a few more hours and then report anything odd you see in the comments here.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/icodeblog/~4/z5fQ3ZLOT2c&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
      <pubDate>Wed, 15 Jul 2009 14:16:36 -0700</pubDate>
      <dc:date>2009-07-15T14:16:36-07:00</dc:date>
    </item>
    <item>
      <title>Year two</title>
      <link>http://furbo.org/2009/07/10/year-two/</link>
      <description>&lt;p&gt;As we approach the &lt;a href=&quot;http://www.apple.com/pr/library/2008/07/14appstore.html&quot;&gt;first anniversary of selling things on the iTunes App Store&lt;/a&gt;, I&amp;#8217;d like to take the opportunity to look at where we&amp;#8217;ve been and where we&amp;#8217;d like to go. A lot of good things have happened since last July 11th, but there&amp;#8217;s still much room for improvement.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; These words may be mine, but their origin is from conversations with hundreds of iPhone developers. Saying that there was a lot of discussion about the App Store in the bars around WWDC would be the understatement of the century. The length of this essay is proof.&lt;/p&gt;
&lt;h3&gt;There is hope&lt;/h3&gt;
&lt;p&gt;As developers, we have a tendency to look at things that are &amp;#8220;wrong&amp;#8221; and complain. It&amp;#8217;s also important to look at what&amp;#8217;s been improved in the past year: it gives me hope that we&amp;#8217;ll eventually see some of the suggestions I make in this essay.&lt;/p&gt;
&lt;p&gt;Here are things that have helped us sell more product:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Reviews only from people who have purchased the app.&lt;/li&gt;
&lt;li&gt;Promotion codes.&lt;/li&gt;
&lt;li&gt;Better categorization.&lt;/li&gt;
&lt;li&gt;A nationwide ad campaign.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;The root of the problem&lt;/h3&gt;
&lt;p&gt;Building the App Store using the iTunes infrastructure was a brilliant move on Apple’s part. It allowed them to sell software to millions of users with a minimal amount of development. Look at it this way: would you rather have lost the first 6 months of revenue while waiting for Apple to perfect the system used to deliver our applications?&lt;/p&gt;
&lt;p&gt;But now iTunes presents problems for both Apple and third party developers because of this simple fact: software is not music. I believe this is the basic issue that both parties are coming to grips with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Music and software differ greatly in the number of titles. Apple is currently touting 50,000 applications in the App Store. While an impressive number in this nascent category, it pales in comparison to &lt;a href=&quot;http://en.wikipedia.org/wiki/ITunes_Store#Music&quot;&gt;10 million songs&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;As developers, we may be small fish in this sea of titles, but we’re more important to the health of the iPhone platform than musicians are to the health of iTunes. People like Walt Mossberg don’t talk about the importance of music when &lt;a href=&quot;http://ptech.allthingsd.com/20090603/palms-new-pre-takes-on-iphone/&quot;&gt;reviewing the competition&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;iTunes customers do not have functional problems with songs. People don’t have to learn how to listen to music. Anyone who’s done customer support can tell you that’s not true for software.&lt;/li&gt;
&lt;li&gt;There are never new versions of a song. Yes, there are remixes and other adaptations, but these are labeled, marketed and sold (via SKU) as unique products. Software, on the other hand, usually gets a new version every few months.&lt;/li&gt;
&lt;li&gt;Music can’t damage the device. Malicious software can.&lt;/li&gt;
&lt;li&gt;Music doesn’t depend on the network while its playing. Our software can break or change behavior because of this dependency on external data.&lt;/li&gt;
&lt;li&gt;Many musicians sell their content through third parties (media companies), most developers do not.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Finally, the complexity of system with 10 million database rows backed by a worldwide content distribution mechanism is not lost on us. Changes to infrastructure of this scale won’t happen overnight.&lt;/p&gt;
&lt;h3&gt;Approvals&lt;/h3&gt;
&lt;p&gt;Apple needs to face the fact that the current review process is not scaling well. When the App Store launched, there were a thousand apps and reviews took less than a week.&lt;/p&gt;
&lt;p&gt;Now, with 50,000 apps, we&amp;#8217;re currently looking at three week lead times for reviews. When there are 100,000 apps are we going to be waiting a couple of months for approval? Or more?&lt;/p&gt;
&lt;p&gt;And even with these long review periods, there is no shortage of applications being pulled from the App Store. Some developers wonder if approval is less about consumer protection than it is about protecting Apple’s interests.&lt;/p&gt;
&lt;p&gt;This long review process has a serious impact for both developers and customers:&lt;/p&gt;
&lt;h4&gt;Maintenance releases aren&amp;#8217;t viable&lt;/h4&gt;
&lt;p&gt;There are always bugs that pop up which can be fixed very easily. Twitterrific currently has a problem with marking tweets as a favorite (caused by a change at Twitter.) We could literally fix this bug in five minutes, but it would still take three weeks to get it onto a customer&amp;#8217;s phone.&lt;/p&gt;
&lt;p&gt;Patching an existing release and doing a quick update is something all developers have been able to do on other platforms (Mac or Windows, for example.) But after spending several weeks in a queue, your 1.0.1 release is likely to be out of date because in the interim you&amp;#8217;ve been working on a 1.0.2 release. If you replace your 1.0.1 release with the new 1.0.2 release, you go to the end of the queue and start waiting again. You end up in a cycle where these small releases never see the light of day.&lt;/p&gt;
&lt;p&gt;The net effect is that many developers are giving up on these maintenance releases. And that&amp;#8217;s bad for customers.&lt;/p&gt;
&lt;h4&gt;Emergencies&lt;/h4&gt;
&lt;p&gt;No matter what some of us might think, developers are only human. Sometimes we do stupid things, and when we do, we need to resolve these issues with critical updates. In these cases, we need to jump to the front of the review queue. As someone who’s been the victim of stupidity more than once, I have no problem giving up my place in line for someone who’s suffering the consequences of a dumb mistake.&lt;/p&gt;
&lt;h4&gt;Solutions&lt;/h4&gt;
&lt;p&gt;There are a couple of things that could help with the review process. The first is to verify developers, not apps.&lt;/p&gt;
&lt;p&gt;I am perfectly willing to be held accountable for my actions. So is every other developer I&amp;#8217;ve talked to. If we do something evil, pull all our products off the App Store shelves. Start legal action. Shut down our business. Those of us who respect our customer base and value our relationship with Apple will not be affected.&lt;/p&gt;
&lt;p&gt;We don&amp;#8217;t mind waiting a few weeks for a major version release (e.g. a 2.0) because it&amp;#8217;s likely something that has already taken many months to create. Use an initial or major release as a point to establish the trust between Apple and the developer. Then, incremental releases (e.g. a 2.0.1 or 2.1) can be approved quickly because of that trust. If a developer breaks that trust in a point release, penalize them.&lt;/p&gt;
&lt;p&gt;As my company releases more products, I also have more incentive to maintain that trust level (pulling multiple products hurts more than pulling just one.) Knowing that, Apple could spend less time reviewing each new product from a existing developer.&lt;/p&gt;
&lt;p&gt;With critical updates, we won&amp;#8217;t need to jump to the front of the review queue often. The best thing would be to give each developer a limited number of &lt;a href=&quot;http://furbo.org/2009/06/15/brain-farts/&quot;&gt;&amp;#8220;fast track tickets&amp;#8221;&lt;/a&gt; and tell them to use them wisely (no exceptions for developers who need &amp;#8220;just one more.&amp;#8221;)&lt;/p&gt;
&lt;h3&gt;Upgrades&lt;/h3&gt;
&lt;p&gt;For readers who aren&amp;#8217;t developers, let me explain the simple economics of our business: we sustain our efforts with upgrade revenue. Getting the initial sale is only the beginning of a long-term relationship with a customer.&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s how it works:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;You know the number of total customers for your product. (Some developers call this the installed base.)&lt;/li&gt;
&lt;li&gt;The percentage of users who upgrade a product is predictable. For most products, it&amp;#8217;s normally around 40-60%.&lt;/li&gt;
&lt;li&gt;You know how much the upgrade is going to cost.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Given this information, you have a very good idea of how much money the upgrade will generate. That, in turn, tells you how much money you should spend creating that software.&lt;/p&gt;
&lt;p&gt;Unfortunately, the App Store doesn&amp;#8217;t allow us to generate upgrade revenue. We either do free upgrades or charge for a completely new product (SKU.) The former is bad for developers because we don&amp;#8217;t see any incremental revenue. The latter is bad for customers because they don&amp;#8217;t get a price break.&lt;/p&gt;
&lt;p&gt;Many developers who have been in the App Store since its inception are facing this problem now: we&amp;#8217;re working on our 2.0 releases and struggling with how to make money with them. Even if your product is selling well, it’s difficult to justify adding new features if there’s no extra revenue to pay for them.&lt;/p&gt;
&lt;p&gt;Free upgrades also mean that great products (with smaller customer bases) will eventually wither and die. &amp;#8220;There&amp;#8217;s an app for that&amp;#8221; will only apply to products with a mainstream customer base. Niche and vertical markets will not be served well.&lt;/p&gt;
&lt;p&gt;For game developers, this is less of an issue: each new version can be &lt;a href=&quot;http://www.148apps.com/news/ngmoco-announce-rolando-2-release-71-pull-original-rolando-app-store/&quot;&gt;marketed as a unique entity&lt;/a&gt;. But if you apply that same approach to other apps, you end up with &lt;a href=&quot;http://twitterrific.com/iphone&quot;&gt;“Twitterrific: The Awakening”&lt;/a&gt;, &lt;a href=&quot;http://twitterrific.com/iphone&quot;&gt;“Twitterrific: The Second Coming”&lt;/a&gt;, &lt;a href=&quot;http://twitterrific.com/iphone&quot;&gt;“Twitterrific: The Return of the Tweet”&lt;/a&gt;, etc. This will only make the App Store more confusing for customers of those applications.&lt;/p&gt;
&lt;p&gt;Finally, major updates can’t be released on a predictable date. If you try to set an application’s availability date to some time in the future, the current product in the App Store becomes unavailable (so customers can’t buy the product while it&amp;#8217;s being reviewed.) Apple, more than anyone, should understand the benefits of controlling your product release. There’s a lot more to it than a row in iTunes’ database.&lt;/p&gt;
&lt;h4&gt;Solutions&lt;/h4&gt;
&lt;p&gt;Why can&amp;#8217;t apps be upgraded just like music? If you look at version 1.0 being like a song with DRM, and version 2.0 being a song without DRM, you&amp;#8217;ve solved most of the problem. The only difference is that we need to upgrade the song more than once.&lt;/p&gt;
&lt;p&gt;The upgrade should also have its own release date: giving developers the ability to time press releases, website launches and other supporting activities.&lt;/p&gt;
&lt;h3&gt;Better rules&lt;/h3&gt;
&lt;p&gt;We need better rules for the types of applications that are allowed in the App Store: the wording in section 3.3 of the license agreement is just too vague.&lt;/p&gt;
&lt;p&gt;It’s likely that Apple’s legal team prefers to handle marginal cases on an ad hoc basis. But that’s a system that won’t scale and whose cost will quickly outweigh the benefits. How many lawyers will be needed when there are a million applications in the App Store?&lt;/p&gt;
&lt;p&gt;With so much left open to interpretation, it makes it easy for a developer to wave a flag and generate bad press for Apple. As more applications are added to the App Store, there has also been an increasing number of these sensational “app rejection” pieces in the tech media. It’s event starting to go mainstream at &lt;a href=&quot;http://edition.cnn.com/2009/TECH/07/06/explicit.iphone.apps/&quot;&gt;places like CNN&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The situation is exacerbated by developers who are starting to realize that this “app rejection” attention by the media is good for sales once the controversy is resolved.&lt;/p&gt;
&lt;p&gt;A clear set of rules also lets developers feel confident that their efforts will be rewarded with placement in the App Store. At present, it’s a crap shoot. When you roll snake eyes, you have no other channel to sell your product and you’ve lost a lot of time and money.&lt;/p&gt;
&lt;p&gt;We also realize that there’s one rule that’s hard to define: “offensive content.” It’s completely subjective.&lt;/p&gt;
&lt;p&gt;When you look at the music industry, you’ll see they’ve had a similar problems &lt;a href=&quot;http://en.wikipedia.org/wiki/Parents_Music_Resource_Center&quot;&gt;since 1985&lt;/a&gt;. After several decades of input from thousands of individuals in public forums, there are &lt;a href=&quot;http://en.wikipedia.org/wiki/Parental_Advisory#Controversies&quot;&gt;still controversies&lt;/a&gt; surrounding the rating of music. From a social point-of-view, it’s an impossible problem to solve. The current “solution” is to let the record companies police themselves.&lt;/p&gt;
&lt;p&gt;As iPhone developers, we have one company making these policy decisions: Apple. The lack of transparency in their decision making process makes it impossible for us to know what’s acceptable and what is not. For all we know, the rules are being made up (and changed) as we go along.&lt;/p&gt;
&lt;h4&gt;Solutions&lt;/h4&gt;
&lt;p&gt;A clear set of rules for reviewers and developers will make the process easier for &lt;strong&gt;everyone&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Apple should publish what can and cannot be developed for the App Store. Provide examples of what is OK and what is not. We have Human Interface Guidelines for how our applications behave, why don’t we have similar guidelines for the functions our applications perform?&lt;/p&gt;
&lt;p&gt;For the situations that fall outside of these rules, provide developers with a means to get pre-approval for application ideas. If running our ideas by Apple’s legal department comes at an extra cost, that’s fine. The objective is to waste less money on app ideas that will never get published.&lt;/p&gt;
&lt;h3&gt;Better experience for customers&lt;/h3&gt;
&lt;p&gt;Both developers and Apple want the best possible experience for &lt;strong&gt;our&lt;/strong&gt; customers. As the seller, Apple focuses on the sale. As developers, we focus on getting people to make the purchase in the first place.&lt;/p&gt;
&lt;p&gt;So how can we make it better?&lt;/p&gt;
&lt;h4&gt;Product evaluations&lt;/h4&gt;
&lt;p&gt;As it now stands, customers are making their purchase decisions with a few screenshots and a short product description. This is often not enough to convey the benefits of our products: especially ones that are more complex (and have a higher cost.)&lt;/p&gt;
&lt;p&gt;Imagine the problems music companies would have if you couldn’t preview songs on iTunes. They’d have a lot of unhappy customers who bought the wrong song. And if the workaround was for customers to go to the artist’s website to listen to a sample or see a video clip, they’d lose a lot of sales because it’s a hassle and an unpredictable experience.&lt;/p&gt;
&lt;p&gt;The current situation akin to walking into a phone store and looking at a hardware mockup that has a sticker of a screenshot and no battery. Compare that to walking into the Apple Store and using a fully functional iPhone.&lt;/p&gt;
&lt;h4&gt;Solution&lt;/h4&gt;
&lt;p&gt;The best solution would be to allow a time limited version of the application to be downloaded for free. After evaluation, the customer could purchase the application. Developers could do this now &lt;a href=&quot;http://www.polarbearfarm.com/blog/?p=79&quot;&gt;if in-app purchases were allowed on free versions&lt;/a&gt; of applications. (There is even precedence for this approach: &lt;a href=&quot;http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=315659984&amp;amp;mt=8&quot;&gt;AT&amp;amp;T is doing with its Navigator app&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;Apple has stated that “free remains free.” I can see why they want to do that, it&amp;#8217;s a way to avoid applications that try to use bait-and-switch schemes. (Although, one could argue that &lt;a href=&quot;http://www.techcrunch.com/2009/06/23/iphone-in-app-purchases-already-leading-to-the-dreaded-two-words-bait-and-switch/&quot;&gt;we’ll see the same problem with paid apps&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;So why not compromise on a solution? iTunes on the desktop and the App Store application on the device both have access to excellent multimedia capabilities. Why not use these facilities to allow a couple of minutes of video for each app? It’s not as good as trying out the application, but it’s certainly better than five screenshots. Let developers upload a QuickTime movie with iTunes Connect and both they and customers will benefit.&lt;/p&gt;
&lt;h4&gt;Respond to reviews&lt;/h4&gt;
&lt;p&gt;Again, music is not software. Music is simple, you either like the song or you don’t.&lt;/p&gt;
&lt;p&gt;For software, customers see the reviews pages not only as a place to comment on an application’s suitability, but also as a forum to voice their problems and concerns. As developers, it drives us crazy that we have no way to address those issues.&lt;/p&gt;
&lt;h4&gt;Solution&lt;/h4&gt;
&lt;p&gt;Give us a way to contact the customer. Ideally, we would be able to post a public response in iTunes so other users with similar issues could benefit.&lt;/p&gt;
&lt;p&gt;Again, I can see this being too much to ask of the iTunes infrastructure. I also doubt that Apple wants to provide us with customer’s email addresses (which can be considered private data.)&lt;/p&gt;
&lt;p&gt;So why not present a form for developers to fill out within iTunes? Our comments are entered into a text field and sent to the customer’s email address by Apple. We could provide our own contact information in that message for followup conversations.&lt;/p&gt;
&lt;h4&gt;Finding apps&lt;/h4&gt;
&lt;p&gt;Songs and games work in the current “top hits” ranking. Popularity for this type of content is ephemeral. This type of content is also easily identifiable by a brand name (“Death Cab for Cutie”, “Flight Control”, etc.)&lt;/p&gt;
&lt;p&gt;The problem is finding applications that aren’t at the top of the charts. It’s incredibly hard to find the “that” in “there’s an app for that.” Between keyword spamming and the sheer volume of choices in each category, customers can’t find what they want.&lt;/p&gt;
&lt;h4&gt;Solution&lt;/h4&gt;
&lt;p&gt;The answer to this problem is organizing search by solutions, not titles or sales rank. During this summer season, customers are interested in applications that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Entertain while traveling to/from their vacation destination.&lt;/li&gt;
&lt;li&gt;Guide them around that destination.&lt;/li&gt;
&lt;li&gt;Helps them relax during the break.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The only thing you’ll find if you &lt;a href=&quot;http://ax.search.itunes.apple.com/WebObjects/MZSearch.woa/wa/search?entity=software&amp;amp;media=all&amp;amp;submit=seeAllLockups&amp;amp;term=Paris&quot;&gt;search the App Store for “Paris”&lt;/a&gt; is that there are a lot of fricken’ icons with the Eiffel Tower on them.&lt;/p&gt;
&lt;p&gt;Macworld, with its &lt;a href=&quot;http://www.macworld.com/appguide/index.html&quot;&gt;App Guide&lt;/a&gt;, has figured this out. Apple should look at the success of staff favorites and expand upon that within iTunes.&lt;/p&gt;
&lt;h3&gt;Charge us more money&lt;/h3&gt;
&lt;p&gt;The $99 developer fee is great for making the App Store all inclusive. But the needs of larger, full-time developers are much different than those of those doing it part-time or as a hobby.&lt;/p&gt;
&lt;h4&gt;Solution&lt;/h4&gt;
&lt;p&gt;Charge $999 for premium service. For professional developers, this cost is not prohibitive and would allow Apple to provide additional services such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Shorter review times. The trust level between Apple and the developer is higher when there’s more money on the table.&lt;/li&gt;
&lt;li&gt;More &amp;#8220;fast track tickets&amp;#8221; as mentioned above. Larger development shops have more staff doing stupid things, so give us more freedom to deal with it.&lt;/li&gt;
&lt;li&gt;Discounts for test devices. With each product release, it becomes more difficult for developers to support the new hardware. The primary factor here is that an AT&amp;amp;T contract is required to get the test device. Something similar to the Mac hardware discounts for ADC members would help significantly.&lt;/li&gt;
&lt;li&gt;Background artwork for our products in iTunes. Getting a nice background means a lot to us: it makes our products more attractive to potential customers. Let us pay for the time it takes to put it up.&lt;/li&gt;
&lt;li&gt;Approval of ideas prior to development. Developers have crazy ideas. Before spending months of development on that wacky thought, it would be nice to get pre-approval from Apple on the concept.&lt;/li&gt;
&lt;li&gt;More devices in the Program Portal. The current limit of 100 devices is a joke for developers with multiple products: if you have 5 products, you can only have 20 devices per app. That, combined with multiple hardware releases in the 12 month period, means we’re effectively prevented from testing our applications until July 12th.&lt;/li&gt;
&lt;li&gt;A contact in Apple Developer Relations. Sometimes we need to talk directly to someone at Apple.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Pricing&lt;/h3&gt;
&lt;p&gt;I’ve talked about &lt;a href=&quot;http://furbo.org/2008/12/09/ring-tone-apps/&quot;&gt;pricing&lt;/a&gt; before, but not much has changed. The addition of in-app purchase is great for certain kinds of applications: our upcoming title, &lt;a href=&quot;http://rampchamp.com/&quot;&gt;Ramp Champ&lt;/a&gt;, makes great use of it. But most apps cannot take advantage of this new feature and are left struggling at the ringtone price point.&lt;/p&gt;
&lt;p&gt;These low prices are making decisions for us. If you gave an iPhone developer $50,000 to spend anyway they choose, they’re going to make 5 ringtone apps at $10,000 each instead of one killer app for $50,000. In a gold rush, it’s better to have five small claims than a single large one.&lt;/p&gt;
&lt;p&gt;The problem is that the long-term success of the iPhone platform will be defined by killer apps, not throwaways that you replace on your home screen after a few months.&lt;/p&gt;
&lt;p&gt;Unlike other sections in this essay, I don’t have specific suggestions to make. I do think that the solutions presented above will, in aggregate, help us get some upward movement in pricing. And that would be very good news for those of us making a living from the App Store.&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;There’s no denying it: the last year has been a good one for both Apple and third-party iPhone developers. That’s not to say there isn’t room for improvement, especially at the point-of-sale.&lt;/p&gt;
&lt;p&gt;The suggestions I’ve presented above are intended to help us grow this business and keep the ecosystem healthy. Every developer’s fear is that &lt;a href=&quot;http://www.marco.org/122990476&quot;&gt;Apple doesn’t want an open a dialog regarding the App Store&lt;/a&gt;. It scared the shit out of me when our questions weren&amp;#8217;t answered at WWDC.&lt;/p&gt;
&lt;p&gt;A successful partnership is one where both parties work to the benefit of the other. If our needs are ignored, it will only lead to disenchantment. Working with the developers that are driving this new platform is Apple’s best long-term business strategy.&lt;/p&gt;
</description>
      <pubDate>Fri, 10 Jul 2009 11:53:11 -0700</pubDate>
      <dc:date>2009-07-10T11:53:11-07:00</dc:date>
    </item>
    <item>
      <title>iPhone 3.0 Programming Examples and Tutorials</title>
      <link>http://iphonedevelopmentbits.com/iphone-30-programming-examples-and-tutorials/</link>
      <description>&lt;p&gt;This is a &lt;a href=&quot;http://www.aboutobjects.com/tutorials.html&quot;&gt;gold mine&lt;/a&gt; for all those who are looking for examples and tutorials for iphone application development. The examples include making your first app, editable detail view, animating a view, table views etc. Get a kick-start in iphone development, check &lt;a href=&quot;http://www.aboutobjects.com/tutorials.html&quot;&gt;the site now&lt;/a&gt;.&lt;/p&gt;
</description>
      <pubDate>Thu, 09 Jul 2009 22:46:18 -0700</pubDate>
      <dc:date>2009-07-09T22:46:18-07:00</dc:date>
    </item>
    <item>
      <title>iPhone Programming Tutorial: Integrating Twitter Into Your iPhone Applications</title>
      <link>http://feedproxy.google.com/~r/icodeblog/~3/7ijlHiqbleQ/</link>
      <description>&lt;p&gt;&lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/screenshot_12.png&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-1090&quot; title=&quot;screenshot_12&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/07/screenshot_12.png&quot; alt=&quot;screenshot_12&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you are a developer (which you most likely are if you are reading this) you probably have (or should have) a Twitter account.  With Twitter getting so much attention lately, you would be crazy to not include some sort of Twitter integration into your own iPhone application.&lt;/p&gt;
&lt;p&gt;There are many ways applications can be made more social by including Twitter.  For example, you could make the application auto-tweet when you unlock a special item in a game, or beat it.  This lets all of their friends know they are playing your game and in turn gets you more exposure.  You could also use this as an idea for creating your own Twitter client (&lt;a href=&quot;http://icodeblog.com/2009/07/08/look-familiar/&quot;&gt;don&amp;#8217;t just submit my tutorial to the app store&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Twitter has provided us with some very simple API&amp;#8217;s to follow making it a snap to interface with them. I have started a series on my personal blog about &lt;a href=&quot;http://brandontreb.com/objective-c-programming-tutorial-creating-a-twitter-client-part-1/&quot; onclick=&quot;pageTracker._trackPageview('/outgoing/brandontreb.com/objective-c-programming-tutorial-creating-a-twitter-client-part-1/?referer=');&quot;&gt;creating a Twitter client for the Mac&lt;/a&gt; that we will be borrowing some code from.&lt;/p&gt;
&lt;p&gt;One thing I want to note before starting is: I will be going rather quick through the tutorial when it comes to creating the interface and hooking up the IBOutlets.  If you need extended help on that, this is probably not the tutorial you want to start on. Read some of my previous tutorials and come back.&lt;/p&gt;
&lt;p&gt;This basic tutorial will just show you how to post a status update to your Twitter. I will also show you how to create an app that run entirely in landscape mode. So it&amp;#8217;s a two-fer.&lt;/p&gt;
&lt;p&gt;Let&amp;#8217;s get started&amp;#8230;&lt;/p&gt;
&lt;h2&gt;1. Create A View Based Application&lt;/h2&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/screenshot_02.png&quot;&gt;&lt;img class=&quot;size-full wp-image-1084 aligncenter&quot; title=&quot;screenshot_02&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/07/screenshot_02.png&quot; alt=&quot;screenshot_02&quot; width=&quot;600&quot; height=&quot;442&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Name it something &lt;strong&gt;awesome&lt;/strong&gt;. I called mine TwitUpdate (not awesome, I know).  The first thing we should do is create our IBOutets and IBActions. Now download the images for the tutorial and drag them into the &lt;strong&gt;Resources&lt;/strong&gt; group inside of XCode.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/btn_update.png&quot;&gt;&lt;img class=&quot;size-full wp-image-1093 alignnone&quot; title=&quot;btn_update&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/07/btn_update.png&quot; alt=&quot;btn_update&quot; width=&quot;97&quot; height=&quot;36&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/twit_background.png&quot;&gt;&lt;img class=&quot;size-full wp-image-1094 alignnone&quot; title=&quot;twit_background&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/07/twit_background.png&quot; alt=&quot;twit_background&quot; width=&quot;480&quot; height=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/screenshot_04.png&quot;&gt;&lt;img class=&quot;size-full wp-image-1085 aligncenter&quot; title=&quot;screenshot_04&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/07/screenshot_04.png&quot; alt=&quot;screenshot_04&quot; width=&quot;188&quot; height=&quot;341&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;2. Set up your IBoutlets and IBActions&lt;/h2&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;So open &lt;strong&gt;TwitUpdateViewController.h. &lt;/strong&gt;And let&amp;#8217;s add the following code:&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/screenshot_18.png&quot;&gt;&lt;img class=&quot;size-full wp-image-1098 aligncenter&quot; title=&quot;screenshot_18&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/07/screenshot_18.png&quot; alt=&quot;screenshot_18&quot; width=&quot;445&quot; height=&quot;223&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;You can omit the UIButton outlets if you would like.  I just like having them around in case we want to do anything with the button.  This is pretty straight forward, we have a UITextView to enter our Twitter status in. And an IBAction that gets called to post our Twitter status.  Don&amp;#8217;t forget to synthesize these properties in &lt;strong&gt;TwitUpdateViewController.m&lt;/strong&gt; or you will be smitten by the compiler.  One other thing you will see here is a UIActionSheet.  We will display this sheet as our &amp;#8220;Loading&amp;#8221; screen when posting a tweet.&lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;3. Build The Interface&lt;/h2&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Go ahead and open up &lt;strong&gt;TwitUpdateViewController.xib.&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;So if you are wondering how to get Interface Builder in landscape mode, it&amp;#8217;s actually quite simple.  It is not obvious however as it took me forever and a freakin day to figure it out.  There is a little arrow (as in the screenshot below) in the top right corner of the view.  Click it and the view will rotate to landscape mode.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/screenshot_15.png&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-1092&quot; title=&quot;screenshot_15&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/07/screenshot_15.png&quot; alt=&quot;screenshot_15&quot; width=&quot;69&quot; height=&quot;55&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Now that your interface is in landscape mode, remove the &lt;strong&gt;Status Bar&lt;/strong&gt;.  This is done by clicking on the view and setting the &lt;strong&gt;Status Bar&lt;/strong&gt; drop down in the &lt;strong&gt;attributes inspector&lt;/strong&gt; to &lt;strong&gt;none. &lt;/strong&gt;This will just give you more screen real estate.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Now drag a UIImageView on your view and stretch it to fill the entire screen.  Set the &lt;strong&gt;Image&lt;/strong&gt; attribute of the UIImageView to be &lt;strong&gt;twit_background.png &lt;/strong&gt;and bask in the glory of my beautifully created interface!  Next, we need to add the UITextView.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Grab a UITextView and drag in on to the view and stretch it to fit just inside of the chat bubble.  Make sure to delete the lorem ipsum text inside.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;The last interface element we need to add is the update button.  Drag a UIButton on to your view.  In the button&amp;#8217;s attributes, set it&amp;#8217;s type to custom and it&amp;#8217;s image to &lt;strong&gt;btn_update.png.&lt;/strong&gt; Make sure you drag the button to fit the update image. Your final interface should look like this&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/screenshot_11.png&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-1089&quot; title=&quot;screenshot_11&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/07/screenshot_11.png&quot; alt=&quot;screenshot_11&quot; width=&quot;480&quot; height=&quot;322&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Now, connect the &lt;strong&gt;twitterMessageText &lt;/strong&gt;from File&amp;#8217;s Owner to the UITextView and the &lt;strong&gt;updateButton &lt;/strong&gt;to your custom button.  Also, be sure to connect the &lt;strong&gt;TouchUpInside&lt;/strong&gt; method of the UIButton to the &lt;strong&gt;postTweet&lt;/strong&gt; IBAction.  Here is a screenshot of what the connection properties should look like when you click on File&amp;#8217;s owner.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/screenshot_08.png&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-1087&quot; title=&quot;screenshot_08&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/07/screenshot_08.png&quot; alt=&quot;screenshot_08&quot; width=&quot;775&quot; height=&quot;225&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Now close Interface Builder.&lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;4. Creating Our Twitter Request Class&lt;/h2&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;So, we will interface with Twitter using an NSMutableURL request and NSURLConnection.  You have two options at this juncture, you can either download the files below and add them to your project to use, or you can head on over to &lt;a href=&quot;http://brandontreb.com/objective-c-programming-tutorial-creating-a-twitter-client-part-1/&quot; onclick=&quot;pageTracker._trackPageview('/outgoing/brandontreb.com/objective-c-programming-tutorial-creating-a-twitter-client-part-1/?referer=');&quot;&gt;http://brandontreb.com/objective-c-programming-tutorial-creating-a-twitter-client-part-1/&lt;/a&gt; and learn how to create them yourself (recommended route).  I would explain it here, it&amp;#8217;s just that I already wrote an in depth tutorial for it on my blog. This is now a tutorial scavenger hunt.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/twitterrequest.zip&quot;&gt;twitterrequest.zip&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you just want to complete this tutorial and move on, download the file above, unzip and drag the files into your project.  We need to add some code to these files in order to post a status update to Twitter.  So, open TwitterRequest.h and update the following code&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/screenshot_16.png&quot;&gt;&lt;img class=&quot;size-full wp-image-1096 aligncenter&quot; title=&quot;screenshot_16&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/07/screenshot_16.png&quot; alt=&quot;screenshot_16&quot; width=&quot;672&quot; height=&quot;414&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;We have added a Boolean that denotes whether or not we are making a HTTP POST request (Twitter uses both POST and GET).  Also, there is a string that will represent the POST request.  In our case, this will just get set to &amp;#8220;status=foo&amp;#8221; (foo being your status update).&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Also, we have added a method signature to update your status.  It takes an NSString which is just the status text.  The other variables are explained in my tutorial on brandontreb.com.  Now, open up &lt;strong&gt;TwitterRequest.m&lt;/strong&gt; and add the following code.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/screenshot_17.png&quot;&gt;&lt;img class=&quot;size-full wp-image-1097 aligncenter&quot; title=&quot;screenshot_17&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/07/screenshot_17.png&quot; alt=&quot;screenshot_17&quot; width=&quot;756&quot; height=&quot;331&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Ok, beginning with the status_update method.  This method looks very similar to our friends_timeline method with a few exceptions.  First, we set isPost = YES.  Next, we set the request body = &amp;#8220;status=%@&amp;#8221; where we set %@ to our status update.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Now, for some trickier code.  In the request method of our class, we need to add some code to do an HTTP POST (rather than a GET).  This is how we tell Twitter what to set our status to.  So, the first thing is to set the HTTPMethod for the request to POST.  Next, we have set the &amp;#8220;Content-Type&amp;#8221; field to let Twitter know what kind of data we are sending.  Following that, the body of the request is sent.  This is the actual data that Twitter will see.  Finally, we just tell the request how large (in bytes) our data is going to be.  If this is all foreign to you, I recommend you go read up on POST and GET.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Phew&amp;#8230; Done with that.  Now for the final part of implementing our postTweet method.&lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;5. PostTweet Method&lt;/h2&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Open up TwitterUpdateViewController.m and add the following code.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/screenshot_20.png&quot;&gt;&lt;img class=&quot;size-full wp-image-1099 aligncenter&quot; title=&quot;screenshot_20&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/07/screenshot_20.png&quot; alt=&quot;screenshot_20&quot; width=&quot;705&quot; height=&quot;339&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Ok, not super complex as the TwitterRequest class does most of the heavy lifting.  As a reminder, the postTweet method gets called when you press the Update button.  The first thing we do here is build a new TwitterRequest object and set the username and password field.  Make sure you put in YOUR twitter username and password.  Next, we call the resignFirstResponder method on the UITextView.  This is to hide the keyboard.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Just so the user knows something is happening, we display a simple action sheet that has no buttons and says &amp;#8220;Posting to Twitter&amp;#8230;&amp;#8221; . Finally, we call the statuses_update method in our TwitterRequest class.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;The Twitter request class will then do some magic and eventually call the callback method that you specified (status_updateCallback) and send it the data that Twitter returned to us.  The first thing we do is dismiss the action sheet. Next, I am simply outputting the response from Twitter in to the terminal.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;The response received from Twitter would need to be parsed and displayed or something but that&amp;#8217;s for another tutorial.One thing to note, if you enter an invalid username or password, this app will just hang and say  &amp;#8220;Posting to Twitter&amp;#8221; forever.  You need to handle this in an error callback method. Again &lt;a href=&quot;http://brandontreb.com/objective-c-programming-tutorial-creating-a-twitter-client-part-1/&quot; onclick=&quot;pageTracker._trackPageview('/outgoing/brandontreb.com/objective-c-programming-tutorial-creating-a-twitter-client-part-1/?referer=');&quot;&gt;described in the tutorial&lt;/a&gt; in which we took the TwitterRequest code from.&lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;6. Run The App In Landscape Mode&lt;/h2&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;The last part of this tutorial is to force the app to run in landscape mode as well as hide the status bar.  Open up TwitUpdate-Info.plist. Right click on the table and select &amp;#8220;Add Row&amp;#8221;. Select &lt;strong&gt;Initial interface orientation&lt;/strong&gt; and set the value to Landscape (left or right).  Right click again and add &lt;strong&gt;Status bar is initially hidden&lt;/strong&gt;. to hide the status bar.  It should now look like this.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/screenshot_21.png&quot;&gt;&lt;img class=&quot;size-full wp-image-1105 aligncenter&quot; title=&quot;screenshot_21&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/07/screenshot_21.png&quot; alt=&quot;screenshot_21&quot; width=&quot;418&quot; height=&quot;56&quot; /&gt;&lt;/a&gt;We also need to update the TwitUpdateViewConroller.m file to respond to the interface rotations.  Uncomment the following method in &lt;strong&gt;TwitUpdateViewController.m&lt;/strong&gt; and change it to say:&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/screenshot_22.png&quot;&gt;&lt;img class=&quot;size-full wp-image-1106 aligncenter&quot; title=&quot;screenshot_22&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/07/screenshot_22.png&quot; alt=&quot;screenshot_22&quot; width=&quot;571&quot; height=&quot;91&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Just tells the the view to rotate when the iphone is rotated&amp;#8230;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Well, I hope you have enjoyed this tutorial.  I hope to see some cool Twitter integration in all of your apps (feel free to comment and let me know how you have implemented it in your app).  You can always ask questions in the comments of the post or &lt;a href=&quot;http://twitter.com/brandontreb&quot; onclick=&quot;pageTracker._trackPageview('/outgoing/twitter.com/brandontreb?referer=');&quot;&gt;write me on twitter&lt;/a&gt;.  And for lazy people &lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/twitupdate.zip&quot;&gt;here is the source&lt;/a&gt; (j/k).  Happy iCoding.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/icodeblog/~4/7ijlHiqbleQ&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
      <pubDate>Thu, 09 Jul 2009 11:23:03 -0700</pubDate>
      <dc:date>2009-07-09T11:23:03-07:00</dc:date>
    </item>
    <item>
      <title>Look Familiar?</title>
      <link>http://feedproxy.google.com/~r/icodeblog/~3/QCzXaFgfCJM/</link>
      <description>&lt;p&gt;Ok, so I was perusing the App Store the other day to stumble upon this gem of an application. See the screenshot below.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://icodeblog.com/wp-content/uploads/2009/07/screenshot_01.png&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-1077&quot; title=&quot;screenshot_01&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/07/screenshot_01.png&quot; alt=&quot;screenshot_01&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you have been on iCodeBlog before, you might recognize this &amp;#8220;game&amp;#8221; from a tutorial that I wrote about writing an iPhone game (&lt;a href=&quot;http://icodeblog.com/2009/01/15/iphone-game-programming-tutorial-part-1/&quot;&gt;link&lt;/a&gt;&lt;a&gt;&lt;/a&gt;).  One thing to note here is the company name is BlaBlaIncTech (not iCodeBlog) meaning I did not submit this nor did I give permission to do so.  I find it interesting that someone has the guts to take a tutorial on iCodeBlog and submit it to the app store &lt;strong&gt;unmodified&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Not only was this VERY basic code meant to teach simple concepts, the graphics are absolutely atrocious as they were hacked together very quickly in Photoshop.  I actually find this quite hilarious that this guys expects me not to find out.&lt;/p&gt;
&lt;p&gt;I wanted to highlight some of the great features noted by the &amp;#8220;developer&amp;#8221; of this application (Seen in the feature section of iTunes).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;#8220;It&amp;#8217;s basic game design makes it a fun game for someone that doesn&amp;#8217;t play alot of games&amp;#8221; &amp;#8211; WOW, emphasis on the BASIC.  This game is fun for no one as it sucks! It was meant as a teaching tool moron!&lt;/li&gt;
&lt;li&gt;&amp;#8220;Great Quality&amp;#8221; &amp;#8211; Are we looking at the same game?&lt;/li&gt;
&lt;li&gt;&amp;#8220;Easy (So easy your grandma can play)&amp;#8221; &amp;#8211; If you have the same taste in games as your grandma, you probably don&amp;#8217;t own an iPhone.&lt;/li&gt;
&lt;li&gt;&amp;#8220;&lt;strong&gt;Almost no crashes&lt;/strong&gt;&amp;#8221; &amp;#8211; hahahaha this is the best one. The keyword here is &amp;#8220;Almost&amp;#8221;.  Well, that does it, I&amp;#8217;m sold!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So, if you want to scoop up this rad game, the link is &lt;a href=&quot;http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=317420248&amp;amp;mt=8&quot; onclick=&quot;pageTracker._trackPageview('/outgoing/itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=317420248_amp_mt=8&amp;amp;referer=');&quot;&gt;here&lt;/a&gt; . I almost will pay him the $.99, just to make fun of him in the comments section.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/icodeblog/~4/QCzXaFgfCJM&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
      <pubDate>Wed, 08 Jul 2009 10:53:53 -0700</pubDate>
      <dc:date>2009-07-08T10:53:53-07:00</dc:date>
    </item>
    <item>
      <title>From Hacker to microISV: Tagging, Building and Releasing</title>
      <link>http://www.cimgf.com/2009/07/06/from-hacker-to-microisv-tagging-building-and-releasing/</link>
      <description>&lt;p&gt;It is important to develop a consistent build process for your applications.  I have written a couple of bash scripts to help me with this process.&lt;/p&gt;
&lt;p&gt;I use git for version control and also the services of &lt;a href=&quot;http://github.com&quot;&gt;github&lt;/a&gt;.  Now in &lt;a href=&quot;http://www.cimgf.com/2008/04/13/git-and-xcode-a-git-build-number-script/&quot;&gt;another post&lt;/a&gt; on this site Marcus covered how to put git commit checksums in your Info.plist&amp;#8217;s CFBundleVersion.  I have opted to use Apple Generic Versioning (or agv for short) instead as it has an easy to read incrementing build number and is super  easy to script. It&amp;#8217;s also great for use with Sparkle since Sparkle uses the CFBundleVersion to see if the appcast has a newer version.&lt;br /&gt;
&lt;span id=&quot;more-671&quot;&gt;&lt;/span&gt;&lt;br /&gt;
Chris Hanson wrote a &lt;a href=&quot;http://chanson.livejournal.com/125568.html&quot;&gt;great piece&lt;/a&gt; a few years back about getting agv setup in your XCode project.  I followed his instructions for that.  I also set the &lt;strong&gt;CFBundleShortVersionString&lt;/strong&gt; in Info.plist to &lt;strong&gt;__VERSION__&lt;/strong&gt;.  You&amp;#8217;ll see why I do that later.&lt;/p&gt;
&lt;p&gt;When it comes time to build my app for shipping, either privately or publicly, I run &lt;code&gt;tag.sh&lt;/code&gt;.  This bash script increments the agv version and creates a git tag.  The script takes one parameter which is the marketing version of your build (1.0, 2.0.4fc1, 2.5b6 etc).&lt;/p&gt;
&lt;p&gt;Before running &lt;code&gt;tag.sh&lt;/code&gt;, the state of the git repo should be clean- there should be no other staged files or uncommitted edits.  It&amp;#8217;s also a good idea to close the XCode project since &lt;code&gt;agvtool&lt;/code&gt; will modify the XCode project file.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;tag.sh&lt;/code&gt; also takes care of committing the changed CFBundleVersion for you.  Here is it&amp;#8217;s code:&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
11
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;bash&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;#!/bin/sh&lt;/span&gt;
&lt;span style=&quot;color: #007800;&quot;&gt;tag&lt;/span&gt;=$1
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&lt;span style=&quot;color: #007800;&quot;&gt;$tag&lt;/span&gt;&amp;quot;&lt;/span&gt; == &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;then&lt;/span&gt;
	&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;No tag specified&amp;quot;&lt;/span&gt;
	&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;exit&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;fi&lt;/span&gt;
agvtool next-version &lt;span style=&quot;color: #660033;&quot;&gt;-all&lt;/span&gt;
git commit &lt;span style=&quot;color: #660033;&quot;&gt;-a&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;-m&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;Increment CFBundleVersion for &lt;span style=&quot;color: #007800;&quot;&gt;$tag&lt;/span&gt;&amp;quot;&lt;/span&gt;
git tag &lt;span style=&quot;color: #660033;&quot;&gt;-m&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;Tag for &lt;span style=&quot;color: #007800;&quot;&gt;$tag&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;-a&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;$tag&lt;/span&gt;
git push origin master
git push &lt;span style=&quot;color: #660033;&quot;&gt;--tags&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;So having run &lt;code&gt;tag.sh&lt;/code&gt; I have created a git tag for my build so I can always go back and see that version of the code either in github or using &lt;code&gt;git checkout &amp;lt;tag name&amp;gt;&lt;/code&gt; at the command line.&lt;/p&gt;
&lt;p&gt;After this I use a jumbo script that checks out the tag I just created, builds it, zips it up, uploads it to my web server, outputs an &lt;code&gt;&amp;lt;item&amp;gt;&lt;/code&gt; for your Sparkle Appcast (including signing the update) and maybe tweets about it. Phew. It&amp;#8217;s a heavily modified version of &lt;a href=&quot;http://code.google.com/p/flycode/source/browse/trunk/buildapp/bin/babuild.sh&quot;&gt;Gus Mueller&amp;#8217;s build script&lt;/a&gt;.  Here&amp;#8217;s the usage:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;build.sh -p ProjectName -t tag [-u [-w tweet]]&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The two required parameters are a project name and a tag.  Optionally you can upload and then tweet about the newly available build.  I do all of my public builds in a separate clone of my git repo that never gets edited or otherwise messed with (~/Development/building/).  There&amp;#8217;s a whole lot going on in this script that could be explained, but for now I&amp;#8217;ll just leave you with the code to walk through, and if something needs clarified, post a comment and I&amp;#8217;ll do my best.&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;bash&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;#!/bin/bash&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #007800;&quot;&gt;upload&lt;/span&gt;=0
&lt;span style=&quot;color: #007800;&quot;&gt;tweet&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;getopts&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;:t:up:w:&amp;quot;&lt;/span&gt; Option
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;do&lt;/span&gt;
  &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;$Option&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;in&lt;/span&gt;
    &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;w&lt;/span&gt; &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;tweet&lt;/span&gt;=&lt;span style=&quot;color: #007800;&quot;&gt;$OPTARG&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;;;&lt;/span&gt;
    u &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;upload&lt;/span&gt;=&lt;span style=&quot;color: #000000;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;;;&lt;/span&gt;
    p &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;project&lt;/span&gt;=&lt;span style=&quot;color: #007800;&quot;&gt;$OPTARG&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;;;&lt;/span&gt;
    t &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;tag&lt;/span&gt;=&lt;span style=&quot;color: #007800;&quot;&gt;$OPTARG&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;;;&lt;/span&gt;
  &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;esac&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;done&lt;/span&gt;
&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;shift&lt;/span&gt; $&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #007800;&quot;&gt;$OPTIND&lt;/span&gt; - 1&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&lt;span style=&quot;color: #007800;&quot;&gt;$project&lt;/span&gt;&amp;quot;&lt;/span&gt; == &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;then&lt;/span&gt;
	&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;No project specified&amp;quot;&lt;/span&gt;
	&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;exit&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;fi&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&lt;span style=&quot;color: #007800;&quot;&gt;$tag&lt;/span&gt;&amp;quot;&lt;/span&gt; == &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;then&lt;/span&gt;
	&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;No tag specified&amp;quot;&lt;/span&gt;
	&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;exit&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;fi&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;# Configuration&lt;/span&gt;
&lt;span style=&quot;color: #007800;&quot;&gt;final_builds&lt;/span&gt;=~&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;Development&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;release_builds
&lt;span style=&quot;color: #007800;&quot;&gt;code_folder&lt;/span&gt;=~&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;Development&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;building&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #007800;&quot;&gt;$project&lt;/span&gt;
&lt;span style=&quot;color: #007800;&quot;&gt;build_folder&lt;/span&gt;=&lt;span style=&quot;color: #007800;&quot;&gt;$code_folder&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;build
&lt;span style=&quot;color: #007800;&quot;&gt;keys_folder&lt;/span&gt;=~&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;Development&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;keys
&lt;span style=&quot;color: #007800;&quot;&gt;upload_destination&lt;/span&gt;=user&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;@&lt;/span&gt;yourcompany.com:&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;usr&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;local&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;apache2&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;htdocs&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;downloads&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;
&lt;span style=&quot;color: #007800;&quot;&gt;release_notes_webfolder&lt;/span&gt;=http:&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;//&lt;/span&gt;yourcompany.com&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;releasenotes
&lt;span style=&quot;color: #007800;&quot;&gt;downloads_webfolder&lt;/span&gt;=http:&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;//&lt;/span&gt;yourcompany.com&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;downloads
&lt;span style=&quot;color: #007800;&quot;&gt;twitter_uname&lt;/span&gt;=someone&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;@&lt;/span&gt;somewhere.com
&lt;span style=&quot;color: #007800;&quot;&gt;twitter_pword&lt;/span&gt;=password
&amp;nbsp;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;!&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;-d&lt;/span&gt;  &lt;span style=&quot;color: #007800;&quot;&gt;$final_builds&lt;/span&gt; &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;then&lt;/span&gt;
	&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;mkdir&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;$final_builds&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;fi&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;# clean up&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;-d&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;$build_folder&lt;/span&gt; &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;then&lt;/span&gt;
	&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;rm&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;-rf&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;$build_folder&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;fi&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;cd&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;$code_folder&lt;/span&gt;
&amp;nbsp;
git pull origin master
git pull &lt;span style=&quot;color: #660033;&quot;&gt;--tags&lt;/span&gt;
git checkout &lt;span style=&quot;color: #007800;&quot;&gt;$tag&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;sed&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;-i&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;'s/__VERSION__/'&lt;/span&gt;&lt;span style=&quot;color: #007800;&quot;&gt;$tag&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'/g'&lt;/span&gt; Info.plist
&amp;nbsp;
&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;echo&lt;/span&gt; building project
xcodebuild &lt;span style=&quot;color: #660033;&quot;&gt;-target&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;$project&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;-configuration&lt;/span&gt; Release &lt;span style=&quot;color: #007800;&quot;&gt;OBJROOT&lt;/span&gt;=&lt;span style=&quot;color: #007800;&quot;&gt;$build_folder&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;SYMROOT&lt;/span&gt;=&lt;span style=&quot;color: #007800;&quot;&gt;$build_folder&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;OTHER_CFLAGS&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;$?&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;!&lt;/span&gt;= 0 &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;then&lt;/span&gt;
	&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;Bad build for &lt;span style=&quot;color: #007800;&quot;&gt;$project&lt;/span&gt;&amp;quot;&lt;/span&gt;
	say &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;bad build!&amp;quot;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;else&lt;/span&gt;
&amp;nbsp;
	&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;#ok, let's index the documentation if we've got it.&lt;/span&gt;
	&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;#/Developer/Applications/Utilities/Help\ Indexer.app/Contents/MacOS/Help\ Indexer &amp;quot;/tmp/buildapp/build/Release/BuildApp.app/Contents/Resources/English.lproj/BuildAppHelp&amp;quot;&lt;/span&gt;
&amp;nbsp;
	&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;mv&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;$build_folder&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;Release&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #007800;&quot;&gt;$project&lt;/span&gt;.app &lt;span style=&quot;color: #007800;&quot;&gt;$final_builds&lt;/span&gt;
&amp;nbsp;
	&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;# make the zip file&lt;/span&gt;
	&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;cd&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;$final_builds&lt;/span&gt;
	&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;zip&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;-r&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;$project&lt;/span&gt;-&lt;span style=&quot;color: #007800;&quot;&gt;$tag&lt;/span&gt;.zip &lt;span style=&quot;color: #007800;&quot;&gt;$project&lt;/span&gt;.app
&amp;nbsp;
	&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;rm&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;-rf&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;$project&lt;/span&gt;.app
&amp;nbsp;
	&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;$upload&lt;/span&gt; == 1 &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;then&lt;/span&gt;
&amp;nbsp;
		&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;echo&lt;/span&gt; uploading to server...
		&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;# upload&lt;/span&gt;
		&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;scp&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;$project&lt;/span&gt;-&lt;span style=&quot;color: #007800;&quot;&gt;$tag&lt;/span&gt;.zip &lt;span style=&quot;color: #007800;&quot;&gt;$upload_destination&lt;/span&gt;
&amp;nbsp;
		&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;# get values for appcast&lt;/span&gt;
		&lt;span style=&quot;color: #007800;&quot;&gt;dsasignature&lt;/span&gt;=&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color: #007800;&quot;&gt;$keys_folder&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;sign_update.rb &lt;span style=&quot;color: #007800;&quot;&gt;$final_builds&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #007800;&quot;&gt;$project&lt;/span&gt;-&lt;span style=&quot;color: #007800;&quot;&gt;$tag&lt;/span&gt;.zip &lt;span style=&quot;color: #007800;&quot;&gt;$keys_folder&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #007800;&quot;&gt;$project&lt;/span&gt;\_dsa_priv.pem&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;`&lt;/span&gt;
		&lt;span style=&quot;color: #007800;&quot;&gt;filesize&lt;/span&gt;=&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;stat&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;-f&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;%&lt;/span&gt;z &lt;span style=&quot;color: #007800;&quot;&gt;$final_builds&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #007800;&quot;&gt;$project&lt;/span&gt;-&lt;span style=&quot;color: #007800;&quot;&gt;$tag&lt;/span&gt;.zip&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;`&lt;/span&gt;
		&lt;span style=&quot;color: #007800;&quot;&gt;pubdate&lt;/span&gt;=&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;date&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;+%a, %d %h %Y %T %z&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;`&lt;/span&gt;
&amp;nbsp;
		&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;cd&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;$code_folder&lt;/span&gt;
&amp;nbsp;
		&lt;span style=&quot;color: #007800;&quot;&gt;cfbundleversion&lt;/span&gt;=&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;`&lt;/span&gt;agvtool what-version -terse&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;`&lt;/span&gt;
&amp;nbsp;
		&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;#output appcast item&lt;/span&gt;
		&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;echo&lt;/span&gt;
		&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;echo&lt;/span&gt; Put the following text &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;in&lt;/span&gt; your appcast
		&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&amp;lt;item&amp;gt;&amp;quot;&lt;/span&gt;
		&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&amp;lt;title&amp;gt;Version &lt;span style=&quot;color: #007800;&quot;&gt;$tag&lt;/span&gt;&amp;lt;/title&amp;gt;&amp;quot;&lt;/span&gt;
		&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&amp;lt;sparkle:releaseNotesLink&amp;gt;&amp;quot;&lt;/span&gt;
		&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&lt;span style=&quot;color: #007800;&quot;&gt;$release_notes_webfolder&lt;/span&gt;/&lt;span style=&quot;color: #007800;&quot;&gt;$project&lt;/span&gt;.html&amp;quot;&lt;/span&gt;
		&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&amp;lt;/sparkle:releaseNotesLink&amp;gt;&amp;quot;&lt;/span&gt;
		&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&amp;lt;pubDate&amp;gt;&lt;span style=&quot;color: #007800;&quot;&gt;$pubdate&lt;/span&gt;&amp;lt;/pubDate&amp;gt;&amp;quot;&lt;/span&gt;
		&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&amp;lt;enclosure url=&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #007800;&quot;&gt;$downloads_webfolder&lt;/span&gt;/&lt;span style=&quot;color: #007800;&quot;&gt;$project&lt;/span&gt;-&lt;span style=&quot;color: #007800;&quot;&gt;$tag&lt;/span&gt;.zip&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\&amp;quot;&lt;/span&gt;&amp;quot;&lt;/span&gt;
		&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;sparkle:version=&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #007800;&quot;&gt;$cfbundleversion&lt;/span&gt;&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\&amp;quot;&lt;/span&gt;&amp;quot;&lt;/span&gt;
		&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;sparkle:shortVersionString=&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #007800;&quot;&gt;$tag&lt;/span&gt;&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\&amp;quot;&lt;/span&gt;&amp;quot;&lt;/span&gt;
		&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;sparkle:dsaSignature=&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #007800;&quot;&gt;$dsasignature&lt;/span&gt;&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\&amp;quot;&lt;/span&gt;&amp;quot;&lt;/span&gt;
		&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;length=&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #007800;&quot;&gt;$filesize&lt;/span&gt;&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\&amp;quot;&lt;/span&gt;&amp;quot;&lt;/span&gt;
		&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;type=&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\&amp;quot;&lt;/span&gt;application/octet-stream&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\&amp;quot;&lt;/span&gt; /&amp;gt;&amp;quot;&lt;/span&gt;
		&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&amp;lt;/item&amp;gt;&amp;quot;&lt;/span&gt;
		&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&lt;span style=&quot;color: #007800;&quot;&gt;$tweet&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;!&lt;/span&gt;= &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;then&lt;/span&gt;
			&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;Calling twitter: &lt;span style=&quot;color: #007800;&quot;&gt;$tweet&lt;/span&gt;&amp;quot;&lt;/span&gt;
			curl &lt;span style=&quot;color: #660033;&quot;&gt;-u&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;$twitter_uname&lt;/span&gt;:&lt;span style=&quot;color: #007800;&quot;&gt;$twitter_pword&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;-d&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;status&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&lt;span style=&quot;color: #007800;&quot;&gt;$project&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;$tag&lt;/span&gt; is up. &lt;span style=&quot;color: #007800;&quot;&gt;$tweet&lt;/span&gt;&amp;quot;&lt;/span&gt; http:&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;//&lt;/span&gt;twitter.com&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;statuses&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;update.xml
		&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;fi&lt;/span&gt;
	&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;fi&lt;/span&gt;
&amp;nbsp;
	open &lt;span style=&quot;color: #007800;&quot;&gt;$final_builds&lt;/span&gt;
	say &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;done building&amp;quot;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;fi&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;cd&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;$code_folder&lt;/span&gt;
git checkout Info.plist
&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;rm&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;-rf&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;$build_folder&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;b&gt;Other References&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://github.com/guides/push-tags-to-github&quot;&gt;Push tags to github&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://sparkle.andymatuschak.org/documentation/pmwiki.php/Documentation/BasicSetup&quot;&gt;Sparkle Basic Setup&lt;/a&gt;&lt;/p&gt;
</description>
      <pubDate>Mon, 06 Jul 2009 15:34:11 -0700</pubDate>
      <dc:date>2009-07-06T15:34:11-07:00</dc:date>
    </item>
    <item>
      <title>Objective C 2.0: An Intro – Part 2</title>
      <link>http://feedproxy.google.com/~r/icodeblog/~3/e8qFYgs0KrQ/</link>
      <description>&lt;h3&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;Introduction&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Hello everyone, welcome to my fourth screeencast. This is the second in my series introducing readers to Objective C. Let&amp;#8217;s dive in.&lt;/p&gt;
&lt;h2&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Skill Level&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;Beginner&lt;/span&gt;&lt;/h2&gt;
&lt;h1&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;Source Code&lt;br /&gt;
&lt;/span&gt;&lt;/h1&gt;
&lt;h3&gt;&lt;a title=&quot;Using NSXMLParser to Pull UIImages from the Web&quot; href=&quot;http://losectrl-gaincommand.com/iCodeBlogHelper/Tutorial4/iCodeBlogGetsClassy.zip&quot; onclick=&quot;pageTracker._trackPageview('/outgoing/losectrl-gaincommand.com/iCodeBlogHelper/Tutorial4/iCodeBlogGetsClassy.zip?referer=');&quot;&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;Available Here&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;h1&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;Screencast&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;I film myself coding out the entire sample project for each post. I personally think going through the Screencast is the best way to learn. But feel free to look through the slides and text if that suites you better.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://vimeo.com/5513767&quot; onclick=&quot;pageTracker._trackPageview('/outgoing/vimeo.com/5513767?referer=');&quot;&gt;iCodeBlog Tutorial: Objective C 2.0 An Intro Part 2&lt;/a&gt; from &lt;a href=&quot;http://vimeo.com/user2008025&quot; onclick=&quot;pageTracker._trackPageview('/outgoing/vimeo.com/user2008025?referer=');&quot;&gt;Collin Ruffenach&lt;/a&gt; on &lt;a href=&quot;http://vimeo.com&quot; onclick=&quot;pageTracker._trackPageview('/outgoing/vimeo.com?referer=');&quot;&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;
&lt;h1&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;Tutorial&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2001.png&quot; alt=&quot;objectivec20anintropt2001&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2002.png&quot; alt=&quot;objectivec20anintropt2002&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2003.png&quot; alt=&quot;objectivec20anintropt2003&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2004.png&quot; alt=&quot;objectivec20anintropt2004&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2005.png&quot; alt=&quot;objectivec20anintropt2005&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2006.png&quot; alt=&quot;objectivec20anintropt2006&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2007.png&quot; alt=&quot;objectivec20anintropt2007&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2008.png&quot; alt=&quot;objectivec20anintropt2008&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2009.png&quot; alt=&quot;objectivec20anintropt2009&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2010.png&quot; alt=&quot;objectivec20anintropt2010&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2011.png&quot; alt=&quot;objectivec20anintropt2011&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2012.png&quot; alt=&quot;objectivec20anintropt2012&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;iCodeBlogClass.m:&lt;/span&gt;&lt;/h2&gt;
&lt;pre style=&quot;padding-left: 60px;&quot;&gt;@implementation iCodeBlogClass

@synthesize name;

-init
{
	return self;
}

@end&lt;/pre&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2013.png&quot; alt=&quot;objectivec20anintropt2013&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2014.png&quot; alt=&quot;objectivec20anintropt2014&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2015.png&quot; alt=&quot;objectivec20anintropt2015&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;iCodeBlogGetsClassy.h:&lt;/span&gt;&lt;/h2&gt;
&lt;pre style=&quot;padding-left: 60px;&quot;&gt;#import &quot;iCodeBlogClass.h&quot;&lt;/pre&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2016.png&quot; alt=&quot;objectivec20anintropt2016&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2013.png&quot; alt=&quot;objectivec20anintropt2013&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2014.png&quot; alt=&quot;objectivec20anintropt2014&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2015.png&quot; alt=&quot;objectivec20anintropt2015&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;iCodeBlogGetsClassy.h:&lt;/span&gt;&lt;/h2&gt;
&lt;pre style=&quot;padding-left: 60px;&quot;&gt;iCodeBlogClass *myNewObject = [[iCodeBlogClass alloc] init];
NSLog(@&quot;%@&quot;, myNewObject);&lt;/pre&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2017.png&quot; alt=&quot;objectivec20anintropt2017&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2018.png&quot; alt=&quot;objectivec20anintropt2018&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2019.png&quot; alt=&quot;objectivec20anintropt2019&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2020.png&quot; alt=&quot;objectivec20anintropt2020&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2021.png&quot; alt=&quot;objectivec20anintropt2021&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2022.png&quot; alt=&quot;objectivec20anintropt2020&quot; width=&quot;622&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2023.png&quot; alt=&quot;objectivec20anintropt2023&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2024.png&quot; alt=&quot;objectivec20anintropt2024&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;iCodeBlogClass.h:&lt;/span&gt;&lt;/h2&gt;
&lt;pre style=&quot;padding-left: 60px;&quot;&gt;#import &amp;lt;Foundation/Foundation.h&amp;gt;

@interface iCodeBlogClass : NSObject
{
	NSString *name;
}

@property (nonatomic, retain) NSString *name;

@end&lt;/pre&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2025.png&quot; alt=&quot;objectivec20anintropt2025&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;iCodeBlogClass.m:&lt;/span&gt;&lt;/h2&gt;
&lt;pre style=&quot;padding-left: 60px;&quot;&gt;@synthesize name;&lt;/pre&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2026.png&quot; alt=&quot;objectivec20anintropt2026&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2027.png&quot; alt=&quot;objectivec20anintropt2027&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;iCodeBlogGetsClassy.m:&lt;/span&gt;&lt;/h2&gt;
&lt;pre style=&quot;padding-left: 60px;&quot;&gt;iCodeBlogClass *myNewObject = [[iCodeBlogClass alloc] init];
[myNewObject setName:@&quot;Collin&quot;];

NSLog(@&quot;%@&quot;, [myNewObject name]);&lt;/pre&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2028.png&quot; alt=&quot;objectivec20anintropt2028&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2029.png&quot; alt=&quot;objectivec20anintropt2029&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2030.png&quot; alt=&quot;objectivec20anintropt2030&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;iCodeBlogClass.m:&lt;/span&gt;&lt;/h2&gt;
&lt;pre style=&quot;padding-left: 60px;&quot;&gt;-initWithName:(NSString *)inputName
{
     self.name = inputName;
     return self;
}&lt;/pre&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2031.png&quot; alt=&quot;objectivec20anintropt2031&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2032.png&quot; alt=&quot;objectivec20anintropt2032&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;iCodeBlogGetsClassy.m:&lt;/span&gt;&lt;/h2&gt;
&lt;pre style=&quot;padding-left: 60px;&quot;&gt;iCodeBlogClass *myNewObject = [[iCodeBlogClass alloc] initWithName:@&quot;Collin&quot;];&lt;/pre&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2033.png&quot; alt=&quot;objectivec20anintropt2033&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2034.png&quot; alt=&quot;objectivec20anintropt2034&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2035.png&quot; alt=&quot;objectivec20anintropt2035&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2036.png&quot; alt=&quot;objectivec20anintropt2036&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2037.png&quot; alt=&quot;objectivec20anintropt2037&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2038.png&quot; alt=&quot;objectivec20anintropt2038&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2039.png&quot; alt=&quot;objectivec20anintropt2039&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;iCodeBlogGetsClassy.m:&lt;/span&gt;&lt;/h2&gt;
&lt;pre style=&quot;padding-left: 60px;&quot;&gt;iCodeBlogClass *person1 = [[iCodeBlogClass alloc] initWithName:@&quot;Collin&quot;];&lt;/pre&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2040.png&quot; alt=&quot;objectivec20anintropt2040&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;iCodeBlogGetsClassy.m:&lt;/span&gt;&lt;/h2&gt;
&lt;pre style=&quot;padding-left: 60px;&quot;&gt;	iCodeBlogClass *person1 = [[iCodeBlogClass alloc] initWithName:@&quot;Collin&quot;];
	iCodeBlogClass *person2 = [[iCodeBlogClass alloc] initWithName:@&quot;Martin&quot;];
	iCodeBlogClass *person3 = [[iCodeBlogClass alloc] initWithName:@&quot;vtsib&quot;];
	iCodeBlogClass *person4 = [[iCodeBlogClass alloc] initWithName:@&quot;AppStoreMod&quot;];
	iCodeBlogClass *person5 = [[iCodeBlogClass alloc] initWithName:@&quot;Matt&quot;];
	iCodeBlogClass *person6 = [[iCodeBlogClass alloc] initWithName:@&quot;Brendan&quot;];
	iCodeBlogClass *person7 = [[iCodeBlogClass alloc] initWithName:@&quot;Geoff&quot;];
	iCodeBlogClass *person8 = [[iCodeBlogClass alloc] initWithName:@&quot;RobotGrrl&quot;];
	iCodeBlogClass *person9 = [[iCodeBlogClass alloc] initWithName:@&quot;brandon&quot;];
	iCodeBlogClass *person10 = [[iCodeBlogClass alloc] initWithName:@&quot;Aaron&quot;];
	iCodeBlogClass *person11 = [[iCodeBlogClass alloc] initWithName:@&quot;Brian&quot;];
	iCodeBlogClass *person12 = [[iCodeBlogClass alloc] initWithName:@&quot;Fernando&quot;];
	iCodeBlogClass *person13 = [[iCodeBlogClass alloc] initWithName:@&quot;Chad&quot;];&lt;/pre&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2041.png&quot; alt=&quot;objectivec20anintropt2041&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;iCodeBlogGetsClassy.m:&lt;/span&gt;&lt;/h2&gt;
&lt;pre style=&quot;padding-left: 60px;&quot;&gt;NSMutableArray *myArray = [[NSMutableArray alloc] init];&lt;/pre&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2042.png&quot; alt=&quot;objectivec20anintropt2042&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;iCodeBlogGetsClassy.m:&lt;/span&gt;&lt;/h2&gt;
&lt;pre style=&quot;padding-left: 60px;&quot;&gt;	[myArray addObject:person1];
	[myArray addObject:person2];
	[myArray addObject:person3];
	[myArray addObject:person4];
	[myArray addObject:person5];
	[myArray addObject:person6];
	[myArray addObject:person7];
	[myArray addObject:person8];
	[myArray addObject:person9];
	[myArray addObject:person10];
	[myArray addObject:person11];
	[myArray addObject:person12];
	[myArray addObject:person13];&lt;/pre&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2043.png&quot; alt=&quot;objectivec20anintropt2043&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2044.png&quot; alt=&quot;objectivec20anintropt2044&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2045.png&quot; alt=&quot;objectivec20anintropt2045&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;iCodeBlogGetsClassy.m:&lt;/span&gt;&lt;/h2&gt;
&lt;pre style=&quot;padding-left: 60px;&quot;&gt;	for(iCodeBlogClass *myObject in myArray)
	{
		NSLog(@&quot;%@&quot;, myObject);
	}&lt;/pre&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2046.png&quot; alt=&quot;objectivec20anintropt2046&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2047.png&quot; alt=&quot;objectivec20anintropt2047&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2048.png&quot; alt=&quot;objectivec20anintropt2048&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;iCodeBlogGetsClassy.m:&lt;/span&gt;&lt;/h2&gt;
&lt;pre style=&quot;padding-left: 60px;&quot;&gt;-(NSString *)description
{
	return [NSString stringWithFormat:@&quot;The name of the object is %@&quot;, self.name];
}
&lt;img class=&quot;aligncenter size-full wp-image-1010&quot; src=&quot;http://icodeblog.com/wp-content/uploads/2009/06/objectivec20anintropt2049.png&quot; alt=&quot;objectivec20anintropt2049&quot; width=&quot;620&quot; height=&quot;465&quot; /&gt;&lt;/pre&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/icodeblog/~4/e8qFYgs0KrQ&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
      <pubDate>Mon, 29 Jun 2009 18:47:15 -0700</pubDate>
      <dc:date>2009-06-29T18:47:15-07:00</dc:date>
    </item>
    <item>
      <title>UITabBarController with UINavigationController Using Interface Builder</title>
      <link>http://www.cimgf.com/2009/06/25/uitabbarcontroller-with-uinavigationcontroller-using-interface-builder/</link>
      <description>&lt;p&gt;I&amp;#8217;ve seen a good bit of sample code that shows how to implement using a UINavigationController in a view controller that is managed by a UITabBarController, but I haven&amp;#8217;t seen much on how to do it with Interface Builder. Turns out that it&amp;#8217;s pretty simple and I&amp;#8217;m going to show you how.&lt;br /&gt;
&lt;span id=&quot;more-590&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href='http://www.cimgf.com/wp-content/uploads/2009/06/tabbarnavigator.zip'&gt;TabBarNavigator Demo Project&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;To get started, create a new project in Xcode. Select the &lt;em&gt;Tab Bar Application&lt;/em&gt; template and click &lt;em&gt;Choose&amp;#8230;&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.cimgf.com/wp-content/uploads/2009/06/newproject.png&quot; rel=&quot;lightbox&quot;&gt;&lt;img src=&quot;http://www.cimgf.com/wp-content/uploads/2009/06/newprojectsmall.png&quot; alt=&quot;newprojectsmall&quot; title=&quot;newprojectsmall&quot; width=&quot;384&quot; height=&quot;308&quot; class=&quot;alignnone size-full wp-image-599&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Name the project, TabBarNavigator and click &lt;em&gt;Save&lt;/em&gt;&lt;/p&gt;
&lt;div id=&quot;attachment_596&quot; class=&quot;wp-caption alignnone&quot; style=&quot;width: 310px&quot;&gt;&lt;a href=&quot;http://www.cimgf.com/wp-content/uploads/2009/06/tabbarnavigator.png&quot; rel=&quot;lightbox&quot;&gt;&lt;img src=&quot;http://www.cimgf.com/wp-content/uploads/2009/06/tabbarnavigator-300x221.png&quot; alt=&quot;TabBarNavigator Project&quot; title=&quot;TabBarNavigator Project&quot; width=&quot;300&quot; height=&quot;221&quot; class=&quot;size-medium wp-image-596&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;TabBarNavigator Project&lt;/p&gt;&lt;/div&gt;
&lt;h2&gt;Change The Controller Type&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;In Xcode, expand the &lt;em&gt;Resources&lt;/em&gt; group in the &lt;em&gt;Groups and Files&lt;/em&gt; view and double-click &lt;em&gt;MainWindow.xib&lt;/em&gt; to open the xib in Interface Builder&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;When Interface builder opens, change the xib &lt;em&gt;View Mode&lt;/em&gt; to the tree view mode and expand your &lt;em&gt;Tab Bar Controller&lt;/em&gt; item.&lt;br /&gt;
&lt;a href=&quot;http://www.cimgf.com/wp-content/uploads/2009/06/mainwindow.png&quot; rel=&quot;lightbox&quot;&gt;&lt;img src=&quot;http://www.cimgf.com/wp-content/uploads/2009/06/mainwindow-300x213.png&quot; alt=&quot;MainWindow.xib&quot; title=&quot;MainWindow.xib&quot; width=&quot;300&quot; height=&quot;213&quot; class=&quot;alignnone size-medium wp-image-602&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Make sure that the &lt;em&gt;Tab View Controller&lt;/em&gt; object is selected. In the object inspector switch to the &lt;em&gt;Attributes&lt;/em&gt; tab and change the &lt;em&gt;Class&lt;/em&gt; for the &lt;em&gt;First&lt;/em&gt; controller from &lt;em&gt;View Controller&lt;/em&gt; to &lt;em&gt;Navigation Controller&lt;/em&gt;.&lt;br /&gt;
&lt;a href=&quot;http://www.cimgf.com/wp-content/uploads/2009/06/navcontrollerselect.png&quot; rel=&quot;lightbox&quot;&gt;&lt;img src=&quot;http://www.cimgf.com/wp-content/uploads/2009/06/navcontrollerselect-218x300.png&quot; alt=&quot;Select Navigation Controller&quot; title=&quot;Select Navigation Controller&quot; width=&quot;218&quot; height=&quot;300&quot; class=&quot;alignnone size-medium wp-image-603&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You will notice back in the &lt;em&gt;MainWindow.xib&lt;/em&gt; window that the view controller for &lt;em&gt;First View&lt;/em&gt; is now a &lt;em&gt;UINavigationController&lt;/em&gt;. Expand the UINavigationController item now.&lt;br /&gt;
&lt;a href=&quot;http://www.cimgf.com/wp-content/uploads/2009/06/mainwindow2.png&quot; rel=&quot;lightbox&quot;&gt;&lt;img src=&quot;http://www.cimgf.com/wp-content/uploads/2009/06/mainwindow2-300x213.png&quot; alt=&quot;New UINavigationController&quot; title=&quot;New UINavigationController&quot; width=&quot;300&quot; height=&quot;213&quot; class=&quot;alignnone size-medium wp-image-604&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now select the &lt;em&gt;View Controller&lt;/em&gt; that is a child of our new &lt;em&gt;UINavigationController&lt;/em&gt;. Click on the &lt;em&gt;Identity&lt;/em&gt; tab of the object inspector and change the &lt;em&gt;Class&lt;/em&gt; to &lt;em&gt;FirstViewController&lt;/em&gt;.&lt;br /&gt;
&lt;a href=&quot;http://www.cimgf.com/wp-content/uploads/2009/06/identity.png&quot; rel=&quot;lightbox&quot;&gt;&lt;img src=&quot;http://www.cimgf.com/wp-content/uploads/2009/06/identity.png&quot; alt=&quot;First View Controller Identity&quot; title=&quot;First View Controller Identity&quot; width=&quot;236&quot; height=&quot;285&quot; class=&quot;alignnone size-full wp-image-611&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click on the &lt;em&gt;Navigation Item&lt;/em&gt; that is a child of the &lt;em&gt;First View Controller&lt;/em&gt; and change the &lt;em&gt;Title&lt;/em&gt; in the &lt;em&gt;Attributes&lt;/em&gt; tab of the object inspector to &lt;em&gt;&amp;#8220;First&amp;#8221;&lt;/em&gt;.&lt;br /&gt;
&lt;a href=&quot;http://www.cimgf.com/wp-content/uploads/2009/06/navitemattributes.png&quot; rel=&quot;lightbox&quot;&gt;&lt;img src=&quot;http://www.cimgf.com/wp-content/uploads/2009/06/navitemattributes.png&quot; alt=&quot;Navigation Item Attributes&quot; title=&quot;Navigation Item Attributes&quot; width=&quot;236&quot; height=&quot;142&quot; class=&quot;alignnone size-full wp-image-613&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Save your changes in Interface Builder, switch back to Xcode and &lt;em&gt;Build &amp;amp; Go&lt;/em&gt;. You should see something like the following in your &lt;em&gt;First&lt;/em&gt; view tab.&lt;br /&gt;
&lt;a href=&quot;http://www.cimgf.com/wp-content/uploads/2009/06/firstviewsimulator.png&quot; rel=&quot;lightbox&quot;&gt;&lt;img src=&quot;http://www.cimgf.com/wp-content/uploads/2009/06/firstviewsimulator-161x300.png&quot; alt=&quot;First View in Simulator&quot; title=&quot;First View in Simulator&quot; width=&quot;161&quot; height=&quot;300&quot; class=&quot;alignnone size-medium wp-image-615&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Notice that there is a Toolbar visible at the bottom of the first view. If you would like to hide this, go back into Interface Builder and select the &lt;em&gt;Navigation Controller&lt;/em&gt; In the object inspector, uncheck the &lt;em&gt;Shows Toolbar&lt;/em&gt; checkbox.&lt;br /&gt;
&lt;a href=&quot;http://www.cimgf.com/wp-content/uploads/2009/06/uncheckshowstoolbar.png&quot; rel=&quot;lightbox&quot;&gt;&lt;img src=&quot;http://www.cimgf.com/wp-content/uploads/2009/06/uncheckshowstoolbar.png&quot; alt=&quot;Uncheck Shows Toolbar&quot; title=&quot;Uncheck Shows Toolbar&quot; width=&quot;236&quot; height=&quot;201&quot; class=&quot;alignnone size-full wp-image-617&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Pushing a New Controller&lt;/h2&gt;
&lt;p&gt;Before we create a new view controller, let&amp;#8217;s set up our &lt;em&gt;FirstViewController&lt;/em&gt; to create an event that will trigger pushing the new controller. Since our FirstView was not created with a xib, let&amp;#8217;s create one and then add actions and outlets to it.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;In Xcode, right-click or ctrl-click the &lt;em&gt;Resources&lt;/em&gt; group and select &lt;em&gt;Add | New File&amp;#8230;&lt;/em&gt;. In the ensuing dialog, select &lt;em&gt;View XIB&lt;/em&gt; in the &lt;em&gt;User Interface&lt;/em&gt; section of &lt;em&gt;iPhone OS&lt;/em&gt; templates and click &lt;em&gt;Next&lt;/em&gt;. Name the XIB &lt;em&gt;FirstView&lt;/em&gt; and click &lt;em&gt;Finish&lt;/em&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Double-click the new XIB to open it in Interface Builder and select the &lt;em&gt;Identity&lt;/em&gt; tab after you have made sure that &lt;em&gt;File&amp;#8217;s Owner&lt;/em&gt; is selected. Change the &lt;em&gt;Class&lt;/em&gt; field to &lt;em&gt;FirstViewController&lt;/em&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ctrl-click and drag a connection from the &lt;em&gt;File&amp;#8217;s Owner&lt;/em&gt; object to the &lt;em&gt;View&lt;/em&gt; object in the main window for our XIB and select &lt;em&gt;view&lt;/em&gt; in the ensuing pop up menu.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;From the &lt;em&gt;Object Library&lt;/em&gt; drag and drop a button onto the view. Double-click the button and give it the title &lt;em&gt;&amp;#8220;Push&amp;#8221;&lt;/em&gt;. Save your changes in Interface Builder and switch back to Xcode.&lt;br /&gt;
&lt;a href=&quot;http://www.cimgf.com/wp-content/uploads/2009/06/pbutton.png&quot; rel=&quot;lightbox&quot;&gt;&lt;img src=&quot;http://www.cimgf.com/wp-content/uploads/2009/06/pbutton-161x300.png&quot; alt=&quot;&amp;quot;Push&amp;quot; Button&quot; title=&quot;&amp;quot;Push&amp;quot; Button&quot; width=&quot;161&quot; height=&quot;300&quot; class=&quot;alignnone size-medium wp-image-633&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open the file &lt;em&gt;FirstViewController.h&lt;/em&gt; and add an action so that the header looks like this:&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;objc&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #6e371a;&quot;&gt;#import &amp;lt;UIKit/UIKit.h&amp;gt;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #a61390;&quot;&gt;@interface&lt;/span&gt; FirstViewController &lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt; UIViewController &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #002200;&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;IBAction&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;push&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #a61390;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;sender;
&amp;nbsp;
&lt;span style=&quot;color: #a61390;&quot;&gt;@end&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open the file &lt;em&gt;FirstViewController.m&lt;/em&gt; and implement the action so that the code looks like this:&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;objc&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #6e371a;&quot;&gt;#import &amp;quot;FirstViewController.h&amp;quot;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #a61390;&quot;&gt;@implementation&lt;/span&gt; FirstViewController
&amp;nbsp;
&lt;span style=&quot;color: #002200;&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;IBAction&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;push&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #a61390;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;sender
&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #002200;&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #a61390;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;dealloc &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;super dealloc&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;;
&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #a61390;&quot;&gt;@end&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; You can safely delete all of the view controller template code which I have done in this example. Don&amp;#8217;t worry. You won&amp;#8217;t hurt anything.&lt;/p&gt;&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;We will come back to the push implementation after we have created our new view controller that we are going to push.&lt;/p&gt;
&lt;h2&gt;Create the New View Controller&lt;/h2&gt;
&lt;p&gt;We are now going to create the new view controller that will be displayed when we tap our &amp;#8220;Push&amp;#8221; button in the &lt;em&gt;FirstViewController&lt;/em&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;In Xcode, right-click or ctrl-click the &lt;em&gt;Classes&lt;/em&gt; group and select &lt;em&gt;Add | New File&amp;#8230;&lt;/em&gt;. In the ensuing dialog, select &lt;em&gt;UIViewController subclass&lt;/em&gt; in the &lt;em&gt;Cocoa Touch Class&lt;/em&gt; category of the &lt;em&gt;iPhone OS&lt;/em&gt; templates. Make sure &lt;em&gt;With XIB for user interface&lt;/em&gt; is checked and click &lt;em&gt;Next&lt;/em&gt;. Name the file &lt;em&gt;NewViewController.m&lt;/em&gt; and click &lt;em&gt;Finish&lt;/em&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For organization purposes, move the newly created &lt;em&gt;NewViewController.xib&lt;/em&gt; file into the &lt;em&gt;Resources&lt;/em&gt; group. Then double-click it to open it in Interface Builder.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In Interface Builder, drag a &lt;em&gt;UILabel&lt;/em&gt; onto the view and give it the title &lt;em&gt;&amp;#8220;New View Controller&amp;#8221;&lt;/em&gt;. Save the file and switch back to Xcode.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open the file &lt;em&gt;FirstViewController.m&lt;/em&gt; again and implement controller push code so that it looks like this:&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;objc&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #6e371a;&quot;&gt;#import &amp;quot;FirstViewController.h&amp;quot;&lt;/span&gt;
&lt;span style=&quot;color: #6e371a;&quot;&gt;#import &amp;quot;NewViewController.h&amp;quot;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #a61390;&quot;&gt;@implementation&lt;/span&gt; FirstViewController
&amp;nbsp;
&lt;span style=&quot;color: #002200;&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;IBAction&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;push&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #a61390;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;sender
&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#123;&lt;/span&gt;
  NewViewController &lt;span style=&quot;color: #002200;&quot;&gt;*&lt;/span&gt;controller &lt;span style=&quot;color: #002200;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;NewViewController alloc&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt; initWithNibName&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #bf1d1a;&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color: #bf1d1a;&quot;&gt;&amp;quot;NewViewController&amp;quot;&lt;/span&gt; bundle&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #a61390;&quot;&gt;nil&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;;
  &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;self navigationController&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt; pushViewController&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;controller animated&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #a61390;&quot;&gt;YES&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;;
  &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;controller release&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;, controller &lt;span style=&quot;color: #002200;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #a61390;&quot;&gt;nil&lt;/span&gt;;
&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #002200;&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #a61390;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;dealloc &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;super dealloc&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;;
&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #a61390;&quot;&gt;@end&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;&lt;p&gt;Don&amp;#8217;t forget to #import &amp;#8220;NewViewController.h&amp;#8221;&lt;/p&gt;&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To connect our button to the push action, double-click the &lt;em&gt;FirstView.xib&lt;/em&gt; file in the &lt;em&gt;Resources&lt;/em&gt; group to open it in Interface Builder.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ctrl-click and drag a connection from the &lt;em&gt;&amp;#8220;Push&amp;#8221;&lt;/em&gt; button in our view to the &lt;em&gt;File&amp;#8217;s Owner&lt;/em&gt; object and select &lt;em&gt;push:&lt;/em&gt; in the ensuing pop up menu. Save your changes in Interface Builder. Switch back to Xcode and &lt;em&gt;Build &amp;amp; Go&lt;/em&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Additionally, you can give your &lt;em&gt;New View Controller&lt;/em&gt; a title by implementing &lt;em&gt;-viewDidLoad&lt;/em&gt;. Just open your &lt;em&gt;NewViewController.m&lt;/em&gt; file and uncomment the &lt;em&gt;-viewDidLoad&lt;/em&gt; code making it look like the following:&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;objc&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #6e371a;&quot;&gt;#import &amp;quot;NewViewController.h&amp;quot;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #a61390;&quot;&gt;@implementation&lt;/span&gt; NewViewController
&amp;nbsp;
&lt;span style=&quot;color: #002200;&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #a61390;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;viewDidLoad &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#123;&lt;/span&gt;
  &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;self setTitle&lt;span style=&quot;color: #002200;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #bf1d1a;&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color: #bf1d1a;&quot;&gt;&amp;quot;New View&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;;
  &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;super viewDidLoad&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;;
&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #002200;&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #a61390;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#41;&lt;/span&gt;dealloc &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#123;&lt;/span&gt;
  &lt;span style=&quot;color: #002200;&quot;&gt;&amp;#91;&lt;/span&gt;super dealloc&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#93;&lt;/span&gt;;
&lt;span style=&quot;color: #002200;&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #a61390;&quot;&gt;@end&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href=&quot;http://www.cimgf.com/wp-content/uploads/2009/06/newview.png&quot; rel=&quot;lightbox&quot;&gt;&lt;img src=&quot;http://www.cimgf.com/wp-content/uploads/2009/06/newview-161x300.png&quot; alt=&quot;New View Controller&quot; title=&quot;New View Controller&quot; width=&quot;161&quot; height=&quot;300&quot; class=&quot;alignnone size-medium wp-image-630&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And that&amp;#8217;s pretty much all there is to it. There are a lot of steps here, but I think you&amp;#8217;ll see that setting up your application to implement both a UITabBarController and a UINavigationController is pretty straight forward. &lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;How best to organize your views in an iPhone application is a design process. Often applications will have a lot of data for your users to access and it will be up to you to find the best way to organize it. Being able to utilize both a tab bar and a navigation controller can really help in this process. Until next time.&lt;/p&gt;
&lt;p&gt;&lt;a href='http://www.cimgf.com/wp-content/uploads/2009/06/tabbarnavigator.zip'&gt;TabBarNavigator Demo Project&lt;/a&gt;&lt;/p&gt;
</description>
      <pubDate>Thu, 25 Jun 2009 20:18:52 -0700</pubDate>
      <dc:date>2009-06-25T20:18:52-07:00</dc:date>
    </item>
    <item>
      <title>Launching: If it ain’t broke, don’t fix it</title>
      <link>http://www.cimgf.com/2009/06/24/launching-if-it-aint-broke-dont-fix-it/</link>
      <description>&lt;p&gt;This is the first in a short series on my adventures getting my software out the door.  Rather than this first lesson be a lesson in what to do, here&amp;#8217;s what not to do.&lt;br /&gt;
&lt;span id=&quot;more-580&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;strong&gt;Don&amp;#8217;t order a DSL upgrade 7 days before your ship date.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Yes, indeed.  Last Wednesday morning, Qwest &amp;#8220;upgraded&amp;#8221; our DSL to 7Mbps.  From then until Saturday lunchtime, I had 13 hours of solid connectivity, most of which I was asleep for.  It did indeed get resolved and I am enjoying the new speed but it certainly wasn&amp;#8217;t worth stress of trying to find connectivity while trying to ship.  I went to Barnes and Noble, Krispy Kreme and the seminary library in search of the uplink.  I also wasted a trip to Best Buy to get a new DSL modem which didn&amp;#8217;t solve the issue, despite the Qwest tech&amp;#8217;s assurances that it would. (That reminds me, I need to return it and get my $75 back.)&lt;/p&gt;
&lt;p&gt;Thinking about it, my rule should be generalized as:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Don&amp;#8217;t replace/upgrade/otherwise mess with any of your critical infrastructure within two weeks of your ship date unless it&amp;#8217;s broke.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;After being burned by the DSL outage, I left well alone newly released 