<?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:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>blog.mugunthkumar.com</title>
	
	<link>http://blog.mugunthkumar.com</link>
	<description>Blog of iPhone and Windows Developer</description>
	<lastBuildDate>Sun, 07 Mar 2010 06:14:08 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</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/MugunthKumar" /><feedburner:info uri="mugunthkumar" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license><feedburner:emailServiceId>MugunthKumar</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>iPhone Tutorial: Elegant way to send formatted In-App email</title>
		<link>http://feedproxy.google.com/~r/MugunthKumar/~3/ArqMbDS1Ri0/</link>
		<comments>http://blog.mugunthkumar.com/coding/iphone-tutorial-elegant-way-to-send-formatted-in-app-email/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 06:14:08 +0000</pubDate>
		<dc:creator>Mugunth Kumar</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[clean-code]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[iphone dev]]></category>
		<category><![CDATA[objective c]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://blog.mugunthkumar.com/?p=705</guid>
		<description><![CDATA[By now, most of you know how to send emails using the Message UI framework without quitting the app. In  this tutorial, we will briefly discuss the techniques for sending a HTML formatted email with user generated content. Though sending a HTML formatted email is as easy as setting the option to HTML
[picker setMessageBody:emailBody [...]


Related posts:<ol><li><a href='http://blog.mugunthkumar.com/coding/iphone-tutorial-in-app-email/' rel='bookmark' title='Permanent Link: iPhone Tutorial &#8211; In-App Email'>iPhone Tutorial &#8211; In-App Email</a> <small> codeproject Sending an email from your iPhone application is...</small></li>
<li><a href='http://blog.mugunthkumar.com/coding/iphone-tutorial-enabling-reviewers-to-use-your-in-app-purchases-for-free/' rel='bookmark' title='Permanent Link: iPhone Tutorial &#8211; Enabling reviewers to use your In-App purchases for free'>iPhone Tutorial &#8211; Enabling reviewers to use your In-App purchases for free</a> <small>In-App purchases is a great way for developers to upsell...</small></li>
<li><a href='http://blog.mugunthkumar.com/coding/iphone-tutorial-uisearchdisplaycontroller-with-nspredicate/' rel='bookmark' title='Permanent Link: iPhone Tutorial &#8211; UISearchDisplayController with NSPredicate'>iPhone Tutorial &#8211; UISearchDisplayController with NSPredicate</a> <small>Though UISearchDisplayController is seemingly easy (and yes it&#8217;s easy), apart...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>By now, most of you know <a href="http://blog.mugunthkumar.com/coding/iphone-tutorial-in-app-email/">how to send emails using the Message UI framework</a> without quitting the app. In  this tutorial, we will briefly discuss the techniques for sending a HTML formatted email with user generated content. Though sending a HTML formatted email is as easy as setting the option to HTML</p>
<blockquote><p><code>[picker setMessageBody:emailBody isHTML:YES];</code></p></blockquote>
<p>There are some cases that this method that this method doesn&#8217;t take care of. In short, this method works great for sending &#8220;Tell a friend about this app&#8221; email. But if your app needs much more sophistication, especially, if it needs to email data created by the user, you can follow the approach I suggest. Using this method, you can also adapt your code for International support and send the same email in multiple languages without any &#8220;<a href="http://en.wikipedia.org/wiki/Hard_coding">hard-coding</a>&#8221;</p>
<p>Though the method promises some great features, it is ridiculously simple. <img src='http://blog.mugunthkumar.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Step 1:</h2>
<p>Create a HTML File with the contents of your email and add it to your project. You should <strong>NOT </strong>create any css or link it to any external CSS files. All your styles whether embedded withing the &lt;STYLE&gt; tag or kept as a separate CSS file will mostly be stripped by email clients. The reason could be because email clients don&#8217;t want your CSS to mess around with their client CSS. Read <a href="http://css-discuss.incutio.com/?page=StyleInEmail">this</a> article for more details. A sample is given below.</p>
<h2>Step 2:</h2>
<p>Insert placeholder markers within your HTML file. Your HTML file should look something like this.<br />
<code><br />
&lt;font size = '1' color= "#222222" style = "font-family: 'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial;"&gt;&lt;i&gt;<strong>//TEXT_PLACEHOLDER//</strong>&lt;/i&gt;&lt;/font&gt;<br />
&lt;font size = '2' color= "#000000" style = "font-family: 'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial;"&gt; Have a great day! &lt;br/&gt;<strong>//FRIENDNAME_PLACEHOLDER// </strong>&lt;br/&gt;&lt;/font&gt;<br />
</code><br />
The bold markers are the placeholders. You can assume them to be variables in the email. We will be replacing them later.</p>
<h2>Step 3:</h2>
<p>Do exactly the same steps for sending an in app email explained in one of my <a href="http://blog.mugunthkumar.com/coding/iphone-tutorial-in-app-email/"> previous tutorial</a>, but rather than hardcoding the email body like this,<br />
<code><br />
NSString *emailBody =<br />
[NSString stringWithFormat:@"%@\n\n<br />
Sent from <a href="%@">MyGreatApp</a> on iPhone. <a href="%@">Download</a> yours from AppStore now!<br />
", content, pageLink, iTunesLink];</code><br />
Read it from your HTML File you created in Step 2.<br />
<code><br />
NSString *langString = [[userDefaults dictionaryRepresentation] objectForKey:@"NSLocaleCode"];<br />
NSString *emailFileName = [NSString stringWithFormat:@"email_%@.html", langString];<br />
NSString *emailFilePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent: emailFileName];<br />
NSString *body = [NSString stringWithContentsOfFile:emailFilePath encoding:NSUTF8StringEncoding error:nil];<br />
</code></p>
<p>Note that, I&#8217;m appending the locale code with the email filename. That means you should create your email file by name email_en_US.html and similarly for other language files. </p>
<h2>Step 4:</h2>
<p>Replace placeholder texts with your contents generated within the app.<br />
<code><br />
body = [body stringByReplacingOccurrencesOfString:@"//TEXT_PLACEHOLDER//" withString:myText];<br />
body = [body stringByReplacingOccurrencesOfString:@"//FRIENDNAME_PLACEHOLDER//" withString:myFriendName];<br />
</code></p>
<p>The values myText and myFriendName should be passed to this email function.</p>
<p>With this architecture in place, you can format your email, change language and do a lot more without much changes to your code. After all, writing cleaner code is more important in the long run.</p>
<p>&#8211;<br />
Mugunth</p>
<p><map name='google_ad_map_705_8b86e81420c6776e'>
<area shape='rect' href='http://imageads.googleadservices.com/pagead/imgclick/705?pos=0' coords='1,2,367,28' />
<area shape='rect' href='http://services.google.com/feedback/abg' coords='384,10,453,23'/></map>
<img usemap='#google_ad_map_705_8b86e81420c6776e' border='0' src='http://imageads.googleadservices.com/pagead/ads?format=468x30_aff_img&amp;client=&amp;channel=&amp;output=png&amp;cuid=705&amp;url= http%3A%2F%2Fblog.mugunthkumar.com%2Fcoding%2Fiphone-tutorial-elegant-way-to-send-formatted-in-app-email%2F' /></p>

<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://blog.mugunthkumar.com/coding/iphone-tutorial-elegant-way-to-send-formatted-in-app-email/&amp;title=iPhone+Tutorial%3A+Elegant+way+to+send+formatted+In-App+email" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://blog.mugunthkumar.com/coding/iphone-tutorial-elegant-way-to-send-formatted-in-app-email/&amp;title=iPhone+Tutorial%3A+Elegant+way+to+send+formatted+In-App+email" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://blog.mugunthkumar.com/coding/iphone-tutorial-elegant-way-to-send-formatted-in-app-email/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://blog.mugunthkumar.com/coding/iphone-tutorial-elegant-way-to-send-formatted-in-app-email/&amp;t=iPhone+Tutorial%3A+Elegant+way+to+send+formatted+In-App+email" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=iPhone+Tutorial%3A+Elegant+way+to+send+formatted+In-App+email+-+http://b2l.me/jatxc+" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-mail">
			<a href="mailto:?subject=%22iPhone%20Tutorial%3A%20Elegant%20way%20to%20send%20formatted%20In-App%20email%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22By%20now%2C%20most%20of%20you%20know%20how%20to%20send%20emails%20using%20the%20Message%20UI%20framework%20without%20quitting%20the%20app.%20In%20%20this%20tutorial%2C%20we%20will%20briefly%20discuss%20the%20techniques%20for%20sending%20a%20HTML%20formatted%20email%20with%20user%20generated%20content.%20Though%20sending%20a%20HTML%20formatted%20email%20is%20as%20easy%20as%20setting%20the%20option%20to%20HTM%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://blog.mugunthkumar.com/coding/iphone-tutorial-elegant-way-to-send-formatted-in-app-email/" rel="nofollow" class="external" title="Email this to a friend?">Email this to a friend?</a>
		</li>
		<li class="sexy-comfeed">
			<a href="http://blog.mugunthkumar.com/coding/iphone-tutorial-elegant-way-to-send-formatted-in-app-email/feed" rel="nofollow" class="external" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://blog.mugunthkumar.com/coding/iphone-tutorial-elegant-way-to-send-formatted-in-app-email/&amp;title=iPhone+Tutorial%3A+Elegant+way+to+send+formatted+In-App+email&amp;summary=By%20now%2C%20most%20of%20you%20know%20how%20to%20send%20emails%20using%20the%20Message%20UI%20framework%20without%20quitting%20the%20app.%20In%20%20this%20tutorial%2C%20we%20will%20briefly%20discuss%20the%20techniques%20for%20sending%20a%20HTML%20formatted%20email%20with%20user%20generated%20content.%20Though%20sending%20a%20HTML%20formatted%20email%20is%20as%20easy%20as%20setting%20the%20option%20to%20HTM&amp;source=blog.mugunthkumar.com" rel="nofollow" class="external" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://blog.mugunthkumar.com/coding/iphone-tutorial-elegant-way-to-send-formatted-in-app-email/&amp;title=iPhone+Tutorial%3A+Elegant+way+to+send+formatted+In-App+email" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=iPhone+Tutorial%3A+Elegant+way+to+send+formatted+In-App+email&amp;link=http://blog.mugunthkumar.com/coding/iphone-tutorial-elegant-way-to-send-formatted-in-app-email/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-printfriendly">
			<a href="http://www.printfriendly.com/print?url=http://blog.mugunthkumar.com/coding/iphone-tutorial-elegant-way-to-send-formatted-in-app-email/" rel="nofollow" class="external" title="Send this page to Print Friendly">Send this page to Print Friendly</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

<p>&copy;2010 <a href="http://blog.mugunthkumar.com">blog.mugunthkumar.com</a>. All Rights Reserved.</p>.

<p>Related posts:<ol><li><a href='http://blog.mugunthkumar.com/coding/iphone-tutorial-in-app-email/' rel='bookmark' title='Permanent Link: iPhone Tutorial &#8211; In-App Email'>iPhone Tutorial &#8211; In-App Email</a> <small> codeproject Sending an email from your iPhone application is...</small></li>
<li><a href='http://blog.mugunthkumar.com/coding/iphone-tutorial-enabling-reviewers-to-use-your-in-app-purchases-for-free/' rel='bookmark' title='Permanent Link: iPhone Tutorial &#8211; Enabling reviewers to use your In-App purchases for free'>iPhone Tutorial &#8211; Enabling reviewers to use your In-App purchases for free</a> <small>In-App purchases is a great way for developers to upsell...</small></li>
<li><a href='http://blog.mugunthkumar.com/coding/iphone-tutorial-uisearchdisplaycontroller-with-nspredicate/' rel='bookmark' title='Permanent Link: iPhone Tutorial &#8211; UISearchDisplayController with NSPredicate'>iPhone Tutorial &#8211; UISearchDisplayController with NSPredicate</a> <small>Though UISearchDisplayController is seemingly easy (and yes it&#8217;s easy), apart...</small></li>
</ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/v8v5B4PXwSRyvtRCDJ69INz8F7A/0/da"><img src="http://feedads.g.doubleclick.net/~a/v8v5B4PXwSRyvtRCDJ69INz8F7A/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/v8v5B4PXwSRyvtRCDJ69INz8F7A/1/da"><img src="http://feedads.g.doubleclick.net/~a/v8v5B4PXwSRyvtRCDJ69INz8F7A/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.mugunthkumar.com/coding/iphone-tutorial-elegant-way-to-send-formatted-in-app-email/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://blog.mugunthkumar.com/coding/iphone-tutorial-elegant-way-to-send-formatted-in-app-email/</feedburner:origLink></item>
		<item>
		<title>How to deploy on iPhone OS 3.1.3 without downloading the 2GB SDK</title>
		<link>http://feedproxy.google.com/~r/MugunthKumar/~3/Dsn7Ha_1PlE/</link>
		<comments>http://blog.mugunthkumar.com/tech/how-to-deploy-on-iphone-os-3-1-3-without-downloading-the-2gb-sdk/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 12:51:49 +0000</pubDate>
		<dc:creator>Mugunth Kumar</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[iphone dev]]></category>
		<category><![CDATA[objective c]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[tips n tricks]]></category>

		<guid isPermaLink="false">http://blog.mugunthkumar.com/?p=698</guid>
		<description><![CDATA[Like most of you, I too downloaded the 3.2 beta and was playing around with some iPad stuff. Today when iPhone OS 3.1.3 is released, without second thought, I immediately updated my iPhone. My iPhone being a development device, I understood that I can no longer use the current XCode installation to run apps on [...]


Related posts:<ol><li><a href='http://blog.mugunthkumar.com/tech/is-windows-moribund/' rel='bookmark' title='Permanent Link: Is Windows Moribund?'>Is Windows Moribund?</a> <small>Any firefox user should be knowing about XMarks (formerly FoxMarks)....</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Like most of you, I too downloaded the 3.2 beta and was playing around with some iPad stuff. Today when iPhone OS 3.1.3 is released, without second thought, I immediately updated my iPhone. My iPhone being a development device, I understood that I can no longer use the current XCode installation to run apps on device. When I launched XCode, the Organizer reported,</p>
<p>&#8220;The version of iPhone OS on “ABC’s iPhone” does not match any of the versions of iPhone OS supported for development with this installation of the iPhone SDK&#8221;</p>
<p>So does that mean, you should re-install the SDK? Just like me, you will probably have confusions like,</p>
<blockquote><p>Will installing it corrupt or overwrite your 3.2 beta?</p>
<p>Should I re-install 3.2 beta again?</p></blockquote>
<p>I too had these. Fortunately, I decided to hack things myself and got the 3.1.3 working without downloading the entire SDK. This is how I did. Type the following command into your terminal.</p>
<p><code><br />
ln -s /Developer/Platforms/iPhoneOS.platform/DeviceSupport/3.1.2\ \(7D11\) /Developer/Platforms/iPhoneOS.platform/DeviceSupport/3.1.3<br />
</code></p>
<p>Now quit and restart XCode. Voila! you have effectively &#8220;fooled&#8221; XCode! and you have saved countless hours which you can effectively use on programming another cool app!</p>
<p>Note that this hack will work *any* minor OS updates. However, if you are using a feature specific to the new version you will probably find yourself in trouble. In other words, don&#8217;t try to apply the same technique when 3.2 or 4.0 launches. </p>
<p>&#8211;<br />
Mugunth</p>
<p><map name='google_ad_map_698_8b86e81420c6776e'>
<area shape='rect' href='http://imageads.googleadservices.com/pagead/imgclick/698?pos=0' coords='1,2,367,28' />
<area shape='rect' href='http://services.google.com/feedback/abg' coords='384,10,453,23'/></map>
<img usemap='#google_ad_map_698_8b86e81420c6776e' border='0' src='http://imageads.googleadservices.com/pagead/ads?format=468x30_aff_img&amp;client=&amp;channel=&amp;output=png&amp;cuid=698&amp;url= http%3A%2F%2Fblog.mugunthkumar.com%2Ftech%2Fhow-to-deploy-on-iphone-os-3-1-3-without-downloading-the-2gb-sdk%2F' /></p>

<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://blog.mugunthkumar.com/tech/how-to-deploy-on-iphone-os-3-1-3-without-downloading-the-2gb-sdk/&amp;title=How+to+deploy+on+iPhone+OS+3.1.3+without+downloading+the+2GB+SDK" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://blog.mugunthkumar.com/tech/how-to-deploy-on-iphone-os-3-1-3-without-downloading-the-2gb-sdk/&amp;title=How+to+deploy+on+iPhone+OS+3.1.3+without+downloading+the+2GB+SDK" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://blog.mugunthkumar.com/tech/how-to-deploy-on-iphone-os-3-1-3-without-downloading-the-2gb-sdk/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://blog.mugunthkumar.com/tech/how-to-deploy-on-iphone-os-3-1-3-without-downloading-the-2gb-sdk/&amp;t=How+to+deploy+on+iPhone+OS+3.1.3+without+downloading+the+2GB+SDK" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=How+to+deploy+on+iPhone+OS+3.1.3+without+downloading+the+2GB+SDK+-+http://b2l.me/fe2d6+" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-mail">
			<a href="mailto:?subject=%22How%20to%20deploy%20on%20iPhone%20OS%203.1.3%20without%20downloading%20the%202GB%20SDK%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22Like%20most%20of%20you%2C%20I%20too%20downloaded%20the%203.2%20beta%20and%20was%20playing%20around%20with%20some%20iPad%20stuff.%20Today%20when%20iPhone%20OS%203.1.3%20is%20released%2C%20without%20second%20thought%2C%20I%20immediately%20updated%20my%20iPhone.%20My%20iPhone%20being%20a%20development%20device%2C%20I%20understood%20that%20I%20can%20no%20longer%20use%20the%20current%20XCode%20installation%20to%20%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://blog.mugunthkumar.com/tech/how-to-deploy-on-iphone-os-3-1-3-without-downloading-the-2gb-sdk/" rel="nofollow" class="external" title="Email this to a friend?">Email this to a friend?</a>
		</li>
		<li class="sexy-comfeed">
			<a href="http://blog.mugunthkumar.com/tech/how-to-deploy-on-iphone-os-3-1-3-without-downloading-the-2gb-sdk/feed" rel="nofollow" class="external" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://blog.mugunthkumar.com/tech/how-to-deploy-on-iphone-os-3-1-3-without-downloading-the-2gb-sdk/&amp;title=How+to+deploy+on+iPhone+OS+3.1.3+without+downloading+the+2GB+SDK&amp;summary=Like%20most%20of%20you%2C%20I%20too%20downloaded%20the%203.2%20beta%20and%20was%20playing%20around%20with%20some%20iPad%20stuff.%20Today%20when%20iPhone%20OS%203.1.3%20is%20released%2C%20without%20second%20thought%2C%20I%20immediately%20updated%20my%20iPhone.%20My%20iPhone%20being%20a%20development%20device%2C%20I%20understood%20that%20I%20can%20no%20longer%20use%20the%20current%20XCode%20installation%20to%20&amp;source=blog.mugunthkumar.com" rel="nofollow" class="external" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://blog.mugunthkumar.com/tech/how-to-deploy-on-iphone-os-3-1-3-without-downloading-the-2gb-sdk/&amp;title=How+to+deploy+on+iPhone+OS+3.1.3+without+downloading+the+2GB+SDK" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=How+to+deploy+on+iPhone+OS+3.1.3+without+downloading+the+2GB+SDK&amp;link=http://blog.mugunthkumar.com/tech/how-to-deploy-on-iphone-os-3-1-3-without-downloading-the-2gb-sdk/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-printfriendly">
			<a href="http://www.printfriendly.com/print?url=http://blog.mugunthkumar.com/tech/how-to-deploy-on-iphone-os-3-1-3-without-downloading-the-2gb-sdk/" rel="nofollow" class="external" title="Send this page to Print Friendly">Send this page to Print Friendly</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

<p>&copy;2010 <a href="http://blog.mugunthkumar.com">blog.mugunthkumar.com</a>. All Rights Reserved.</p>.

<p>Related posts:<ol><li><a href='http://blog.mugunthkumar.com/tech/is-windows-moribund/' rel='bookmark' title='Permanent Link: Is Windows Moribund?'>Is Windows Moribund?</a> <small>Any firefox user should be knowing about XMarks (formerly FoxMarks)....</small></li>
</ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/9-AmYGDFm1YyWzYFkDzMsWGUhk4/0/da"><img src="http://feedads.g.doubleclick.net/~a/9-AmYGDFm1YyWzYFkDzMsWGUhk4/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/9-AmYGDFm1YyWzYFkDzMsWGUhk4/1/da"><img src="http://feedads.g.doubleclick.net/~a/9-AmYGDFm1YyWzYFkDzMsWGUhk4/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.mugunthkumar.com/tech/how-to-deploy-on-iphone-os-3-1-3-without-downloading-the-2gb-sdk/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blog.mugunthkumar.com/tech/how-to-deploy-on-iphone-os-3-1-3-without-downloading-the-2gb-sdk/</feedburner:origLink></item>
		<item>
		<title>Save As vs Exporting – Why Apple excels at UI Design?</title>
		<link>http://feedproxy.google.com/~r/MugunthKumar/~3/5qqSJ4siU3w/</link>
		<comments>http://blog.mugunthkumar.com/articles/save-as-vs-exporting-why-apple-excels-at-ui-design/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 16:01:15 +0000</pubDate>
		<dc:creator>Mugunth Kumar</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[ui-design]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://blog.mugunthkumar.com/?p=685</guid>
		<description><![CDATA[Most users think, Mac UI is all about slick graphics and &#8220;cool&#8221; icons. Well, that might be true partially, but user interface design isn&#8217;t about photoshopping or designing cool looking icons. According to Jakob Nielsen, aesthetics is just one aspect of usability. There is much more to user friendly software than just the &#8220;cool factor&#8221; [...]


Related posts:<ol><li><a href='http://blog.mugunthkumar.com/tech/elements-of-usability-design-okcancel-vs-cancelok-is-it-just-a-matter-of-taste/' rel='bookmark' title='Permanent Link: Elements of Usability Design: OK/Cancel vs Cancel/OK &#8211; Is it just a matter of taste?'>Elements of Usability Design: OK/Cancel vs Cancel/OK &#8211; Is it just a matter of taste?</a> <small> codeproject OK, many of the programmers would have been...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Most users think, Mac UI is all about slick graphics and &#8220;cool&#8221; icons. Well, that might be true partially, but user interface design isn&#8217;t about photoshopping or designing cool looking icons. <a href="http://www.useit.com/papers/heuristic/heuristic_list.html">According to Jakob Nielsen</a>, aesthetics is just one aspect of usability. There is much more to user friendly software than just the &#8220;cool factor&#8221; or great icons.</p>
<p>Recently, I was using Microsoft&#8217;s Excel to edit a dozen large  CSV files. As a matter of fact, in Excel,  whenever you save &#8220;anything&#8221; you do as a CSV,  you will practically lose out features that aren&#8217;t supported natively by the underlying file format. For Example, CSV doesn&#8217;t support coloured cells. So when you colour a cell, and try to &#8220;save&#8221; it as a CSV, Excel pops up this dialog.</p>
<div id="attachment_688" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.mugunthkumar.com/wp-content/uploads/save-csv-2.png"><img class="size-medium wp-image-688" title="Saving as CSV loses of &quot;certain&quot; features" src="http://blog.mugunthkumar.com/wp-content/uploads/save-csv-2-300x65.png" alt="" width="300" height="65" /></a><p class="wp-caption-text">Saving as CSV loses of &quot;certain&quot; features</p></div>
<p>When you click &#8220;Yes&#8221;, all that Excel does is to &#8220;export&#8221; whatever content your file has into what the underlying format can support. So since, excel supports coloured cells but CSV doesn&#8217;t it ignores your colouring and proceeds saving it to CSV. Excel even goes one step far and doesn&#8217;t clear the &#8220;dirty flag&#8221; because, Excel hasn&#8217;t saved *every* change you made into the CSV.</p>
<p style="text-align: center;">
<p>Sounds good so far. But what&#8217;s really wrong here? The real problem is, Excel gives you a sense of feel that &#8220;everything&#8221; have been saved and you are safe. Things become bad when you quit Excel. Because the dirty flag isn&#8217;t cleared and the file haven&#8217;t been saved completely, Excel prompts you to &#8220;save&#8221; the file again. Specious, not wanting to take chances, some users like me, save the file again. Again the same thing happens and the end user is still just dumbfounded and asks, But, why the heck should I save it again?</p>
<p style="text-align: left;">Microsoft UI designers have failed to understand the end users. In this case, it&#8217;s because Excel fails to speak the users&#8217; lingo. According to the user, when he &#8220;saves&#8221; a file, he saves a copy and he is contended that he can always re-open when something bad happens. But excel just &#8220;exports&#8221; the file into CSV format and tells the user that it &#8220;saved&#8221; the file (when it in fact didn&#8217;t). As a result what happens is data loss. No not just cell colours, in cases, when the users doesn&#8217;t know that CSV doesn&#8217;t support multiple sheets, excel doesn&#8217;t export (or save) the second sheets data and the user just loses the entire content from the second sheet. Disaster! In one of the cases where I work, a co-worker of mine, has got used to these prompts which Excel shows after you &#8220;save&#8221; your file as CSV</p>
<div id="attachment_687" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.mugunthkumar.com/wp-content/uploads/save-csv.png"><img class="size-medium wp-image-687" title="Prompts user to save the &quot;saved&quot; file again" src="http://blog.mugunthkumar.com/wp-content/uploads/save-csv-300x114.png" alt="" width="300" height="114" /></a><p class="wp-caption-text">Prompts user to save the &quot;saved&quot; file again</p></div>
<p>and he just closes Excel assuming that these prompts are nothing but &#8220;bugs&#8221; in Excel. (Yeah see, he is a half techie and a little knowledge is dangerous.) Things went fine when he didn&#8217;t lose data, but just lost some formatting here and there. But the real disaster happened when his second sheet containing over 1000 lines and 3 hour work was lost.</p>
<p>Now, lets&#8217; see how Numbers, the equivalent software from Apple handles this.</p>
<p style="text-align: center;"><a href="http://blog.mugunthkumar.com/wp-content/uploads/numbers-save-as.png"><img class="aligncenter size-medium wp-image-693" title="Save As panel for Numbers.app" src="http://blog.mugunthkumar.com/wp-content/uploads/numbers-save-as-300x227.png" alt="Save As panel for Numbers.app" width="300" height="227" /></a></p>
<p>Apple doesn&#8217;t even include CSV or other &#8220;lossy&#8221; formats in the save as sheet. That doesn&#8217;t mean, Numbers can&#8217;t &#8220;save&#8221; your data as CSV. But rather Apple calls it as &#8220;Export&#8221;. Files you export as CSV aren&#8217;t yet saved. So, when the user quit Numbers, and get a prompt to save the document, he will not confused.</p>
<p>Because Microsoft does it this way (wrong way), other software makers like Adobe too make the same mistake. Photoshop &#8220;saves&#8221; a file as PNG and still give you a sense of feel that you have saved the file. Another such example is audacity and paint.net and even those &#8220;save as PDF&#8221; plugins. They actually don&#8217;t &#8220;save&#8221; your data, but rather export it. Apple gets it right, but the whole world gets it wrong, Unfortunate!.</p>
<p><map name='google_ad_map_685_8b86e81420c6776e'>
<area shape='rect' href='http://imageads.googleadservices.com/pagead/imgclick/685?pos=0' coords='1,2,367,28' />
<area shape='rect' href='http://services.google.com/feedback/abg' coords='384,10,453,23'/></map>
<img usemap='#google_ad_map_685_8b86e81420c6776e' border='0' src='http://imageads.googleadservices.com/pagead/ads?format=468x30_aff_img&amp;client=&amp;channel=&amp;output=png&amp;cuid=685&amp;url= http%3A%2F%2Fblog.mugunthkumar.com%2Farticles%2Fsave-as-vs-exporting-why-apple-excels-at-ui-design%2F' /></p>

<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://blog.mugunthkumar.com/articles/save-as-vs-exporting-why-apple-excels-at-ui-design/&amp;title=Save+As+vs+Exporting+-+Why+Apple+excels+at+UI+Design%3F" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://blog.mugunthkumar.com/articles/save-as-vs-exporting-why-apple-excels-at-ui-design/&amp;title=Save+As+vs+Exporting+-+Why+Apple+excels+at+UI+Design%3F" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://blog.mugunthkumar.com/articles/save-as-vs-exporting-why-apple-excels-at-ui-design/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://blog.mugunthkumar.com/articles/save-as-vs-exporting-why-apple-excels-at-ui-design/&amp;t=Save+As+vs+Exporting+-+Why+Apple+excels+at+UI+Design%3F" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=Save+As+vs+Exporting+-+Why+Apple+excels+at+UI+Design%3F+-+http://b2l.me/djpnt+" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-mail">
			<a href="mailto:?subject=%22Save%20As%20vs%20Exporting%20-%20Why%20Apple%20excels%20at%20UI%20Design%3F%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22Most%20users%20think%2C%20Mac%20UI%20is%20all%20about%20slick%20graphics%20and%20%22cool%22%20icons.%20Well%2C%20that%20might%20be%20true%20partially%2C%20but%20user%20interface%20design%20isn%27t%20about%20photoshopping%20or%20designing%20cool%20looking%20icons.%20According%20to%20Jakob%20Nielsen%2C%20aesthetics%20is%20just%20one%20aspect%20of%20usability.%20There%20is%20much%20more%20to%20user%20friendly%20%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://blog.mugunthkumar.com/articles/save-as-vs-exporting-why-apple-excels-at-ui-design/" rel="nofollow" class="external" title="Email this to a friend?">Email this to a friend?</a>
		</li>
		<li class="sexy-comfeed">
			<a href="http://blog.mugunthkumar.com/articles/save-as-vs-exporting-why-apple-excels-at-ui-design/feed" rel="nofollow" class="external" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://blog.mugunthkumar.com/articles/save-as-vs-exporting-why-apple-excels-at-ui-design/&amp;title=Save+As+vs+Exporting+-+Why+Apple+excels+at+UI+Design%3F&amp;summary=Most%20users%20think%2C%20Mac%20UI%20is%20all%20about%20slick%20graphics%20and%20%22cool%22%20icons.%20Well%2C%20that%20might%20be%20true%20partially%2C%20but%20user%20interface%20design%20isn%27t%20about%20photoshopping%20or%20designing%20cool%20looking%20icons.%20According%20to%20Jakob%20Nielsen%2C%20aesthetics%20is%20just%20one%20aspect%20of%20usability.%20There%20is%20much%20more%20to%20user%20friendly%20&amp;source=blog.mugunthkumar.com" rel="nofollow" class="external" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://blog.mugunthkumar.com/articles/save-as-vs-exporting-why-apple-excels-at-ui-design/&amp;title=Save+As+vs+Exporting+-+Why+Apple+excels+at+UI+Design%3F" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=Save+As+vs+Exporting+-+Why+Apple+excels+at+UI+Design%3F&amp;link=http://blog.mugunthkumar.com/articles/save-as-vs-exporting-why-apple-excels-at-ui-design/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-printfriendly">
			<a href="http://www.printfriendly.com/print?url=http://blog.mugunthkumar.com/articles/save-as-vs-exporting-why-apple-excels-at-ui-design/" rel="nofollow" class="external" title="Send this page to Print Friendly">Send this page to Print Friendly</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

<p>&copy;2010 <a href="http://blog.mugunthkumar.com">blog.mugunthkumar.com</a>. All Rights Reserved.</p>.

<p>Related posts:<ol><li><a href='http://blog.mugunthkumar.com/tech/elements-of-usability-design-okcancel-vs-cancelok-is-it-just-a-matter-of-taste/' rel='bookmark' title='Permanent Link: Elements of Usability Design: OK/Cancel vs Cancel/OK &#8211; Is it just a matter of taste?'>Elements of Usability Design: OK/Cancel vs Cancel/OK &#8211; Is it just a matter of taste?</a> <small> codeproject OK, many of the programmers would have been...</small></li>
</ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/dSSL9XD3aeaT3VN4WBAscSe3gF8/0/da"><img src="http://feedads.g.doubleclick.net/~a/dSSL9XD3aeaT3VN4WBAscSe3gF8/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/dSSL9XD3aeaT3VN4WBAscSe3gF8/1/da"><img src="http://feedads.g.doubleclick.net/~a/dSSL9XD3aeaT3VN4WBAscSe3gF8/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.mugunthkumar.com/articles/save-as-vs-exporting-why-apple-excels-at-ui-design/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blog.mugunthkumar.com/articles/save-as-vs-exporting-why-apple-excels-at-ui-design/</feedburner:origLink></item>
		<item>
		<title>iPhone Tutorial: Follow Cost API and a open source wrapper</title>
		<link>http://feedproxy.google.com/~r/MugunthKumar/~3/na7M0JQN5Lc/</link>
		<comments>http://blog.mugunthkumar.com/coding/iphone-tutorial-follow-cost-api-and-a-open-source-wrapper/#comments</comments>
		<pubDate>Tue, 22 Dec 2009 15:31:45 +0000</pubDate>
		<dc:creator>Mugunth Kumar</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[iphone dev]]></category>
		<category><![CDATA[objective c]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://blog.mugunthkumar.com/?p=669</guid>
		<description><![CDATA[What is Follow Cost?
Follow Cost is a interesting and powerful statistic that helps you check the &#8220;cost&#8221; you would incur by &#8220;following&#8221; a person on twitter. This is a very useful statistic that I think every twitter client should adopt.  Tweetie for iPhone was the first to implement follow cost and I use this feature [...]


Related posts:<ol><li><a href='http://blog.mugunthkumar.com/coding/consuming-a-restful-service-bit-ly-in-an-iphone-application/' rel='bookmark' title='Permanent Link: Consuming a RESTful Service (bit.ly) in an iPhone Application'>Consuming a RESTful Service (bit.ly) in an iPhone Application</a> <small> bit-ly-rest-api-objective-c Introduction Of late, many programmers who develop for...</small></li>
<li><a href='http://blog.mugunthkumar.com/coding/iphone-tutorial-%e2%80%93-in-app-purchases/' rel='bookmark' title='Permanent Link: iPhone Tutorial – In-App Purchases'>iPhone Tutorial – In-App Purchases</a> <small>Last week, Apple announced that in-app purchases will be available...</small></li>
<li><a href='http://blog.mugunthkumar.com/coding/bit-ly-wrapper-objective-c-iphone/' rel='bookmark' title='Permanent Link: bit.ly wrapper for Objective-C/iPhone'>bit.ly wrapper for Objective-C/iPhone</a> <small>Continuing from my part 1, in this section, we will...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<h2>What is Follow Cost?</h2>
<p><a href="http://followcost.com">Follow Cost</a> is a interesting and powerful statistic that helps you check the &#8220;cost&#8221; you would incur by &#8220;following&#8221; a person on twitter. This is a very useful statistic that I think every twitter client should adopt.  <a href="http://www.atebits.com/tweetie-iphone">Tweetie for iPhone</a> was the first to implement follow cost and I use this feature of tweetie to check whether a follower is &#8220;worth the pain&#8221; (as follow cost puts it).</p>
<p>In short, Follow Cost gives you an approximate count of the number of updates a person tweets in a day. As a thumb rule, I don&#8217;t follow anyone with a follow cost of over 40. A celebrity with a high follow cost is <a href="http://twitter.com/guykawasaki">@guykawasaki</a>. (80+ at the time of this writing) His tweets are interesting, but is it worth the pain? Depends. To me, definitely not.</p>
<h2>The API</h2>
<p>Follow Cost has a <a href="http://followcost.com/about/api">relatively simple API</a>. But unfortunately, even after 3 months of Tweetie 2 launch, no other twitter client has implemented. You just have to make a GET request to followcost.com server with the twitter username as follows.<code>=<br />
</code></p>
<blockquote><p>http://followcost.com/<em><strong>&lt;username&gt;</strong></em>.json</p></blockquote>
<p>The resulting output is a json formatted string which can be parsed using any <a href="http://code.google.com/p/json-framework/">JSON Framework</a>.</p>
<h2>Objective C Code</h2>
<p>To make life easier, I wrote a helper class MKFollowCost. To use the class, first download the JSON framework and follow their <a href="http://code.google.com/p/json-framework/wiki/InstallationInstructions">installation instructions</a>. If you are writing a twitter client, chances are that, you would probably have done this. Download the code from below and drag the two files, MKFollowCost.h and MKFollowCost.m into your project.</p>
<p>You can instantiate a followcost object by</p>
<blockquote><p>MKFollowCost *followCost = [[MKFollowCost alloc] initWithTwitterName:@&#8221;mugunthkumar&#8221;];</p></blockquote>
<p>All of the variables like, milliscobles, tweets per day etc, can be accessed from this object. The object is designed to be embedded without your Twitter Profile object.</p>
<h2>Downloads</h2>
<p>FollowCost Objective C Wrapper: <a href="http://blog.mugunthkumar.com/wp-content/uploads/FollowCost-v1.0.zip">FollowCost v1.0</a></p>
<h3>Rights</h3>
<p>You can use it in your own Twitter client, royalty free. Attributing me is upto you. However, if you modify the source code, please make it open source.</p>
<p><map name='google_ad_map_669_8b86e81420c6776e'>
<area shape='rect' href='http://imageads.googleadservices.com/pagead/imgclick/669?pos=0' coords='1,2,367,28' />
<area shape='rect' href='http://services.google.com/feedback/abg' coords='384,10,453,23'/></map>
<img usemap='#google_ad_map_669_8b86e81420c6776e' border='0' src='http://imageads.googleadservices.com/pagead/ads?format=468x30_aff_img&amp;client=&amp;channel=&amp;output=png&amp;cuid=669&amp;url= http%3A%2F%2Fblog.mugunthkumar.com%2Fcoding%2Fiphone-tutorial-follow-cost-api-and-a-open-source-wrapper%2F' /></p>

<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://blog.mugunthkumar.com/coding/iphone-tutorial-follow-cost-api-and-a-open-source-wrapper/&amp;title=iPhone+Tutorial%3A+Follow+Cost+API+and+a+open+source+wrapper" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://blog.mugunthkumar.com/coding/iphone-tutorial-follow-cost-api-and-a-open-source-wrapper/&amp;title=iPhone+Tutorial%3A+Follow+Cost+API+and+a+open+source+wrapper" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://blog.mugunthkumar.com/coding/iphone-tutorial-follow-cost-api-and-a-open-source-wrapper/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://blog.mugunthkumar.com/coding/iphone-tutorial-follow-cost-api-and-a-open-source-wrapper/&amp;t=iPhone+Tutorial%3A+Follow+Cost+API+and+a+open+source+wrapper" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=iPhone+Tutorial%3A+Follow+Cost+API+and+a+open+source+wrapper+-+http://b2l.me/bzqgx+" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-mail">
			<a href="mailto:?subject=%22iPhone%20Tutorial%3A%20Follow%20Cost%20API%20and%20a%20open%20source%20wrapper%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22What%20is%20Follow%20Cost%3F%0D%0AFollow%20Cost%20is%20a%20interesting%20and%20powerful%20statistic%20that%20helps%20you%20check%20the%20%22cost%22%20you%20would%20incur%20by%20%22following%22%20a%20person%20on%20twitter.%20This%20is%20a%20very%20useful%20statistic%20that%20I%20think%20every%20twitter%20client%20should%20adopt.%C2%A0%20Tweetie%20for%20iPhone%20was%20the%20first%20to%20implement%20follow%20cost%20an%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://blog.mugunthkumar.com/coding/iphone-tutorial-follow-cost-api-and-a-open-source-wrapper/" rel="nofollow" class="external" title="Email this to a friend?">Email this to a friend?</a>
		</li>
		<li class="sexy-comfeed">
			<a href="http://blog.mugunthkumar.com/coding/iphone-tutorial-follow-cost-api-and-a-open-source-wrapper/feed" rel="nofollow" class="external" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://blog.mugunthkumar.com/coding/iphone-tutorial-follow-cost-api-and-a-open-source-wrapper/&amp;title=iPhone+Tutorial%3A+Follow+Cost+API+and+a+open+source+wrapper&amp;summary=What%20is%20Follow%20Cost%3F%0D%0AFollow%20Cost%20is%20a%20interesting%20and%20powerful%20statistic%20that%20helps%20you%20check%20the%20%22cost%22%20you%20would%20incur%20by%20%22following%22%20a%20person%20on%20twitter.%20This%20is%20a%20very%20useful%20statistic%20that%20I%20think%20every%20twitter%20client%20should%20adopt.%C2%A0%20Tweetie%20for%20iPhone%20was%20the%20first%20to%20implement%20follow%20cost%20an&amp;source=blog.mugunthkumar.com" rel="nofollow" class="external" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://blog.mugunthkumar.com/coding/iphone-tutorial-follow-cost-api-and-a-open-source-wrapper/&amp;title=iPhone+Tutorial%3A+Follow+Cost+API+and+a+open+source+wrapper" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=iPhone+Tutorial%3A+Follow+Cost+API+and+a+open+source+wrapper&amp;link=http://blog.mugunthkumar.com/coding/iphone-tutorial-follow-cost-api-and-a-open-source-wrapper/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-printfriendly">
			<a href="http://www.printfriendly.com/print?url=http://blog.mugunthkumar.com/coding/iphone-tutorial-follow-cost-api-and-a-open-source-wrapper/" rel="nofollow" class="external" title="Send this page to Print Friendly">Send this page to Print Friendly</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

<p>&copy;2010 <a href="http://blog.mugunthkumar.com">blog.mugunthkumar.com</a>. All Rights Reserved.</p>.

<p>Related posts:<ol><li><a href='http://blog.mugunthkumar.com/coding/consuming-a-restful-service-bit-ly-in-an-iphone-application/' rel='bookmark' title='Permanent Link: Consuming a RESTful Service (bit.ly) in an iPhone Application'>Consuming a RESTful Service (bit.ly) in an iPhone Application</a> <small> bit-ly-rest-api-objective-c Introduction Of late, many programmers who develop for...</small></li>
<li><a href='http://blog.mugunthkumar.com/coding/iphone-tutorial-%e2%80%93-in-app-purchases/' rel='bookmark' title='Permanent Link: iPhone Tutorial – In-App Purchases'>iPhone Tutorial – In-App Purchases</a> <small>Last week, Apple announced that in-app purchases will be available...</small></li>
<li><a href='http://blog.mugunthkumar.com/coding/bit-ly-wrapper-objective-c-iphone/' rel='bookmark' title='Permanent Link: bit.ly wrapper for Objective-C/iPhone'>bit.ly wrapper for Objective-C/iPhone</a> <small>Continuing from my part 1, in this section, we will...</small></li>
</ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/yTED5gI4ndrM03-1dZc2Ofh9CWA/0/da"><img src="http://feedads.g.doubleclick.net/~a/yTED5gI4ndrM03-1dZc2Ofh9CWA/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/yTED5gI4ndrM03-1dZc2Ofh9CWA/1/da"><img src="http://feedads.g.doubleclick.net/~a/yTED5gI4ndrM03-1dZc2Ofh9CWA/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.mugunthkumar.com/coding/iphone-tutorial-follow-cost-api-and-a-open-source-wrapper/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://blog.mugunthkumar.com/coding/iphone-tutorial-follow-cost-api-and-a-open-source-wrapper/</feedburner:origLink></item>
		<item>
		<title>iPhone Tutorial – Enabling reviewers to use your In-App purchases for free</title>
		<link>http://feedproxy.google.com/~r/MugunthKumar/~3/lxd42qFHQjk/</link>
		<comments>http://blog.mugunthkumar.com/coding/iphone-tutorial-enabling-reviewers-to-use-your-in-app-purchases-for-free/#comments</comments>
		<pubDate>Sun, 15 Nov 2009 15:48:29 +0000</pubDate>
		<dc:creator>Mugunth Kumar</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[iphone dev]]></category>
		<category><![CDATA[objective c]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://blog.mugunthkumar.com/?p=559</guid>
		<description><![CDATA[In-App purchases is a great way for developers to upsell by giving away their app for free and then allow them to charge for features when users start using it. This freemium model has indeed worked very well for upselling your app in the AppStore. But unfortunately, there isn&#8217;t an Apple allowed way to allow [...]


Related posts:<ol><li><a href='http://blog.mugunthkumar.com/coding/iphone-tutorial-%e2%80%93-in-app-purchases/' rel='bookmark' title='Permanent Link: iPhone Tutorial – In-App Purchases'>iPhone Tutorial – In-App Purchases</a> <small>Last week, Apple announced that in-app purchases will be available...</small></li>
<li><a href='http://blog.mugunthkumar.com/coding/iphone-tutorial-follow-cost-api-and-a-open-source-wrapper/' rel='bookmark' title='Permanent Link: iPhone Tutorial: Follow Cost API and a open source wrapper'>iPhone Tutorial: Follow Cost API and a open source wrapper</a> <small>What is Follow Cost? Follow Cost is a interesting and...</small></li>
<li><a href='http://blog.mugunthkumar.com/coding/iphone-tutorial-uisearchdisplaycontroller-with-nspredicate/' rel='bookmark' title='Permanent Link: iPhone Tutorial &#8211; UISearchDisplayController with NSPredicate'>iPhone Tutorial &#8211; UISearchDisplayController with NSPredicate</a> <small>Though UISearchDisplayController is seemingly easy (and yes it&#8217;s easy), apart...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>In-App purchases is a great way for developers to upsell by giving away their app for free and then allow them to charge for features when users start using it. This freemium model has indeed worked very well for upselling your app in the AppStore. But unfortunately, there isn&#8217;t an Apple allowed way to allow reviewers to &#8220;download&#8221; your in-app purchases for free (like giving away promotional codes for your in-app purchases). So most developers again resort to the same &#8220;lite&#8221;, &#8220;pro&#8221; model.</p>
<p>After raising the issue to Apple, I even got a official reply that it&#8217;s not possible currently to allow reviewers to use your in-app purchases for free.</p>
<p><a href="http://blog.mugunthkumar.com/wp-content/uploads/noinappurchases.png"><img class="aligncenter size-medium wp-image-566" title="noinappurchases" src="http://blog.mugunthkumar.com/wp-content/uploads/noinappurchases-300x132.png" alt="noinappurchases" width="300" height="132" /></a></p>
<p>However, developers&#8217; creativity knows no bounds. In this post, I&#8217;ll present a method to allow reviewers to use your in-app purchases for free without having multiple versions of the same app on the app store. The source code for the same is also available royalty-free (as always) for using it in your own apps. Before diving in, it&#8217;s advised that you read through my previous <a href="http://blog.mugunthkumar.com/coding/iphone-tutorial-–-in-app-purchases">tutorial on how to do in-app purchases</a></p>
<p><span id="more-559"></span></p>
<h2>Focus</h2>
<p>As I previously wrote, you can sell consumables, non-consumables and subscriptions using the in-app purchases model. This article is focussed primarily on consumables and non-consumables. However, you can extend it to subscriptions as well by adding a bit more server side PHP programming. This post however focusses on adding this feature to consumable and non-consumable items only.</p>
<h2>A Quick Recap</h2>
<p>By now, you must be knowing the flow of a in-app purchase request. If you don&#8217;t, read through my in-app purchases tutorial. As a recap,</p>
<p>1) You list the items available for sale from your store to the user.</p>
<p>2) When the user chooses a feature, you prepare a SKPayment object and add it to the queue.</p>
<p>3) Listen to notifications and record the purchases within your apps&#8217; NSUserDefaults.</p>
<p>Or it&#8217;s even more simple if you had used my MKStoreKit.</p>
<h2>The Idea</h2>
<p>The idea here is to maintain a list of device IDs on the developer server and check whether the current device is exempted to use the feature without purchasing. If the device is allowed, rather than initiating a purchase, temporarily set the variables as if the transactions were made.</p>
<p>The complete source code,  MKStoreKit V2.0 is attached at the end of the post.</p>
<p>You should be glad to know that, you don&#8217;t have to make changes to your calling code to add this feature.<br />
In MKStoreKit, there is a function called buyFeature which initiates a in-app purchase request. In version 2.0, this function is modified to make a check first to your server (server code is also attached to this post) passing the UDID of the current device. If your server responds with a YES, it activates the feature temporarily without &#8220;actually purchasing&#8221;. This will enable your reviewers to review your app without buying your in-app purchase.</p>
<p>- (BOOL) canCurrentDeviceUseFeature: (NSString*) featureID;</p>
<p>This is the function that is called. Currently it checks the server mentioned in the variable ownServer (presently set to nil). To enable this function, you have to do the server side changes as explained in the next step.</p>
<h2>Server Side Changes</h2>
<p>Setup a database with two tables setup in your server. One table for storing a list of available products and another for storing new review requests as they come in.</p>
<p>The products table has the following fields<br />
<em><strong>productid    productName    productDesc</strong></em></p>
<p>The requests table has the following fields<br />
<em><strong>udid    productid    email    message    status    lastUpdated</strong></em></p>
<p>You can use the SQL file attached to create these tables. Add a user to your MySql database and fill in the user id and password into the two php files.</p>
<p>Copy the server files from the ServerCode folder to some location like</p>
<p>http://api.mycompany.com/inapp/</p>
<p>change the &#8220;ownServer&#8221; variable in MKStoreManager.m to </p>
<p>http://api.mycompany.com/inapp/featureCheck.php</p>
<p>The featureCheck.php file checks the requests table for the UDID and the featureID. If the status of that row is 1, it returns YES. If your server returns YES for a particular UDID, the app activates the purchase for the current session without initiating a StoreKit purchase. Note that, this featureCheck happens everytime the app is started. Hence, if you deactivate a UDID on your server after the reviewer has finished reviewing, he will not be able to continue using it for free (Which means, you have actually given the reviewer a sneak-peek to your feature. Even if he likes it, he has to buy it)</p>
<h2>How to send your review request?</h2>
<p>There are atleast three ways of doing this.<br />
One way is to ask your reviewers to send the UDID to you by email. You can ask them to use the <a href="http://itunes.apple.com/us/app/ad-hoc-helper/id285691333?mt=8">Ad Hoc Helper by Erica Sadun</a> You can then manually add it into the database using the AddDevice.html (present in the Server Code folder)<br />
Second way is,  You can &#8220;pretty up&#8221; the AddDevice.html and host it somewhere in your server. Send a link to this to your reviewers for filling their UDID/Product ID.<br />
Third, as in my case, I&#8217;ve created a separate iPhone App for doing this. The only reason for doing so is, filling the UDID is very very cumbersome and error prone. If anyone knows a way to read the UDID of a device from a webapp, do let me know. (The big5 code didn&#8217;t work for me)</p>
<h2>Going forward</h2>
<p>I understand that all this server side setup is quite cumbersome. The server code isn&#8217;t even polished like the MKStoreKit. If Apple approves this method (which I will know in another 20 days), In MKStoreKit 3.0, I&#8217;ll probably throw of the whole server side code and replace it with a much elegant method by using a Google Spreadsheet. I haven&#8217;t yet digged around with the <a href="http://code.google.com/apis/spreadsheets/">spreadsheets API</a>. This way, you can implement the same feature without even owning a server <img src='http://blog.mugunthkumar.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>I might as well add in features to migrate your existing customers who use your pro version to the version with in-app purchases. Stay tuned!</p>
<h2>Source Code (Much awaited)</h2>
<p><a href="http://blog.mugunthkumar.com/wp-content/uploads/MKStoreKit-V2.0.zip">MKStoreKit V2.0</a><br />
If you cannot successfully use this, you can hire me to do it for you. <img src='http://blog.mugunthkumar.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  I usually freelance through <a href="http://www.odesk.com/community/user/10015207">oDesk.com</a></p>
<p><map name='google_ad_map_559_8b86e81420c6776e'>
<area shape='rect' href='http://imageads.googleadservices.com/pagead/imgclick/559?pos=0' coords='1,2,367,28' />
<area shape='rect' href='http://services.google.com/feedback/abg' coords='384,10,453,23'/></map>
<img usemap='#google_ad_map_559_8b86e81420c6776e' border='0' src='http://imageads.googleadservices.com/pagead/ads?format=468x30_aff_img&amp;client=&amp;channel=&amp;output=png&amp;cuid=559&amp;url= http%3A%2F%2Fblog.mugunthkumar.com%2Fcoding%2Fiphone-tutorial-enabling-reviewers-to-use-your-in-app-purchases-for-free%2F' /></p>

<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://blog.mugunthkumar.com/coding/iphone-tutorial-enabling-reviewers-to-use-your-in-app-purchases-for-free/&amp;title=iPhone+Tutorial+-+Enabling+reviewers+to+use+your+In-App+purchases+for+free" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://blog.mugunthkumar.com/coding/iphone-tutorial-enabling-reviewers-to-use-your-in-app-purchases-for-free/&amp;title=iPhone+Tutorial+-+Enabling+reviewers+to+use+your+In-App+purchases+for+free" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://blog.mugunthkumar.com/coding/iphone-tutorial-enabling-reviewers-to-use-your-in-app-purchases-for-free/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://blog.mugunthkumar.com/coding/iphone-tutorial-enabling-reviewers-to-use-your-in-app-purchases-for-free/&amp;t=iPhone+Tutorial+-+Enabling+reviewers+to+use+your+In-App+purchases+for+free" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=iPhone+Tutorial+-+Enabling+reviewers+to+use+your+In-App+purchases+for+free+-+http://b2l.me/ag3aq+" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-mail">
			<a href="mailto:?subject=%22iPhone%20Tutorial%20-%20Enabling%20reviewers%20to%20use%20your%20In-App%20purchases%20for%20free%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22In-App%20purchases%20is%20a%20great%20way%20for%20developers%20to%20upsell%20by%20giving%20away%20their%20app%20for%20free%20and%20then%20allow%20them%20to%20charge%20for%20features%20when%20users%20start%20using%20it.%20This%20freemium%20model%20has%20indeed%20worked%20very%20well%20for%20upselling%20your%20app%20in%20the%20AppStore.%20But%20unfortunately%2C%20there%20isn%27t%20an%20Apple%20allowed%20way%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://blog.mugunthkumar.com/coding/iphone-tutorial-enabling-reviewers-to-use-your-in-app-purchases-for-free/" rel="nofollow" class="external" title="Email this to a friend?">Email this to a friend?</a>
		</li>
		<li class="sexy-comfeed">
			<a href="http://blog.mugunthkumar.com/coding/iphone-tutorial-enabling-reviewers-to-use-your-in-app-purchases-for-free/feed" rel="nofollow" class="external" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://blog.mugunthkumar.com/coding/iphone-tutorial-enabling-reviewers-to-use-your-in-app-purchases-for-free/&amp;title=iPhone+Tutorial+-+Enabling+reviewers+to+use+your+In-App+purchases+for+free&amp;summary=In-App%20purchases%20is%20a%20great%20way%20for%20developers%20to%20upsell%20by%20giving%20away%20their%20app%20for%20free%20and%20then%20allow%20them%20to%20charge%20for%20features%20when%20users%20start%20using%20it.%20This%20freemium%20model%20has%20indeed%20worked%20very%20well%20for%20upselling%20your%20app%20in%20the%20AppStore.%20But%20unfortunately%2C%20there%20isn%27t%20an%20Apple%20allowed%20way&amp;source=blog.mugunthkumar.com" rel="nofollow" class="external" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://blog.mugunthkumar.com/coding/iphone-tutorial-enabling-reviewers-to-use-your-in-app-purchases-for-free/&amp;title=iPhone+Tutorial+-+Enabling+reviewers+to+use+your+In-App+purchases+for+free" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=iPhone+Tutorial+-+Enabling+reviewers+to+use+your+In-App+purchases+for+free&amp;link=http://blog.mugunthkumar.com/coding/iphone-tutorial-enabling-reviewers-to-use-your-in-app-purchases-for-free/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-printfriendly">
			<a href="http://www.printfriendly.com/print?url=http://blog.mugunthkumar.com/coding/iphone-tutorial-enabling-reviewers-to-use-your-in-app-purchases-for-free/" rel="nofollow" class="external" title="Send this page to Print Friendly">Send this page to Print Friendly</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

<p>&copy;2010 <a href="http://blog.mugunthkumar.com">blog.mugunthkumar.com</a>. All Rights Reserved.</p>.

<p>Related posts:<ol><li><a href='http://blog.mugunthkumar.com/coding/iphone-tutorial-%e2%80%93-in-app-purchases/' rel='bookmark' title='Permanent Link: iPhone Tutorial – In-App Purchases'>iPhone Tutorial – In-App Purchases</a> <small>Last week, Apple announced that in-app purchases will be available...</small></li>
<li><a href='http://blog.mugunthkumar.com/coding/iphone-tutorial-follow-cost-api-and-a-open-source-wrapper/' rel='bookmark' title='Permanent Link: iPhone Tutorial: Follow Cost API and a open source wrapper'>iPhone Tutorial: Follow Cost API and a open source wrapper</a> <small>What is Follow Cost? Follow Cost is a interesting and...</small></li>
<li><a href='http://blog.mugunthkumar.com/coding/iphone-tutorial-uisearchdisplaycontroller-with-nspredicate/' rel='bookmark' title='Permanent Link: iPhone Tutorial &#8211; UISearchDisplayController with NSPredicate'>iPhone Tutorial &#8211; UISearchDisplayController with NSPredicate</a> <small>Though UISearchDisplayController is seemingly easy (and yes it&#8217;s easy), apart...</small></li>
</ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/8R9c1X24HgOpY_4L5KfcQbGzi0w/0/da"><img src="http://feedads.g.doubleclick.net/~a/8R9c1X24HgOpY_4L5KfcQbGzi0w/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/8R9c1X24HgOpY_4L5KfcQbGzi0w/1/da"><img src="http://feedads.g.doubleclick.net/~a/8R9c1X24HgOpY_4L5KfcQbGzi0w/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.mugunthkumar.com/coding/iphone-tutorial-enabling-reviewers-to-use-your-in-app-purchases-for-free/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		<feedburner:origLink>http://blog.mugunthkumar.com/coding/iphone-tutorial-enabling-reviewers-to-use-your-in-app-purchases-for-free/</feedburner:origLink></item>
		<item>
		<title>iPhone Tutorial – UISearchDisplayController with NSPredicate</title>
		<link>http://feedproxy.google.com/~r/MugunthKumar/~3/PmxNmppkQHo/</link>
		<comments>http://blog.mugunthkumar.com/coding/iphone-tutorial-uisearchdisplaycontroller-with-nspredicate/#comments</comments>
		<pubDate>Sun, 15 Nov 2009 04:37:46 +0000</pubDate>
		<dc:creator>Mugunth Kumar</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[iphone dev]]></category>
		<category><![CDATA[objective c]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[UISearchDisplayController]]></category>

		<guid isPermaLink="false">http://blog.mugunthkumar.com/?p=549</guid>
		<description><![CDATA[Though UISearchDisplayController is seemingly easy (and yes it&#8217;s easy), apart from the sample source code, there isn&#8217;t much documentation available from Apple. I won&#8217;t be posting code for this tutorial, (as most of them come from Apple&#8217;s own source code), however, the tutorial will contain code fragments that I wish to highlight and those I [...]


Related posts:<ol><li><a href='http://blog.mugunthkumar.com/coding/iphone-tutorial-enabling-reviewers-to-use-your-in-app-purchases-for-free/' rel='bookmark' title='Permanent Link: iPhone Tutorial &#8211; Enabling reviewers to use your In-App purchases for free'>iPhone Tutorial &#8211; Enabling reviewers to use your In-App purchases for free</a> <small>In-App purchases is a great way for developers to upsell...</small></li>
<li><a href='http://blog.mugunthkumar.com/coding/iphone-tutorial-%e2%80%93-in-app-purchases/' rel='bookmark' title='Permanent Link: iPhone Tutorial – In-App Purchases'>iPhone Tutorial – In-App Purchases</a> <small>Last week, Apple announced that in-app purchases will be available...</small></li>
<li><a href='http://blog.mugunthkumar.com/coding/iphone-tutorial-follow-cost-api-and-a-open-source-wrapper/' rel='bookmark' title='Permanent Link: iPhone Tutorial: Follow Cost API and a open source wrapper'>iPhone Tutorial: Follow Cost API and a open source wrapper</a> <small>What is Follow Cost? Follow Cost is a interesting and...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Though UISearchDisplayController is seemingly easy (and yes it&#8217;s easy), apart from the <a href="https://developer.apple.com/iphone/library/samplecode/TableSearch/">sample source code</a>, there isn&#8217;t much documentation available from Apple. I won&#8217;t be posting code for this tutorial, (as most of them come from Apple&#8217;s own source code), however, the tutorial will contain code fragments that I wish to highlight and those I changed for improving the search using <a href="http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/Predicates/Articles/pCreating.html">NSPredicate</a><br />
<span id="more-549"></span></p>
<h2>Step 1: Create the project</h2>
<p>If you haven&#8217;t created a project yet, create a Navigation Based Project and open the RootViewController.xib.</p>
<h2>Step 2: Modify the XIB</h2>
<p>Drag UISearchDisplayController to your RootViewController.xib. (It automatically does the connections for you) Drag the SearchBar that gets added onto your TableView. You need the UISearchBar to be displayed on the controller. So drag the searchbar and place it on the top of the table view. Add ScopeBars if you need any. We will discuss later how to handle the scope bar changes and how to filter text based on the selected scope.</p>
<h2>Step 3: The Design of UISearchDisplayController</h2>
<p>In a traditional tableviewcontroller, you normally have one master list of data which you use for all the tableview data source methods. In case of UISearchDisplayController, you have to maintain two lists. One master list and one a filtered list. The tableview data source delegates will be called by the framework when it needs to populate your tableview or the search results. So in all the methods you have to differentiate whether the data source call is for populating the filtered list or for populating the main list.</p>
<p>This is done by a simple two line code.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>tableView <span style="color: #002200;">==</span> self.tableView<span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>
<span style="color: #11740a; font-style: italic;">// normal table view population</span>
<span style="color: #002200;">&#125;</span>
<span style="color: #a61390;">if</span><span style="color: #002200;">&#40;</span>tableView <span style="color: #002200;">==</span> self.searchDisplayController.searchResultsTableView<span style="color: #002200;">&#41;</span><span style="color: #002200;">&#123;</span>
<span style="color: #11740a; font-style: italic;">// search view population</span>
<span style="color: #002200;">&#125;</span></pre></div></div>

<p>This code should be written in cellForRowAtIndexPath, didSelectRowAtIndexPath and numberOfRowsInSection.<br />
For the complete code listing, see Apple&#8217;s sample code.</p>
<h2>Step 3: Implement the search delegates</h2>
<p>When the user invokes a search,the UISearchDisplayDelegate functions you implement will be called. The two main functions that you have to implement are,</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">BOOL</span><span style="color: #002200;">&#41;</span>searchDisplayController<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>UISearchDisplayController <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>controller 
shouldReloadTableForSearchScope<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>NSInteger<span style="color: #002200;">&#41;</span>searchOption
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">BOOL</span><span style="color: #002200;">&#41;</span>searchDisplayController<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>UISearchDisplayController <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>controller 
shouldReloadTableForSearchString<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>searchString</pre></div></div>

<p>Copy the implementation from Apple&#8217;s source.In the header file, your class should implement UISearchBarDelegate and UISearchDisplayDelegate.</p>
<p>As the name suggests, the first function will be called when the user changes the scope button and the second function is called when he starts typing a search query. The first function is not necessary if you haven&#8217;t added any scope button in step 2.</p>
<h2>Step 4: Filtering your data using NSPredicate</h2>
<p>This step is the reason why I wrote this seemingly simple post. I didn&#8217;t like the Apple&#8217;s way of filtering. It doesn&#8217;t match &#8220;contains&#8221; text. I modified the <code>filterContentForSearchText </code>method, so as to use NSPredicate. You still need the Apple&#8217;s implementation of shouldReloadTableForSearchString and shouldReloadTableForSearchScope.<br />
The filterContentForSearchText implementation CANNOT be copy-pasted into your application. It&#8217;s a code fragment that doesn&#8217;t compile without some changes. Points to note in the function is the use of predicate.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #400080;">NSPredicate</span> <span style="color: #002200;">*</span>predicate <span style="color: #002200;">=</span> 
<span style="color: #002200;">&#91;</span><span style="color: #400080;">NSPredicate</span> predicateWithFormat<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;(SELF contains[cd] %@)&quot;</span>, searchText<span style="color: #002200;">&#93;</span>;</pre></div></div>

<p>The [cd] in the predicate format means case and diatric insensitive. the verb I have used is &#8220;contains&#8221;, you can change it to beginsWith, endsWith, like and many others. The NSPredicate is a very powerful feature that can be exploited here. I don&#8217;t understand why Apple just didn&#8217;t use it <img src='http://blog.mugunthkumar.com/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' />  For more info, look at Apple&#8217;s NSPredicate documentation <a href="http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/Predicates/Articles/pCreating.html">here</a></p>
<p>Below is the complete code listing after making the NSPredicate changes.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>filterContentForSearchText<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>searchText scope<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>scope
<span style="color: #002200;">&#123;</span>
    <span style="color: #002200;">&#91;</span>self.filteredData removeAllObjects<span style="color: #002200;">&#93;</span>; <span style="color: #11740a; font-style: italic;">// First clear the filtered array.</span>
    <span style="color: #a61390;">for</span> <span style="color: #002200;">&#40;</span>Product <span style="color: #002200;">*</span>product <span style="color: #a61390;">in</span> tableData<span style="color: #002200;">&#41;</span>
    <span style="color: #002200;">&#123;</span>
        <span style="color: #400080;">NSPredicate</span> <span style="color: #002200;">*</span>predicate <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #400080;">NSPredicate</span> predicateWithFormat<span style="color: #002200;">:</span>
           <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;(SELF contains[cd] %@)&quot;</span>, searchText<span style="color: #002200;">&#93;</span>;
       <span style="color: #002200;">&#91;</span>product.productID compare<span style="color: #002200;">:</span>searchText options<span style="color: #002200;">:</span>NSCaseInsensitiveSearch<span style="color: #002200;">&#93;</span>;
        <span style="color: #a61390;">BOOL</span> resultID <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>predicate evaluateWithObject<span style="color: #002200;">:</span>product.productID<span style="color: #002200;">&#93;</span>;
        <span style="color: #a61390;">BOOL</span> resultName <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>predicate evaluateWithObject<span style="color: #002200;">:</span>product.productName<span style="color: #002200;">&#93;</span>;
       <span style="color: #a61390;">if</span><span style="color: #002200;">&#40;</span><span style="color: #002200;">&#91;</span>scope isEqualToString<span style="color: #002200;">:</span>@<span style="color: #002200;">&amp;</span>quot;Product ID<span style="color: #002200;">&amp;</span>quot;<span style="color: #002200;">&#93;</span> <span style="color: #002200;">&amp;&amp;</span> resultID<span style="color: #002200;">&#41;</span>
        <span style="color: #002200;">&#123;</span>
            <span style="color: #002200;">&#91;</span>self.filteredData addObject<span style="color: #002200;">:</span>product<span style="color: #002200;">&#93;</span>;
        <span style="color: #002200;">&#125;</span>
        <span style="color: #a61390;">if</span><span style="color: #002200;">&#40;</span><span style="color: #002200;">&#91;</span>scope isEqualToString<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Product Name&quot;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">&amp;&amp;</span> resultName<span style="color: #002200;">&#41;</span>
        <span style="color: #002200;">&#123;</span>
            <span style="color: #002200;">&#91;</span>self.filteredData addObject<span style="color: #002200;">:</span>product<span style="color: #002200;">&#93;</span>;
        <span style="color: #002200;">&#125;</span>
        <span style="color: #a61390;">if</span><span style="color: #002200;">&#40;</span><span style="color: #002200;">&#91;</span>scope isEqualToString<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Any&quot;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">&amp;&amp;</span> <span style="color: #002200;">&#40;</span>resultID || resultName<span style="color: #002200;">&#41;</span><span style="color: #002200;">&#41;</span>
        <span style="color: #002200;">&#123;</span>
            <span style="color: #002200;">&#91;</span>self.filteredData addObject<span style="color: #002200;">:</span>product<span style="color: #002200;">&#93;</span>;
        <span style="color: #002200;">&#125;</span>
    <span style="color: #002200;">&#125;</span>
<span style="color: #002200;">&#125;</span></pre></div></div>

<p>With NSPredicate, you can play around with the search filters. NSPredicate is as powerful and easier to use than Regular Expressions. Try your hand at it.</p>
<p>&#8211;<br />
Mugunth</p>
<p><map name='google_ad_map_549_8b86e81420c6776e'>
<area shape='rect' href='http://imageads.googleadservices.com/pagead/imgclick/549?pos=0' coords='1,2,367,28' />
<area shape='rect' href='http://services.google.com/feedback/abg' coords='384,10,453,23'/></map>
<img usemap='#google_ad_map_549_8b86e81420c6776e' border='0' src='http://imageads.googleadservices.com/pagead/ads?format=468x30_aff_img&amp;client=&amp;channel=&amp;output=png&amp;cuid=549&amp;url= http%3A%2F%2Fblog.mugunthkumar.com%2Fcoding%2Fiphone-tutorial-uisearchdisplaycontroller-with-nspredicate%2F' /></p>

<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://blog.mugunthkumar.com/coding/iphone-tutorial-uisearchdisplaycontroller-with-nspredicate/&amp;title=iPhone+Tutorial+-+UISearchDisplayController+with+NSPredicate" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://blog.mugunthkumar.com/coding/iphone-tutorial-uisearchdisplaycontroller-with-nspredicate/&amp;title=iPhone+Tutorial+-+UISearchDisplayController+with+NSPredicate" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://blog.mugunthkumar.com/coding/iphone-tutorial-uisearchdisplaycontroller-with-nspredicate/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://blog.mugunthkumar.com/coding/iphone-tutorial-uisearchdisplaycontroller-with-nspredicate/&amp;t=iPhone+Tutorial+-+UISearchDisplayController+with+NSPredicate" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=iPhone+Tutorial+-+UISearchDisplayController+with+NSPredicate+-+http://b2l.me/ag3at+" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-mail">
			<a href="mailto:?subject=%22iPhone%20Tutorial%20-%20UISearchDisplayController%20with%20NSPredicate%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22Though%20UISearchDisplayController%20is%20seemingly%20easy%20%28and%20yes%20it%27s%20easy%29%2C%20apart%20from%20the%20sample%20source%20code%2C%20there%20isn%27t%20much%20documentation%20available%20from%20Apple.%20I%20won%27t%20be%20posting%20code%20for%20this%20tutorial%2C%20%28as%20most%20of%20them%20come%20from%20Apple%27s%20own%20source%20code%29%2C%20however%2C%20the%20tutorial%20will%20contain%20code%20frag%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://blog.mugunthkumar.com/coding/iphone-tutorial-uisearchdisplaycontroller-with-nspredicate/" rel="nofollow" class="external" title="Email this to a friend?">Email this to a friend?</a>
		</li>
		<li class="sexy-comfeed">
			<a href="http://blog.mugunthkumar.com/coding/iphone-tutorial-uisearchdisplaycontroller-with-nspredicate/feed" rel="nofollow" class="external" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://blog.mugunthkumar.com/coding/iphone-tutorial-uisearchdisplaycontroller-with-nspredicate/&amp;title=iPhone+Tutorial+-+UISearchDisplayController+with+NSPredicate&amp;summary=Though%20UISearchDisplayController%20is%20seemingly%20easy%20%28and%20yes%20it%27s%20easy%29%2C%20apart%20from%20the%20sample%20source%20code%2C%20there%20isn%27t%20much%20documentation%20available%20from%20Apple.%20I%20won%27t%20be%20posting%20code%20for%20this%20tutorial%2C%20%28as%20most%20of%20them%20come%20from%20Apple%27s%20own%20source%20code%29%2C%20however%2C%20the%20tutorial%20will%20contain%20code%20frag&amp;source=blog.mugunthkumar.com" rel="nofollow" class="external" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://blog.mugunthkumar.com/coding/iphone-tutorial-uisearchdisplaycontroller-with-nspredicate/&amp;title=iPhone+Tutorial+-+UISearchDisplayController+with+NSPredicate" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=iPhone+Tutorial+-+UISearchDisplayController+with+NSPredicate&amp;link=http://blog.mugunthkumar.com/coding/iphone-tutorial-uisearchdisplaycontroller-with-nspredicate/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-printfriendly">
			<a href="http://www.printfriendly.com/print?url=http://blog.mugunthkumar.com/coding/iphone-tutorial-uisearchdisplaycontroller-with-nspredicate/" rel="nofollow" class="external" title="Send this page to Print Friendly">Send this page to Print Friendly</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

<p>&copy;2010 <a href="http://blog.mugunthkumar.com">blog.mugunthkumar.com</a>. All Rights Reserved.</p>.

<p>Related posts:<ol><li><a href='http://blog.mugunthkumar.com/coding/iphone-tutorial-enabling-reviewers-to-use-your-in-app-purchases-for-free/' rel='bookmark' title='Permanent Link: iPhone Tutorial &#8211; Enabling reviewers to use your In-App purchases for free'>iPhone Tutorial &#8211; Enabling reviewers to use your In-App purchases for free</a> <small>In-App purchases is a great way for developers to upsell...</small></li>
<li><a href='http://blog.mugunthkumar.com/coding/iphone-tutorial-%e2%80%93-in-app-purchases/' rel='bookmark' title='Permanent Link: iPhone Tutorial – In-App Purchases'>iPhone Tutorial – In-App Purchases</a> <small>Last week, Apple announced that in-app purchases will be available...</small></li>
<li><a href='http://blog.mugunthkumar.com/coding/iphone-tutorial-follow-cost-api-and-a-open-source-wrapper/' rel='bookmark' title='Permanent Link: iPhone Tutorial: Follow Cost API and a open source wrapper'>iPhone Tutorial: Follow Cost API and a open source wrapper</a> <small>What is Follow Cost? Follow Cost is a interesting and...</small></li>
</ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/qUNGZL7R7K5p1PfUM2N714W_MRY/0/da"><img src="http://feedads.g.doubleclick.net/~a/qUNGZL7R7K5p1PfUM2N714W_MRY/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/qUNGZL7R7K5p1PfUM2N714W_MRY/1/da"><img src="http://feedads.g.doubleclick.net/~a/qUNGZL7R7K5p1PfUM2N714W_MRY/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.mugunthkumar.com/coding/iphone-tutorial-uisearchdisplaycontroller-with-nspredicate/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://blog.mugunthkumar.com/coding/iphone-tutorial-uisearchdisplaycontroller-with-nspredicate/</feedburner:origLink></item>
		<item>
		<title>iPhone Tutorial – In-App Purchases</title>
		<link>http://feedproxy.google.com/~r/MugunthKumar/~3/zEkFzNOjEnI/</link>
		<comments>http://blog.mugunthkumar.com/coding/iphone-tutorial-%e2%80%93-in-app-purchases/#comments</comments>
		<pubDate>Sat, 17 Oct 2009 17:37:29 +0000</pubDate>
		<dc:creator>Mugunth Kumar</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[iphone dev]]></category>
		<category><![CDATA[objective c]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://blog.mugunthkumar.com/?p=518</guid>
		<description><![CDATA[Last week, Apple announced that in-app purchases will be available for free apps as well. This could probably free developers from creating &#8220;lite&#8221; and &#8220;pro&#8221; versions of the app and allow developers to &#8220;unlock&#8221; features inside the app and create business models that the AppStore haven&#8217;t seen. This model could be a great boon for [...]


Related posts:<ol><li><a href='http://blog.mugunthkumar.com/coding/iphone-tutorial-enabling-reviewers-to-use-your-in-app-purchases-for-free/' rel='bookmark' title='Permanent Link: iPhone Tutorial &#8211; Enabling reviewers to use your In-App purchases for free'>iPhone Tutorial &#8211; Enabling reviewers to use your In-App purchases for free</a> <small>In-App purchases is a great way for developers to upsell...</small></li>
<li><a href='http://blog.mugunthkumar.com/coding/iphone-tutorial-uisearchdisplaycontroller-with-nspredicate/' rel='bookmark' title='Permanent Link: iPhone Tutorial &#8211; UISearchDisplayController with NSPredicate'>iPhone Tutorial &#8211; UISearchDisplayController with NSPredicate</a> <small>Though UISearchDisplayController is seemingly easy (and yes it&#8217;s easy), apart...</small></li>
<li><a href='http://blog.mugunthkumar.com/coding/iphone-tutorial-elegant-way-to-send-formatted-in-app-email/' rel='bookmark' title='Permanent Link: iPhone Tutorial: Elegant way to send formatted In-App email'>iPhone Tutorial: Elegant way to send formatted In-App email</a> <small>By now, most of you know how to send emails...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Last week, Apple announced that in-app purchases will be available for free apps as well. This could probably free developers from creating &#8220;lite&#8221; and &#8220;pro&#8221; versions of the app and allow developers to &#8220;unlock&#8221; features inside the app and create business models that the AppStore haven&#8217;t seen. This model could be a great boon for developers like us to upsell our apps (provided they are of good quality) and to reduce piracy. In this article, we will look at how to incorporate StoreKit to do In-App purchases for your iPhone Application.</p>
<p><em>Update: Did it really free you from creating &#8220;lite&#8221; and &#8220;pro&#8221; versions? How did you manage to give away free copies of your in-app purchases for reviewers? Read my tutorial on how to<a href="http://blog.mugunthkumar.com/coding/iphone-tutorial-enabling-reviewers-to-use-your-in-app-purchases-for-free">enable in-app purchases for free</a></em></p>
<p>Apple allows three types of purchases within the app and Apple terms them as consumables, non-consumables and subscriptions.</p>
<p><strong>Consumables</strong> are products that are &#8220;consumed&#8221; immediately. This means, if the purchase is made today, and the user wants to purchase it again tomorrow, he will be charged again when he attempts a purchase.</p>
<p><strong>Non-Consumables</strong> are features that are purchased exactly once. Apple automatically takes care of &#8220;remembering&#8221; those purchases and allows the user to purchase them again for free, just like downloading apps you already purchased.</p>
<p><strong>Subscriptions</strong> are the most complicated part, They behave like non-consumables during the subscribed period and like consumables after that. You as a developer have to ensure that anything that is subscribed by the user is available across all of his iTunes synced devices when they are purchased from one device. Hence, do not lock in-app purchases to UDIDs. This might even get your app rejected. The StoreKit, as on date, doesn&#8217;t have any built-in mechanism to do it automatically which is why subscriptions are a bit tougher to develop.</p>
<p>One important point to note is that, in-app purchases cannot be used to deliver product updates. Changes to the binary has to be separately submitted. However, if you are a game developer, game data, maps, levels and other &#8220;data files&#8221; are allowed for in-app purchase.</p>
<p>In this post, we will focus on how to prepare your app for enabling features for the &#8220;pro&#8221; version from the &#8220;lite&#8221;. Or technically, we will focus on how to bring in, consumables and non-consumables into your app. We will leave the subscriptions part to another blog post as it&#8217;s quite complicated and involves some server side programming as well.<span id="more-518"></span></p>
<h2>Preparing your iTunes Connect</h2>
<p>To start with, in-app purchases, you need to do some ground work on your iTunes Connect account. A three step process that Apple thinks every developer should know. (Unfortunately I couldn&#8217;t find any official documentation for this)</p>
<h3>Step 1:</h3>
<p>First is to create an App ID and enable in-app purchases for that. This App ID shouldn&#8217;t have any wild card characters or else, the in-app purchases option will be grayed. I would always recommend to use a different App ID for every application you create. </p>
<h3 style="font-size: 1.17em;">Step 2:</h3>
<p>Create provisioning profiles (Development and Distribution) using this App ID. Again it&#8217;s a good practice to create different provisioning profiles for every app. There are many tutorials on how to create this <a href="http://www.wikihow.com/Create-a-Provisioning-Profile-for-iPhone">here</a> and Apple&#8217;s own documentation <a href="http://adcdownload.apple.com/iphone/iphone_developer_program_user_guide/iphone_developer_program_user_guide__standard_program_v2.4.pdf">here</a> (This link will prompt you to login).</p>
<h3 style="font-size: 1.17em;">Step 3:</h3>
<p>You need to create product references in your iTunes account. Each individual in-app purchase should be uniquely identifiable. Apple recommends using the <a href="http://en.wikipedia.org/wiki/Reverse-DNS">reverse DNS notation</a>, something like, com.mycompany.myiproduct.ifeature Before creating product ids, you need to associate it with a existing application in AppStore. If your app is not yet live, you can create a dummy, placeholder application, fill in the metadata (which you can anyway change it later) and check &#8220;upload binary later&#8221;.</p>
<p>To create a new in-app purchase, open your <a href="https://itunesconnect.apple.com">itunes connect</a> and choose &#8220;Manage In-App purchases&#8221;. Choose the app for which you want to setup in-app purchases and click next. You should see a screen like this.</p>
<p><a href="http://blog.mugunthkumar.com/wp-content/uploads/iTunes-Connect-1.png"><img class="aligncenter size-medium wp-image-522" title="iTunes Connect in-app Purchase" src="http://blog.mugunthkumar.com/wp-content/uploads/iTunes-Connect-1-300x103.png" alt="iTunes Connect in-app Purchase" width="300" height="103" /></a></p>
<p>The reference name is the name that appears during the in-app purchase prompt. Any name like, Levels 10 &#8211; 50 will be fine. The Product ID should be unique. This is used for reporting as well as within your app for requesting a purchase (more on this later). You can select the type as consumable or non-consumable. When you say an in-app purchase is consumable, your users will be charged everytime they purchase it. This is perfect for a radio app that requires users to pay for listening to a song everytime. If it&#8217;s a product feature, set it as non-consumable. Non-consumable products are purchased exactly once. When the user attempts to purchase it again, it will be delivered to him for free.</p>
<p>Type in the other required detail in this page and click save.</p>
<h3 style="font-size: 1.17em;">Step 4:</h3>
<p>The fourth and final step is to create test user accounts. After you program the app, you might want to test the app. You can use these accounts to login to the App Store. The purchases will be processed as if it were real but no financial transactions will take place.</p>
<p>This completes your iTunes connect configuration. Take a deep breath. We have just started. A lot more to go.</p>
<h2 style="font-size: 1.5em;">Writing the StoreKit Code</h2>
<p>Now that you have setup the iTunes account, let&#8217;s start by writing the actual code to interact with the AppStore and allow users to make purchases. For coding help, nothing beats the <a href="http://developer.apple.com/iphone/library/documentation/NetworkingInternet/Conceptual/StoreKitGuide/AddingaStoretoYourApplication/AddingaStoretoYourApplication.html#//apple_ref/doc/uid/TP40008267-CH101-SW1">Apple&#8217;s official StoreKit programming guide</a>. However, the guide has one bug that crashes the program. We will see how to circumvent it properly here.</p>
<h3 style="font-size: 1.17em;">Step 1: Adding StoreKit.Framework</h3>
<p>The first step here is to add the StoreKit.Framework to your project.</p>
<h3 style="font-size: 1.17em;">Step 2: Parental Controls</h3>
<p>It&#8217;s important to check whether the iPhone/iPod doesn&#8217;t have parental control restrictions. When you try to initiate a purchase when parental controls are on, you might crash your app. The apple docs code seems to have an error here. The function, canMakePayments is a static method of class SKPaymentQueue and not a member function. The working code looks like this.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span><span style="color: #002200;">&#91;</span>SKPaymentQueue canMakePayments<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span>
<span style="color: #002200;">&#123;</span>
... <span style="color: #11740a; font-style: italic;">// Display a store to the user.</span>
<span style="color: #002200;">&#125;</span>
<span style="color: #a61390;">else</span>
<span style="color: #002200;">&#123;</span>
... <span style="color: #11740a; font-style: italic;">// Warn the user that purchases are disabled.</span>
<span style="color: #002200;">&#125;</span></pre></div></div>

<h3 style="font-size: 1.17em;">Step 3: Retrieving the product information and populating the UI</h3>
<p>Now the you have designed a gorgeous looking view, you can show it to the user using, say presentmodalviewcontroller or any similar method. Do note that StoreKit doesn&#8217;t provide the UI to be displayed. It&#8217;s upto the developer to design the UI. The first step is to query your &#8220;In-App Purchases&#8221; and show the user, the available list of options. Retrieving the product information from AppStore is a couple of lines of code as illustrated here.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> requestProductData
<span style="color: #002200;">&#123;</span>
SKProductsRequest <span style="color: #002200;">*</span>request<span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>SKProductsRequest alloc<span style="color: #002200;">&#93;</span> 
initWithProductIdentifiers<span style="color: #002200;">:</span> <span style="color: #002200;">&#91;</span><span style="color: #400080;">NSSet</span> setWithObject<span style="color: #002200;">:</span> kMyFeatureIdentifier<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>;
request.delegate <span style="color: #002200;">=</span> self;
<span style="color: #002200;">&#91;</span>request start<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span>
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>productsRequest<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>SKProductsRequest <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>request didReceiveResponse<span style="color: #002200;">:</span>
        <span style="color: #002200;">&#40;</span>SKProductsResponse <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>response
<span style="color: #002200;">&#123;</span>
<span style="color: #400080;">NSArray</span> <span style="color: #002200;">*</span>myProduct <span style="color: #002200;">=</span> response.products;
<span style="color: #11740a; font-style: italic;">// populate UI</span>
<span style="color: #002200;">&#91;</span>request autorelease<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span></pre></div></div>

<p>The <em>kMyFeatureIdentifier</em> you pass to initWithProductIdentifiers is the uniquely identifiable product id you created in your AppStore account. Remember the reverse DNS product id? You CANNOT specify a wild card character here. So, if you have multiple products, you have to initialize the request object with a list of product using</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;">SKProductsRequest <span style="color: #002200;">*</span>request<span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>SKProductsRequest alloc<span style="color: #002200;">&#93;</span> 
initWithProductIdentifiers<span style="color: #002200;">:</span>
<span style="color: #002200;">&#91;</span><span style="color: #400080;">NSSet</span> setWithObjects<span style="color: #002200;">:</span> myGreatFeature1, myGreatFeature2, <span style="color: #a61390;">nil</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>;</pre></div></div>

<p>You can pass as many features as possible to setWithObjects and be sure to end the last object with nil.<br />
Setting the delegate to self and calling the start method will invoke the &#8220;didReceiveResponse&#8221; delegate. The delegate will give you an array of products and the request itself. Use the array to populate your store UI and release your request here. (This is the same request you created initially).</p>
<h3 style="font-size: 1.17em;">Step 4: Adding a Transaction Observer</h3>
<p>This is a very important step. You can do this as soon as your app is open or when you start a &#8220;In-App&#8221; purchase session. Do note that, in-app purchase requests are continued even if the user quits the app in between. So imagine a case, when user buys an item, but before the transaction is processed, he gets a phone call that interrupts everything. Though the actual transaction is not interfered (as it happens on Apple servers), your application will never know what happened. To ensure that you get all transaction notifications, (completed/ pending/restored), you have to register a class that receives the callbacks from AppStore. This class should implement  and it&#8217;s delegate methods.<br />
This is the code for registering the your store observer.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;">MKStoreObserver <span style="color: #002200;">*</span>observer <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>MKStoreObserver alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>SKPaymentQueue defaultQueue<span style="color: #002200;">&#93;</span> addTransactionObserver<span style="color: #002200;">:</span>observer<span style="color: #002200;">&#93;</span>;</pre></div></div>

<p>(If you can&#8217;t follow anything here, just head below for the real source code, but it&#8217;s advised that you read through this, understand and then use the code in your app).</p>
<h3 style="font-size: 1.17em;">Step 4: Implementing the callback</h3>
<p>Within your MKStoreObserver class, you have to implement the callback function paymentQueue:updatedTransactions:</p>
<p>This function will receive updates on the transactions as and when it&#8217;s made. Because your transactions take place even when the app is closed, you should be ready to receive these notifications as soon as you open the app. So the best place is to initialize it in applicationDidFinishLaunching or equivalent method.</p>
<p>Now in the updatedTransactions functions, handle the three types of transactions, purchased, failed and restored.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>paymentQueue<span style="color: #002200;">:</span>updatedTransactions<span style="color: #002200;">&#40;</span>SKPaymentQueue <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>queue 
updatedTransactions<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSArray</span> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>transactions
<span style="color: #002200;">&#123;</span>
<span style="color: #a61390;">for</span> <span style="color: #002200;">&#40;</span>SKPaymentTransaction <span style="color: #002200;">*</span>transaction <span style="color: #a61390;">in</span> transactions<span style="color: #002200;">&#41;</span>
<span style="color: #002200;">&#123;</span>
<span style="color: #a61390;">switch</span> <span style="color: #002200;">&#40;</span>transaction.transactionState<span style="color: #002200;">&#41;</span>
<span style="color: #002200;">&#123;</span>
<span style="color: #a61390;">case</span> SKPaymentTransactionStatePurchased<span style="color: #002200;">:</span>
<span style="color: #11740a; font-style: italic;">// take action to purchase the feature</span>
<span style="color: #002200;">&#91;</span>self provideContent<span style="color: #002200;">:</span> transaction.payment.productIdentifier<span style="color: #002200;">&#93;</span>;
<span style="color: #a61390;">break</span>;
<span style="color: #a61390;">case</span> SKPaymentTransactionStateFailed<span style="color: #002200;">:</span>
<span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>transaction.error.code <span style="color: #002200;">!=</span> SKErrorPaymentCancelled<span style="color: #002200;">&#41;</span>
<span style="color: #002200;">&#123;</span>
<span style="color: #11740a; font-style: italic;">// Optionally, display an error here.</span>
<span style="color: #002200;">&#125;</span>
<span style="color: #11740a; font-style: italic;">// take action to display some error message</span>
<span style="color: #a61390;">break</span>;
<span style="color: #a61390;">case</span> SKPaymentTransactionStateRestored<span style="color: #002200;">:</span>
<span style="color: #11740a; font-style: italic;">// take action to restore the app as if it was purchased</span>
<span style="color: #002200;">&#91;</span>self provideContent<span style="color: #002200;">:</span> transaction.originalTransaction.payment.productIdentifier<span style="color: #002200;">&#93;</span>;
<span style="color: #a61390;">default</span><span style="color: #002200;">:</span>
<span style="color: #a61390;">break</span>;
<span style="color: #002200;">&#125;</span>
<span style="color: #11740a; font-style: italic;">// Remove the transaction from the payment queue.</span>
<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>SKPaymentQueue defaultQueue<span style="color: #002200;">&#93;</span> finishTransaction<span style="color: #002200;">:</span> transaction<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span>
<span style="color: #002200;">&#125;</span></pre></div></div>

<p>Purchase and failed are seemingly straightforward. You will receive a restored transaction message when your app was quit before the transaction was completed. You should always do the &#8220;same&#8221; thing when your purchase is new or restored. If you want to charge your users for every download, then probably, set the in-app purchase to be a &#8220;consumable&#8221; item. But be sure to use that only for purchases that are really &#8220;consumable&#8221;. Like a live radio show or a podcast and not for unlocking additional levels. Users expect that a level they have unlocked will stay forever.</p>
<p>Three things to note here<br />
1) You should remove the transaction from the payment queue after the transaction is complete. Otherwise, the transaction will be re-attempted, which is not what the users expect (and your app will most likely get rejected).</p>
<p>2) You should provide the content (or unlock the feature) before completing the transaction. When you receive the message SKPaymentTransactionStatePurchased, it means that the users&#8217; credit card has been charged. It&#8217;s high time that you provide the feature.</p>
<p>3) You should not display an error when the transaction fails because the user rejected it.  Display any error message only when,</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>transaction.error.code <span style="color: #002200;">!=</span> SKErrorPaymentCancelled<span style="color: #002200;">&#41;</span>&lt;<span style="color: #002200;">/</span>code&gt;</pre></div></div>

<p>Apple recommends you not to display an error, because that is not an error. The user has purposely cancelled the transaction (probably because the price was too high?). You can audit it and go on. But for heaven sake, don&#8217;t display an error like, &#8220;Unable to process transaction because user cancelled operation!&#8221;. It will be soooo Windozy&#8230;</p>
<h3 style="font-size: 1.17em;">Step 5: The actual purchase</h3>
<p>Now that your architecture is ready, you can go ahead and initiate the purchase by calling the function below when the user clicks your &#8220;Buy&#8221; button on the UI.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;">SKPayment <span style="color: #002200;">*</span>payment <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>SKPayment paymentWithProductIdentifier<span style="color: #002200;">:</span>myGreatFeature1<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>SKPaymentQueue defaultQueue<span style="color: #002200;">&#93;</span> addPayment<span style="color: #002200;">:</span>payment<span style="color: #002200;">&#93;</span>;</pre></div></div>

<p>Optionally, you can add something like payment quantity for &#8220;consumable&#8221; items.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;">payment.quantity <span style="color: #002200;">=</span> n; <span style="color: #11740a; font-style: italic;">// number of &quot;items&quot; that user wishes to purchase.</span></pre></div></div>

<p>Finally, after providing the feature, you should &#8220;remember&#8221; that the user has purchased the app. Apple&#8217;s recommended way is to use NSUserDefaults, the same way you store your settings.</p>
<h2 style="font-size: 1.5em;">Testing your app</h2>
<p>Alright. Now let&#8217;s test the app. Note that, the app cannot be testing from iPhone simulator. The StoreKit communicates with AppStore.app to complete transactions which is not present in the Simulator. So connect your iPhone and run the app.<br />
Remember step 3 you did in iTunes connect? You created some test accounts? Well, they are used for testing your app. Before using that, sign out of AppStore by opening Settings.app -&gt; Store -&gt; Sign Out.<br />
Start the app. (You should NOT sign into the AppStore with the test user account. It will anyway ask you to provide your credit card which we are not interested in)</p>
<p>Open the Store UI and initiate the purchase. You will get a prompt like, &#8220;Do you want to buy 1 &#8220;ABC feature&#8221; for 2.99$? Tap Buy. You will be prompted to login. Provide your test account login. The AppStore provides a secure connection to the iTunes account and notifies you whether the purchase was successful through the callback paymentQueue:updatedTransactions. When you use the test account, the scenarios will be exactly same expect that no one will be charged. These test accounts run inside a sandbox.</p>
<p>In case your app got quit by a phone call, the transactions continue and you will get a restoreTransactions the next time your app is opened. This is why you should start listening to transactions as soon as you open the app (not just when the user opens the store UI)</p>
<p>That&#8217;s it. I wouldn&#8217;t say its easy. But for developers who have some intermediate knowledge in iPhone development and Objective C, it shouldn&#8217;t be a big deal. Remember that when your app is free, you get 10 times more downloads (as reported by admob statistics). When people actually use your app, there is a high chance that they buy your in-app features. That&#8217;s upselling becomes easy. Given that this is a very strong business model for the already saturated AppStore, you should start incorporating this model into your code soon.</p>
<h2 style="font-size: 1.5em;">Source code</h2>
<p>The source code, MKStoreKit, contains four files. MKStoreManager.h/m and MKStoreObserver.h/m. The StoreManager is a singleton class that takes care of *everything* Include StoreKit framework into your product and drag these four files into the project. You then have to initialize it by calling [MKStoreManager sharedStorageManager] in your applicationDidFinishLaunching. From then on, it does the magic. The MKStoreKit automatically activates/deactivates features based on your userDefaults. When a feature is purchased, it automatically records it into NSUserDefaults. For checking whether the user has purchased the feature, you can call a function like,</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #a61390;">if</span><span style="color: #002200;">&#40;</span><span style="color: #002200;">&#91;</span>MKStoreManager featureAPurchased<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span>
<span style="color: #002200;">&#123;</span>
<span style="color: #11740a; font-style: italic;">//unlock it</span>
<span style="color: #002200;">&#125;</span></pre></div></div>

<p>To purchase a feature, just call</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>MKStoreManager sharedManager<span style="color: #002200;">&#93;</span> buyFeatureA<span style="color: #002200;">&#93;</span>;</pre></div></div>

<p>It&#8217;s that simple with my storekit. The source code will be uploaded when this post is read by at least 1000 people. Please spread the word.</p>
<p>As always, all my source code can be used without royalty into your app. Just make sure that you don&#8217;t remove the copyright notice from the source code if you make your app open source. You don&#8217;t have to attribute me in your app, although I would be glad if you do so <img src='http://blog.mugunthkumar.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Downloads:<br />
Version 2:<a href="http://blog.mugunthkumar.com/wp-content/uploads/MKStoreKit-V2.0.zip">MKStoreKit V2.0</a><br />
Version 1:<a href="http://blog.mugunthkumar.com/wp-content/uploads/MKStoreKit.zip">MKStoreKit.zip</a></p>
<h2 style="font-size: 1.5em;">Troubleshooting</h2>
<p>Despite all this, In-App Purchases remain a biggest and the most <a href="http://www.netlingo.com/word/pita.php">PITA </a>situation for any iPhone developer.  If you can&#8217;t get it work, check whether your &#8220;didReceiveResponse&#8221; delegate returns the product id you passed as invalid. You can confirm this by adding a NSLog statement inside the delegate. Double check if your invalid product id returned here matches the product id you created in iTunes connect. If they are same, check if your product id on iTunes connect says &#8220;Cleared for Sale&#8221;. For this, you have to provide a screenshot and &#8220;Developer Approve&#8221; it.</p>
<p>Another case is, if this is your first app, then chances are that, your &#8220;Paid Applications Contract&#8221; isn&#8217;t yet in effect. If this is the case, you have to wait till Apple approves your bank details.</p>
<p>If these two doesn&#8217;t work, you might have to wait for 12-24 hrs, till Apple propagates your iTunes connect information to all it&#8217;s servers. See the last line in <a href="http://developer.apple.com/iphone/library/documentation/NetworkingInternet/Conceptual/StoreKitGuide/RetrievingStoreInformation/RetrievingStoreInformation.html#//apple_ref/doc/uid/TP40008267-CH2-SW1">this</a> documentation for more details.</p>
<p>If you have issues adding this to your application, you can hire me to do it for you. I charge a nominal fee of 30$ per hour and this work shouldn&#8217;t take more than a couple of hours.</p>
<p><strong>Update 1: (22-Oct-2009): Code changes to fix a crash that occured in most cases.</strong><br />
<strong>Update 2: (7-Dec-2009): Added link to MKStoreKit v2.0.</strong><br />
&#8211;<br />
Mugunth</p>
<p><map name='google_ad_map_518_8b86e81420c6776e'>
<area shape='rect' href='http://imageads.googleadservices.com/pagead/imgclick/518?pos=0' coords='1,2,367,28' />
<area shape='rect' href='http://services.google.com/feedback/abg' coords='384,10,453,23'/></map>
<img usemap='#google_ad_map_518_8b86e81420c6776e' border='0' src='http://imageads.googleadservices.com/pagead/ads?format=468x30_aff_img&amp;client=&amp;channel=&amp;output=png&amp;cuid=518&amp;url= http%3A%2F%2Fblog.mugunthkumar.com%2Fcoding%2Fiphone-tutorial-%25e2%2580%2593-in-app-purchases%2F' /></p>

<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://blog.mugunthkumar.com/coding/iphone-tutorial-%e2%80%93-in-app-purchases/&amp;title=iPhone+Tutorial+%E2%80%93+In-App+Purchases" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://blog.mugunthkumar.com/coding/iphone-tutorial-%e2%80%93-in-app-purchases/&amp;title=iPhone+Tutorial+%E2%80%93+In-App+Purchases" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://blog.mugunthkumar.com/coding/iphone-tutorial-%e2%80%93-in-app-purchases/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://blog.mugunthkumar.com/coding/iphone-tutorial-%e2%80%93-in-app-purchases/&amp;t=iPhone+Tutorial+%E2%80%93+In-App+Purchases" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=iPhone+Tutorial+%E2%80%93+In-App+Purchases+-+http://b2l.me/ag24f+" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-mail">
			<a href="mailto:?subject=%22iPhone%20Tutorial%20%E2%80%93%20In-App%20Purchases%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22Last%20week%2C%20Apple%20announced%20that%20in-app%20purchases%20will%20be%20available%20for%20free%20apps%20as%20well.%20This%20could%20probably%20free%20developers%20from%20creating%20%22lite%22%20and%20%22pro%22%20versions%20of%20the%20app%20and%20allow%20developers%20to%20%22unlock%22%20features%20inside%20the%20app%20and%20create%20business%20models%20that%20the%20AppStore%20haven%27t%20seen.%20This%20mo%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://blog.mugunthkumar.com/coding/iphone-tutorial-%e2%80%93-in-app-purchases/" rel="nofollow" class="external" title="Email this to a friend?">Email this to a friend?</a>
		</li>
		<li class="sexy-comfeed">
			<a href="http://blog.mugunthkumar.com/coding/iphone-tutorial-–-in-app-purchases/feed" rel="nofollow" class="external" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://blog.mugunthkumar.com/coding/iphone-tutorial-%e2%80%93-in-app-purchases/&amp;title=iPhone+Tutorial+%E2%80%93+In-App+Purchases&amp;summary=Last%20week%2C%20Apple%20announced%20that%20in-app%20purchases%20will%20be%20available%20for%20free%20apps%20as%20well.%20This%20could%20probably%20free%20developers%20from%20creating%20%22lite%22%20and%20%22pro%22%20versions%20of%20the%20app%20and%20allow%20developers%20to%20%22unlock%22%20features%20inside%20the%20app%20and%20create%20business%20models%20that%20the%20AppStore%20haven%27t%20seen.%20This%20mo&amp;source=blog.mugunthkumar.com" rel="nofollow" class="external" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://blog.mugunthkumar.com/coding/iphone-tutorial-%e2%80%93-in-app-purchases/&amp;title=iPhone+Tutorial+%E2%80%93+In-App+Purchases" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=iPhone+Tutorial+%E2%80%93+In-App+Purchases&amp;link=http://blog.mugunthkumar.com/coding/iphone-tutorial-%e2%80%93-in-app-purchases/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-printfriendly">
			<a href="http://www.printfriendly.com/print?url=http://blog.mugunthkumar.com/coding/iphone-tutorial-%e2%80%93-in-app-purchases/" rel="nofollow" class="external" title="Send this page to Print Friendly">Send this page to Print Friendly</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

<p>&copy;2010 <a href="http://blog.mugunthkumar.com">blog.mugunthkumar.com</a>. All Rights Reserved.</p>.

<p>Related posts:<ol><li><a href='http://blog.mugunthkumar.com/coding/iphone-tutorial-enabling-reviewers-to-use-your-in-app-purchases-for-free/' rel='bookmark' title='Permanent Link: iPhone Tutorial &#8211; Enabling reviewers to use your In-App purchases for free'>iPhone Tutorial &#8211; Enabling reviewers to use your In-App purchases for free</a> <small>In-App purchases is a great way for developers to upsell...</small></li>
<li><a href='http://blog.mugunthkumar.com/coding/iphone-tutorial-uisearchdisplaycontroller-with-nspredicate/' rel='bookmark' title='Permanent Link: iPhone Tutorial &#8211; UISearchDisplayController with NSPredicate'>iPhone Tutorial &#8211; UISearchDisplayController with NSPredicate</a> <small>Though UISearchDisplayController is seemingly easy (and yes it&#8217;s easy), apart...</small></li>
<li><a href='http://blog.mugunthkumar.com/coding/iphone-tutorial-elegant-way-to-send-formatted-in-app-email/' rel='bookmark' title='Permanent Link: iPhone Tutorial: Elegant way to send formatted In-App email'>iPhone Tutorial: Elegant way to send formatted In-App email</a> <small>By now, most of you know how to send emails...</small></li>
</ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/9pBHs9Q1D5kZiRNf8oUU-vU2hD8/0/da"><img src="http://feedads.g.doubleclick.net/~a/9pBHs9Q1D5kZiRNf8oUU-vU2hD8/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/9pBHs9Q1D5kZiRNf8oUU-vU2hD8/1/da"><img src="http://feedads.g.doubleclick.net/~a/9pBHs9Q1D5kZiRNf8oUU-vU2hD8/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.mugunthkumar.com/coding/iphone-tutorial-%e2%80%93-in-app-purchases/feed/</wfw:commentRss>
		<slash:comments>149</slash:comments>
		<feedburner:origLink>http://blog.mugunthkumar.com/coding/iphone-tutorial-%e2%80%93-in-app-purchases/</feedburner:origLink></item>
		<item>
		<title>Custom URL Shortening and Self Hosted “TwitPic”</title>
		<link>http://feedproxy.google.com/~r/MugunthKumar/~3/6hSH4Y7ukwo/</link>
		<comments>http://blog.mugunthkumar.com/tech/custom-url-shortening-and-self-hosted-twitpic/#comments</comments>
		<pubDate>Sat, 17 Oct 2009 04:57:19 +0000</pubDate>
		<dc:creator>Mugunth Kumar</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[diy]]></category>
		<category><![CDATA[twitpic]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[twitter2press]]></category>
		<category><![CDATA[url shorterning]]></category>
		<category><![CDATA[yourls]]></category>

		<guid isPermaLink="false">http://blog.mugunthkumar.com/?p=506</guid>
		<description><![CDATA[With the outburst of Twitter and microblogging services, many companies who want to make some quick money started services that include, URL shortening like tinyurl, bit.ly, tr.im and others or image sharing services like TwitPic, yFrog and so on. However, due to lack of a proper business model, some of these sites are struggling to meet [...]


Related posts:<ol><li><a href='http://blog.mugunthkumar.com/coding/how-to-make-your-uitableview-scroll-fast/' rel='bookmark' title='Permanent Link: How to make your UITableView scroll fast?'>How to make your UITableView scroll fast?</a> <small>How to make your UITableView scroll fast? The iPhone&#8217;s GPU...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>With the outburst of Twitter and microblogging services, many companies who want to make some quick money started services that include, URL shortening like tinyurl, bit.ly, tr.im and others or image sharing services like TwitPic, yFrog and so on. However, due to lack of a proper business model, some of these sites are struggling to meet their bandwidth costs. Because most of these services are just a week long PHP programming work, it&#8217;s easy for other companies to enter the URL shortening bandwagon. As such it&#8217;s difficult for companies to really make a business model out of this.</p>
<p>Recently, Twitter&#8217;s switch from tinyurl to bit.ly as it&#8217;s default shortening service infuriated companies like<a href="http://blog.tr.im/post/159369789/tr-im-r-i-p"> tr.im as they announced that they will probably be shutting down their service</a>, though <a href="http://blog.tr.im/post/160697842/tr-im-resurrected">they reverted their decision</a> later. When such companies go out of business, what will happen to your URLs? Dead and gone for good? So why not host our own URL shortening services? How difficult is it to write our own URL shortening service? Turns out that a few couple of PHP files, and a MySQL database and a mod-rewrite enabled Apache server is all what you need for hosting your own URL shortening service. Writing those PHP code is not for the those who are not conversant with PHP (including me). For people like us, two smart guys, <a href="http://twitter.com/GamerZ">Lester Chan </a> and <a href="http://twitter.com/ozh">Ozh Richard</a> at<a href="http://yourls.org"> yourls.org</a> have written a custom URL shortener that you can use it for free on your blog. In this post, I will briefly explain how to host your own custom URL shortener using YOURLS. Later we will also look at how to host your own &#8220;TwitPic&#8221; service.<br />
<br/></p>
<h2><span id="more-506"></span>Steps for hosting a custom URL Shortener</h2>
<p>Hosting your own custom URL shortener with YOURLS is a 3hr work. Yeah, believe me, these people have made most part of the work required. In fact, it took me more time to write this post than host YOURLS. I&#8217;ve explained it in four easy steps below.</p>
<h3>Step 1</h3>
<p>Purchase a short and sweet domain. I recently purchased a domain <a href="http://mk.sg">mk.sg</a> and it costed me a paltry 30$ (45 SGD) from <a href="http://www.vooju.com/">Vooju</a>. You can explore possible domains using <a href="http://domai.nr/">domainr</a>, a nice tool that automatically checks for available domains from the letters you choose. Though this step is not mandatory, it&#8217;s good to have a short domain name given that domain names are this cheap.</p>
<h3>Step 2</h3>
<p>Download the latest copy of yourls from <a href="http://yourls.org">their website</a>. Create a MySql database in your server and fill in the details of your MySQL database in the config file as explained in the <a href="http://yourls.org/#Config">config section</a> Upload your files to the root of the server.<br />
For example, I host my primary domain mugunthkumar.com and mk.sg in the same hosting account. mk.sg actually points to a folder inside my public_html folder. FTP these files into that folder and point your browser to http://<strong>YOUR-SHORT-DOMAIN.COM</strong>/admin. Click install. Done!</p>
<p>The configuration file provides options like whether it&#8217;s a private URL shortener or public, the usernames and passwords allowed for accessing the service and a whole lot. Believe me, it&#8217;s as feature-rich as bit.ly. You can track who clicked your links, from which location they clicked and a variety of other tracking features. However, it doesn&#8217;t allow users to &#8220;preview&#8221; the short links. Not a deal-breaker though.</p>
<p>If your installation is going to be private like mine, you can access the service from http://<strong>YOUR-SHORT-DOMAIN.COM</strong>/yourls-api.php You can rename yourls-api.php to something else as well. If you specify the installation as private in the config file, you have to provide a user name and password for accessing this API like below.</p>
<blockquote><p><code>http://<strong>YOUR-SHORT-DOMAIN.COM</strong>/yourls-api.php?action=shorturl&amp;username=test&amp;password=test&amp;format=simple&amp;&amp;url=%@</code></p></blockquote>
<p>If you want your URL shortener to be used by everyone, set it appropriately in the config file and you can ignore the username and password parameter from this API.</p>
<h3><strong>Step 3</strong></h3>
<p>Install the <a href="http://wordpress.org/extend/plugins/yourls-wordpress-to-twitter/">YOURLS word press plugin</a> that automatically links your posts, creates a short URL and tweets it. Any post or page you publish is now automatically tweeted by this plugin.</p>
<h3><strong>Step 4</strong></h3>
<p>Now, how good is a URL shortener if your favorite twitter client doesn&#8217;t support it? Fortunately with the release of Twitter 2, my favourite twitter client, you can use a custom URL shortener as described in <a href="http://developer.atebits.com">developer.atebits.com</a>. Open Tweetie 2, Go to Settings, URL Shorterning -&gt; Custom, type the entry below.</p>
<blockquote><p><code>http://<strong>YOUR-SHORT-DOMAIN.COM</strong>/yourls-api.php?action=shorturl&amp;username=test&amp;password=test&amp;format=simple&amp;&amp;url=%@</code></p></blockquote>
<p>Hopefully, other twitter clients will follow the crowd shortly. And I believe, if most twitter clients support custom URL shortening, the market share for bit.ly and others might go down.</p>
<p>With this, you can get your own custom URL shortening service up and running within, say, 3 hrs.<br />
Next, we will look at how to host our own &#8220;TwitPic&#8221; service.<br />
<br/></p>
<h2>Steps for hosting a custom &#8220;TwitPic&#8221;</h2>
<p>Hosting your own &#8220;TwitPic&#8221; is even easier. Thanks to the Wordpress plugin <a href="http://wordpress.org/extend/plugins/twitter2press/">Twitter2Press</a>, that completely automates everything! Below are the detailed steps for hosting your own &#8220;TwitPic&#8221;.</p>
<h3>Step 1</h3>
<p>Create a subdomain or directory and install wordpress into it. Note that yourls and wordpress cannot co-exist in the same directory as both handle URLs differently. So install it into a subdomain and make that subdomain as short as possible. Mine is <a href="http://b.mk.sg">b.mk.sg</a>.</p>
<h3><strong>Step 2</strong></h3>
<p>Install the Twitter2Press plugin and open the settings page. Choose YOURLS and specify the API username and password. This is the same username password that you provided in the config file while setting up YOURLS. Choose a page for the image gallery. This is the page that shows the images you tweeted (much like twitpic or yFrog&#8217;s home page). It can either be your home page or a dedicated page, say Image Gallery or something.</p>
<h3><strong>Step 3</strong></h3>
<p>Twitter2Press has an API that is supported by Tweetie 2 and hopefully other twitter clients will follow. For tweetie to work with your Image Service, you need to provide the API endpoint. If your Image Gallery Page is &#8220;gallery&#8221;, the endpoint is</p>
<blockquote><p><code>http://<strong>YOUR-SHORT-DOMAIN.COM</strong>/<em>gallery</em>/index.php</code></p></blockquote>
<p>All parameters are posted to this service by Tweetie 2. If you don&#8217;t have a dedicated Image Gallery Page, omit the gallery from the API endpoint.<br />
<br/><br />
That&#8217;s it. Now even if tr.im shuts down or twitpic eats all your files, you are safe. Your data lies in your server. Go, start yours now!</p>
<p>&#8211;</p>
<p>Mugunth</p>
<p><map name='google_ad_map_506_8b86e81420c6776e'>
<area shape='rect' href='http://imageads.googleadservices.com/pagead/imgclick/506?pos=0' coords='1,2,367,28' />
<area shape='rect' href='http://services.google.com/feedback/abg' coords='384,10,453,23'/></map>
<img usemap='#google_ad_map_506_8b86e81420c6776e' border='0' src='http://imageads.googleadservices.com/pagead/ads?format=468x30_aff_img&amp;client=&amp;channel=&amp;output=png&amp;cuid=506&amp;url= http%3A%2F%2Fblog.mugunthkumar.com%2Ftech%2Fcustom-url-shortening-and-self-hosted-twitpic%2F' /></p>

<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://blog.mugunthkumar.com/tech/custom-url-shortening-and-self-hosted-twitpic/&amp;title=Custom+URL+Shortening+and+Self+Hosted+%22TwitPic%22" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://blog.mugunthkumar.com/tech/custom-url-shortening-and-self-hosted-twitpic/&amp;title=Custom+URL+Shortening+and+Self+Hosted+%22TwitPic%22" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://blog.mugunthkumar.com/tech/custom-url-shortening-and-self-hosted-twitpic/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://blog.mugunthkumar.com/tech/custom-url-shortening-and-self-hosted-twitpic/&amp;t=Custom+URL+Shortening+and+Self+Hosted+%22TwitPic%22" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=Custom+URL+Shortening+and+Self+Hosted+%22TwitPic%22+-+http://b2l.me/ag3n9+" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-mail">
			<a href="mailto:?subject=%22Custom%20URL%20Shortening%20and%20Self%20Hosted%20%22TwitPic%22%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22With%20the%20outburst%20of%20Twitter%20and%20microblogging%20services%2C%20many%20companies%20who%20want%20to%20make%20some%20quick%20money%20started%20services%20that%20include%2C%20URL%20shortening%20like%20tinyurl%2C%20bit.ly%2C%20tr.im%20and%20others%20or%20image%20sharing%20services%20like%20TwitPic%2C%20yFrog%20and%20so%20on.%20However%2C%20due%20to%20lack%20of%20a%20proper%C2%A0business%20model%2C%20so%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://blog.mugunthkumar.com/tech/custom-url-shortening-and-self-hosted-twitpic/" rel="nofollow" class="external" title="Email this to a friend?">Email this to a friend?</a>
		</li>
		<li class="sexy-comfeed">
			<a href="http://blog.mugunthkumar.com/tech/custom-url-shortening-and-self-hosted-twitpic/feed" rel="nofollow" class="external" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://blog.mugunthkumar.com/tech/custom-url-shortening-and-self-hosted-twitpic/&amp;title=Custom+URL+Shortening+and+Self+Hosted+%22TwitPic%22&amp;summary=With%20the%20outburst%20of%20Twitter%20and%20microblogging%20services%2C%20many%20companies%20who%20want%20to%20make%20some%20quick%20money%20started%20services%20that%20include%2C%20URL%20shortening%20like%20tinyurl%2C%20bit.ly%2C%20tr.im%20and%20others%20or%20image%20sharing%20services%20like%20TwitPic%2C%20yFrog%20and%20so%20on.%20However%2C%20due%20to%20lack%20of%20a%20proper%C2%A0business%20model%2C%20so&amp;source=blog.mugunthkumar.com" rel="nofollow" class="external" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://blog.mugunthkumar.com/tech/custom-url-shortening-and-self-hosted-twitpic/&amp;title=Custom+URL+Shortening+and+Self+Hosted+%22TwitPic%22" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=Custom+URL+Shortening+and+Self+Hosted+%22TwitPic%22&amp;link=http://blog.mugunthkumar.com/tech/custom-url-shortening-and-self-hosted-twitpic/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-printfriendly">
			<a href="http://www.printfriendly.com/print?url=http://blog.mugunthkumar.com/tech/custom-url-shortening-and-self-hosted-twitpic/" rel="nofollow" class="external" title="Send this page to Print Friendly">Send this page to Print Friendly</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

<p>&copy;2010 <a href="http://blog.mugunthkumar.com">blog.mugunthkumar.com</a>. All Rights Reserved.</p>.

<p>Related posts:<ol><li><a href='http://blog.mugunthkumar.com/coding/how-to-make-your-uitableview-scroll-fast/' rel='bookmark' title='Permanent Link: How to make your UITableView scroll fast?'>How to make your UITableView scroll fast?</a> <small>How to make your UITableView scroll fast? The iPhone&#8217;s GPU...</small></li>
</ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/n3bsgedR_Klq88cjoEXWiFU_LWY/0/da"><img src="http://feedads.g.doubleclick.net/~a/n3bsgedR_Klq88cjoEXWiFU_LWY/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/n3bsgedR_Klq88cjoEXWiFU_LWY/1/da"><img src="http://feedads.g.doubleclick.net/~a/n3bsgedR_Klq88cjoEXWiFU_LWY/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.mugunthkumar.com/tech/custom-url-shortening-and-self-hosted-twitpic/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blog.mugunthkumar.com/tech/custom-url-shortening-and-self-hosted-twitpic/</feedburner:origLink></item>
		<item>
		<title>bit.ly wrapper for Objective-C/iPhone</title>
		<link>http://feedproxy.google.com/~r/MugunthKumar/~3/7Ug4XlLNge0/</link>
		<comments>http://blog.mugunthkumar.com/coding/bit-ly-wrapper-objective-c-iphone/#comments</comments>
		<pubDate>Sat, 26 Sep 2009 04:00:44 +0000</pubDate>
		<dc:creator>Mugunth Kumar</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[bit.ly]]></category>
		<category><![CDATA[iphone dev]]></category>
		<category><![CDATA[objective c]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[REST]]></category>

		<guid isPermaLink="false">http://blog.mugunthkumar.com/?p=402</guid>
		<description><![CDATA[Continuing from my part 1, in this section, we will discuss about how to use this helper in your own application.
Source Code
Download the source code here
MKBitlyHelper 1.0.zip
Documentation
With just three lines of code, you can shorten your URL using this wrapper.
Initialize the helper class with your loginname and apikey.
bitlyHelper = [[MKBitlyHelper alloc] initWithLoginName:@"yourlogin" andAPIKey:@"yourapi"];

In your application, [...]


Related posts:<ol><li><a href='http://blog.mugunthkumar.com/coding/consuming-a-restful-service-bit-ly-in-an-iphone-application/' rel='bookmark' title='Permanent Link: Consuming a RESTful Service (bit.ly) in an iPhone Application'>Consuming a RESTful Service (bit.ly) in an iPhone Application</a> <small> bit-ly-rest-api-objective-c Introduction Of late, many programmers who develop for...</small></li>
<li><a href='http://blog.mugunthkumar.com/coding/iphone-tutorial-follow-cost-api-and-a-open-source-wrapper/' rel='bookmark' title='Permanent Link: iPhone Tutorial: Follow Cost API and a open source wrapper'>iPhone Tutorial: Follow Cost API and a open source wrapper</a> <small>What is Follow Cost? Follow Cost is a interesting and...</small></li>
<li><a href='http://blog.mugunthkumar.com/coding/formatting-dates-relative-to-now-objective-c-iphone/' rel='bookmark' title='Permanent Link: Formatting Dates relative to Now &#8211; Objective C (iPhone)'>Formatting Dates relative to Now &#8211; Objective C (iPhone)</a> <small> codeproject Introduction Many a times, in an iPhone application,...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Continuing from my <a href="http://blog.mugunthkumar.com/coding/consuming-a-restful-service-bit-ly-in-an-iphone-application">part 1</a>, in this section, we will discuss about how to use this helper in your own application.</p>
<h3>Source Code</h3>
<p>Download the source code here<br />
<a href="http://blog.mugunthkumar.com/wp-content/uploads/MKBitlyHelper-v1.0.zip">MKBitlyHelper 1.0.zip</a></p>
<h3>Documentation</h3>
<p>With just three lines of code, you can shorten your URL using this wrapper.</p>
<p>Initialize the helper class with your loginname and apikey.</p>
<blockquote><p><code>bitlyHelper = [[MKBitlyHelper alloc] </code><code>initWithLoginName:@"yourlogin" andAPIKey:@"yourapi"];</code><code><br />
</code></p></blockquote>
<p>In your application, you can either provide your application specific API or user provided API. Logging into the bit.ly api helps in tracking the click throughs and referrals. The classes doesn&#8217;t provide a login or APIKey by itself.</p>
<p>Now, shortening or expanding URLs is as easy as calling these functions.</p>
<blockquote><p><code>NSString *shortURL = [bitlyHelper shortenURL:@"http://mugunthkumar.com"];<br />
NSString *longURL = [bitlyHelper expandURL:shortURL];</code></p></blockquote>
<h3>Disclaimers and other yada yada&#8230;</h3>
<p>Be forewarned that it may have errors. As Donald Knuth says,</p>
<blockquote><p>Beware of bugs in the above code; I have only proved it correct, not tried it.</p></blockquote>
<p>Feel free you use this code and re-distribute it. The source code must retain the copyrights and my attribution in any derivative works of the source code.</p>
<p>On your application, you might opt to attribute me in your app though it&#8217;s not mandatory. I would be happy if you do so <img src='http://blog.mugunthkumar.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p><map name='google_ad_map_402_8b86e81420c6776e'>
<area shape='rect' href='http://imageads.googleadservices.com/pagead/imgclick/402?pos=0' coords='1,2,367,28' />
<area shape='rect' href='http://services.google.com/feedback/abg' coords='384,10,453,23'/></map>
<img usemap='#google_ad_map_402_8b86e81420c6776e' border='0' src='http://imageads.googleadservices.com/pagead/ads?format=468x30_aff_img&amp;client=&amp;channel=&amp;output=png&amp;cuid=402&amp;url= http%3A%2F%2Fblog.mugunthkumar.com%2Fcoding%2Fbit-ly-wrapper-objective-c-iphone%2F' /></p>

<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://blog.mugunthkumar.com/coding/bit-ly-wrapper-objective-c-iphone/&amp;title=bit.ly+wrapper+for+Objective-C%2FiPhone" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://blog.mugunthkumar.com/coding/bit-ly-wrapper-objective-c-iphone/&amp;title=bit.ly+wrapper+for+Objective-C%2FiPhone" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://blog.mugunthkumar.com/coding/bit-ly-wrapper-objective-c-iphone/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://blog.mugunthkumar.com/coding/bit-ly-wrapper-objective-c-iphone/&amp;t=bit.ly+wrapper+for+Objective-C%2FiPhone" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=bit.ly+wrapper+for+Objective-C%2FiPhone+-+http://b2l.me/ag27b+" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-mail">
			<a href="mailto:?subject=%22bit.ly%20wrapper%20for%20Objective-C%2FiPhone%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22Continuing%20from%20my%20part%201%2C%20in%20this%20section%2C%20we%20will%20discuss%20about%20how%20to%20use%20this%20helper%20in%20your%20own%20application.%0D%0ASource%20Code%0D%0ADownload%20the%20source%20code%20here%0D%0AMKBitlyHelper%201.0.zip%0D%0ADocumentation%0D%0AWith%20just%20three%20lines%20of%20code%2C%20you%20can%20shorten%20your%20URL%20using%20this%20wrapper.%0D%0A%0D%0AInitialize%20the%20helper%20cl%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://blog.mugunthkumar.com/coding/bit-ly-wrapper-objective-c-iphone/" rel="nofollow" class="external" title="Email this to a friend?">Email this to a friend?</a>
		</li>
		<li class="sexy-comfeed">
			<a href="http://blog.mugunthkumar.com/coding/bit-ly-wrapper-objective-c-iphone/feed" rel="nofollow" class="external" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://blog.mugunthkumar.com/coding/bit-ly-wrapper-objective-c-iphone/&amp;title=bit.ly+wrapper+for+Objective-C%2FiPhone&amp;summary=Continuing%20from%20my%20part%201%2C%20in%20this%20section%2C%20we%20will%20discuss%20about%20how%20to%20use%20this%20helper%20in%20your%20own%20application.%0D%0ASource%20Code%0D%0ADownload%20the%20source%20code%20here%0D%0AMKBitlyHelper%201.0.zip%0D%0ADocumentation%0D%0AWith%20just%20three%20lines%20of%20code%2C%20you%20can%20shorten%20your%20URL%20using%20this%20wrapper.%0D%0A%0D%0AInitialize%20the%20helper%20cl&amp;source=blog.mugunthkumar.com" rel="nofollow" class="external" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://blog.mugunthkumar.com/coding/bit-ly-wrapper-objective-c-iphone/&amp;title=bit.ly+wrapper+for+Objective-C%2FiPhone" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=bit.ly+wrapper+for+Objective-C%2FiPhone&amp;link=http://blog.mugunthkumar.com/coding/bit-ly-wrapper-objective-c-iphone/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-printfriendly">
			<a href="http://www.printfriendly.com/print?url=http://blog.mugunthkumar.com/coding/bit-ly-wrapper-objective-c-iphone/" rel="nofollow" class="external" title="Send this page to Print Friendly">Send this page to Print Friendly</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

<p>&copy;2010 <a href="http://blog.mugunthkumar.com">blog.mugunthkumar.com</a>. All Rights Reserved.</p>.

<p>Related posts:<ol><li><a href='http://blog.mugunthkumar.com/coding/consuming-a-restful-service-bit-ly-in-an-iphone-application/' rel='bookmark' title='Permanent Link: Consuming a RESTful Service (bit.ly) in an iPhone Application'>Consuming a RESTful Service (bit.ly) in an iPhone Application</a> <small> bit-ly-rest-api-objective-c Introduction Of late, many programmers who develop for...</small></li>
<li><a href='http://blog.mugunthkumar.com/coding/iphone-tutorial-follow-cost-api-and-a-open-source-wrapper/' rel='bookmark' title='Permanent Link: iPhone Tutorial: Follow Cost API and a open source wrapper'>iPhone Tutorial: Follow Cost API and a open source wrapper</a> <small>What is Follow Cost? Follow Cost is a interesting and...</small></li>
<li><a href='http://blog.mugunthkumar.com/coding/formatting-dates-relative-to-now-objective-c-iphone/' rel='bookmark' title='Permanent Link: Formatting Dates relative to Now &#8211; Objective C (iPhone)'>Formatting Dates relative to Now &#8211; Objective C (iPhone)</a> <small> codeproject Introduction Many a times, in an iPhone application,...</small></li>
</ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/Uppj34k7m2hxh1Y-vQaNHdifQuM/0/da"><img src="http://feedads.g.doubleclick.net/~a/Uppj34k7m2hxh1Y-vQaNHdifQuM/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/Uppj34k7m2hxh1Y-vQaNHdifQuM/1/da"><img src="http://feedads.g.doubleclick.net/~a/Uppj34k7m2hxh1Y-vQaNHdifQuM/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.mugunthkumar.com/coding/bit-ly-wrapper-objective-c-iphone/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://blog.mugunthkumar.com/coding/bit-ly-wrapper-objective-c-iphone/</feedburner:origLink></item>
		<item>
		<title>Introducing MKSync – iPhone App for Syncplicity</title>
		<link>http://feedproxy.google.com/~r/MugunthKumar/~3/p_WnyObhK7Q/</link>
		<comments>http://blog.mugunthkumar.com/products/introducing-mksync-iphone-app-for-syncplicity/#comments</comments>
		<pubDate>Fri, 11 Sep 2009 15:56:06 +0000</pubDate>
		<dc:creator>Mugunth Kumar</dc:creator>
				<category><![CDATA[Products]]></category>
		<category><![CDATA[cloud storage]]></category>
		<category><![CDATA[iPhone Apps]]></category>
		<category><![CDATA[syncplicity]]></category>

		<guid isPermaLink="false">http://blog.mugunthkumar.com/?p=467</guid>
		<description><![CDATA[For the past 2 or 3 months, I&#8217;ve been busy developing a product, which I&#8217;m announcing now. It&#8217;s called as MKSync and it&#8217;s a iPhone client for Syncplicity.
The product is in its early release phase and I intend to  submit it to AppStore by this month end.  Currently I&#8217;m looking for beta testers. I&#8217;m [...]


Related posts:<ol><li><a href='http://blog.mugunthkumar.com/products/singtel-bbom-iphone-app/' rel='bookmark' title='Permanent Link: SingTel BBoM iPhone App (SG BBOM)'>SingTel BBoM iPhone App (SG BBOM)</a> <small>SG BBoM iPhone App is designed specifically for use with...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>For the past 2 or 3 months, I&#8217;ve been busy developing a product, which I&#8217;m announcing now. It&#8217;s called as <a href="http://mugunthkumar.com/iphone/mksync"><strong><em>MKSync</em></strong></a> and it&#8217;s a iPhone client for <a href="http://syncplicity.com">Syncplicity</a>.</p>
<p>The product is in its early release phase and I intend to  submit it to AppStore by this month end.  <span style="text-decoration: line-through;">Currently I&#8217;m looking for beta testers. I&#8217;m looking for around 10-20 beta testers. As and when needs arise, I might increase the limit. I would prefer people who will be interested in testing the app&#8217;s second and third versions as well.</span></p>
<p>As of version 1, the most important features include, sharing files via email and the ability to browse and view downloaded files on iPhone without an active Internet connection. These features are illustrated in the screencast below.</p>
<p><object width="660" height="525"><param name="movie" value="http://www.youtube.com/v/8VIlzjEz9YM&#038;hl=en&#038;fs=1&#038;rel=0&#038;color1=0x234900&#038;color2=0x4e9e00&#038;hd=1&#038;border=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/8VIlzjEz9YM&#038;hl=en&#038;fs=1&#038;rel=0&#038;color1=0x234900&#038;color2=0x4e9e00&#038;hd=1&#038;border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="660" height="525"></embed></object></p>
<p><del datetime="2009-10-19T07:26:23+00:00">If you prefer a direct download of the screencast, click here<br />
<a href="https://my.syncplicity.com/share/kn3xqer1hn/Syncplicity_Screencast.zip">https://my.syncplicity.com/share/kn3xqer1hn/Syncplicity_Screencast.zip</a> &#8212; Removed direct download. This screencast is too old.</del></p>
<p>If you are interested in beta testing, drop me a mail @ feedback@mugunthkumar.com with your UDIDs.</p>
<p>You can send me your UDID using <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=285691333&amp;mt=8">Erica Sadun&#8217;s UDID Generator</a>. (iTunes Link)</p>
<p>For more information go to the Syncplicity forum here. (You need a Syncplicity account for accessing the forums)<br />
<a href="https://my.syncplicity.com/Forums/default.aspx?g=posts&amp;t=2793">https://my.syncplicity.com/Forums/default.aspx?g=posts&amp;t=2793</a></p>
<p>For updates on this product, You can follow us on twitter <a href="http://twitter.com/mksync" target="_blank">@mksync</a>.</p>
<p><strong>Update: 21st September 2009: Closed for private beta. Follow us for product release updates.</strong><br />
<strong>Update: 19th October 2009: Product submitted to Apple. Follow us for product release updates.</strong><br />
<strong>Update: 7th November 2009: Product approved by Apple. No rejections whatsoever! Visit the product page for <a href="http://mugunthkumar.com/iphone/mksync">MKSync</a> here.</strong><br />
Thanks,<br />
Mugunth</p>
<hr />
<h6>For those who don&#8217;t know, what is Syncplicity, please read it&#8217;s <a href="http://en.wikipedia.org/wiki/Syncplicity">wikipedia entry</a>. It&#8217;s a cloud based, online backup and sync service, that works seamlessly behind the scenes to synchronize your data across computers simultaneously backing up to the cloud. Long gone are the days when you carried a USB drive around to keep your data in Sync. Apart from just syncing PCs, it can sync your google docs documents with your PC, keep your facebook albums in sync with your photos and much more&#8230;</h6>
<p><map name='google_ad_map_467_8b86e81420c6776e'>
<area shape='rect' href='http://imageads.googleadservices.com/pagead/imgclick/467?pos=0' coords='1,2,367,28' />
<area shape='rect' href='http://services.google.com/feedback/abg' coords='384,10,453,23'/></map>
<img usemap='#google_ad_map_467_8b86e81420c6776e' border='0' src='http://imageads.googleadservices.com/pagead/ads?format=468x30_aff_img&amp;client=&amp;channel=&amp;output=png&amp;cuid=467&amp;url= http%3A%2F%2Fblog.mugunthkumar.com%2Fproducts%2Fintroducing-mksync-iphone-app-for-syncplicity%2F' /></p>

<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://blog.mugunthkumar.com/products/introducing-mksync-iphone-app-for-syncplicity/&amp;title=Introducing+MKSync+-+iPhone+App+for+Syncplicity" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://blog.mugunthkumar.com/products/introducing-mksync-iphone-app-for-syncplicity/&amp;title=Introducing+MKSync+-+iPhone+App+for+Syncplicity" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://blog.mugunthkumar.com/products/introducing-mksync-iphone-app-for-syncplicity/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://blog.mugunthkumar.com/products/introducing-mksync-iphone-app-for-syncplicity/&amp;t=Introducing+MKSync+-+iPhone+App+for+Syncplicity" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=Introducing+MKSync+-+iPhone+App+for+Syncplicity+-+http://b2l.me/ag3pb+" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-mail">
			<a href="mailto:?subject=%22Introducing%20MKSync%20-%20iPhone%20App%20for%20Syncplicity%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22For%20the%20past%202%20or%203%20months%2C%20I%27ve%20been%20busy%20developing%20a%20product%2C%20which%20I%27m%20announcing%20now.%20It%27s%20called%20as%20MKSync%20and%20it%27s%20a%20iPhone%20client%20for%20Syncplicity.%0D%0A%0D%0AThe%20product%20is%20in%20its%20early%20release%20phase%20and%20I%20intend%20to%C2%A0%20submit%20it%20to%20AppStore%20by%20this%20month%20end.%20%20Currently%20I%27m%20looking%20for%20beta%20testers.%20%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://blog.mugunthkumar.com/products/introducing-mksync-iphone-app-for-syncplicity/" rel="nofollow" class="external" title="Email this to a friend?">Email this to a friend?</a>
		</li>
		<li class="sexy-comfeed">
			<a href="http://blog.mugunthkumar.com/products/introducing-mksync-iphone-app-for-syncplicity/feed" rel="nofollow" class="external" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://blog.mugunthkumar.com/products/introducing-mksync-iphone-app-for-syncplicity/&amp;title=Introducing+MKSync+-+iPhone+App+for+Syncplicity&amp;summary=For%20the%20past%202%20or%203%20months%2C%20I%27ve%20been%20busy%20developing%20a%20product%2C%20which%20I%27m%20announcing%20now.%20It%27s%20called%20as%20MKSync%20and%20it%27s%20a%20iPhone%20client%20for%20Syncplicity.%0D%0A%0D%0AThe%20product%20is%20in%20its%20early%20release%20phase%20and%20I%20intend%20to%C2%A0%20submit%20it%20to%20AppStore%20by%20this%20month%20end.%20%20Currently%20I%27m%20looking%20for%20beta%20testers.%20&amp;source=blog.mugunthkumar.com" rel="nofollow" class="external" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://blog.mugunthkumar.com/products/introducing-mksync-iphone-app-for-syncplicity/&amp;title=Introducing+MKSync+-+iPhone+App+for+Syncplicity" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=Introducing+MKSync+-+iPhone+App+for+Syncplicity&amp;link=http://blog.mugunthkumar.com/products/introducing-mksync-iphone-app-for-syncplicity/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-printfriendly">
			<a href="http://www.printfriendly.com/print?url=http://blog.mugunthkumar.com/products/introducing-mksync-iphone-app-for-syncplicity/" rel="nofollow" class="external" title="Send this page to Print Friendly">Send this page to Print Friendly</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

<p>&copy;2010 <a href="http://blog.mugunthkumar.com">blog.mugunthkumar.com</a>. All Rights Reserved.</p>.

<p>Related posts:<ol><li><a href='http://blog.mugunthkumar.com/products/singtel-bbom-iphone-app/' rel='bookmark' title='Permanent Link: SingTel BBoM iPhone App (SG BBOM)'>SingTel BBoM iPhone App (SG BBOM)</a> <small>SG BBoM iPhone App is designed specifically for use with...</small></li>
</ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/WAhdB2wsKYvFGbeW5ZGgDGJW3Zw/0/da"><img src="http://feedads.g.doubleclick.net/~a/WAhdB2wsKYvFGbeW5ZGgDGJW3Zw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/WAhdB2wsKYvFGbeW5ZGgDGJW3Zw/1/da"><img src="http://feedads.g.doubleclick.net/~a/WAhdB2wsKYvFGbeW5ZGgDGJW3Zw/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.mugunthkumar.com/products/introducing-mksync-iphone-app-for-syncplicity/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://blog.mugunthkumar.com/products/introducing-mksync-iphone-app-for-syncplicity/</feedburner:origLink></item>
	</channel>
</rss>
