<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Nick Kuh - Freelance iPhone, iPad, iOS Developer and Consultant - Brighton, UK</title>
	
	<link>http://www.nickkuh.com</link>
	<description>Nick Kuh is a Freelance iPhone, iPad, iOS Developer and Consultant based in Brighton, UK</description>
	<lastBuildDate>Wed, 20 Mar 2013 10:19:08 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/NickKuh-FlexDeveloper-IdeasAndRants" /><feedburner:info uri="nickkuh-flexdeveloper-ideasandrants" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:browserFriendly></feedburner:browserFriendly><item>
		<title>Poker Royale Game for iPhone and iPad</title>
		<link>http://www.nickkuh.com/iphone/poker-royale-gamefor-iphone-and-ipad/2013/03/</link>
		<comments>http://www.nickkuh.com/iphone/poker-royale-gamefor-iphone-and-ipad/2013/03/#comments</comments>
		<pubDate>Fri, 15 Mar 2013 11:38:46 +0000</pubDate>
		<dc:creator>Nick Kuh</dc:creator>
				<category><![CDATA[Apps]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Portfolio]]></category>

		<guid isPermaLink="false">http://www.nickkuh.com/?p=1508</guid>
		<description><![CDATA[A FREE, stylish and easy-to-play Texas Hold'em multiplayer game for iPhone, iPad and iPod Touch]]></description>
				<content:encoded><![CDATA[<p><strong>Introducing Poker Royale</strong></p>
<p><a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=593845657&amp;mt=8" target="_blank">Poker Royale</a> is a FREE, stylish and easy-to-play Texas Hold&#8217;em multiplayer game for iPhone, iPad and iPod Touch. Challenge Game Center and Facebook friends to join you and climb your way up through the high stakes tables to win millions of virtual poker chips!</p>
<p><a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=593845657&amp;mt=8"><img class="alignleft" title="Poker Royale for iPad and iPhone Logo" alt="" src="http://www.nickkuh.com/wp-content/uploads/2013/03/poker-royale-ipad-icon.png" width="144" height="144" /></a>Poker Royale is an app that I created with 2 other developers &#8211; <a href="https://twitter.com/coderholic">Ben Dowling</a> and <a href="https://twitter.com/xmr">Mike Ross</a>. It&#8217;s a project that&#8217;s been in development for about six months but we are finally <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=593845657&amp;mt=8">live in the App Store</a> and going strong! </p>
<p>Building a multiplayer game that can host thousands of simultaneous real users playing against each other anywhere in the world on their iPhones and iPads is no easy task! We&#8217;ve built something that really stands out from the competition and our users seem to be loving the results. </p>
<p>I jumped at the chance to be involved in developing a Poker app as for me this kind of project is a real mix of business and pleasure <img src='http://www.nickkuh.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  I play a weekly poker game with friends and have been known to dabble online occasionally. As well as being a game of skill, probability and maths, poker can be a great sociable game. We&#8217;ve worked hard to ensure it&#8217;s really easy to play and invite your friends to tables in the game and developed a fun chat experience so that you can banter with players around the poker table. It&#8217;s kind of funny when you find yourself chatting to a Russian or Japanese player though &#8211; thankfully, Poker&#8217;s a global language!</p>
<p>Check out the promo video we made for the app:</p>
<p><iframe src="http://player.vimeo.com/video/60672322?title=0&amp;byline=0&amp;portrait=0&amp;badge=0" height="338" width="600" frameborder="0"></iframe></p>
<p><strong>What Makes us Unique?</strong></p>
<p><b>♦ Have You Made The Rich List?</b><br />
Poker Royale features the most successful poker players and friends in <i>The Rich List</i> – a chart of the top 100 highest rollers in the game based on real-time chip counts.<b></b></p>
<p><b>♥ Social</b><br />
Poker Royale leverages Facebook and Game Center social networks to instantly connect players with their friends and family by inviting friends to join virtual poker tables. Find your online friends, join their tables, send them challenges, chat messages and compare scores.</p>
<p><b>♣ Multi-table</b><br />
Poker Royale is the only iOS Poker game to enable players to compete on more than one table simultaneously. Win more hands on up to 4 tables at once!</p>
<p><b>♠ Chip Rewards</b><br />
Win free chips for inviting friends and playing regularly.</p>
<p><strong>What Players Say&#8230;</strong></p>
<p>Here are a few of the five star reviews we&#8217;ve been getting on a daily basis:</p>
<p><em>This brings back the enjoyment I got from iOS Poker before the AppStore got saturated with clones…</em></p>
<p><em>If you want a higher brow alternative to the popular but annoyingly slutty Zynga poker, this is a great option!</em></p>
<p><em>Amazing setup with multiple tables that each have their own blind value and buy in amount from 1/2 all the way to 500M/1B</em></p>
<p><em>Wonderfully smooth easy to use game</em></p>
<p><em>Works really well, clearly lots of thought has been put into this, really slick design, fast animations, and speedy between games! And looks amazing on iPad! Great job.</em></p>
<p><em>The best poker app I&#8217;ve found with great graphics and so easy to use. I&#8217;m addicted!</em></p>
<p>If you love poker you&#8217;re gonna love Poker Royale. Download it for free from the App Store and don&#8217;t forget to tell your friends!</p>
<p><a title="Poker Royale Game for iPhone and iPad" href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=593845657&amp;mt=8" target="_blank"><img style="border: 0pt none; margin: 0px;" alt="" src="http://www.nickkuh.com/wp-includes/images/appstoreBadge.png" width="173" height="65" /></a></p>
<ul class="socialwrap size32 row">
<li class="iconOnly"><a rel="nofollow" target="_blank" class="delicious" href="http://delicious.com/post?url=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Fpoker-royale-gamefor-iphone-and-ipad%2F2013%2F03%2F&amp;title=Poker+Royale+Game+for+iPhone+and+iPad" title="Bookmark this post : Poker Royale Game for iPhone and iPad on Delicious"><span class="head">Bookmark on Delicious</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="digg" href="http://digg.com/submit?url=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Fpoker-royale-gamefor-iphone-and-ipad%2F2013%2F03%2F&amp;title=Poker+Royale+Game+for+iPhone+and+iPad&amp;bodytext=Introducing+Poker+Royale%0D%0A%0D%0APoker+Royale%C2%A0is+a+FREE%2C+stylish+and+easy-to-play+Texas+Hold%27em+multiplayer+game+for+iPhone%2C+iPad+and+iPod+Touch.+Challenge+Game+Center+and+Facebook+friends+to+join+you+and+climb+your+way+up+through+the+high+stakes+tables+to+win+millions+of+virtual+poker+chips%21%0D%0A%0D%0APoker+Royale+is+an+app+that" title="Digg this post : Poker Royale Game for iPhone and iPad"><span class="head">Digg this post</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="facebook" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Fpoker-royale-gamefor-iphone-and-ipad%2F2013%2F03%2F&amp;t=Poker+Royale+Game+for+iPhone+and+iPad" title="Recommend this post : Poker Royale Game for iPhone and iPad on Facebook"><span class="head">Recommend on Facebook</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="reddit" href="http://www.reddit.com/submit?url=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Fpoker-royale-gamefor-iphone-and-ipad%2F2013%2F03%2F&amp;title=Poker+Royale+Game+for+iPhone+and+iPad" title="Share this post : Poker Royale Game for iPhone and iPad on Reddit"><span class="head">share via Reddit</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="stumble" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Fpoker-royale-gamefor-iphone-and-ipad%2F2013%2F03%2F&amp;title=Poker+Royale+Game+for+iPhone+and+iPad" title="Share this post : Poker Royale Game for iPhone and iPad with Stumblers"><span class="head">Share with Stumblers</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="twitter" href="http://twitter.com/home/?status=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Fpoker-royale-gamefor-iphone-and-ipad%2F2013%2F03%2F" title="Tweet this post : Poker Royale Game for iPhone and iPad on Twitter"><span class="head">Tweet about it</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="" class="rss" href="http://www.nickkuh.com/iphone/poker-royale-gamefor-iphone-and-ipad/2013/03/feed" title="Follow this post : Poker Royale Game for iPhone and iPad comments"><span class="head">Subscribe to the comments on this post</span></a></li>
</ul>
<div class="clean"></div>
]]></content:encoded>
			<wfw:commentRss>http://www.nickkuh.com/iphone/poker-royale-gamefor-iphone-and-ipad/2013/03/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Book Update: Facebook Chapter</title>
		<link>http://www.nickkuh.com/iphone/book-update-facebook-chapter/2012/12/</link>
		<comments>http://www.nickkuh.com/iphone/book-update-facebook-chapter/2012/12/#comments</comments>
		<pubDate>Wed, 05 Dec 2012 11:18:36 +0000</pubDate>
		<dc:creator>Nick Kuh</dc:creator>
				<category><![CDATA[Book]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.nickkuh.com/?p=1492</guid>
		<description><![CDATA[A few weeks ago, my new book was published by Apress &#8211; Foundation iPhone App Development: Build An iPhone App in 5 Days with iOS 6 SDK  It&#8217;s been wonderful hearing from readers and receiving great feedback. It&#8217;s my first book and it took about 8 months to write alongside the day job so not [...]]]></description>
				<content:encoded><![CDATA[<p>A few weeks ago, my new book was published by <a href="http://www.apress.com">Apress</a> &#8211; <em><a href="http://www.amazon.com/Foundation-iPhone-App-Development-Build/dp/1430243740/">Foundation iPhone App Development: Build An iPhone App in 5 Days with iOS 6 SDK</a> </em></p>
<p>It&#8217;s been wonderful hearing from readers and receiving great feedback. It&#8217;s my first book and it took about 8 months to write alongside the day job so not an insubstantial project for me!</p>
<p><em>Build an iPhone App in 5 Days</em> covers a very broad range of iOS topics such as Storyboarding, Skinning, Core Data and interacting with the iOS Address Book and Facebook.</p>
<p>Since going to print Facebook have made a couple of tweaks to the way native iOS Apps can integrate with the Facebook Graph API using the new iOS 6 Social Framework. As such some of their changes have broken the Facebook integration code found in Chapter 11 of my book. But fear not, I have a fix &#8211; the main reason I&#8217;m writing this blog post.</p>
<p>The original source code for my book can be <a href="http://www.apress.com/9781430243748">downloaded directly from my book&#8217;s page on the Apress website</a>.</p>
<p>But you&#8217;ll want to replace Chapter 11 source code with the new source code for this chapter that you can <a href="http://www.nickkuh.com/books/5days/source/Chapter%2011.zip">download here</a>.</p>
<p>Within the new source code the only file that I&#8217;ve updated is in the <em>Completed Code</em> project folder &#8211; BRDModel.m &#8211; and I&#8217;ve highlighted my tweaks and changes in the file adding <em>NEWCODE</em> in the comments.</p>
<p><strong>The Issue</strong></p>
<p>If you&#8217;ve run into the follow printed error from Facebook servers when working with the original Chapter 11 source code then this blog post should get you back on track:</p>
<blockquote><p>{NSLocalizedDescription=The Facebook server could not fulfill this access request: The app must ask for a basic read permission at install time.}</p></blockquote>
<p>Facebook now require iOS apps to first request the minimal read permission before requesting extended permissions like friends_birthday and publish_stream. This means that apps using Apple&#8217;s Social Framework to interact with Facebook will need to fire multiple account store access requests rather than just one. This is annoying to program but does make sense IMHO. ie we can&#8217;t just ask for an endless list of permissions when our users first authenticate, signing their privacy away to our evil plans <img src='http://www.nickkuh.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><strong>The Fix</strong></p>
<p>So here&#8217;s how to do it. We should only start requesting Facebook access permissions from our users when and if they actually try to use a Facebook feature of our app. So the Facebook authentication process will still be lazily called when an if it&#8217;s required in Birthday Reminder.</p>
<p>The main change to the source code is in the authenticateWithFacebook method. What we do is call this method twice: once to request get the minimal Facebook permissions, and when granted we call loop back into the authenticateWithFacebook method and this time ask for the required extended permission. Here&#8217;s the full updated method:</p>
<div class="codecolorer-container objc default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>authenticateWithFacebook <span style="color: #002200;">&#123;</span><br />
<br />
<span style="color: #11740a; font-style: italic;">//Centralized iOS user Twitter, Facebook and Sina Weibo accounts are accessed by apps via the ACAccountStore</span><br />
<br />
ACAccountStore <span style="color: #002200;">*</span>accountStore <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>ACAccountStore alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;<br />
<br />
ACAccountType <span style="color: #002200;">*</span>accountTypeFacebook <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>accountStore accountTypeWithAccountTypeIdentifier<span style="color: #002200;">:</span>ACAccountTypeIdentifierFacebook<span style="color: #002200;">&#93;</span>;<br />
<br />
<span style="color: #11740a; font-style: italic;">//NEW CODE start</span><br />
<br />
<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/"><span style="color: #400080;">NSArray</span></a> <span style="color: #002200;">*</span>permissions;<br />
<br />
<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span>facebookAudience <span style="color: #002200;">=</span> ACFacebookAudienceFriends;<br />
<br />
<span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>self.facebookAccount <span style="color: #002200;">==</span> <span style="color: #a61390;">nil</span><span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span><br />
<br />
<span style="color: #11740a; font-style: italic;">//we need to deal with very basic authenication first</span><br />
<br />
permissions <span style="color: #002200;">=</span> @<span style="color: #002200;">&#91;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;email&quot;</span><span style="color: #002200;">&#93;</span>;<br />
<br />
facebookAudience <span style="color: #002200;">=</span> ACFacebookAudienceOnlyMe;<br />
<br />
<span style="color: #002200;">&#125;</span><br />
<br />
<span style="color: #a61390;">else</span> <span style="color: #002200;">&#123;</span><br />
<br />
<span style="color: #a61390;">switch</span> <span style="color: #002200;">&#40;</span>self.currentFacebookAction<span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span><br />
<br />
<span style="color: #a61390;">case</span> FacebookActionGetFriendsBirthdays<span style="color: #002200;">:</span><br />
<br />
permissions <span style="color: #002200;">=</span> @<span style="color: #002200;">&#91;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;friends_birthday&quot;</span><span style="color: #002200;">&#93;</span>;<br />
<br />
<span style="color: #a61390;">break</span>;<br />
<br />
<span style="color: #a61390;">case</span> FacebookActionPostToWall<span style="color: #002200;">:</span><br />
<br />
permissions <span style="color: #002200;">=</span> @<span style="color: #002200;">&#91;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;publish_stream&quot;</span><span style="color: #002200;">&#93;</span>;<br />
<br />
<span style="color: #a61390;">break</span>;<br />
<br />
<span style="color: #a61390;">default</span><span style="color: #002200;">:</span><br />
<br />
<span style="color: #a61390;">return</span>;<br />
<br />
<span style="color: #002200;">&#125;</span><br />
<br />
<span style="color: #002200;">&#125;</span><br />
<br />
<span style="color: #11740a; font-style: italic;">//Replace with your Facebook.com app ID</span><br />
<br />
<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>options <span style="color: #002200;">=</span> @<span style="color: #002200;">&#123;</span>ACFacebookAppIdKey<span style="color: #002200;">:</span> <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;125381334264255&quot;</span>,<br />
<br />
ACFacebookPermissionsKey<span style="color: #002200;">:</span> permissions,ACFacebookAudienceKey<span style="color: #002200;">:</span>facebookAudience<span style="color: #002200;">&#125;</span>;<br />
<br />
<span style="color: #11740a; font-style: italic;">//NEW CODE end</span><br />
<br />
<span style="color: #11740a; font-style: italic;">/* OLD CODE<br />
<br />
//Replace with your Facebook.com app ID<br />
<br />
NSDictionary *options = @{ACFacebookAppIdKey: @&quot;125381334264255&quot;,<br />
<br />
ACFacebookPermissionsKey: @[@&quot;publish_stream&quot;,@&quot;friends_birthday&quot;],ACFacebookAudienceKey:ACFacebookAudienceFriends};<br />
<br />
*/</span><br />
<br />
<span style="color: #002200;">&#91;</span>accountStore requestAccessToAccountsWithType<span style="color: #002200;">:</span>accountTypeFacebook options<span style="color: #002200;">:</span>options completion<span style="color: #002200;">:^</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">BOOL</span> granted, <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;">&#41;</span> <span style="color: #002200;">&#123;</span><br />
<br />
<span style="color: #a61390;">if</span><span style="color: #002200;">&#40;</span>granted<span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span><br />
<br />
<span style="color: #11740a; font-style: italic;">//The completition handler may not fire in the main thread and as we are going to</span><br />
<br />
NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Facebook Authorized!&quot;</span><span style="color: #002200;">&#41;</span>;<br />
<br />
<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/"><span style="color: #400080;">NSArray</span></a> <span style="color: #002200;">*</span>accounts <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>accountStore accountsWithAccountType<span style="color: #002200;">:</span>accountTypeFacebook<span style="color: #002200;">&#93;</span>;<br />
<br />
<span style="color: #11740a; font-style: italic;">//NEW CODE start</span><br />
<br />
<span style="color: #11740a; font-style: italic;">//now repeat the authenticateWithFacebook call and get the next required permission</span><br />
<br />
<span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>self.facebookAccount <span style="color: #002200;">==</span> <span style="color: #a61390;">nil</span><span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span><br />
<br />
self.facebookAccount <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>accounts lastObject<span style="color: #002200;">&#93;</span>;<br />
<br />
<span style="color: #002200;">&#91;</span>self authenticateWithFacebook<span style="color: #002200;">&#93;</span>;<br />
<br />
<span style="color: #a61390;">return</span>;<br />
<br />
<span style="color: #002200;">&#125;</span><br />
<br />
<span style="color: #11740a; font-style: italic;">//we store the facebookAccount property again as this code may be called in a a different thread</span><br />
<br />
self.facebookAccount <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>accounts lastObject<span style="color: #002200;">&#93;</span>;<br />
<br />
<span style="color: #11740a; font-style: italic;">//NEW CODE end</span><br />
<br />
<span style="color: #11740a; font-style: italic;">//By checking what Facebook action the user was trying to perform before the authorization process we can complete the Facebook action when the authorization succeeds</span><br />
<br />
<span style="color: #a61390;">switch</span> <span style="color: #002200;">&#40;</span>self.currentFacebookAction<span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span><br />
<br />
<span style="color: #a61390;">case</span> FacebookActionGetFriendsBirthdays<span style="color: #002200;">:</span><br />
<br />
<span style="color: #002200;">&#91;</span>self fetchFacebookBirthdays<span style="color: #002200;">&#93;</span>;<br />
<br />
<span style="color: #a61390;">break</span>;<br />
<br />
<span style="color: #a61390;">case</span> FacebookActionPostToWall<span style="color: #002200;">:</span><br />
<br />
<span style="color: #002200;">&#91;</span>self postToFacebookWall<span style="color: #002200;">:</span>self.postToFacebookMessage withFacebookID<span style="color: #002200;">:</span>self.postToFacebookID<span style="color: #002200;">&#93;</span>;<br />
<br />
<span style="color: #a61390;">break</span>;<br />
<br />
<span style="color: #002200;">&#125;</span><br />
<br />
<span style="color: #002200;">&#125;</span> <span style="color: #a61390;">else</span> <span style="color: #002200;">&#123;</span><br />
<br />
<span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span><span style="color: #002200;">&#91;</span>error code<span style="color: #002200;">&#93;</span> <span style="color: #002200;">==</span> ACErrorAccountNotFound<span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span><br />
<br />
NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;No Facebook Account Found&quot;</span><span style="color: #002200;">&#41;</span>;<br />
<br />
<span style="color: #002200;">&#125;</span><br />
<br />
<span style="color: #a61390;">else</span> <span style="color: #002200;">&#123;</span><br />
<br />
NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Facebook SSO Authentication Failed: %@&quot;</span>,error<span style="color: #002200;">&#41;</span>;<br />
<br />
<span style="color: #002200;">&#125;</span><br />
<br />
<span style="color: #002200;">&#125;</span><br />
<br />
<span style="color: #002200;">&#125;</span><span style="color: #002200;">&#93;</span>;<br />
<br />
<span style="color: #002200;">&#125;</span><br />
<br />
<span style="color: #002200;">&amp;</span>nbsp;</div></div>
<p>Here&#8217;s how the above process works. When the authenticateWithFacebook method is first called self.facebookAccount is nil. So we first ask for basic access by setting the permissions array to email and facebook audience just to me:</p>
<p><a href="http://www.nickkuh.com/iphone/book-update-facebook-chapter/2012/12/attachment/ios-facebook-social-accounts-access-permissions1/" rel="attachment wp-att-1498"><img class="alignleft size-medium wp-image-1498" title="ios-facebook-social-accounts-access-permissions1" src="http://www.nickkuh.com/wp-content/uploads/2012/12/ios-facebook-social-accounts-access-permissions1-169x300.png" alt="" width="169" height="300" /></a></p>
<p>if (self.facebookAccount == nil) {</p>
<p>//we need to deal with very basic authenication first</p>
<p>permissions = @[@"email"];</p>
<p>facebookAudience = ACFacebookAudienceOnlyMe;</p>
<p>}</p>
<p>This results in the basic profile access alert show here. If the user taps &#8216;OK&#8217; then the request access completion handler code will run. If self.facebookAccount is still nil then we can assume that we&#8217;ve been granted basic access to the user&#8217;s Facebook data. So we set self.facebookAccount to the newly granted access account and recall authenticateWithFacebook:</p>
<p>//NEW CODE start</p>
<p>//now repeat the authenticateWithFacebook call and get the next required permission</p>
<p>if (self.facebookAccount == nil) {</p>
<p>self.facebookAccount = [accounts lastObject];</p>
<p>[self authenticateWithFacebook];</p>
<p>return;</p>
<p>}</p>
<p>This time, when our authenticateWithFacebook method runs it checks that self.facebookAccount is not nil and then picks the relevant extended permissions:</p>
<div class="codecolorer-container objc default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #a61390;">switch</span> <span style="color: #002200;">&#40;</span>self.currentFacebookAction<span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span><br />
<br />
<span style="color: #a61390;">case</span> FacebookActionGetFriendsBirthdays<span style="color: #002200;">:</span><br />
<br />
permissions <span style="color: #002200;">=</span> @<span style="color: #002200;">&#91;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;friends_birthday&quot;</span><span style="color: #002200;">&#93;</span>;<br />
<br />
<span style="color: #a61390;">break</span>;<br />
<br />
<span style="color: #a61390;">case</span> FacebookActionPostToWall<span style="color: #002200;">:</span><br />
<br />
permissions <span style="color: #002200;">=</span> @<span style="color: #002200;">&#91;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;publish_stream&quot;</span><span style="color: #002200;">&#93;</span>;<br />
<br />
<span style="color: #a61390;">break</span>;<br />
<br />
<span style="color: #a61390;">default</span><span style="color: #002200;">:</span><br />
<br />
<span style="color: #a61390;">return</span>;<br />
<br />
<span style="color: #002200;">&#125;</span></div></div>
<p>In the case of retrieving the user&#8217;s Facebook friend birthdays we now need to request access to the friends_birthday Facebook permission which will result in the following iOS alert:</p>
<p><a href="http://www.nickkuh.com/iphone/book-update-facebook-chapter/2012/12/attachment/ios-facebook-social-accounts-access-permissions2/" rel="attachment wp-att-1501"><img class="alignleft size-medium wp-image-1501" title="ios-facebook-social-accounts-access-permissions2" src="http://www.nickkuh.com/wp-content/uploads/2012/12/ios-facebook-social-accounts-access-permissions2-169x300.png" alt="" width="169" height="300" /></a></p>
<p>The user grants access to the extended permission and then bingo, we can now call fetchFacebookBirthdays which will in turn use the iOS 6 Social Framework to call the Facebook Graph API and retrieve an array of the user&#8217;s friend birthdays.</p>
<p>The only additional line of code we need to add is to nil out the self.facebookAccount reference when we&#8217;re done with it to ensure that our changes to the authentication flow will be repeatedly called. ie, we also call the Facebook Graph API to post directly to user&#8217;s Facebook walls so we need the authentication to rerun and request the publish_stream extended permission.</p>
<p>Does that all make sense? Hope so!</p>
<p>Enjoy the rest of the book <img src='http://www.nickkuh.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Find me on <a href="http://www.twitter.com/nickkuh">twitter</a>.</p>
<ul class="socialwrap size32 row">
<li class="iconOnly"><a rel="nofollow" target="_blank" class="delicious" href="http://delicious.com/post?url=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Fbook-update-facebook-chapter%2F2012%2F12%2F&amp;title=Book+Update%3A+Facebook+Chapter" title="Bookmark this post : Book Update: Facebook Chapter on Delicious"><span class="head">Bookmark on Delicious</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="digg" href="http://digg.com/submit?url=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Fbook-update-facebook-chapter%2F2012%2F12%2F&amp;title=Book+Update%3A+Facebook+Chapter&amp;bodytext=A+few+weeks+ago%2C+my+new+book+was+published+by+Apress+-+Foundation+iPhone+App+Development%3A+Build+An+iPhone+App+in+5+Days+with+iOS+6+SDK%C2%A0%0D%0A%0D%0AIt%27s+been+wonderful+hearing+from+readers+and+receiving+great+feedback.+It%27s+my+first+book+and+it+took+about+8+months+to+write+alongside+the+day+job+so+not+an+insubstantial+project+" title="Digg this post : Book Update: Facebook Chapter"><span class="head">Digg this post</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="facebook" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Fbook-update-facebook-chapter%2F2012%2F12%2F&amp;t=Book+Update%3A+Facebook+Chapter" title="Recommend this post : Book Update: Facebook Chapter on Facebook"><span class="head">Recommend on Facebook</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="reddit" href="http://www.reddit.com/submit?url=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Fbook-update-facebook-chapter%2F2012%2F12%2F&amp;title=Book+Update%3A+Facebook+Chapter" title="Share this post : Book Update: Facebook Chapter on Reddit"><span class="head">share via Reddit</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="stumble" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Fbook-update-facebook-chapter%2F2012%2F12%2F&amp;title=Book+Update%3A+Facebook+Chapter" title="Share this post : Book Update: Facebook Chapter with Stumblers"><span class="head">Share with Stumblers</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="twitter" href="http://twitter.com/home/?status=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Fbook-update-facebook-chapter%2F2012%2F12%2F" title="Tweet this post : Book Update: Facebook Chapter on Twitter"><span class="head">Tweet about it</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="" class="rss" href="http://www.nickkuh.com/iphone/book-update-facebook-chapter/2012/12/feed" title="Follow this post : Book Update: Facebook Chapter comments"><span class="head">Subscribe to the comments on this post</span></a></li>
</ul>
<div class="clean"></div>
]]></content:encoded>
			<wfw:commentRss>http://www.nickkuh.com/iphone/book-update-facebook-chapter/2012/12/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>60secondreviews iPhone/iPad App</title>
		<link>http://www.nickkuh.com/iphone/60-second-review-iphoneipad-app/2012/10/</link>
		<comments>http://www.nickkuh.com/iphone/60-second-review-iphoneipad-app/2012/10/#comments</comments>
		<pubDate>Wed, 31 Oct 2012 13:20:55 +0000</pubDate>
		<dc:creator>Nick Kuh</dc:creator>
				<category><![CDATA[Apps]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Portfolio]]></category>

		<guid isPermaLink="false">http://www.nickkuh.com/?p=1456</guid>
		<description><![CDATA[A suite of iOS 6 Movie, Restaurant, Book and Wine Review Apps for 60secondreviews.com]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.60secondreviews.com">60secondreviews</a> are a new UK-based startup offering a simple and engaging proposition: concise, interesting 60 second video reviews of <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=563501291&amp;mt=8" title="Movies">Movies</a>, <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=566542747&amp;mt=8" title="Restaurants">Restaurants</a>, <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=566542307&amp;mt=8" title="Books">Books</a> and <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=566542851&amp;mt=8" title="Wine">Wine</a> on your iPhone, iPod Touch or iPad. The video reviews are delivered by industry-leading expert critics and was founded by <a href="https://twitter.com/60secreviews" title="Euan MacDonald on Twitter">Euan MacDonald</a> and <a href="https://twitter.com/nick_duncalf" title="Nick Duncalf on Twitter">Nick Duncalf</a>.</p>

<img width="100" height="100" src="http://www.nickkuh.com/wp-content/uploads/2012/10/60secondreviews-Movies-App-Store-Icon.png" class="attachment-thumbnail" alt="60secondreviews Movies App Store Icon" />
<img width="100" height="100" src="http://www.nickkuh.com/wp-content/uploads/2012/10/60secondreviews-Book-App-Store-Icon.png" class="attachment-thumbnail" alt="60secondreviews Books App Store Icon" />
<img width="100" height="100" src="http://www.nickkuh.com/wp-content/uploads/2012/10/60secondreviews-Restaurants-App-Store-Icon.png" class="attachment-thumbnail" alt="60secondreviews Restaurants App Store Icon" />
<img width="100" height="100" src="http://www.nickkuh.com/wp-content/uploads/2012/10/60secondreviews-Wine-App-Store-Icon.png" class="attachment-thumbnail" alt="60secondreviews Wine App Store Icon" />

<p>I was hired by <a href="http://www.60secondreviews.com" title="60secondreviews.com">60secondreviews</a> as a Consultant and iOS Developer to build an e-commerce iOS app that could deliver the video reviews, giving users a free taster of the content before enticing them to subscribe using Apple&#8217;s in-app purchase subscription model.</p>
<p>The content covered by 60secondreviews (Movies, Restaurants, Books and Wine) is quite broad and whereas it makes sense for Movie content to appear in the App Store&#8217;s Entertainment category, Food and Drink are more appropriate the Wine and Restaurant based content. It was these differences which led us to conclude in an early brainstorming session that by creating 4 apps, one for each product, we could divide up the content nicely across a suite of apps. Those only interested in Wine (no wino jokes please!) would be presented with only Wine reviews. </p>
<p>However, we&#8217;ve also connected the 4 apps by creating a custom toolbar that enables users to flip between the apps using multitasking in iOS. If an app find that you have also installed additional 60secondreview apps on the same device then it displays a launch icon for each. If you haven&#8217;t already installed the other apps then we display a download icon to enable users to download the other apps for free, making great use of in-app cross-promotion.</p>
<p>All of the 60secondreview apps have been built in iOS 6 and make extensive use of the new Apple components and APIs such as collection views, appearance skinning and native Facebook and Twitter sharing. </p>
<p>Want to know more? I&#8217;ve even got my own 60secondreview video about the development of the iOS apps and the use of iOS 6. Check it out below.</p>
<p><iframe src="http://player.vimeo.com/video/52533457?title=0&amp;byline=0&amp;portrait=0&amp;badge=0" frameborder="0" width="600" height="338"></iframe></p>
<p><a title="60secondreviews for iPad and iPhone App Store Link" href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=563501291&amp;mt=8" target="_blank"><img style="border: 0pt none; margin: 0px;" src="http://www.nickkuh.com/wp-includes/images/appstoreBadge.png" alt="" width="173" height="65" /></a></p>
<ul class="socialwrap size32 row">
<li class="iconOnly"><a rel="nofollow" target="_blank" class="delicious" href="http://delicious.com/post?url=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2F60-second-review-iphoneipad-app%2F2012%2F10%2F&amp;title=60secondreviews+iPhone%2FiPad+App" title="Bookmark this post : 60secondreviews iPhone/iPad App on Delicious"><span class="head">Bookmark on Delicious</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="digg" href="http://digg.com/submit?url=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2F60-second-review-iphoneipad-app%2F2012%2F10%2F&amp;title=60secondreviews+iPhone%2FiPad+App&amp;bodytext=60secondreviews+are+a+new+UK-based+startup+offering+a+simple+and+engaging+proposition%3A+concise%2C+interesting+60+second+video+reviews+of+Movies%2C+Restaurants%2C+Books+and+Wine+on+your+iPhone%2C+iPod+Touch+or+iPad.+The+video+reviews+are+delivered+by+industry-leading+expert+critics+and+was+founded+by+Euan+MacDonald+and+Nick+Dun" title="Digg this post : 60secondreviews iPhone/iPad App"><span class="head">Digg this post</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="facebook" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2F60-second-review-iphoneipad-app%2F2012%2F10%2F&amp;t=60secondreviews+iPhone%2FiPad+App" title="Recommend this post : 60secondreviews iPhone/iPad App on Facebook"><span class="head">Recommend on Facebook</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="reddit" href="http://www.reddit.com/submit?url=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2F60-second-review-iphoneipad-app%2F2012%2F10%2F&amp;title=60secondreviews+iPhone%2FiPad+App" title="Share this post : 60secondreviews iPhone/iPad App on Reddit"><span class="head">share via Reddit</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="stumble" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2F60-second-review-iphoneipad-app%2F2012%2F10%2F&amp;title=60secondreviews+iPhone%2FiPad+App" title="Share this post : 60secondreviews iPhone/iPad App with Stumblers"><span class="head">Share with Stumblers</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="twitter" href="http://twitter.com/home/?status=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2F60-second-review-iphoneipad-app%2F2012%2F10%2F" title="Tweet this post : 60secondreviews iPhone/iPad App on Twitter"><span class="head">Tweet about it</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="" class="rss" href="http://www.nickkuh.com/iphone/60-second-review-iphoneipad-app/2012/10/feed" title="Follow this post : 60secondreviews iPhone/iPad App comments"><span class="head">Subscribe to the comments on this post</span></a></li>
</ul>
<div class="clean"></div>
]]></content:encoded>
			<wfw:commentRss>http://www.nickkuh.com/iphone/60-second-review-iphoneipad-app/2012/10/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Core Data Migration Woes with Binary Data and External Storage == Data Loss</title>
		<link>http://www.nickkuh.com/iphone/core-data-migration-woes-with-binary-data-and-external-storage-data-loss/2012/06/</link>
		<comments>http://www.nickkuh.com/iphone/core-data-migration-woes-with-binary-data-and-external-storage-data-loss/2012/06/#comments</comments>
		<pubDate>Sat, 09 Jun 2012 14:05:52 +0000</pubDate>
		<dc:creator>Nick Kuh</dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Core Data]]></category>

		<guid isPermaLink="false">http://www.nickkuh.com/?p=1429</guid>
		<description><![CDATA[I&#8217;m currently on a flight to San Francisco to attend Apple’s WWDC 2012 Conference – with 10 hours of time to kill I thought I’d spend a few hours writing a post about a CoreData bug I discovered recently. I’m also planning on showing the bug to Apple engineers next week so with a bit [...]]]></description>
				<content:encoded><![CDATA[<p>I&#8217;m currently on a flight to San Francisco to attend Apple’s <a href="https://developer.apple.com/wwdc/">WWDC 2012</a> Conference – with 10 hours of time to kill I thought I’d spend a few hours writing a post about a CoreData bug I discovered recently. I’m also planning on showing the bug to Apple engineers next week so with a bit of luck this issue may get fixed in iOS 6. Fingers crossed.</p>
<p><strong>Apple’s Binary Data attribute type</strong></p>
<p>In iOS 5 Apple introduced a great new Core Data attribute type, <em>Binary Data</em>. This was a great new attribute &#8211; prior to iOS 5 it was typical to manage and store images and other binary files to disk outside of Core Data and store references to the files from Core Data entities &#8211; not ideal.</p>
<p><strong>Use Case Scenario</strong></p>
<p>A lot of the apps I build make extensive use of caching images so that users of my apps can continue to use my apps even when they’re offline. A good example of this is my latest iPad App, <a href="http://www.nickkuh.com/portfoliopro">Portfolio Pro</a>. Portfolio Pro is an app for Photographers and Designers to import their photos and videos into the app and then be able to present those binary files to clients in a coffee shop for example. The images need to be cached by the app for offline use.</p>
<p><strong>The Problem</strong></p>
<p>I’ve been using Apple’s <em>Binary Data</em> attribute type to store both the large photographs imported by users of my app and thumbnails for the photos. I’ve updated the app a few times without experiencing any problems accessing the previously cached Core Data binary attributes. Until that is, I tried to attempt a very simple automated Core Data model migration in a recent update. A strange bug occurred. Cached Core Data binary data started disappearing!</p>
<p>What was odd was that all of the cached thumbnails remained after an automated migration but the larger binary data attributes containing the original large sized photographs (2048 pixels long side) became nullified.</p>
<p>I was using exactly the same approach to store the thumbnail binary data and the large photo binary data. So why was one migrating and the other not? In both cases in addition to setting the Core Data attribute type to <em>Binary Data</em> I’d also selected <em>Allows External Storage </em>option. It seemed like the sensible choice, as I’d expect an optimized database framework to read/write large binary files to disk.</p>
<p><strong>Allows External Storage</strong></p>
<p>While investigating the migration issue I was experiencing in Portfolio Pro I discovered that Core Data writes large binary data to disk but not smaller binary data. Exactly what size it uses as the cut-off limit I don’t know but with large photo data I found that Core Data had created external binary files on disk in a subfolder of my app’s documents folder named &#8220;_EXTERNAL_DATA&#8221; within another folder named &#8220;.[MyProjectName]_SUPPORT&#8221;. So if your Xcode target is named <em>MyCoolApp</em> then the path to Core Data’s external storage will be [DocumentsFolder]/.MyCoolApp_SUPPORT/_EXTERNAL_DATA</p>
<p><strong>Goodbye External Storage</strong></p>
<p>Once I’d discovered this hidden storage folder I then found the cause of my disappearing photos. When Core Data performs an automated model migration it deletes/resets the _EXTERNAL_DATA folder – goodbye photos! All of my entities were being migrated just fine but the large, externally stored binary attributes were just disappearing because the storage directory was getting nuked in the migration process.</p>
<p>So that’s the bug with migrating a CoreData model that uses Binary Data attributes with Allows External Storage switched on.</p>
<p><strong>See for yourself</strong></p>
<p>I’ve put together an example project to demonstrate the bug. Download the source files here:</p>
<p><a href="http://www.nickkuh.com/demos/coredata-binary-bug-source.zip"> Download Source Files</a></p>
<p>Begin by opening up the Xcode project within the <em>Before Migration</em> folder. Run the project in the iOS Simulator. You should get similar results to figure 1.</p>
<div id="attachment_1430" class="wp-caption alignnone" style="width: 406px"><a href="http://www.nickkuh.com/iphone/core-data-migration-woes-with-binary-data-and-external-storage-data-loss/2012/06/attachment/figure1/" rel="attachment wp-att-1430"><img class="size-full wp-image-1430" title="Figure 1" src="http://www.nickkuh.com/wp-content/uploads/2012/06/figure1.png" alt="Figure 1" width="396" height="744" /></a><p class="wp-caption-text">Figure 1: Before CoreData Migration</p></div>
<p>The 2 image views are being populated by a single Core Data entity. The entity contains 2 identical Binary Data attribute types. 1 named <em>smallImage</em> and one named <em>largeImage</em>. Both have been set up to <em>Allow External Storage</em>. In the view I’m rendering the <em>smallImage</em> binary data into the first image view and the <em>largeImage</em> binary data into the second image view. Both image views have content mode set to aspect fit.</p>
<p>Close the <em>Before Migration</em> version of the project. Now open <em>After Migration (Bug)</em> version of the same project. The only difference between this version of the project and the first is that I’ve migrated the CoreData model by adding a model version and adding a new unused string attribute named <em>newAttribute</em> to the Core Data Entity.</p>
<p>The project is already set-up correctly for automatic Core Data migration. Build and run. This should replace your previous version of the example app and perform the automatic model migration. But what happens to the binary data attributes of our entity? Here’s what happens, the small image remains and the large image is deleted (see figure 2)!</p>
<div id="attachment_1435" class="wp-caption alignnone" style="width: 406px"><a href="http://www.nickkuh.com/iphone/core-data-migration-woes-with-binary-data-and-external-storage-data-loss/2012/06/attachment/figure2/" rel="attachment wp-att-1435"><img class="size-full wp-image-1435" title="Figure 2: After CoreData Migration" src="http://www.nickkuh.com/wp-content/uploads/2012/06/figure2.png" alt="Figure 2: After CoreData Migration" width="396" height="744" /></a><p class="wp-caption-text">Figure 2: After CoreData Migration</p></div>
<p>Ok, point proven. Delete the demo app from your iOS Simulator. Run the original <em>Before Migration</em> version once more – you should now have both images displayed as before. Now for the solution…</p>
<p><strong>The Solution</strong></p>
<p>Now build and run the third version of the example app within the <em>After Migration (Solution)</em> folder. You should still have 2 images displayed after migration – hurray!</p>
<p>The solution I’ve come up with is when your code initializes a persistent store coordinator for your Core Data model run a few checks before attempting automatic migration. Check whether the new model is compatible with the current stored model. If it’s not then you know that Core Data is about to migrate your old model to your new version and in doing so will wipe the external storage folder. Before it does so simply move the external storage folder to a temporary location. Once the migration has completed replace new empty external storage folder generated by Core Data. Here’s the code that you’ll also find in the <em>Model</em> class of the example project within the <em>After Migration (Solution)</em> folder:</p>
<div class="codecolorer-container objc default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/CoreDataFramework/Classes/NSPersistentStoreCoordinator_Class/"><span style="color: #400080;">NSPersistentStoreCoordinator</span></a> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>persistentStoreCoordinator<br />
<br />
<span style="color: #002200;">&#123;</span><br />
<br />
<span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>_persistentStoreCoordinator <span style="color: #002200;">!=</span> <span style="color: #a61390;">nil</span><span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span><br />
<br />
<span style="color: #a61390;">return</span> _persistentStoreCoordinator;<br />
<br />
<span style="color: #002200;">&#125;</span><br />
<br />
<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>storeURL <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>self applicationDocumentsDirectory<span style="color: #002200;">&#93;</span> URLByAppendingPathComponent<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;CoreDataBinaryBug.sqlite&quot;</span><span style="color: #002200;">&#93;</span>;<br />
<br />
<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: #a61390;">nil</span>;<br />
<br />
<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>sourceMetadata <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/CoreDataFramework/Classes/NSPersistentStoreCoordinator_Class/"><span style="color: #400080;">NSPersistentStoreCoordinator</span></a> metadataForPersistentStoreOfType<span style="color: #002200;">:</span>NSSQLiteStoreType<br />
<br />
URL<span style="color: #002200;">:</span>storeURL<br />
<br />
error<span style="color: #002200;">:&amp;</span>amp;error<span style="color: #002200;">&#93;</span>;<br />
<br />
<span style="color: #11740a; font-style: italic;">//Check if the new model is compatible with any previously stored model</span><br />
<br />
<span style="color: #a61390;">BOOL</span> isCompatibile <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>self.managedObjectModel isConfiguration<span style="color: #002200;">:</span><span style="color: #a61390;">nil</span> compatibleWithStoreMetadata<span style="color: #002200;">:</span>sourceMetadata<span style="color: #002200;">&#93;</span>;<br />
<br />
<span style="color: #a61390;">BOOL</span> needsMigration <span style="color: #002200;">=</span> <span style="color: #002200;">!</span>isCompatibile;<br />
<br />
<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSFileManager_Class/"><span style="color: #400080;">NSFileManager</span></a> <span style="color: #002200;">*</span>fileManager <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSFileManager_Class/"><span style="color: #400080;">NSFileManager</span></a> defaultManager<span style="color: #002200;">&#93;</span>;<br />
<br />
<span style="color: #11740a; font-style: italic;">//Prepare a temporary path to move CoreData's external data storage folder to if automatic model migration is required</span><br />
<br />
<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span>documentsPath <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>NSSearchPathForDirectoriesInDomains<span style="color: #002200;">&#40;</span>NSDocumentDirectory, NSUserDomainMask, <span style="color: #a61390;">YES</span><span style="color: #002200;">&#41;</span> lastObject<span style="color: #002200;">&#93;</span>;<br />
<br />
<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span>tmpPathToExternalStorage <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>documentsPath stringByAppendingPathComponent<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;tmpPathToReplacementData&quot;</span><span style="color: #002200;">&#93;</span>;<br />
<br />
<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span>pathToExternalStorage <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>documentsPath stringByAppendingPathComponent<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;.CoreDataBinaryBug_SUPPORT/_EXTERNAL_DATA&quot;</span><span style="color: #002200;">&#93;</span>;<br />
<br />
<span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>needsMigration<span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span><br />
<br />
<span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span><span style="color: #002200;">&#91;</span>fileManager fileExistsAtPath<span style="color: #002200;">:</span>pathToExternalStorage<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span><br />
<br />
<span style="color: #11740a; font-style: italic;">//Move Apple's CoreData external storage folder before it's nuked by the migration bug</span><br />
<br />
<span style="color: #002200;">&#91;</span>fileManager moveItemAtPath<span style="color: #002200;">:</span>pathToExternalStorage toPath<span style="color: #002200;">:</span>tmpPathToExternalStorage error<span style="color: #002200;">:</span><span style="color: #a61390;">nil</span><span style="color: #002200;">&#93;</span>;<br />
<br />
<span style="color: #002200;">&#125;</span><br />
<br />
<span style="color: #002200;">&#125;</span><br />
<br />
<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>options <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSDictionary_Class/"><span style="color: #400080;">NSDictionary</span></a> dictionaryWithObjectsAndKeys<span style="color: #002200;">:</span><br />
<br />
<span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNumber_Class/"><span style="color: #400080;">NSNumber</span></a> numberWithBool<span style="color: #002200;">:</span><span style="color: #a61390;">YES</span><span style="color: #002200;">&#93;</span>,NSMigratePersistentStoresAutomaticallyOption,<br />
<br />
<span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNumber_Class/"><span style="color: #400080;">NSNumber</span></a> numberWithBool<span style="color: #002200;">:</span><span style="color: #a61390;">YES</span><span style="color: #002200;">&#93;</span>, NSInferMappingModelAutomaticallyOption, <span style="color: #a61390;">nil</span><span style="color: #002200;">&#93;</span>;<br />
<br />
_persistentStoreCoordinator <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/CoreDataFramework/Classes/NSPersistentStoreCoordinator_Class/"><span style="color: #400080;">NSPersistentStoreCoordinator</span></a> alloc<span style="color: #002200;">&#93;</span> initWithManagedObjectModel<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span>self managedObjectModel<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>;<br />
<br />
<span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span><span style="color: #002200;">!</span><span style="color: #002200;">&#91;</span>_persistentStoreCoordinator addPersistentStoreWithType<span style="color: #002200;">:</span>NSSQLiteStoreType configuration<span style="color: #002200;">:</span><span style="color: #a61390;">nil</span> URL<span style="color: #002200;">:</span>storeURL options<span style="color: #002200;">:</span>options error<span style="color: #002200;">:&amp;</span>amp;error<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span><br />
<br />
<span style="color: #002200;">&amp;</span>nbsp;<br />
<br />
NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Unresolved error %@, %@&quot;</span>, error, <span style="color: #002200;">&#91;</span>error userInfo<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span>;<br />
<br />
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/abort.html"><span style="color: #a61390;">abort</span></a><span style="color: #002200;">&#40;</span><span style="color: #002200;">&#41;</span>;<br />
<br />
<span style="color: #002200;">&#125;</span><br />
<br />
<span style="color: #a61390;">else</span> <span style="color: #002200;">&#123;</span><br />
<br />
<span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>needsMigration<span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span><br />
<br />
<span style="color: #11740a; font-style: italic;">//Apple's automatic migration is now complete. Replace the default external storage folder with the version pre upgrade</span><br />
<br />
<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSFileManager_Class/"><span style="color: #400080;">NSFileManager</span></a> defaultManager<span style="color: #002200;">&#93;</span> removeItemAtPath<span style="color: #002200;">:</span>pathToExternalStorage error<span style="color: #002200;">:</span><span style="color: #a61390;">nil</span><span style="color: #002200;">&#93;</span>;<br />
<br />
<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSFileManager_Class/"><span style="color: #400080;">NSFileManager</span></a> defaultManager<span style="color: #002200;">&#93;</span> moveItemAtPath<span style="color: #002200;">:</span>tmpPathToExternalStorage toPath<span style="color: #002200;">:</span>pathToExternalStorage error<span style="color: #002200;">:</span><span style="color: #a61390;">nil</span><span style="color: #002200;">&#93;</span>;<br />
<br />
<span style="color: #002200;">&#125;</span><br />
<br />
<span style="color: #002200;">&#125;</span><br />
<br />
<span style="color: #a61390;">return</span> _persistentStoreCoordinator;<br />
<br />
<span style="color: #002200;">&#125;</span></div></div>
<p>Once more, here are the source files for the example project:</p>
<p><a href="http://www.nickkuh.com/demos/coredata-binary-bug-source.zip">Download Source Files</a></p>
<p>Interested in iOS Development and Core Data? <a href="http://www.twitter.com/nickkuh">Follow me on Twitter</a> for more tidbits <img src='http://www.nickkuh.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<ul class="socialwrap size32 row">
<li class="iconOnly"><a rel="nofollow" target="_blank" class="delicious" href="http://delicious.com/post?url=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Fcore-data-migration-woes-with-binary-data-and-external-storage-data-loss%2F2012%2F06%2F&amp;title=Core+Data+Migration+Woes+with+Binary+Data+and+External+Storage+%3D%3D+Data+Loss" title="Bookmark this post : Core Data Migration Woes with Binary Data and External Storage == Data Loss on Delicious"><span class="head">Bookmark on Delicious</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="digg" href="http://digg.com/submit?url=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Fcore-data-migration-woes-with-binary-data-and-external-storage-data-loss%2F2012%2F06%2F&amp;title=Core+Data+Migration+Woes+with+Binary+Data+and+External+Storage+%3D%3D+Data+Loss&amp;bodytext=I%27m+currently+on+a+flight+to+San+Francisco+to+attend+Apple%E2%80%99s+WWDC+2012+Conference+%E2%80%93+with+10+hours+of+time+to+kill+I+thought+I%E2%80%99d+spend+a+few+hours+writing+a+post+about+a+CoreData+bug+I+discovered+recently.+I%E2%80%99m+also+planning+on+showing+the+bug+to+Apple+engineers+next+week+so+with+a+bit+of+luck+this+issue+may+get+" title="Digg this post : Core Data Migration Woes with Binary Data and External Storage == Data Loss"><span class="head">Digg this post</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="facebook" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Fcore-data-migration-woes-with-binary-data-and-external-storage-data-loss%2F2012%2F06%2F&amp;t=Core+Data+Migration+Woes+with+Binary+Data+and+External+Storage+%3D%3D+Data+Loss" title="Recommend this post : Core Data Migration Woes with Binary Data and External Storage == Data Loss on Facebook"><span class="head">Recommend on Facebook</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="reddit" href="http://www.reddit.com/submit?url=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Fcore-data-migration-woes-with-binary-data-and-external-storage-data-loss%2F2012%2F06%2F&amp;title=Core+Data+Migration+Woes+with+Binary+Data+and+External+Storage+%3D%3D+Data+Loss" title="Share this post : Core Data Migration Woes with Binary Data and External Storage == Data Loss on Reddit"><span class="head">share via Reddit</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="stumble" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Fcore-data-migration-woes-with-binary-data-and-external-storage-data-loss%2F2012%2F06%2F&amp;title=Core+Data+Migration+Woes+with+Binary+Data+and+External+Storage+%3D%3D+Data+Loss" title="Share this post : Core Data Migration Woes with Binary Data and External Storage == Data Loss with Stumblers"><span class="head">Share with Stumblers</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="twitter" href="http://twitter.com/home/?status=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Fcore-data-migration-woes-with-binary-data-and-external-storage-data-loss%2F2012%2F06%2F" title="Tweet this post : Core Data Migration Woes with Binary Data and External Storage == Data Loss on Twitter"><span class="head">Tweet about it</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="" class="rss" href="http://www.nickkuh.com/iphone/core-data-migration-woes-with-binary-data-and-external-storage-data-loss/2012/06/feed" title="Follow this post : Core Data Migration Woes with Binary Data and External Storage == Data Loss comments"><span class="head">Subscribe to the comments on this post</span></a></li>
</ul>
<div class="clean"></div>
]]></content:encoded>
			<wfw:commentRss>http://www.nickkuh.com/iphone/core-data-migration-woes-with-binary-data-and-external-storage-data-loss/2012/06/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Portfolio Pro for iPad: Brandable Photo and Video Presentation App</title>
		<link>http://www.nickkuh.com/portfolio/portfolio-pro-for-ipad-flickr-dropbox/2012/05/</link>
		<comments>http://www.nickkuh.com/portfolio/portfolio-pro-for-ipad-flickr-dropbox/2012/05/#comments</comments>
		<pubDate>Thu, 03 May 2012 23:00:48 +0000</pubDate>
		<dc:creator>Nick Kuh</dc:creator>
				<category><![CDATA[Apps]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[Portfolio]]></category>

		<guid isPermaLink="false">http://www.nickkuh.com/?p=1387</guid>
		<description><![CDATA[The only Portfolio app for iPad with batch import from Flickr and Dropbox]]></description>
				<content:encoded><![CDATA[<p>My <a href="http://www.nicolecarman.com">wife is a photographer</a> and when she meets clients she lugs about a very large portfolio case holding a selection of suitable prints for each client. The case is heavy and cumbersome. Sure, the prints are ordered but it can be a pain for her to sift through her portfolio to find particular photographs during a meeting. The situation is a similar problem for thousands of photographers and designers. Far from ideal.</p>
<p><strong>The iPad</strong><br />
The iPad is the perfect device for photographers to present their portfolio to clients. Swiping and zooming through photos on the iPad not only looks amazing on it&#8217;s HD display, it enables professional photographers to take their entire portfolio to client meetings in a lightweight device that fits inside an A4 envelope. </p>
<p><strong>Apple&#8217;s Photos App</strong><br />
But Apple provide a great Photos App for the iPad already so why not just use that? Here are a couple of reasons.</p>
<ul>
<li>What about when your private pics get mixed in with your professional ones? </li>
<li>What if you want to add a title and description to each of your photos?</li>
<li>What if you want to import your photos from <a href="http://www.flickr.com">Flickr</a> or <a href="http://www.dropbox.com">Dropbox</a> and not have to rely solely on iTunes and iPhoto syncing?</li>
</ul>
<p>iPhoto is a great app for viewing photos and videos of family and friends but when it comes to the professional photographer, you want a bespoke looking app that that looks like it belongs to you. Your Brand. Your Portfolio. Your App.</p>
<p><strong>Introducing Portfolio Pro</strong><br />
<a href="http://www.nickkuh.com/portfoliopro">Portfolio Pro for iPad</a>, my latest project, is a brandable photo &amp; video presentation app built for photographers, designers &#038; creatives. </p>
<p><a href="http://www.nickkuh.com/portfoliopro"><img class="alignleft size-full wp-image-1405" style="border: 0px;" title="Portfolio Pro for iPad Logo" src="http://www.nickkuh.com/wp-content/uploads/2012/05/portfolio-pro-for-ipad-logo.png" alt="" width="144" height="144" /></a>With batch import from <a href="http://www.flickr.com">Flickr</a>, <a href="http://www.dropbox.com">Dropbox</a> and your iPad, <a href="http://www.nickkuh.com/portfoliopro">Portfolio Pro</a> gives professional users an extensive collection of ways to get their work onto the iPad. The app consists of 3 main sections: home screensaver for featured work, galleries and flippable fullscreen slideshow mode. </p>
<p><strong>Portfolio Management</strong><br />
While Portfolio Pro imports your high res JPGs, PNGs, TIFs, GIFs, MOVs, MP4s and M4Vs you are free to simultaneously drag and drop to rearrange galleries, add names and descriptions to your work (also automatically imported from Flickr and Dropbox).</p>
<p><strong>An Intuitive Experience</strong><br />
Having tried and tested pretty much every portfolio app for iPad in the App Store I can honestly say I think it&#8217;s rare to find a portfolio app that is both beautiful to present with and easy to use and configure. That&#8217;s exactly what I&#8217;ve set out to achieve with <a href="http://www.nickkuh.com/portfoliopro">Portfolio Pro</a>. Not only does Portfolio Pro look beautiful when presenting your work to clients, making changes to galleries and media is also super-simple and intuitive. Triple-tap any screen to switch between client and edit modes. Check out the video to see it in action.</p>
<p><iframe src="http://player.vimeo.com/video/40141687?title=0&amp;byline=0&amp;portrait=0" frameborder="0" width="560" height="315"></iframe></p>
<p>I&#8217;ve set-up a dedicated website for Portfolio Pro <a href="http://www.nickkuh.com/portfoliopro">here</a> showcasing screengrabs of the app in action and many further details but if you&#8217;re already sold already here&#8217;s a direct link to Portfolio Pro on the App Store:</p>
<p><a title="Portfolio Pro for iPad App Store Link" href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=520086276&amp;mt=8" target="_blank"><img style="border: 0pt none; margin: 0px;" src="http://www.nickkuh.com/wp-includes/images/appstoreBadge.png" alt="" width="173" height="65" /></a></p>
<ul class="socialwrap size32 row">
<li class="iconOnly"><a rel="nofollow" target="_blank" class="delicious" href="http://delicious.com/post?url=http%3A%2F%2Fwww.nickkuh.com%2Fportfolio%2Fportfolio-pro-for-ipad-flickr-dropbox%2F2012%2F05%2F&amp;title=Portfolio+Pro+for+iPad%3A+Brandable+Photo+and+Video+Presentation+App" title="Bookmark this post : Portfolio Pro for iPad: Brandable Photo and Video Presentation App on Delicious"><span class="head">Bookmark on Delicious</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="digg" href="http://digg.com/submit?url=http%3A%2F%2Fwww.nickkuh.com%2Fportfolio%2Fportfolio-pro-for-ipad-flickr-dropbox%2F2012%2F05%2F&amp;title=Portfolio+Pro+for+iPad%3A+Brandable+Photo+and+Video+Presentation+App&amp;bodytext=My+wife+is+a+photographer+and+when+she+meets+clients+she+lugs+about+a+very+large+portfolio+case+holding+a+selection+of+suitable+prints+for+each+client.+The+case+is+heavy+and+cumbersome.+Sure%2C+the+prints+are+ordered+but+it+can+be+a+pain+for+her+to+sift+through+her+portfolio+to+find+particular+photographs+during+a+meetin" title="Digg this post : Portfolio Pro for iPad: Brandable Photo and Video Presentation App"><span class="head">Digg this post</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="facebook" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.nickkuh.com%2Fportfolio%2Fportfolio-pro-for-ipad-flickr-dropbox%2F2012%2F05%2F&amp;t=Portfolio+Pro+for+iPad%3A+Brandable+Photo+and+Video+Presentation+App" title="Recommend this post : Portfolio Pro for iPad: Brandable Photo and Video Presentation App on Facebook"><span class="head">Recommend on Facebook</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="reddit" href="http://www.reddit.com/submit?url=http%3A%2F%2Fwww.nickkuh.com%2Fportfolio%2Fportfolio-pro-for-ipad-flickr-dropbox%2F2012%2F05%2F&amp;title=Portfolio+Pro+for+iPad%3A+Brandable+Photo+and+Video+Presentation+App" title="Share this post : Portfolio Pro for iPad: Brandable Photo and Video Presentation App on Reddit"><span class="head">share via Reddit</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="stumble" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.nickkuh.com%2Fportfolio%2Fportfolio-pro-for-ipad-flickr-dropbox%2F2012%2F05%2F&amp;title=Portfolio+Pro+for+iPad%3A+Brandable+Photo+and+Video+Presentation+App" title="Share this post : Portfolio Pro for iPad: Brandable Photo and Video Presentation App with Stumblers"><span class="head">Share with Stumblers</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="twitter" href="http://twitter.com/home/?status=http%3A%2F%2Fwww.nickkuh.com%2Fportfolio%2Fportfolio-pro-for-ipad-flickr-dropbox%2F2012%2F05%2F" title="Tweet this post : Portfolio Pro for iPad: Brandable Photo and Video Presentation App on Twitter"><span class="head">Tweet about it</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="" class="rss" href="http://www.nickkuh.com/portfolio/portfolio-pro-for-ipad-flickr-dropbox/2012/05/feed" title="Follow this post : Portfolio Pro for iPad: Brandable Photo and Video Presentation App comments"><span class="head">Subscribe to the comments on this post</span></a></li>
</ul>
<div class="clean"></div>
]]></content:encoded>
			<wfw:commentRss>http://www.nickkuh.com/portfolio/portfolio-pro-for-ipad-flickr-dropbox/2012/05/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>LoveThis iPhone App</title>
		<link>http://www.nickkuh.com/iphone/lovethis-iphone-app/2012/04/</link>
		<comments>http://www.nickkuh.com/iphone/lovethis-iphone-app/2012/04/#comments</comments>
		<pubDate>Mon, 23 Apr 2012 14:41:27 +0000</pubDate>
		<dc:creator>Nick Kuh</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Portfolio]]></category>

		<guid isPermaLink="false">http://www.nickkuh.com/?p=1356</guid>
		<description><![CDATA[Recommendations with Friends.]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.lovethis.com">LoveThis</a> is a Startup founded and conceived by <a href="http://blogs.telegraph.co.uk/technology/author/alexisdormandy/">Alexis Dormandy</a> who won the company 2 million dollars of Series A funding before they even launched their main product, an iPhone App for sharing recommendations with your friends. Pretty impressive!</p>
<p>The LoveThis iPhone App enables users to share product and venue recommendations with their friends. Even friends not using the app via Facebook and email.</p>
<p>I was contracted by LoveThis to build the majority of the iOS app and to consult on various aspects of the App Store marketplace, native Facebook integration, online/offline Core Data syncronisation and a whole lot more.<br />

<a href='http://www.nickkuh.com/iphone/lovethis-iphone-app/2012/04/attachment/lovethis-homescreen/' title='LoveThis Homescreen'><img width="150" height="225" src="http://www.nickkuh.com/wp-content/uploads/2012/04/lovethis-homescreen-150x225.jpg" class="attachment-thumbnail" alt="LoveThis Homescreen" /></a>
<a href='http://www.nickkuh.com/iphone/lovethis-iphone-app/2012/04/attachment/lovethis-recommendations-screen/' title='LoveThis Recommendations Screen'><img width="150" height="225" src="http://www.nickkuh.com/wp-content/uploads/2012/04/lovethis-recommendations-screen-150x225.jpg" class="attachment-thumbnail" alt="LoveThis Recommendations Screen" /></a>
<a href='http://www.nickkuh.com/iphone/lovethis-iphone-app/2012/04/attachment/lovethis-recommendation-detail-screen/' title='LoveThis Recommendation Detail Screen'><img width="150" height="225" src="http://www.nickkuh.com/wp-content/uploads/2012/04/lovethis-recommendation-detail-screen-150x225.jpg" class="attachment-thumbnail" alt="LoveThis Recommendation Detail Screen" /></a>
<a href='http://www.nickkuh.com/iphone/lovethis-iphone-app/2012/04/attachment/lovethis-categories-screen/' title='LoveThis Categories Screen'><img width="150" height="225" src="http://www.nickkuh.com/wp-content/uploads/2012/04/lovethis-categories-screen-150x225.jpg" class="attachment-thumbnail" alt="LoveThis Categories Screen" /></a>
<a href='http://www.nickkuh.com/iphone/lovethis-iphone-app/2012/04/attachment/lovethis-adding-a-recommendation/' title='Love This Adding a Recommendation Screen'><img width="150" height="225" src="http://www.nickkuh.com/wp-content/uploads/2012/04/lovethis-adding-a-recommendation-150x225.jpg" class="attachment-thumbnail" alt="Love This Adding a Recommendation Screen" /></a>
<a href='http://www.nickkuh.com/iphone/lovethis-iphone-app/2012/04/attachment/lovethis-recommendation-added/' title='LoveThis Recommendation Added Screen'><img width="150" height="225" src="http://www.nickkuh.com/wp-content/uploads/2012/04/lovethis-recommendation-added-150x225.jpg" class="attachment-thumbnail" alt="LoveThis Recommendation Added Screen" /></a>
<br />
After a lot of hard work the LoveThis team finally launched version 1 of their iPhone App a couple of weeks ago and it already appears to be stacking up a lot of 5-star reviews.</p>
<p>The LoveThis app makes it very easily to quickly add and share recommendations and tightly integrates with Google Places API to automatically find relevant locations to your recommendation such as nearby restaurants and bars.</p>
<p>The app is nice and simple to use on the surface but behind the scenes it&#8217;s powered by a complex server application that connects multiple social network identities and activity and aggregates the data right into the app. So if a recommendation is shared on Facebook both Facebook comments, LoveThis user email comments and in-app comments are all brought together into a single activity stream within the iPhone App.</p>
<p>It&#8217;s early days for LoveThis but I think they have an exciting 2012 ahead and I wish the team the best of luck. I really enjoyed working with them all!</p>
<p><a title="LoveThis iPhone App AppStore Link" href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=512577106&amp;mt=8" target="_blank"><img style="border: 0pt none; margin: 0px;" src="http://www.nickkuh.com/wp-includes/images/appstoreBadge.png" alt="" width="173" height="65" /></a></p>
<ul class="socialwrap size32 row">
<li class="iconOnly"><a rel="nofollow" target="_blank" class="delicious" href="http://delicious.com/post?url=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Flovethis-iphone-app%2F2012%2F04%2F&amp;title=LoveThis+iPhone+App" title="Bookmark this post : LoveThis iPhone App on Delicious"><span class="head">Bookmark on Delicious</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="digg" href="http://digg.com/submit?url=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Flovethis-iphone-app%2F2012%2F04%2F&amp;title=LoveThis+iPhone+App&amp;bodytext=LoveThis+is+a+Startup+founded+and+conceived+by+Alexis+Dormandy+who+won+the+company+2+million+dollars+of+Series+A+funding+before+they+even+launched+their+main+product%2C+an+iPhone+App+for+sharing+recommendations+with+your+friends.+Pretty+impressive%21%0D%0A%0D%0AThe+LoveThis+iPhone+App+enables+users+to+share+product+and+venue+recom" title="Digg this post : LoveThis iPhone App"><span class="head">Digg this post</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="facebook" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Flovethis-iphone-app%2F2012%2F04%2F&amp;t=LoveThis+iPhone+App" title="Recommend this post : LoveThis iPhone App on Facebook"><span class="head">Recommend on Facebook</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="reddit" href="http://www.reddit.com/submit?url=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Flovethis-iphone-app%2F2012%2F04%2F&amp;title=LoveThis+iPhone+App" title="Share this post : LoveThis iPhone App on Reddit"><span class="head">share via Reddit</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="stumble" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Flovethis-iphone-app%2F2012%2F04%2F&amp;title=LoveThis+iPhone+App" title="Share this post : LoveThis iPhone App with Stumblers"><span class="head">Share with Stumblers</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="twitter" href="http://twitter.com/home/?status=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Flovethis-iphone-app%2F2012%2F04%2F" title="Tweet this post : LoveThis iPhone App on Twitter"><span class="head">Tweet about it</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="" class="rss" href="http://www.nickkuh.com/iphone/lovethis-iphone-app/2012/04/feed" title="Follow this post : LoveThis iPhone App comments"><span class="head">Subscribe to the comments on this post</span></a></li>
</ul>
<div class="clean"></div>
]]></content:encoded>
			<wfw:commentRss>http://www.nickkuh.com/iphone/lovethis-iphone-app/2012/04/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Birthday Reminder for Facebook iPhone App</title>
		<link>http://www.nickkuh.com/iphone/birthday-reminder-for-iphone/2012/02/</link>
		<comments>http://www.nickkuh.com/iphone/birthday-reminder-for-iphone/2012/02/#comments</comments>
		<pubDate>Mon, 20 Feb 2012 17:16:01 +0000</pubDate>
		<dc:creator>Nick Kuh</dc:creator>
				<category><![CDATA[Apps]]></category>
		<category><![CDATA[Book]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Portfolio]]></category>

		<guid isPermaLink="false">http://www.nickkuh.com/?p=1374</guid>
		<description><![CDATA[Never forget a Birthday again!]]></description>
				<content:encoded><![CDATA[<p><a title="Birthday Reminder for Facebook iPhone App AppStore Link" href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=578563350&amp;mt=8" target="_blank"><img style="border: 0pt none; margin: 0px;" src="http://www.nickkuh.com/wp-includes/images/appstoreBadge.png" alt="" width="173" height="65" /></a></p>
<p>Birthday Reminder for Facebook is a beautiful and useful iPhone App that will stop you from forgetting your friend and family birthdays ever again!</p>
<p>I built Birthday Reminder over a period of 5 development days as part of a new book that I&#8217;m currently writing for <a href="https://www.apress.com/index.php/author/author/view/id/3767">Apress/Friends of Ed</a> publishers. The concept of the book is to teach new iOS programmers how to develop iPhone Apps by building an app from start to finish! It&#8217;s very hand-on and a great way to learn Objective C programming for iPhone.</p>
<p>The book (which you can <a href="http://www.amazon.co.uk/Foundation-iPhone-App-Development-Build/dp/1430243740/">pre-order here</a>) is titled <a href="http://www.amazon.co.uk/Foundation-iPhone-App-Development-Build/dp/1430243740/">Foundation iPhone App Development: Build an iPhone App in 5 Days with iOS SDK</a> and will be published in September 2012. It covers all kinds of iOS and Xcode features from Storyboarding to Core Data. At the moment it&#8217;s all iOS 5 but assuming WWDC announces iOS 6 this summer you can bet that the book will also cover new iOS 6 APIs.</p>

<a href='http://www.nickkuh.com/iphone/birthday-reminder-for-iphone/2012/02/attachment/birthday-reminder-for-facebook-birthday-detail-screen/' title='Birthday Reminder for Facebook Birthday Detail Screen'><img width="150" height="225" src="http://www.nickkuh.com/wp-content/uploads/2012/02/birthday-reminder-for-facebook-birthday-detail-screen-150x225.jpg" class="attachment-thumbnail" alt="Birthday Reminder for Facebook Birthday Detail Screen" /></a>
<a href='http://www.nickkuh.com/iphone/birthday-reminder-for-iphone/2012/02/attachment/birthday-reminder-for-facebook-home-screen/' title='Birthday Reminder for Facebook Home Screen'><img width="150" height="225" src="http://www.nickkuh.com/wp-content/uploads/2012/02/birthday-reminder-for-facebook-home-screen-150x225.jpg" class="attachment-thumbnail" alt="Birthday Reminder for Facebook Home Screen" /></a>
<a href='http://www.nickkuh.com/iphone/birthday-reminder-for-iphone/2012/02/attachment/birthday-reminder-for-facebook-import-screen/' title='Birthday Reminder for Facebook Import Screen'><img width="150" height="225" src="http://www.nickkuh.com/wp-content/uploads/2012/02/birthday-reminder-for-facebook-import-screen-150x225.jpg" class="attachment-thumbnail" alt="Birthday Reminder for Facebook Import Screen" /></a>
<a href='http://www.nickkuh.com/iphone/birthday-reminder-for-iphone/2012/02/attachment/birthday-reminder-for-facebook-reminder-notification/' title='Birthday Reminder for Facebook Reminder Notification'><img width="150" height="225" src="http://www.nickkuh.com/wp-content/uploads/2012/02/birthday-reminder-for-facebook-reminder-notification-150x225.jpg" class="attachment-thumbnail" alt="Birthday Reminder for Facebook Reminder Notification" /></a>

<p>Birthday Reminder works even when you&#8217;re offline and will fire local birthday reminder notifications based on your settings.</p>
<p>Import friends birthdays straight from Facebook or the iPhone&#8217;s native address book. It&#8217;s really fast and intuitive to use.</p>
<p>I&#8217;ve featured the app&#8217;s birthday cake user-interface and icon design in a number of presentations recently on How to Make Lickable Apps! I&#8217;m right in the middle of writing chapter 9 of my book which is all about iOS skinning techniques including the iOS 5 Appearance APIs which are a really awesome new addition to iOS SDK.</p>
<ul class="socialwrap size32 row">
<li class="iconOnly"><a rel="nofollow" target="_blank" class="delicious" href="http://delicious.com/post?url=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Fbirthday-reminder-for-iphone%2F2012%2F02%2F&amp;title=Birthday+Reminder+for+Facebook+iPhone+App" title="Bookmark this post : Birthday Reminder for Facebook iPhone App on Delicious"><span class="head">Bookmark on Delicious</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="digg" href="http://digg.com/submit?url=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Fbirthday-reminder-for-iphone%2F2012%2F02%2F&amp;title=Birthday+Reminder+for+Facebook+iPhone+App&amp;bodytext=%0D%0A%0D%0ABirthday+Reminder+for+Facebook+is+a+beautiful+and+useful+iPhone+App+that+will+stop+you+from+forgetting+your+friend+and+family+birthdays+ever+again%21%0D%0A%0D%0AI+built+Birthday+Reminder+over+a+period+of+5+development+days+as+part+of+a+new+book+that+I%27m+currently+writing+for+Apress%2FFriends+of+Ed+publishers.+The+concept+of+th" title="Digg this post : Birthday Reminder for Facebook iPhone App"><span class="head">Digg this post</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="facebook" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Fbirthday-reminder-for-iphone%2F2012%2F02%2F&amp;t=Birthday+Reminder+for+Facebook+iPhone+App" title="Recommend this post : Birthday Reminder for Facebook iPhone App on Facebook"><span class="head">Recommend on Facebook</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="reddit" href="http://www.reddit.com/submit?url=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Fbirthday-reminder-for-iphone%2F2012%2F02%2F&amp;title=Birthday+Reminder+for+Facebook+iPhone+App" title="Share this post : Birthday Reminder for Facebook iPhone App on Reddit"><span class="head">share via Reddit</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="stumble" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Fbirthday-reminder-for-iphone%2F2012%2F02%2F&amp;title=Birthday+Reminder+for+Facebook+iPhone+App" title="Share this post : Birthday Reminder for Facebook iPhone App with Stumblers"><span class="head">Share with Stumblers</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="twitter" href="http://twitter.com/home/?status=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Fbirthday-reminder-for-iphone%2F2012%2F02%2F" title="Tweet this post : Birthday Reminder for Facebook iPhone App on Twitter"><span class="head">Tweet about it</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="" class="rss" href="http://www.nickkuh.com/iphone/birthday-reminder-for-iphone/2012/02/feed" title="Follow this post : Birthday Reminder for Facebook iPhone App comments"><span class="head">Subscribe to the comments on this post</span></a></li>
</ul>
<div class="clean"></div>
]]></content:encoded>
			<wfw:commentRss>http://www.nickkuh.com/iphone/birthday-reminder-for-iphone/2012/02/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Macworld Express iPad App</title>
		<link>http://www.nickkuh.com/iphone/macworld-express-ipad-app/2011/08/</link>
		<comments>http://www.nickkuh.com/iphone/macworld-express-ipad-app/2011/08/#comments</comments>
		<pubDate>Fri, 19 Aug 2011 17:51:36 +0000</pubDate>
		<dc:creator>Nick Kuh</dc:creator>
				<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Portfolio]]></category>

		<guid isPermaLink="false">http://www.nickkuh.com/?p=1334</guid>
		<description><![CDATA[iPad App for Macworld, the world's best-selling Apple magazine]]></description>
				<content:encoded><![CDATA[<p>Working for Grapple Mobile, I was contracted to develop Macworld Express iPad App for IDG. IDG provided the designs, Grapple project managed the development and I provided the iOS development expertise.</p>
<p>Macworld is the world&#8217;s best-selling Apple magazine and creating a native iPad app enabled their users to read, save and digest Apple news and reviews even when they&#8217;re offline.</p>

<a href='http://www.nickkuh.com/iphone/macworld-express-ipad-app/2011/08/attachment/macworld-express-saved-articles/' title='Macworld Express iPad App Saved Articles'><img width="225" height="168" src="http://www.nickkuh.com/wp-content/uploads/2012/04/macworld-express-saved-articles-225x168.jpg" class="attachment-thumbnail" alt="Macworld Express iPad App Saved Articles" /></a>
<a href='http://www.nickkuh.com/iphone/macworld-express-ipad-app/2011/08/attachment/macworld-express-master-class-articles/' title='Macworld Express iPad App Master Class'><img width="225" height="168" src="http://www.nickkuh.com/wp-content/uploads/2012/04/macworld-express-master-class-articles-225x168.jpg" class="attachment-thumbnail" alt="Macworld Express iPad App Master Class" /></a>
<a href='http://www.nickkuh.com/iphone/macworld-express-ipad-app/2011/08/attachment/macworld-express-saved-articles-edit/' title='Macworld Express iPad App Edit Saved Articles'><img width="225" height="168" src="http://www.nickkuh.com/wp-content/uploads/2012/04/macworld-express-saved-articles-edit-225x168.jpg" class="attachment-thumbnail" alt="Macworld Express iPad App Edit Saved Articles" /></a>

<p>Macworld Express allows users to customise their own app homescreen, selecting and prioritising between Macworld news, reviews, blogs and master classes.</p>
<p>Spot a Macworld article you want to read later? Tap and save your favourite tips, reviews and news. Perfect for train journeys even when 3G fails you!</p>
<p><a title="Macworld Express iPad App AppStore Link" href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=448671184&amp;mt=8" target="_blank"><img style="border: 0pt none; margin: 0px;" src="http://www.nickkuh.com/wp-includes/images/appstoreBadge.png" alt="" width="173" height="65" /></a></p>
<ul class="socialwrap size32 row">
<li class="iconOnly"><a rel="nofollow" target="_blank" class="delicious" href="http://delicious.com/post?url=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Fmacworld-express-ipad-app%2F2011%2F08%2F&amp;title=Macworld+Express+iPad+App" title="Bookmark this post : Macworld Express iPad App on Delicious"><span class="head">Bookmark on Delicious</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="digg" href="http://digg.com/submit?url=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Fmacworld-express-ipad-app%2F2011%2F08%2F&amp;title=Macworld+Express+iPad+App&amp;bodytext=Working+for+Grapple+Mobile%2C+I+was+contracted+to+develop+Macworld+Express+iPad+App+for+IDG.+IDG+provided+the+designs%2C+Grapple+project+managed+the+development+and+I+provided+the+iOS+development+expertise.%0D%0A%0D%0AMacworld+is+the+world%27s+best-selling+Apple+magazine+and+creating+a+native+iPad+app+enabled+their+users+to+read%2C+sa" title="Digg this post : Macworld Express iPad App"><span class="head">Digg this post</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="facebook" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Fmacworld-express-ipad-app%2F2011%2F08%2F&amp;t=Macworld+Express+iPad+App" title="Recommend this post : Macworld Express iPad App on Facebook"><span class="head">Recommend on Facebook</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="reddit" href="http://www.reddit.com/submit?url=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Fmacworld-express-ipad-app%2F2011%2F08%2F&amp;title=Macworld+Express+iPad+App" title="Share this post : Macworld Express iPad App on Reddit"><span class="head">share via Reddit</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="stumble" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Fmacworld-express-ipad-app%2F2011%2F08%2F&amp;title=Macworld+Express+iPad+App" title="Share this post : Macworld Express iPad App with Stumblers"><span class="head">Share with Stumblers</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="twitter" href="http://twitter.com/home/?status=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Fmacworld-express-ipad-app%2F2011%2F08%2F" title="Tweet this post : Macworld Express iPad App on Twitter"><span class="head">Tweet about it</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="" class="rss" href="http://www.nickkuh.com/iphone/macworld-express-ipad-app/2011/08/feed" title="Follow this post : Macworld Express iPad App comments"><span class="head">Subscribe to the comments on this post</span></a></li>
</ul>
<div class="clean"></div>
]]></content:encoded>
			<wfw:commentRss>http://www.nickkuh.com/iphone/macworld-express-ipad-app/2011/08/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tap to Chat 2 for iPhone and iPad</title>
		<link>http://www.nickkuh.com/iphone/tap-to-chat-facebook-chat-google-talk/2011/05/</link>
		<comments>http://www.nickkuh.com/iphone/tap-to-chat-facebook-chat-google-talk/2011/05/#comments</comments>
		<pubDate>Mon, 23 May 2011 14:26:44 +0000</pubDate>
		<dc:creator>Nick Kuh</dc:creator>
				<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Portfolio]]></category>

		<guid isPermaLink="false">http://www.nickkuh.com/?p=849</guid>
		<description><![CDATA[Facebook Chat and Google Talk on the go!]]></description>
				<content:encoded><![CDATA[<p><a title="Tap to Chat 2 AppStore Link" href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=437786313&#038;mt=8" target="_blank"><img style="border: 0pt none; margin: 0px;" src="http://www.nickkuh.com/wp-includes/images/appstoreBadge.png" alt="" width="173" height="65" /></a></p>
<p>After 3 very intense weeks of development and design <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=437786313&amp;mt=8">Tap to Chat 2</a> has finally launched!</p>
<p><a href="http://www.hiddenmemory.co.uk">Chris Ross</a> and I started the Tap to Chat adventure back in November last year.  As two Indie iPhone Developers we decided to team-up  and build an Instant Messenger app for Facebook users on iPhone and  iPad. The <a href="http://www.nickkuh.com/iphone/facebook-chat-on-ipad/2010/12/">original version</a> launched just before Christmas 2010. Since then Tap to Chat has seen over  half a million downloads!</p>
<p>On  the back of our success with Tap to Chat, Chris and I have formed a new  company &#8211; <a href="http://www.osmosisapps.com">Osmosis Apps</a> &#8211; the primary goal being to make software that  focuses on great user experience.</p>
<p>Tap to Chat 2 has been written from  scratch and includes a brand new, beautiful, pixel-perfect interface. Tap to  Chat 2 is: super-simple to use and blisteringly fast to connect all your  Facebook Chat and Google Talk friends. We&#8217;ve laboured over every detail  and included accessibility support for visually impaired users and  VoiceOver support. An all-round great user experience.</p>
<p>As part of our launch, I had a lot of fun creating a demo video of the software with a well-known love story theme. Take a look:</p>
<p><iframe src="http://player.vimeo.com/video/23931323?title=0&#038;byline=0&#038;portrait=0" width="500" height="375" frameborder="0"></iframe></p>
<p>Tap to Chat 2 was approved by Apple on Friday  night (20th May). In just a few days it has already climbed into the top 25  Social Networking apps in the UK, the US and many other countries.</p>
<p>For all the features and details about Tap to Chat 2 head over to our new company site &#8211; <a href="http://www.osmosisapps.com">www.osmosisapps.com</a>.<br />
Here are a few screen-grabs of Tap to Chat 2 in action on iPhone and iPad:<br />

<a href='http://www.nickkuh.com/iphone/tap-to-chat-facebook-chat-google-talk/2011/05/attachment/tap-to-chat-on-iphone-screenshot1/' title='tap-to-chat-on-iphone-screenshot1'><img width="156" height="225" src="http://www.nickkuh.com/wp-content/uploads/2011/05/tap-to-chat-on-iphone-screenshot1-156x225.jpg" class="attachment-thumbnail" alt="tap-to-chat-on-iphone-screenshot1" /></a>
<a href='http://www.nickkuh.com/iphone/tap-to-chat-facebook-chat-google-talk/2011/05/attachment/tap-to-chat-on-iphone-screenshot2/' title='tap-to-chat-on-iphone-screenshot2'><img width="156" height="225" src="http://www.nickkuh.com/wp-content/uploads/2011/05/tap-to-chat-on-iphone-screenshot2-156x225.jpg" class="attachment-thumbnail" alt="tap-to-chat-on-iphone-screenshot2" /></a>
<a href='http://www.nickkuh.com/iphone/tap-to-chat-facebook-chat-google-talk/2011/05/attachment/tap-to-chat-on-iphone-screenshot3/' title='tap-to-chat-on-iphone-screenshot3'><img width="156" height="225" src="http://www.nickkuh.com/wp-content/uploads/2011/05/tap-to-chat-on-iphone-screenshot3-156x225.jpg" class="attachment-thumbnail" alt="tap-to-chat-on-iphone-screenshot3" /></a>
<a href='http://www.nickkuh.com/iphone/tap-to-chat-facebook-chat-google-talk/2011/05/attachment/tap-to-chat-on-iphone-screenshot4/' title='tap-to-chat-on-iphone-screenshot4'><img width="156" height="225" src="http://www.nickkuh.com/wp-content/uploads/2011/05/tap-to-chat-on-iphone-screenshot4-156x225.jpg" class="attachment-thumbnail" alt="tap-to-chat-on-iphone-screenshot4" /></a>
<a href='http://www.nickkuh.com/iphone/tap-to-chat-facebook-chat-google-talk/2011/05/attachment/tap-to-chat-on-iphone-why-upgrade4/' title='tap-to-chat-on-iphone-why-upgrade4'><img width="156" height="225" src="http://www.nickkuh.com/wp-content/uploads/2011/05/tap-to-chat-on-iphone-why-upgrade4-156x225.jpg" class="attachment-thumbnail" alt="tap-to-chat-on-iphone-why-upgrade4" /></a>
<a href='http://www.nickkuh.com/iphone/tap-to-chat-facebook-chat-google-talk/2011/05/attachment/tap-to-chat-on-ipad-screenshot1/' title='tap-to-chat-on-ipad-screenshot1'><img width="225" height="168" src="http://www.nickkuh.com/wp-content/uploads/2011/05/tap-to-chat-on-ipad-screenshot1-225x168.jpg" class="attachment-thumbnail" alt="tap-to-chat-on-ipad-screenshot1" /></a>
<a href='http://www.nickkuh.com/iphone/tap-to-chat-facebook-chat-google-talk/2011/05/attachment/tap-to-chat-on-ipad-screenshot2/' title='tap-to-chat-on-ipad-screenshot2'><img width="225" height="168" src="http://www.nickkuh.com/wp-content/uploads/2011/05/tap-to-chat-on-ipad-screenshot2-225x168.jpg" class="attachment-thumbnail" alt="tap-to-chat-on-ipad-screenshot2" /></a>
<a href='http://www.nickkuh.com/iphone/tap-to-chat-facebook-chat-google-talk/2011/05/attachment/tap-to-chat-on-ipad-screenshot3/' title='tap-to-chat-on-ipad-screenshot3'><img width="225" height="168" src="http://www.nickkuh.com/wp-content/uploads/2011/05/tap-to-chat-on-ipad-screenshot3-225x168.jpg" class="attachment-thumbnail" alt="tap-to-chat-on-ipad-screenshot3" /></a>
<a href='http://www.nickkuh.com/iphone/tap-to-chat-facebook-chat-google-talk/2011/05/attachment/tap-to-chat-on-ipad-screenshot4/' title='tap-to-chat-on-ipad-screenshot4'><img width="225" height="168" src="http://www.nickkuh.com/wp-content/uploads/2011/05/tap-to-chat-on-ipad-screenshot4-225x168.jpg" class="attachment-thumbnail" alt="tap-to-chat-on-ipad-screenshot4" /></a>
<a href='http://www.nickkuh.com/iphone/tap-to-chat-facebook-chat-google-talk/2011/05/attachment/tap-to-chat-on-ipad-upgrade3/' title='tap-to-chat-on-ipad-upgrade3'><img width="225" height="168" src="http://www.nickkuh.com/wp-content/uploads/2011/05/tap-to-chat-on-ipad-upgrade3-225x168.jpg" class="attachment-thumbnail" alt="tap-to-chat-on-ipad-upgrade3" /></a>

</p>
<ul class="socialwrap size32 row">
<li class="iconOnly"><a rel="nofollow" target="_blank" class="delicious" href="http://delicious.com/post?url=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Ftap-to-chat-facebook-chat-google-talk%2F2011%2F05%2F&amp;title=Tap+to+Chat+2+for+iPhone+and+iPad" title="Bookmark this post : Tap to Chat 2 for iPhone and iPad on Delicious"><span class="head">Bookmark on Delicious</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="digg" href="http://digg.com/submit?url=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Ftap-to-chat-facebook-chat-google-talk%2F2011%2F05%2F&amp;title=Tap+to+Chat+2+for+iPhone+and+iPad&amp;bodytext=%0D%0A%0D%0AAfter+3+very+intense+weeks+of+development+and+design+Tap+to+Chat+2+has+finally+launched%21%0D%0A%0D%0AChris+Ross+and+I+started+the+Tap+to+Chat+adventure+back+in+November+last+year.+%C2%A0As+two+Indie+iPhone+Developers+we+decided+to+team-up++and+build+an+Instant+Messenger+app+for+Facebook+users+on+iPhone+and++iPad.%C2%A0The+original+" title="Digg this post : Tap to Chat 2 for iPhone and iPad"><span class="head">Digg this post</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="facebook" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Ftap-to-chat-facebook-chat-google-talk%2F2011%2F05%2F&amp;t=Tap+to+Chat+2+for+iPhone+and+iPad" title="Recommend this post : Tap to Chat 2 for iPhone and iPad on Facebook"><span class="head">Recommend on Facebook</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="reddit" href="http://www.reddit.com/submit?url=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Ftap-to-chat-facebook-chat-google-talk%2F2011%2F05%2F&amp;title=Tap+to+Chat+2+for+iPhone+and+iPad" title="Share this post : Tap to Chat 2 for iPhone and iPad on Reddit"><span class="head">share via Reddit</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="stumble" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Ftap-to-chat-facebook-chat-google-talk%2F2011%2F05%2F&amp;title=Tap+to+Chat+2+for+iPhone+and+iPad" title="Share this post : Tap to Chat 2 for iPhone and iPad with Stumblers"><span class="head">Share with Stumblers</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="twitter" href="http://twitter.com/home/?status=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Ftap-to-chat-facebook-chat-google-talk%2F2011%2F05%2F" title="Tweet this post : Tap to Chat 2 for iPhone and iPad on Twitter"><span class="head">Tweet about it</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="" class="rss" href="http://www.nickkuh.com/iphone/tap-to-chat-facebook-chat-google-talk/2011/05/feed" title="Follow this post : Tap to Chat 2 for iPhone and iPad comments"><span class="head">Subscribe to the comments on this post</span></a></li>
</ul>
<div class="clean"></div>
]]></content:encoded>
			<wfw:commentRss>http://www.nickkuh.com/iphone/tap-to-chat-facebook-chat-google-talk/2011/05/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>A ‘Paperless Conference’ App for iPod Touch</title>
		<link>http://www.nickkuh.com/iphone/conference-meetingnetworking-ipodiphone-app-for-novartis-global/2011/04/</link>
		<comments>http://www.nickkuh.com/iphone/conference-meetingnetworking-ipodiphone-app-for-novartis-global/2011/04/#comments</comments>
		<pubDate>Thu, 07 Apr 2011 11:55:44 +0000</pubDate>
		<dc:creator>Nick Kuh</dc:creator>
				<category><![CDATA[Apps]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Portfolio]]></category>

		<guid isPermaLink="false">http://www.nickkuh.com/?p=815</guid>
		<description><![CDATA[Client: West End / Novartis Global]]></description>
				<content:encoded><![CDATA[<p>Commissioned by West End Studios, I led the iOS Development of a feature-rich conference meeting application for Novartis Global. The app enabled delegates to view their personalised conference diary and network with other 450 delegates and speakers.</p>
<p>I built the messaging system for the iPod app using Apple&#8217;s Push Notification technology and a custom local/server cache syncing solution. Although initially the messaging feature was a low priority for the app, it ultimately rolled out into multiple features: Private Messaging, Help Desk Chat, and Ask the Presenter a Question. </p>
<div id="attachment_819" class="wp-caption aligncenter" style="width: 310px"><a rel="attachment wp-att-819" href="http://www.nickkuh.com/iphone/conference-meetingnetworking-ipodiphone-app-for-novartis-global/2011/04/attachment/img_0848/"><img class="size-medium wp-image-819" title="450 iPods" src="http://www.nickkuh.com/wp-content/uploads/2011/04/IMG_0848-300x224.jpg" alt="" width="300" height="224" /></a><p class="wp-caption-text">450 iPods await collection!</p></div>
<p>Another great feature of the app were the maps. Google Maps wasn&#8217;t a viable option as we wanted delegates to be able to access the maps even when offline and not on site. I developed a PDF rendering solution for this which also enabled delegates to find locations of any event in their diary.</p>
<p>The app enabled Novartis to host a &#8216;paperless conference&#8217;. No print outs were distributed throughout the sessions, plenaries or exhibitions. Instead all events were accessible through the iPod app and delegates could access any event documents directly and &#8216;send to my email&#8217;. Both a cost saving in terms of printing and a green solution.</p>
<p>A substantial effort was made during the development to ensure that the app would run most features offline. With 400+ iPods simultaneously attempting to connect to the wi-fi you tend to run into problems delivering a reliable wireless network. Our app regularly synced with the server and then locally cached all data and images (using Apple&#8217;s CoreData framework). The guys at West End implemented a streaming media server to deliver conference movies directly to the iPods throughout the event. However, we had a fallback option whereby even the movies would get cached and run locally if requested by the CMS. This was ideal for help videos for example. The flip-side of data caching is of course the security implications. So we implemented a feature into the CMS that would trigger the iPod to instantly clear the local cache and log the user out of the device remotely.</p>
<p>I was at the conference and able to see the software in action. The feedback was incredibly positive. Even the less technically enthusiastic and more sceptical delegates were won over by the end of the three days.</p>
<p>Martin de Planta, head of Global Learning @ Novartis kindly added this recommendation to my <a href="http://www.linkedin.com/in/nickkuh">LinkedIn profile</a>:</p>
<blockquote><p>Nick led the development of an innovative, cost effective and dynamic meeting app. A consummate professional he was able to take a concept and turn into a reality where significantly bigger, household names and highly regarded institutions were not! Do not under-estimate the capabilities of this man. World class was how our most senior executives described his work.</p></blockquote>
<ul class="socialwrap size32 row">
<li class="iconOnly"><a rel="nofollow" target="_blank" class="delicious" href="http://delicious.com/post?url=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Fconference-meetingnetworking-ipodiphone-app-for-novartis-global%2F2011%2F04%2F&amp;title=A+%26%238216%3BPaperless+Conference%26%238217%3B+App+for+iPod+Touch" title="Bookmark this post : A &#8216;Paperless Conference&#8217; App for iPod Touch on Delicious"><span class="head">Bookmark on Delicious</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="digg" href="http://digg.com/submit?url=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Fconference-meetingnetworking-ipodiphone-app-for-novartis-global%2F2011%2F04%2F&amp;title=A+%26%238216%3BPaperless+Conference%26%238217%3B+App+for+iPod+Touch&amp;bodytext=Commissioned+by+West+End+Studios%2C+I+led+the+iOS+Development+of+a+feature-rich+conference+meeting+application+for+Novartis+Global.+The+app+enabled+delegates+to+view+their+personalised+conference+diary+and+network+with+other+450+delegates+and+speakers.%0D%0A%0D%0AI+built+the+messaging+system+for+the+iPod+app+using+Apple%27s+Push+N" title="Digg this post : A &#8216;Paperless Conference&#8217; App for iPod Touch"><span class="head">Digg this post</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="facebook" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Fconference-meetingnetworking-ipodiphone-app-for-novartis-global%2F2011%2F04%2F&amp;t=A+%26%238216%3BPaperless+Conference%26%238217%3B+App+for+iPod+Touch" title="Recommend this post : A &#8216;Paperless Conference&#8217; App for iPod Touch on Facebook"><span class="head">Recommend on Facebook</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="reddit" href="http://www.reddit.com/submit?url=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Fconference-meetingnetworking-ipodiphone-app-for-novartis-global%2F2011%2F04%2F&amp;title=A+%26%238216%3BPaperless+Conference%26%238217%3B+App+for+iPod+Touch" title="Share this post : A &#8216;Paperless Conference&#8217; App for iPod Touch on Reddit"><span class="head">share via Reddit</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="stumble" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Fconference-meetingnetworking-ipodiphone-app-for-novartis-global%2F2011%2F04%2F&amp;title=A+%26%238216%3BPaperless+Conference%26%238217%3B+App+for+iPod+Touch" title="Share this post : A &#8216;Paperless Conference&#8217; App for iPod Touch with Stumblers"><span class="head">Share with Stumblers</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="_blank" class="twitter" href="http://twitter.com/home/?status=http%3A%2F%2Fwww.nickkuh.com%2Fiphone%2Fconference-meetingnetworking-ipodiphone-app-for-novartis-global%2F2011%2F04%2F" title="Tweet this post : A &#8216;Paperless Conference&#8217; App for iPod Touch on Twitter"><span class="head">Tweet about it</span></a></li>
<li class="iconOnly"><a rel="nofollow" target="" class="rss" href="http://www.nickkuh.com/iphone/conference-meetingnetworking-ipodiphone-app-for-novartis-global/2011/04/feed" title="Follow this post : A &#8216;Paperless Conference&#8217; App for iPod Touch comments"><span class="head">Subscribe to the comments on this post</span></a></li>
</ul>
<div class="clean"></div>
]]></content:encoded>
			<wfw:commentRss>http://www.nickkuh.com/iphone/conference-meetingnetworking-ipodiphone-app-for-novartis-global/2011/04/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
