<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>I’m an Irish iPhone developer, currently migrating my skills from the web to Apples most popular mobile computing device. Based in County Leitrim, Ireland and working from home as a freelance developer in PHP, Perl, and Objective-C.Contact me at andy@luibh.ie.</description><title>Luibh - Irish iPhone Developer, Ireland, Blog</title><generator>Tumblr (3.0; @luibh-ie)</generator><link>http://blog.luibh.ie/</link><item><title>Using PhoneView during iOS Development</title><description>&lt;a href="http://www.ecamm.com/mac/phoneview/"&gt;Using PhoneView during iOS Development&lt;/a&gt;: &lt;p&gt;&lt;a href="http://vinnycoyne.tumblr.com/post/8733666626"&gt;vinnycoyne&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If you’re debugging an iOS app on-device, and need to access data that you’re storing somewhere within the app’s home directory, just fire up &lt;a href="http://www.ecamm.com/mac/phoneview/"&gt;PhoneView&lt;/a&gt; and click on the Apps section. Easy!&lt;/p&gt;
&lt;/blockquote&gt;</description><link>http://blog.luibh.ie/post/8734143450</link><guid>http://blog.luibh.ie/post/8734143450</guid><pubDate>Wed, 10 Aug 2011 15:33:22 +0100</pubDate><category>iOS</category><category>tip</category><category>tips</category><category>iPhone</category><category>iPod</category><category>iPad</category><category>phone view</category><category>mac</category><category>debug</category><category>debugging</category><category>developer</category><category>development</category></item><item><title>An iOS Developer Takes on Android</title><description>&lt;p&gt;&lt;a href="http://nfarina.com/post/8239634061/ios-to-android"&gt;nfarina&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src="http://cl.ly/34182G3F1r1L2r0K1M0N/Untitled-1.png"/&gt;&lt;/p&gt;
&lt;p&gt;Recently, we released the &lt;a href="https://market.android.com/details?id=meridian.app"&gt;Android version&lt;/a&gt; of &lt;a href="http://www.meridianapps.com"&gt;Meridian&lt;/a&gt;, our platform for building location-based apps.&lt;/p&gt;
&lt;p&gt;We didn’t use one of these “Cross Platform!” tools like &lt;a href="http://www.appcelerator.com"&gt;Titanium&lt;/a&gt;. We wrote it, from scratch, in Java, like you do in Android.&lt;/p&gt;
&lt;p&gt;We decided it was important to keep the native stuff native, and to respect each platform’s conventions as much as possible. Some conventions are easy to follow, like putting our tabs on the top. Other conventions go deep into the Android Way, like handling &lt;code&gt;Intents&lt;/code&gt;, closing old &lt;code&gt;Activities&lt;/code&gt;, implementing Search Providers, and being strict about references to help the garbage collector.&lt;/p&gt;
&lt;p&gt;Now, our platform leverages HTML5 (buzzword, sorry) in many places for branding and content display, so we got a fair amount of UI for free. But there was much platform code written in Objective-C that needed translation into Java, such as map navigation, directions, and location switching.&lt;/p&gt;
&lt;p&gt;So, we rolled up our sleeves, downloaded the Android SDK, and got to work.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://nfarina.com/post/8239634061/ios-to-android"&gt;Read More&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;</description><link>http://blog.luibh.ie/post/8392140674</link><guid>http://blog.luibh.ie/post/8392140674</guid><pubDate>Tue, 02 Aug 2011 19:37:09 +0100</pubDate></item><item><title>Infinite Touch iOS Development</title><description>&lt;a href="http://www.infinitetouch.ie"&gt;Infinite Touch iOS Development&lt;/a&gt;: &lt;p&gt;This is the website for my new Irish iOS development company, which will largely become my primary business site. This makes luibh.ie my personal website now, which is no bad thing.&lt;/p&gt;
&lt;p&gt;If you need an iPhone app developed or need some help with your objective-c then feel free to get in touch. &lt;/p&gt;</description><link>http://blog.luibh.ie/post/3360873931</link><guid>http://blog.luibh.ie/post/3360873931</guid><pubDate>Fri, 18 Feb 2011 11:00:53 +0000</pubDate></item><item><title>Speculation on the next MacBook Pro</title><description>&lt;a href="http://www.marco.org/3027446896"&gt;Speculation on the next MacBook Pro&lt;/a&gt;: &lt;p&gt;Looking forward to whatever new Macbook Pro comes out, hopefully soon, as its time I got a new one !&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.marco.org/3027446896"&gt;marco&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Given how awesome the new MacBook Air is, I’m interested to see what Apple does with the other laptops in the lineup.&lt;/p&gt;
&lt;p&gt;I’ve had three 13” laptops (including the first-generation and current-generation Airs) and two 15” laptops, and I’ve previously been torn between these two sizes: the 15” always…&lt;/p&gt;
&lt;/blockquote&gt;</description><link>http://blog.luibh.ie/post/3030542197</link><guid>http://blog.luibh.ie/post/3030542197</guid><pubDate>Mon, 31 Jan 2011 13:52:01 +0000</pubDate></item><item><title>Default.png Dilemmas</title><description>&lt;a href="http://www.marco.org/1548306059"&gt;Default.png Dilemmas&lt;/a&gt;: &lt;p&gt;Gives me some ideas on a loading screen for my new app. I think I’ll probably go with the empty user interface while it loads instead of a splash screen which I was going to use.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.marco.org/1548306059"&gt;marco&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;iOS apps display a prerendered, static image when they launch called &lt;code&gt;Default.png&lt;/code&gt;. Developers can set it to anything they like. This is &lt;a href="http://itunes.apple.com/us/app/instapaper/id288545208?mt=8"&gt;Instapaper&lt;/a&gt;’s:&lt;/p&gt;
&lt;img src="http://media.tumblr.com/tumblr_lbqz8lHP521qz4rgr.png"/&gt;&lt;p&gt;This matches the iOS convention of showing the app’s typical interface, but empty, so it looks like it has fully loaded (before it actually…&lt;/p&gt;
&lt;/blockquote&gt;</description><link>http://blog.luibh.ie/post/1611380748</link><guid>http://blog.luibh.ie/post/1611380748</guid><pubDate>Thu, 18 Nov 2010 19:37:27 +0000</pubDate></item><item><title>Marco.org: Developers don't rush to new platforms</title><description>&lt;a href="http://www.marco.org/1483805627"&gt;Marco.org: Developers don't rush to new platforms&lt;/a&gt;: &lt;p&gt;&lt;a href="http://www.marco.org/1483805627"&gt;marco&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A common fallacy is assuming that any new platform in an exciting market — recently, smartphones and tablet computers — will be flooded with developers as soon as it’s released, as if developers are just waiting outside the gates, hungrily waiting to storm in.&lt;/p&gt;
&lt;p&gt;In two recent cases, that’s exactly…&lt;/p&gt;
&lt;/blockquote&gt;</description><link>http://blog.luibh.ie/post/1486454295</link><guid>http://blog.luibh.ie/post/1486454295</guid><pubDate>Fri, 05 Nov 2010 08:02:13 +0000</pubDate></item><item><title>New BrainMints iPhone/iPad Released - BrainMints are fresh...</title><description>&lt;img src="http://25.media.tumblr.com/tumblr_labuq4BzJR1qaoo9to1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;New BrainMints iPhone/iPad Released - BrainMints are fresh thoughts, delivered daily, that give your thinking a lift. Just swipe your screen to pop a new one or tap to share with friends via email, Facebook, Twitter, or LinkedIn. You can also browse BrainMints in thumbnail view or create a collection of your favorites.&lt;/p&gt;
&lt;p&gt;Available as a universal binary for use on the iPhone and iPad, and &lt;a title="BrainMints iPhone/iPad App" href="http://itunes.apple.com/app/brainmints/id391347544?mt=8"&gt;in the app store now&lt;/a&gt;. Developed for NewWordCity.com.&lt;/p&gt;</description><link>http://blog.luibh.ie/post/1319474492</link><guid>http://blog.luibh.ie/post/1319474492</guid><pubDate>Fri, 15 Oct 2010 11:34:52 +0100</pubDate></item><item><title>App Icons for iPhone, iPhone 4 and iPad</title><description>&lt;p&gt;When submitting a universal binary which you&amp;#8217;re going to be using on &amp;#8216;normal&amp;#8217; iPhones, the iPhone 4 and the iPad you need to include a separate app icon for each one. These are specified within the APP.plist file as follows:&lt;/p&gt;
&lt;p&gt;&lt;img height="73" width="374" alt="iPhone and iPad Icon Definitions" src="http://dev.luibh.ie/iphone/blog_images/iphone_ipad_app_icons.png"/&gt;&lt;/p&gt;
&lt;p&gt;The icon.png file size should be 57x57.&lt;/p&gt;
&lt;p&gt;The Icon@2x.png should be 114x114.&lt;/p&gt;
&lt;p&gt;The Icon-72.png (iPad) is optional but needs to be 72x72 if using it.&lt;/p&gt;
&lt;p&gt;Simple enough, but nice to get sorted out before trying to submit the app for review and it gets rejected.&lt;/p&gt;
&lt;p&gt;More information from Apple available &lt;a target="_blank" href="http://developer.apple.com/library/ios/#qa/qa2010/qa1686.html"&gt;here&lt;/a&gt;.&lt;/p&gt;</description><link>http://blog.luibh.ie/post/1262975083</link><guid>http://blog.luibh.ie/post/1262975083</guid><pubDate>Thu, 07 Oct 2010 17:09:46 +0100</pubDate></item><item><title>New Intrade iPhone App Released</title><description>&lt;p&gt;So after many months hard work and revisions, the Intrade.com iPhone application has finally made it onto the App Store.&lt;/p&gt;
&lt;p&gt;Its an application to accompany the Intrade.com website which allows people to place predictions, and virtually trade, on future events.&lt;/p&gt;
&lt;p&gt;Further information and download available from iTunes:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://itunes.apple.com/ie/app/intrade/id380355142?mt=8"&gt;&lt;a href="http://itunes.apple.com/ie/app/intrade/id380355142?mt=8"&gt;http://itunes.apple.com/ie/app/intrade/id380355142?mt=8&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Andy&lt;/p&gt;</description><link>http://blog.luibh.ie/post/789127311</link><guid>http://blog.luibh.ie/post/789127311</guid><pubDate>Fri, 09 Jul 2010 12:12:14 +0100</pubDate></item><item><title>Activity Indicator in UIToolBar</title><description>&lt;p&gt;For a while now Ive been trying to get an activity indicator to show programmatically within a toolbar, and my last attempt resulted in manually adding it to the toolbar within IB. That works nicely if you&amp;#8217;ve added the toolbar yourself either within IB or code.&lt;/p&gt;
&lt;p&gt;However, using a navigation controller it didn&amp;#8217;t appear to be quite so easy because whatever I tried I could not get the activity indicator to actual register in the toolbar. That was until I discovered that you can set the right navigation item of a toolbar to actually be a mini toolbar in and of itself.&lt;/p&gt;
&lt;p&gt;Code is as follows:&lt;/p&gt;
&lt;pre&gt;	// create activity indicator
	CGRect frame = CGRectMake(65.0, 15.0, 25.0, 25.0);  	
	UIActivityIndicatorView *loading = [[UIActivityIndicatorView alloc] initWithFrame:frame];	
	loading.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;	
	[loading sizeToFit];  	
	loading.autoresizingMask = (UIViewAutoresizingFlexibleLeftMargin | 
UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | 
UIViewAutoresizingFlexibleBottomMargin);  	
	[loading startAnimating];	
	
	// create mini toolbar to hold button and activity indicator
	UIToolbar* toolbar = [[UIToolbar alloc]
						  initWithFrame:CGRectMake(0, 0, 100, 45)];
	[toolbar setBarStyle: UIBarStyleBlackOpaque];
	
	// create an array for the buttons
	NSMutableArray* buttons = [[NSMutableArray alloc] initWithCapacity:2];		
	
	// create and add spacer to force everything over to the right
	UIBarButtonItem *spacer = [[UIBarButtonItem alloc]
				   initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
				   target:nil
				   action:nil];
	[buttons addObject:spacer];
	[spacer release];		

	// create and add empty button to hold activity indicator
	UIBarButtonItem *buttonSuggest = [[UIBarButtonItem alloc] 
					 initWithTitle:@"      "
				         style:UIBarButtonItemStyleBordered 
					 target:self 
					 action:nil];	
	[buttons addObject:buttonSuggest];
	[buttonSuggest release];
	
	// put the buttons in the toolbar and release them
	[toolbar setItems:buttons animated:NO];
	[buttons release];	

	// add activity indicator to mini toolbar view
	[toolbar addSubview:loading];
	
	// set the right nav item to be our custom view
	self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] 
                                                   initWithCustomView:toolbar];

	[toolbar release];	
