<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xml:lang="en" xml:base="http://planetidev.bunnyhero.org/wp-atom.php">
	<title type="text">planet idev</title>
	<subtitle type="text">iPhone development around the blogosphere</subtitle>

	<updated>2011-07-15T23:30:00Z</updated>

	<link rel="alternate" type="text/html" href="http://planetidev.bunnyhero.org" />
	<id>http://planetidev.bunnyhero.org/?feed=atom</id>
	

	<generator uri="http://wordpress.org/" version="3.2.1">WordPress</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/planetidev" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="planetidev" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
		<author>
			<name>Mike Schramm</name>
						<uri>http://www.tuaw.com</uri>
					</author>
		<title type="html"><![CDATA[Bone comic now available on Comixology]]></title>
		<link rel="alternate" type="text/html" href="http://www.tuaw.com/2011/07/15/bone-comic-now-available-on-comixology/" />
		<id>http://www.tuaw.com/2011/07/15/bone-comic-now-available-on-comixology/</id>
		<updated>2011-07-15T23:30:00Z</updated>
		<published>2011-07-15T23:30:00Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="bone" /><category scheme="http://planetidev.bunnyhero.org" term="comics" /><category scheme="http://planetidev.bunnyhero.org" term="comixology" /><category scheme="http://planetidev.bunnyhero.org" term="iOS" /><category scheme="http://planetidev.bunnyhero.org" term="iPad" /><category scheme="http://planetidev.bunnyhero.org" term="iPhone" /><category scheme="http://planetidev.bunnyhero.org" term="jeff smith" /><category scheme="http://planetidev.bunnyhero.org" term="JeffSmith" /><category scheme="http://planetidev.bunnyhero.org" term="reading" />		<summary type="html"><![CDATA[[...]]]></summary>
		<content type="html" xml:base="http://www.tuaw.com/2011/07/15/bone-comic-now-available-on-comixology/"><![CDATA[<p style="text-align:center">
	<img alt="" border="0" height="304" src="http://www.blogcdn.com//media/2011/07/bonecomixology.jpg" width="465" /></p>
<p>
	Jeff Smith&#8217;s <a href="http://www.boneville.com/bone/">Bone comic</a> is one of my favorite series ever &#8212; it skillfully combines an epic fantasy story with some hilarious cartoon characters, making for a really solid tale that will appeal to all kinds of readers. And now the series is fully available in a digital format for the first time, <a href="http://itunes.apple.com/us/app/comics/id303491945?mt=8">thanks to iOS app developer Comixology</a>.</p>
<p>
	Comixology has been making a lot of great deals on their Comics app, and <a href="http://robot6.comicbookresources.com/2011/07/comixology-launches-dedicated-bone-rasl-apps/">this Bone deal</a>, selling all 55 issues of the series for just a buck each, is one of the better ones they&#8217;ve made lately. The first issue of the series is also up for a free download, and another series by creator Jeff Smith called Rasl is also available, with the first issue for free, and subsequent issues on sale until July 19th.</p>
<p>
	We knew a lot time ago that <a href="http://www.tuaw.com/2010/07/29/20-great-free-ipad-comics/">comics on the iPad</a> would be one of the tablet&#8217;s greatest assets, and the Comixology app has a lot of great funnies to read, from all kinds of different publishers. The app is <a href="http://itunes.apple.com/us/app/comics/id303491945?mt=8">free on the App Store</a> right now.</p>
<p style="padding:5px;background:#ddd;border:1px solid #ccc;clear:both;"><a href="http://www.tuaw.com/2011/07/15/bone-comic-now-available-on-comixology/">Bone comic now available on Comixology</a> originally appeared on <a href="http://www.tuaw.com">TUAW &#8211; The Unofficial Apple Weblog</a> on Fri, 15 Jul 2011 18:30:00 EST.  Please see our <a href="http://www.weblogsinc.com/feed-terms/">terms for use of feeds</a>.</p>
<p style="padding:5px;background:#ffffcc;border:1px solid #ffff99;clear:both;"><a href="http://www.tuaw.com"><img src="http://www.tuaw.com/media/feedlogo.gif" alt="TUAW - The Unofficial Apple Weblog" style="float:left;padding:0 5px 5px 0;" /></a><a href="http://www.tuaw.com/2011/07/15/bone-comic-now-available-on-comixology/">Bone comic now available on Comixology</a> originally appeared on <a href="http://www.tuaw.com">TUAW &#8211; The Unofficial Apple Weblog</a> on Fri, 15 Jul 2011 18:30:00 EST.  Please see our <a href="http://www.weblogsinc.com/feed-terms/">terms for use of feeds</a>.<br style="clear:both;"></p>
<p style="clear: both; padding: 8px 0 0 0; height: 2px; font-size: 1px; border: 0; margin: 0; padding: 0;">
<p><a href=http://robot6.comicbookresources.com/2011/07/comixology-launches-dedicated-bone-rasl-apps/>Read</a> | <a href="http://www.tuaw.com/2011/07/15/bone-comic-now-available-on-comixology/" rel="bookmark" title="Permanent link to this entry">Permalink</a> | <a href="http://www.tuaw.com/forward/19992455/" title="Send this entry to a friend via email">Email this</a> | <a href="http://www.tuaw.com/2011/07/15/bone-comic-now-available-on-comixology/#comments" title="View reader comments on this entry">Comments</a></p>
]]></content>
<source>
	<title>TUAW - The Unofficial Apple Weblog</title>
	<link rel="alternate" type="text/html" href="http://www.tuaw.com" />
	<link rel="self" href="http://www.tuaw.com/category/developer/rss.xml" />
	<id>http://www.tuaw.com/category/developer/rss.xml</id>
