<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Fiery Robot!</title>
	
	<link>http://www.fieryrobot.com/blog</link>
	<description>Defender of Corporate Headquarters</description>
	<lastBuildDate>Mon, 26 Oct 2009 05:14:23 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</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" href="http://feeds.feedburner.com/fieryrobot" type="application/rss+xml" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>I Love Xcode</title>
		<link>http://feedproxy.google.com/~r/fieryrobot/~3/M1-3VYbnAZQ/</link>
		<comments>http://www.fieryrobot.com/blog/2009/10/04/i-love-xcode/#comments</comments>
		<pubDate>Sun, 04 Oct 2009 20:31:31 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.fieryrobot.com/blog/?p=160</guid>
		<description><![CDATA[A while back I wrote a post called &#8220;I hate Xcode&#8221;. These days I feel I need to post a revised statement based on my more recent experience with Xcode which can be summed up with: I Love Xcode. I guess this is much akin to Leonard Nimoy writing &#8220;I am not Spock&#8221; and later [...]]]></description>
			<content:encoded><![CDATA[<p>A while back I wrote a post called &#8220;I hate Xcode&#8221;. These days I feel I need to post a revised statement based on my more recent experience with Xcode which can be summed up with: I Love Xcode. I guess this is much akin to Leonard Nimoy writing &#8220;I am not Spock&#8221; and later writing &#8220;I am Spock&#8221;.
<span id="more-160"></span>
When I wrote the original post, I really did want to throw Xcode off of a bridge. And Visual Studio did seem better to me. It was more stable and faster. But in the last few releases, Xcode has really stepped up its game, particularly in 3.2, and meanwhile, VS has gotten worse and slower. Thank Osiris that I never have to use VS again.</p>

<p>I think the true turning point started at around Xcode 3.0. Xcode is now quite simply the best IDE I&#8217;ve ever used. Most all of my complaints have been solved over time, and admittedly I&#8217;ve figured out a few things along the way that made me finally get how it all works. I thought I&#8217;d point out a few of the things that made me realize that Xcode rocks. If you&#8217;re an Xcode aficionado, I&#8217;m sure you&#8217;ll already know these.</p>

<h2>Fast Compilations</h2>

<p>It&#8217;s just simply super fast to compile. On my last project, I was able to clean in about 5 minutes on an iMac. In Visual Studio on my quad-core PC it took like 20 minutes clean or not. Granted it has more files to build, but wow. Slow. To the point that any time you realized you&#8217;d have to build Windows and you weren&#8217;t at top-of-tree you were like &#8220;there goes a half hour&#8221;. These days, doing iPhone apps, my app at work takes about 20 seconds to clean build. And more like about 2 second to build/link and fire up the simulator for a quick change.</p>

<h2>Settings That Are Useful</h2>

<p>Setting project settings used to frustrate me on Xcode. You have project settings, and then you have target settings, and it just seemed like too much. I&#8217;ve finally gotten to get the how and the why around this and I understand it all now. Recently though I had to mess with settings, and I think if it weren&#8217;t for two features, I&#8217;d still be trying to find and set the settings correctly:</p>

<ul>
<li>ability to filter settings. Type &#8216;install&#8217; in the search box and get all settings having to do with install paths, etc. Avoids having to scan a big giant list of options.</li>
<li>the fact that Xcode actually shows you the computed paths. If you click something it might be generated from variables, etc. but once it&#8217;s commited you see the path it&#8217;s going to use. I can&#8217;t begin to tell me how much time that saved me the other day when I was wondering why something wasn&#8217;t working. This was always a source of frustration in Visual Studio for me.</li>
</ul>

<p>They might not seem like OMG features on the surface, but the time it saved makes me say OMG anyway.</p>

<h2>Code Completion</h2>

<p>The code completion feature of Xcode used to be frustrating to use, but in recent releases it works extremely well. It&#8217;s smart completion combined with text macros completing code fragments like if statements, etc. makes it damn quick to write code. And furthermore, you can adjust the templates of the generated code to match your code style either by creating your own text macros or by setting some defaults on the command line by setting the XCCodeSenseFormattingOptions property. For example, I like open braces of a block to always be on the next line. It help readability for me and it also helps editing a bit. Just setting a few options using that default and you can get the Xcode text completion to do your bidding.</p>

<h2>Syntax-Aware Editing</h2>

<p>I love the syntax-aware editing, particularly with cut and paste. Often times I&#8217;ll even cut and paste a section of code just to make it fix it up (maybe there&#8217;s another way but I&#8217;m too lazy to find out). As mentioned above, you can tweak some defaults if the code style doesn&#8217;t please you. But it&#8217;s nice to type a &#8216;}&#8217; and have it put it where it belongs. Or split a call to an objective-c method across multiple lines and have it line everything up for you at the colons. One other thing that I like is when you perhaps take a method and add another call to it. For example, let&#8217;s say you typed: <code>[foo retain]</code> and now you want to add <code>autorelease</code>. Just follow it up with <code>autorelease]</code> and Xcode will put the starting [ in the right place. It doesn&#8217;t always get it right, but in most cases it does. Very nice, as it is certainly a bit annoying to otherwise have to go back to the start yourself just to add a starting [, which has always been one of my nits about obj-c syntax. I like it when the tools make my nits a non-issue.</p>

<h2>Refactoring Tools</h2>

<p>The refactoring tools that Xcode provides are really nice. The current transformations that are supported are definitely helpful at times, and I hope they continue to think of more goodness they can add here.</p>

<h2>Slipstream Drive</h2>

<p>With all the above features — in general lots of &#8216;little things&#8217; that make things just work — Xcode allows me to write code incredibly fast. I feel like code just flows out of my fingers and the IDE just knows what to do with it. Occasionally though, I&#8217;ll long for a couple of smaller niceties from Visual Studio, or perhaps the code completion isn&#8217;t quite doing what I want, and it kind of knocks me out of slipstream drive. I&#8217;ve recently filed a couple of enhancement requests for them. We&#8217;ll see what comes of them, but if they did manage to get them in, I would truly have an all-powerful programming tool at my fingertips.</p>

<p>I&#8217;m sure there&#8217;s more things (data modeling, etc.) but I haven&#8217;t used all those features. My bliss these days comes from just being able to sit down and get incredible amounts of work done in a relatively small amount of time. To me, that&#8217;s what makes Xcode so amazing and pleasurable to use.</p>

<p>Bet you didn&#8217;t expect to hear me ever say that, now did you? <img src='http://www.fieryrobot.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/fieryrobot?a=M1-3VYbnAZQ:0ShUIWqwTxs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/fieryrobot?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/fieryrobot?a=M1-3VYbnAZQ:0ShUIWqwTxs:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/fieryrobot?i=M1-3VYbnAZQ:0ShUIWqwTxs:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/fieryrobot?a=M1-3VYbnAZQ:0ShUIWqwTxs:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/fieryrobot?i=M1-3VYbnAZQ:0ShUIWqwTxs:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/fieryrobot/~4/M1-3VYbnAZQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.fieryrobot.com/blog/2009/10/04/i-love-xcode/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.fieryrobot.com/blog/2009/10/04/i-love-xcode/</feedburner:origLink></item>
		<item>
		<title>Home Again</title>
		<link>http://feedproxy.google.com/~r/fieryrobot/~3/fD8oy51BFkk/</link>
		<comments>http://www.fieryrobot.com/blog/2009/09/17/home-again/#comments</comments>
		<pubDate>Fri, 18 Sep 2009 03:13:26 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.fieryrobot.com/blog/?p=157</guid>
		<description><![CDATA[Over the past 9 months I&#8217;ve been working on iTunes 9. Which shipped 9/9/9. Weird.

As of this week, however, I&#8217;m now working in the iPhone group, back in my old stomping ground of building 2. It&#8217;s so weird to be back there. It&#8217;s been reconfigured a bit since I was there last, but otherwise, it&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>Over the past 9 months I&#8217;ve been working on iTunes 9. Which shipped 9/9/9. Weird.</p>

<p>As of this week, however, I&#8217;m now working in the iPhone group, back in my old stomping ground of building 2. It&#8217;s so weird to be back there. It&#8217;s been reconfigured a bit since I was there last, but otherwise, it&#8217;s the same old place I remember. I was even visiting some old co-workers of mine and noted that my original office was right across the hall. That was (gulp) just over 13 years ago! I think the building was pretty new at the time too (completed in 1993 or so?).</p>

<p>So yeah, I&#8217;m in the same building (different floor), and seeing a lot of the old people I used to know. But there are way more new faces than OGs. It all the same, yet different.</p>

<p>But the most important thing in all of this is this: now that I&#8217;ve just about settled in I&#8217;m starting to have some serious fun. I haven&#8217;t looked forward to doing my work this much since&#8230; probably since the last time I worked there. Yes, I&#8217;ve done interesting stuff and had fun times in between, but this is a whole different level.</p>

<p>I&#8217;m home again! <img src='http://www.fieryrobot.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/fieryrobot?a=fD8oy51BFkk:W82SOx_zItQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/fieryrobot?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/fieryrobot?a=fD8oy51BFkk:W82SOx_zItQ:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/fieryrobot?i=fD8oy51BFkk:W82SOx_zItQ:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/fieryrobot?a=fD8oy51BFkk:W82SOx_zItQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/fieryrobot?i=fD8oy51BFkk:W82SOx_zItQ:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/fieryrobot/~4/fD8oy51BFkk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.fieryrobot.com/blog/2009/09/17/home-again/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.fieryrobot.com/blog/2009/09/17/home-again/</feedburner:origLink></item>
		<item>
		<title>Tweetsville Source Back Home</title>
		<link>http://feedproxy.google.com/~r/fieryrobot/~3/BoKY2tUAZxc/</link>
		<comments>http://www.fieryrobot.com/blog/2009/09/12/tweetsville-source-back-home/#comments</comments>
		<pubDate>Sat, 12 Sep 2009 22:42:33 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.fieryrobot.com/blog/?p=153</guid>
		<description><![CDATA[A few weeks ago, I finally met with the folks at Tapulous to discuss Tweetsville and as of that meeting, I&#8217;ve got control of the source once again. The existing app will remain in the store, but the source code is mine to do what I wish. At this point, I&#8217;ve been outdone over and [...]]]></description>
			<content:encoded><![CDATA[<p>A few weeks ago, I finally met with the folks at Tapulous to discuss Tweetsville and as of that meeting, I&#8217;ve got control of the source once again. The existing app will remain in the store, but the source code is mine to do what I wish. At this point, I&#8217;ve been outdone over and over in the Twitter app space, not to mention I still work at Apple, so I&#8217;m not 100% sure what to do with it yet. At a minimum I might dole out parts as simple open-sourced thingies people would be free to take and use or improve upon. I guess time will tell.</p>

<p>I do want to take this opportunity to thank the Tapulous guys for their open, honest dealings with me and this situation, as well as their willingness to hand it back to me.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/fieryrobot?a=BoKY2tUAZxc:hF84to1BY0Y:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/fieryrobot?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/fieryrobot?a=BoKY2tUAZxc:hF84to1BY0Y:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/fieryrobot?i=BoKY2tUAZxc:hF84to1BY0Y:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/fieryrobot?a=BoKY2tUAZxc:hF84to1BY0Y:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/fieryrobot?i=BoKY2tUAZxc:hF84to1BY0Y:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/fieryrobot/~4/BoKY2tUAZxc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.fieryrobot.com/blog/2009/09/12/tweetsville-source-back-home/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.fieryrobot.com/blog/2009/09/12/tweetsville-source-back-home/</feedburner:origLink></item>
		<item>
		<title>My Journey To Tweetsville</title>
		<link>http://feedproxy.google.com/~r/fieryrobot/~3/GS0pjLHUkZo/</link>
		<comments>http://www.fieryrobot.com/blog/2008/11/15/my-journey-to-tweetsville/#comments</comments>
		<pubDate>Sat, 15 Nov 2008 20:31:11 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.fieryrobot.com/blog/?p=147</guid>
		<description><![CDATA[Now that Tweetsville is out there, I thought I&#8217;d reflect a bit about where it came from and how it came to be.

When the app store opened, I downloaded several Twitter clients. Each was interesting in their own right, but I couldn&#8217;t use any of them because of one reason: the scrolling performance. I didn&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>Now that <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=294887301&amp;mt=8">Tweetsville</a> is out there, I thought I&#8217;d reflect a bit about where it came from and how it came to be.</p>

<p>When the app store opened, I downloaded several Twitter clients. Each was interesting in their own right, but I couldn&#8217;t use any of them because of one reason: the scrolling performance. I didn&#8217;t get why everyone&#8217;s scrolling was not as smooth as any of the built-in iPhone applications. For me, it made the apps frustrating to use, to the point that I just never used them.</p>

<p><span id="more-147"></span></p>

<h2>A Simple Proof</h2>

<p>As an experiment, I wanted to prove that I could make something that scrolled as good as the Apple-made stuff. I had already done other samples using the Twitter API as part of Blueprint at Yahoo! as well as in a Widget for Konfabulator I worked on but never finished. So I figured it would be fairly quick to throw something together.</p>

<p>I wrote a simple web fetcher and then did a rudimentary list. Originally, it was completely a navigation based app. You&#8217;d get a list of items such as &#8216;With Friends&#8217;, &#8216;History&#8217;, etc. and click those and get the listing of 20 tweets (the default that you get with the API). It was at this point that I started messing with getting the scrolling fast. In the end, it was smooth as silk. But I also didn&#8217;t have features such as the current balloon look and clickable links and @names.</p>

<p>The clickable links took me quite a while to get to work. I spent much time working on line breaking and making sure it was as efficient as it could be, using Instruments to find and eliminate bottlenecks.</p>

<p>After that, I had something that could line break beautifully and yet it still scrolled incredibly fast. Implementing the balloon look however, did slow it down a bit, but again I spent a lot of time trying to cache and get things to the point that you see it today.</p>

<p>But even after all that, there was still tons to do. I mean, it was really just something to prove to myself I could do this. But at this point, I realized I was onto something real here and could really build something exciting. But there were plenty of competition out there. Why build another Twitter app? I wasn&#8217;t really sure, but I kept going anyway to see where it took me. By the time I got to the end, I knew I had something big on my hands.</p>

<h2>Making It Real</h2>

<p>For the next few weeks I worked pretty much 24/7 getting things to cache properly, push things off onto threads as much as possible, use a real database, etc. and make sure that things just worked correctly. Despite the simplicity of what Twitter is, making an application to really behave properly and ensure that things are always as you expect is pretty darn hard. Even something as &#8217;simple&#8217; as clicking a tweet and then iterating your tweets with the up and down arrows in the upper right was interesting. Not because of the iteration of the items, but because you now have yet another view that needs to be aware of state changes in the application. For example, if you favorite something, I needed to make sure that if it was showing elsewhere in the UI the change was reflected. Good times.</p>

<p>I also rewrote certain sections more than once to get things right. The database for example, was originally just a plist, but the more complicated the UI became, the more necessary SQLite was. And that had to be threaded for even more fun. I had also originally started with MGTwitterEngine, but ended up writing my own engine for two reasons:</p>

<ol>
<li>design-wise, MGTwitterEngine didn&#8217;t fit with what I needed to to (it was too centralized, I needed many delegates, not just one). </li>
<li>I decided to use JSON instead of XML to try to keep the data smaller and simpler to parse. XML really is a pain to deal with.</li>
</ol>

<p>And since I didn&#8217;t find a JSON parser that seemed to be small enough and simple enough to integrate, I wrote one. Admittedly, it&#8217;s been something I&#8217;ve wanted to do for a while. I&#8217;m sure somewhere out there there&#8217;s a JSON parser that would have fit the bill, but I didn&#8217;t find it in my cursory search of the interweb tubes.</p>

<h2>Details, Details</h2>

<p>You know all those &#8217;standard&#8217; form controls you see in all the Apple applications? Yeah, they ain&#8217;t standard. So a bit of time was put into creating my own version of those constructs and making them look and behave as closely to the Apple stuff as I could.</p>

<p>I also needed to handle image uploads and tweet compositions, loading followers so you can help address messages, doing the first run screen, etc. Lots of little things to make stuff right.</p>

<p>And even after I thought I had everything done, I ended up rewriting the messaging section to what you see today. It originally had inbox and sent like the web site, but one of my beta testers suggested a threaded view. At first I was like &#8220;man, that&#8217;s going to take forever&#8221;, but it only took me a day or two to get right. Most of my time in fact was spent drawing the stupid balloons to try and match the SMS app, only this time in delicious purple!</p>

<p>That was the making of 1.0. Right before I handed it over to Tapulous, I also added:</p>

<ul>
<li>Flickr upload support</li>
<li>Re-tweet functionality</li>
<li>Ability to quit during writing a tweet and come back to where you left off the next time you launch.</li>
</ul>

<p>I know there are several other thing that people want. I originally did envision adding things like multiple account support, etc. and I see that people also really want to have it save where you last were and not jump to the top when you load tweets. That one actually came up during development and there seemed to be strong arguments on both sides. So I left it as it was, but perhaps Tapulous can add that as an option.</p>

<p>People also have been asking for the ability to tap the status bar and have it jump to the top, but it already does that (the iPhone frameworks do it for you in fact). Perhaps there&#8217;s a bug in there that stops it from working sometimes.</p>

<p>So that&#8217;s my story, and I&#8217;m sticking to it. The best part for me has been seeing people&#8217;s comments on Twitter which echo exactly those attributes I held dear in its inception:</p>

<ul>
<li>UI speed. It tries its best to not get &#8217;stuck&#8217;. It only now gets stuck when it&#8217;s loading the table for the first time. I hope.</li>
<li>Simplicity. It&#8217;s not glossy black. It&#8217;s just iPhone.</li>
<li>Power. You can do almost everything the Twitter API allows: follow friends, drill down in a user&#8217;s history or followers, search for your favorite terms, etc.</li>
</ul>

<h2>Thanks</h2>

<p>I want to thank everyone that helped me test the application and suggested features, etc. This includes Arlo Rose, Rob Marquardt, Karl Adam and Aaron Hurley. These people had much input into the end design. Arlo suggested the use of the Tab Bar over the nav-style interface. Karl caused me to go to threaded messages, Rob and Aaron both suggested many different enhancements to make things more user-friendly and do what you&#8217;d expect. You can blame Rob in particular for my adding Flickr upload.</p>

<p>Again, thank you all. It was a great project!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/fieryrobot?a=GS0pjLHUkZo:B2CHk4MVJ98:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/fieryrobot?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/fieryrobot?a=GS0pjLHUkZo:B2CHk4MVJ98:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/fieryrobot?i=GS0pjLHUkZo:B2CHk4MVJ98:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/fieryrobot?a=GS0pjLHUkZo:B2CHk4MVJ98:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/fieryrobot?i=GS0pjLHUkZo:B2CHk4MVJ98:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/fieryrobot/~4/GS0pjLHUkZo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.fieryrobot.com/blog/2008/11/15/my-journey-to-tweetsville/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://www.fieryrobot.com/blog/2008/11/15/my-journey-to-tweetsville/</feedburner:origLink></item>
		<item>
		<title>Back at Apple</title>
		<link>http://feedproxy.google.com/~r/fieryrobot/~3/x4vhjwaMDj4/</link>
		<comments>http://www.fieryrobot.com/blog/2008/11/10/back-at-apple/#comments</comments>
		<pubDate>Tue, 11 Nov 2008 02:00:00 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.fieryrobot.com/blog/?p=143</guid>
		<description><![CDATA[In my last Tweetsville Update, I mentioned that there was something that might prevent me from working on Tweetsville going forward, despite the fact I just finished it. Well, that thing has finally materialized so I can finally say that I&#8217;m officially back at Apple starting today. It&#8217;s been weeks in the making, but it [...]]]></description>
			<content:encoded><![CDATA[<p>In my last <a href="http://www.fieryrobot.com/blog/2008/11/04/tweetsville-update/">Tweetsville Update</a>, I mentioned that there was something that might prevent me from working on Tweetsville going forward, despite the fact I just finished it. Well, that thing has finally materialized so I can <strong>finally</strong> say that I&#8217;m officially back at Apple starting today. It&#8217;s been weeks in the making, but it finally materialized late last week.</p>

<p>This time I&#8217;m working on iTunes instead of the OS group. Definitely a different type of thing than I&#8217;m used to — I&#8217;m more a framework/API type of guy — but I think it will be fun nonetheless. Especially since I&#8217;ll be working with one of my friends that I used to work with there.</p>

<p>Because it&#8217;s Apple, I&#8217;m under strict agreement not to have any type of side projects, etc. so it was important to find someone to care for Tweetsville from this point forward. It&#8217;s too cool of an application to just let it drop. Especially since I just added Flickr upload support and the ability to quit the app while typing a tweet and have it pick up where you left off next time you run the app this week (both should appear in some future release).</p>

<p>Anyway, that&#8217;s the close of this short chapter of my life, and the start of a shiny brand new one!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/fieryrobot?a=x4vhjwaMDj4:yT-4PfjuwjI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/fieryrobot?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/fieryrobot?a=x4vhjwaMDj4:yT-4PfjuwjI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/fieryrobot?i=x4vhjwaMDj4:yT-4PfjuwjI:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/fieryrobot?a=x4vhjwaMDj4:yT-4PfjuwjI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/fieryrobot?i=x4vhjwaMDj4:yT-4PfjuwjI:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/fieryrobot/~4/x4vhjwaMDj4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.fieryrobot.com/blog/2008/11/10/back-at-apple/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://www.fieryrobot.com/blog/2008/11/10/back-at-apple/</feedburner:origLink></item>
		<item>
		<title>Tweetsville Update</title>
		<link>http://feedproxy.google.com/~r/fieryrobot/~3/ibaJlXG4obQ/</link>
		<comments>http://www.fieryrobot.com/blog/2008/11/04/tweetsville-update/#comments</comments>
		<pubDate>Tue, 04 Nov 2008 22:51:54 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.fieryrobot.com/blog/?p=139</guid>
		<description><![CDATA[Just wanted to post an update as to what was happening with Tweetsville, my iPhone Twitter app.

First, it&#8217;s been approved for sale! But I haven&#8217;t seen it show up and sadly I don&#8217;t have a link to it. Read on for why.

The main reason the app was delayed so long coming out is because I [...]]]></description>
			<content:encoded><![CDATA[<p>Just wanted to post an update as to what was happening with Tweetsville, my iPhone Twitter app.</p>

<p>First, it&#8217;s been approved for sale! But I haven&#8217;t seen it show up and sadly I don&#8217;t have a link to it. Read on for why.</p>

<p>The main reason the app was delayed so long coming out is because I had been been trying to figure out exactly what to do with it. I might be in a situation soon that will actually prevent me from being able to maintain the application, so I wanted to see if I could find a good stewart for my baby. I&#8217;ve chosen to hand the application over to <a href="http://www.tapulous.com">Tapulous</a>, maker of Tap Tap Revenge, Twinkle, FriendBook, Fortune and Collage, with whom I have a good working relation.</p>

<p>I think this is going to be great for Tweetsville, as they have better resources at their disposal to help support and grow the application. I also think they have some technology which can help Tweetsville be even better than it is. At the same time, there&#8217;s some stuff I did for my app that I believe will benefit Tapulous.</p>

<p>There is no plan to have Twinkle and Tweetsville merge. They are to be separate applications with separate audiences. Twinkle is about locality and the Tapulous network, and Tweetsville is purely a Twitter application.</p>

<p>One of the advantages here for users is that there will be choice. There will ultimately be two versions of Tweetsville. The first will be a paid version currently slated for $3.99. The second will come a few weeks later and will be a free ad-supported version.</p>

<p>I&#8217;m confident this will move is the best thing for the Tweetsville app as well as users in the long run. You&#8217;ll get more choices and better support than I would have been able to provide on my own. I feel the app is in good hands, as I have a great working relationship with Tapulous (I&#8217;m actually doing a little work on Twinkle 1.3 these days too).</p>

<p>So look for it to appear in the App Store on Monday the 10th of November!</p>

<p><strong>Update</strong> Actually the date is apparently going to be the 12th.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/fieryrobot?a=ibaJlXG4obQ:_7Q3nHxB1Xg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/fieryrobot?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/fieryrobot?a=ibaJlXG4obQ:_7Q3nHxB1Xg:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/fieryrobot?i=ibaJlXG4obQ:_7Q3nHxB1Xg:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/fieryrobot?a=ibaJlXG4obQ:_7Q3nHxB1Xg:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/fieryrobot?i=ibaJlXG4obQ:_7Q3nHxB1Xg:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/fieryrobot/~4/ibaJlXG4obQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.fieryrobot.com/blog/2008/11/04/tweetsville-update/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://www.fieryrobot.com/blog/2008/11/04/tweetsville-update/</feedburner:origLink></item>
		<item>
		<title>The Simple Beauty of clearColor</title>
		<link>http://feedproxy.google.com/~r/fieryrobot/~3/0X8Ws-3Kpn8/</link>
		<comments>http://www.fieryrobot.com/blog/2008/10/22/the-simple-beauty-of-clearcolor/#comments</comments>
		<pubDate>Thu, 23 Oct 2008 00:21:07 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.fieryrobot.com/blog/?p=137</guid>
		<description><![CDATA[I&#8217;ve recently discovered the simple beauty of [UIColor clearColor] used for a background color. Previously I had been doing stuff like:

self.opaque = NO;
self.backgroundColor = nil;
self.clearsContextBeforeDrawing = YES;


But all I really needed to do was:

self.backgroundColor = [UIColor clearColor];


Same transparency, and I&#8217;m guessing (hoping?) that it might be a bit more efficient (unless of course, the innards [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve recently discovered the simple beauty of <code>[UIColor clearColor]</code> used for a background color. Previously I had been doing stuff like:</p>

<pre><code>self.opaque = NO;
self.backgroundColor = nil;
self.clearsContextBeforeDrawing = YES;
</code></pre>

<p>But all I really needed to do was:</p>

<pre><code>self.backgroundColor = [UIColor clearColor];
</code></pre>

<p>Same transparency, and I&#8217;m guessing (hoping?) that it might be a bit more efficient (unless of course, the innards look for clear color and effectively do what I used to).</p>

<p>Hey, even if it&#8217;s not more efficient, it&#8217;s certainly simpler to type and it seems to have the same effect!</p>

<p>Sadly, this is one thing I didn&#8217;t figure out on my own, but rather spied in some other sources, but I wanted to throw it out there for &#8216;all uh yous&#8217;.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/fieryrobot?a=0X8Ws-3Kpn8:kT3hO1eLAtM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/fieryrobot?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/fieryrobot?a=0X8Ws-3Kpn8:kT3hO1eLAtM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/fieryrobot?i=0X8Ws-3Kpn8:kT3hO1eLAtM:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/fieryrobot?a=0X8Ws-3Kpn8:kT3hO1eLAtM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/fieryrobot?i=0X8Ws-3Kpn8:kT3hO1eLAtM:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/fieryrobot/~4/0X8Ws-3Kpn8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.fieryrobot.com/blog/2008/10/22/the-simple-beauty-of-clearcolor/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.fieryrobot.com/blog/2008/10/22/the-simple-beauty-of-clearcolor/</feedburner:origLink></item>
		<item>
		<title>Recursive Locks Will Kill You!</title>
		<link>http://feedproxy.google.com/~r/fieryrobot/~3/2JuewjTKQj0/</link>
		<comments>http://www.fieryrobot.com/blog/2008/10/14/recursive-locks-will-kill-you/#comments</comments>
		<pubDate>Wed, 15 Oct 2008 00:11:18 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.fieryrobot.com/blog/?p=133</guid>
		<description><![CDATA[A while back, at Adobe, I ran into a most evil bug that took me hours to track down. In the end, it was the end results of people violating what (to me) are the three tenets of threaded programming. This post is what I ended up establishing as the thread safety guidelines for our [...]]]></description>
			<content:encoded><![CDATA[<p>A while back, at Adobe, I ran into a most evil bug that took me <strong>hours</strong> to track down. In the end, it was the end results of people violating what (to me) are the three tenets of threaded programming. This post is what I ended up establishing as the thread safety guidelines for our project.</p>

<p>Before digging into it, I should say this: threads are evil. If you don&#8217;t believe this, then I believe you are made of living tissue over metal endoskeleton. You should endeavor to avoid threads at all cost. In most cases, timers are your best friend. Know them. Love them.</p>

<p>Of course, there are times when you need to use threads. I needed to add a few threaded operations to my iPhone application to make sure the UI stayed responsive. On the project at Adobe, we were doing thumbnailing of images, definitely something you don&#8217;t want happening on the main thread.</p>

<h2><span id="more-133"></span>1. Avoid recursive locks</h2>

<p>A recursive lock is a lock which allows the same thread that locked it to lock it again. The advantage is that you don&#8217;t need to worry about what&#8217;s locked and what&#8217;s not on any particular thread. They also make it easy to retrofit locks into existing code.</p>

<p>The problem though is they most often end up being used to lock large pieces of code for indeterminate amounts of time. This makes things very coarse-grained. They also lead to issues where if you didn&#8217;t unlock the exact right amount of times, you will leave a thread holding the lock forever. It&#8217;s very easy for this to happen. And these problems are nearly impossible to find because the lock that was taken is usually very far away from where the hang/deadlock happens later.</p>

<p>Better to use a real honest-to-goodness lock. This means that if a thread tries to lock a lock that&#8217;s already, well, locked, you&#8217;ll deadlock. This is good. I like this, just as I like crashes. I know, you think I&#8217;m crazy, but if you deadlock on your own thread, then you know you just did something bad. Most likely, you&#8217;ve called out of a function when locked to another function that ends up needing the same resource.</p>

<p>Most people, when confronted with this, switch to recursive locks. Problem solved, right? Wrong. You&#8217;ve just opened yourself up to a world of hurt, mostly due to what I said above. So what do you do? Well, what I typically do is split the function into two. Consider:</p>

<pre><code>// Some public API
void IncrementCounter()
{
    Lock();
    fCounter++;
    Unlock();
}

// Another public API
void MyFunction()
{
    Lock();
    // do some magic that requires us to increment the counter
    IncrementCounter(); // BAD: DEADLOCK!!
    Unlock();
}
</code></pre>

<p>So here we have a public function that wants to call another public function, but both of them want to lock. What I end up doing is just creating an internal function.</p>

<pre><code>void IncrementCounter()
{
    Lock();
    IncrementCounterWhileLocked();
    Unlock();
}

void MyFunction()
{
    Lock();
    IncrementCounterWhileLocked();
    Unlock();
}

void IncrementCounterWhileLocked()
{
    fCounter++;
}
</code></pre>

<p>That&#8217;s it. So basically, put the locks on the outermost (public) layer and do whatever you need to while locked on the internal layer. Yes, it&#8217;s more typing, but it&#8217;s really clarifies exactly what is going on.</p>

<p>The other thing about non-recursive locks like <code>pthread_mutex</code> is that is also forces the next two points on you, which you probably would want to do anyway.</p>

<h2>2. Keep it short and sweet</h2>

<p>You should hold your locks for as short a period of time as is necessary or practical. Using a non-recursive lock helps to enforce this rule. This is convenient since contention will be reduced. On the other hand, don&#8217;t go insane and lock every little thing. Make your locks coarse-grained enough to avoid many trips to the kernel via locking, but fine-grained enough to know that contention is low between threads so they aren&#8217;t running choppily.</p>

<h2>3. Call out when locked, go to jail</h2>

<p>Never, ever lock a mutex and then call out to some other function (unless it&#8217;s some other utility function on the same object that expects the resource to be locked). This is a deadlock waiting to happen, as that callout might end up calling something that also wants that lock. Now you&#8217;re deadlocked. Use of recursive locks over large bodies of code almost always makes this a certainty to occur.</p>

<p>So you should never do this:</p>

<pre><code>void MyFunction()
{
    Lock();

    // ... do whatever work ...

    (*fCallback)(); // UNSAFE, could even call MyFunction again!

    // ... more work ...

    Unlock();
}
</code></pre>

<p>But instead, do this:</p>

<pre><code>void MyFunction()
{
    Lock();
    // ... do whatever work ...
    Unlock();

    (*fCallback)(); // OK

    Lock();
    // ... more work...
    Unlock();
}
</code></pre>

<p><em>(As a side note, it is fine to use a recursive lock if you follow 2 &amp; 3 religiously and can guarantee correctness, as then the locality of the locks should make things obvious where problem are when there is a problem. But I still prefer non-recursive. It forces you to get it right, and enough can already go wrong with threaded programming.)</em></p>

<p>My original document also had notes about other topics, but they were more specific to our project. I think the above has universal relevance, however. As I originally mentioned, our project was violation all three rules, but I&#8217;m pretty sure the root cause was #1. All other evil tends to stem from there.</p>

<p>I think if you follow these three rules, you&#8217;ll take a lot of the guesswork out about what&#8217;s locked when, and you&#8217;ll find problems immediately (it will just deadlock, which is typically an easy fix). This should allow you to focus on the more important issues and sidestep the nastiness that might otherwise befall you.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/fieryrobot?a=2JuewjTKQj0:8t1ociQdLRY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/fieryrobot?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/fieryrobot?a=2JuewjTKQj0:8t1ociQdLRY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/fieryrobot?i=2JuewjTKQj0:8t1ociQdLRY:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/fieryrobot?a=2JuewjTKQj0:8t1ociQdLRY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/fieryrobot?i=2JuewjTKQj0:8t1ociQdLRY:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/fieryrobot/~4/2JuewjTKQj0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.fieryrobot.com/blog/2008/10/14/recursive-locks-will-kill-you/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://www.fieryrobot.com/blog/2008/10/14/recursive-locks-will-kill-you/</feedburner:origLink></item>
		<item>
		<title>Tweetsville</title>
		<link>http://feedproxy.google.com/~r/fieryrobot/~3/xTcUkccrVNk/</link>
		<comments>http://www.fieryrobot.com/blog/2008/10/11/tweetsville/#comments</comments>
		<pubDate>Sat, 11 Oct 2008 17:56:23 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.fieryrobot.com/blog/?p=131</guid>
		<description><![CDATA[Well, it&#8217;s been about two months since I left Yahoo! and I&#8217;ve been spending pretty much literally all my time working on an iPhone application. It&#8217;s nothing super flashy, mind you, but I feel it is the best app of its kind. I had been really disappointed with all the Twitter apps for the iPhone. [...]]]></description>
			<content:encoded><![CDATA[<p>Well, it&#8217;s been about two months since I left Yahoo! and I&#8217;ve been spending pretty much literally all my time working on an iPhone application. It&#8217;s nothing super flashy, mind you, but I feel it is the best app of its kind. I had been really disappointed with all the Twitter apps for the iPhone. Either they were too slow, or scrolling was poor, or it just didn&#8217;t work the way I did. So I set out to write the version I&#8217;d want to use. I ended up with an application called Tweetsville. I&#8217;ve been putting together a small site for it <a href="http://www.tweetsville.com">here</a>, so you can check out the features there. I also have set up a <a href="http://twitter.com/tweetsville">Twitter user</a> you can follow if you care.</p>

<p>I had three goals in mind, in this order:</p>

<ul>
<li>Totally responsive, with <a href="http://www.fieryrobot.com/blog/2008/10/01/glassy-scrolling-with-uitableview/">glassy scrolling</a>.</li>
<li>Embrace the natural aesthetics of the iPhone user experience. </li>
<li>Use the full power of the <a href="http://apiwiki.twitter.com">Twitter API</a>.</li>
</ul>

<p>It&#8217;s definitely fast and smooth (though admittedly it could be tweaked a bit more), and it looks like a real honest-to-goodness iPhone application. For whatever reason, I thought it would be ideal to do this app using as many standard (or standard-looking) controls as I could. The less custom stuff the better.</p>

<p>But the real beauty is the fact that I cache as much of your Twitter stream as I can get from the API, coupled with the depth of what you can do with this application. You can see your timeline, do direct messaging, see your favorites, history, and replies. You can also see the latest trends and do searches, including advanced searches. It is without a doubt the most powerful Twitter iPhone application I&#8217;ve seen to date. Of course, I&#8217;ve had my head in the sand for the past 8 weeks!</p>

<p>Will this application change the world? Hell, no. But I think it will definitely make a dent in the Twitter space. And it was fun, which was really my whole main point of writing it. It&#8217;s been a long while since coding was fun.</p>

<p>Even with all it does, there is still other things I&#8217;d like to do to it to improve the functionality and ease of use beyond what&#8217;s there, but there are only so many hours in the day, and I&#8217;m burnt out from coding so much. I need a vacation from my vacation!</p>

<p>The real question is: should I even charge for it? I&#8217;m currently thinking no, but man, it might really take off, and then I&#8217;ll be missing out. If I don&#8217;t charge for it, I will likely make the source publicly available. I&#8217;ve already got a subversion repository set up and ready for some sources if I do. Or there&#8217;s always code.google.com.</p>

<p>I&#8217;m hoping this will get submitted very very soon. My last build seems to be pretty stable, and I&#8217;m too paranoid to make any real changes now.</p>

<p>Wow, this would be the first thing I&#8217;ve ever written and released like this since&#8230; Aaron (if anyone remembers that). Again, wow.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/fieryrobot?a=xTcUkccrVNk:SOF07m0VFa0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/fieryrobot?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/fieryrobot?a=xTcUkccrVNk:SOF07m0VFa0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/fieryrobot?i=xTcUkccrVNk:SOF07m0VFa0:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/fieryrobot?a=xTcUkccrVNk:SOF07m0VFa0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/fieryrobot?i=xTcUkccrVNk:SOF07m0VFa0:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/fieryrobot/~4/xTcUkccrVNk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.fieryrobot.com/blog/2008/10/11/tweetsville/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		<feedburner:origLink>http://www.fieryrobot.com/blog/2008/10/11/tweetsville/</feedburner:origLink></item>
		<item>
		<title>A Small Trick for Provisioning Profiles</title>
		<link>http://feedproxy.google.com/~r/fieryrobot/~3/P-Jni8r9Kpc/</link>
		<comments>http://www.fieryrobot.com/blog/2008/10/10/a-small-trick-for-provisioning-profiles/#comments</comments>
		<pubDate>Fri, 10 Oct 2008 19:03:42 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.fieryrobot.com/blog/?p=123</guid>
		<description><![CDATA[As most iPhone developers know, dealing with provisioning files is a bit of a pain. Even more of a pain can be altering your profile and trying to use the altered one.

Well yesterday, after having to do that two or three times, I finally figured out a bit of a clue. I was having trouble [...]]]></description>
			<content:encoded><![CDATA[<p>As most iPhone developers know, dealing with provisioning files is a bit of a pain. Even more of a pain can be altering your profile and trying to use the altered one.</p>

<p>Well yesterday, after having to do that two or three times, I finally figured out a bit of a clue. I was having trouble making xcode see the profile. Turns out, you need to have the current target configuration set to the config you are modifying in the info panel or else it just won&#8217;t show up. Made all the difference in the world.</p>

<p>And of course I always restart xcode after installing any profiles. Install, restart xcode, then ensure your target is set to the right config, then edit the config. Booyah!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/fieryrobot?a=P-Jni8r9Kpc:M5SGIul_BUU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/fieryrobot?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/fieryrobot?a=P-Jni8r9Kpc:M5SGIul_BUU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/fieryrobot?i=P-Jni8r9Kpc:M5SGIul_BUU:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/fieryrobot?a=P-Jni8r9Kpc:M5SGIul_BUU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/fieryrobot?i=P-Jni8r9Kpc:M5SGIul_BUU:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/fieryrobot/~4/P-Jni8r9Kpc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.fieryrobot.com/blog/2008/10/10/a-small-trick-for-provisioning-profiles/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.fieryrobot.com/blog/2008/10/10/a-small-trick-for-provisioning-profiles/</feedburner:origLink></item>
	</channel>
</rss>