&lt;/pre&gt;
&lt;p&gt;This ends up giving you a tidy button in the top right of the uitoolbar like this:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img src="http://luibh.ie/dev/iphone/activity.png"/&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Its then pretty easy to call the above code from within the click event of an existing right bar button item which will make it look busy when clicked.&lt;/p&gt;</description><link>http://blog.luibh.ie/post/530365081</link><guid>http://blog.luibh.ie/post/530365081</guid><pubDate>Sun, 18 Apr 2010 11:30:38 +0100</pubDate><category>iphone</category><category>iphonedev</category></item><item><title>Easy JSON Parsing for the iPhone/iPad</title><description>&lt;p&gt;So you have access to a JSON stream through an RSS feed or a rest API and you want to use the information in objective-c. &lt;/p&gt;
&lt;p&gt;Easy. Just include the &amp;#8216;&lt;a href="http://code.google.com/p/json-framework/downloads/list"&gt;json-framework&lt;/a&gt;&amp;#8217; files in your application, #import &amp;#8220;JSON.h&amp;#8221;, and then do:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;pre&gt;SBJSON *jsonParser = [[SBJSON alloc] init];
NSDictionary *dictResult = [jsonParser objectWithString:theString error:nil];	
&lt;/pre&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You can then move through the items in the dictionary object and use them in your app. Cool.&lt;/p&gt;</description><link>http://blog.luibh.ie/post/496154750</link><guid>http://blog.luibh.ie/post/496154750</guid><pubDate>Sun, 04 Apr 2010 19:14:05 +0100</pubDate><category>iphone</category><category>json</category></item><item><title>UITableView Selection Smoothing</title><description>&lt;p&gt;If you use table views, and you need to smooth the transition a little bit when selecting a row and pushing a view controller, I&amp;#8217;d recommend looking into &amp;#8216;performSelector&amp;#8217;. Its basically a timer which allows you to call a method after a certain short delay.&lt;/p&gt;
&lt;p&gt;When using table views this gives the selected row enough time fully animate the selection, before moving onto the new view.&lt;/p&gt;
&lt;p&gt;&lt;code&gt; &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;pre&gt;// our own method called from the performSelector
- (void)didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
	MarketViewController *market = [[MarketViewController alloc] 
		initWithNibName:@"MarketViewController" bundle:nil];		
	market.eventMarket = [self.eventMarkets objectAtIndex:indexPath.row-1];
	market.title = [[self.eventMarkets objectAtIndex:indexPath.row-1] marketName];
	[self.navigationController pushViewController:market animated:YES];		
	[market release];		
}