</source>
		<link rel="replies" type="text/html" href="http://www.tuaw.com/2011/07/15/bone-comic-now-available-on-comixology/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://planetidev.bunnyhero.org/?feed=atom&amp;p=4183" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>cadamson</name>
						<uri>http://www.subfurther.com/blog</uri>
					</author>
		<title type="html"><![CDATA[alutLoadWAVFile(). Or better yet, don’t.]]></title>
		<link rel="alternate" type="text/html" href="http://www.subfurther.com/blog/2011/07/15/alutloadwavfile-or-better-yet-dont/" />
		<id>http://www.subfurther.com/blog/?p=1915</id>
		<updated>2011-07-15T18:59:43Z</updated>
		<published>2011-07-15T18:59:43Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="coreaudio" /><category scheme="http://planetidev.bunnyhero.org" term="openal" /><category scheme="http://planetidev.bunnyhero.org" term="publishing" />		<summary type="html"><![CDATA[My last iDevBlogADay entry was about the second edition of the Prags&#8217; iOS development book, so this time, I want to shine some light on my other current writing project, the long-in-coming Core Audio book. Last month, I mentioned that we&#8217;d shipped an update with three new chapters. A lot of the focus is and [...]]]></summary>
		<content type="html" xml:base="http://www.subfurther.com/blog/2011/07/15/alutloadwavfile-or-better-yet-dont/"><![CDATA[<p>My last <a href="http://idevblogaday.com/">iDevBlogADay</a> entry was about <a href="http://www.subfurther.com/blog/2011/07/01/second-edition-volume-one/">the second edition of the Prags&#8217; iOS development book</a>, so this time, I want to shine some light on my other current writing project, the long-in-coming <a href="http://www.mypearsonstore.com/bookstore/product.asp?isbn=9780321636843"><i>Core Audio</i></a> book. <a href="http://www.subfurther.com/blog/2011/06/08/core-audio-book-update-jun-11/">Last month</a>, I mentioned that we&#8217;d shipped an update with three new chapters. A lot of the focus is and should be on the Audio Units chapters, but I want to talk about OpenAL.</p>
<p><a href="http://www.mypearsonstore.com/bookstore/product.asp?isbn=9780321636843" border="0"><img src="http://www.subfurther.com/images/core-audio-book-125x159.jpg" width="125" height="159" alt="Core Audio" align="right"/></a>If you go looking for OpenAL examples on the web &#8212; like <a href="http://www.edenwaith.com/products/pige/tutorials/openal.php">this one</a> or <a href="http://www.devmaster.net/articles/openal-tutorials/lesson1.php">this other one</a> &#8212; chances are high that the sample code will include a call to <code>alutLoadWAVFile()</code>.</p>
<p>This function, in fact all of <code>alut.h</code> was deprecated in 2005. But people are <a href="http://www.david-amador.com/2011/06/playing-sound-using-openal/">still using it in tutorials</a>. In iDevBlogADay posts. On iOS. Which never shipped <code>alut.h</code>.</p>
<p>Yes, you can get the source and compile it yourself.  There are even <a href="http://connect.creativelabs.com/openal/Documentation/The%20OpenAL%20Utility%20Toolkit.htm">fossilized docs</a> for it.  But, really, please don&#8217;t.</p>
<p>Let&#8217;s get to the question of why it was deprecated in the first place. Adam D. Moss of gimp.org, <a href="http://opensource.creative.com/pipermail/openal/2005-March/008133.html">writing back in 2005</a>, please take it away:</p>
<blockquote><p>OpenAL is an audio renderer and just doesn&#8217;t have any business doing file IO and decoding arbitrary file formats, which are well-covered by other specialised libraries.</p>
<p>As sick as everyone probably is of the GL comparisons, OpenAL loading WAV files is like OpenGL loading XPMs.  A utility layer on top of AL is a useful thing, but most of the reasons that ever justified GLUT&#8217;s existance don&#8217;t apply to ALUT or are trivially implementable by the app, with or without<br />
third-party code.</p>
</blockquote>
<p>In the book, we didn&#8217;t want to rely on something that wasn&#8217;t part of iOS or Mac OS X, or on a file format that we otherwise have no use for (we&#8217;d much rather you bundle your app&#8217;s audio in <code>.caf</code> files). And as it turns out, Core Audio offers a much better way to load audio into your application.</p>
<p>In our example, we load a file into a memory, and then animate its location in the 3D coordinate space to create the illusion of the sound &#8220;orbiting&#8221; the listener. To keep track of state, we use a struct:</p>
<pre><code>

#pragma mark user-data struct
typedef struct MyLoopPlayer {
	AudioStreamBasicDescription	dataFormat;
	UInt16				*sampleBuffer;
	UInt32				bufferSizeBytes;
	ALuint				sources[1];
} MyLoopPlayer;
</code></pre>
<p>This struct describes the audio format, has a buffer and size to hold the samples, and has the OpenAL source that we animate.</p>
<p>The function below loads an arbitrary file, <code>LOOP_PATH_STR</code>, into the struct.  It&#8217;s a long listing; summary follows:</p>
<pre><code>
// note: CheckError() is defined earlier in the book. Just tests
// OSStatus==nil, and fails with a useful printf() if not

OSStatus loadLoopIntoBuffer(MyLoopPlayer* player) {
	CFURLRef loopFileURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault,
						LOOP_PATH,
						kCFURLPOSIXPathStyle,
						false);

	// describe the client format - AL needs mono
	memset(&#038;player->dataFormat, 0, sizeof(player->dataFormat));
	player->dataFormat.mFormatID = kAudioFormatLinearPCM;
	player->dataFormat.mFormatFlags = kAudioFormatFlagIsSignedInteger |
				kAudioFormatFlagIsPacked;
	player->dataFormat.mSampleRate = 44100.0;
	player->dataFormat.mChannelsPerFrame = 1;
	player->dataFormat.mFramesPerPacket = 1;
	player->dataFormat.mBitsPerChannel = 16;
	player->dataFormat.mBytesPerFrame = 2;
	player->dataFormat.mBytesPerPacket = 2;

	ExtAudioFileRef extAudioFile;
	CheckError (ExtAudioFileOpenURL(loopFileURL, &#038;extAudioFile),
				"Couldn't open ExtAudioFile for reading");

	// tell extAudioFile about our format
	CheckError(ExtAudioFileSetProperty(extAudioFile,
				kExtAudioFileProperty_ClientDataFormat,
				sizeof (AudioStreamBasicDescription),
				&#038;player->dataFormat),
			   "Couldn't set client format on ExtAudioFile");

	// figure out how big a buffer we need
	SInt64 fileLengthFrames;
	UInt32 propSize = sizeof (fileLengthFrames);
	ExtAudioFileGetProperty(extAudioFile,
			kExtAudioFileProperty_FileLengthFrames,
			&#038;propSize,
			&#038;fileLengthFrames);

	printf ("plan on reading %lld frames\n", fileLengthFrames);
	player->bufferSizeBytes = fileLengthFrames *
		player->dataFormat.mBytesPerFrame;

	AudioBufferList *buffers;
	UInt32 ablSize = offsetof(AudioBufferList, mBuffers[0]) +
		(sizeof(AudioBuffer) * 1); // 1 channel
	buffers = malloc (ablSize);

	// allocate sample buffer
	player->sampleBuffer =  malloc(sizeof(UInt16) *
		player->bufferSizeBytes); // 4/18/11 - fix 1

	buffers->mNumberBuffers = 1;
	buffers->mBuffers[0].mNumberChannels = 1;
	buffers->mBuffers[0].mDataByteSize = player->bufferSizeBytes;
	buffers->mBuffers[0].mData = player->sampleBuffer;

	printf ("created AudioBufferList\n");

	// loop reading into the ABL until buffer is full
	UInt32 totalFramesRead = 0;
	do {
		UInt32 framesRead = fileLengthFrames - totalFramesRead;
		buffers->mBuffers[0].mData = player->sampleBuffer +
			(totalFramesRead * (sizeof(UInt16)));
		CheckError(ExtAudioFileRead(extAudioFile,
					&#038;framesRead,
					buffers),
				   "ExtAudioFileRead failed");
		totalFramesRead += framesRead;
		printf ("read %d frames\n", framesRead);
	} while (totalFramesRead < fileLengthFrames);

	// can free the ABL; still have samples in sampleBuffer
	free(buffers);
	return noErr;
}
</code></pre>
<p>The essential technique here is that we are using <a href="http://developer.apple.com/library/ios/#documentation/MusicAudio/Reference/ExtendedAudioFileServicesReference/Reference/reference.html">Extended Audio File Services</a> to read from a source audio file. That gets more important in a minute. For now, we have the following essential steps:</p>
<ol>
<li>Define a mono PCM format compatible with OpenAL, and set this as the client format for an <code>ExtAudioFile</code>. This is the format that will be delivered to us.</li>
<li>Calculate how big a buffer we need. The property <code> kExtAudioFileProperty_FileLengthFrames</code> gives us a frame count, and in PCM, being constant bitrate, we can calculate the buffer size as channel-count * bytes-per-frame * frame-count.</li>
<li>Create the data buffer, build an <code>AudioBufferList</code> structure around it</li>
<li>Read from the <code>ExtAudioFile</code>, into the <code>AudioBufferList</code>, until we reach end-of-file.
</ol>
<p>When the function returns, we have data in a format suitable for sending over to OpenAL via the <code>alBufferData</code> call:</p>
<pre><code>
alBufferData(*buffers,
		AL_FORMAT_MONO16,
		player.sampleBuffer,
		player.bufferSizeBytes,
		player.dataFormat.mSampleRate);
</code></pre>
<p>Now, I mentioned that it was important that we used <code>ExtAudioFile</code>, and here's why: it combines file I/O and audio format conversion into one call. So, whereas <code>alutLoadWAVFile</code> can only work with PCM audio in WAV containers, this code works with <strong>anything</strong> that Core Audio can open: MP3, AAC, ALAC, etc.</p>
<p>In fact, in the second example in the chapter, we switch from looping a buffer to calling the OpenAL streaming APIs. So if we combine our orbit:</p>
<p><a href="http://www.subfurther.com/blog/wp-content/uploads/2011/07/al-orbit.jpg"><img src="http://www.subfurther.com/blog/wp-content/uploads/2011/07/al-orbit.jpg" alt="" title="al-orbit" width="202" height="168" class="alignleft size-full wp-image-1924" /></a></p>
<p>with one of <a href="https://twitter.com/#!/chuckdude">our editor</a>'s favorite and appropriately-named songs, loaded from an .m4a, we get this:</p>
<p><audio controls="controls" src="http://dl.dropbox.com/u/12216224/blog/audio/long-distance-roundabout-openal-orbit.m4a" type="audio /x-m4a" preload="metadata"><br />
<em>Sure sucks to not have an HTML5 browser, huh?</em><br />
</audio></p>
<p>So there you have it: don't recompile a neglected and deprecated ALUT library for the sake of <code>alutLoadWAVFile()</code>, when you can use Core Audio on iOS/OSX to open any supported container/codec combination. More powerful, less skeevy... should be an easy choice.</p>
<p>One more thing... people have reported having problems getting the <i>Core Audio</i> sample code from Safari Online Books. I can see it when I'm logged in, but apparently I might be the only one.  Until this problem is fixed, I'm making the book's sample code available on my Dropbox: <a href="http://dl.dropbox.com/u/12216224/coreaudiobook/core-audio-examples-04-30-2011.zip"><code>core-audio-examples-04-30-2011.zip</code></a>. Hope that helps.</p>
<p><img src="http://feeds.feedburner.com/~r/timecode/~4/68URdNDw5C4" height="1" width="1"/></p>
]]></content>
<link href="http://dl.dropbox.com/u/12216224/blog/audio/long-distance-roundabout-openal-orbit.m4a" rel="enclosure" length="339387" type="audio/mpeg" />
<source>
	<title>[Time code];</title>
	<link rel="alternate" type="text/html" href="http://www.subfurther.com/blog" />
	<link rel="self" href="http://feeds.feedburner.com/timecode" />
	<id>http://feeds.feedburner.com/timecode</id>
</source>
		<link rel="replies" type="text/html" href="http://www.subfurther.com/blog/2011/07/15/alutloadwavfile-or-better-yet-dont/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.subfurther.com/blog/2011/07/15/alutloadwavfile-or-better-yet-dont/feed/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>John</name>
						<uri>http://www.71squared.com</uri>
					</author>
		<title type="html"><![CDATA[Open Source: Easy Multistroke and Single Stroke Complex Gesture Recognition On iOS]]></title>
		<link rel="alternate" type="text/html" href="http://maniacdev.com/2011/07/open-source-multistroke-and-single-stroke-complex-gesture-recognition-on-ios/" />
		<id>http://maniacdev.com/?p=4059</id>
		<updated>2011-07-15T18:55:14Z</updated>
		<published>2011-07-15T18:55:14Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="iPhone SDK And iPad SDK" /><category scheme="http://planetidev.bunnyhero.org" term="Objective-C Programming" /><category scheme="http://planetidev.bunnyhero.org" term="Open Source iOS Libraries And Tools" />		<summary type="html"><![CDATA[<div><a href="http://twitter.com/share?url=http://maniacdev.com/2011/07/open-source-multistroke-and-single-stroke-complex-gesture-recognition-on-ios/&#38;text=Open%20Source:%20Easy%20Multistroke%20and%20Single%20Stroke%20Complex%20Gesture%20Recognition%20On%20iOS&#38;via=maniacdev&#38;related="><img align="right" src="http://maniacdev.com/wp-content/plugins//easy-twitter-button/i/buttons/en/tweetn.png" style="border: none" alt="" /></a></div>
If you&#8217;ve ever wondered how to code gesture recognition for complex shapes I&#8217;ve come across a couple of open source libraries that should be a great deal of help.  This goes well beyond finger swiping. This library is based on the $1 gesture recognizer which I remember being discussed quite a bit a few years [...]]]></summary>
		<content type="html" xml:base="http://maniacdev.com/2011/07/open-source-multistroke-and-single-stroke-complex-gesture-recognition-on-ios/"><![CDATA[<div class="twitterbutton" style="float: right; padding-left: 5px;"><a href="http://twitter.com/share?url=http://maniacdev.com/2011/07/open-source-multistroke-and-single-stroke-complex-gesture-recognition-on-ios/&amp;text=Open%20Source:%20Easy%20Multistroke%20and%20Single%20Stroke%20Complex%20Gesture%20Recognition%20On%20iOS&amp;via=maniacdev&amp;related="><img align="right" src="http://maniacdev.com/wp-content/plugins//easy-twitter-button/i/buttons/en/tweetn.png" style="border: none;" alt="" /></a></div>
<p>If you&#8217;ve ever wondered how to code gesture recognition for complex shapes I&#8217;ve come across a couple of open source libraries that should be a great deal of help.  This goes well beyond finger swiping.</p>
<p>This library is based on the $1 gesture recognizer which I remember being discussed quite a bit a few years back because not only did it run efficiently,  but allowed you define the templates to recognize complex shapes very easily.   The $1 gesture recognizer only recognizes 1 single stroke from the user.  The $1 gesture recognizer was later expanded on to become the $N multistroke gesture recognizer.</p>
<p>Brit Gardner has taken the $N gesture recognizer and created an Objective-C implementation of the code.</p>
<p>You can read about complex gesture recognition, and why Brit decided to use the $N gesture recognizer on his site in these posts:</p>
<p><a href="http://britg.com/2011/05/14/complex-gesture-recognition-in-ios-part-1-the-research/" >Complex Gesture Recognition in iOS &#8211; Part 1: The Research</a><br />
<a href="http://britg.com/2011/06/17/complex-gesture-recognition-in-ios-part-2-the-ios-implementation/" >Complex Gesture Recognition in iOS &#8211; Part 2: The Implementation</a></p>
<p>You can find Brit&#8217;s Github for the Objective-C $N gesture recognizer here:</p>
<p><a href="https://github.com/britg/MultistrokeGestureRecognizer-iOS" >https://github.com/britg/MultistrokeGestureRecognizer-iOS </a></p>
<p>Adam Preble has created an implementation of the $1 gesture recognizer which can be found here:</p>
<p><a href="https://github.com/preble/GLGestureRecognizer" >https://github.com/preble/GLGestureRecognizer </a></p>
<p>You can try out the javascript versions, check out the full pseudocode, or download other versions of the gesture recognizers from the University of Washington here:</p>
<p><a href="http://depts.washington.edu/aimgroup/proj/dollar/index.html" >The $1 Gesture Recognizer</a><br />
<a href="http://depts.washington.edu/aimgroup/proj/dollar/ndollar.html" >The $N Multistroke Gesture Recognizer</a></p>
<p>I&#8217;ve received e-mails a couple of times over the years asking about how some drawing games were created on the iPhone.  If you are looking to make that kind of game this should help give you a head start.</p>
<p>&copy;2011 <a href="http://maniacdev.com">iPhone, iOS 4, iPad SDK Development Tutorial and Programming Tips</a>. All Rights Reserved.</p>
<p>.
<div class="prli-social-buttons-bar"><a href="http://del.icio.us/post?url=http://maniacdev.com/hf5&#038;title=Open+Source:+Easy+Multistroke+and+Single+Stroke+Complex+Gesture+Recognition+On+iOS" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/delicious_32.png" alt="Delicious" title="Delicious" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://twitter.com/home?status=RT+@maniacdev:+Open+Source:+Easy+Multistroke+and+Single+Stroke+Complex+Gesture+Recognition+On+http://maniacdev.com/hf5+(via+@maniacdev)" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/twitter_32.png" alt="Twitter" title="Twitter" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://technorati.com/faves?add=http://maniacdev.com/hf5" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/technorati_32.png" alt="Technorati" title="Technorati" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://www.facebook.com/sharer.php?u=http://maniacdev.com/hf5&#038;t=Open+Source:+Easy+Multistroke+and+Single+Stroke+Complex+Gesture+Recognition+On+iOS" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/facebook_32.png" alt="Facebook" title="Facebook" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://www.linkedin.com/shareArticle?mini=true&#038;url=http://maniacdev.com/hf5&#038;title=Open+Source:+Easy+Multistroke+and+Single+Stroke+Complex+Gesture+Recognition+On+iOS" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/linkedin_32.png" alt="LinkedIn" title="LinkedIn" border="0" style="padding: 0 20px 0 0;" /></a><a href="mailto:?subject=Open%20Source:%20Easy%20Multistroke%20and%20Single%20Stroke%20Complex%20Gesture%20Recognition%20On%20iOS&#038;body=Open%20Source:%20Easy%20Multistroke%20and%20Single%20Stroke%20Complex%20Gesture%20Recognition%20On%20iOS%20http://maniacdev.com/hf5" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/email_32.png" alt="Email" title="Email" border="0" style="padding: 0 20px 0 0;" /></a></div>
]]></content>
<source>
	<title>iPhone, iOS 4, iPad SDK Development Tutorial and Programming Tips</title>
	<link rel="alternate" type="text/html" href="http://maniacdev.com" />
	<link rel="self" href="http://www.maniacdev.com/feed" />
	<id>http://www.maniacdev.com/feed</id>
</source>
		<link rel="replies" type="text/html" href="http://maniacdev.com/2011/07/open-source-multistroke-and-single-stroke-complex-gesture-recognition-on-ios/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://maniacdev.com/2011/07/open-source-multistroke-and-single-stroke-complex-gesture-recognition-on-ios/feed/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>Andy Crofford</name>
						<uri>http://mobile-orchard.com</uri>
					</author>
		<title type="html"><![CDATA[Giveaway: Win Objective-C Fundamentals from Manning Books and Mobile Orchard.]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MobileOrchard/~3/lNCZhj-AYF4/" />
		<id>http://mobileorchard.com/?p=7975</id>
		<updated>2011-07-15T17:00:49Z</updated>
		<published>2011-07-15T17:00:49Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="Giveaways" />		<summary type="html"><![CDATA[We have a great giveaway for our readers today. We are giving away two PDF copies each of Objective-C Fundamentals and iOS 4 in Action from Manning Books. How To Win: 1. Follow @ManningBooks on Twitter. 2. Leave a comment on this post telling us which book you would like and why you want to [...]]]></summary>
		<content type="html" xml:base="http://feedproxy.google.com/~r/MobileOrchard/~3/lNCZhj-AYF4/"><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http://mobileorchard.com/giveaway-win-objective-c-fundamentals-from-manning-books-and-mobile-orchard/"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http://mobileorchard.com/giveaway-win-objective-c-fundamentals-from-manning-books-and-mobile-orchard/&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>We have a great giveaway for our readers today. We are giving away two PDF copies each of <a href="http://www.manning.com/fairbairn/" ><em>Objective-C Fundamentals</em></a> and <a href="http://www.manning.com/jharrington/" ><em>iOS 4 in Action</em></a> from <a href="http://www.manning.com" >Manning Books</a>.</p>
<p><img class="aligncenter size-full wp-image-7977" title="Fairbairn-ObjectiveC-fc" src="http://mobileorchard.com/wp-content/uploads/2011/07/Fairbairn-ObjectiveC-fc.png" alt="" width="400" height="502" /></p>
<h3><strong>How To Win:</strong></h3>
<p>1. Follow <a href="http://twitter.com/#!/manningbooks" >@ManningBooks</a> on Twitter.</p>
<p>2. Leave a comment on this post telling us which book you would like and why you want to win.</p>
<p>Winners will be selected on Friday, July 22nd</p>
<p><img src="http://feeds.feedburner.com/~r/MobileOrchard/~4/lNCZhj-AYF4" height="1" width="1"/></p>
]]></content>
<source>
	<title>Mobile Orchard</title>
	<link rel="alternate" type="text/html" href="http://mobileorchard.com" />
	<link rel="self" href="http://feeds.feedburner.com/MobileOrchard" />
	<id>http://feeds.feedburner.com/MobileOrchard</id>
</source>
		<link rel="replies" type="text/html" href="http://feedproxy.google.com/~r/MobileOrchard/~3/lNCZhj-AYF4/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://mobileorchard.com/giveaway-win-objective-c-fundamentals-from-manning-books-and-mobile-orchard/feed/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>Andy Crofford</name>
						<uri>http://mobile-orchard.com</uri>
					</author>
		<title type="html"><![CDATA[iPhone 5 may be delayed, handsfree voice control, and more in this week’s mobile news.]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MobileOrchard/~3/FKRS6OEUq14/" />
		<id>http://mobileorchard.com/?p=7971</id>
		<updated>2011-07-15T13:00:36Z</updated>
		<published>2011-07-15T13:00:36Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="News" />		<summary type="html"><![CDATA[
			
				
			
		
iPhone 5 may be delayed due to overheating issues.
Looks like Apple may not be spreading the love for iPad manufacturing, staying with Foxconn for now.
iOS beta 3 adds AirPlay Mirroring for Facetime.
Applie planning to add handsfree voice control and audio feedback to iPhone.
Apple now owns iPhone4.com and WhiteiPhone.com.
]]></summary>
		<content type="html" xml:base="http://feedproxy.google.com/~r/MobileOrchard/~3/FKRS6OEUq14/"><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http://mobileorchard.com/iphone-5-may-be-delayed-handsfree-voice-control-and-more-in-this-weeks-mobile-news/"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http://mobileorchard.com/iphone-5-may-be-delayed-handsfree-voice-control-and-more-in-this-weeks-mobile-news/&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://9to5mac.com/2011/07/14/rumor-iphone-5-not-arriving-soon-because-the-a5-chip-is-overheating/" >iPhone 5 may be delayed</a> due to overheating issues.</p>
<p>Looks like Apple may not be spreading the love for iPad manufacturing, <a href="http://www.digitimes.com/news/a20110713PD220.html" >staying with Foxconn for now</a>.</p>
<p>iOS beta 3 <a href="http://www.tipb.com/2011/07/12/ios-5-features-airplay-mirroring-facetime/" >adds AirPlay Mirroring</a> for Facetime.</p>
<p>Applie <a href="http://www.appleinsider.com/articles/11/07/14/apple_exploring_advanced_handsfree_iphone_voice_control_audio_feedback/" >planning to add handsfree voice control and audio feedback to iPhone</a>.</p>
<p>Apple now owns <a href="http://www.macrumors.com/2011/07/13/apple-takes-possession-of-iphone4-com-and-whiteiphone-com-domain-names/?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed:+MacRumors-iPhone+(MacRumors+iPhone+Blog:+iOS+News+and+Rumors)" >iPhone4.com and WhiteiPhone.com</a>.</p>
<p><img src="http://feeds.feedburner.com/~r/MobileOrchard/~4/FKRS6OEUq14" height="1" width="1"/></p>
]]></content>
<source>
	<title>Mobile Orchard</title>
	<link rel="alternate" type="text/html" href="http://mobileorchard.com" />
	<link rel="self" href="http://feeds.feedburner.com/MobileOrchard" />
	<id>http://feeds.feedburner.com/MobileOrchard</id>
</source>
		<link rel="replies" type="text/html" href="http://feedproxy.google.com/~r/MobileOrchard/~3/FKRS6OEUq14/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://mobileorchard.com/iphone-5-may-be-delayed-handsfree-voice-control-and-more-in-this-weeks-mobile-news/feed/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>John Muchow</name>
						<uri>http://iPhoneDeveloperTips.com</uri>
					</author>
		<title type="html"><![CDATA[iOS Open Source : iCarousel Paging Control]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IphoneDeveloperTips/~3/I_P2GdiTi9A/ios-open-source-icarousel-paging-control.html" />
		<id>http://iPhoneDeveloperTips.com/?p=9017</id>
		<updated>2011-07-15T08:05:46Z</updated>
		<published>2011-07-15T08:05:46Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="open source" />		<summary type="html"><![CDATA[If you are looking for a unique way to present paged data (series of images or other views), iCarousel is worth a look. This is a very flexible control with many paging styles available including linear, cylinder and a coverflow look. There are also hooks available in the source code to provide your own paging [...]]]></summary>
		<content type="html" xml:base="http://feedproxy.google.com/~r/IphoneDeveloperTips/~3/I_P2GdiTi9A/ios-open-source-icarousel-paging-control.html"><![CDATA[<p>If you are looking for a unique way to present paged data (series of images or other views), <a href="https://github.com/demosthenese/iCarousel" >iCarousel</a> is worth a look. This is a very flexible control with many paging styles available including linear, cylinder and a coverflow look. There are also hooks available in the source code to provide your own paging effects.<br />
<span id="more-9017"></span></p>
<p>The screenshots that follow are from the demo application, included in the project, showing the coverflow and cylinder effects:</p>
<p><img src="http://iphonedevelopertips.com/wp-content/uploads/2011/07/iCarousel1.png" alt="" width="480" height="319" /></p>
<p><img src="http://iphonedevelopertips.com/wp-content/uploads/2011/07/iCarousel2.png" alt="" width="478" height="320" /></p>
<p>The iCarousel project includes a readme file that clearly describes the properties, methods and protocols in the source. In addition, have a look at iCarousel.h and iCarousel.m, the code easy is to read and covers a number of iOS topics including: scrolling, gestures and transforms.</p>
<h5>Credits</h5>
<p><a href="https://github.com/demosthenese/iCarousel" >iCarousel</a> was written by Nick Lockwood of <a href="http://www.charcoaldesign.co.uk/source/cocoa" >Charcoal Design</a>.</p>
<h5>Open Source Recommendations ?</h5>
<p>Have you written or worked with iOS or Cocoa open source that you think others would find interesting, <a href="http://iosdevelopertips.com/contact" class="smcf-link">send me a note</a>.</p>
<div id="fb-root"></div>
<p><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><!-- Do not remove -->
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/IphoneDeveloperTips?a=I_P2GdiTi9A:NuyUIu7ErOg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/IphoneDeveloperTips?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/IphoneDeveloperTips?a=I_P2GdiTi9A:NuyUIu7ErOg:UwWJ6YsNOak"><img src="http://feeds.feedburner.com/~ff/IphoneDeveloperTips?i=I_P2GdiTi9A:NuyUIu7ErOg:UwWJ6YsNOak" border="0"></img></a>
</div>
<p><img src="http://feeds.feedburner.com/~r/IphoneDeveloperTips/~4/I_P2GdiTi9A" height="1" width="1"/></p>
]]></content>
<source>
	<title>[iOS dev:tips];</title>
	<link rel="alternate" type="text/html" href="http://iPhoneDeveloperTips.com" />
	<link rel="self" href="http://feeds.feedburner.com/IphoneDeveloperTips" />
	<id>http://feeds.feedburner.com/IphoneDeveloperTips</id>
</source>
		<link rel="replies" type="text/html" href="http://feedproxy.google.com/~r/IphoneDeveloperTips/~3/I_P2GdiTi9A/ios-open-source-icarousel-paging-control.html#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://iPhoneDeveloperTips.com/open-source/ios-open-source-icarousel-paging-control.html/feed" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>John</name>
						<uri>http://www.71squared.com</uri>
					</author>
		<title type="html"><![CDATA[Tutorial: Calculator App Style Glossy Buttons With Core Graphics]]></title>
		<link rel="alternate" type="text/html" href="http://maniacdev.com/2011/07/tutorial-calculator-app-style-glossy-buttons-with-core-graphics/" />
		<id>http://maniacdev.com/?p=4055</id>
		<updated>2011-07-15T06:18:35Z</updated>
		<published>2011-07-15T06:18:35Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="iPhone Programming Examples" /><category scheme="http://planetidev.bunnyhero.org" term="iPhone Programming Tutorials" /><category scheme="http://planetidev.bunnyhero.org" term="iPhone SDK And iPad SDK" /><category scheme="http://planetidev.bunnyhero.org" term="Objective-C Programming" />		<summary type="html"><![CDATA[<div><a href="http://twitter.com/share?url=http://maniacdev.com/2011/07/tutorial-calculator-app-style-glossy-buttons-with-core-graphics/&#38;text=Tutorial:%20Calculator%20App%20Style%20Glossy%20Buttons%20With%20Core%20Graphics&#38;via=maniacdev&#38;related="><img align="right" src="http://maniacdev.com/wp-content/plugins//easy-twitter-button/i/buttons/en/tweetn.png" style="border: none" alt="" /></a></div>
In the past I&#8217;ve posted about creating iOS style buttons mentioning this tool, and this library which allow you to draw glossy buttons similar to those found in most iOS apps. The basic calculator app however has different buttons.  They have a rounded gloss at the top, and a steady gradient all the way down [...]]]></summary>
		<content type="html" xml:base="http://maniacdev.com/2011/07/tutorial-calculator-app-style-glossy-buttons-with-core-graphics/"><![CDATA[<div class="twitterbutton" style="float: right; padding-left: 5px;"><a href="http://twitter.com/share?url=http://maniacdev.com/2011/07/tutorial-calculator-app-style-glossy-buttons-with-core-graphics/&amp;text=Tutorial:%20Calculator%20App%20Style%20Glossy%20Buttons%20With%20Core%20Graphics&amp;via=maniacdev&amp;related="><img align="right" src="http://maniacdev.com/wp-content/plugins//easy-twitter-button/i/buttons/en/tweetn.png" style="border: none;" alt="" /></a></div>
<p>In the past I&#8217;ve posted about creating iOS style buttons mentioning this tool, and this library which allow you to draw glossy buttons similar to those found in most iOS apps.</p>
<p>The basic calculator app however has different buttons.  They have a rounded gloss at the top, and a steady gradient all the way down the button.  You may have noticed when using the app that when you press the buttons there is a much more noticeable effect as the button look seems to reverse giving the impression that the finger has caused the button to reverse.</p>
<p>A developer named the Code Padawan has written up a quick tutorial, and provided sample code demonstrating how to duplicate this effect.</p>
<p>You can find their tutorial here:<br />
<a href="http://www.codepadawan.com/2011/06/iphone-glossy-buttons.html">iPhone Glossy Buttons</a></p>
<p>The effect is done entirely using core graphics so no need to break out Photoshop or any other tool.</p>
<p>[via <a href="http://oleb.net/blog/2011/07/ios-and-mac-development-link-roundup-june-2011/" >Ole Begemann</a>]</p>
<p>&copy;2011 <a href="http://maniacdev.com">iPhone, iOS 4, iPad SDK Development Tutorial and Programming Tips</a>. All Rights Reserved.</p>
<p>.
<div class="prli-social-buttons-bar"><a href="http://del.icio.us/post?url=http://maniacdev.com/whl&#038;title=Tutorial:+Calculator+App+Style+Glossy+Buttons+With+Core+Graphics" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/delicious_32.png" alt="Delicious" title="Delicious" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://twitter.com/home?status=RT+@maniacdev:+Tutorial:+Calculator+App+Style+Glossy+Buttons+With+Core+Graphics+http://maniacdev.com/whl+(via+@maniacdev)" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/twitter_32.png" alt="Twitter" title="Twitter" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://technorati.com/faves?add=http://maniacdev.com/whl" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/technorati_32.png" alt="Technorati" title="Technorati" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://www.facebook.com/sharer.php?u=http://maniacdev.com/whl&#038;t=Tutorial:+Calculator+App+Style+Glossy+Buttons+With+Core+Graphics" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/facebook_32.png" alt="Facebook" title="Facebook" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://www.linkedin.com/shareArticle?mini=true&#038;url=http://maniacdev.com/whl&#038;title=Tutorial:+Calculator+App+Style+Glossy+Buttons+With+Core+Graphics" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/linkedin_32.png" alt="LinkedIn" title="LinkedIn" border="0" style="padding: 0 20px 0 0;" /></a><a href="mailto:?subject=Tutorial:%20Calculator%20App%20Style%20Glossy%20Buttons%20With%20Core%20Graphics&#038;body=Tutorial:%20Calculator%20App%20Style%20Glossy%20Buttons%20With%20Core%20Graphics%20http://maniacdev.com/whl" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/email_32.png" alt="Email" title="Email" border="0" style="padding: 0 20px 0 0;" /></a></div>
]]></content>
<source>
	<title>iPhone, iOS 4, iPad SDK Development Tutorial and Programming Tips</title>
	<link rel="alternate" type="text/html" href="http://maniacdev.com" />
	<link rel="self" href="http://www.maniacdev.com/feed" />
	<id>http://www.maniacdev.com/feed</id>
</source>
		<link rel="replies" type="text/html" href="http://maniacdev.com/2011/07/tutorial-calculator-app-style-glossy-buttons-with-core-graphics/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://maniacdev.com/2011/07/tutorial-calculator-app-style-glossy-buttons-with-core-graphics/feed/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>John</name>
						<uri>http://www.71squared.com</uri>
					</author>
		<title type="html"><![CDATA[Tutorial: iOS Map Kit For Beginners Guide]]></title>
		<link rel="alternate" type="text/html" href="http://maniacdev.com/2011/07/tutorial-map-kit-for-beginners-guide/" />
		<id>http://maniacdev.com/?p=4037</id>
		<updated>2011-07-14T18:56:17Z</updated>
		<published>2011-07-14T18:56:17Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="iPhone Programming Examples" /><category scheme="http://planetidev.bunnyhero.org" term="iPhone Programming Tutorials" /><category scheme="http://planetidev.bunnyhero.org" term="iPhone SDK And iPad SDK" />		<summary type="html"><![CDATA[<div><a href="http://twitter.com/share?url=http://maniacdev.com/2011/07/tutorial-map-kit-for-beginners-guide/&#38;text=Tutorial:%20iOS%20Map%20Kit%20For%20Beginners%20Guide&#38;via=maniacdev&#38;related="><img align="right" src="http://maniacdev.com/wp-content/plugins//easy-twitter-button/i/buttons/en/tweetn.png" style="border: none" alt="" /></a></div>
In the recent past I mentioned a great open source example for beginners interested in using the Map Kit on iOS devices, and utilizing several open source projects. I&#8217;ve come across a couple of excellent beginners tutorial on how to parse an XML feed, and display the contents on the map.  Another giving a good explanation [...]]]></summary>
		<content type="html" xml:base="http://maniacdev.com/2011/07/tutorial-map-kit-for-beginners-guide/"><![CDATA[<div class="twitterbutton" style="float: right; padding-left: 5px;"><a href="http://twitter.com/share?url=http://maniacdev.com/2011/07/tutorial-map-kit-for-beginners-guide/&amp;text=Tutorial:%20iOS%20Map%20Kit%20For%20Beginners%20Guide&amp;via=maniacdev&amp;related="><img align="right" src="http://maniacdev.com/wp-content/plugins//easy-twitter-button/i/buttons/en/tweetn.png" style="border: none;" alt="" /></a></div>
<p>In the recent past I mentioned a great <a href="http://maniacdev.com/2011/06/open-source-beginners-map-kit-demo-utilizing-asihttprequest-jsonkit-and-mbprogresshud/">open source example</a> for beginners interested in using the Map Kit on iOS devices, and utilizing several open source projects.</p>
<p>I&#8217;ve come across a couple of excellent beginners tutorial on how to parse an XML feed, and display the contents on the map.  Another giving a good explanation of the Map Kit class and several code snippets for solving common Map Kit problems.   These tutorials take a different approach form the open source example that I mentioned, and no libraries outside of the iOS sdk are used.</p>
<p>The tutorials are from Azam Sharp and can be found  in 2 parts here:</p>
<p><a href="http://www.highoncoding.com/Articles/804_Introduction_to_MapKit_Framework_for_iPhone_Development.aspx" >Introduction to MapKit Framework for iPhone Development</a></p>
<p><a href="http://www.highoncoding.com/Articles/805_Consuming_XML_Feed_and_Displaying_Public_Information_on_the_MapView_Control.aspx" >Consuming XML Feed and Displaying Public Information on the MapView Control</a></p>
<p>Great stuff if you are just beginning to use the iOS Map Kit.</p>
<p>&nbsp;</p>
<p>&copy;2011 <a href="http://maniacdev.com">iPhone, iOS 4, iPad SDK Development Tutorial and Programming Tips</a>. All Rights Reserved.</p>
<p>.
<div class="prli-social-buttons-bar"><a href="http://del.icio.us/post?url=http://maniacdev.com/vk2&#038;title=Tutorial:+iOS+Map+Kit+For+Beginners+Guide" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/delicious_32.png" alt="Delicious" title="Delicious" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://twitter.com/home?status=RT+@maniacdev:+Tutorial:+iOS+Map+Kit+For+Beginners+Guide+http://maniacdev.com/vk2+(via+@maniacdev)" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/twitter_32.png" alt="Twitter" title="Twitter" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://technorati.com/faves?add=http://maniacdev.com/vk2" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/technorati_32.png" alt="Technorati" title="Technorati" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://www.facebook.com/sharer.php?u=http://maniacdev.com/vk2&#038;t=Tutorial:+iOS+Map+Kit+For+Beginners+Guide" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/facebook_32.png" alt="Facebook" title="Facebook" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://www.linkedin.com/shareArticle?mini=true&#038;url=http://maniacdev.com/vk2&#038;title=Tutorial:+iOS+Map+Kit+For+Beginners+Guide" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/linkedin_32.png" alt="LinkedIn" title="LinkedIn" border="0" style="padding: 0 20px 0 0;" /></a><a href="mailto:?subject=Tutorial:%20iOS%20Map%20Kit%20For%20Beginners%20Guide&#038;body=Tutorial:%20iOS%20Map%20Kit%20For%20Beginners%20Guide%20http://maniacdev.com/vk2" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/email_32.png" alt="Email" title="Email" border="0" style="padding: 0 20px 0 0;" /></a></div>
]]></content>
<source>
	<title>iPhone, iOS 4, iPad SDK Development Tutorial and Programming Tips</title>
	<link rel="alternate" type="text/html" href="http://maniacdev.com" />
	<link rel="self" href="http://www.maniacdev.com/feed" />
	<id>http://www.maniacdev.com/feed</id>
</source>
		<link rel="replies" type="text/html" href="http://maniacdev.com/2011/07/tutorial-map-kit-for-beginners-guide/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://maniacdev.com/2011/07/tutorial-map-kit-for-beginners-guide/feed/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>Jeff LaMarche</name>
						<uri>http://iphonedevelopment.blogspot.com/</uri>
					</author>
		<title type="html"><![CDATA[Auto-Incrementing Build Numbers for Release Builds in Xcode]]></title>
		<link rel="alternate" type="text/html" href="http://iphonedevelopment.blogspot.com/2011/07/auto-incrementing-build-numbers-for.html" />
		<id />
		<updated>2011-07-14T14:28:03Z</updated>
		<published>2011-07-14T13:16:00Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="tips" /><category scheme="http://planetidev.bunnyhero.org" term="Xcode 4" />		<summary type="html"><![CDATA[[...]]]></summary>
		<content type="html" xml:base="http://iphonedevelopment.blogspot.com/2011/07/auto-incrementing-build-numbers-for.html"><![CDATA[<p>I use the wonderful <a href="http://testflightapp.com/">Test Flight</a> to distribute builds. One thing that Test Flight is a little picky about is build numbers. When you upload a build, it uses the build number to see if you&#8217;re uploading a replacement or a new build. It will let you create a new build even if you don&#8217;t remember to increment the build number, but it&#8217;s an extra manual step, and then you end up with two builds with the same build number.</p>
<p>Because I&#8217;m forgetful, I wanted to automated this process. Basically, I wanted to increment the version short string any time we do an Archive and increment the bundle build ID any time we do a Release configuration build, but leave the version numbers alone on Debug builds.</p>
<p>Unfortunately, several of our projects are ones that we inherited or took over, so not every project uses the same version numbering scheme. How we increment 1.0b5 is different from how we increment 1.0.12, or a simple build number like 1058.</p>
<p>The way I deal with this is a Run Script Build Phase in my application&#8217;s executable target that runs the following Ruby script (make sure you set the &#8220;shell&#8221; field to <span style="font-family: monospace;">/usr/bin/ruby</span>, and make sure the script is the last build phase in the application). Feel free to use this script if you wish and modify it to meet your needs. If you improve it, I&#8217;d be glad to incorporate improvements back into it. One item of note: the way that I differentiate between Archive builds and other Release configuration builds might be a bit fragile since I&#8217;m relying on an undocumented naming pattern in an environment variable. </p>
<blockquote><p><b>Note</b>: I&#8217;m aware of <span style="font-family: monospace;">agvtool</span>. I avoided it for two reasons. First, I wanted more control over the numbering schemes, and second, I tried using <span style="font-family: monospace;">agvtool</span> in a build script a few years back, but at that time, there were issues when you bumped the version numbers of a project that was currently open. Those issues may have been resolved, but I didn&#8217;t want to fight that battle again.</p></blockquote>
<p>
<pre class="textmate-source mac_classic"><span class="source source_ruby source_ruby_rails"><span class="meta meta_function meta_function_method meta_function_method_with-arguments meta_function_method_with-arguments_ruby"><span class="keyword keyword_control keyword_control_def keyword_control_def_ruby">def</span> <span class="entity entity_name entity_name_function entity_name_function_ruby">get_file_as_string</span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_ruby">(</span><span class="variable variable_parameter variable_parameter_function variable_parameter_function_ruby">filename</span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_ruby">)</span></span>    data <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> <span class="string string_quoted string_quoted_single string_quoted_single_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">'</span><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">'</span></span>    f <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> <span class="support support_class support_class_ruby">File</span><span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>open<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span>filename<span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span>r<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span><span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span>     f<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>each_line <span class="keyword keyword_control keyword_control_start-block keyword_control_start-block_ruby">do </span><span class="punctuation punctuation_separator punctuation_separator_variable punctuation_separator_variable_ruby">|</span><span class="variable variable_other variable_other_block variable_other_block_ruby">line</span><span class="punctuation punctuation_separator punctuation_separator_variable punctuation_separator_variable_ruby">|</span>        data <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_augmented keyword_operator_assignment_augmented_ruby">+=</span> line    <span class="keyword keyword_control keyword_control_ruby">end</span>    <span class="keyword keyword_control keyword_control_pseudo-method keyword_control_pseudo-method_ruby">return</span> data<span class="keyword keyword_control keyword_control_ruby">end</span>

<span class="meta meta_function meta_function_method meta_function_method_with-arguments meta_function_method_with-arguments_ruby"><span class="keyword keyword_control keyword_control_def keyword_control_def_ruby">def</span> <span class="entity entity_name entity_name_function entity_name_function_ruby">handle_alpha_beta</span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_ruby">(</span><span class="variable variable_parameter variable_parameter_function variable_parameter_function_ruby">old_value<span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> letter<span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> infoplist<span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> start_of_value<span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> end_of_value</span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_ruby">)</span></span>    parts <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> old_value<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>split<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span>letter<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span>    version_num <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> parts<span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby">[</span><span class="constant constant_numeric constant_numeric_ruby">0</span><span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby">]</span>    alpha_num <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> parts<span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby">[</span><span class="constant constant_numeric constant_numeric_ruby">1</span><span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby">]</span><span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>to_i

    alpha_num <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> alpha_num <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">+</span> <span class="constant constant_numeric constant_numeric_ruby">1</span>    new_version <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> version_num<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>to_s <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">+</span> letter <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">+</span> alpha_num<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>to_s    print <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span>Assigning new version: <span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span> <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">+</span> new_version <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">+</span> <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span><span class="constant constant_character constant_character_escape constant_character_escape_ruby">\n</span><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span>    new_key <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span>&lt;string&gt;<span class="source source_ruby source_ruby_embedded source_ruby_embedded_source"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">#{</span>new_version<span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">}</span></span>&lt;/string&gt;<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span>

    part_1 <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> infoplist<span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby">[</span><span class="constant constant_numeric constant_numeric_ruby">0</span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> start_of_value <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">-</span> <span class="string string_quoted string_quoted_single string_quoted_single_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">'</span>&lt;string&gt;<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">'</span></span><span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>length<span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby">]</span><span class="punctuation punctuation_separator punctuation_separator_statement punctuation_separator_statement_ruby">;</span>    part_2 <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> new_key     part_3 <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> infoplist<span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby">[</span>end_of_value <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">+</span> <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span>&lt;/string&gt;<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span><span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>length<span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> infoplist<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>length <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">-</span> <span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span>end_of_value <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">-</span> start_of_value <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">+</span> <span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span>new_key<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>length <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">-</span> <span class="constant constant_numeric constant_numeric_ruby">1</span><span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">))</span><span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby">]</span>    

    new_info_plist <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> part_1 <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">+</span> part_2 <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">+</span> part_3    new_info_plist<span class="keyword keyword_control keyword_control_ruby">end</span>

<span class="meta meta_function meta_function_method meta_function_method_with-arguments meta_function_method_with-arguments_ruby"><span class="keyword keyword_control keyword_control_def keyword_control_def_ruby">def</span> <span class="entity entity_name entity_name_function entity_name_function_ruby">find_and_increment_version_number_with_key</span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_ruby">(</span><span class="variable variable_parameter variable_parameter_function variable_parameter_function_ruby">key<span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> infoplist</span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_ruby">)</span></span>

    start_of_key <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> infoplist<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>index<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span>key<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span>    start_of_value <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> infoplist<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>index<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span><span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span>&lt;string&gt;<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> start_of_key<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span> <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">+</span> <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span>&lt;string&gt;<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span><span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>length    end_of_value <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> infoplist<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>index<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span><span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span>&lt;/string&gt;<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> start_of_value<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span>    old_value <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> infoplist<span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby">[</span>start_of_value<span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> end_of_value <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">-</span> start_of_value<span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby">]</span>

    print <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span>Old version for <span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span> <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">+</span> key <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">+</span> <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span>: <span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span> <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">+</span> old_value <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">+</span> <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span><span class="constant constant_character constant_character_escape constant_character_escape_ruby">\n</span><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span>    print old_value<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>class<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>to_s <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">+</span> <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span><span class="constant constant_character constant_character_escape constant_character_escape_ruby">\n</span><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span>    old_value_int <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> old_value<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>to_i    print old_value_int<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>class<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>to_s <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">+</span> <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span><span class="constant constant_character constant_character_escape constant_character_escape_ruby">\n</span><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span>    <span class="keyword keyword_control keyword_control_ruby">if</span> <span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span>old_value<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>index<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span><span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span>a<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span><span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span> <span class="keyword keyword_operator keyword_operator_comparison keyword_operator_comparison_ruby">!=</span> <span class="constant constant_language constant_language_ruby">nil</span><span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span> <span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby">#</span> alpha</span>        infoplist <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> handle_alpha_beta<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span>old_value<span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span>a<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> infoplist<span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> start_of_value<span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> end_of_value<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span>    <span class="keyword keyword_control keyword_control_ruby">elsif</span> <span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span>old_value<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>index<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span><span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span>b<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span><span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span> <span class="keyword keyword_operator keyword_operator_comparison keyword_operator_comparison_ruby">!=</span> <span class="constant constant_language constant_language_ruby">nil</span><span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span> <span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby">#</span> beta</span>        infoplist <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> handle_alpha_beta<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span>old_value<span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span>b<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> infoplist<span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> start_of_value<span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> end_of_value<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span>    <span class="keyword keyword_control keyword_control_ruby">elsif</span> <span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span>old_value<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>index<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span><span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span>.<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span><span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span> <span class="keyword keyword_operator keyword_operator_comparison keyword_operator_comparison_ruby">!=</span> <span class="constant constant_language constant_language_ruby">nil</span><span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span> <span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby">#</span> release dot version</span>        parts <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> old_value<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>split<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span><span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span>.<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span><span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span>        last_part <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> parts<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>last<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>to_i        last_part <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> last_part <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">+</span> <span class="constant constant_numeric constant_numeric_ruby">1</span>        parts<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>delete<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span>parts<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>last<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span>

        new_version <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span>        first <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> <span class="constant constant_language constant_language_ruby">true</span>        parts<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>each <span class="keyword keyword_control keyword_control_start-block keyword_control_start-block_ruby">do </span><span class="punctuation punctuation_separator punctuation_separator_variable punctuation_separator_variable_ruby">|</span><span class="variable variable_other variable_other_block variable_other_block_ruby">one_part</span><span class="punctuation punctuation_separator punctuation_separator_variable punctuation_separator_variable_ruby">|</span>            <span class="keyword keyword_control keyword_control_ruby">if</span> <span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span>first<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span>                first <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> <span class="constant constant_language constant_language_ruby">false</span>            <span class="keyword keyword_control keyword_control_ruby">else</span>                new_version <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> new_version <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">+</span> <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span>.<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span>            <span class="keyword keyword_control keyword_control_ruby">end</span>            new_version <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> new_version <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">+</span> one_part        <span class="keyword keyword_control keyword_control_ruby">end</span>        new_version <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> new_version<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>to_s <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">+</span> <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span>.<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span> <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">+</span> last_part<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>to_s        print <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span>New version: <span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span> <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">+</span> new_version<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>to_s <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">+</span> <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span><span class="constant constant_character constant_character_escape constant_character_escape_ruby">\n</span><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span>        new_key <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span>&lt;string&gt;<span class="source source_ruby source_ruby_embedded source_ruby_embedded_source"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">#{</span>new_version<span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">}</span></span>&lt;/string&gt;<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span>        infoplist <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span><span class="source source_ruby source_ruby_embedded source_ruby_embedded_source"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">#{</span>infoplist<span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby">[</span><span class="constant constant_numeric constant_numeric_ruby">0</span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> start_of_value <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">-</span> <span class="string string_quoted string_quoted_single string_quoted_single_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">'</span>&lt;string&gt;<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">'</span></span><span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>length<span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby">]</span><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">}#{</span>new_key<span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">}#{</span>infoplist<span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby">[</span>end_of_value <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">+</span> <span class="string string_quoted string_quoted_single string_quoted_single_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">'</span>&lt;/string&gt;<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">'</span></span><span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>length<span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> infoplist<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>length <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">-</span> <span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span>end_of_value<span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">+</span><span class="constant constant_numeric constant_numeric_ruby">1</span><span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span><span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby">]</span><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">}</span></span><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span>    <span class="keyword keyword_control keyword_control_ruby">elsif</span> <span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span>old_value<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>to_i <span class="keyword keyword_operator keyword_operator_comparison keyword_operator_comparison_ruby">!=</span> <span class="constant constant_language constant_language_ruby">nil</span><span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span> <span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby">#</span> straight integer build number</span>        new_version <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> old_value<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>to_i <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">+</span> <span class="constant constant_numeric constant_numeric_ruby">1</span>        print <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span>New version: <span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span> <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">+</span> new_version<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>to_s <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">+</span> <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span><span class="constant constant_character constant_character_escape constant_character_escape_ruby">\n</span><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span>        new_key <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span>&lt;string&gt;<span class="source source_ruby source_ruby_embedded source_ruby_embedded_source"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">#{</span>new_version<span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">}</span></span>&lt;/string&gt;<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span>

        part_1 <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> infoplist<span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby">[</span><span class="constant constant_numeric constant_numeric_ruby">0</span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> start_of_value <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">-</span> <span class="string string_quoted string_quoted_single string_quoted_single_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">'</span>&lt;string&gt;<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">'</span></span><span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>length<span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby">]</span>        part_2 <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> new_key        part_3 <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> infoplist<span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby">[</span>end_of_value <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">+</span> <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span>&lt;/string&gt;<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span><span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>length<span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> infoplist<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>length <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">-</span> <span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span>end_of_value<span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">+</span><span class="constant constant_numeric constant_numeric_ruby">1</span><span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span><span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby">]</span>        infoplist <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> part_1 <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">+</span> part_2 <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">+</span> part_3    <span class="keyword keyword_control keyword_control_ruby">end</span>     infoplist<span class="keyword keyword_control keyword_control_ruby">end</span>

config <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> <span class="meta meta_environment-variable meta_environment-variable_ruby"><span class="variable variable_other variable_other_constant variable_other_constant_ruby">ENV</span>[<span class="string string_quoted string_quoted_single string_quoted_single_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">'</span>CONFIGURATION<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">'</span></span>]</span><span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>upcaseconfig_build_dir <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> <span class="meta meta_environment-variable meta_environment-variable_ruby"><span class="variable variable_other variable_other_constant variable_other_constant_ruby">ENV</span>[<span class="string string_quoted string_quoted_single string_quoted_single_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">'</span>CONFIGURATION_BUILD_DIR<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">'</span></span>]</span>

archive_action <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> <span class="constant constant_language constant_language_ruby">false</span><span class="keyword keyword_control keyword_control_ruby">if</span> <span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span>config_build_dir<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>include?<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span><span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span>ArchiveIntermediates<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span><span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">))</span>    archive_action <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> <span class="constant constant_language constant_language_ruby">true</span><span class="keyword keyword_control keyword_control_ruby">end</span>

print <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span>Archive: <span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span> <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">+</span> archive_action<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>to_s <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_ruby">+</span> <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span><span class="constant constant_character constant_character_escape constant_character_escape_ruby">\n</span><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span>

print config

<span class="keyword keyword_control keyword_control_ruby">if</span> <span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span>config <span class="keyword keyword_operator keyword_operator_comparison keyword_operator_comparison_ruby">==</span> <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span>RELEASE<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span><span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span>    print <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span> incrementing build numbers<span class="constant constant_character constant_character_escape constant_character_escape_ruby">\n</span><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span>    project_dir <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> <span class="meta meta_environment-variable meta_environment-variable_ruby"><span class="variable variable_other variable_other_constant variable_other_constant_ruby">ENV</span>[<span class="string string_quoted string_quoted_single string_quoted_single_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">'</span>PROJECT_DIR<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">'</span></span>]</span>    infoplist_file <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> <span class="meta meta_environment-variable meta_environment-variable_ruby"><span class="variable variable_other variable_other_constant variable_other_constant_ruby">ENV</span>[<span class="string string_quoted string_quoted_single string_quoted_single_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">'</span>INFOPLIST_FILE<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">'</span></span>]</span>    plist_filename <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span><span class="source source_ruby source_ruby_embedded source_ruby_embedded_source"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">#{</span>project_dir<span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">}</span></span>/<span class="source source_ruby source_ruby_embedded source_ruby_embedded_source"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">#{</span>infoplist_file<span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">}</span></span><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span>

    infoplist <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> get_file_as_string<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span>plist_filename<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span>    infoplist <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> find_and_increment_version_number_with_key<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span><span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span>CFBundleVersion<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> infoplist<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span>    <span class="keyword keyword_control keyword_control_ruby">if</span> <span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span>archive_action<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span>        infoplist <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> find_and_increment_version_number_with_key<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span><span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span>CFBundleShortVersionString<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> infoplist<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span>    <span class="keyword keyword_control keyword_control_ruby">end</span>    <span class="support support_class support_class_ruby">File</span><span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>open<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span>plist_filename<span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> <span class="string string_quoted string_quoted_single string_quoted_single_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">'</span>w<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">'</span></span><span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span> <span class="punctuation punctuation_section punctuation_section_scope punctuation_section_scope_ruby">{</span><span class="punctuation punctuation_separator punctuation_separator_variable punctuation_separator_variable_ruby">|</span><span class="variable variable_other variable_other_block variable_other_block_ruby">f</span><span class="punctuation punctuation_separator punctuation_separator_variable punctuation_separator_variable_ruby">|</span> f<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>write<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span>infoplist<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span> <span class="punctuation punctuation_section punctuation_section_scope punctuation_section_scope_ruby">}</span><span class="keyword keyword_control keyword_control_ruby">else</span>    print <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span> not incrementing build numbers<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span><span class="keyword keyword_control keyword_control_ruby">end</span></span></pre>
<div class="blogger-post-footer"><BR/><font size="2"><center>&copy;2008-2010 Jeff LaMarche. <br/><br />
http://iphonedevelopment.blogspot.com</center></font><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2947441758360063609-6590563171955180205?l=iphonedevelopment.blogspot.com' alt='' /></div>
]]></content>
<source>
	<title>iPhone Development</title>
	<link rel="alternate" type="text/html" href="http://iphonedevelopment.blogspot.com/" />
	<link rel="self" href="http://iphonedevelopment.blogspot.com/feeds/posts/default" />
	<id>tag:blogger.com,1999:blog-2947441758360063609</id>
	<updated>2011-07-15T21:21:46.221-07:00</updated>
</source>
		<link rel="replies" type="text/html" href="http://iphonedevelopment.blogspot.com/2011/07/auto-incrementing-build-numbers-for.html#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://planetidev.bunnyhero.org/?feed=atom&amp;p=4175" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>John</name>
						<uri>http://www.71squared.com</uri>
					</author>
		<title type="html"><![CDATA[News: Cocos2D Game Engine v1.0.0 Released]]></title>
		<link rel="alternate" type="text/html" href="http://maniacdev.com/2011/07/news-cocos2d-game-engine-v1-0-0/" />
		<id>http://maniacdev.com/?p=4029</id>
		<updated>2011-07-14T06:21:48Z</updated>
		<published>2011-07-14T06:21:48Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="iPhone Dev News" />		<summary type="html"><![CDATA[<div><a href="http://twitter.com/share?url=http://maniacdev.com/2011/07/news-cocos2d-game-engine-v1-0-0/&#38;text=News:%20Cocos2D%20Game%20Engine%20v1.0.0%20Released&#38;via=maniacdev&#38;related="><img align="right" src="http://maniacdev.com/wp-content/plugins//easy-twitter-button/i/buttons/en/tweetn.png" style="border: none" alt="" /></a></div>
As you may have noticed if you have been reading this site for awhile, I occasionally mention product updates. This one is pretty significant as after numerous release candidates the incredibly successful open source Cocos2D iPhone game engine has finally released v1.0.0. There are an incredible amount of feature updates since the previous official release [...]]]></summary>
		<content type="html" xml:base="http://maniacdev.com/2011/07/news-cocos2d-game-engine-v1-0-0/"><![CDATA[<div class="twitterbutton" style="float: right; padding-left: 5px;"><a href="http://twitter.com/share?url=http://maniacdev.com/2011/07/news-cocos2d-game-engine-v1-0-0/&amp;text=News:%20Cocos2D%20Game%20Engine%20v1.0.0%20Released&amp;via=maniacdev&amp;related="><img align="right" src="http://maniacdev.com/wp-content/plugins//easy-twitter-button/i/buttons/en/tweetn.png" style="border: none;" alt="" /></a></div>
<p>As you may have noticed if you have been reading this site for awhile, I occasionally mention product updates.  This one is pretty significant as after numerous release candidates the incredibly successful open source Cocos2D iPhone game engine has finally released v1.0.0.</p>
<p>There are an incredible amount of feature updates since the previous official release of Cocos2D. This update from the last release candidate itself even adds support for non-power of two PVR textures.</p>
<p>You can read the full feature list showing the updates included in v1.0.0 vs the last major release:<br />
<a href="http://www.cocos2d-iphone.org/wiki/doku.php/release_notes%3A1_0_0" >Cocos2D v1.0.0 Release Notes</a></p>
<p>Steffen Itterheim, author of the <a href="http://maniacdev.com/kvw" >Learn iPhone and iPad Cocos2d Game Development book</a> has created an installer that you can run on your Mac to easily install Cocos2D 1.0.0, Cocos3D and all the templates automatically.  You can find it <a href="http://cocos2d-central.com/files/file/6-installer-for-cocos2d-cocos3d-for-ios-mac-os-x/" >here</a>.</p>
<p>You can find the Cocos2D source on Github here:<br />
<a href="https://github.com/cocos2d" >https://github.com/cocos2d</a></p>
<p>Exciting news for Cocos2D devs.</p>
<p>Read more: <a href="http://maniacdev.com/category/iphone-dev-news/" >iPhone Dev News</a></p>
<p>&copy;2011 <a href="http://maniacdev.com">iPhone, iOS 4, iPad SDK Development Tutorial and Programming Tips</a>. All Rights Reserved.</p>
<p>.
<div class="prli-social-buttons-bar"><a href="http://del.icio.us/post?url=http://maniacdev.com/rvm&#038;title=News:+Cocos2D+Game+Engine+v1.0.0+Released" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/delicious_32.png" alt="Delicious" title="Delicious" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://twitter.com/home?status=RT+@maniacdev:+News:+Cocos2D+Game+Engine+v1.0.0+Released+http://maniacdev.com/rvm+(via+@maniacdev)" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/twitter_32.png" alt="Twitter" title="Twitter" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://technorati.com/faves?add=http://maniacdev.com/rvm" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/technorati_32.png" alt="Technorati" title="Technorati" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://www.facebook.com/sharer.php?u=http://maniacdev.com/rvm&#038;t=News:+Cocos2D+Game+Engine+v1.0.0+Released" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/facebook_32.png" alt="Facebook" title="Facebook" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://www.linkedin.com/shareArticle?mini=true&#038;url=http://maniacdev.com/rvm&#038;title=News:+Cocos2D+Game+Engine+v1.0.0+Released" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/linkedin_32.png" alt="LinkedIn" title="LinkedIn" border="0" style="padding: 0 20px 0 0;" /></a><a href="mailto:?subject=News:%20Cocos2D%20Game%20Engine%20v1.0.0%20Released&#038;body=News:%20Cocos2D%20Game%20Engine%20v1.0.0%20Released%20http://maniacdev.com/rvm" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/email_32.png" alt="Email" title="Email" border="0" style="padding: 0 20px 0 0;" /></a></div>
]]></content>
<source>
	<title>iPhone, iOS 4, iPad SDK Development Tutorial and Programming Tips</title>
	<link rel="alternate" type="text/html" href="http://maniacdev.com" />
	<link rel="self" href="http://www.maniacdev.com/feed" />
	<id>http://www.maniacdev.com/feed</id>
</source>
		<link rel="replies" type="text/html" href="http://maniacdev.com/2011/07/news-cocos2d-game-engine-v1-0-0/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://maniacdev.com/2011/07/news-cocos2d-game-engine-v1-0-0/feed/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>John</name>
						<uri>http://www.71squared.com</uri>
					</author>
		<title type="html"><![CDATA[Open Source: Active Record For Core Data Library]]></title>
		<link rel="alternate" type="text/html" href="http://maniacdev.com/2011/07/open-source-active-record-for-core-data-library/" />
		<id>http://maniacdev.com/?p=4007</id>
		<updated>2011-07-13T18:53:56Z</updated>
		<published>2011-07-13T18:53:56Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="iPhone SDK And iPad SDK" /><category scheme="http://planetidev.bunnyhero.org" term="Objective-C Programming" /><category scheme="http://planetidev.bunnyhero.org" term="Open Source iOS Libraries And Tools" />		<summary type="html"><![CDATA[<div><a href="http://twitter.com/share?url=http://maniacdev.com/2011/07/open-source-active-record-for-core-data-library/&#38;text=Open%20Source:%20Active%20Record%20For%20Core%20Data%20Library&#38;via=maniacdev&#38;related="><img align="right" src="http://maniacdev.com/wp-content/plugins//easy-twitter-button/i/buttons/en/tweetn.png" style="border: none" alt="" /></a></div>
If you&#8217;ve developed with Ruby On Rails or similar framework then you are familiar with ActiveRecord, and you are familiar with how useful ActiveRecord is.  I remember thinking how cool it was when I first played with RoR and began using ActiveRecord. For those unfamiliar with RoR here&#8217;s the Wikipedia definition for Active Record: Active [...]]]></summary>
		<content type="html" xml:base="http://maniacdev.com/2011/07/open-source-active-record-for-core-data-library/"><![CDATA[<div class="twitterbutton" style="float: right; padding-left: 5px;"><a href="http://twitter.com/share?url=http://maniacdev.com/2011/07/open-source-active-record-for-core-data-library/&amp;text=Open%20Source:%20Active%20Record%20For%20Core%20Data%20Library&amp;via=maniacdev&amp;related="><img align="right" src="http://maniacdev.com/wp-content/plugins//easy-twitter-button/i/buttons/en/tweetn.png" style="border: none;" alt="" /></a></div>
<p>If you&#8217;ve developed with Ruby On Rails or similar framework then you are familiar with ActiveRecord, and you are familiar with how useful ActiveRecord is.  I remember thinking how cool it was when I first played with RoR and began using ActiveRecord.</p>
<p>For those unfamiliar with RoR here&#8217;s the Wikipedia definition for Active Record:</p>
<blockquote><p>Active record is an approach to accessing data in a database. A database table or view is wrapped into a class. Thus, an object instance is tied to a single row in the table. After creation of an object, a new row is added to the table upon save. Any object loaded gets its information from the database. When an object is updated the corresponding row in the table is also updated. The wrapper class implements accessor methods or properties for each column in the table or view.</p>
</blockquote>
<p>I&#8217;ve come across an excellent open source library based on the Ruby On Rails implementation of ActiveRecord from Saul Mora for Core Data retrieval known as MagicalRecord.</p>
<p>You can find the Github for the project along with full instructions here:<br />
<a href="https://github.com/magicalpanda/MagicalRecord">https://github.com/magicalpanda/MagicalRecord</a></p>
<p>You can read Saul&#8217;s writeup on the project on his site here:<br />
<a title="Permalink to Magical Panda releases ActiveRecord Fetching for Core Data code library" rel="bookmark" href="http://blog.magicalpanda.com/2010/01/15/magical-panda-releases-activerecord-fetching-for-core-data-code-library/">Magical Panda releases ActiveRecord Fetching for Core Data code library</a></p>
<p>If you want the full read on Active Record from Wikipedia here:<br />
<a href="http://en.wikipedia.org/wiki/ActiveRecord">http://en.wikipedia.org/wiki/ActiveRecord</a></p>
<p><a href="http://en.wikipedia.org/wiki/ActiveRecord"></a>A very useful library indeed.</p>
<p>&copy;2011 <a href="http://maniacdev.com">iPhone, iOS 4, iPad SDK Development Tutorial and Programming Tips</a>. All Rights Reserved.</p>
<p>.
<div class="prli-social-buttons-bar"><a href="http://del.icio.us/post?url=http://maniacdev.com/gke&#038;title=Open+Source:+Active+Record+For+Core+Data+Library" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/delicious_32.png" alt="Delicious" title="Delicious" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://twitter.com/home?status=RT+@maniacdev:+Open+Source:+Active+Record+For+Core+Data+Library+http://maniacdev.com/gke+(via+@maniacdev)" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/twitter_32.png" alt="Twitter" title="Twitter" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://technorati.com/faves?add=http://maniacdev.com/gke" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/technorati_32.png" alt="Technorati" title="Technorati" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://www.facebook.com/sharer.php?u=http://maniacdev.com/gke&#038;t=Open+Source:+Active+Record+For+Core+Data+Library" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/facebook_32.png" alt="Facebook" title="Facebook" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://www.linkedin.com/shareArticle?mini=true&#038;url=http://maniacdev.com/gke&#038;title=Open+Source:+Active+Record+For+Core+Data+Library" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/linkedin_32.png" alt="LinkedIn" title="LinkedIn" border="0" style="padding: 0 20px 0 0;" /></a><a href="mailto:?subject=Open%20Source:%20Active%20Record%20For%20Core%20Data%20Library&#038;body=Open%20Source:%20Active%20Record%20For%20Core%20Data%20Library%20http://maniacdev.com/gke" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/email_32.png" alt="Email" title="Email" border="0" style="padding: 0 20px 0 0;" /></a></div>
]]></content>
<source>
	<title>iPhone, iOS 4, iPad SDK Development Tutorial and Programming Tips</title>
	<link rel="alternate" type="text/html" href="http://maniacdev.com" />
	<link rel="self" href="http://www.maniacdev.com/feed" />
	<id>http://www.maniacdev.com/feed</id>
</source>
		<link rel="replies" type="text/html" href="http://maniacdev.com/2011/07/open-source-active-record-for-core-data-library/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://maniacdev.com/2011/07/open-source-active-record-for-core-data-library/feed/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>Collin</name>
						<uri>http://icodeblog.com</uri>
					</author>
		<title type="html"><![CDATA[Coding Conventions: iVars]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/icodeblog/~3/7ag1tkWOGlk/" />
		<id>http://www.icodeblog.com/?p=3227</id>
		<updated>2011-07-13T17:50:32Z</updated>
		<published>2011-07-13T17:50:32Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="Snippets" />		<summary type="html"><![CDATA[Hey iCoders,
As we have worked together over the last three years, some of the other iCodeBlog writers and I have gotten some pretty good coding conventions going that we thought would be good to share with you guys. One of the toughest to read coding conventions on iPhone is the declaration and synthesis of iVars. I&#8217;m going to go through a quick example of the correct way to do this, and the advantages of using the practice. So lets dive  ...]]></summary>
		<content type="html" xml:base="http://feedproxy.google.com/~r/icodeblog/~3/7ag1tkWOGlk/"><![CDATA[<p>Hey iCoders,</p>
<p>As we have worked together over the last three years, some of the other iCodeBlog writers and I have gotten some pretty good coding conventions going that we thought would be good to share with you guys. One of the toughest to read coding conventions on iPhone is the declaration and synthesis of iVars. I&#8217;m going to go through a quick example of the correct way to do this, and the advantages of using the practice. So lets dive in. </p>
<p><strong>Let&#8217;s make a simple class</strong></p>
<p>Today we are going to make a simple class to represent a Blog Post. We will call this object a BlogPost and it will have a name, date and author. Let&#8217;s first take a look at the declaration of these variables.</p>
<p><script src="http://gist.github.com/1080745.js"></script></p>
<p>This first snippet declares the three instance variables (iVars) that will make up our class. Convention is to have all instance variables declared with _ prefixes. Don&#8217;t worry, you will be able to access them without the _, but this is useful so developers know when they are accessing the synthesized getters and setters of an iVar as opposed to the iVar itself. We will see specifically what this means in a minute. </p>
<p>The other interesting convention here is declaring the Author class as an @class. What this does is tell the compiler that the class exists and should not produce a compile error. It does not go look at the Author class in any way however. You could declare this class like this and not even have an Author class in your project and the code would compile fine. The reason we do this is to avoid circular referencing. We will actually import the Author header in the main of this file. For more info on circular referencing check out the <a href="http://en.wikipedia.org/wiki/Circular_reference">Circular Reference Wiki</a>.</p>
<p><strong>Synthesizing our iVars</strong></p>
<p>Next we are going to synthesize these iVars to provide getters and setters for these objects.</p>
<p><script src="http://gist.github.com/1080815.js"></script></p>
<p>This is the point in which we will make the iVars we have declared with _ available through another name, in this case we simply remove the _. This is accomplished by declaring the @property for each iVar with the name you would like to use when accessing these variables from a self. context. This means that you can get to the postName by using self.postName or _postName. postName will not work and self._postName will not work. The final piece of the puzzle is equating the @property declared variable with the actual declared iVar in your @synthesize declarations in your main. You can also see that here we have imported our Author.h class. This will ensure that even if Author has a reference to BlogPost, the references will not be circularly infinite. </p>
<p><strong>Overriding a setter</strong></p>
<p>The final thing I want to take a look at is what is would look like to override a setter method for one of these iVars. Let&#8217;s say we want a BlogPost to have a default name of &#8220;Blog Post Temp Name&#8221; if no name is provided. We can accomplish this by overriding the setter for postName. Here&#8217;s what that looks like.</p>
<p><script src="http://gist.github.com/1080838.js"></script></p>
<p>The first thing we do here is declare the method. I like to have the variable passed into the setter be newPostTitle although you could leave it as postTitle because that name is only meaningful to the self. context. I personally find this to be a bit confusing to read so I usually add a &#8220;new&#8221; prefix to passed in variables in my overridden setters. With this done we strip the whitespace from the title and check if it is an empty string. If it is then we manually set the rawName to our default title. </p>
<p>With this done the final step is being memory safe in our assignment. We will be accessing the raw instance variable here through the _ prefix. This means we are going to be responsible for our own retaining. The process here goes, retain the new object, release your iVar object and then assign your iVar to the new object. This makes sure that memory is always handled correctly. If your current _blogPost and the passed in newBlogPost are different, it releases the old one retains the new one and we are all good. If they are the same exact object then we add a retain to newPostName to bring the retain count to 2 and then release _postName bringing the retain count back to 1. This is commonly done incorrectly in code I have seen and can introduce memory leaks. </p>
<p>That&#8217;s all for today guys. Happy iCoding!</p>
<p>Follow me <a href="http://www.twitter.com/cruffenach">@curffenach</a></p>
<p><img src="http://feeds.feedburner.com/~r/icodeblog/~4/7ag1tkWOGlk" height="1" width="1"/></p>
]]></content>
<source>
	<title>iPhone Programming Tutorials</title>
	<link rel="alternate" type="text/html" href="http://www.icodeblog.com" />
	<link rel="self" href="http://feeds.feedburner.com/icodeblog" />
	<id>http://feeds.feedburner.com/icodeblog</id>
</source>
		<link rel="replies" type="text/html" href="http://feedproxy.google.com/~r/icodeblog/~3/7ag1tkWOGlk/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.icodeblog.com/2011/07/13/coding-conventions-ivars/feed/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>Andy Korth</name>
						<uri>http://howlingmoonsoftware.com/wordpress</uri>
					</author>
		<title type="html"><![CDATA[Chipmunk 6.0]]></title>
		<link rel="alternate" type="text/html" href="http://howlingmoonsoftware.com/wordpress/?p=603" />
		<id>http://howlingmoonsoftware.com/wordpress/?p=603</id>
		<updated>2011-07-13T17:07:29Z</updated>
		<published>2011-07-13T17:07:29Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="Uncategorized" />		<summary type="html"><![CDATA[On the heels of our new web page, we&#8217;ve released Chipmunk 6.0! Our press release follows: &#160; Howling Moon Software is excited to share Chipmunk 6.0, the latest major version release of their popular physics engine. Chipmunk is a high performance, MIT licensed 2D physics library with all the fixings. Written in C99, bindings and [...]]]></summary>
		<content type="html" xml:base="http://howlingmoonsoftware.com/wordpress/?p=603"><![CDATA[<p>On the heels of our new web page, we&#8217;ve released Chipmunk 6.0! Our press release follows:</p>
<p>&nbsp;</p>
<p>Howling Moon Software is excited to share Chipmunk 6.0, the latest major version release of their popular physics engine. Chipmunk is a high performance, MIT licensed 2D physics library with all the fixings. Written in C99, bindings and ports exist to over a dozen languages. Including an official binding to Objective-C that makes it fit right in on the iPhone. Chipmunk has recently been seen in many top iOS hits, including Cars 2, Feed Me Oil, I Dig It, Alice in New York, and Zombie Smash! It&#8217;s been used on many platforms including Mac/Win/Linux, iPhone, Android, Symbian, DS, PSP, and even the Wii.</p>
<p>We&#8217;ve also released Chipmunk Pro, a library with extra features that can dramatically speed development. Chipmunk Pro features an Objective-C binding with additional iPhone specific features to ease things like input handling. Push the envelope with new beta features like multicore support and automatic generation of terrain and geometry based on images.</p>
<p>New features in Chipmunk 6 include many API improvements to aid the clarity and ease of using the engine. Chipmunk 6 now supports multiple spatial indexes and includes a bounding box tree which doesn&#8217;t need tuning. Support for variable timesteps and release-mode error handling has also improved.  Chipmunk 6 comes right behind Chipmunk 5.4.3, which featured numerous bug fixes.</p>
<p>New in Chipmunk 6.0:</p>
<p>* API: Chipmunk now has hard runtime assertions that aren&#8217;t disabled in release mode for many error conditions. Most people have been using release builds of Chipmunk during development and were missing out on very important error checking.<br />
* API: Access to the private API has been disabled by default now and much of the private API has changed. I&#8217;ve added official APIs for all the uses of the private API I knew of.<br />
* API: Added accessor functions for every property on every type. As Chipmunk&#8217;s complexity has grown, it&#8217;s become more difficult to ignore accessors. You are encouraged to use them, but are not required to.<br />
* API: Added cpSpaceEachBody() and cpSpaceEachShape() to iterate bodies/shapes in a space.<br />
* API: Added cpSpaceReindexShapesForBody() to reindex all the shapes attached to a particular body.<br />
* API: Added a &#8216;data&#8217; pointer to spaces now too.<br />
* API: cpSpace.staticBody is a pointer to the static body instead of a static reference.<br />
* API: The globals cp_bias_coef, cp_collision_slop, cp_contact_persistence have been moved to properties of a space. (collisionBias, collisionSlop, collisionPersistence respectively)<br />
* API: Added cpBodyActivateStatic() to wake up bodies touching a static body with an optional shape filter parameter.<br />
* API: Added cpBodyEachShape() and cpBodyEachConstraint() iterators to iterate the active shapes/constraints attached to a body.<br />
* API: Added cpBodyEeachArbiter() to iterate the collision pairs a body is involved in. This makes it easy to perform grounding checks or find how much collision force is being applied to an object.<br />
* API: The error correction applied by the collision bias and joint bias is now timestep independent and the units have completely changed.<br />
* FIX: Units of damping for springs are correct regardless of the number of iterations. Previously they were only correct if you had 1 or 2 iterations.<br />
* MISC: Numerous changes to help make Chipmunk work better with variable timesteps. Use of constant timesteps is still highly recommended, but it is now easier to change the time scale without introducing artifacts.<br />
* MISC: Performance! Chipmunk 6 should be way faster than Chipmunk 5 for almost any game.<br />
* MISC: Chipmunk supports multiple spatial indexes and uses a bounding box tree similar to the one found in the Bullet physics library by default. This should provide much better performance for scenes with objects of differening size and works without any tuning for any scale.</p>
<p>Chipmunk Physics is especially popular on iOS devices, and we look forward to seeing even more great games using Chipmunk Physics. Chipmunk is open source, licensed under the MIT License. Basic Chipmunk is free to use, and Chipmunk Pro is available for $200. Howling Moon Software also takes donations to support Chipmunk development and offers contract development services.</p>
]]></content>
<source>
	<title>Howling Moon Software</title>
	<link rel="alternate" type="text/html" href="http://howlingmoonsoftware.com/wordpress" />
	<link rel="self" href="http://howlingmoonsoftware.com/wordpress/?feed=rss2" />
	<id>http://howlingmoonsoftware.com/wordpress/?feed=rss2</id>
</source>
		<link rel="replies" type="text/html" href="http://howlingmoonsoftware.com/wordpress/?p=603#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://howlingmoonsoftware.com/wordpress/?feed=rss2&amp;p=603" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>Mina Samy</name>
						<uri>http://mobileorchard.com</uri>
					</author>
		<title type="html"><![CDATA[Android App Development: Implementing remote Android Services with AIDL]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MobileOrchard/~3/cOgczReAbr8/" />
		<id>http://mobileorchard.com/?p=7955</id>
		<updated>2011-07-13T17:00:21Z</updated>
		<published>2011-07-13T17:00:21Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="Android" /><category scheme="http://planetidev.bunnyhero.org" term="Android App Development" /><category scheme="http://planetidev.bunnyhero.org" term="Tutorials" />		<summary type="html"><![CDATA[In the last post we saw how to use Android services to do time consuming operations in the background. in this post we will see how can a client application call the methods of a service defined in another application. this is achieved through Android Interface Definition Language (AIDL). AIDL is a java like language [...]]]></summary>
		<content type="html" xml:base="http://feedproxy.google.com/~r/MobileOrchard/~3/cOgczReAbr8/"><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http://mobileorchard.com/android-app-development-implementing-remote-android-services-with-aidl/"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http://mobileorchard.com/android-app-development-implementing-remote-android-services-with-aidl/&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>In the last post we saw how to use Android services to do time consuming operations in the background. in this post we will see how can a client application call the methods of a service defined in another application. this is achieved through <strong>Android Interface Definition Language (AIDL). </strong></p>
<p><strong></strong>AIDL is a java like language that enables you to define an interface that both the application defining the service and the client application implement it.</p>
<p>the interface defines the functions that are needed to be called in the client application.</p>
<h2>Defining the AIDL file:</h2>
<p>AIDL syntax is similar to that of Java, we can use the following data types in AIDL:</p>
<ol>
<li>primitive data types: int, long, char, boolean,&#8230;.</li>
<li>String.</li>
<li>CharSequence.</li>
<li>List (ArrayList,Vector,&#8230;).</li>
</ol>
<p>&nbsp;</p>
<ol>
<li>the AIDL file is defined as follows:<br />
open a notepad file and paste the following code in it:</p>
<pre>package com.mina.servicedemo;

// service interface
interface IRemoteService {
    //sample method
    String sayHello(String message);
}</pre>
<p>take care of the package name <strong>com.mina.servicedemo</strong>.<br />
we defined a methods <strong>sayHello(String message)</strong> that returns a string.</p>
<p>&nbsp;</li>
<li>save the file with the name<strong> IRemoteService</strong> and change it&#8217;s extension to <strong>.aidl</strong>.</li>
<li>copy the file to the <strong>src</strong> folder of your project.</li>
<li>once you save and build the file, Android generates an interface java file with the name <strong>IRemoteService.java</strong> in the <strong>gen</strong> folder if the project.</li>
</ol>
<h2>Defining the Service:</h2>
<p>now we want our service to expose this interface to client applications, so we return an implementation of the service in the <strong>onBind()</strong> method of our service:</p>
<pre>package com.mina.servicedemo;

import com.mina.servicedemo.IRemoteService.Stub;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
import android.widget.Toast;

public class DemoService extends Service {

	@Override
	public IBinder onBind(Intent arg0) {
		return mBinder;
	}

	// implementation of the aidl interface
	private final IRemoteService.Stub mBinder=new Stub() {

		@Override
		public String sayHello(String message) throws RemoteException {
			return "Hello "+message;

		}
	};

	}
}</pre>
<p>the last thing to do in the service is to make its <strong>exported</strong> attribute in the <strong>AndroidManifest.xml</strong> file set to true like this:</p>
<pre>&lt;service android:name="DemoService" android:exported="true"&gt;&lt;/service&gt;</pre>
<p>our app structure can be like this:</p>
<p><a href="http://mobileorchard.com/android-app-development-implementing-remote-android-services-with-aidl/service-demo/" rel="attachment wp-att-7957"><img class="aligncenter size-medium wp-image-7957" src="http://mobileorchard.com/wp-content/uploads/2011/07/Service-Demo-263x300.png" alt="" width="263" height="300" /></a></p>
<p>&nbsp;</p>
<h2>Consuming the service at the client application:</h2>
<p>now to our client application where we want to invoke methods from our service. the client application is a separate application with a different package name than that where the service is defined.</p>
<p>the client application needs a reference to the AIDL interface defined in the original applcation, this is done through the following steps:</p>
<ol>
<li>in the client applicatio create a package with the same package name of that the service is defined in: <strong>com.mina.servicedemo.</strong></li>
<li>copy the AIDL file in this package.</li>
<li>save and build and a new file called IRemoteService.java is generated. your app structure should be like this:<a href="http://mobileorchard.com/android-app-development-implementing-remote-android-services-with-aidl/service-client/" rel="attachment wp-att-7956"><img class="aligncenter size-medium wp-image-7956" src="http://mobileorchard.com/wp-content/uploads/2011/07/Service-Client-263x300.png" alt="" width="263" height="300" /></a></li>
</ol>
<p>and we invoke the servcice methods in our activity like this:</p>
<pre>package com.mina.serviceclient;

import com.mina.servicedemo.IRemoteService;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;

public class MainActivity extends Activity {

	IRemoteService mRemoteService;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Intent serviceIntent=new Intent();
        serviceIntent.setClassName("com.mina.servicedemo", "com.mina.servicedemo.DemoService");
        boolean ok=bindService(serviceIntent, mServiceConnection,Context.BIND_AUTO_CREATE);
        Log.v("ok", String.valueOf(ok));
    }

    private ServiceConnection mServiceConnection=new ServiceConnection() {

		@Override
		public void onServiceDisconnected(ComponentName name) {
			// TODO Auto-generated method stub

		}

		@Override
		public void onServiceConnected(ComponentName name, IBinder service) {
			// get instance of the aidl binder
			mRemoteService = IRemoteService.Stub.asInterface(service);
			try {
				String message=mRemoteService.sayHello("Mina");
				Log.v("message", message);
			} catch (RemoteException e) {
				Log.e("RemoteException", e.toString());
			}

		}
	};
}</pre>
<p>and that&#8217;s was all about calling remote services with AIDL, stay tuned for another Android tutorial</p>
<p><img src="http://feeds.feedburner.com/~r/MobileOrchard/~4/cOgczReAbr8" height="1" width="1"/></p>
]]></content>
<source>
	<title>Mobile Orchard</title>
	<link rel="alternate" type="text/html" href="http://mobileorchard.com" />
	<link rel="self" href="http://feeds.feedburner.com/MobileOrchard" />
	<id>http://feeds.feedburner.com/MobileOrchard</id>
</source>
		<link rel="replies" type="text/html" href="http://feedproxy.google.com/~r/MobileOrchard/~3/cOgczReAbr8/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://mobileorchard.com/android-app-development-implementing-remote-android-services-with-aidl/feed/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>John</name>
						<uri>http://www.71squared.com</uri>
					</author>
		<title type="html"><![CDATA[Tutorial: Manipulating Images With Touch Gestures]]></title>
		<link rel="alternate" type="text/html" href="http://maniacdev.com/2011/07/tutorial-manipulating-images-with-touch-gestures/" />
		<id>http://maniacdev.com/?p=4004</id>
		<updated>2011-07-13T06:22:50Z</updated>
		<published>2011-07-13T06:22:50Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="iPhone SDK And iPad SDK" /><category scheme="http://planetidev.bunnyhero.org" term="Objective-C Programming" />		<summary type="html"><![CDATA[<div><a href="http://twitter.com/share?url=http://maniacdev.com/2011/07/tutorial-manipulating-images-with-touch-gestures/&#38;text=Tutorial:%20Manipulating%20Images%20With%20Touch%20Gestures&#38;via=maniacdev&#38;related="><img align="right" src="http://maniacdev.com/wp-content/plugins//easy-twitter-button/i/buttons/en/tweetn.png" style="border: none" alt="" /></a></div>
You&#8217;ve already seen this in numerous apps.  Images that can be dragged by holding, enlarged, shrunken and rotated with the pinch gesture.  All that being said, if you&#8217;re new to programming UIGestureRecognizers this can be a somewhat difficult task. I&#8217;ve found a tutorial demonstrating how to easily include this functionality that is immensely useful for [...]]]></summary>
		<content type="html" xml:base="http://maniacdev.com/2011/07/tutorial-manipulating-images-with-touch-gestures/"><![CDATA[<div class="twitterbutton" style="float: right; padding-left: 5px;"><a href="http://twitter.com/share?url=http://maniacdev.com/2011/07/tutorial-manipulating-images-with-touch-gestures/&amp;text=Tutorial:%20Manipulating%20Images%20With%20Touch%20Gestures&amp;via=maniacdev&amp;related="><img align="right" src="http://maniacdev.com/wp-content/plugins//easy-twitter-button/i/buttons/en/tweetn.png" style="border: none;" alt="" /></a></div>
<p>You&#8217;ve already seen this in numerous apps.  Images that can be dragged by holding, enlarged, shrunken and rotated with the pinch gesture.  All that being said, if you&#8217;re new to programming UIGestureRecognizers this can be a somewhat difficult task.</p>
<p>I&#8217;ve found a tutorial demonstrating how to easily include this functionality that is immensely useful for many different kinds of photo apps.</p>
<p>There is also an excellent sample project included.</p>
<p>The tutorial is from Roger Chapman and can be found here:<br />
<a href="http://rogchap.com/2011/06/10/ios-image-manipulation-with-uigesturerecognizer-scale-move-rotate/" >iOS Image Manipulation with UIGestureRecognizer: scale, move, rotate</a></p>
<p>Tremendously useful code if you are ever making any sort of photo manipulation app.</p>
<p>[via <a href="http://www.alexcurylo.com/blog/2011/06/18/image-manipulation/" >Alex Curylo</a>]</p>
<p>&copy;2011 <a href="http://maniacdev.com">iPhone, iOS 4, iPad SDK Development Tutorial and Programming Tips</a>. All Rights Reserved.</p>
<p>.
<div class="prli-social-buttons-bar"><a href="http://del.icio.us/post?url=http://maniacdev.com/mgr&#038;title=Tutorial:+Manipulating+Images+With+Touch+Gestures" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/delicious_32.png" alt="Delicious" title="Delicious" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://twitter.com/home?status=RT+@maniacdev:+Tutorial:+Manipulating+Images+With+Touch+Gestures+http://maniacdev.com/mgr+(via+@maniacdev)" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/twitter_32.png" alt="Twitter" title="Twitter" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://technorati.com/faves?add=http://maniacdev.com/mgr" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/technorati_32.png" alt="Technorati" title="Technorati" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://www.facebook.com/sharer.php?u=http://maniacdev.com/mgr&#038;t=Tutorial:+Manipulating+Images+With+Touch+Gestures" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/facebook_32.png" alt="Facebook" title="Facebook" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://www.linkedin.com/shareArticle?mini=true&#038;url=http://maniacdev.com/mgr&#038;title=Tutorial:+Manipulating+Images+With+Touch+Gestures" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/linkedin_32.png" alt="LinkedIn" title="LinkedIn" border="0" style="padding: 0 20px 0 0;" /></a><a href="mailto:?subject=Tutorial:%20Manipulating%20Images%20With%20Touch%20Gestures&#038;body=Tutorial:%20Manipulating%20Images%20With%20Touch%20Gestures%20http://maniacdev.com/mgr" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/email_32.png" alt="Email" title="Email" border="0" style="padding: 0 20px 0 0;" /></a></div>
]]></content>
<source>
	<title>iPhone, iOS 4, iPad SDK Development Tutorial and Programming Tips</title>
	<link rel="alternate" type="text/html" href="http://maniacdev.com" />
	<link rel="self" href="http://www.maniacdev.com/feed" />
	<id>http://www.maniacdev.com/feed</id>
</source>
		<link rel="replies" type="text/html" href="http://maniacdev.com/2011/07/tutorial-manipulating-images-with-touch-gestures/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://maniacdev.com/2011/07/tutorial-manipulating-images-with-touch-gestures/feed/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>Capulet</name>
						<uri>http://www.phonegap.com</uri>
					</author>
		<title type="html"><![CDATA[PhoneGap and Worklight Enable Mobile Apps for the Enterprise]]></title>
		<link rel="alternate" type="text/html" href="http://www.phonegap.com/2011/07/13/phonegap-and-worklight-enable-mobile-apps-for-the-enterprise/" />
		<id>http://www.phonegap.com/?p=3613</id>
		<updated>2011-07-13T05:01:55Z</updated>
		<published>2011-07-13T05:01:55Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="PhoneGap integration" /><category scheme="http://planetidev.bunnyhero.org" term="Shahar Kaminitz" /><category scheme="http://planetidev.bunnyhero.org" term="Uncategorized" /><category scheme="http://planetidev.bunnyhero.org" term="worklight" />		<summary type="html"><![CDATA[Congratulations to Worklight who announced today that it now incorporates PhoneGap as part of its core technology. Worklight’s mobile app platform and tools provide an enterprise-grade solution that enables organizations to efficiently [...]]]></summary>
		<content type="html" xml:base="http://www.phonegap.com/2011/07/13/phonegap-and-worklight-enable-mobile-apps-for-the-enterprise/"><![CDATA[<p><!-- @font-face {   font-family: "Cambria Math"; }@font-face {   font-family: "Calibri"; }p.MsoNormal, li.MsoNormal, div.MsoNormal { margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: "Times New Roman"; }p { margin-right: 0cm; margin-left: 0cm; font-size: 12pt; font-family: "Times New Roman"; }.MsoChpDefault { font-size: 11pt; font-family: Calibri; }.MsoPapDefault { margin-bottom: 10pt; line-height: 115%; }div.WordSection1 { page: WordSection1; } -->Congratulations to Worklight who announced today that it now incorporates PhoneGap as part of its core technology. <!-- @font-face {   font-family: "Cambria Math"; }@font-face {   font-family: "Calibri"; }p.MsoNormal, li.MsoNormal, div.MsoNormal { margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: "Times New Roman"; }.MsoChpDefault { font-size: 11pt; font-family: Calibri; }.MsoPapDefault { margin-bottom: 10pt; line-height: 115%; }div.WordSection1 { page: WordSection1; } --> <!-- @font-face {   font-family: "Cambria Math"; }@font-face {   font-family: "Calibri"; }p.MsoNormal, li.MsoNormal, div.MsoNormal { margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: "Times New Roman"; }.MsoChpDefault { font-size: 11pt; font-family: Calibri; }.MsoPapDefault { margin-bottom: 10pt; line-height: 115%; }div.WordSection1 { page: WordSection1; } --> Worklight’s mobile app platform and tools provide an enterprise-grade solution that enables organizations to efficiently develop and deliver HTML5, hybrid and native smartphone and tablet applications.</p>
<p><!-- @font-face {   font-family: "Cambria Math"; }@font-face {   font-family: "Calibri"; }p.MsoNormal, li.MsoNormal, div.MsoNormal { margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: "Times New Roman"; }.MsoChpDefault { font-size: 11pt; font-family: Calibri; }.MsoPapDefault { margin-bottom: 10pt; line-height: 115%; }div.WordSection1 { page: WordSection1; } --> “PhoneGap reduces much of the complexity of cross-platform development, while we complement with additional tools, integration, security and management capabilities. Our joint mobile solutions are an excellent fit for enterprises looking to take advantage of HTML5,” <!-- @font-face {   font-family: "Cambria Math"; }@font-face {   font-family: "Calibri"; }p.MsoNormal, li.MsoNormal, div.MsoNormal { margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: "Times New Roman"; }.MsoChpDefault { font-size: 11pt; font-family: Calibri; }.MsoPapDefault { margin-bottom: 10pt; line-height: 115%; }div.WordSection1 { page: WordSection1; } --> said Shahar Kaminitz, CEO at Worklight.</p>
<p>There&#8217;s more on the integration <a href="http://bit.ly/rinuqi">here</a>.</p>
<p><!-- @font-face {   font-family: "Cambria Math"; }@font-face {   font-family: "Calibri"; }p.MsoNormal, li.MsoNormal, div.MsoNormal { margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: "Times New Roman"; }p { margin-right: 0cm; margin-left: 0cm; font-size: 12pt; font-family: "Times New Roman"; }.MsoChpDefault { font-size: 11pt; font-family: Calibri; }.MsoPapDefault { margin-bottom: 10pt; line-height: 115%; }div.WordSection1 { page: WordSection1; } -->We’re so pleased that Worklight is using PhoneGap to help their customers and further enterprise adoption in the enterprise!</p>
<p><!-- @font-face {   font-family: "Cambria Math"; }@font-face {   font-family: "Calibri"; }p.MsoNormal, li.MsoNormal, div.MsoNormal { margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: "Times New Roman"; }p { margin-right: 0cm; margin-left: 0cm; font-size: 12pt; font-family: "Times New Roman"; }.MsoChpDefault { font-size: 11pt; font-family: Calibri; }.MsoPapDefault { margin-bottom: 10pt; line-height: 115%; }div.WordSection1 { page: WordSection1; } -->Worklight is an active member of the PhoneGap community and will continue to make contributions to the project.</p>
<p>Check out today&#8217;s <a href="http://bit.ly/pmbzWB">news announcement</a>.</p>
]]></content>
<source>
	<title>PhoneGap</title>
	<link rel="alternate" type="text/html" href="http://www.phonegap.com" />
	<link rel="self" href="http://phonegap.com/feed" />
	<id>http://phonegap.com/feed</id>
</source>
		<link rel="replies" type="text/html" href="http://www.phonegap.com/2011/07/13/phonegap-and-worklight-enable-mobile-apps-for-the-enterprise/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.phonegap.com/2011/07/13/phonegap-and-worklight-enable-mobile-apps-for-the-enterprise/feed/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>Mike Schramm</name>
						<uri>http://www.tuaw.com</uri>
					</author>
		<title type="html"><![CDATA[Firemint&#8217;s Agent Squeek becomes Spy Mouse, gets a new trailer]]></title>
		<link rel="alternate" type="text/html" href="http://www.tuaw.com/2011/07/12/firemints-agent-squeek-becomes-spy-mouse-gets-a-new-trailer/" />
		<id>http://www.tuaw.com/2011/07/12/firemints-agent-squeek-becomes-spy-mouse-gets-a-new-trailer/</id>
		<updated>2011-07-13T01:00:00Z</updated>
		<published>2011-07-13T01:00:00Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="agent squeeks" /><category scheme="http://planetidev.bunnyhero.org" term="AgentSqueeks" /><category scheme="http://planetidev.bunnyhero.org" term="EA" /><category scheme="http://planetidev.bunnyhero.org" term="firemint" /><category scheme="http://planetidev.bunnyhero.org" term="games" /><category scheme="http://planetidev.bunnyhero.org" term="marketing" /><category scheme="http://planetidev.bunnyhero.org" term="spy mouse" /><category scheme="http://planetidev.bunnyhero.org" term="SpyMouse" />		<summary type="html"><![CDATA[[...]]]></summary>
		<content type="html" xml:base="http://www.tuaw.com/2011/07/12/firemints-agent-squeek-becomes-spy-mouse-gets-a-new-trailer/"><![CDATA[<p style="text-align:center">
	<img alt="" border="0" height="303" src="http://www.blogcdn.com//media/2011/07/spymousefiremint.jpg" width="530" /></p>
<p>
	It&#8217;s been interesting watching the development of <a href="http://www.tuaw.com/tag/Firemint/">Firemint</a>&#8216;s next iPhone game &#8212; I saw it in action way back at GDC 2010, but back then it was just a prototype without a name or even anything more than a few mechanics. More recently it was <a href="http://www.tuaw.com/2011/03/08/gdc-2011-firemints-agent-squeek/">revealed as Agent Squeek</a>, and looked like it was coming together as a worthy followup to the studio&#8217;s other big hits, Flight Control and Real Racing. Firemint is almost a completely different company since I first saw this game, however (having both merged with Infinite Interactive and been bought out by giant EA), and so it&#8217;s not too surprising that the game has undergone a marketing revamp &#8212; it will <a href="http://firemint.com/spymouse/">now be called Spy Mouse</a>, and there&#8217;s a new trailer below.</p>
<p>
	As you can see, there&#8217;s not a lot of gameplay in the new trailer, so it&#8217;s unclear if the game itself has changed very much since we last saw it. It&#8217;s hard to think it has, given that the line-drawing/stealth title that was Agent Squeeks seems to work just as well as Spy Mouse (or SPY Mouse, if you want to surrender to the weird capitalization). We&#8217;ll keep an eye out for more on this one, as a release is probably coming soon.</p>
</p>
<div align="center">
	<object height="331" width="530"><param name="movie" value="http://www.youtube.com/v/sWarNw2JUKM?version=3&amp;hl=en_US" /><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><embed allowfullscreen="true" allowscriptaccess="always" height="331" src="http://www.youtube.com/v/sWarNw2JUKM?version=3&amp;hl=en_US" type="application/x-shockwave-flash" width="530"></embed></object></div>
</p>
<p style="padding:5px;background:#ddd;border:1px solid #ccc;clear:both;"><a href="http://www.tuaw.com/2011/07/12/firemints-agent-squeek-becomes-spy-mouse-gets-a-new-trailer/">Firemint&#8217;s Agent Squeek becomes Spy Mouse, gets a new trailer</a> originally appeared on <a href="http://www.tuaw.com">TUAW &#8211; The Unofficial Apple Weblog</a> on Tue, 12 Jul 2011 20:00:00 EST.  Please see our <a href="http://www.weblogsinc.com/feed-terms/">terms for use of feeds</a>.</p>
<p style="padding:5px;background:#ffffcc;border:1px solid #ffff99;clear:both;"><a href="http://www.tuaw.com"><img src="http://www.tuaw.com/media/feedlogo.gif" alt="TUAW - The Unofficial Apple Weblog" style="float:left;padding:0 5px 5px 0;" /></a><a href="http://www.tuaw.com/2011/07/12/firemints-agent-squeek-becomes-spy-mouse-gets-a-new-trailer/">Firemint&#8217;s Agent Squeek becomes Spy Mouse, gets a new trailer</a> originally appeared on <a href="http://www.tuaw.com">TUAW &#8211; The Unofficial Apple Weblog</a> on Tue, 12 Jul 2011 20:00:00 EST.  Please see our <a href="http://www.weblogsinc.com/feed-terms/">terms for use of feeds</a>.<br style="clear:both;"></p>
<p style="clear: both; padding: 8px 0 0 0; height: 2px; font-size: 1px; border: 0; margin: 0; padding: 0;">
<p><a href=http://firemint.com/spymouse/>Read</a> | <a href="http://www.tuaw.com/2011/07/12/firemints-agent-squeek-becomes-spy-mouse-gets-a-new-trailer/" rel="bookmark" title="Permanent link to this entry">Permalink</a> | <a href="http://www.tuaw.com/forward/19989411/" title="Send this entry to a friend via email">Email this</a> | <a href="http://www.tuaw.com/2011/07/12/firemints-agent-squeek-becomes-spy-mouse-gets-a-new-trailer/#comments" title="View reader comments on this entry">Comments</a></p>
]]></content>
<source>
	<title>TUAW - The Unofficial Apple Weblog</title>
	<link rel="alternate" type="text/html" href="http://www.tuaw.com" />
	<link rel="self" href="http://www.tuaw.com/category/developer/rss.xml" />
	<id>http://www.tuaw.com/category/developer/rss.xml</id>
</source>
		<link rel="replies" type="text/html" href="http://www.tuaw.com/2011/07/12/firemints-agent-squeek-becomes-spy-mouse-gets-a-new-trailer/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://planetidev.bunnyhero.org/?feed=atom&amp;p=4166" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>Steve</name>
						<uri>http://www.phonegap.com</uri>
					</author>
		<title type="html"><![CDATA[PhoneGap 1.0.0 Release Candidate 1 out now!]]></title>
		<link rel="alternate" type="text/html" href="http://www.phonegap.com/2011/07/12/phonegap-1-0-0-release-candidate-1-out-now/" />
		<id>http://www.phonegap.com/?p=3607</id>
		<updated>2011-07-12T23:35:54Z</updated>
		<published>2011-07-12T23:35:54Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="Uncategorized" />		<summary type="html"><![CDATA[Hey Everyone, I got some big news! PhoneGap 1.0.0rc1 has been released today. You can go download it now from http://www.phonegap.com/releasecandidate/. PhoneGap 1.0.0 is set to officially be released on PhoneGap Day, [...]]]></summary>
		<content type="html" xml:base="http://www.phonegap.com/2011/07/12/phonegap-1-0-0-release-candidate-1-out-now/"><![CDATA[<p>Hey Everyone,</p>
<p>I got some big news! PhoneGap 1.0.0rc1 has been released today. You can go download it now from <a href="http://www.phonegap.com/releasecandidate/">http://www.phonegap.com/releasecandidate/</a>. </p>
<p>PhoneGap 1.0.0 is set to officially be released on <a href="http://www.phonegap.com/community/events/phonegap-day/">PhoneGap Day</a>, July 29th, 2011. </p>
<p>Please take a look at our <a href="http://wiki.phonegap.com/w/page/42000202/Release-Plan">release plan</a> to view a checklist of features that were updated/added. We would greatly appreciate if members of this fantastic community can download the release candidate and report any bugs you find on github. Follow the <a href="http://wiki.phonegap.com/w/page/16494772/FrontPage#issue">wiki</a> for instructions on how to submit bugs.</p>
<p>I have included a file changes.txt into the download that shows commits from PhoneGap 0.9.6 to PhoneGap 1.0.0rc1. View that file to see some of the changes our developers made. </p>
<p>Cheers,<br />
-<a href="http://twitter.com/#/_SteveGill">Steve Gill</a></p>
]]></content>
<source>
	<title>PhoneGap</title>
	<link rel="alternate" type="text/html" href="http://www.phonegap.com" />
	<link rel="self" href="http://phonegap.com/feed" />
	<id>http://phonegap.com/feed</id>
</source>
		<link rel="replies" type="text/html" href="http://www.phonegap.com/2011/07/12/phonegap-1-0-0-release-candidate-1-out-now/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.phonegap.com/2011/07/12/phonegap-1-0-0-release-candidate-1-out-now/feed/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>Mike Schramm</name>
						<uri>http://www.tuaw.com</uri>
					</author>
		<title type="html"><![CDATA[360 MacDev Conference registration now open]]></title>
		<link rel="alternate" type="text/html" href="http://www.tuaw.com/2011/07/12/360-macdev-conference-registration-now-open/" />
		<id>http://www.tuaw.com/2011/07/12/360-macdev-conference-registration-now-open/</id>
		<updated>2011-07-12T23:30:00Z</updated>
		<published>2011-07-12T23:30:00Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="2012" /><category scheme="http://planetidev.bunnyhero.org" term="360 mac dev" /><category scheme="http://planetidev.bunnyhero.org" term="360macdev" /><category scheme="http://planetidev.bunnyhero.org" term="conference" /><category scheme="http://planetidev.bunnyhero.org" term="denver" /><category scheme="http://planetidev.bunnyhero.org" term="developer" /><category scheme="http://planetidev.bunnyhero.org" term="event" /><category scheme="http://planetidev.bunnyhero.org" term="february" /><category scheme="http://planetidev.bunnyhero.org" term="mac" />		<summary type="html"><![CDATA[[...]]]></summary>
		<content type="html" xml:base="http://www.tuaw.com/2011/07/12/360-macdev-conference-registration-now-open/"><![CDATA[<p style="text-align:center">
	<img alt="" border="0" height="85" src="http://www.blogcdn.com//media/2011/07/360macdevdenver.jpg" width="465" /></p>
<p>
	360|MacDev has <a href="http://www.360macdev.com/">opened up registration</a> for its next Mac developer conference in Denver, Colorado. Originally, they had wanted to schedule something this year, but due to conflicts of various kinds, the date has been moved out to next February, in 2012. That&#8217;s a ways away, but it&#8217;ll just give you lots of time to prepare, right? The early registration fee is in effect until September 9 or until they sell through the first 50 tickets, so if you&#8217;re set on going already, now&#8217;s the time to sign up.</p>
<p>
	I haven&#8217;t been to a 360|MacDev event, but we did visit <a href="http://www.tuaw.com/2010/04/13/360idev-saurik-on-the-mobile-application-market/">the 360|iDev conference</a> a while ago, and it was full of great information and networking around the iOS developer community. I&#8217;m sure the Mac side of things will be no different. And if you actually want to present at the show, you have that chance, too &#8212; there&#8217;s a Call for Papers out right now, so if you&#8217;ve got something interesting to share with the Mac community, let them know!</p>
<p style="padding:5px;background:#ddd;border:1px solid #ccc;clear:both;"><a href="http://www.tuaw.com/2011/07/12/360-macdev-conference-registration-now-open/">360 MacDev Conference registration now open</a> originally appeared on <a href="http://www.tuaw.com">TUAW &#8211; The Unofficial Apple Weblog</a> on Tue, 12 Jul 2011 18:30:00 EST.  Please see our <a href="http://www.weblogsinc.com/feed-terms/">terms for use of feeds</a>.</p>
<p style="padding:5px;background:#ffffcc;border:1px solid #ffff99;clear:both;"><a href="http://www.tuaw.com"><img src="http://www.tuaw.com/media/feedlogo.gif" alt="TUAW - The Unofficial Apple Weblog" style="float:left;padding:0 5px 5px 0;" /></a><a href="http://www.tuaw.com/2011/07/12/360-macdev-conference-registration-now-open/">360 MacDev Conference registration now open</a> originally appeared on <a href="http://www.tuaw.com">TUAW &#8211; The Unofficial Apple Weblog</a> on Tue, 12 Jul 2011 18:30:00 EST.  Please see our <a href="http://www.weblogsinc.com/feed-terms/">terms for use of feeds</a>.<br style="clear:both;"></p>
<p style="clear: both; padding: 8px 0 0 0; height: 2px; font-size: 1px; border: 0; margin: 0; padding: 0;">
<p><a href=http://www.360macdev.com/>Read</a> | <a href="http://www.tuaw.com/2011/07/12/360-macdev-conference-registration-now-open/" rel="bookmark" title="Permanent link to this entry">Permalink</a> | <a href="http://www.tuaw.com/forward/19989575/" title="Send this entry to a friend via email">Email this</a> | <a href="http://www.tuaw.com/2011/07/12/360-macdev-conference-registration-now-open/#comments" title="View reader comments on this entry">Comments</a></p>
]]></content>
<source>
	<title>TUAW - The Unofficial Apple Weblog</title>
	<link rel="alternate" type="text/html" href="http://www.tuaw.com" />
	<link rel="self" href="http://www.tuaw.com/category/developer/rss.xml" />
	<id>http://www.tuaw.com/category/developer/rss.xml</id>
</source>
		<link rel="replies" type="text/html" href="http://www.tuaw.com/2011/07/12/360-macdev-conference-registration-now-open/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://planetidev.bunnyhero.org/?feed=atom&amp;p=4173" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>brandontreb</name>
						<uri>http://icodeblog.com</uri>
					</author>
		<title type="html"><![CDATA[iPhone Development – Back To Basics]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/icodeblog/~3/r8tcW87EEQA/" />
		<id>http://www.icodeblog.com/?p=3212</id>
		<updated>2011-07-12T22:36:19Z</updated>
		<published>2011-07-12T22:36:19Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="Articles" /><category scheme="http://planetidev.bunnyhero.org" term="Tutorials" />		<summary type="html"><![CDATA[Wow, can you believe that it has been almost 3 years since I started iCodeblog!?  It seems like just yesterday, That I wrote my <a href="http://www.icodeblog.com/2008/07/24/iphone-programming-tutorial-1-getting-set-up/">very first tutorial</a> in July of 2008.  Now, iCodeBlog has multiple authors, hundreds of tutorials, and over 5,000 readers per day!
As you know, a few things (to say the least) have changed since we first launched iCodeBlog in 2008 with the way we develop for the iOS platform.  With that being said,  ...]]></summary>
		<content type="html" xml:base="http://feedproxy.google.com/~r/icodeblog/~3/r8tcW87EEQA/"><![CDATA[<p>Wow, can you believe that it has been almost 3 years since I started iCodeblog!?  It seems like just yesterday, That I wrote my <a href="http://www.icodeblog.com/2008/07/24/iphone-programming-tutorial-1-getting-set-up/">very first tutorial</a> in July of 2008.  Now, iCodeBlog has multiple authors, hundreds of tutorials, and over 5,000 readers per day!</p>
<p>As you know, a few things (to say the least) have changed since we first launched iCodeBlog in 2008 with the way we develop for the iOS platform.  With that being said, many of my early tutorials are now quite dated with old screenshots, old (deprecated) code, and no knowledge of memory management whatsoever. I have also evolved both in development as well as writing.  Since beginning, I have published many tutorials, written over 30 iOS applications, and even <a href="http://manning.com/trebitowski">published a book</a>.</p>
<h4>A New iOS Development Series</h4>
<p>All that being said, I am proud to announce my next tutorial series called <strong>Back To Basics</strong>.  This will be an ongoing series where I will revisit some of the core iOS development concepts for n00bs and experienced developers alike.  I will focus heavily on conventions, clean and clear coding, and really try to aid the reader in developing a solid foundation in iOS development.</p>
<p>Here is a rough roadmap of where we are going (obviously incomplete).</p>
<ul>
<li>Getting the tools</li>
<li>Overview of XCode</li>
<li>Basics of Objective-C</li>
<li>Hello iOS</li>
<li>MVC Design Patterns in Objective-C</li>
<li>View Controllers</li>
<li> Survey of Native Interface Components
<ul>
<li>Views</li>
<li>Table Views</li>
<li>Labels</li>
<li>Image Views</li>
<li>Pickers</li>
<li>Sliders</li>
<li>etc&#8230;</li>
</ul>
</li>
<li> Then we start the good stuff&#8230;). iOS Frameworks</li>
<li>Image and Video</li>
<li>Audio Recording and Playback</li>
<li>Location</li>
<li>Maps</li>
<li>GameKit</li>
<li>Game Center</li>
<li>etc&#8230;</li>
</ul>
<p>* Note that this list by no means is sorted or complete,  it&#8217;s just to give you an idea of what I plan on working on going forward. At some point, I will have a formal method for submitting suggestions for tutorials to be considered.</p>
<h4>But iCodeBlog Seems To Lack In The Post Frequency Department Lately</h4>
<p>This is true, and I&#8217;m very sorry about that.  Over the years iCodeBlog has gone through many transitions from being acquired by <a href="http://elctech.com">ELC Technologies</a> to partnering with <a href="http://velummedia.com/">Velum Media</a>.  This has caused a lot of confusion and lack of motivation to create new content.  We now have quite a few dedicated authors with some real incentives to write new content.</p>
<p>So make sure you <a href="http://feeds.feedburner.com/icodeblog">subscribe to the RSS feed</a> and stay tuned, because iCodeBlog is about to enter its best season yet.</p>
<p>Happy iCoding!</p>
<p><img src="http://feeds.feedburner.com/~r/icodeblog/~4/r8tcW87EEQA" height="1" width="1"/></p>
]]></content>
<source>
	<title>iPhone Programming Tutorials</title>
	<link rel="alternate" type="text/html" href="http://www.icodeblog.com" />
	<link rel="self" href="http://feeds.feedburner.com/icodeblog" />
	<id>http://feeds.feedburner.com/icodeblog</id>
</source>
		<link rel="replies" type="text/html" href="http://feedproxy.google.com/~r/icodeblog/~3/r8tcW87EEQA/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.icodeblog.com/2011/07/12/iphone-development-back-to-basics/feed/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>John</name>
						<uri>http://www.71squared.com</uri>
					</author>
		<title type="html"><![CDATA[Tutorial: iOS Multithreading With Grand Central Dispatch (GCD) Basics]]></title>
		<link rel="alternate" type="text/html" href="http://maniacdev.com/2011/07/tutorial-ios-multithreading-with-grand-central-dispatch-gcd-basics/" />
		<id>http://maniacdev.com/?p=3997</id>
		<updated>2011-07-12T18:38:19Z</updated>
		<published>2011-07-12T18:38:19Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="iPhone SDK And iPad SDK" />		<summary type="html"><![CDATA[<div><a href="http://twitter.com/share?url=http://maniacdev.com/2011/07/tutorial-ios-multithreading-with-grand-central-dispatch-gcd-basics/&#38;text=Tutorial:%20iOS%20Multithreading%20With%20Grand%20Central%20Dispatch%20(GCD)%20Basics&#38;via=maniacdev&#38;related="><img align="right" src="http://maniacdev.com/wp-content/plugins//easy-twitter-button/i/buttons/en/tweetn.png" style="border: none" alt="" /></a></div>
As a user it can be extremely frustrating if you&#8217;re using an application and you have to wait an extended period of time while the application updates. Sadly this was pretty common when the app store was new.  The devices were slower, the networks were slower, and many apps weren&#8217;t using multi-threading in places they [...]]]></summary>
		<content type="html" xml:base="http://maniacdev.com/2011/07/tutorial-ios-multithreading-with-grand-central-dispatch-gcd-basics/"><![CDATA[<div class="twitterbutton" style="float: right; padding-left: 5px;"><a href="http://twitter.com/share?url=http://maniacdev.com/2011/07/tutorial-ios-multithreading-with-grand-central-dispatch-gcd-basics/&amp;text=Tutorial:%20iOS%20Multithreading%20With%20Grand%20Central%20Dispatch%20(GCD)%20Basics&amp;via=maniacdev&amp;related="><img align="right" src="http://maniacdev.com/wp-content/plugins//easy-twitter-button/i/buttons/en/tweetn.png" style="border: none;" alt="" /></a></div>
<p>As a user it can be extremely frustrating if you&#8217;re using an application and you have to wait an extended period of time while the application updates.</p>
<p>Sadly this was pretty common when the app store was new.  The devices were slower, the networks were slower, and many apps weren&#8217;t using multi-threading in places they probably should have.  I remember becoming frustrated many times using an RSS reader, waiting for the article list to update, and then waiting again for the article to display.</p>
<p>Thankfully Apple introduced Grand Central Dispatch (GCD) with iOS 4.0.</p>
<p>Multithreaded programming with GCD can still be intimidating.  I&#8217;ve found a great step-by-step guide which breaks things down into a step by step guide explaining things fully every step of the process of downloading data asynchronously and updating in real time.</p>
<p>The tutorial is from Ray Wenderlich And Can Be Found Here:<br />
<a href="http://www.raywenderlich.com/4295/multithreading-and-grand-central-dispatch-on-ios-for-beginners-tutorial" >Multithreading And Grand Central Dispatch On iOS For Beginners Tutorial</a></p>
<p>An excellent example of a tutorial that makes a complicated subject seem so simple.</p>
<p>&copy;2011 <a href="http://maniacdev.com">iPhone, iOS 4, iPad SDK Development Tutorial and Programming Tips</a>. All Rights Reserved.</p>
<p>.
<div class="prli-social-buttons-bar"><a href="http://del.icio.us/post?url=http://maniacdev.com/qg3&#038;title=Tutorial:+iOS+Multithreading+With+Grand+Central+Dispatch+(GCD)+Basics+" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/delicious_32.png" alt="Delicious" title="Delicious" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://twitter.com/home?status=RT+@maniacdev:+Tutorial:+iOS+Multithreading+With+Grand+Central+Dispatch+(GCD)+Basics++http://maniacdev.com/qg3+(via+@maniacdev)" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/twitter_32.png" alt="Twitter" title="Twitter" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://technorati.com/faves?add=http://maniacdev.com/qg3" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/technorati_32.png" alt="Technorati" title="Technorati" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://www.facebook.com/sharer.php?u=http://maniacdev.com/qg3&#038;t=Tutorial:+iOS+Multithreading+With+Grand+Central+Dispatch+(GCD)+Basics+" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/facebook_32.png" alt="Facebook" title="Facebook" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://www.linkedin.com/shareArticle?mini=true&#038;url=http://maniacdev.com/qg3&#038;title=Tutorial:+iOS+Multithreading+With+Grand+Central+Dispatch+(GCD)+Basics+" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/linkedin_32.png" alt="LinkedIn" title="LinkedIn" border="0" style="padding: 0 20px 0 0;" /></a><a href="mailto:?subject=Tutorial:%20iOS%20Multithreading%20With%20Grand%20Central%20Dispatch%20(GCD)%20Basics%20&#038;body=Tutorial:%20iOS%20Multithreading%20With%20Grand%20Central%20Dispatch%20(GCD)%20Basics%20%20http://maniacdev.com/qg3" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/email_32.png" alt="Email" title="Email" border="0" style="padding: 0 20px 0 0;" /></a></div>
]]></content>
<source>
	<title>iPhone, iOS 4, iPad SDK Development Tutorial and Programming Tips</title>
	<link rel="alternate" type="text/html" href="http://maniacdev.com" />
	<link rel="self" href="http://www.maniacdev.com/feed" />
	<id>http://www.maniacdev.com/feed</id>
</source>
		<link rel="replies" type="text/html" href="http://maniacdev.com/2011/07/tutorial-ios-multithreading-with-grand-central-dispatch-gcd-basics/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://maniacdev.com/2011/07/tutorial-ios-multithreading-with-grand-central-dispatch-gcd-basics/feed/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>Andy Crofford</name>
						<uri>http://mobile-orchard.com</uri>
					</author>
		<title type="html"><![CDATA[Apple stock remains strong buy]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MobileOrchard/~3/iY5SOB028Qc/" />
		<id>http://mobileorchard.com/?p=7948</id>
		<updated>2011-07-12T15:29:10Z</updated>
		<published>2011-07-12T15:29:10Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="News" />		<summary type="html"><![CDATA[According to J.P. Morgan analyst Mark Moskowitz, Apple stock remains a strong buy and has &#8220;plenty of gas in the tank&#8221; for a continued increase in price, even with recent recent volatility. In a note to clients early Tuesday, Moskowitz said he expects Apple to beat both his estimates and the Wall Street consensus when [...]]]></summary>
		<content type="html" xml:base="http://feedproxy.google.com/~r/MobileOrchard/~3/iY5SOB028Qc/"><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http://mobileorchard.com/apple-stock-remains-strong-buy/"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http://mobileorchard.com/apple-stock-remains-strong-buy/&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>According to J.P. Morgan analyst Mark Moskowitz, Apple stock remains a strong buy and has &#8220;plenty of gas in the tank&#8221; for a continued increase in price, even with recent recent volatility.</p>
<blockquote><p>In a note to clients early Tuesday, Moskowitz said he expects Apple to beat both his estimates and the Wall Street consensus when it reports its third quarter of fiscal 2011 results next week. He attributed the stock&#8217;s recent fluctuations to the change in investor expectations as a result of &#8220;iPhone 5 vs. iPhone 4-plus soothsaying and the speculation over iPad 2 shortages.&#8221;</p>
<p>According to the analyst, concerns of shortages are &#8220;overdone,&#8221; as the firm&#8217;s research indicates that &#8220;most Apple stores are fully sourced.&#8221; He also pointed to the <a href="http://www.appleinsider.com/articles/11/07/08/apple_reflecting_dramatic_improvements_in_ipad_2_availability.html">recent shift</a> in Apple&#8217;s lead times for the iPad 2 from 1-2 weeks to 3-5 days as evidence that the company&#8217;s supply woes have improved.</a></p>
</blockquote>
<p>Source: <a href="http://www.appleinsider.com/articles/11/07/12/jp_morgan_apple_stock_still_has_gas_in_the_tank_despite_fluctuations/" >iPad 2 sales rebound expected to show Apple stock still has &#8216;gas in the tank&#8217;</p>
<p><img src="http://feeds.feedburner.com/~r/MobileOrchard/~4/iY5SOB028Qc" height="1" width="1"/></p>
]]></content>
<source>
	<title>Mobile Orchard</title>
	<link rel="alternate" type="text/html" href="http://mobileorchard.com" />
	<link rel="self" href="http://feeds.feedburner.com/MobileOrchard" />
	<id>http://feeds.feedburner.com/MobileOrchard</id>
</source>
		<link rel="replies" type="text/html" href="http://feedproxy.google.com/~r/MobileOrchard/~3/iY5SOB028Qc/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://mobileorchard.com/apple-stock-remains-strong-buy/feed/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>Ray Wenderlich</name>
						<uri>http://www.raywenderlich.com</uri>
					</author>
		<title type="html"><![CDATA[Multithreading and Grand Central Dispatch on iOS for Beginners Tutorial]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RayWenderlich/~3/pklYs4OINN8/multithreading-and-grand-central-dispatch-on-ios-for-beginners-tutorial" />
		<id>http://www.raywenderlich.com/?p=4295</id>
		<updated>2011-07-12T15:00:08Z</updated>
		<published>2011-07-12T15:00:08Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="GCD" /><category scheme="http://planetidev.bunnyhero.org" term="iOS" /><category scheme="http://planetidev.bunnyhero.org" term="iPhone" /><category scheme="http://planetidev.bunnyhero.org" term="sample code" /><category scheme="http://planetidev.bunnyhero.org" term="tutorial" />		<summary type="html"><![CDATA[Have you ever written an app where you tried to do something, and there was a long pause while the [...]]]></summary>
		<content type="html" xml:base="http://feedproxy.google.com/~r/RayWenderlich/~3/pklYs4OINN8/multithreading-and-grand-central-dispatch-on-ios-for-beginners-tutorial"><![CDATA[<div id="attachment_4296" class="wp-caption alignright" style="width: 260px"><a href="http://d1xzuxjlafny7l.cloudfront.net/wp-content/uploads/2011/07/GrandCentralDispatchSmall.jpg"><img src="http://d1xzuxjlafny7l.cloudfront.net/wp-content/uploads/2011/07/GrandCentralDispatchSmall.jpg" alt="Convert a slow, unresponsive app to a speedy cheetah with Grand Central Dispatch!" title="Convert a slow, unresponsive app to a speedy cheetah with Grand Central Dispatch!" width="250" height="240" class="size-full wp-image-4296" /></a>
<p class="wp-caption-text">Convert a slow, unresponsive app to a speedy cheetah with Grand Central Dispatch!</p>
</div>
<p>Have you ever written an app where you tried to do something, and there was a long pause while the UI was unresponsive?</p>
<p>This is usually a sign that your app needs multithreading!</p>
<p>In this tutorial, you&#8217;ll get hands on experience with the core multithreading API available on iOS: Grand Central Dispatch.</p>
<p>You&#8217;ll take an app that doesn&#8217;t use multithreading at all (and hence is very unresponsive), and convert it to use multithreading.  You&#8217;ll be shocked by the difference!</p>
<p>This tutorial assumes you are familiar with the basics of iOS development.  If you are completely new to iOS development, you should check out some of the <a href="http://www.raywenderlich.com/tutorials">other tutorials</a> on this site first.</p>
<p>Without further ado, take a swig of soda or chew some bubble gum and begin this tutorial at the same time &#8211; and you&#8217;re already on your way to multithreading!  :]</p>
<p><span id="more-4295"></span></p>
<h2>Why Should I Care?</h2>
<p><i>&#8220;Ahem, so why are you telling me this? Why should I care? I don&#8217;t care. What&#8217;d you have for lunch today?&#8221;</i></p>
<p>If you&#8217;re like a certain puppet, you might still be skeptical why you should care about all this multithreading business.  </p>
<p>So let&#8217;s show you why with a practical example of an app that doesn&#8217;t use multithreading at all.</p>
<p><a href="http://www.raywenderlich.com/downloads/ImageGrabberSync.zip">Download the starter project</a>, open it up with Xcode, and compile and run.  You&#8217;ll see a free game art pack from <a href="http://www.vickiwenderlich.com">vickiwenderlich.com</a> displayed on the screen:</p>
<p><a href="http://d1xzuxjlafny7l.cloudfront.net/wp-content/uploads/2011/07/ImageGrabber.jpg"><img src="http://d1xzuxjlafny7l.cloudfront.net/wp-content/uploads/2011/07/ImageGrabber.jpg" alt="ImageGrabber - an unresponsive and synchronous sample app" title="ImageGrabber - an unresponsive and synchronous sample app" width="320" height="480" class="alignnone size-full wp-image-4297" /></a></p>
<p>The app is called ImageGrabber, and its job is to go through the HTML of this web page and retrieve all of the images linked within, and display them in a table view so you can look at them more closely.</p>
<p>The cool part is it even downloads zip files and looks for images inside the zip files, such as the <a href="http://www.vickiwenderlich.com/downloads/GameArt/Monkey_Platformer_GameArt.zip">free game art zip</a> linked on the site!</p>
<p>Go ahead and tap the &#8220;Grab!&#8221; button to see if it works.</p>
<p>…</p>
<p>…waiting…</p>
<p>…</p>
<p>…waiting…</p>
<p>…</p>
<p>…waiting…</p>
<p>…</p>
<div id="attachment_2108" class="wp-caption alignnone" style="width: 212px"><a href="http://d1xzuxjlafny7l.cloudfront.net/wp-content/uploads/2010/09/Tsan_angry.jpg"><img src="http://d1xzuxjlafny7l.cloudfront.net/wp-content/uploads/2010/09/Tsan_angry.jpg" alt="Tomato-San is angry!" title="Tomato-San is angry!" width="202" height="240" class="size-full wp-image-2108" /></a>
<p class="wp-caption-text">Tomato-San is angry!</p>
</div>
<p>Wow!  It finally worked, but that took forever!  The app was parsing the HTML, downloading the images and the zip file, and unzipping the zip file, all on the main thread.</p>
<p>The end result was the user had to sit there for a significant amount of time waiting, not sure if the app was working at all!</p>
<p>The consequences of this are dire: the user might quit the app, the OS might terminate the app for taking too long, or you might get an angry Tomato attacking your treehouse.</p>
<p>Luckily, multithreading comes to the rescue!  Instead of putting all of this heavy-duty work on the main thread, we&#8217;ll move it to the background with some simple APIs provided by Apple.</p>
<h2>Multithreading&#8230; and cats!</h2>
<p>If you&#8217;re already familiar with the concept of multithreading, feel free to skip to the next section.  But if you&#8217;re completely new &#8211; read ahead!</p>
<p>When you think of a program running, you can think of it like a cat with big arrow pointing to the line it&#8217;s currently on.  The cat moves the arrow as the program advances through its logic, one step at a time.</p>
<div id="attachment_4298" class="wp-caption alignnone" style="width: 510px"><a href="http://d1xzuxjlafny7l.cloudfront.net/wp-content/uploads/2011/07/MultithreadCat.jpg"><img src="http://d1xzuxjlafny7l.cloudfront.net/wp-content/uploads/2011/07/MultithreadCat-500x158.jpg" alt="Multithreading is like a cat with an arrow." title="Multithreading is like a bunch of cats with a arrows." width="500" height="158" class="size-large wp-image-4298" /></a>
<p class="wp-caption-text">Multithreading is like a bunch of cats with a arrows.<br/>Image credit: <a  href='http://en.wikipedia.org/wiki/File%3AI_want_ur_luv_naw.jpg'>Diego Grez</a></p>
</div>
<p>The problem with the Image Grabber app is we&#8217;re basically exhausting our poor cat by doing all the work in the main thread.  So before the app could redraw the UI or respond to user events, it has to finish all of that time intensive work of downloading files, parsing HTML, etc.</p>
<div id="attachment_4299" class="wp-caption alignnone" style="width: 410px"><a href="http://d1xzuxjlafny7l.cloudfront.net/wp-content/uploads/2011/07/OverworkedCat.jpg"><img src="http://d1xzuxjlafny7l.cloudfront.net/wp-content/uploads/2011/07/OverworkedCat.jpg" alt="Don&#039;t overwork your cat - or the main thread!" title="Don&#039;t overwork your cat - or the main thread!" width="400" height="235" class="size-full wp-image-4299" /></a>
<p class="wp-caption-text">Don&#039;t overwork your cat &#8211; or the main thread!<br/>Image credit: <a href='http://en.wikipedia.org/wiki/File%3ACat_crying_(Lolcat).jpg'>Diego Grez</a></p>
</div>
<p>So how do we give our overworked cat a break?  The solution is simple &#8211; buy more cats!  (In fact I have a friend who is really good at this!)</p>
<p>That way your main cat can be responsible for updating the UI and responding to user events, while your other cats are going around the background downloading files, parsing HTML, and jumping on the tables (get off!)</p>
<p>This is the gist of multithreaded programming.  Just like these cats running around performing tasks, a process is broken down into multiple threads of execution.  </p>
<p>On iOS, the methods you&#8217;re used to implementing (like viewDidLoad, button tap callbacks, etc.) all run on the main thread.  You don&#8217;t want to perform time intensive work on the main thread, or else you&#8217;ll get an unresponsive UI and an overworked cat!</p>
<h2>Kids, Do Not Do This At Home</h2>
<p>Let&#8217;s take a look at the current code and discuss how it works &#8211; and why it&#8217;s bad!</p>
<p>The root view controller in the app is WebViewController.  When you tap the button (grabTapped) it gets the HTML of the current page, and passes it to the ImageListViewController.</p>
<p>In the ImageListViewController&#8217;s viewDidLoad, it creates a new ImageManager and calls process.  This class, along with ImageInfo, contain all of the time-intensive code, such as parsing the HTML, pulling down the images off the network, and unzipping files.</p>
<p>Let&#8217;s see how these two files work:</p>
<ul>
<li><em>ImageManager:processHTML:</em> Uses regular expression matching to search for links in the HTML.  This could potentially be time intensive, depending on how large the HTML is.  For every zip file it finds, it calls retrieveZip.  For every image it finds, it creates a new ImageInfo object, with the initWithSourceURL initializer.</li>
<li><em>ImageInfo:initWithSourceURL:</em> Calls getImage to retrieve the image over the network with the synchronous [NSData dataWithContentsOfURL:...] method.  Much like the [NSString stringWithContentsOfURL:...] method, this method blocks the flow of execution until it&#8217;s complete, which could be a very long time!  You almost never want to use this method in your apps.</li>
<li><em>ImageInfo:retrieveZip</em>: Similar to the above, uses the dreaded [NSData dataWithContentsOfURL:...] which halts the thread until it completes (do not use!)  When it&#8217;s done, it calls processZip.</li>
<li><em>ImageInfo:processZip:</em> Uses the ZipArchive library to save the downloaded data to disk, unzip it, and look for images inside.  Writing to disk and unzipping like this can be a very slow operation, so it&#8217;s another instance of work that really shouldn&#8217;t be on the main thread.</li>
</ul>
<p>You might also notice some calls to a delegate method of ImageManager &#8211; imageInfosAvailable.  This is how the ImageManager notifies the table view when there are new entries to be displayed in the table.</p>
<p>Take a look through and make sure you understand the current flow of execution &#8211; and why it&#8217;s so bad.  You might also find it useful to run it and look at the console log as it runs, and you&#8217;ll see some NSLog statements showing where the code is as it runs.</p>
<p>Once you have a good idea of how it currently works, let&#8217;s move on and improve it with some multithreading!</p>
<h2>Downloading Asynchronously</h2>
<p>Let&#8217;s start by replacing the slowest operation with asynchronous calls &#8211; the downloading of the files.</p>
<p>It&#8217;s actually not that difficult to do this with the built-in Apple classes &#8211; NSURLRequest and NSURLConnection &#8211; but I&#8217;m a fan of some wrapper classes that make this even easier &#8211; <a href="http://allseeing-i.com/ASIHTTPRequest/">ASIHTTPRequest</a>.</p>
<p>We&#8217;re going to use this to asynchronously download the files, so let&#8217;s add it to your project.</p>
<p>If you don&#8217;t have ASIHTTPRequest already, first <a href="http://github.com/pokeb/asi-http-request/tarball/master">download it</a>.  Once you have it downloaded, right click your ImageGrabber project entry in groups and files, select New Group, and name the new group ASIHTTPRequest. Then drag all of the files from the ASIHTTPRequest\Classes directory (ASIAuthenticationDialog.h and several others, but <em>IMPORTANT!</em> don’t add the subfolders such as ASIWebPageRequest, CloudFiles, S3, and Tests.) into the new ASIHTTPRequest group. Make sure “Copy items into destination group’s folder (if needed)” is selected, and click Finish.</p>
<p>Also repeat this for the two files in ASIHTTPRequest\External\Reachability, as these are dependencies of the project.</p>
<p>The <em>last step to add ASIHTTPRequest</em> is you need to link your project against a few required frameworks. To do this, click on your ImageGrabber project entry in Groups &#038; Files, click the PromoTest target, choose the Build Phases tab, and expand the Link Binary with Libraries section. Click the plus button in this section, and choose CFNetwork.framework. Then repeat this for SystemConfiguration.framework and MobileCoreServices.framework.</p>
<p>Now it&#8217;s time to replace the old bad synchronous code with the new good asynchronouse code!</p>
<p>Open up ImageManager.m and make the following changes:</p>
<div class="wp_codebox">
<table>
<tr id="p42958">
<td class="code" id="p4295code8">
<pre class="objc" style="font-family:monospace;"><span style="color: #11740a; font-style: italic;">// Add to top of file</span>
<span style="color: #6e371a;">#import &quot;ASIHTTPRequest.h&quot;</span>
&nbsp;
<span style="color: #11740a; font-style: italic;">// Replace retrieveZip with the following</span>
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>retrieveZip<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSURL_Class/"><span style="color: #400080;">NSURL</span></a> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>sourceURL <span style="color: #002200;">&#123;</span>
&nbsp;
    NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Getting %@...&quot;</span>, sourceURL<span style="color: #002200;">&#41;</span>;
&nbsp;
    __block ASIHTTPRequest <span style="color: #002200;">*</span>request <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>ASIHTTPRequest requestWithURL<span style="color: #002200;">:</span>sourceURL<span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#91;</span>request setCompletionBlock<span style="color: #002200;">:^</span><span style="color: #002200;">&#123;</span>
        NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Zip file downloaded.&quot;</span><span style="color: #002200;">&#41;</span>;
        <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSData_Class/"><span style="color: #400080;">NSData</span></a> <span style="color: #002200;">*</span>data <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>request responseData<span style="color: #002200;">&#93;</span>;
        <span style="color: #002200;">&#91;</span>self processZip<span style="color: #002200;">:</span>data sourceURL<span style="color: #002200;">:</span>sourceURL<span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#125;</span><span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#91;</span>request setFailedBlock<span style="color: #002200;">:^</span><span style="color: #002200;">&#123;</span>
        <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSError_Class/"><span style="color: #400080;">NSError</span></a> <span style="color: #002200;">*</span>error <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>request error<span style="color: #002200;">&#93;</span>;
        NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Error downloading zip file: %@&quot;</span>, error.localizedDescription<span style="color: #002200;">&#41;</span>;
    <span style="color: #002200;">&#125;</span><span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#91;</span>request startAsynchronous<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span></pre>
</td>
</tr>
</table>
</div>
<p>This sets up an ASIHTTPRequest with a given URL.  It sets up a block of code to run when the request finishes, and one to run if the requst fails for some reason.</p>
<p>Then it calls startAsynchronous.  This method returns immediately so the main thread can continue going about its business such as animating the UI and responding to user input.  In the meantime, the OS will automatically run the code to download the zip file on a background thread, and call one of the callback blocks when it completes or fails!</p>
<p>Similarly, switch to ImageInfo.m and make similar changes there:</p>
<div class="wp_codebox">
<table>
<tr id="p42959">
<td class="code" id="p4295code9">
<pre class="objc" style="font-family:monospace;"><span style="color: #11740a; font-style: italic;">// Add to top of file</span>
<span style="color: #6e371a;">#import &quot;ASIHTTPRequest.h&quot;</span>
&nbsp;
<span style="color: #11740a; font-style: italic;">// Replace getImage with the following</span>
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>getImage <span style="color: #002200;">&#123;</span>
&nbsp;
    NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Getting %@...&quot;</span>, sourceURL<span style="color: #002200;">&#41;</span>;
&nbsp;
    __block ASIHTTPRequest <span style="color: #002200;">*</span>request <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>ASIHTTPRequest requestWithURL<span style="color: #002200;">:</span>sourceURL<span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#91;</span>request setCompletionBlock<span style="color: #002200;">:^</span><span style="color: #002200;">&#123;</span>
        NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Image downloaded.&quot;</span><span style="color: #002200;">&#41;</span>;
        <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSData_Class/"><span style="color: #400080;">NSData</span></a> <span style="color: #002200;">*</span>data <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>request responseData<span style="color: #002200;">&#93;</span>;
        image <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>UIImage alloc<span style="color: #002200;">&#93;</span> initWithData<span style="color: #002200;">:</span>data<span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#125;</span><span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#91;</span>request setFailedBlock<span style="color: #002200;">:^</span><span style="color: #002200;">&#123;</span>
        <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSError_Class/"><span style="color: #400080;">NSError</span></a> <span style="color: #002200;">*</span>error <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>request error<span style="color: #002200;">&#93;</span>;
        NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Error downloading image: %@&quot;</span>, error.localizedDescription<span style="color: #002200;">&#41;</span>;
    <span style="color: #002200;">&#125;</span><span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#91;</span>request startAsynchronous<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span></pre>
</td>
</tr>
</table>
</div>
<p>This is pretty much the same as the other code &#8211; it runs the download in the background, and when it completes sets the image instance variable to the result.</p>
<p>Let&#8217;s see if it works!  Compile and run and tap &#8220;Grab!&#8221; and viola &#8211; it quickly switches to the detail tab rather than having a super-long pause!  However there&#8217;s one major problem:</p>
<p><a href="http://d1xzuxjlafny7l.cloudfront.net/wp-content/uploads/2011/07/UpdatingRowInTableView.jpg"><img src="http://d1xzuxjlafny7l.cloudfront.net/wp-content/uploads/2011/07/UpdatingRowInTableView.jpg" alt="Update a row in a UITableView when image loads" title="Update a row in a UITableView when image loads" width="320" height="480" class="alignnone size-full wp-image-4300" /></a></p>
<p>The images don&#8217;t show up in the table view after they&#8217;re downloaded!  You can get them to show up by scrolling the table up and down (which works because the data for the row is reloaded after it goes offscreen), but that is kind of a hack.  How can we fix this?</p>
<h2>Introducing NSNotifications</h2>
<p>One easy way to send updates from one part of your code to another is Apple&#8217;s built-in NSNotification system.</p>
<p>It&#8217;s quite simple.  You get the NSNotificationCenter singleton (via [NSNotificationCenter defaultCenter]) and:</p>
<ol>
<li>If you have an update you want to send, you call <em>postNotificationName</em>.  You just give it a unique string you make up (such as &#8220;com.razeware.imagegrabber.imageupdated&#8221;) and an object (such as the ImageInfo that just finished downloading its image).</li>
<li>If you want to find out when this update happens, you call <em>addObserver:selector:name:object</em>.  In our case the ImageListViewController will want to know when this happens so it can reload the appropriate table view cell.  A good spot to put this is in viewDidLoad.</li>
<li>Don&#8217;t forget to call <em>removeObserver:name:object</em> when the view gets unloaded.  Otherwise, the notification system might try to call a method on an unloaded view (or worse an unallocated object), which would be a bad thing!</li>
</ol>
<p>So let&#8217;s try this out.  Open up ImageInfo.m and make the following modification:</p>
<div class="wp_codebox">
<table>
<tr id="p429510">
<td class="code" id="p4295code10">
<pre class="objc" style="font-family:monospace;"><span style="color: #11740a; font-style: italic;">// Add inside getImage, right after image = [[UIImage alloc] initWithData:data];</span>
<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/"><span style="color: #400080;">NSNotificationCenter</span></a> defaultCenter<span style="color: #002200;">&#93;</span> postNotificationName<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;com.razeware.imagegrabber.imageupdated&quot;</span> object<span style="color: #002200;">:</span>self<span style="color: #002200;">&#93;</span>;</pre>
</td>
</tr>
</table>
</div>
<p>So once the image is downloaded, we post a notification and pass in this object that just got updated (self).</p>
<p>Next switch to ImageListViewController.m and make the following modifications:</p>
<div class="wp_codebox">
<table>
<tr id="p429511">
<td class="code" id="p4295code11">
<pre class="objc" style="font-family:monospace;"><span style="color: #11740a; font-style: italic;">// At end of viewDidLoad</span>
<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/"><span style="color: #400080;">NSNotificationCenter</span></a> defaultCenter<span style="color: #002200;">&#93;</span> addObserver<span style="color: #002200;">:</span>self selector<span style="color: #002200;">:</span><span style="color: #a61390;">@selector</span><span style="color: #002200;">&#40;</span>imageUpdated<span style="color: #002200;">:</span><span style="color: #002200;">&#41;</span> name<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;com.razeware.imagegrabber.imageupdated&quot;</span> object<span style="color: #002200;">:</span><span style="color: #a61390;">nil</span><span style="color: #002200;">&#93;</span>;
&nbsp;
<span style="color: #11740a; font-style: italic;">// At end of viewDidUnload</span>
<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/"><span style="color: #400080;">NSNotificationCenter</span></a> defaultCenter<span style="color: #002200;">&#93;</span> removeObserver<span style="color: #002200;">:</span>self name<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;com.razeware.imagegrabber.imageupdated&quot;</span> object<span style="color: #002200;">:</span><span style="color: #a61390;">nil</span><span style="color: #002200;">&#93;</span>;
&nbsp;
<span style="color: #11740a; font-style: italic;">// Add new method</span>
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>imageUpdated<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNotification_Class/"><span style="color: #400080;">NSNotification</span></a> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>notif <span style="color: #002200;">&#123;</span>
&nbsp;
    ImageInfo <span style="color: #002200;">*</span> info <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>notif object<span style="color: #002200;">&#93;</span>;
    <span style="color: #a61390;">int</span> row <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>imageInfos indexOfObject<span style="color: #002200;">:</span>info<span style="color: #002200;">&#93;</span>;
    <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSIndexPath_Class/"><span style="color: #400080;">NSIndexPath</span></a> <span style="color: #002200;">*</span> indexPath <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSIndexPath_Class/"><span style="color: #400080;">NSIndexPath</span></a> indexPathForRow<span style="color: #002200;">:</span>row inSection<span style="color: #002200;">:</span><span style="color: #2400d9;">0</span><span style="color: #002200;">&#93;</span>;
&nbsp;
    NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Image for row %d updated!&quot;</span>, row<span style="color: #002200;">&#41;</span>;
&nbsp;
    <span style="color: #002200;">&#91;</span>self.tableView reloadRowsAtIndexPaths<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/"><span style="color: #400080;">NSArray</span></a> arrayWithObject<span style="color: #002200;">:</span>indexPath<span style="color: #002200;">&#93;</span> withRowAnimation<span style="color: #002200;">:</span>UITableViewRowAnimationNone<span style="color: #002200;">&#93;</span>;
&nbsp;
<span style="color: #002200;">&#125;</span></pre>
</td>
</tr>
</table>
</div>
<p>This registers for the notification in viewDidUnload, basically saying &#8220;hey call imageUpdated when this notifiation arrives!&#8221;  It also deregisters appropriately in viewDidUnload.</p>
<p>The imageUpdated callback looks inside the array of imageInfos for the passed in object.  Once it finds it, it gets the indexPath of that row, and tells the table view to reload that row.</p>
<p>Compile and run, and now you&#8217;ll see the images pop in as they&#8217;re downloaded!</p>
<p><a href="http://d1xzuxjlafny7l.cloudfront.net/wp-content/uploads/2011/07/AsynchImageLoading.jpg"><img src="http://d1xzuxjlafny7l.cloudfront.net/wp-content/uploads/2011/07/AsynchImageLoading.jpg" alt="Asynchronous image loading" title="Asynchronous image loading" width="320" height="480" class="alignnone size-full wp-image-4301" /></a></p>
<h2>Grand Central Dispatch and Dispatch Queues, Oh My!</h2>
<p>There&#8217;s still a problem with our app.  If you tap the &#8220;Grab!&#8221; button and keep scrolling up and down continuously as soon as the detail view loads, after the zip file downloads you&#8217;ll see the entire UI freeze as it&#8217;s saving and unzipping the zip file.</p>
<p>This is because the completion block in ASIHTTPRequest gets called in the main thread, and we called the code to process the zip file within the main thread:</p>
<div class="wp_codebox">
<table>
<tr id="p429512">
<td class="code" id="p4295code12">
<pre class="objc" style="font-family:monospace;"><span style="color: #002200;">&#91;</span>request setCompletionBlock<span style="color: #002200;">:^</span><span style="color: #002200;">&#123;</span>
    NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Zip file downloaded.&quot;</span><span style="color: #002200;">&#41;</span>;
    <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSData_Class/"><span style="color: #400080;">NSData</span></a> <span style="color: #002200;">*</span>data <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>request responseData<span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#91;</span>self processZip<span style="color: #002200;">:</span>data sourceURL<span style="color: #002200;">:</span>sourceURL<span style="color: #002200;">&#93;</span>; <span style="color: #11740a; font-style: italic;">// Ack - heavy work on main thread!</span>
<span style="color: #002200;">&#125;</span><span style="color: #002200;">&#93;</span>;</pre>
</td>
</tr>
</table>
</div>
<p>So how can we run this heavy work in the background?</p>
<p>Well, iOS 3.2 introduced a very simple (and very efficient) way to do this via the Grand Central Dispatch system.  Basically, whenever you want to run something in the background, you just call <em>dispatch_async</em> and pass in some code to run.</p>
<p>Grand Central Dispatch will handle all of the details for you &#8211; it will create a new thread if it needs to, or reuse an old one if one is available.</p>
<p>When you call dispatch_async, you pass in a <em>dispatch queue</em>.  You can think of this as an list that stores all the blocks that you pass in, first in first out.  </p>
<p>You can make your own dispatch queues (via dispatch_create), or you can get a special dispatch queue for the main thread (via dispatch_get_main_queue).  We&#8217;ll be making a background queue called &#8220;backgroundQueue&#8221; that we&#8217;ll use to run processing tasks in the background, like parsing XML or saving/unzipping zip files.</p>
<h2>Dispatch Queues, Locks, and Cat Food</h2>
<p>A dispatch queue is set up by default to be serial &#8211; this means only one block of code from the queue runs at a time.  This can be pretty convenient, because you can use this behaviour to protect shared data.</p>
<p>If you aren&#8217;t familiar with locks in multithreading, think back to our earlier example about cats.  What would happen if two cats wanted to go to the cat food dish at the same time?  Big problems, that&#8217;s what!</p>
<p>But what if we made all of our cats get in a line instead.  And we&#8217;d say &#8220;hey cat, if you want to access this cat dish, you have to stand in this line!&#8221;  If only life were this easy!</p>
<div id="attachment_4302" class="wp-caption alignnone" style="width: 510px"><a href="http://d1xzuxjlafny7l.cloudfront.net/wp-content/uploads/2011/07/CatsInLine.jpg"><img src="http://d1xzuxjlafny7l.cloudfront.net/wp-content/uploads/2011/07/CatsInLine.jpg" alt="Maybe GCD really stands for Grand Cat Dispatch?" title="Maybe GCD really stands for Grand Cat Dispatch?" width="500" height="158" class="size-full wp-image-4302" /></a>
<p class="wp-caption-text">Maybe GCD really stands for Grand Cat Dispatch?</p>
</div>
<p>That&#8217;s the basic idea behind using dispatch queues to protect data.  You set up your code so that a particular data structure is only accessed by code running within a particular dispatch queue.  Then since dispatch queues run blocks serially, you&#8217;re guaranteed that only one will access the data structure at a time.</p>
<p>In this app we have two data structures we have to protect:</p>
<ol>
<li>The linkURLs array inside ImageListViewController.  To protect this, we&#8217;ll structure our code so that this is only ever touched in the main thread.</li>
<li>The pendingZips variable inside ImageManager.  To protect this, we&#8217;ll structure our code so that this is only ever touched in our &#8220;backgroundQueue&#8221;.</li>
</ol>
<p>OK enough chat about Grand Central Dispatch &#8211; let&#8217;s try it out!</p>
<h2>Grand Central Dispatch in Practice</h2>
<p>Start by opening up ImageGrabber.h and make the following changes:</p>
<div class="wp_codebox">
<table>
<tr id="p429513">
<td class="code" id="p4295code13">
<pre class="objc" style="font-family:monospace;"><span style="color: #11740a; font-style: italic;">// Add to top of file</span>
<span style="color: #6e371a;">#import &lt;dispatch/dispatch.h&gt;</span>
&nbsp;
<span style="color: #11740a; font-style: italic;">// Add new instance variable</span>
dispatch_queue_t backgroundQueue;</pre>
</td>
</tr>
</table>
</div>
<p>To use Grand Central Dispatch, you first need to import <dispatch/dispatch.h>.  We also predeclare the dispatch queue we&#8217;ll be using to run our background processing tasks.</p>
<p>Next open up ImageGrabber.m and make the following changes:</p>
<div class="wp_codebox">
<table>
<tr id="p429514">
<td class="code" id="p4295code14">
<pre class="objc" style="font-family:monospace;"><span style="color: #11740a; font-style: italic;">// 1) Add to bottom of initWithHTML:delegate</span>
backgroundQueue <span style="color: #002200;">=</span> dispatch_queue_create<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">&quot;com.razeware.imagegrabber.bgqueue&quot;</span>, <span style="color: #a61390;">NULL</span><span style="color: #002200;">&#41;</span>;
&nbsp;
<span style="color: #11740a; font-style: italic;">// 2) Add to top of dealloc</span>
dispatch_release<span style="color: #002200;">&#40;</span>backgroundQueue<span style="color: #002200;">&#41;</span>;
&nbsp;
<span style="color: #11740a; font-style: italic;">// 3) Modify process to be the following</span>
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>process <span style="color: #002200;">&#123;</span>
    dispatch_async<span style="color: #002200;">&#40;</span>backgroundQueue, <span style="color: #002200;">^</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>
        <span style="color: #002200;">&#91;</span>self processHtml<span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#125;</span><span style="color: #002200;">&#41;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #11740a; font-style: italic;">// 4) Modify call to processZip inside retrieveZip to be the following</span>
dispatch_async<span style="color: #002200;">&#40;</span>backgroundQueue, <span style="color: #002200;">^</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>
    <span style="color: #002200;">&#91;</span>self processZip<span style="color: #002200;">:</span>data sourceURL<span style="color: #002200;">:</span>sourceURL<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span><span style="color: #002200;">&#41;</span>;
&nbsp;
<span style="color: #11740a; font-style: italic;">// 5) Modify call to delegate at the end of processHTML **AND** processZip to be the following</span>
dispatch_async<span style="color: #002200;">&#40;</span>dispatch_get_main_queue<span style="color: #002200;">&#40;</span><span style="color: #002200;">&#41;</span>, <span style="color: #002200;">^</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>
    <span style="color: #002200;">&#91;</span>delegate imageInfosAvailable<span style="color: #002200;">:</span>imageInfos done<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>pendingZips<span style="color: #002200;">==</span><span style="color: #2400d9;">0</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span><span style="color: #002200;">&#41;</span>;</pre>
</td>
</tr>
</table>
</div>
<p>These are all simple but important calls, so let&#8217;s discuss each one in turn.</p>
<ol>
<li>This creates the dispatch queue.  When you create a dispatch queue you need to give it a unique name as a string.  One good way to create unique names is to use reverse DNS notation like this.</li>
<li>When you create a dispatch queue, don&#8217;t forget to release it!  For this queue we&#8217;ll release it when the ImageManager is deallocated.</li>
<li>The old process just ran processHTML directly, hence ran it in the main thread blocking the UI as the HTML was parsed.  Now, we run it in the background on the backgroundQueue we created, with a simple call to dispatch_async!</li>
<li>Similarly, after we download the zip we get a callback in the main thread from ASIHTTPRequeset saying &#8220;hey, I&#8217;m done!&#8221;  Instead of blocking the UI as we save and unzip the zip file like we did before, now we run it on the background queue.  This is also important to make sure that the pendingZips variable is protected.</li>
<li>We want to make sure that we call the delegate method within the context of the main thread.  First, to make sure that the linkURLs array in the view controller is only accessed via the main thread, according to our strategy discussion earlier.  Second because that method interacts with UIKit objects, and UIKit objects can only be used by the main thread.</li>
</ol>
<p>That&#8217;s it!  Compile and run your code, and ImageGrabber should behave much more responsively!</p>
<p><a href="http://d1xzuxjlafny7l.cloudfront.net/wp-content/uploads/2011/07/ResponsiveApp.jpg"><img src="http://d1xzuxjlafny7l.cloudfront.net/wp-content/uploads/2011/07/ResponsiveApp.jpg" alt="A responsive app with Grand Central Dispatch" title="A responsive app with Grand Central Dispatch" width="320" height="480" class="alignnone size-full wp-image-4303" /></a></p>
<h2>But Wait!</h2>
<p>If you&#8217;ve been programming on iOS for a while, you may have heard of these fancy things called NSOperations, and operation queues.  You might wonder when you should use them, and when you should use Grand Central Dispatch.</p>
<p>Well, NSOperations are simply an API built on top of Grand Central Dispatch.  So when you&#8217;re using NSOperations, you&#8217;re really still using Grand Central Dispatch.</p>
<p>It&#8217;s just that NSOperations give you some fancy features that you might like.  You can make some operations dependent on other operations, reorder queues after you sumbit items, and other things like that.</p>
<p>In fact, ImageGrabber is already using NSOperations and operation queues!  ASIHTTPRequest uses them under the hood, and you can configure the operation queue it uses for different behavior if you&#8217;d like.</p>
<p>So which should you use?  Whichever makes sense for your app.  For this app it&#8217;s pretty simple so we just used Grand Central Dispatch directly, no need for the fancy features of NSOperation.  But if you need them for your app, feel free to use it!</p>
<h2>Where To Go From Here?</h2>
<p>Here is a <a href="http://www.raywenderlich.com/downloads/ImageGrabberAsync.zip">sample project</a> with all of the code from the above tutorial.</p>
<p>You now have some practical experience with using asynchronous operations and grand central dispatch on iOS.  But this tutorial has barely scratched the surface &#8211; there&#8217;s a lot more you can learn!</p>
<p>I&#8217;d first suggest listening to the great <a href="https://developer.apple.com/videos/">Apple videos</a> related to Grand Central Dispatch.  Both WWDC 2010 and 2011 have some videos that are a great introduction to what&#8217;s available.</p>
<p>And if you really want to get into things, Mike Ash has some great <a href="http://www.mikeash.com/pyblog/?tag=gcd">articles on Grand Central Dispatch</a> that you might want to check out.</p>
<p>If you have any questions, comments, or suggestions, please join the forum discussion below!</p>
<p><img src="http://feeds.feedburner.com/~r/RayWenderlich/~4/pklYs4OINN8" height="1" width="1"/></p>
]]></content>
<source>
	<title>Ray Wenderlich</title>
	<link rel="alternate" type="text/html" href="http://www.raywenderlich.com" />
	<link rel="self" href="http://www.raywenderlich.com/feed" />
	<id>http://www.raywenderlich.com/feed</id>
</source>
		<link rel="replies" type="text/html" href="http://feedproxy.google.com/~r/RayWenderlich/~3/pklYs4OINN8/multithreading-and-grand-central-dispatch-on-ios-for-beginners-tutorial#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.raywenderlich.com/4295/multithreading-and-grand-central-dispatch-on-ios-for-beginners-tutorial/feed" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>John</name>
						<uri>http://www.71squared.com</uri>
					</author>
		<title type="html"><![CDATA[News: Moai SDK Game Development Kit Made Available To All]]></title>
		<link rel="alternate" type="text/html" href="http://maniacdev.com/2011/07/news-moai-sdk-made-available-to-all/" />
		<id>http://maniacdev.com/?p=3987</id>
		<updated>2011-07-12T06:48:16Z</updated>
		<published>2011-07-12T06:48:16Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="iPhone Dev News" />		<summary type="html"><![CDATA[<div><a href="http://twitter.com/share?url=http://maniacdev.com/2011/07/news-moai-sdk-made-available-to-all/&#38;text=News:%20Moai%20SDK%20Game%20Development%20Kit%20Made%20Available%20To%20All&#38;via=maniacdev&#38;related="><img align="right" src="http://maniacdev.com/wp-content/plugins//easy-twitter-button/i/buttons/en/tweetn.png" style="border: none" alt="" /></a></div>
A few weeks ago I mentioned the Moai SDK.  An open source iOS game development kit allowing for development of iOS apps (and Android apps) in Lua.  What I really liked about the engine that it has already been used in could be extended to support any functionality within the iOS SDK. At that time [...]]]></summary>
		<content type="html" xml:base="http://maniacdev.com/2011/07/news-moai-sdk-made-available-to-all/"><![CDATA[<div class="twitterbutton" style="float: right; padding-left: 5px;"><a href="http://twitter.com/share?url=http://maniacdev.com/2011/07/news-moai-sdk-made-available-to-all/&amp;text=News:%20Moai%20SDK%20Game%20Development%20Kit%20Made%20Available%20To%20All&amp;via=maniacdev&amp;related="><img align="right" src="http://maniacdev.com/wp-content/plugins//easy-twitter-button/i/buttons/en/tweetn.png" style="border: none;" alt="" /></a></div>
<p>A few weeks ago I mentioned the <a href="http://maniacdev.com/2011/06/moai-sdk-open-source-lua-game-dev-tool/">Moai SDK</a>.  An open source iOS game development kit allowing for development of iOS apps (and Android apps) in Lua.  What I really liked about the engine that it has already been used in could be extended to support any functionality within the iOS SDK.</p>
<p>At that time Moai  a limited beta, the beta has been extended now to support all developers.</p>
<p>In order to download the latest SDK release and the cloud services you will need to sign up on the Moai website for the dashboard here:<br />
<a href="http://dashboard.moaicloud.com/signup.php">http://dashboard.moaicloud.com/signup.php</a></p>
<p>You can find the Github project for the Moai SDK Source here:<br />
<a href="https://github.com/moai/moai-beta">https://github.com/moai/moai-beta</a></p>
<p>The cloud services look great, and very easy to code &#8211; if you&#8217;re interested be sure to check out their 60 second tutorial here:<br />
<a href="http://getmoai.com/2011/06/moai-tutorials-moai-cloud-basics/" >60 Second Moai Cloud Tutorial</a></p>
<p>There are numerous improvements since I first mentioned the SDK. Looks like the guys developing the Moai SDK have been very busy!</p>
<p>Read More: <a href="http://maniacdev.com/category/iphone-dev-news/" >iPhone Dev News</a></p>
<p>&copy;2011 <a href="http://maniacdev.com">iPhone, iOS 4, iPad SDK Development Tutorial and Programming Tips</a>. All Rights Reserved.</p>
<p>.
<div class="prli-social-buttons-bar"><a href="http://del.icio.us/post?url=http://maniacdev.com/ld6&#038;title=News:+Moai+SDK+Game+Development+Kit+Made+Available+To+All" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/delicious_32.png" alt="Delicious" title="Delicious" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://twitter.com/home?status=RT+@maniacdev:+News:+Moai+SDK+Game+Development+Kit+Made+Available+To+All+http://maniacdev.com/ld6+(via+@maniacdev)" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/twitter_32.png" alt="Twitter" title="Twitter" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://technorati.com/faves?add=http://maniacdev.com/ld6" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/technorati_32.png" alt="Technorati" title="Technorati" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://www.facebook.com/sharer.php?u=http://maniacdev.com/ld6&#038;t=News:+Moai+SDK+Game+Development+Kit+Made+Available+To+All" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/facebook_32.png" alt="Facebook" title="Facebook" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://www.linkedin.com/shareArticle?mini=true&#038;url=http://maniacdev.com/ld6&#038;title=News:+Moai+SDK+Game+Development+Kit+Made+Available+To+All" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/linkedin_32.png" alt="LinkedIn" title="LinkedIn" border="0" style="padding: 0 20px 0 0;" /></a><a href="mailto:?subject=News:%20Moai%20SDK%20Game%20Development%20Kit%20Made%20Available%20To%20All&#038;body=News:%20Moai%20SDK%20Game%20Development%20Kit%20Made%20Available%20To%20All%20http://maniacdev.com/ld6" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/email_32.png" alt="Email" title="Email" border="0" style="padding: 0 20px 0 0;" /></a></div>
]]></content>
<source>
	<title>iPhone, iOS 4, iPad SDK Development Tutorial and Programming Tips</title>
	<link rel="alternate" type="text/html" href="http://maniacdev.com" />
	<link rel="self" href="http://www.maniacdev.com/feed" />
	<id>http://www.maniacdev.com/feed</id>
</source>
		<link rel="replies" type="text/html" href="http://maniacdev.com/2011/07/news-moai-sdk-made-available-to-all/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://maniacdev.com/2011/07/news-moai-sdk-made-available-to-all/feed/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>Erica Sadun</name>
						<uri>http://www.tuaw.com</uri>
					</author>
		<title type="html"><![CDATA[Apple posts iOS 5 Beta 3, other developer updates]]></title>
		<link rel="alternate" type="text/html" href="http://www.tuaw.com/2011/07/11/apple-posts-ios-5-beta-3/" />
		<id>http://www.tuaw.com/2011/07/11/apple-posts-ios-5-beta-3/</id>
		<updated>2011-07-11T18:36:00Z</updated>
		<published>2011-07-11T18:36:00Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="Development" /><category scheme="http://planetidev.bunnyhero.org" term="IOS 5" /><category scheme="http://planetidev.bunnyhero.org" term="iOS5" />		<summary type="html"><![CDATA[[...]]]></summary>
		<content type="html" xml:base="http://www.tuaw.com/2011/07/11/apple-posts-ios-5-beta-3/"><![CDATA[<p>
	<img align="right" alt="" border="0" height="259" hspace="8" src="http://www.blogcdn.com//media/2011/06/screen-shot-2011-06-06-at-1.41.35-pm.jpeg" vspace="8" width="247" />If the bugs and instability of iOS 5 Beta 2 are driving you completely, utterly, and totally nuts[1], then this news will surely please you. Apple just posted iOS 5 Beta 3 at its <a href="http://developer.apple.com/ios">developer site</a> and it&#8217;s ready for you to download, enjoy, and rip out your hair as you refactor your code. Again.</p>
<p>
	If you are a paid ($99/year) dev, you can sign in with your developer credentials to gain access to this beta.</p>
<p>
	The beta is, as always, released under the terms of Apple&#8217;s NDA. For that reason, enhancements, APIs and features are not listed within this post.</p>
<p>
	TUAW&#8217;s iOS 5 coverage &#8212; researched and written by our non-NDA staffers &#8212; is available <a href="http://www.tuaw.com/tag/ios5">here</a>.</p>
<p>	In addition, Apple has made iTunes 10.5 beta 3 and iCloud for Lion beta 4 available to developers. Have at it!</p>
<p>
	<em>Happy developing everyone! </em><em>Thanks, everyone who tipped us.</em></p>
</p>
<p>
	<em>[1] strictly a hypothetical situation, you understand</em></p>
<p style="padding:5px;background:#ddd;border:1px solid #ccc;clear:both;"><a href="http://www.tuaw.com/2011/07/11/apple-posts-ios-5-beta-3/">Apple posts iOS 5 Beta 3, other developer updates</a> originally appeared on <a href="http://www.tuaw.com">TUAW &#8211; The Unofficial Apple Weblog</a> on Mon, 11 Jul 2011 13:36:00 EST.  Please see our <a href="http://www.weblogsinc.com/feed-terms/">terms for use of feeds</a>.</p>
<p style="padding:5px;background:#ffffcc;border:1px solid #ffff99;clear:both;"><a href="http://www.tuaw.com"><img src="http://www.tuaw.com/media/feedlogo.gif" alt="TUAW - The Unofficial Apple Weblog" style="float:left;padding:0 5px 5px 0;" /></a><a href="http://www.tuaw.com/2011/07/11/apple-posts-ios-5-beta-3/">Apple posts iOS 5 Beta 3, other developer updates</a> originally appeared on <a href="http://www.tuaw.com">TUAW &#8211; The Unofficial Apple Weblog</a> on Mon, 11 Jul 2011 13:36:00 EST.  Please see our <a href="http://www.weblogsinc.com/feed-terms/">terms for use of feeds</a>.<br style="clear:both;"></p>
<p style="clear: both; padding: 8px 0 0 0; height: 2px; font-size: 1px; border: 0; margin: 0; padding: 0;">
<p><a href=http://developer.apple.com/ios>Read</a> | <a href="http://www.tuaw.com/2011/07/11/apple-posts-ios-5-beta-3/" rel="bookmark" title="Permanent link to this entry">Permalink</a> | <a href="http://www.tuaw.com/forward/19981695/" title="Send this entry to a friend via email">Email this</a> | <a href="http://www.tuaw.com/2011/07/11/apple-posts-ios-5-beta-3/#comments" title="View reader comments on this entry">Comments</a></p>
]]></content>
<source>
	<title>TUAW - The Unofficial Apple Weblog</title>
	<link rel="alternate" type="text/html" href="http://www.tuaw.com" />
	<link rel="self" href="http://www.tuaw.com/category/developer/rss.xml" />
	<id>http://www.tuaw.com/category/developer/rss.xml</id>
</source>
		<link rel="replies" type="text/html" href="http://www.tuaw.com/2011/07/11/apple-posts-ios-5-beta-3/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://planetidev.bunnyhero.org/?feed=atom&amp;p=4158" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>John</name>
						<uri>http://www.71squared.com</uri>
					</author>
		<title type="html"><![CDATA[Tutorial: How To Use The iOS Keychain To Store Names And Passwords]]></title>
		<link rel="alternate" type="text/html" href="http://maniacdev.com/2011/07/tutorial-how-to-use-the-ios-keychain-to-store-names-and-passwords/" />
		<id>http://maniacdev.com/?p=3984</id>
		<updated>2011-07-11T18:32:10Z</updated>
		<published>2011-07-11T18:32:10Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="iPhone SDK And iPad SDK" /><category scheme="http://planetidev.bunnyhero.org" term="Objective-C Programming" />		<summary type="html"><![CDATA[<div><a href="http://twitter.com/share?url=http://maniacdev.com/2011/07/tutorial-how-to-use-the-ios-keychain-to-store-names-and-passwords/&#38;text=Tutorial:%20How%20To%20Use%20The%20iOS%20Keychain%20To%20Store%20Names%20And%20Passwords&#38;via=maniacdev&#38;related="><img align="right" src="http://maniacdev.com/wp-content/plugins//easy-twitter-button/i/buttons/en/tweetn.png" style="border: none" alt="" /></a></div>
If you have been using the Mac OS for any amount of time then you are likely aware of Apple&#8217;s password management system known as the Keychain.  iOS devices also have a keychain system for storing user data securely. If you need to store username/password data for a web service securely within your apps then [...]]]></summary>
		<content type="html" xml:base="http://maniacdev.com/2011/07/tutorial-how-to-use-the-ios-keychain-to-store-names-and-passwords/"><![CDATA[<div class="twitterbutton" style="float: right; padding-left: 5px;"><a href="http://twitter.com/share?url=http://maniacdev.com/2011/07/tutorial-how-to-use-the-ios-keychain-to-store-names-and-passwords/&amp;text=Tutorial:%20How%20To%20Use%20The%20iOS%20Keychain%20To%20Store%20Names%20And%20Passwords&amp;via=maniacdev&amp;related="><img align="right" src="http://maniacdev.com/wp-content/plugins//easy-twitter-button/i/buttons/en/tweetn.png" style="border: none;" alt="" /></a></div>
<p>If you have been using the Mac OS for any amount of time then you are likely aware of Apple&#8217;s password management system known as the Keychain.  iOS devices also have a keychain system for storing user data securely.</p>
<p>If you need to store username/password data for a web service securely within your apps then you will likely want to use the iOS keychain service.  I&#8217;ve found an excellent guide explaining the basics of reading and writing to the keychain.  Also included is a sample project demonstrating keychain usage (you will need to run on an actual device to test real saving/loading to the keychain).</p>
<p>The tutorial is from John Muchow and can be found here:<br />
<a href="http://iphonedevelopertips.com/core-services/using-keychain-to-store-username-and-password.html" >Using Keychain To Store Username And Password</a></p>
<p>A nice easy to follow guide in case you ever need to use the Keychain service within your apps.</p>
<p>&copy;2011 <a href="http://maniacdev.com">iPhone, iOS 4, iPad SDK Development Tutorial and Programming Tips</a>. All Rights Reserved.</p>
<p>.
<div class="prli-social-buttons-bar"><a href="http://del.icio.us/post?url=http://maniacdev.com/7wh&#038;title=Tutorial:+How+To+Use+The+iOS+Keychain+To+Store+Names+And+Passwords" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/delicious_32.png" alt="Delicious" title="Delicious" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://twitter.com/home?status=RT+@maniacdev:+Tutorial:+How+To+Use+The+iOS+Keychain+To+Store+Names+And+Passwords+http://maniacdev.com/7wh+(via+@maniacdev)" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/twitter_32.png" alt="Twitter" title="Twitter" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://technorati.com/faves?add=http://maniacdev.com/7wh" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/technorati_32.png" alt="Technorati" title="Technorati" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://www.facebook.com/sharer.php?u=http://maniacdev.com/7wh&#038;t=Tutorial:+How+To+Use+The+iOS+Keychain+To+Store+Names+And+Passwords" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/facebook_32.png" alt="Facebook" title="Facebook" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://www.linkedin.com/shareArticle?mini=true&#038;url=http://maniacdev.com/7wh&#038;title=Tutorial:+How+To+Use+The+iOS+Keychain+To+Store+Names+And+Passwords" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/linkedin_32.png" alt="LinkedIn" title="LinkedIn" border="0" style="padding: 0 20px 0 0;" /></a><a href="mailto:?subject=Tutorial:%20How%20To%20Use%20The%20iOS%20Keychain%20To%20Store%20Names%20And%20Passwords&#038;body=Tutorial:%20How%20To%20Use%20The%20iOS%20Keychain%20To%20Store%20Names%20And%20Passwords%20http://maniacdev.com/7wh" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/email_32.png" alt="Email" title="Email" border="0" style="padding: 0 20px 0 0;" /></a></div>
]]></content>
<source>
	<title>iPhone, iOS 4, iPad SDK Development Tutorial and Programming Tips</title>
	<link rel="alternate" type="text/html" href="http://maniacdev.com" />
	<link rel="self" href="http://www.maniacdev.com/feed" />
	<id>http://www.maniacdev.com/feed</id>
</source>
		<link rel="replies" type="text/html" href="http://maniacdev.com/2011/07/tutorial-how-to-use-the-ios-keychain-to-store-names-and-passwords/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://maniacdev.com/2011/07/tutorial-how-to-use-the-ios-keychain-to-store-names-and-passwords/feed/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>Michael</name>
						<uri>http://mobileorchard.com</uri>
					</author>
		<title type="html"><![CDATA[A Community for App Developers]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MobileOrchard/~3/vHdvoCea-3E/" />
		<id>http://mobileorchard.com/?p=7943</id>
		<updated>2011-07-11T17:55:14Z</updated>
		<published>2011-07-11T17:55:14Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="Resources" />		<summary type="html"><![CDATA[The app development process is not always an easy one. Developers must tackle issues such as how to use caching effectively or how to utilize the state machine to make the app more energy efficient. Inevitably, obstacles and unforeseen issues arise along the way. Turning somewhere for help is also a natural part of the [...]]]></summary>
		<content type="html" xml:base="http://feedproxy.google.com/~r/MobileOrchard/~3/vHdvoCea-3E/"><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http://mobileorchard.com/a-community-for-app-developers/"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http://mobileorchard.com/a-community-for-app-developers/&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>The app development process is not always an easy one. Developers must tackle issues such as how to use caching effectively or how to utilize the <span style="text-decoration: underline"><a href="http://mobileorchard.com/how-understanding-mobile-networks-will-improve-your-app%E2%80%99s-performance/">state machine</a></span> to make the app more energy efficient. Inevitably, obstacles and unforeseen issues arise along the way.</p>
<p>Turning somewhere for help is also a natural part of the app development process. That’s why sites like Mobile Orchard exist – to provide the latest in news and tips for all the developers out there. That’s also why a new Facebook community, <span style="text-decoration: underline"><a href="http://www.facebook.com/KickinApps">Kickin’ Apps</a></span>, was started – to create a space where developers can share best practices and tips, as well as work together to build better apps.</p>
<p>Are you bringing out the full potential of your app? I hope to see you on the Page, where developers can provide a fresh perspective to the whole process. Pay a visit to <span style="text-decoration: underline"><a href="http://www.facebook.com/KickinApps">Kickin’ Apps</a></span> and let’s start collaborating!</p>
<p><em>Michael is part of the AT&amp;T Developer Program and is an admin of the Kickin’ Apps Facebook Page.</em></p>
<p><img src="http://feeds.feedburner.com/~r/MobileOrchard/~4/vHdvoCea-3E" height="1" width="1"/></p>
]]></content>
<source>
	<title>Mobile Orchard</title>
	<link rel="alternate" type="text/html" href="http://mobileorchard.com" />
	<link rel="self" href="http://feeds.feedburner.com/MobileOrchard" />
	<id>http://feeds.feedburner.com/MobileOrchard</id>
</source>
		<link rel="replies" type="text/html" href="http://feedproxy.google.com/~r/MobileOrchard/~3/vHdvoCea-3E/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://mobileorchard.com/a-community-for-app-developers/feed/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>John Muchow</name>
						<uri>http://iPhoneDeveloperTips.com</uri>
					</author>
		<title type="html"><![CDATA[Using Keychain to Store Username and Password]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IphoneDeveloperTips/~3/JjncrzRi0Kg/using-keychain-to-store-username-and-password.html" />
		<id>http://iPhoneDeveloperTips.com/?p=8930</id>
		<updated>2011-07-11T08:09:52Z</updated>
		<published>2011-07-11T08:09:52Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="Core Services" />		<summary type="html"><![CDATA[The keychain services on iOS provide a means to securely store content such as passwords, keys, certificates, etc. Each iOS application has a separate set of keychain items. Beginning with iOS 3.0, it is possible to share keychain items across applications. In this tip, I will demonstrate a starting point for working with the keychain [...]]]></summary>
		<content type="html" xml:base="http://feedproxy.google.com/~r/IphoneDeveloperTips/~3/JjncrzRi0Kg/using-keychain-to-store-username-and-password.html"><![CDATA[<p>The keychain services on iOS provide a means to securely store content such as passwords, keys, certificates, etc. Each iOS application has a separate set of keychain items. Beginning with iOS 3.0, it is possible to share keychain items across applications.</p>
<p>In this tip, I will demonstrate a starting point for working with the keychain by storing and retrieving a username and password.<br />
<span id="more-8930"></span></p>
<h5>Keychain Demo Application</h5>
<p>Before going any further, let me show you the sample application I wrote to test keychain access. The screenshot on the left shows two fields, one each for username and passord, along with a button to initiate the process for writing to the keychain. The figure on the right shows the fields populated upon application startup by retrieving the username and password from the keychain.</p>
<p><img src="http://iphonedevelopertips.com/wp-content/uploads/2011/07/keychain.jpg" alt="" width="504" height="169" /></p>
<p>Below are the definitions for the textfields and the button:</p>
<div class="wp_syntax">
<div class="code">
<pre class="objc" style="font-family:monospace;">UITextField <span style="color: #002200;">*</span>username <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>UITextField alloc<span style="color: #002200;">&#93;</span> initWithFrame<span style="color: #002200;">:</span>CGRectMake<span style="color: #002200;">&#40;</span><span style="color: #2400d9;">40</span>, <span style="color: #2400d9;">30</span>, <span style="color: #2400d9;">240</span>, <span style="color: #2400d9;">30</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#91;</span>username setBorderStyle<span style="color: #002200;">:</span>UITextBorderStyleRoundedRect<span style="color: #002200;">&#93;</span>;
...
&nbsp;
UITextField <span style="color: #002200;">*</span>password <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>UITextField alloc<span style="color: #002200;">&#93;</span> initWithFrame<span style="color: #002200;">:</span>CGRectMake<span style="color: #002200;">&#40;</span><span style="color: #2400d9;">40</span>, <span style="color: #2400d9;">75</span>, <span style="color: #2400d9;">240</span>, <span style="color: #2400d9;">30</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#91;</span>password setBorderStyle<span style="color: #002200;">:</span>UITextBorderStyleRoundedRect<span style="color: #002200;">&#93;</span>;
...
&nbsp;
UIButton <span style="color: #002200;">*</span>testButton <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>UIButton buttonWithType<span style="color: #002200;">:</span>UIButtonTypeRoundedRect<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#91;</span>testButton setFrame<span style="color: #002200;">:</span>CGRectMake<span style="color: #002200;">&#40;</span><span style="color: #2400d9;">80</span>, <span style="color: #2400d9;">130</span>, <span style="color: #2400d9;">160</span>, <span style="color: #2400d9;">40</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#91;</span>testButton addTarget<span style="color: #002200;">:</span>self action<span style="color: #002200;">:</span><span style="color: #a61390;">@selector</span><span style="color: #002200;">&#40;</span>buttonPressed<span style="color: #002200;">:</span><span style="color: #002200;">&#41;</span> forControlEvents<span style="color: #002200;">:</span> UIControlEventTouchUpInside<span style="color: #002200;">&#93;</span>;
...</pre>
</div>
</div>
<h5>Keychain Wrapper</h5>
<p>Apple has written an Objective-C wrapper that you can use to simplify working with the keychain, the files in the wrapper are <strong>KeychainItemWrapper.h</strong> and <strong>KeychainItemWrapper.m</strong>, both are included in the attached Xcode project.</p>
<p>To use the wrapper, allocate a new <strong>KeychainItemWrapper</strong> object as shown below:</p>
<div class="wp_syntax">
<div class="code">
<pre class="objc" style="font-family:monospace;">KeychainItemWrapper <span style="color: #002200;">*</span>keychain <span style="color: #002200;">=</span>
 <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>KeychainItemWrapper alloc<span style="color: #002200;">&#93;</span> initWithIdentifier<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;TestAppLoginData&quot;</span> accessGroup<span style="color: #002200;">:</span><span style="color: #a61390;">nil</span><span style="color: #002200;">&#93;</span>;</pre>
</div>
</div>
<p>I&#8217;ve specified a unique identifier (&#8220;TestAppLoginData&#8221;) for the username and password pair that I want to store in the keychain. The <strong>accessGroup</strong> is set to nil as only one application will access the keychain items in this application.</p>
<h5>Writing to the Keychain</h5>
<p>Once the button is pressed to save the username and password, writing to the keychain is quite straight-forward. For the username, I set an object (the username text) with the key <strong>kSecAttrAccount</strong>. I follow this by setting another object, this time the password text, with the key <strong>kSecValueData</strong>.</p>
<div class="wp_syntax">
<div class="code">
<pre class="objc" style="font-family:monospace;"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>buttonPressed<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>UIButton <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>button
<span style="color: #002200;">&#123;</span>
  <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>button <span style="color: #002200;">==</span> testButton<span style="color: #002200;">&#41;</span>
  <span style="color: #002200;">&#123;</span>
    <span style="color: #11740a; font-style: italic;">// Store username to keychain 	</span>
    <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span><span style="color: #002200;">&#91;</span>username text<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span>
      <span style="color: #002200;">&#91;</span>keychain setObject<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span>username text<span style="color: #002200;">&#93;</span> forKey<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span>kSecAttrAccount<span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #11740a; font-style: italic;">// Store password to keychain</span>
    <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span><span style="color: #002200;">&#91;</span>password text<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span>
      <span style="color: #002200;">&#91;</span>keychain setObject<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span>password text<span style="color: #002200;">&#93;</span> forKey<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span>kSecValueData<span style="color: #002200;">&#93;</span>;
  <span style="color: #002200;">&#125;</span>
<span style="color: #002200;">&#125;</span></pre>
</div>
</div>
<h5>Reading from the Keychain</h5>
<p>To populate the textfields with stored keychain items at application startup, once the textfields are defined, I read the two key-value pairs:</p>
<div class="wp_syntax">
<div class="code">
<pre class="objc" style="font-family:monospace;"><span style="color: #11740a; font-style: italic;">// Get username from keychain (if it exists)</span>
<span style="color: #002200;">&#91;</span>username setText<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span>keychain objectForKey<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span>kSecAttrAccount<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>;
NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;username: %@&quot;</span>, <span style="color: #002200;">&#91;</span>username text<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span>;</pre>
</div>
</div>
<p>For the password, I request the key <strong>kSecValueData</strong>:</p>
<div class="wp_syntax">
<div class="code">
<pre class="objc" style="font-family:monospace;"><span style="color: #11740a; font-style: italic;">// Get password from keychain (if it exists)  </span>
<span style="color: #002200;">&#91;</span>password setText<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span>keychain objectForKey<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span>kSecValueData<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>;
NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;password: %@&quot;</span>, <span style="color: #002200;">&#91;</span>password text<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span>;</pre>
</div>
</div>
<p>For this simple application, at this point we are done, that&#8217;s all that is required to write and read items with the keychain.</p>
<h5>Notes:</h5>
<ul>
<li>Writing and retrieving values from the keychain doesn&#8217;t seem to work in the simulator.</li>
<li>Uninstalling an application will not remove the items from the keychain. If you run the demo application on your device, and uninstall the app, the username and password will remain in the keychain (a firmware reset will, of course, remove the keychain values).
</ul>
<h5>Apple Keychain Resources</h5>
<p><a href="http://developer.apple.com/library/mac/#documentation/Security/Conceptual/keychainServConcepts/iPhoneTasks/iPhoneTasks.html" >Keychain Services Programming Guide</a></p>
<p><a href="http://developer.apple.com/library/ios/#samplecode/GenericKeychain/Introduction/Intro.html" >GenericKeychain Example (source code)</a></p>
<h5>Keychain Xcode Project</h5>
<p>Download the demo project: &#8211; <a href="http://iphonedevelopertips.com/wp-content/uploads/2011/07/XcodeKeychainExample.zip">Store Username and Password to Keychain</a></p>
<div id="fb-root"></div>
<p><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><!-- Do not remove -->
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/IphoneDeveloperTips?a=JjncrzRi0Kg:utRnjL8-Cho:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/IphoneDeveloperTips?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/IphoneDeveloperTips?a=JjncrzRi0Kg:utRnjL8-Cho:UwWJ6YsNOak"><img src="http://feeds.feedburner.com/~ff/IphoneDeveloperTips?i=JjncrzRi0Kg:utRnjL8-Cho:UwWJ6YsNOak" border="0"></img></a>
</div>
<p><img src="http://feeds.feedburner.com/~r/IphoneDeveloperTips/~4/JjncrzRi0Kg" height="1" width="1"/></p>
]]></content>
<source>
	<title>[iOS dev:tips];</title>
	<link rel="alternate" type="text/html" href="http://iPhoneDeveloperTips.com" />
	<link rel="self" href="http://feeds.feedburner.com/IphoneDeveloperTips" />
	<id>http://feeds.feedburner.com/IphoneDeveloperTips</id>
</source>
		<link rel="replies" type="text/html" href="http://feedproxy.google.com/~r/IphoneDeveloperTips/~3/JjncrzRi0Kg/using-keychain-to-store-username-and-password.html#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://iPhoneDeveloperTips.com/core-services/using-keychain-to-store-username-and-password.html/feed" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>John</name>
						<uri>http://www.71squared.com</uri>
					</author>
		<title type="html"><![CDATA[Best Resources In iOS Development – July 10th 2011]]></title>
		<link rel="alternate" type="text/html" href="http://maniacdev.com/2011/07/best-resources-ios-development-july-10-2011/" />
		<id>http://maniacdev.com/?p=3975</id>
		<updated>2011-07-11T06:26:26Z</updated>
		<published>2011-07-11T06:26:26Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="iPhone SDK And iPad SDK" />		<summary type="html"><![CDATA[<div><a href="http://twitter.com/share?url=http://maniacdev.com/2011/07/best-resources-ios-development-july-10-2011/&#38;text=Best%20Resources%20In%20iOS%20Development%20%E2%80%93%20July%2010th%202011&#38;via=maniacdev&#38;related="><img align="right" src="http://maniacdev.com/wp-content/plugins//easy-twitter-button/i/buttons/en/tweetn.png" style="border: none" alt="" /></a></div>
Another great week has gone by, and if you are a regular visitor to this site you have probably noticed that I am now using a new theme.  Hopefully this betters the user experience for everyone. In the last week there were some great resources shared, those included a number of open source libraries relating [...]]]></summary>
		<content type="html" xml:base="http://maniacdev.com/2011/07/best-resources-ios-development-july-10-2011/"><![CDATA[<div class="twitterbutton" style="float: right; padding-left: 5px;"><a href="http://twitter.com/share?url=http://maniacdev.com/2011/07/best-resources-ios-development-july-10-2011/&amp;text=Best%20Resources%20In%20iOS%20Development%20&#8211;%20July%2010th%202011&amp;via=maniacdev&amp;related="><img align="right" src="http://maniacdev.com/wp-content/plugins//easy-twitter-button/i/buttons/en/tweetn.png" style="border: none;" alt="" /></a></div>
<p>Another great week has gone by, and if you are a regular visitor to this site you have probably noticed that I am now using a new theme.  Hopefully this betters the user experience for everyone.</p>
<p>In the last week there were some great resources shared, those included a number of open source libraries relating to topics such as Core Text, web services, data storage, and user interface improvements.</p>
<p>Here are the most viewed resources that were new in the last week listed in order of popularity:</p>
<p><a title="Open Source: Lightweight Asynchronous Networking Library For Easy Communication With Web Services" rel="bookmark" href="http://maniacdev.com/2011/07/open-source-lightweight-asynchronous-networking-library-web-services/">Open Source: Lightweight Asynchronous Networking Library For Easy Communication With Web Services</a> &#8211; A great lightweight library for communicating with web services allowing you to code complex interactions quickly by taking advantage of Objective-C blocks.</p>
<p><a title="Tutorial: Custom In View Popup Windows" rel="bookmark" href="http://maniacdev.com/2011/07/tutorial-custom-in-view-popup-windows/">Tutorial: Custom In View Popup Windows</a> &#8211; A guide and library for creating popup windows within your main view so that you can display content without needing to navigate to another view.</p>
<p><a title="Open Source: Rich Text-Editing View Using Core Text" rel="bookmark" href="http://maniacdev.com/2011/07/open-source-rich-text-editing-view-using-core-text/">Open Source: Rich Text-Editing View Using Core Text</a> &#8211; A drop in UITextView replacement that allows for easily creating and editing richly formatted text.</p>
<p><a title="Open Source: Library For Easy Data Saving/Loading" rel="bookmark" href="http://maniacdev.com/2011/07/open-source-library-data-saving-loading/">Open Source: Library For Easy Data Saving/Loading</a> &#8211; A straightforward data saving library allowing you to save or load int, float, and NSString data with just one line of code.</p>
<p><a title="Open Source: UITableView Replacement With Swipeable Cells" rel="bookmark" href="http://maniacdev.com/2011/07/open-source-uitableview-replacement-with-swipeable-cells/">Open Source: UITableView Replacement With Swipeable Cells</a> &#8211; A slick UITableView replacement that allows you to create table view cells that can be swiped by the user revealing new content behind the cell.</p>
<p><a title="Open Source: Library Allowing For Tab Bars With An Infinite Number Of Items" rel="bookmark" href="http://maniacdev.com/2011/07/open-source-library-allowing-for-tab-bars-with-an-infinite-number-of-items/">Open Source: Library Allowing For Tab Bars With An Infinite Number Of Items</a> &#8211; A tab bar library that allows you to place an unlimited number of items and allowing the user to scroll between different tab bars accessing the icons without the user having to use the more screen.</p>
<p><a title="Tutorial: Format Text Magazine Style Using Core Text" rel="bookmark" href="http://maniacdev.com/2011/07/tutorial-format-text-magazine-style-using-core-text/">Tutorial: Format Text Magazine Style Using Core Text</a> &#8211; A great step-by-step tutorial on how to format your text in multiple columns, and format the text with different styles using Core Text.  Excellent for anyone developing a magazine style app.</p>
<p><a title="Open Source: Easily Extensible Objective-C Math Parser Library" rel="bookmark" href="http://maniacdev.com/2011/07/open-source-easily-extensible-math-parser-library/">Open Source: Easily Extensible Objective-C Math Parser Library</a> &#8211; A very useful math parsing library that uses similar syntax to NSPredicate but allows you to very easily add new functions.</p>
<p><a title="Open Source: Library And Guide For NinePatch Image Support On iOS Platforms" rel="bookmark" href="http://maniacdev.com/2011/07/open-source-library-and-guide-for-ninepatch-image-support-on-ios-platforms/">Open Source: Library And Guide For NinePatch Image Support On iOS Platforms</a> &#8211; A libary for support of NinePatch format images that are commonly used for interface elements on Android.</p>
<p>Thanks for reading, please share and bookmark this post!</p>
<p>&copy;2011 <a href="http://maniacdev.com">iPhone, iOS 4, iPad SDK Development Tutorial and Programming Tips</a>. All Rights Reserved.</p>
<p>.
<div class="prli-social-buttons-bar"><a href="http://del.icio.us/post?url=http://maniacdev.com/f48&#038;title=Best+Resources+In+iOS+Development+-+July+10th+2011" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/delicious_32.png" alt="Delicious" title="Delicious" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://twitter.com/home?status=RT+@maniacdev:+Best+Resources+In+iOS+Development+-+July+10th+2011+http://maniacdev.com/f48+(via+@maniacdev)" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/twitter_32.png" alt="Twitter" title="Twitter" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://technorati.com/faves?add=http://maniacdev.com/f48" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/technorati_32.png" alt="Technorati" title="Technorati" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://www.facebook.com/sharer.php?u=http://maniacdev.com/f48&#038;t=Best+Resources+In+iOS+Development+-+July+10th+2011" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/facebook_32.png" alt="Facebook" title="Facebook" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://www.linkedin.com/shareArticle?mini=true&#038;url=http://maniacdev.com/f48&#038;title=Best+Resources+In+iOS+Development+-+July+10th+2011" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/linkedin_32.png" alt="LinkedIn" title="LinkedIn" border="0" style="padding: 0 20px 0 0;" /></a><a href="mailto:?subject=Best%20Resources%20In%20iOS%20Development%20-%20July%2010th%202011&#038;body=Best%20Resources%20In%20iOS%20Development%20-%20July%2010th%202011%20http://maniacdev.com/f48" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/email_32.png" alt="Email" title="Email" border="0" style="padding: 0 20px 0 0;" /></a></div>
]]></content>
<source>
	<title>iPhone, iOS 4, iPad SDK Development Tutorial and Programming Tips</title>
	<link rel="alternate" type="text/html" href="http://maniacdev.com" />
	<link rel="self" href="http://www.maniacdev.com/feed" />
	<id>http://www.maniacdev.com/feed</id>
</source>
		<link rel="replies" type="text/html" href="http://maniacdev.com/2011/07/best-resources-ios-development-july-10-2011/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://maniacdev.com/2011/07/best-resources-ios-development-july-10-2011/feed/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>Chris</name>
						<uri>http://www.bytesizeadventures.com/blog</uri>
					</author>
		<title type="html"><![CDATA[App Development – progress report #3]]></title>
		<link rel="alternate" type="text/html" href="http://www.bytesizeadventures.com/blog/app-development-progress-report-3/" />
		<id>http://www.bytesizeadventures.com/blog/?p=2226</id>
		<updated>2011-07-10T15:35:42Z</updated>
		<published>2011-07-10T15:35:42Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="App Development" /><category scheme="http://planetidev.bunnyhero.org" term="beta" /><category scheme="http://planetidev.bunnyhero.org" term="coffee" /><category scheme="http://planetidev.bunnyhero.org" term="coffee app" /><category scheme="http://planetidev.bunnyhero.org" term="Development Diary" /><category scheme="http://planetidev.bunnyhero.org" term="iphone app design" />		<summary type="html"><![CDATA[Time for another exciting progress report. The first Beta build has just gone out to the testers. Its slightly nerve-wracking but I&#8217;m looking forward to the feedback. The few short weeks since my last progress report have been rather hectic. I&#8217;ve implemented lots of minor functionality, fixed issues, added Retina graphics, and also made the [...]]]></summary>
		<content type="html" xml:base="http://www.bytesizeadventures.com/blog/app-development-progress-report-3/"><![CDATA[<p><a href="http://www.bytesizeadventures.com/blog/wp-content/uploads/2011/07/Screen-shot-2011-07-10-at-16.31.03.png"><img src="http://www.bytesizeadventures.com/blog/wp-content/uploads/2011/07/Screen-shot-2011-07-10-at-16.31.03-159x300.png" alt="" title="empty cupboard" width="159" height="300" class="alignleft size-medium wp-image-2240" /></a>Time for another exciting progress report.</p>
<p>The first Beta build has just gone out to the testers. Its slightly nerve-wracking but I&#8217;m looking forward to the feedback.</p>
<p>The few short weeks since my last progress report have been rather hectic. I&#8217;ve implemented lots of minor functionality, fixed issues, added Retina graphics, and also made the decision to implement a huge workflow change.</p>
<p>If you look back at my <a href="http://www.bytesizeadventures.com/blog/app-development-the-wireframes/">original wireframes</a>, you&#8217;ll see that I planned to have both a coffee cupboard to store current coffees and a list to store all of your coffees. My idea was that you would archive a coffee in the cupboard and it would be removed from the cupboard but stay in your coffees list. During development it has become fairly obvious that this is unnecessary workflow.</p>
<p>What I&#8217;ve ended up doing is removing the coffee list view completely. All of your coffees are now stored in the cupboard. They&#8217;re ordered by the date they were added so that your current coffees stay at the top. Shared coffees appear above those. This has simplified the workflow hugely.</p>
<p>It&#8217;s been a fair amount of work involving changing most of the controllers and modifying my core data entities. I also had to run performance tests. I loaded up 600 coffees into the App which resulted in around a 10-20 second load time for the cupboard screen (on my iPhone 3G). Obviously that would have been a poor long term experience so I ran some more tests. The core data selection was fast but rendering the icons to the screen was taking time. I ended up putting a limit in place so that your first 50 coffees are loaded and then you are presented with a tappable icon to load more coffees (kind of like the twitter Apps you see).</p>
<p>There are still a number of items left to complete which I&#8217;ll focus on during the Beta. The next post I write is likely to be regarding Beta testing. After that it&#8217;s App submission and marketing.</p>
<p>Check back soon!</p>
]]></content>
<source>
	<title>Bytesize Adventures</title>
	<link rel="alternate" type="text/html" href="http://www.bytesizeadventures.com/blog" />
	<link rel="self" href="http://www.bytesizeadventures.com/blog/feed/" />
	<id>http://www.bytesizeadventures.com/blog/feed/</id>
</source>
		<link rel="replies" type="text/html" href="http://www.bytesizeadventures.com/blog/app-development-progress-report-3/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.bytesizeadventures.com/blog/app-development-progress-report-3/feed/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>drops</name>
						<uri>http://www.drobnik.com/touch</uri>
					</author>
		<title type="html"><![CDATA[We’ll be back soon.]]></title>
		<link rel="alternate" type="text/html" href="http://www.cocoanetics.com/2011/07/well-be-back-soon/" />
		<id>http://www.cocoanetics.com/?p=5256</id>
		<updated>2011-07-10T07:13:27Z</updated>
		<published>2011-07-10T07:13:27Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="Administrative" />		<summary type="html"><![CDATA[After working full throttle on the scribd app and struggling to keep two more deadlines the past few weeks where really taking their toll. So today begins a week of downtime for me. We &#8211; that&#8217;s me, my wife and our dog &#8211; have rented an apartment and I had to promise not to bring any devices&#8230;. except the iPhone.

&#8220;Honey, what if we get lost? I need the maps app to steer us back to civilization!&#8221;
 You get the picture.   See you on the other side.
 ]]></summary>
		<content type="html" xml:base="http://www.cocoanetics.com/2011/07/well-be-back-soon/"><![CDATA[<p><g:plusone href="http://www.cocoanetics.com/2011/07/well-be-back-soon/"></g:plusone>
<p>After working full throttle on the <a href="http://www.scribd.com">scribd</a> app and struggling to keep two more deadlines the past few weeks where really taking their toll. So today begins a week of downtime for me. We &#8211; that&#8217;s me, my wife and our dog &#8211; have rented an apartment and I had to promise not to bring any devices&#8230;. except the iPhone.</p>
<p><a href="http://www.cocoanetics.com/files/backsoon.jpg"><img class="alignnone size-full wp-image-5257" title="back soon" src="http://www.cocoanetics.com/files/backsoon.jpg" alt="" width="193" height="167" /></a></p>
<p><em>&#8220;Honey, what if we get lost? I need the maps app to steer us back to civilization!&#8221;</em></p>
<p><em> </em>You get the picture. <img src='http://www.cocoanetics.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  See you on the other side.</p>
<p><a href="http://www.cocoanetics.com/?flattrss_redirect&amp;id=5256&amp;md5=27b4383b976d6be981598d457cc7e62d" title="Flattr" ><img src="http://www.cocoanetics.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>
]]></content>
<source>
	<title>Cocoanetics</title>
	<link rel="alternate" type="text/html" href="http://www.cocoanetics.com" />
	<link rel="self" href="http://www.drobnik.com/touch/feed/" />
	<id>http://www.drobnik.com/touch/feed/</id>
</source>
		<link rel="replies" type="text/html" href="http://www.cocoanetics.com/2011/07/well-be-back-soon/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.cocoanetics.com/2011/07/well-be-back-soon/feed/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>John</name>
						<uri>http://www.71squared.com</uri>
					</author>
		<title type="html"><![CDATA[Open Source: Easily Extensible Objective-C Math Parser Library]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/maniacdev/~3/Vie_buxzZQI/" />
		<id>http://maniacdev.com/?p=3969</id>
		<updated>2011-07-10T02:39:12Z</updated>
		<published>2011-07-10T02:39:12Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="iPhone SDK And iPad SDK" /><category scheme="http://planetidev.bunnyhero.org" term="Objective-C Programming" /><category scheme="http://planetidev.bunnyhero.org" term="Open Source iOS Libraries And Tools" />		<summary type="html"><![CDATA[Tweet Math parsing libraries can be extremely useful whenever you want to evaluate a complex mathematical expression.  In Objective-C you can use NSPredicate.  If you want to extend the functionality of NSPredicate however, this can be extremely difficult. I came across a math parser that provides many advantages over NSPredicate, and other existing math libraries [...]]]></summary>
		<content type="html" xml:base="http://feedproxy.google.com/~r/maniacdev/~3/Vie_buxzZQI/"><![CDATA[<p>  <script src="http://platform.twitter.com/widgets.js" type="text/javascript"></script></p>
<div style="float: right; margin: 0 0 6px 12px;">
    <a href="http://twitter.com/share" class="twitter-share-button"<br />
             data-url="http://maniacdev.com/2011/07/open-source-easily-extensible-math-parser-library/"<br />
             data-via="maniacdev"<br />
             data-text="Open Source: Easily Extensible Objective-C Math Parser Library http://maniacdev.com/iak (via @maniacdev)"<br />
             data-related="blairwilli:Blair Williams"<br />
             data-count="vertical">Tweet</a>
  </div>
<p>Math parsing libraries can be extremely useful whenever you want to evaluate a complex mathematical expression.  In Objective-C you can use NSPredicate.  If you want to extend the functionality of NSPredicate however, this can be extremely difficult.</p>
<p>I came across a math parser that provides many advantages over NSPredicate, and other existing math libraries with in my opinion the key feature being the ease at which you can register new functions.</p>
<p>The library is DDMathParser from DaveDeLong.  The Github for the library can be found here:<br />
<a href="https://github.com/davedelong">https://github.com/davedelong</a></p>
<p><a href="https://github.com/davedelong"></a>You can also read Dave&#8217;s extensive writeup on the library on his website here:<br />
<a href="http://funwithobjc.tumblr.com/post/6196535272/parsing-mathematical-expressions" >Parsing Mathematical Expressions</a></p>
<p>There are many other advantages of using Dave&#8217;s library over NSPredicate and other existing math parser&#8217;s in his writeup.</p>
<p>Looks like the right choice if you need to go beyond the default functionality provided by NSPredicate.</p>
<p>&copy;2011 <a href="http://maniacdev.com">iPhone, iOS 4, iPad SDK Development Tutorial and Programming Tips</a>. All Rights Reserved.</p>
<p>.
<div class="prli-social-buttons-bar"><a href="http://del.icio.us/post?url=http://maniacdev.com/iak&#038;title=Open+Source:+Easily+Extensible+Objective-C+Math+Parser+Library" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/delicious_32.png" alt="Delicious" title="Delicious" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://twitter.com/home?status=RT+@maniacdev:+Open+Source:+Easily+Extensible+Objective-C+Math+Parser+Library+http://maniacdev.com/iak+(via+@maniacdev)" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/twitter_32.png" alt="Twitter" title="Twitter" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://technorati.com/faves?add=http://maniacdev.com/iak" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/technorati_32.png" alt="Technorati" title="Technorati" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://www.facebook.com/sharer.php?u=http://maniacdev.com/iak&#038;t=Open+Source:+Easily+Extensible+Objective-C+Math+Parser+Library" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/facebook_32.png" alt="Facebook" title="Facebook" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://www.linkedin.com/shareArticle?mini=true&#038;url=http://maniacdev.com/iak&#038;title=Open+Source:+Easily+Extensible+Objective-C+Math+Parser+Library" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/linkedin_32.png" alt="LinkedIn" title="LinkedIn" border="0" style="padding: 0 20px 0 0;" /></a><a href="mailto:?subject=Open%20Source:%20Easily%20Extensible%20Objective-C%20Math%20Parser%20Library&#038;body=Open%20Source:%20Easily%20Extensible%20Objective-C%20Math%20Parser%20Library%20http://maniacdev.com/iak" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/email_32.png" alt="Email" title="Email" border="0" style="padding: 0 20px 0 0;" /></a></div>
<p><a href="http://feedads.g.doubleclick.net/~a/wqNSz6i_NWpxPpDZmwQPPXEpCkg/0/da"><img src="http://feedads.g.doubleclick.net/~a/wqNSz6i_NWpxPpDZmwQPPXEpCkg/0/di" border="0" ismap="true"></img></a><br/><br />
<a href="http://feedads.g.doubleclick.net/~a/wqNSz6i_NWpxPpDZmwQPPXEpCkg/1/da"><img src="http://feedads.g.doubleclick.net/~a/wqNSz6i_NWpxPpDZmwQPPXEpCkg/1/di" border="0" ismap="true"></img></a></p>
<p><img src="http://feeds.feedburner.com/~r/maniacdev/~4/Vie_buxzZQI" height="1" width="1"/></p>
]]></content>
<source>
	<title>iPhone, iOS 4, iPad SDK Development Tutorial and Programming Tips</title>
	<link rel="alternate" type="text/html" href="http://maniacdev.com" />
	<link rel="self" href="http://www.maniacdev.com/feed" />
	<id>http://www.maniacdev.com/feed</id>
</source>
		<link rel="replies" type="text/html" href="http://feedproxy.google.com/~r/maniacdev/~3/Vie_buxzZQI/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://maniacdev.com/2011/07/open-source-easily-extensible-math-parser-library/feed/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>drops</name>
						<uri>http://www.drobnik.com/touch</uri>
					</author>
		<title type="html"><![CDATA[Calculating Area Covered by Keyboard]]></title>
		<link rel="alternate" type="text/html" href="http://www.cocoanetics.com/2011/07/calculating-area-covered-by-keyboard/" />
		<id>http://www.cocoanetics.com/?p=5249</id>
		<updated>2011-07-09T15:11:43Z</updated>
		<published>2011-07-09T15:11:43Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="Recipes" />		<summary type="html"><![CDATA[If you show something that contains scrollable content, i.e. UITableView, UIScrollView etc. then you want to make an adjustment when the keyboard shows so that the user can still scroll to the entire content. He wouldn&#8217;t be able to do so if you didn&#8217;t do anything. I&#8217;ve seen several approaches to this so far, but they often hard code a certain position of the view or sizes. Like assuming that the covered view always reaches towards the bottom of the screen or always has a certain amount of space taken away from it by the status bar, navigation bar and possibly toolbar. The whole thing gets even more complicated by the fact the the coordinate system of the app&#8217;s window is always in portrait even though your app rotates. So is the frame of the keyboard which you can get from an info dictionary in several notifications. I&#8217;ll show you the most universally working method I was able to come up with. Label Buy an ad here Readability (function() { var s = document.getElementsByTagName('script')[0], rdb = document.createElement('script'); rdb.type = 'text/javascript'; rdb.async = true; rdb.src = document.location.protocol + '//www.readability.com/embed.js'; s.parentNode.insertBefore(rdb, s); })(); The first part is obvious, you want to subscribe to two notifications, one for when the keyboard has fully animated in and one for when the keyboard will go away. I&#8217;ve seen people mess with the frame of the covered view, but I generally found this to be disturbing the contents, in the least causing an unnecessary redraw because of the bounds change. Instead I prefer to set the content inset of the scroll view. This does not affect the contents, but permits for additional scroll distance so that the content at the bottom edge can be scrolled into the visible area above the keyboard. The inset for the scroll indicator is separate but needs the same treatment. Note that all this is best done in your UIScrollView subclass. NSNotificationCenter *center = &#091;NSNotificationCenter defaultCenter&#093;; &#091;center addObserver:self selector:@selector&#040;keyboardDidShow:&#041; name:UIKeyboardDidShowNotification object:nil&#093;; &#091;center addObserver:self selector:@selector&#040;keyboardWillHide:&#041; name:UIKeyboardWillHideNotification object:nil&#093;; And of course we remove the observer in the dealloc. - &#040;void&#041;dealloc &#123; &#091;&#091;NSNotificationCenter defaultCenter&#093; removeObserver:self&#093;; &#091;super dealloc&#093;; &#125; When the keyboard is hidden we don&#8217;t want any insets, so we reset them to zero. - &#040;void&#041;keyboardWillHide:&#040;NSNotification *&#041;notification &#123; self.contentInset = UIEdgeInsetsMake&#040;0, 0, 0, 0&#041;; self.scrollIndicatorInsets = self.contentInset; &#125; And now the good part, calculating the correct covered area of the view, regardless of where it is positioned on screen. Yet another complication derives from the fact that if we use the scrollview&#8217;s coordinate system then we get different results depending on the content size. So instead we need to use the superview&#8217;s coordinate system for transforming to and from the window coordinate system. This is necessary because the keyboard is mounted on the window and thus also has window coordinates. - &#040;void&#041;keyboardDidShow:&#040;NSNotification *&#041;notification &#123; // keyboard frame is in window coordinates NSDictionary *userInfo = &#091;notification userInfo&#093;; CGRect keyboardFrame = &#091;&#091;userInfo objectForKey:UIKeyboardFrameEndUserInfoKey&#093; CGRectValue&#093;; &#160; // convert own frame to window coordinates, frame is in superview's coordinates CGRect ownFrame = &#091;self.window convertRect:self.frame fromView:self.superview&#093;; &#160; // calculate the area of own frame that is covered by keyboard CGRect coveredFrame = CGRectIntersection&#040;ownFrame, keyboardFrame&#041;; &#160; // now this might be rotated, so convert it back coveredFrame = &#091;self.window convertRect:coveredFrame toView:self.superview&#093;; &#160; // set inset to make up for covered array at bottom self.contentInset = UIEdgeInsetsMake&#040;0, 0, coveredFrame.size.height, 0&#041;; self.scrollIndicatorInsets = self.contentInset; &#125; We use the handy CGRectIntersection function to get a rectangle that is common to both the keyboard and view frame. Since there might have been a rotation transform somewhere in between, we also need to convert back to our original superview&#8217;s coordinate system. And that&#8217;s it, now coveredFrame gives us exactly the area of our view that is covered and thus the hight is also the bottom inset we need to apply.]]></summary>
		<content type="html" xml:base="http://www.cocoanetics.com/2011/07/calculating-area-covered-by-keyboard/"><![CDATA[<p><g:plusone href="http://www.cocoanetics.com/2011/07/calculating-area-covered-by-keyboard/"></g:plusone>
<p>If you show something that contains scrollable content, i.e. UITableView, UIScrollView etc. then you want to make an adjustment when the keyboard shows so that the user can still scroll to the entire content. He wouldn&#8217;t be able to do so if you didn&#8217;t do anything.</p>
<p>I&#8217;ve seen several approaches to this so far, but they often hard code a certain position of the view or sizes. Like assuming that the covered view always reaches towards the bottom of the screen or always has a certain amount of space taken away from it by the status bar, navigation bar and possibly toolbar.</p>
<p>The whole thing gets even more complicated by the fact the the coordinate system of the app&#8217;s window is always in portrait even though your app rotates. So is the frame of the keyboard which you can get from an info dictionary in several notifications. I&#8217;ll show you the most universally working method I was able to come up with.</p>
<p><span id="more-5249"></span></p>
<div class="inner_ad_block">
<div id="advman-7" class="widget Advman_Widget">
<h3 class="widgettitle"></h3>
<p><!-- BuySellAds.com Zone Code --></p>
<div id="bsap_1260346" class="bsarocks bsap_fc3166ea4a479e0fdb4251fbe92a1219"></div>
<p><!-- End BuySellAds.com Zone Code --></div>
<div id="text-21" class="widget widget_text">
<h3 class="widgettitle">Label</h3>
<div class="textwidget">
<div class="advert-notice"><a href="http://buysellads.com/buy/detail/56639/zone/1260346">Buy an ad here</a></div>
</div>
</div>
<div id="text-14" class="widget widget_text">
<h3 class="widgettitle">Readability</h3>
<div class="textwidget">
<div id='rdbWrapper'></div>
<p><script type='text/javascript'>
(function() {
    var s     = document.getElementsByTagName('script')[0],
        rdb   = document.createElement('script');
    rdb.type  = 'text/javascript';
    rdb.async = true;
    rdb.src   = document.location.protocol + '//www.readability.com/embed.js';
    s.parentNode.insertBefore(rdb, s);
})();
</script></div>
</p>
</div>
</div>
<p>The first part is obvious, you want to subscribe to two notifications, one for when the keyboard has fully animated in and one for when the keyboard will go away. I&#8217;ve seen people mess with the frame of the covered view, but I generally found this to be disturbing the contents, in the least causing an unnecessary redraw because of the bounds change.</p>
<p>Instead I prefer to set the content inset of the scroll view. This does not affect the contents, but permits for additional scroll distance so that the content at the bottom edge can be scrolled into the visible area above the keyboard. The inset for the scroll indicator is separate but needs the same treatment.</p>
<p>Note that all this is best done in your UIScrollView subclass.</p>
<div class="wp_codebox">
<table>
<tr id="p52495">
<td class="code" id="p5249code5">
<pre class="objc" style="font-family:monospace;"><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/"><span style="color: #400080;">NSNotificationCenter</span></a> <span style="color: #002200;">*</span>center <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/"><span style="color: #400080;">NSNotificationCenter</span></a> defaultCenter<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#91;</span>center addObserver<span style="color: #002200;">:</span>self selector<span style="color: #002200;">:</span><span style="color: #a61390;">@selector</span><span style="color: #002200;">&#40;</span>keyboardDidShow<span style="color: #002200;">:</span><span style="color: #002200;">&#41;</span>
       name<span style="color: #002200;">:</span>UIKeyboardDidShowNotification object<span style="color: #002200;">:</span><span style="color: #a61390;">nil</span><span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#91;</span>center addObserver<span style="color: #002200;">:</span>self selector<span style="color: #002200;">:</span><span style="color: #a61390;">@selector</span><span style="color: #002200;">&#40;</span>keyboardWillHide<span style="color: #002200;">:</span><span style="color: #002200;">&#41;</span>
       name<span style="color: #002200;">:</span>UIKeyboardWillHideNotification object<span style="color: #002200;">:</span><span style="color: #a61390;">nil</span><span style="color: #002200;">&#93;</span>;</pre>
</td>
</tr>
</table>
</div>
<p>And of course we remove the observer in the dealloc.</p>
<div class="wp_codebox">
<table>
<tr id="p52496">
<td class="code" id="p5249code6">
<pre class="objc" style="font-family:monospace;"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>dealloc
<span style="color: #002200;">&#123;</span>
	<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/"><span style="color: #400080;">NSNotificationCenter</span></a> defaultCenter<span style="color: #002200;">&#93;</span> removeObserver<span style="color: #002200;">:</span>self<span style="color: #002200;">&#93;</span>;
	<span style="color: #002200;">&#91;</span>super dealloc<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span></pre>
</td>
</tr>
</table>
</div>
<p>When the keyboard is hidden we don&#8217;t want any insets, so we reset them to zero.</p>
<div class="wp_codebox">
<table>
<tr id="p52497">
<td class="code" id="p5249code7">
<pre class="objc" style="font-family:monospace;"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>keyboardWillHide<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNotification_Class/"><span style="color: #400080;">NSNotification</span></a> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>notification
<span style="color: #002200;">&#123;</span>
	self.contentInset <span style="color: #002200;">=</span> UIEdgeInsetsMake<span style="color: #002200;">&#40;</span><span style="color: #2400d9;">0</span>, <span style="color: #2400d9;">0</span>, <span style="color: #2400d9;">0</span>, <span style="color: #2400d9;">0</span><span style="color: #002200;">&#41;</span>;
	self.scrollIndicatorInsets <span style="color: #002200;">=</span> self.contentInset;
<span style="color: #002200;">&#125;</span></pre>
</td>
</tr>
</table>
</div>
<p>And now the good part, calculating the correct covered area of the view, regardless of where it is positioned on screen. Yet another complication derives from the fact that if we use the scrollview&#8217;s coordinate system then we get different results depending on the content size. </p>
<p>So instead we need to use the superview&#8217;s coordinate system for transforming to and from the window coordinate system. This is necessary because the keyboard is mounted on the window and thus also has window coordinates.</p>
<div class="wp_codebox">
<table>
<tr id="p52498">
<td class="code" id="p5249code8">
<pre class="objc" style="font-family:monospace;"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>keyboardDidShow<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNotification_Class/"><span style="color: #400080;">NSNotification</span></a> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>notification
<span style="color: #002200;">&#123;</span>
	<span style="color: #11740a; font-style: italic;">// keyboard frame is in window coordinates</span>
	<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSDictionary_Class/"><span style="color: #400080;">NSDictionary</span></a> <span style="color: #002200;">*</span>userInfo <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>notification userInfo<span style="color: #002200;">&#93;</span>;
	CGRect keyboardFrame <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>userInfo objectForKey<span style="color: #002200;">:</span>UIKeyboardFrameEndUserInfoKey<span style="color: #002200;">&#93;</span> CGRectValue<span style="color: #002200;">&#93;</span>;
&nbsp;
	<span style="color: #11740a; font-style: italic;">// convert own frame to window coordinates, frame is in superview's coordinates</span>
	CGRect ownFrame <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>self.window convertRect<span style="color: #002200;">:</span>self.frame fromView<span style="color: #002200;">:</span>self.superview<span style="color: #002200;">&#93;</span>;
&nbsp;
	<span style="color: #11740a; font-style: italic;">// calculate the area of own frame that is covered by keyboard</span>
	CGRect coveredFrame <span style="color: #002200;">=</span> CGRectIntersection<span style="color: #002200;">&#40;</span>ownFrame, keyboardFrame<span style="color: #002200;">&#41;</span>;
&nbsp;
	<span style="color: #11740a; font-style: italic;">// now this might be rotated, so convert it back</span>
	coveredFrame <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>self.window convertRect<span style="color: #002200;">:</span>coveredFrame toView<span style="color: #002200;">:</span>self.superview<span style="color: #002200;">&#93;</span>;
&nbsp;
	<span style="color: #11740a; font-style: italic;">// set inset to make up for covered array at bottom</span>
	self.contentInset <span style="color: #002200;">=</span> UIEdgeInsetsMake<span style="color: #002200;">&#40;</span><span style="color: #2400d9;">0</span>, <span style="color: #2400d9;">0</span>, coveredFrame.size.height, <span style="color: #2400d9;">0</span><span style="color: #002200;">&#41;</span>;
	self.scrollIndicatorInsets <span style="color: #002200;">=</span> self.contentInset;
<span style="color: #002200;">&#125;</span></pre>
</td>
</tr>
</table>
</div>
<p>We use the handy CGRectIntersection function to get a rectangle that is common to both the keyboard and view frame. Since there might have been a rotation transform somewhere in between, we also need to convert back to our original superview&#8217;s coordinate system. And that&#8217;s it, now coveredFrame gives us exactly the area of our view that is covered and thus the hight is also the bottom inset we need to apply.</p>
<p><a href="http://www.cocoanetics.com/?flattrss_redirect&amp;id=5249&amp;md5=7aaa614bd4aadc3a2a339c187c42ac33" title="Flattr" ><img src="http://www.cocoanetics.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>
]]></content>
<source>
	<title>Cocoanetics</title>
	<link rel="alternate" type="text/html" href="http://www.cocoanetics.com" />
	<link rel="self" href="http://www.drobnik.com/touch/feed/" />
	<id>http://www.drobnik.com/touch/feed/</id>
</source>
		<link rel="replies" type="text/html" href="http://www.cocoanetics.com/2011/07/calculating-area-covered-by-keyboard/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.cocoanetics.com/2011/07/calculating-area-covered-by-keyboard/feed/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>Nick Harris</name>
						<uri>http://nickharris.wordpress.com</uri>
					</author>
		<title type="html"><![CDATA[iPhone 4 Pictures]]></title>
		<link rel="alternate" type="text/html" href="http://nickharris.wordpress.com/2011/07/09/iphone4-pictures/" />
		<id>http://nickharris.wordpress.com/?p=148</id>
		<updated>2011-07-09T05:16:32Z</updated>
		<published>2011-07-09T05:16:32Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="Uncategorized" />		<summary type="html"><![CDATA[




Reasons why I love this picture:
1. It was there
2. I get to share what I saw
3. S
4. Symmetry
5. Red / Blue
6. Engineering (built for semi-trucks at high speeds)
7. My shadow
8. Snow capped peaks
         ]]></summary>
		<content type="html" xml:base="http://nickharris.wordpress.com/2011/07/09/iphone4-pictures/"><![CDATA[<div class="mceTemp">
<dl class="wp-caption alignnone">
<dt class="wp-caption-dt"><img class="  " title="Ugly Utah" src="http://farm6.static.flickr.com/5262/5868184337_833f3d926a_b.jpg" alt="" width="614" height="459" /></dt>
</dl>
</div>
<p>Reasons why I love this picture:</p>
<p>1. It was there<br />
2. I get to share what I saw<br />
3. S<br />
4. Symmetry<br />
5. Red / Blue<br />
6. Engineering (built for semi-trucks at high speeds)<br />
7. My shadow<br />
8. Snow capped peaks</p>
<p>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nickharris.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nickharris.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/nickharris.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/nickharris.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/nickharris.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/nickharris.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/nickharris.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/nickharris.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/nickharris.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/nickharris.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/nickharris.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/nickharris.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/nickharris.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/nickharris.wordpress.com/148/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nickharris.wordpress.com&amp;blog=4838311&amp;post=148&amp;subd=nickharris&amp;ref=&amp;feed=1" width="1" height="1" /></p>
]]></content>
<link href="" rel="enclosure" length="" type="" />
<link href="http://farm6.static.flickr.com/5262/5868184337_833f3d926a_b.jpg" rel="enclosure" length="" type="" />
<source>
	<title>Nick Harris</title>
	<link rel="alternate" type="text/html" href="http://nickharris.wordpress.com" />
	<link rel="self" href="http://nickharris.wordpress.com/feed/" />
	<id>http://nickharris.wordpress.com/feed/</id>
</source>
		<link rel="replies" type="text/html" href="http://nickharris.wordpress.com/2011/07/09/iphone4-pictures/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://nickharris.wordpress.com/2011/07/09/iphone4-pictures/feed/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>Erica Sadun</name>
						<uri>http://www.tuaw.com</uri>
					</author>
		<title type="html"><![CDATA[Dev Juice: Help me set up a multiperson dev team]]></title>
		<link rel="alternate" type="text/html" href="http://www.tuaw.com/2011/07/08/dev-juice-help-me-set-up-a-multiperson-dev-team/" />
		<id>http://www.tuaw.com/2011/07/08/dev-juice-help-me-set-up-a-multiperson-dev-team/</id>
		<updated>2011-07-08T22:00:00Z</updated>
		<published>2011-07-08T22:00:00Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="advice" /><category scheme="http://planetidev.bunnyhero.org" term="Dev Juice" /><category scheme="http://planetidev.bunnyhero.org" term="developer" /><category scheme="http://planetidev.bunnyhero.org" term="DevJuice" /><category scheme="http://planetidev.bunnyhero.org" term="iOS" /><category scheme="http://planetidev.bunnyhero.org" term="teams" /><category scheme="http://planetidev.bunnyhero.org" term="Xcode" />		<summary type="html"><![CDATA[[...]]]></summary>
		<content type="html" xml:base="http://www.tuaw.com/2011/07/08/dev-juice-help-me-set-up-a-multiperson-dev-team/"><![CDATA[<p><img alt="" src="http://www.blogcdn.com//media/2011/06/tuawdevjuice240.jpg" style="float: left; margin: 8px; border: 0px solid; width: 240px; height: 350px;" /></p>
<p>
	<em>Dear Dev Juice,</em></p>
<p>
	We have a 3 man dev team with the iOS developer program (as a small company plan) and we are getting ready to move up to Xcode 4 once Lion is out to the public and the have a stable sdk.</p>
<p>
	What is the best way to set all of our systems so we can each build for adhoc distribution instead of just one of us being able to?</p>
<p>
	<em>Thanks, Brandon</em></p>
<p>
	<img alt="" src="http://o.aolcdn.com/mars/2026/screen-shot-2011-03-10-at-5.32.35-pm-1303832127.jpeg" /></p>
<p>
	<em>Dear Brandon,</em></p>
<p>
	You can easily build for Ad Hoc on more than one machine at a time. Just export your developer provisions and certificates from Xcode&#8217;s organizer.</p>
<p>
	Click Export Developer Profile, enter a password that you will remember and verify that password. Save the file to a convenient location such as the desktop.</p>
<p>
	You will generally have to enter an administrator password during the process to allow Xcode to access your local keychain. Once created, you can transfer this profile file to another Macintosh system and import it through the same Xcode organizer screen. You will be prompted for the password.</p>
<p>
	Once imported, just do the same build-and-archive, sign-with-the-ad-hoc-provision building of IPAs on the remote installations that you would do at your home system.</p>
<p>
	<em>Happy Developing!</em></p>
<p style="padding:5px;background:#ddd;border:1px solid #ccc;clear:both;"><a href="http://www.tuaw.com/2011/07/08/dev-juice-help-me-set-up-a-multiperson-dev-team/">Dev Juice: Help me set up a multiperson dev team</a> originally appeared on <a href="http://www.tuaw.com">TUAW &#8211; The Unofficial Apple Weblog</a> on Fri, 08 Jul 2011 17:00:00 EST.  Please see our <a href="http://www.weblogsinc.com/feed-terms/">terms for use of feeds</a>.</p>
<p style="padding:5px;background:#ffffcc;border:1px solid #ffff99;clear:both;"><a href="http://www.tuaw.com"><img src="http://www.tuaw.com/media/feedlogo.gif" alt="TUAW - The Unofficial Apple Weblog" style="float:left;padding:0 5px 5px 0;" /></a><a href="http://www.tuaw.com/2011/07/08/dev-juice-help-me-set-up-a-multiperson-dev-team/">Dev Juice: Help me set up a multiperson dev team</a> originally appeared on <a href="http://www.tuaw.com">TUAW &#8211; The Unofficial Apple Weblog</a> on Fri, 08 Jul 2011 17:00:00 EST.  Please see our <a href="http://www.weblogsinc.com/feed-terms/">terms for use of feeds</a>.<br style="clear:both;"></p>
<p style="clear: both; padding: 8px 0 0 0; height: 2px; font-size: 1px; border: 0; margin: 0; padding: 0;">
<p><a href=http://tuaw.com/tag/devjuice>Read</a> | <a href="http://www.tuaw.com/2011/07/08/dev-juice-help-me-set-up-a-multiperson-dev-team/" rel="bookmark" title="Permanent link to this entry">Permalink</a> | <a href="http://www.tuaw.com/forward/19985540/" title="Send this entry to a friend via email">Email this</a> | <a href="http://www.tuaw.com/2011/07/08/dev-juice-help-me-set-up-a-multiperson-dev-team/#comments" title="View reader comments on this entry">Comments</a></p>
]]></content>
<source>
	<title>TUAW - The Unofficial Apple Weblog</title>
	<link rel="alternate" type="text/html" href="http://www.tuaw.com" />
	<link rel="self" href="http://www.tuaw.com/category/developer/rss.xml" />
	<id>http://www.tuaw.com/category/developer/rss.xml</id>
</source>
		<link rel="replies" type="text/html" href="http://www.tuaw.com/2011/07/08/dev-juice-help-me-set-up-a-multiperson-dev-team/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://planetidev.bunnyhero.org/?feed=atom&amp;p=4149" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>John</name>
						<uri>http://www.71squared.com</uri>
					</author>
		<title type="html"><![CDATA[Open Source: Library For Easy Data Saving/Loading]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/maniacdev/~3/4ULxrvp9ON8/" />
		<id>http://maniacdev.com/?p=3966</id>
		<updated>2011-07-08T18:17:05Z</updated>
		<published>2011-07-08T18:17:05Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="iPhone SDK And iPad SDK" /><category scheme="http://planetidev.bunnyhero.org" term="Objective-C Programming" /><category scheme="http://planetidev.bunnyhero.org" term="Open Source iOS Libraries And Tools" />		<summary type="html"><![CDATA[Tweet There are many ways to save data on iOS devices.  Some like a database are likely overkill for a game, and other methods like serialization are great, but things could still be easier. I&#8217;ve found a very cool time saving library that allows you to easily save and load ints, floats, and NSString&#8217;s to [...]]]></summary>
		<content type="html" xml:base="http://feedproxy.google.com/~r/maniacdev/~3/4ULxrvp9ON8/"><![CDATA[<p>  <script src="http://platform.twitter.com/widgets.js" type="text/javascript"></script></p>
<div style="float: right; margin: 0 0 6px 12px;">
    <a href="http://twitter.com/share" class="twitter-share-button"<br />
             data-url="http://maniacdev.com/2011/07/open-source-library-data-saving-loading/"<br />
             data-via="maniacdev"<br />
             data-text="Open Source: Library For Easy Data Saving/Loading http://maniacdev.com/nab (via @maniacdev)"<br />
             data-related="blairwilli:Blair Williams"<br />
             data-count="vertical">Tweet</a>
  </div>
<p>There are many ways to save data on iOS devices.  Some like a database are likely overkill for a game, and other methods like serialization are great, but things could still be easier.</p>
<p>I&#8217;ve found a very cool time saving library that allows you to easily save and load ints, floats, and NSString&#8217;s to an automatically created .PLIST file.  No fuss at all just one line of code to save, or one line to load each of these datatypes.  A nice simple quick solution if you want to install some simple data saving into an app.  If you need to save a few floats of game data it is an ideal solution.</p>
<p>The library is ABLFXSaveSystem from Alexander Blunck and can be found on Github here:<br />
<a href="https://github.com/ablfx/ABLFXSaveSystem" >https://github.com/ablfx/ABLFXSaveSystem</a></p>
<p><a href="https://github.com/ablfx/ABLFXSaveSystem" ></a>A cool example of a simple, but useful open source library.</p>
<p>&copy;2011 <a href="http://maniacdev.com">iPhone, iOS 4, iPad SDK Development Tutorial and Programming Tips</a>. All Rights Reserved.</p>
<p>.
<div class="prli-social-buttons-bar"><a href="http://del.icio.us/post?url=http://maniacdev.com/nab&#038;title=Open+Source:+Library+For+Easy+Data+Saving/Loading" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/delicious_32.png" alt="Delicious" title="Delicious" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://twitter.com/home?status=RT+@maniacdev:+Open+Source:+Library+For+Easy+Data+Saving/Loading+http://maniacdev.com/nab+(via+@maniacdev)" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/twitter_32.png" alt="Twitter" title="Twitter" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://technorati.com/faves?add=http://maniacdev.com/nab" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/technorati_32.png" alt="Technorati" title="Technorati" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://www.facebook.com/sharer.php?u=http://maniacdev.com/nab&#038;t=Open+Source:+Library+For+Easy+Data+Saving/Loading" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/facebook_32.png" alt="Facebook" title="Facebook" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://www.linkedin.com/shareArticle?mini=true&#038;url=http://maniacdev.com/nab&#038;title=Open+Source:+Library+For+Easy+Data+Saving/Loading" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/linkedin_32.png" alt="LinkedIn" title="LinkedIn" border="0" style="padding: 0 20px 0 0;" /></a><a href="mailto:?subject=Open%20Source:%20Library%20For%20Easy%20Data%20Saving/Loading&#038;body=Open%20Source:%20Library%20For%20Easy%20Data%20Saving/Loading%20http://maniacdev.com/nab" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/email_32.png" alt="Email" title="Email" border="0" style="padding: 0 20px 0 0;" /></a></div>
<p><a href="http://feedads.g.doubleclick.net/~a/Em-3cZ7AKEzPesLHnzs5bJ6lUnI/0/da"><img src="http://feedads.g.doubleclick.net/~a/Em-3cZ7AKEzPesLHnzs5bJ6lUnI/0/di" border="0" ismap="true"></img></a><br/><br />
<a href="http://feedads.g.doubleclick.net/~a/Em-3cZ7AKEzPesLHnzs5bJ6lUnI/1/da"><img src="http://feedads.g.doubleclick.net/~a/Em-3cZ7AKEzPesLHnzs5bJ6lUnI/1/di" border="0" ismap="true"></img></a></p>
<p><img src="http://feeds.feedburner.com/~r/maniacdev/~4/4ULxrvp9ON8" height="1" width="1"/></p>
]]></content>
<source>
	<title>iPhone, iOS 4, iPad SDK Development Tutorial and Programming Tips</title>
	<link rel="alternate" type="text/html" href="http://maniacdev.com" />
	<link rel="self" href="http://www.maniacdev.com/feed" />
	<id>http://www.maniacdev.com/feed</id>
</source>
		<link rel="replies" type="text/html" href="http://feedproxy.google.com/~r/maniacdev/~3/4ULxrvp9ON8/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://maniacdev.com/2011/07/open-source-library-data-saving-loading/feed/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>Andy Crofford</name>
						<uri>http://mobile-orchard.com</uri>
					</author>
		<title type="html"><![CDATA[Giveaway: Win some beautiful COLOR icons from Mobile App Icons and Mobile Orchard]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MobileOrchard/~3/78Xpp77Xc_k/" />
		<id>http://mobileorchard.com/?p=7934</id>
		<updated>2011-07-08T17:00:09Z</updated>
		<published>2011-07-08T17:00:09Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="Giveaways" />		<summary type="html"><![CDATA[Our last Mobile App Icons giveaway was on of the most popular prices we have ever offered here at Mobile Orchard. Good news, the guys at Mobile App Icons wants to give away more icons, only this time they are in color and there are 20 sets to give away. Any app developer would be [...]]]></summary>
		<content type="html" xml:base="http://feedproxy.google.com/~r/MobileOrchard/~3/78Xpp77Xc_k/"><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http://mobileorchard.com/giveaway-win-some-beautiful-color-icons-from-mobile-app-icons-and-mobile-orchard/"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http://mobileorchard.com/giveaway-win-some-beautiful-color-icons-from-mobile-app-icons-and-mobile-orchard/&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Our last <a href="http://mobileappicons.com" >Mobile App Icons</a> giveaway was on of the most popular prices we have ever offered here at Mobile Orchard. Good news, the guys at Mobile App Icons wants to give away more icons, only this time they are in color and there are 20 sets to give away. Any app developer would be happy to have these available for their use, check them out:</p>
<p style="text-align: center;"><a href="http://mobileappicons.com" ><img class="aligncenter size-full wp-image-7940" title="Mobile App Icons" src="http://mobileorchard.com/wp-content/uploads/2011/07/7-8-2011-8-21-28-PM.png" alt="" width="532" height="343" /><br />
</a></p>
<h3 style="text-align: left;"><strong>How To Win:</strong></h3>
<p>1. Follow <a href="http://twitter.com/#!/mobileappicons" >@mobileappicons</a> on Twitter.</p>
<p>2. Leave a comment on this post telling us why you want to win.</p>
<p>20 winners will be selected on next Wednesday, July 15th.</p>
<p>Good luck everyone!</p>
<p><img src="http://feeds.feedburner.com/~r/MobileOrchard/~4/78Xpp77Xc_k" height="1" width="1"/></p>
]]></content>
<source>
	<title>Mobile Orchard</title>
	<link rel="alternate" type="text/html" href="http://mobileorchard.com" />
	<link rel="self" href="http://feeds.feedburner.com/MobileOrchard" />
	<id>http://feeds.feedburner.com/MobileOrchard</id>
</source>
		<link rel="replies" type="text/html" href="http://feedproxy.google.com/~r/MobileOrchard/~3/78Xpp77Xc_k/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://mobileorchard.com/giveaway-win-some-beautiful-color-icons-from-mobile-app-icons-and-mobile-orchard/feed/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>Matt Tinsley</name>
						<uri>http://www.tuaw.com</uri>
					</author>
		<title type="html"><![CDATA[How to create a unique iOS home screen icon for your website]]></title>
		<link rel="alternate" type="text/html" href="http://www.tuaw.com/2011/07/08/how-to-create-a-unique-ios-home-screen-icon-for-your-website/" />
		<id>http://www.tuaw.com/2011/07/08/how-to-create-a-unique-ios-home-screen-icon-for-your-website/</id>
		<updated>2011-07-08T16:00:00Z</updated>
		<published>2011-07-08T16:00:00Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="daily ipad app" /><category scheme="http://planetidev.bunnyhero.org" term="DailyIpadApp" /><category scheme="http://planetidev.bunnyhero.org" term="GigaOm" /><category scheme="http://planetidev.bunnyhero.org" term="Home Screen" /><category scheme="http://planetidev.bunnyhero.org" term="HomeScreen" /><category scheme="http://planetidev.bunnyhero.org" term="How To" /><category scheme="http://planetidev.bunnyhero.org" term="iOS" /><category scheme="http://planetidev.bunnyhero.org" term="web developer" /><category scheme="http://planetidev.bunnyhero.org" term="webapps" /><category scheme="http://planetidev.bunnyhero.org" term="WebDeveloper" />		<summary type="html"><![CDATA[[...]]]></summary>
		<content type="html" xml:base="http://www.tuaw.com/2011/07/08/how-to-create-a-unique-ios-home-screen-icon-for-your-website/"><![CDATA[<p><img alt="" border="0" height="220" src="http://www.blogcdn.com//media/2011/07/home-icon.jpg" style="float:right;margin:0 0 8px 8px;border:none" width="360" /></p>
<p>
	<a href="http://gigaom.com/apple/how-to-create-ios-device-home-screen-icons-for-web-sites/?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed:+TheAppleBlog+(GigaOM:+Apple)">GIGAOM</a> has put together a nifty article detailing the process for creating a unique iOS home screen icon for your website.</p>
<p>
	<a href="http://www.tuaw.com/2008/12/19/iphone-101-add-mobile-websites-to-home-screen/">When iOS users visit your website and create a home screen icon shortcut</a> to easily access your site again, you want that icon to stand out and be easily identifiable amongst all the other icons, particularly if your site is a web app.</p>
<p>
	Normally, when you create a home screen icon for a website, iOS will create a thumbnail image of that webpage, but by following a few simple steps (using a program like Preview), and entering a few lines of code, your websites can easily be identified by a well branded icon on any iOS home screen.</p>
<p>
	Click <a href="http://gigaom.com/apple/how-to-create-ios-device-home-screen-icons-for-web-sites/?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed:+TheAppleBlog+(GigaOM:+Apple)">here</a> for all the details.</p>
</p>
<p style="padding:5px;background:#ddd;border:1px solid #ccc;clear:both;"><a href="http://www.tuaw.com/2011/07/08/how-to-create-a-unique-ios-home-screen-icon-for-your-website/">How to create a unique iOS home screen icon for your website</a> originally appeared on <a href="http://www.tuaw.com">TUAW &#8211; The Unofficial Apple Weblog</a> on Fri, 08 Jul 2011 11:00:00 EST.  Please see our <a href="http://www.weblogsinc.com/feed-terms/">terms for use of feeds</a>.</p>
<p style="padding:5px;background:#ffffcc;border:1px solid #ffff99;clear:both;"><a href="http://www.tuaw.com"><img src="http://www.tuaw.com/media/feedlogo.gif" alt="TUAW - The Unofficial Apple Weblog" style="float:left;padding:0 5px 5px 0;" /></a><a href="http://www.tuaw.com/2011/07/08/how-to-create-a-unique-ios-home-screen-icon-for-your-website/">How to create a unique iOS home screen icon for your website</a> originally appeared on <a href="http://www.tuaw.com">TUAW &#8211; The Unofficial Apple Weblog</a> on Fri, 08 Jul 2011 11:00:00 EST.  Please see our <a href="http://www.weblogsinc.com/feed-terms/">terms for use of feeds</a>.<br style="clear:both;"></p>
<p style="clear: both; padding: 8px 0 0 0; height: 2px; font-size: 1px; border: 0; margin: 0; padding: 0;">
<p><a href=http://gigaom.com/apple/how-to-create-ios-device-home-screen-icons-for-web-sites/?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed:+TheAppleBlog+(GigaOM:+Apple)>Read</a> | <a href="http://www.tuaw.com/2011/07/08/how-to-create-a-unique-ios-home-screen-icon-for-your-website/" rel="bookmark" title="Permanent link to this entry">Permalink</a> | <a href="http://www.tuaw.com/forward/19986350/" title="Send this entry to a friend via email">Email this</a> | <a href="http://www.tuaw.com/2011/07/08/how-to-create-a-unique-ios-home-screen-icon-for-your-website/#comments" title="View reader comments on this entry">Comments</a></p>
]]></content>
<source>
	<title>TUAW - The Unofficial Apple Weblog</title>
	<link rel="alternate" type="text/html" href="http://www.tuaw.com" />
	<link rel="self" href="http://www.tuaw.com/category/developer/rss.xml" />
	<id>http://www.tuaw.com/category/developer/rss.xml</id>
</source>
		<link rel="replies" type="text/html" href="http://www.tuaw.com/2011/07/08/how-to-create-a-unique-ios-home-screen-icon-for-your-website/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://planetidev.bunnyhero.org/?feed=atom&amp;p=4143" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>OG</name>
						<uri>http://www.streamingcolour.com/blog</uri>
					</author>
		<title type="html"><![CDATA[The 3-Year Indie]]></title>
		<link rel="alternate" type="text/html" href="http://www.streamingcolour.com/blog/2011/07/08/the-3-year-indie/" />
		<id>http://www.streamingcolour.com/blog/?p=1527</id>
		<updated>2011-07-08T15:56:35Z</updated>
		<published>2011-07-08T15:56:35Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="anniversary" /><category scheme="http://planetidev.bunnyhero.org" term="baby's musical hands" /><category scheme="http://planetidev.bunnyhero.org" term="Business" /><category scheme="http://planetidev.bunnyhero.org" term="cargo runners" /><category scheme="http://planetidev.bunnyhero.org" term="Dapple" /><category scheme="http://planetidev.bunnyhero.org" term="Dirty Diapers" /><category scheme="http://planetidev.bunnyhero.org" term="indie" /><category scheme="http://planetidev.bunnyhero.org" term="iPad" /><category scheme="http://planetidev.bunnyhero.org" term="iPhone" /><category scheme="http://planetidev.bunnyhero.org" term="LandFormer" /><category scheme="http://planetidev.bunnyhero.org" term="Misc" /><category scheme="http://planetidev.bunnyhero.org" term="monkeys in space" /><category scheme="http://planetidev.bunnyhero.org" term="three" /><category scheme="http://planetidev.bunnyhero.org" term="years" />		<summary type="html"><![CDATA[Well would you look at that: today is my three-year anniversary of starting Streaming Colour Studios. It has been an amazing three years, full of crazy ups and downs. I wanted to write a longer, more detailed blog post looking back at the last three years, but I&#8217;m excitedly working on a new game. Maybe [...]]]></summary>
		<content type="html" xml:base="http://www.streamingcolour.com/blog/2011/07/08/the-3-year-indie/"><![CDATA[<p>Well would you look at that: today is my three-year anniversary of starting Streaming Colour Studios. It has been an amazing three years, full of crazy ups and downs. I wanted to write a longer, more detailed blog post looking back at the last three years, but I&#8217;m excitedly working on a new game. Maybe I&#8217;ll get to that post when I&#8217;m a little less excited about coding.</p>
<p>In three years, I&#8217;ve released four games to the App Store:</p>
<ul>
<li><a href="http://streamingcolour.com/games/dapple/" >Dapple</a></li>
<li><a href="http://streamingcolour.com/games/monkeys/" >Monkeys in Space: Escape to Banana Base Alpha</a></li>
<li><a href="http://streamingcolour.com/games/landformer/" >LandFormer</a></li>
<li><a href="http://streamingcolour.com/games/dirtydiapers/" >Dirty Diapers</a></li>
</ul>
<p>And I&#8217;ve done some major client work:</p>
<ul>
<li><a href="http://www.troublebrothers.com/?page_id=12" >Cargo Runners</a></li>
</ul>
<p>I&#8217;ve also recently submitted an app to the store that I created for my eight-month-old son:</p>
<ul>
<li><a href="http://www.streamingcolour.com/games/musicalhands" >Baby&#8217;s Musical Hands (Coming Soon!)</a></li>
</ul>
<p>I made a cool HTML5 party game that you play on your cell phone at <a href="http://tojam.ca" >TOJam</a> with <a href="http://trainyard.ca" >Matt Rix</a> and <a href="http://whitakerblackall.com/" >Whitaker Blackall</a>:</p>
<ul>
<li><a href="http://whatjh.com" >What Just Happened?!</a></li>
</ul>
<p>I wrote a chapter in a book:</p>
<ul>
<li><a href="http://www.amazon.com/iPhone-Advanced-Projects-Mark/dp/1430224037/" >iPhone Advanced Projects</a></li>
</ul>
<p>And I&#8217;ve spoken at several conferences:</p>
<ul>
<li><a href="http://360idev.com/" >360iDev San Jose 2009</a></li>
<li><a href="http://360idev.com/" >360iDev San Jose 2010</a></li>
<li><a href="http://www.fitc.ca/events/about/?event=109" >FITC Mobile 2010</a></li>
</ul>
<p>I have had a lot of fun, I have struggled at times, and I have met the most incredible people in the indie games community. Thank you all for making this such a great experience, and thank you so much to everyone who has bought my games. Here&#8217;s to many more years of indie development!</p>
<p>Owen</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/StreamingColour?a=z0cYb-FU2kI:4muSilOUhUs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/StreamingColour?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/StreamingColour?a=z0cYb-FU2kI:4muSilOUhUs:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/StreamingColour?i=z0cYb-FU2kI:4muSilOUhUs:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/StreamingColour?a=z0cYb-FU2kI:4muSilOUhUs:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/StreamingColour?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/StreamingColour?a=z0cYb-FU2kI:4muSilOUhUs:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/StreamingColour?i=z0cYb-FU2kI:4muSilOUhUs:D7DqB2pKExk" border="0"></img></a>
</div>
<p><img src="http://feeds.feedburner.com/~r/StreamingColour/~4/z0cYb-FU2kI" height="1" width="1"/></p>
]]></content>
<source>
	<title>Streaming Colour Studios</title>
	<link rel="alternate" type="text/html" href="http://www.streamingcolour.com/blog" />
	<link rel="self" href="http://feeds2.feedburner.com/StreamingColour" />
	<id>http://feeds2.feedburner.com/StreamingColour</id>
</source>
		<link rel="replies" type="text/html" href="http://www.streamingcolour.com/blog/2011/07/08/the-3-year-indie/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.streamingcolour.com/blog/2011/07/08/the-3-year-indie/feed/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>Andy Crofford</name>
						<uri>http://mobile-orchard.com</uri>
					</author>
		<title type="html"><![CDATA[iPhone coming to Sprint, iPad HD this fall, and more in this weeks mobile news]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MobileOrchard/~3/Hyi6GwKfVrI/" />
		<id>http://mobileorchard.com/?p=7929</id>
		<updated>2011-07-08T13:00:25Z</updated>
		<published>2011-07-08T13:00:25Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="News" />		<summary type="html"><![CDATA[Sprint may be getting the iPhone before the end of the year. VIA Technologies sells S3 Graphics to HTC. Gizmodo has more rumors about the iPad HD coming out this fall. Looks like the App Store has hit the 15 Billion apps downloaded mark. Apple is supposedly looking into a new charging method for the [...]]]></summary>
		<content type="html" xml:base="http://feedproxy.google.com/~r/MobileOrchard/~3/Hyi6GwKfVrI/"><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http://mobileorchard.com/iphone-coming-to-sprint-ipad-hd-this-fall-and-more-in-this-weeks-mobile-news/"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http://mobileorchard.com/iphone-coming-to-sprint-ipad-hd-this-fall-and-more-in-this-weeks-mobile-news/&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://blogs.barrons.com/techtraderdaily/2011/07/06/sprint-iphone-deal-appears-more-likely-says-citadel/&quot;" ><img class="alignleft size-full wp-image-7930" title="sprint" src="http://mobileorchard.com/wp-content/uploads/2011/07/sprint.jpg" alt="" width="160" height="120" />Sprint may be getting the iPhone</a> before the end of the year.</p>
<p>VIA Technologies <a href="http://www.via.com.tw/en/resources/pressroom/pressrelease.jsp?press_release_no=5687" >sells S3 Graphics</a> to HTC.</p>
<p>Gizmodo has more rumors about the <a href="http://gizmodo.com/5819034/ipad-hd-arriving-with-iphone-5-in-the-fall" >iPad HD coming out this fall</a>.</p>
<p>Looks like the <a href="http://isource.com/2011/07/07/crazy-app-store-numbers-15-billion-app-downloads/" >App Store has hit the 15 Billion apps downloaded</a> mark.</p>
<p>Apple is supposedly looking into a <a href="http://www.appleinsider.com/articles/11/07/07/apple_rumored_to_be_looking_into_new_charging_method_for_6th_gen_iphone/" >new charging method</a> for the 6th generation iPhone.</p>
<p><img src="http://feeds.feedburner.com/~r/MobileOrchard/~4/Hyi6GwKfVrI" height="1" width="1"/></p>
]]></content>
<source>
	<title>Mobile Orchard</title>
	<link rel="alternate" type="text/html" href="http://mobileorchard.com" />
	<link rel="self" href="http://feeds.feedburner.com/MobileOrchard" />
	<id>http://feeds.feedburner.com/MobileOrchard</id>
</source>
		<link rel="replies" type="text/html" href="http://feedproxy.google.com/~r/MobileOrchard/~3/Hyi6GwKfVrI/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://mobileorchard.com/iphone-coming-to-sprint-ipad-hd-this-fall-and-more-in-this-weeks-mobile-news/feed/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>JFMartin</name>
						<uri>http://buildingiphoneapps.blogspot.com/</uri>
					</author>
		<title type="html"><![CDATA[App Store review time trend updated]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/BuildingIphoneApps/~3/k4w6k9gX3VA/app-store-review-time-trend-updated.html" />
		<id />
		<updated>2011-07-08T11:26:02Z</updated>
		<published>2011-07-08T11:26:00Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="appstore" /><category scheme="http://planetidev.bunnyhero.org" term="review" />		<summary type="html"><![CDATA[Here is an update to Apple's App Store review times.





    
]]></summary>
		<content type="html" xml:base="http://feedproxy.google.com/~r/BuildingIphoneApps/~3/k4w6k9gX3VA/app-store-review-time-trend-updated.html"><![CDATA[<p>Here is an update to Apple&#8217;s App Store review times.</p>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-dTashHjUQTs/Thbo7enayaI/AAAAAAAAE3s/PaVAkKEKPVE/s1600/Numbers.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-dTashHjUQTs/Thbo7enayaI/AAAAAAAAE3s/PaVAkKEKPVE/s1600/Numbers.png" /></a></div>
<p>
<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9100675021125735899-6575295590242141160?l=www.buildingiphoneapps.com' alt='' /></div>
<p><a href="http://feedads.g.doubleclick.net/~a/6ljx135-Z1fLfKwug_uF_9QDtGI/0/da"><img src="http://feedads.g.doubleclick.net/~a/6ljx135-Z1fLfKwug_uF_9QDtGI/0/di" border="0" ismap="true"></img></a><br/><br />
<a href="http://feedads.g.doubleclick.net/~a/6ljx135-Z1fLfKwug_uF_9QDtGI/1/da"><img src="http://feedads.g.doubleclick.net/~a/6ljx135-Z1fLfKwug_uF_9QDtGI/1/di" border="0" ismap="true"></img></a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BuildingIphoneApps?a=k4w6k9gX3VA:IWzU_ZxZPHM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BuildingIphoneApps?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BuildingIphoneApps?a=k4w6k9gX3VA:IWzU_ZxZPHM:4cEx4HpKnUU"><img src="http://feeds.feedburner.com/~ff/BuildingIphoneApps?i=k4w6k9gX3VA:IWzU_ZxZPHM:4cEx4HpKnUU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BuildingIphoneApps?a=k4w6k9gX3VA:IWzU_ZxZPHM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BuildingIphoneApps?i=k4w6k9gX3VA:IWzU_ZxZPHM:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BuildingIphoneApps?a=k4w6k9gX3VA:IWzU_ZxZPHM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BuildingIphoneApps?i=k4w6k9gX3VA:IWzU_ZxZPHM:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BuildingIphoneApps?a=k4w6k9gX3VA:IWzU_ZxZPHM:63t7Ie-LG7Y"><img src="http://feeds.feedburner.com/~ff/BuildingIphoneApps?d=63t7Ie-LG7Y" border="0"></img></a>
</div>
<p><img src="http://feeds.feedburner.com/~r/BuildingIphoneApps/~4/k4w6k9gX3VA" height="1" width="1"/></p>
]]></content>
<link href="" rel="enclosure" length="" type="" />
<source>
	<title>Building iPhone Apps</title>
	<link rel="alternate" type="text/html" href="http://www.buildingiphoneapps.com/" />
	<link rel="self" href="http://feeds2.feedburner.com/BuildingIphoneApps" />
	<id>tag:blogger.com,1999:blog-9100675021125735899</id>
	<updated>2011-07-08T07:26:02.047-04:00</updated>
</source>
		<link rel="replies" type="text/html" href="http://feedproxy.google.com/~r/BuildingIphoneApps/~3/k4w6k9gX3VA/app-store-review-time-trend-updated.html#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.buildingiphoneapps.com/feeds/6575295590242141160/comments/default" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>Mike Schramm</name>
						<uri>http://www.tuaw.com</uri>
					</author>
		<title type="html"><![CDATA[Interview: Growl&#8217;s project lead on coming to the Mac App Store]]></title>
		<link rel="alternate" type="text/html" href="http://www.tuaw.com/2011/07/08/interview-growls-project-lead-on-coming-to-the-mac-app-store/" />
		<id>http://www.tuaw.com/2011/07/08/interview-growls-project-lead-on-coming-to-the-mac-app-store/</id>
		<updated>2011-07-08T11:00:00Z</updated>
		<published>2011-07-08T11:00:00Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="apple" /><category scheme="http://planetidev.bunnyhero.org" term="christopher forsythe" /><category scheme="http://planetidev.bunnyhero.org" term="ChristopherForsythe" /><category scheme="http://planetidev.bunnyhero.org" term="features" /><category scheme="http://planetidev.bunnyhero.org" term="growl" /><category scheme="http://planetidev.bunnyhero.org" term="mac" /><category scheme="http://planetidev.bunnyhero.org" term="Mac App Store" /><category scheme="http://planetidev.bunnyhero.org" term="MacAppStore" /><category scheme="http://planetidev.bunnyhero.org" term="Notifications" /><category scheme="http://planetidev.bunnyhero.org" term="open source" /><category scheme="http://planetidev.bunnyhero.org" term="opensource" /><category scheme="http://planetidev.bunnyhero.org" term="OS X" /><category scheme="http://planetidev.bunnyhero.org" term="osx" />		<summary type="html"><![CDATA[[...]]]></summary>
		<content type="html" xml:base="http://www.tuaw.com/2011/07/08/interview-growls-project-lead-on-coming-to-the-mac-app-store/"><![CDATA[<p style="text-align:center">
	<img alt="" border="0" height="128" src="http://www.blogcdn.com//media/2011/07/growlnotifcations.jpg" width="465" /></p>
<p>
	After the news yesterday that <a href="http://growl.info/">the popular notification service Growl</a> was officially <a href="http://www.tuaw.com/2011/07/06/growl-coming-to-the-mac-app-store-as-a-full-application/">coming to the Mac App Store</a> with the release of OS X Lion, TUAW tracked down Project Lead Christopher Forsythe and had a quick conversation about the reasons behind the decision and the future of Growl in general. Forsythe says that the change to the Mac App Store has been discussed &#8220;amongst ourselves for probably about two or three months now,&#8221; and that using Apple&#8217;s official store &#8220;just makes sense.&#8221;</p>
<p>
	Perhaps the biggest piece of news we learned from Forsythe is that in the Mac App Store, for the first time since its creation seven years ago, Growl will not be free. Devs working on the project are &#8220;still talking&#8221; about the final price, but &#8220;it most likely will be a dollar or two dollars at most,&#8221; according to Forsythe. Some may turn up their noses at paying anything for the results of an open source project, but Forsythe says the reasoning behind the charge is simple: &#8220;I&#8217;m a grown adult,&#8221; he says, &#8220;and my wife wonders why I spend time working on my open source project and not with my two-month old.&#8221; For all the work Forsythe and his fellow devs have put into Growl, a few bucks seems little to ask.</p>
<p>
	Money is also involved in the other main reason the team wants to move to the Mac App Store. If nothing else, they&#8217;re offloading the issue of actual distribution to Apple. &#8220;We don&#8217;t have to worry about supporting a download infrastructure any more,&#8221; says Forsythe, &#8220;and that&#8217;s huge for us.&#8221; Currently, bandwidth for distributing Growl is all handed by <a href="http://www.cachefly.com/">CacheFly</a> pro bono, but Forsthye has seen huge charges covered by them in the past, and the one time the project switched to Google Code, Forsythe says all of Google&#8217;s bandwidth was eaten up in &#8220;a couple of hours, a very short period of time.&#8221;</p>
<p>
	Yesterday, we heard that some of the more technical Growl services would be dying off because of the switchover, but Forsythe says that&#8217;s not exactly true. While perception has it that the Mac App Store is ruling out a few Growl services, many of the changes are just so he can focus his team on what customers actually use, and not as much on edge use cases. Services like GrowlMail and GrowlSafari won&#8217;t be officially supported in the Mac App Store version, but anyone who wants to use those services will still be able to download a PKG installer from the Growl website and be off on their merry way. That&#8217;s good news for average users like myself and others. Forsythe plans to put his team working on the core Growl app, and let other developers deal with the more complicated function and addons.</p>
<p>
	As for developers of apps that hook into Growl, Forsythe says it&#8217;s pretty simple: if anyone currently uses the Growl with Installer framework (which allows third-party apps to actually install Growl if users don&#8217;t have it), they&#8217;ll have to switch over to the one standard framework the app will be using. The Growl team has had <a href="http://growl.info/thirdpartyinstallations.php">a lot of complaints from users who believe Growl is spyware</a> because a developer uses it to post less-than-helpful notifications (&#8220;It&#8217;s really annoying,&#8221; he says), so the new Growl framework won&#8217;t actually install the whole app.</p>
<p>
	The way it will work is that in the new framework, developers who want to use Growl without having it on the user&#8217;s system will get a simplified version of the notification to run, with just one style in just one place on the screen. &#8220;So if the user doesn&#8217;t have Growl installed,&#8221; says Forsythe, &#8220;they can use Smoke notification in the top corner. If the end user wants to configure that, they&#8217;ll need to install Growl.&#8221; That seems like a good balance; it allows devs to take advantage of Growl and its basic function, then send customers on to the full app if they want more features out of it.</p>
<p>
	Finally, Forsythe says that revamping the code like this is giving his team an opportunity to really focus on what they want Growl to be going forward. While the average user won&#8217;t &#8220;miss anything,&#8221; according to Forsythe, it&#8217;s true that some services will need to be worked on outside the official Growl team. &#8220;If [a service] takes up the same amount of resources it takes to put a cool feature into Growl itself, I&#8217;d rather we put the work into Growl itself.&#8221; That work means we&#8217;ll see updates to the core app, like a new feature called RollUp that will help get rid of what Forsythe calls &#8220;screen spam.&#8221; Instead of having your screen fill with a bunch of notifications, you&#8217;ll get just one note after a while that will then expand out into a log of notifications you may have missed.</p>
<p>
	That sounds great, and hopefully we&#8217;ll see more helpful features like that going forward. Growl has been a solid addition to the Mac lineup throughout its history, and it&#8217;s exciting to see the open source effort join Apple&#8217;s official store. There will undoubtedly be some growing pains, but in general, this seems like an excellent move for Growl, and it should be a nice app to add to the Mac App Store&#8217;s offerings.</p>
<p style="padding:5px;background:#ddd;border:1px solid #ccc;clear:both;"><a href="http://www.tuaw.com/2011/07/08/interview-growls-project-lead-on-coming-to-the-mac-app-store/">Interview: Growl&#8217;s project lead on coming to the Mac App Store</a> originally appeared on <a href="http://www.tuaw.com">TUAW &#8211; The Unofficial Apple Weblog</a> on Fri, 08 Jul 2011 06:00:00 EST.  Please see our <a href="http://www.weblogsinc.com/feed-terms/">terms for use of feeds</a>.</p>
<p style="padding:5px;background:#ffffcc;border:1px solid #ffff99;clear:both;"><a href="http://www.tuaw.com"><img src="http://www.tuaw.com/media/feedlogo.gif" alt="TUAW - The Unofficial Apple Weblog" style="float:left;padding:0 5px 5px 0;" /></a><a href="http://www.tuaw.com/2011/07/08/interview-growls-project-lead-on-coming-to-the-mac-app-store/">Interview: Growl&#8217;s project lead on coming to the Mac App Store</a> originally appeared on <a href="http://www.tuaw.com">TUAW &#8211; The Unofficial Apple Weblog</a> on Fri, 08 Jul 2011 06:00:00 EST.  Please see our <a href="http://www.weblogsinc.com/feed-terms/">terms for use of feeds</a>.<br style="clear:both;"></p>
<p style="clear: both; padding: 8px 0 0 0; height: 2px; font-size: 1px; border: 0; margin: 0; padding: 0;">
<p><a href=http://www.tuaw.com/2011/07/06/growl-coming-to-the-mac-app-store-as-a-full-application/>Read</a> | <a href="http://www.tuaw.com/2011/07/08/interview-growls-project-lead-on-coming-to-the-mac-app-store/" rel="bookmark" title="Permanent link to this entry">Permalink</a> | <a href="http://www.tuaw.com/forward/19986027/" title="Send this entry to a friend via email">Email this</a> | <a href="http://www.tuaw.com/2011/07/08/interview-growls-project-lead-on-coming-to-the-mac-app-store/#comments" title="View reader comments on this entry">Comments</a></p>
]]></content>
<source>
	<title>TUAW - The Unofficial Apple Weblog</title>
	<link rel="alternate" type="text/html" href="http://www.tuaw.com" />
	<link rel="self" href="http://www.tuaw.com/category/developer/rss.xml" />
	<id>http://www.tuaw.com/category/developer/rss.xml</id>
</source>
		<link rel="replies" type="text/html" href="http://www.tuaw.com/2011/07/08/interview-growls-project-lead-on-coming-to-the-mac-app-store/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://planetidev.bunnyhero.org/?feed=atom&amp;p=4141" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>John</name>
						<uri>http://www.71squared.com</uri>
					</author>
		<title type="html"><![CDATA[Open Source: UITableView Replacement With Swipeable Cells]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/maniacdev/~3/mEyEwjx4xyE/" />
		<id>http://maniacdev.com/?p=3964</id>
		<updated>2011-07-08T06:37:41Z</updated>
		<published>2011-07-08T06:37:41Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="iPhone SDK And iPad SDK" /><category scheme="http://planetidev.bunnyhero.org" term="Objective-C Programming" /><category scheme="http://planetidev.bunnyhero.org" term="Open Source iOS Libraries And Tools" />		<summary type="html"><![CDATA[Tweet You have probably noticed this in a few apps such as the Twitter app &#8211; you swipe a cell in a UITableView and it then disappears revealing new content. I&#8217;ve come across a UITableView replacement that provides this functionality complete with animation effect so you can provide the impression that the user is uncovering [...]]]></summary>
		<content type="html" xml:base="http://feedproxy.google.com/~r/maniacdev/~3/mEyEwjx4xyE/"><![CDATA[<p>  <script src="http://platform.twitter.com/widgets.js" type="text/javascript"></script></p>
<div style="float: right; margin: 0 0 6px 12px;">
    <a href="http://twitter.com/share" class="twitter-share-button"<br />
             data-url="http://maniacdev.com/2011/07/open-source-uitableview-replacement-with-swipeable-cells/"<br />
             data-via="maniacdev"<br />
             data-text="Open Source: UITableView Replacement With Swipeable Cells http://maniacdev.com/r7y (via @maniacdev)"<br />
             data-related="blairwilli:Blair Williams"<br />
             data-count="vertical">Tweet</a>
  </div>
<p>You have probably noticed this in a few apps such as the Twitter app &#8211; you swipe a cell in a UITableView and it then disappears revealing new content.</p>
<p>I&#8217;ve come across a UITableView replacement that provides this functionality complete with animation effect so you can provide the impression that the user is uncovering hidden content.  Overall it is a very cool effect, and is great for those times when you only want the cell to a lead to a small amount of content rather than navigate to an entirely different view.</p>
<p>The library is TISwipeableTableView from Tom Irving and comes with a sample project demonstrating how implement the library.  It can be found on Github here:<br />
<a href="https://github.com/thermogl/TISwipeableTableView">https://github.com/thermogl/TISwipeableTableView</a></p>
<p><a href="https://github.com/thermogl/TISwipeableTableView"></a>I can think of several places where this library would have been useful wish I&#8217;d found it earlier!</p>
<p>[via <a href="http://iphonedevelopertips.com/open-source/ios-open-source-swipe-table-cell-to-reveal-additional-content.html" >John Muchow</a>]</p>
<p>&copy;2011 <a href="http://maniacdev.com">iPhone, iOS 4, iPad SDK Development Tutorial and Programming Tips</a>. All Rights Reserved.</p>
<p>.
<div class="prli-social-buttons-bar"><a href="http://del.icio.us/post?url=http://maniacdev.com/r7y&#038;title=Open+Source:+UITableView+Replacement+With+Swipeable+Cells" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/delicious_32.png" alt="Delicious" title="Delicious" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://twitter.com/home?status=RT+@maniacdev:+Open+Source:+UITableView+Replacement+With+Swipeable+Cells+http://maniacdev.com/r7y+(via+@maniacdev)" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/twitter_32.png" alt="Twitter" title="Twitter" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://technorati.com/faves?add=http://maniacdev.com/r7y" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/technorati_32.png" alt="Technorati" title="Technorati" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://www.facebook.com/sharer.php?u=http://maniacdev.com/r7y&#038;t=Open+Source:+UITableView+Replacement+With+Swipeable+Cells" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/facebook_32.png" alt="Facebook" title="Facebook" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://www.linkedin.com/shareArticle?mini=true&#038;url=http://maniacdev.com/r7y&#038;title=Open+Source:+UITableView+Replacement+With+Swipeable+Cells" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/linkedin_32.png" alt="LinkedIn" title="LinkedIn" border="0" style="padding: 0 20px 0 0;" /></a><a href="mailto:?subject=Open%20Source:%20UITableView%20Replacement%20With%20Swipeable%20Cells&#038;body=Open%20Source:%20UITableView%20Replacement%20With%20Swipeable%20Cells%20http://maniacdev.com/r7y" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/email_32.png" alt="Email" title="Email" border="0" style="padding: 0 20px 0 0;" /></a></div>
<p><a href="http://feedads.g.doubleclick.net/~a/TeBGi2_OTqseOGVhLJ8doWAFOgk/0/da"><img src="http://feedads.g.doubleclick.net/~a/TeBGi2_OTqseOGVhLJ8doWAFOgk/0/di" border="0" ismap="true"></img></a><br/><br />
<a href="http://feedads.g.doubleclick.net/~a/TeBGi2_OTqseOGVhLJ8doWAFOgk/1/da"><img src="http://feedads.g.doubleclick.net/~a/TeBGi2_OTqseOGVhLJ8doWAFOgk/1/di" border="0" ismap="true"></img></a></p>
<p><img src="http://feeds.feedburner.com/~r/maniacdev/~4/mEyEwjx4xyE" height="1" width="1"/></p>
]]></content>
<source>
	<title>iPhone, iOS 4, iPad SDK Development Tutorial and Programming Tips</title>
	<link rel="alternate" type="text/html" href="http://maniacdev.com" />
	<link rel="self" href="http://www.maniacdev.com/feed" />
	<id>http://www.maniacdev.com/feed</id>
</source>
		<link rel="replies" type="text/html" href="http://feedproxy.google.com/~r/maniacdev/~3/mEyEwjx4xyE/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://maniacdev.com/2011/07/open-source-uitableview-replacement-with-swipeable-cells/feed/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>David Frampton</name>
						<uri>http://majicjungle.com/blog</uri>
					</author>
		<title type="html"><![CDATA[Freemium]]></title>
		<link rel="alternate" type="text/html" href="http://majicjungle.com/blog/503/" />
		<id>http://majicjungle.com/blog/?p=503</id>
		<updated>2011-07-08T01:15:00Z</updated>
		<published>2011-07-07T23:38:54Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="Uncategorized" />		<summary type="html"><![CDATA[[update - it wasn't clear, when I refer to 'freemium' I am specifically talking about the type of free to play games which are currently filling the top grossing charts. Those where the player buys packs of in game currency to speed up and improve something they are trying to grow/create.]
Eli Hodapp from TouchArcade today [...]]]></summary>
		<content type="html" xml:base="http://majicjungle.com/blog/503/"><![CDATA[<p>[update - it wasn't clear, when I refer to 'freemium' I am specifically talking about the type of free to play games which are currently filling the top grossing charts. Those where the player buys packs of in game currency to speed up and improve something they are trying to grow/create.]</p>
<p>Eli Hodapp from TouchArcade today posted an <a href="http://toucharcade.com/2011/07/07/flurry-analytics-free-to-play-revenue-overtakes-premium-revenue-in-the-app-store/">article</a> showing that Free-to-play revenue has now overtaken premium revenue on the App Store.</p>
<p>I <a href="http://twitter.com/#!/majicDave/statuses/89100227780415488">mentioned</a> on twitter that I thought this was a bit sad, but there wasn&#8217;t enough space to really say why. So I thought I&#8217;d explain.</p>
<p>Developers are noticing. Many of the developers I have talked to recently are at least planning their freemium games in their head, if they haven&#8217;t already shipped or started working on one. We&#8217;ve all seen the writing on the wall for a while now. Freemium is where the money is. At 99c a pop, premium games just can&#8217;t compete when it comes to revenue.</p>
<p>So developers are switching to making freemium games, and we&#8217;ll see more and more of them in the future. As a side effect we&#8217;ll also see less and less premium pay-up-front games.</p>
<p>The thing is, I don&#8217;t believe the majority of people actually prefer these kinds of games. As a genre they&#8217;re fine and good, and I&#8217;ve enjoyed a few of them myself. But this financial &#8216;voting&#8217; if you like, is not representative of gamers as a whole. Freemium is just so damn good at making money, that its users are over represented. And as a result, developers are switching focus away from what the majority of gamers actually want. </p>
<p>I&#8217;m sure everything will be fine, there&#8217;s only so many freemium titles that can be made before that market will be saturated and developers will start moving back to premium. Also, as Dave from NimbleBit (creators of the excellent freemium title <a href="http://toucharcade.com/2011/06/22/tiny-tower-review/">Tiny Tower</a>) <a href="http://twitter.com/NimbleDave/statuses/89101771636604928">pointed out</a>, they&#8217;re probably not actually taking away any customers from the paid games. Though freemium is an appealing and growing market, the premium game market is still doing just fine.</p>
<p>But I do feel a bit sad for all the premium games we&#8217;re missing out on as developers work on freemium titles. I&#8217;ve played enough freemium games now, but there will be a lot more to come. </p>
<p>And to be perfectly honest, I&#8217;ll probably be one of the developers responsible.</p>
<p>[UPDATE 2 - Eli has responded <a href="http://a-13.net/post/7363781259/a-messenger-pigeon-to-the-majic-jungle">here</a>.</p>
<p>I agree with what he says there. Really my use of the distinction between freemium and premium in this post is completely incorrect. Not all freemium games are of the kind that I'm talking about, and a game needn't be premium in order to avoid being of that type. However this post still stands as long as you keep in mind that I am only talking about the farming type games as I defined above (added after Eli had written his post). These are the games making the money, that developers are flocking to create.]</p>
]]></content>
<source>
	<title>Majic Jungle Blog</title>
	<link rel="alternate" type="text/html" href="http://majicjungle.com/blog" />
	<link rel="self" href="http://majicjungle.com/blog/?feed=atom" />
	<id>http://majicjungle.com/blog/feed/atom/</id>
	<updated>2011-07-08T01:15:00Z</updated>
</source>
		<link rel="replies" type="text/html" href="http://majicjungle.com/blog/503/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://majicjungle.com/blog/503/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>John</name>
						<uri>http://www.71squared.com</uri>
					</author>
		<title type="html"><![CDATA[Open Source: Rich Text-Editing View Using Core Text]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/maniacdev/~3/1F9eHFu0W7M/" />
		<id>http://maniacdev.com/?p=3961</id>
		<updated>2011-07-07T18:31:38Z</updated>
		<published>2011-07-07T18:31:38Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="iPhone SDK And iPad SDK" /><category scheme="http://planetidev.bunnyhero.org" term="Open Source iOS Libraries And Tools" />		<summary type="html"><![CDATA[Tweet Just yesterday I mentioned a tutorial on utilizing Core Text to create magazine style apps with rich text formatting and multiple columns, and I have previously mentioned the NSAttributed string additions library that was created to allow for easy display of formatted text using HTML without using a UIWebView. I&#8217;ve come across an open [...]]]></summary>
		<content type="html" xml:base="http://feedproxy.google.com/~r/maniacdev/~3/1F9eHFu0W7M/"><![CDATA[<p>  <script src="http://platform.twitter.com/widgets.js" type="text/javascript"></script></p>
<div style="float: right; margin: 0 0 6px 12px;">
    <a href="http://twitter.com/share" class="twitter-share-button"<br />
             data-url="http://maniacdev.com/2011/07/open-source-rich-text-editing-view-using-core-text/"<br />
             data-via="maniacdev"<br />
             data-text="Open Source: Rich Text-Editing View Using Core Text http://maniacdev.com/l72 (via @maniacdev)"<br />
             data-related="blairwilli:Blair Williams"<br />
             data-count="vertical">Tweet</a>
  </div>
<p>Just yesterday I mentioned a tutorial on utilizing Core Text to create magazine style apps with rich text formatting and multiple columns, and I have previously mentioned the NSAttributed string additions library that was created to allow for easy display of formatted text using HTML without using a UIWebView.</p>
<p>I&#8217;ve come across an open source project that provides a drop in UITextView replacemen that includes text formatting capabilities.  So you could potentially not only display formatted text, but create a text editor with formatted text support.</p>
<p>The library and example project can be found on Github here:<br />
<a href="https://github.com/enormego/EGOTextView" >https://github.com/enormego/EGOTextView</a></p>
<p>Looks very useful if you want to add formatted text support into an app quickly.</p>
<p>&copy;2011 <a href="http://maniacdev.com">iPhone, iOS 4, iPad SDK Development Tutorial and Programming Tips</a>. All Rights Reserved.</p>
<p>.
<div class="prli-social-buttons-bar"><a href="http://del.icio.us/post?url=http://maniacdev.com/l72&#038;title=Open+Source:+Rich+Text-Editing+View+Using+Core+Text" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/delicious_32.png" alt="Delicious" title="Delicious" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://twitter.com/home?status=RT+@maniacdev:+Open+Source:+Rich+Text-Editing+View+Using+Core+Text+http://maniacdev.com/l72+(via+@maniacdev)" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/twitter_32.png" alt="Twitter" title="Twitter" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://technorati.com/faves?add=http://maniacdev.com/l72" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/technorati_32.png" alt="Technorati" title="Technorati" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://www.facebook.com/sharer.php?u=http://maniacdev.com/l72&#038;t=Open+Source:+Rich+Text-Editing+View+Using+Core+Text" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/facebook_32.png" alt="Facebook" title="Facebook" border="0" style="padding: 0 20px 0 0;" /></a><a href="http://www.linkedin.com/shareArticle?mini=true&#038;url=http://maniacdev.com/l72&#038;title=Open+Source:+Rich+Text-Editing+View+Using+Core+Text" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/linkedin_32.png" alt="LinkedIn" title="LinkedIn" border="0" style="padding: 0 20px 0 0;" /></a><a href="mailto:?subject=Open%20Source:%20Rich%20Text-Editing%20View%20Using%20Core%20Text&#038;body=Open%20Source:%20Rich%20Text-Editing%20View%20Using%20Core%20Text%20http://maniacdev.com/l72" rel="nofollow" ><img src="https://d14715w921jdje.cloudfront.net/images/email_32.png" alt="Email" title="Email" border="0" style="padding: 0 20px 0 0;" /></a></div>
<p><a href="http://feedads.g.doubleclick.net/~a/sIO7fzNTtoKpQXnppCNaA9kfSXU/0/da"><img src="http://feedads.g.doubleclick.net/~a/sIO7fzNTtoKpQXnppCNaA9kfSXU/0/di" border="0" ismap="true"></img></a><br/><br />
<a href="http://feedads.g.doubleclick.net/~a/sIO7fzNTtoKpQXnppCNaA9kfSXU/1/da"><img src="http://feedads.g.doubleclick.net/~a/sIO7fzNTtoKpQXnppCNaA9kfSXU/1/di" border="0" ismap="true"></img></a></p>
<p><img src="http://feeds.feedburner.com/~r/maniacdev/~4/1F9eHFu0W7M" height="1" width="1"/></p>
]]></content>
<source>
	<title>iPhone, iOS 4, iPad SDK Development Tutorial and Programming Tips</title>
	<link rel="alternate" type="text/html" href="http://maniacdev.com" />
	<link rel="self" href="http://www.maniacdev.com/feed" />
	<id>http://www.maniacdev.com/feed</id>
</source>
		<link rel="replies" type="text/html" href="http://feedproxy.google.com/~r/maniacdev/~3/1F9eHFu0W7M/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://maniacdev.com/2011/07/open-source-rich-text-editing-view-using-core-text/feed/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>Jeff LaMarche</name>
						<uri>http://iphonedevelopment.blogspot.com/</uri>
					</author>
		<title type="html"><![CDATA[Happenings and Prospects]]></title>
		<link rel="alternate" type="text/html" href="http://iphonedevelopment.blogspot.com/2011/07/happenings-and-prospects.html" />
		<id />
		<updated>2011-07-07T17:08:40Z</updated>
		<published>2011-07-07T17:08:00Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="Book project" />		<summary type="html"><![CDATA[[...]]]></summary>
		<content type="html" xml:base="http://iphonedevelopment.blogspot.com/2011/07/happenings-and-prospects.html"><![CDATA[<p>I apologize for the relative dearth of posts here since WWDC. That week in San Francisco always tends to backlog me pretty badly (I returned from WWDC at inbox 1138 &#8211; and that&#8217;s after spending the return flight answering e-mails), so I&#8217;ve been pretty much heads down on work-related stuff ever since. I&#8217;ve also, at the same time, been consciously trying to back away from the 12-15 hour days, 7 days a week schedule that I&#8217;d fallen into trying to help get MartianCraft off the ground. Those two have conspired to give me very little time for writing lately, but I think things are under control now.</p>
<p>I&#8217;ve got my&nbsp;semi-mythical OpenGL ES from the Ground Up 10th installment on skeletal animation nearly finished and hope to have it posted within the next couple of weeks, and it&#8217;s bit of a doozy. My goal with this post is to make one of the more intimidating topics in graphics programming approachable. Fingers crossed, it&#8217;s been a challenge making this topic approachable, but I think I&#8217;m getting there.</p>
<p>A few other bits of news.</p>
<p>First, work has officially started on <i>Beginning iPhone 5 Development</i>. Yes, I know it probably should be called <i>Beginning iOS 5 Development</i>, but as of right now, we&#8217;re sticking with the naming sequence Apress established with the first book. Dave, Jack, and I have already started updating the book for Xcode 4, ARC, Storyboards, and all the other cool new stuff and are hoping to have the book ready to go to press when the GM version of iOS 5 ships this fall.</p>
<p>Second, I purchased a new domain today. There&#8217;s nothing there yet, but&nbsp;<a href="http://openglesbook.com/">OpenGLESBook.com</a> is now mine, and I have big plans for it. Once <i>Beginning iPhone 5 Development</i>&nbsp;is in the can, I&#8217;m going to revisit my partially written OpenGL ES 2.0 book. I plan to revise it to use GLKit and to add material about the very cool new OpenGL ES tools we&#8217;re getting with iOS 5.</p>
<p>As of right now, my plan is to self-publish. I&#8217;m still researching the exact process, tools, and services that I&#8217;ll use, but my plan is to sell the book without DRM and at a reasonable price. I&#8217;d like to have an early access program, however since a lot of the material I&#8217;ll be covering will be under NDA until iOS 5 goes GM, I can&#8217;t promise that at this time.
<div class="blogger-post-footer"><BR/><font size="2"><center>&copy;2008-2010 Jeff LaMarche. <br/><br />
http://iphonedevelopment.blogspot.com</center></font><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2947441758360063609-1146873698521217431?l=iphonedevelopment.blogspot.com' alt='' /></div>
]]></content>
<source>
	<title>iPhone Development</title>
	<link rel="alternate" type="text/html" href="http://iphonedevelopment.blogspot.com/" />
	<link rel="self" href="http://iphonedevelopment.blogspot.com/feeds/posts/default" />
	<id>tag:blogger.com,1999:blog-2947441758360063609</id>
	<updated>2011-07-15T21:21:46.221-07:00</updated>
</source>
		<link rel="replies" type="text/html" href="http://iphonedevelopment.blogspot.com/2011/07/happenings-and-prospects.html#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://planetidev.bunnyhero.org/?feed=atom&amp;p=4137" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>Capulet</name>
						<uri>http://www.phonegap.com</uri>
					</author>
		<title type="html"><![CDATA[Convertigo Mobilizer Uses PhoneGap Build APIs]]></title>
		<link rel="alternate" type="text/html" href="http://www.phonegap.com/2011/07/07/convertigo-mobilizer-uses-phonegap-build-apis/" />
		<id>http://www.phonegap.com/?p=3562</id>
		<updated>2011-07-07T16:57:53Z</updated>
		<published>2011-07-07T16:57:53Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="convertigo" /><category scheme="http://planetidev.bunnyhero.org" term="phonegap" /><category scheme="http://planetidev.bunnyhero.org" term="phonegap build" />		<summary type="html"><![CDATA[Congratulations to our friends over at Convertigo who launched Convertigo Mobilizer this week! Here&#8217;s the blog post they published today about integrating PhoneGap Build into their project: One of the exciting features [...]]]></summary>
		<content type="html" xml:base="http://www.phonegap.com/2011/07/07/convertigo-mobilizer-uses-phonegap-build-apis/"><![CDATA[<p>Congratulations to our friends over at Convertigo who launched <a href="http://www.convertigo.com/en/crm/convertigo-mobilizer.html">Convertigo Mobilizer</a> this week! Here&#8217;s the blog post they published today about integrating PhoneGap Build into their project:</p>
<p><em>One of the exciting features of Convertigo Moblizer is the ability to  build cross platform native applications on iOS, Android, and  BlackBerry. This features was made possible by integrating PhoneGap Build APIs in the <a href="http://www.convertigo.com/en/overview/overview.html">Convertigo Server</a>.</em></p>
<p><em>PhoneGap provides the ability to wrap any HTML5 based application in a  native mobile application, and to leverage all mobile features such as  sensors, camera, phonebooks etc.</em></p>
<p><em>Convertigo Mobilizer uses the cloud-based build service from PhoneGap. Any <a href="http://www.convertigo.com/en/overview/convertigo-cloud.html">Convertigo Shared Cloud</a> (free on our trial sever) user can deploy its project on the Convertigo  Server and just click a button to build instantly the 5 platforms —  iPhone3 iPhone4, iPad, Android and BlackBerry applications. Convertigo  on-premises users can also benefit from this service, they just have to  sign up an account on PhoneGap Build and to configure Convertigo to use  this account.</em></p>
<p><em>With the combination of Convertigo and PhoneGap, developers can now  benefit a true mobile cross-platform  technology to build enterprise  mobile applications connected to the back-office business applications.</em></p>
]]></content>
<source>
	<title>PhoneGap</title>
	<link rel="alternate" type="text/html" href="http://www.phonegap.com" />
	<link rel="self" href="http://phonegap.com/feed" />
	<id>http://phonegap.com/feed</id>
</source>
		<link rel="replies" type="text/html" href="http://www.phonegap.com/2011/07/07/convertigo-mobilizer-uses-phonegap-build-apis/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.phonegap.com/2011/07/07/convertigo-mobilizer-uses-phonegap-build-apis/feed/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>Torsten Weindl</name>
						<uri>http://mobileorchard.com</uri>
					</author>
		<title type="html"><![CDATA[Have your App Development funded by the Crowd – or invest in an App yourself]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MobileOrchard/~3/CfAyfU0XNxY/" />
		<id>http://mobileorchard.com/?p=7844</id>
		<updated>2011-07-07T15:00:44Z</updated>
		<published>2011-07-07T15:00:44Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="Android App Development" /><category scheme="http://planetidev.bunnyhero.org" term="app" /><category scheme="http://planetidev.bunnyhero.org" term="app store" /><category scheme="http://planetidev.bunnyhero.org" term="Apps" /><category scheme="http://planetidev.bunnyhero.org" term="crowdfunding" /><category scheme="http://planetidev.bunnyhero.org" term="How to make an iPhone App" /><category scheme="http://planetidev.bunnyhero.org" term="how to make iphone apps" /><category scheme="http://planetidev.bunnyhero.org" term="iOS Dev" /><category scheme="http://planetidev.bunnyhero.org" term="ios development" /><category scheme="http://planetidev.bunnyhero.org" term="iOS vs Android app development" /><category scheme="http://planetidev.bunnyhero.org" term="iPad" /><category scheme="http://planetidev.bunnyhero.org" term="ipad development" /><category scheme="http://planetidev.bunnyhero.org" term="iPhone" /><category scheme="http://planetidev.bunnyhero.org" term="iPhone Apps" /><category scheme="http://planetidev.bunnyhero.org" term="iPhone Development" /><category scheme="http://planetidev.bunnyhero.org" term="mobile development" /><category scheme="http://planetidev.bunnyhero.org" term="News" /><category scheme="http://planetidev.bunnyhero.org" term="Resources" />		<summary type="html"><![CDATA[There may be a thousand great ideas in your mind that you would like to convert into an app – you’ll find it difficult to keep your spirit up after realizing that the development will cost a lot more money than you are able to bring in. So what to do? Reaching out for investors [...]]]></summary>
		<content type="html" xml:base="http://feedproxy.google.com/~r/MobileOrchard/~3/CfAyfU0XNxY/"><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http://mobileorchard.com/have-your-app-development-funded-by-the-crowd-%25e2%2580%2593-or-invest-in-an-app-yourself/"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http://mobileorchard.com/have-your-app-development-funded-by-the-crowd-%25e2%2580%2593-or-invest-in-an-app-yourself/&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>There may be a thousand great ideas in your mind that you would like to convert into an app – you’ll find it difficult to keep your spirit up after realizing that the development will cost a lot more money than you are able to bring in.</p>
<p><strong>So what to do?</strong></p>
<p>Reaching out for investors and trying to persuade them of your app idea? You could do that, but I assume you actually would rather prefer to concentrate on the product instead of running after the money. Wouldn’t it be more convenient to show your idea to the crowd and let literally anyone who likes your app concept put little and medium amounts of money in it? That’s what appbackr, the wholesale marketplace for app developers, has been made for.</p>
<p><strong>The crowd wants to be part of it</strong></p>
<p>The idea of crowdfunding in general hasn’t been invented by appbackr, of course – rather does every share market function on the concept of many people acquiring portions of something by their investments. However crowdfunding hasn’t been very common so far when it comes to more every day things which haven’t to do with the business world in a narrower sense. That’s what Kickstarter’s mission was when it was founded in 2009: offering people a place where they could raise funds from the crowd for any of their products in the fields of art, design, games, music and writing.</p>
<p><strong>Apps need backrs</strong></p>
<p>While Kickstarter covers a wide range of topics, appbackr is completely focusing on the mobile app market. Here’s how it works for you…</p>
<p><strong>… being a developer:</strong></p>
<ol>
<li><strong>Submit</strong> your app concept to appbackr, providing them with some basic information like screenshots / mock-ups and what the app will be about.</li>
<li>Above that you’ll have to <strong>define</strong> how much money has to be raised at least to fund the app development. It’s done within minutes.</li>
<li>As soon the submittal has been approved by appbackr, it goes <strong>live</strong> in appbackr’s marketplace section.</li>
<li>From now on any person who likes the idea of your app can <strong>buy</strong> a convenient number of copies at a wholesale price (persons who do this are called “backrs” what explains appbackr’s company name).</li>
<li>Depending on the amount of wholesale copies they’ve purchased backrs get the revenue of the corresponding amount of sales when the app is published and <strong>sells</strong>.</li>
<li>As soon as all backrs have got their return according to their number of wholesale copies purchased, all sales taking place afterwards are completely <strong>yours</strong> – until the end of time.</li>
</ol>
<p><strong>… being anyone who likes apps and wants to participate in their success:<a rel="attachment wp-att-7848" href="http://mobileorchard.com/have-your-app-development-funded-by-the-crowd-%E2%80%93-or-invest-in-an-app-yourself/appbackr_lsatmax/"><img class="alignright size-medium wp-image-7848" src="http://mobileorchard.com/wp-content/uploads/2011/07/appbackr_lsatmax-276x300.jpg" alt="LSATmax at appbackr" width="276" height="300" /></a></strong></p>
<ol>
<li>Visit the appbackr marketplace to <strong>look</strong> for apps that are worth being funded.</li>
<li>On the app detail pages you’ll find all relevant questions <strong>answer</strong>ed: How much funding does this app need? What’s the minimum amount of money I have to spend? Who else is backing that app? And, probably most important: What will be my return on investment?</li>
<li>If you find the app worth being funded, you just <strong>buy</strong> your wholesale copies by PayPal. As long as the app’s reserve goal hasn’t been achieved, you won’t be charged.</li>
<li>You’ll <strong>receive </strong>your return when the app goes live and sells. Backrs are either in a queue one after another (based on which one purchased copies first, second, etc.), or they get paid simultaneously based on the percentage of their copies.</li>
</ol>
<p>Well, that’s pretty much it! Got curious? We appreciate your thoughts on appbackr – just leave your comment here, visit us on <a title="appbackr - Wholesale marketplace for developers to have their app funded by the crowd" href="http://www.appbackr.com?utm_source=mobileorchard_com&amp;utm_medium=click&amp;utm_campaign=link-to-appbackr-homepage">appbackr.com</a>, <a title="appbackr on Twitter" href="http://appbac.kr/ntKWZD">follow us on @appbackr</a> oder <a title="appbackr on Facebook" href="http://appbac.kr/rdnocz">like us on Facebook</a>!</p>
<p><em>Torsten Weindl markets <a title="appbackr - Wholesale marketplace for developers to have their app funded by the crowd" href="http://www.appbackr.com/?utm_source=mobileorchard_com&amp;utm_medium=click&amp;utm_campaign=link-to-appbackr-homepage">appbackr</a>, a wholesale marketplace for app developers as well as for anyone who likes to fund an app and participate in its success. Before appbackr Torsten’s been running his own affiliate business in Germany since 2003 and worked as an Online Sales &amp; Content Manager for Amazon.de.</em></p>
<p><img src="http://feeds.feedburner.com/~r/MobileOrchard/~4/CfAyfU0XNxY" height="1" width="1"/></p>
]]></content>
<source>
	<title>Mobile Orchard</title>
	<link rel="alternate" type="text/html" href="http://mobileorchard.com" />
	<link rel="self" href="http://feeds.feedburner.com/MobileOrchard" />
	<id>http://feeds.feedburner.com/MobileOrchard</id>
</source>
		<link rel="replies" type="text/html" href="http://feedproxy.google.com/~r/MobileOrchard/~3/CfAyfU0XNxY/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://mobileorchard.com/have-your-app-development-funded-by-the-crowd-%e2%80%93-or-invest-in-an-app-yourself/feed/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>Jeff LaMarche</name>
						<uri>http://iphonedevelopment.blogspot.com/</uri>
					</author>
		<title type="html"><![CDATA[Update on UpdateConf]]></title>
		<link rel="alternate" type="text/html" href="http://iphonedevelopment.blogspot.com/2011/07/update-on-updateconf.html" />
		<id />
		<updated>2011-07-07T12:52:28Z</updated>
		<published>2011-07-07T12:51:00Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="conferences" /><category scheme="http://planetidev.bunnyhero.org" term="opengl es" />		<summary type="html"><![CDATA[[...]]]></summary>
		<content type="html" xml:base="http://iphonedevelopment.blogspot.com/2011/07/update-on-updateconf.html"><![CDATA[<p>Just wanted to let you know that I&#8217;m speaking at another conference. I&#8217;ll be speaking at the inaugural <a href="http://updateconf.com/">UpdateConf</a> in <a href="http://en.wikipedia.org/wiki/Brighton">Brighton</a>, UK on September 5th.</p>
<p>As part of the conference, I&#8217;m also giving a two-day intensive workshop on OpenGL ES. The workshop assumes no prior experience with graphics program, but will be fairly fast-paced and will cover a lot of ground because there&#8217;s a lot of new ground to cover. I&#8217;ll be going over the new GLKit and the incredible new OpenGL debugger as well as the updated OpenGL ES Instruments templates.</p>
<p>&nbsp;Not interested in OpenGL ES? There are four other two-day workshops going on with some really awesome instructors. <a href="http://twitter.com/#!/mzarra/">Marcus Zarra</a> is doing a two-day workshop on Core Data, <a href="http://twitter.com/#!/drewmccormack/">Drew McCormack</a> is doing a workshop on Core Animation, <a href="http://twitter.com/#!/sazzy/">Sarah Parmenter</a> is doing one on iOS UI design, and <a href="http://twitter.com/#!/rem">Remy Sharp</a> is doing one on HTML5 for mobile. The worst thing about giving this workshop is that doing so will prevent me from going to one of the other great workshops.</p>
<p>The conference proper has a number of speakers, including the workshop instructors and it&#8217;s really shaping up to to be quite a conference, and also quite a steal at £99 for early bird tickets to the conference (the workshops are extra). You can sign up for the conference <a href="http://www.eventbrite.com/event/1423476657">on EventBrite</a>.</p>
<p>&nbsp;Hope to see you there!
<div class="blogger-post-footer"><BR/><font size="2"><center>&copy;2008-2010 Jeff LaMarche. <br/><br />
http://iphonedevelopment.blogspot.com</center></font><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2947441758360063609-6939132122090505432?l=iphonedevelopment.blogspot.com' alt='' /></div>
]]></content>
<source>
	<title>iPhone Development</title>
	<link rel="alternate" type="text/html" href="http://iphonedevelopment.blogspot.com/" />
	<link rel="self" href="http://iphonedevelopment.blogspot.com/feeds/posts/default" />
	<id>tag:blogger.com,1999:blog-2947441758360063609</id>
	<updated>2011-07-15T21:21:46.221-07:00</updated>
</source>
		<link rel="replies" type="text/html" href="http://iphonedevelopment.blogspot.com/2011/07/update-on-updateconf.html#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://planetidev.bunnyhero.org/?feed=atom&amp;p=4134" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>John Muchow</name>
						<uri>http://iPhoneDeveloperTips.com</uri>
					</author>
		<title type="html"><![CDATA[Update: Iconkit Giveaway #1 – Win a Set of 450 iOS Icons – Winner Announced]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/IphoneDeveloperTips/~3/VWs5XeNW64A/iconkit-giveaway-1-register-to-win-a-set-of-450-ios-icons.html" />
		<id>http://iPhoneDeveloperTips.com/?p=8884</id>
		<updated>2011-07-07T12:01:54Z</updated>
		<published>2011-07-07T12:01:54Z</published>
		<category scheme="http://planetidev.bunnyhero.org" term="Giveaway" />		<summary type="html"><![CDATA[Editor&#8217;s Note: The contest is now closed.  The winner in the Iconk.it giveaway is Paul F! Thanks to everyone who entered the drawing. We will giveaway another two copies of iconk.it in two weeks, so please check back. Iconk.it and iOS Developer Tips are giving away a free copy of the Iconk.it icon set, which [...]]]></summary>
		<content type="html" xml:base="http://feedproxy.google.com/~r/IphoneDeveloperTips/~3/VWs5XeNW64A/iconkit-giveaway-1-register-to-win-a-set-of-450-ios-icons.html"><![CDATA[<p><br/><em><strong>Editor&#8217;s Note:</strong> The contest is now closed. </em></p>
<p><span style="color: #993300;">The winner in the Iconk.it giveaway is Paul F! Thanks to everyone who entered the drawing. We will giveaway another two copies of iconk.it in two weeks, so please check back.</span></p>
<p><img class="alignleft" style="margin: 3px;" src="http://iphonedevelopertips.com/wp-content/uploads/2011/07/iconkit.png" alt="" width="200" height="94" /> <a title="IconKit" href="http://iconk.it/">Iconk.it</a> and iOS Developer Tips are giving away a free copy of the Iconk.it icon set, which includes 450 icons, all optimized for iOS! This is the first of 3 giveaways over the coming weeks, so stay tuned! The drawing and announcement of the winner for this first giveaway will be Friday, July 8th, 2011.</p>
<p><strong>To register for the drawing:</strong></p>
<p><strong>1)</strong> For one entry in the drawing, post a comment below.</p>
<p><strong>2)</strong> For a second entry in the drawing:</p>
<p><strong>Option 1:</strong> Like the <a href="https://www.facebook.com/iOSDeveloperTips" >iOS Developer Tips Facebook</a> page. If you have already &#8220;Liked&#8221; the IOS Dev Tips Facebook page, share information about the giveaway on your Facebook page with a link to this post. In either case, post a comment below with a link to your Facebook page.</p>
<p><strong>Option 2:</strong> Post a link to this giveaway on Twitter and post a comment below with a link to your Twitter account.</p>
<p>We will use Random.org to draw a random number and post the winner&#8217;s name at the top of this post.</p>
<p>Good luck!</p>
<div id="fb-root"></div>
<p><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><!-- Do not remove -->
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/IphoneDeveloperTips?a=VWs5XeNW64A:Cn4XxafyRsA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/IphoneDeveloperTips?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/IphoneDeveloperTips?a=VWs5XeNW64A:Cn4XxafyRsA:UwWJ6YsNOak"><img src="http://feeds.feedburner.com/~ff/IphoneDeveloperTips?i=VWs5XeNW64A:Cn4XxafyRsA:UwWJ6YsNOak" border="0"></img></a>
</div>
<p><img src="http://feeds.feedburner.com/~r/IphoneDeveloperTips/~4/VWs5XeNW64A" height="1" width="1"/></p>
]]></content>
<source>
	<title>[iOS dev:tips];</title>
	<link rel="alternate" type="text/html" href="http://iPhoneDeveloperTips.com" />
	<link rel="self" href="http://feeds.feedburner.com/IphoneDeveloperTips" />
	<id>http://feeds.feedburner.com/IphoneDeveloperTips</id>
</source>
		<link rel="replies" type="text/html" href="http://feedproxy.google.com/~r/IphoneDeveloperTips/~3/VWs5XeNW64A/iconkit-giveaway-1-register-to-win-a-set-of-450-ios-icons.html#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://iPhoneDeveloperTips.com/giveaway/iconkit-giveaway-1-register-to-win-a-set-of-450-ios-icons.html/feed" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
	</feed>