// delegate method for table
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
	[self performSelector:@selector(didSelectRowAtIndexPath:) withObject:indexPath 
		afterDelay:0.1f];
}
&lt;/pre&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Something else I just realised is that my tableviews weren&amp;#8217;t automatically deselecting the rows when I returned from the push view controller. The following code rectifies that nicely (and smoothly).&lt;/p&gt;
&lt;p&gt;&lt;code&gt; &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;pre&gt;-(void)viewDidAppear:(BOOL)animated {
	[tableMarkets deselectRowAtIndexPath:[tableMarkets indexPathForSelectedRow] 
		animated:animated];	
}&lt;/pre&gt;
&lt;/code&gt;&lt;/p&gt;</description><link>http://blog.luibh.ie/post/468333530</link><guid>http://blog.luibh.ie/post/468333530</guid><pubDate>Tue, 23 Mar 2010 18:11:00 +0000</pubDate><category>iphone</category><category>objective-c</category></item><item><title>UITableView with Asynchronous Image Downloads</title><description>&lt;p&gt;It seems that a lot of applications Im working on these days require a table view which downloads images off the web. Doing this synchronously is very messy and only results in a very laggy application while scrolling, so I found a nice solution by markj of markj.net.&lt;/p&gt;
&lt;p&gt;He&amp;#8217;s created an AsyncImageView class which allows you to supply a URL, and have it download the image in the background. This works nicely for a table view, and makes for a tidy solution to the asynchronous image downloading problem.&lt;/p&gt;
&lt;p&gt;The original blog post about it is &lt;a title="here" href="http://www.markj.net/iphone-asynchronous-table-image/"&gt;here&lt;/a&gt;. A packaged up version of a sample application including the table view code which downloads a series of images dynamically is available on my site &lt;a title="here" href="http://luibh.ie/dev/iphone/YellowJacket.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Its saved me a bunch of work and thanks must go to MarkJ, Robert A and Wayne who put together the original Yellow Jacket code.&lt;/p&gt;</description><link>http://blog.luibh.ie/post/430915610</link><guid>http://blog.luibh.ie/post/430915610</guid><pubDate>Sat, 06 Mar 2010 21:37:15 +0000</pubDate><category>iphone</category><category>objective-c</category></item><item><title>NSXMLParser Freezing ? Put it in a thread.</title><description>&lt;p&gt;Running NSXMLParser can be surprisingly time consuming when actually run on the device, even if the test data you&amp;#8217;ve been using in the simulator gets parsed quite quickly, and takes next to no time at all.&lt;/p&gt;
&lt;p&gt;Unfortunately when you go to run it on the iPhone itself, it can take a couple of seconds or more to do something which took milliseconds on your dev machine. This results in a fairly bad user experience when they are browsing your app, and it hangs periodically while parsing the XML.&lt;/p&gt;
&lt;p&gt;The answer&amp;#160;? To move the XML parsing into a thread of its own, and let the UI continue to be useable while the parsing carries on in the background, bothering no-one else.&lt;/p&gt;
&lt;p&gt;&lt;code&gt; - (void)viewDidLoad { &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt; [NSThread detachNewThreadSelector:@selector(parseXML) toTarget:self withObject:nil]; &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;} &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt; - (void) parseXML { &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt; NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt; // RUN PARSING CODE HERE &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt; [pool release]; &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;} &lt;/code&gt;&lt;/p&gt;</description><link>http://blog.luibh.ie/post/426608801</link><guid>http://blog.luibh.ie/post/426608801</guid><pubDate>Thu, 04 Mar 2010 18:49:21 +0000</pubDate></item><item><title>iPad Economics</title><description>&lt;p&gt;&lt;a href="http://www.marco.org/369636426"&gt;marco&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Given:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;iPhones and iPods Touch in use today: 50-60 million&lt;sup&gt;&lt;a href="#fn:1"&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/li&gt;
&lt;li&gt;iPhones sold in the first year (Q3-4, FY 2007): about 1.4 million&lt;sup&gt;&lt;a href="#fn:2"&gt;2&lt;/a&gt;&lt;/sup&gt;. For most of this time, the price started at $499, but nearly everyone bought the $599 model.&lt;/li&gt;
&lt;li&gt;iPhones sold in the second year (FY 2008): about 11.6 million, over half from Q4. Most sales in FY 2008 were the better, cheaper iPhone 3G.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;How many iPads do you think will sell in 2010?&lt;/p&gt;
&lt;p&gt;This is important for &lt;a href="http://www.marco.org/358002061"&gt;app economics&lt;/a&gt;. Many developers want to know how many potential iPad customers will exist to determine how quickly (or even whether) our apps need to be iPad-ready and how we should allocate our resources relative to the iPhone editions.&lt;/p&gt;
&lt;p&gt;iPhone sales have largely followed the price drops. I expect the same to apply to the iPad, with the added caveat that I think the overall userbase will be smaller in the beginning. As I said in the first article:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Nearly everyone can justify having a phone — the only question is &lt;i&gt;which&lt;/i&gt; phone, and it’s easy for people to rationalize spending a bit more money for the really nice one. The same rationale applies to iPod Touch owners: they’re already buying a portable music player, and the iPod Touch is just the medium- to high-end choice.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The national economic problems seem not to be noticeably affecting sales of high-end tech gadgets, so I won’t factor them in directly.&lt;/p&gt;
&lt;p&gt;I’ll take a wild guess and say that I expect about 3 million iPads to be sold this year&lt;sup&gt;&lt;a href="#fn:3"&gt;3&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;So how will that translate to app sales from iPad owners? For simplicity, I’ll assume that the value of your app to users is approximately the same on the iPad as on the iPhone.&lt;/p&gt;
&lt;p&gt;If my three-million-iPads prediction is accurate, and the iPhone and iPod Touch keep growing at steady rates, by the end of 2010, I predict that about 3-4% of app sales will be to iPad owners.&lt;sup&gt;&lt;a href="#fn:4"&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;But there’s another dilemma: it looks like there will be significant pressure, both political and technical, for universal apps that run on both the iPad and the iPhone. Like multiple-iPhone owners, this only counts as one sale, since one purchase of the app will run on both devices. So for any apps that use a universal edition, their entire existing customer-base will result in zero new sales. (This effect may not matter in the long run. For most iPhone apps, new sales outpace existing-customer upgrades by a large margin.)&lt;/p&gt;
&lt;p&gt;A significant portion of iPad owners will probably also own an iPhone or iPod Touch, and you could argue that they would have bought the app for the iPhone anyway.&lt;/p&gt;
&lt;p&gt;So not every iPad owner who uses your app will have been the result of another sale.&lt;/p&gt;
&lt;p&gt;Economically, there doesn’t seem to be a huge incentive to spend a lot on an iPad edition.&lt;/p&gt;
&lt;p&gt;I think, overall, this is a good thing: it should dampen the gold-rush effect, leaving most iPad development to those who care strongly about it and want to do it well.&lt;/p&gt;
&lt;p&gt;Running the numbers like this helps clarify my opinion a bit on &lt;a href="http://www.marco.org/366130089"&gt;the iPad App Store timing question&lt;/a&gt;: since the initial gold-rush period won’t be anywhere near the magnitude of the iPhone’s, it’s unlikely to hurt your app much in the store if you’re not there exactly on day one.&lt;/p&gt;
&lt;p&gt;Meanwhile, if the iPhone is likely to represent at least 90% of your sales for 2010, it’s probably not a good idea to slack off much on the iPhone versions of your apps, even if the iPhone is no longer the focus of the tech press.&lt;sup&gt;&lt;a href="#fn:5"&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;hr&gt;&lt;ol&gt;&lt;li id="fn:1"&gt;
&lt;p&gt;Apple has sold over 70 million, but I’m assuming that not every device sold is still in use. &lt;a href="#fnref:1"&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;Via &lt;a href="http://en.wikipedia.org/wiki/File:IPhone_sales_per_quarter_simple.svg"&gt;this Wikipedia image&lt;/a&gt;. &lt;a href="#fnref:2"&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:3"&gt;
&lt;p&gt;Through Q1-FY2011 to include the 2010 holiday season. In case you want to claim-chowder me later when I’m way off, I’ll make yet another chowderable claim that my predictions will end up having been comically low, in which case much of this post will be irrelevant, overstated, and wrong. You can usually count on me for that. &lt;a href="#fnref:3"&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:4"&gt;
&lt;p&gt;My math is intentionally fuzzy and hand-wavy. &lt;a href="#fnref:4"&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:5"&gt;
&lt;p&gt;Normally, I dislike footnotes. But they made sense for this article. I’m sorry to anyone who is annoyed at them as I usually am. &lt;a href="#fnref:5"&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;/blockquote&gt;</description><link>http://blog.luibh.ie/post/370268346</link><guid>http://blog.luibh.ie/post/370268346</guid><pubDate>Thu, 04 Feb 2010 08:15:36 +0000</pubDate><category>ipad iphone</category></item><item><title>ASIHTTPRequest - CFNetwork API Wrapper</title><description>&lt;a href="http://allseeing-i.com/ASIHTTPRequest"&gt;ASIHTTPRequest - CFNetwork API Wrapper&lt;/a&gt;: &lt;p&gt;An easy to use wrapper around the CFNetwork API that makes some of the more tedious aspects of communicating with web servers easier. It is written in Objective-C and works in both Mac OS X and iPhone applications.&lt;/p&gt;
&lt;p&gt;It is suitable for performing basic HTTP requests and interacting with REST-based services (GET / POST / PUT / DELETE). The included ASIFormDataRequest subclass makes it easy to submit POST data and files using multipart/form-data.&lt;/p&gt;
&lt;p&gt;E.g. Creating an asynchronous request:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;pre&gt;- (IBAction)grabURLInBackground:(id)sender
{
   NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
   ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
   [request setDelegate:self];
   [request startAsynchronous];
}
 
- (void)requestFinished:(ASIHTTPRequest *)request
{
   // Use when fetching text data
   NSString *responseString = [request responseString];
 
   // Use when fetching binary data
   NSData *responseData = [request responseData];
}
 
- (void)requestFailed:(ASIHTTPRequest *)request
{
   NSError *error = [request error];
}
&lt;/pre&gt;
&lt;/code&gt;&lt;/p&gt;</description><link>http://blog.luibh.ie/post/270916970</link><guid>http://blog.luibh.ie/post/270916970</guid><pubDate>Sun, 06 Dec 2009 00:03:43 +0000</pubDate><category>iphone</category><category>http</category><category>wrapper</category></item><item><title>Creating UIColor Objects from Hex Values</title><description>&lt;p&gt;If you come to the iPhone from a web background, or are simply more used to hex based colors it can be a bit of pain working out their RGB equivalent for use as a UIColor.&lt;/p&gt;
&lt;p&gt;Fortunately though there is a rather simple work around in the form of a macro.&lt;/p&gt;
&lt;p&gt;&lt;code&gt; &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;pre&gt;#define UIColorFromRGB(rgbValue) [UIColor \
    colorWithRed:((float)((rgbValue &amp;amp; 0xFF0000) &amp;gt;&amp;gt; 16))/255.0 \
    green:((float)((rgbValue &amp;amp; 0xFF00) &amp;gt;&amp;gt; 8))/255.0 \
    blue:((float)(rgbValue &amp;amp; 0xFF))/255.0 alpha:1.0]
&lt;/pre&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Usage is also delightfully simple, and is implemented like this:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;pre&gt;cell.textColor = UIColorFromRGB(0x333333);
&lt;/pre&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Where the 333333 is your normal hex color value minus the #.&lt;/p&gt;</description><link>http://blog.luibh.ie/post/266878810</link><guid>http://blog.luibh.ie/post/266878810</guid><pubDate>Thu, 03 Dec 2009 00:17:16 +0000</pubDate><category>iphone</category><category>uicolor</category></item><item><title>Detect Single Tap in UIScrollView</title><description>&lt;p&gt;&lt;img align="right" src="http://dl.dropbox.com/u/3040062/iPhone%20Images/message_window_smaller.jpg" hspace="10" width="115" height="222"/&gt;&lt;/p&gt;
&lt;p&gt;There are an increasing amount of occasions when I&amp;#8217;d need, and like, to be able to tap the background of an application to hide a keyboard during editing. It just seems to make good UI sense to tap on the main background and hide the keyboard so you can see what you&amp;#8217;ve typed properly.&lt;/p&gt;
&lt;p&gt;The following article does just that, and explains how to create a new instance of the UIScrollView which checks for a single tap and passes the event into a class of your choice.&lt;/p&gt;
&lt;p&gt;&lt;a title="iPhoneDeveloperTips.com - Detect Single Tap in UIScrollView" href="http://iphonedevelopertips.com/user-interface/detect-single-tap-in-uiscrollview.html"&gt;iPhoneDeveloperTips.com - Detect Single Tap in UIScrollView&lt;/a&gt;&lt;/p&gt;</description><link>http://blog.luibh.ie/post/264121955</link><guid>http://blog.luibh.ie/post/264121955</guid><pubDate>Tue, 01 Dec 2009 00:44:00 +0000</pubDate><category>iphone</category></item><item><title>Accessing the Phone from within an Application</title><description>&lt;p&gt;For some reason I had a hard time finding decent code for actually opening the phone application when a phone number is tapped.&lt;/p&gt;
&lt;p&gt;&lt;img align="right" hspace="15" src="http://luibh.ie/blog_images/call_phone_button.jpg" alt="See through button over UILabel." width="280" height="57"/&gt;This is what I managed to come up with attached to a see through (no background color) UIButton, which was placed over the UILabel phone number text.&lt;/p&gt;
&lt;p&gt;&lt;code&gt; &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt; &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt; &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt; &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt; &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt; &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt; &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt; &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt; &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt; &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt; &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt; &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;pre&gt;// read phone number from current advert data
NSString* value = [[resultsEntries objectAtIndex:0] objectForKey: @"phone"];
NSCharacterSet* characterSet = [NSCharacterSet whitespaceAndNewlineCharacterSet];
value = [value stringByTrimmingCharactersInSet:characterSet];
NSString* telUrl = [NSString stringWithFormat:@"tel:%@",value];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:telUrl]];
&lt;/pre&gt;
&lt;/code&gt;I seem to remember previous applications prompting me if I wanted to call the number or not but it looks like that was a feature of pre version 3.0 of the OS, and the default is now to call launch the phone application immediately.&lt;/p&gt;
&lt;p&gt;If I get some time I might try and include that with an alert box to confirm they want to call the number, just seems like a tidier way to do it.&lt;/p&gt;</description><link>http://blog.luibh.ie/post/258636792</link><guid>http://blog.luibh.ie/post/258636792</guid><pubDate>Thu, 26 Nov 2009 20:50:00 +0000</pubDate><category>iphone</category><category>sdk</category><category>application</category></item><item><title>Resizing Remotely Fetched Image</title><description>&lt;p&gt;So I had the code sorted for loading images remotely, and storing them in arrays to be displayed later, and then also fetching them directly from a URL to be shown in a UIImage. However up until this point Ive not had to resize them based on the newly loaded image data. &lt;br/&gt;&lt;br/&gt; After a few fruitless searches I came across the following code which seems to work very well (so far).  &lt;code&gt; &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt; &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt; &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt; &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;pre&gt;// fetch image data
NSString* imageURL = [NSString stringWithFormat: 
  @"http://theimageurl.com/?id=%@", [[resultsEntries objectAtIndex:0] 
  objectForKey: @"image_large"]];
NSData* imageData = [[NSData alloc]initWithContentsOfURL: 
  [NSURL URLWithString:imageURL]];	
UIImage* image = [[UIImage alloc] initWithData:imageData];
		
// resize image
CGSize newSize = CGSizeMake(100, 100);
UIGraphicsBeginImageContext( newSize );
[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
		
//image is the original UIImage
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();		
		
imageHeight = image.size.height;
[imageMain setImage:newImage];
[imageData release];
[image release];
&lt;/pre&gt;
&lt;/code&gt;&lt;/p&gt;</description><link>http://blog.luibh.ie/post/241954755</link><guid>http://blog.luibh.ie/post/241954755</guid><pubDate>Thu, 12 Nov 2009 23:59:00 +0000</pubDate><category>iphone</category><category>api</category><category>uiimage</category></item></channel></rss>

