<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>Whatever happened to Benjamin Ragheb? &#187; iPhone</title>
	<atom:link href="http://www.benzado.com/blog/what/iphone/feed" rel="self" type="application/rss+xml" />
	<link>http://www.benzado.com/blog</link>
	<description>I apologize that this blog is using the default Wordpress template.</description>
	<lastBuildDate>Thu, 06 May 2010 16:33:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>iPhone Apps: Two Kinds of Approval</title>
		<link>http://www.benzado.com/blog/post/335/iphone-apps-two-kinds-of-approval</link>
		<comments>http://www.benzado.com/blog/post/335/iphone-apps-two-kinds-of-approval#comments</comments>
		<pubDate>Mon, 01 Mar 2010 07:13:28 +0000</pubDate>
		<dc:creator>Benjamin</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[itunes app store]]></category>

		<guid isPermaLink="false">http://www.benzado.com/blog/?p=335</guid>
		<description><![CDATA[Apple recently removed about 5,000 apps from the iTunes App Store on the grounds that they featured &#8220;overtly sexual content.&#8221; John Gruber believes that Apple is trying to protect its image: I think what Apple was getting squeamish about wasn’t the sexy apps themselves, but the cheesiness that the sexy apps (and their prominence in [...]]]></description>
			<content:encoded><![CDATA[<p>Apple recently removed about 5,000 apps from the iTunes App Store on the grounds that they featured &#8220;overtly sexual content.&#8221; John Gruber believes that <a href="http://daringfireball.net/2010/02/tits_and_apps">Apple is trying to protect its image</a>:</p>
<blockquote><p>
I think what Apple was getting squeamish about wasn’t the sexy apps themselves, but the cheesiness that the sexy apps (and their prominence in best selling lists) was bestowing upon the general feel and vibe of the App Store. One thing I wasn’t aware of before the recent crackdown was the degree to which these apps were seeping into various non-entertainment categories. E.g., like half the “new” apps in the “productivity” category featured imagery of large-breasted bikini-clad women.</p>
<p>The App Store is never going to be like Apple’s retail stores, and Apple knows it. Apple’s retail stores, branding-wise, convey an image sort of like between the Gap and Banana Republic — friendly premium. The App Store is more Old Navy, or maybe even Target. But these sexy apps were casting the App Store into something junkier, bordering on the skeevy.
</p></blockquote>
<p>This interpretation makes the most sense to me, too. In fact, I sympathize. When I gave my brother an iPod touch for Christmas, I showed him the App Store, and was mildly embarrassed that the number one app that day was a fart sound effects generator.</p>
<p>Unfortunately, the App Store&#8217;s role as the <em>one and only way</em> to distribute an iPhone app means that we have a dilemma. To carry something in a store is an implicit endorsement, so any store owner should have the right to decide what products to include. However, a healthy economy for apps requires a free market. Rejecting apps for subjective reasons makes development more risky than it needs to be.</p>
<h3>Technical Requirements vs. Community Standards</h3>
<p>The source of this dilemma is that the app review process serves two distinct purposes: to approve apps for iPhone and to approve apps for the App Store. If separated, the dilemma can be resolved.</p>
<p>Suppose you have developed an app and submitted it to Apple. It complies with all the <i>technical requirements</i> of an approved app: it sticks to the Human Interface Guidelines, it doesn&#8217;t use any private frameworks, it doesn&#8217;t execute downloaded code. However, it fails to meet Apple&#8217;s <i>community standards</i>: it contains overtly sexual or politically controversial content.</p>
<p>Enforcing technical requirements is for the benefit of the platform. Enforcing community standards is really only about the App Store.</p>
<h3>Kick &#8216;em to the curb, but no further</h3>
<p>In theory, Apple could inform you that your app is permitted to run on iPhone OS but will not be included in the App Store. This could happen in at least two ways:</p>
<p>They could maintain iTunes as the sole distribution method for apps, but designate your app <em>unlisted</em>. Nobody will find it in the store by browsing or searching, and it won&#8217;t appear in the top seller lists. However, it will be reachable by direct link. Apple will still manage the hosting and payment processing, but if you want anybody to find it, you have to market it yourself.</p>
<p>I obviously don&#8217;t know how the store is set up, but I bet Apple could do this relatively easily. (I&#8217;ve already discovered that an iTunes reviews page is accessible via direct link as soon as you submit an app, before the review team has had a chance to see it.)</p>
<p>Alternatively, if Apple wants to completely wash their hands of these dirty apps, is to provide developers with a digitally signed IPA file. You distribute the file yourself; users install your app by dragging the file to iTunes. If you want to charge, you have to roll your own payment and registration system, just like desktop shareware developers do.</p>
<p>This method seems less likely, mostly because it adds a big loophole for those who want to circumvent the App Store for other reasons. On the other hand, if all developers had the option to sell outside the App Store, I think it would be an overall good for the platform. But now we&#8217;re going off on a tangent.</p>
<p>Obviously, everybody would rather be part of the iTunes App Store than operate outside of it, but if given a choice between &#8220;outside&#8221; and &#8220;nowhere&#8221; I think outside is a clear winner. Separating the notion of &#8220;approved for iPhone&#8221; and &#8220;approved for the App Store&#8221; would benefit Apple <em>and</em> developers.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.benzado.com/blog/post/335/iphone-apps-two-kinds-of-approval/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Don&#8217;t call it a comeback!</title>
		<link>http://www.benzado.com/blog/post/321/dont-call-it-a-comeback</link>
		<comments>http://www.benzado.com/blog/post/321/dont-call-it-a-comeback#comments</comments>
		<pubDate>Wed, 09 Dec 2009 17:59:38 +0000</pubDate>
		<dc:creator>Benjamin</dc:creator>
				<category><![CDATA[FatWatch]]></category>

		<guid isPermaLink="false">http://www.benzado.com/blog/?p=321</guid>
		<description><![CDATA[I confess, I have some minor narcissistic tendencies. For example, the App Store search bar on my iPhone usually contains my own name, so I can check on the ratings of my apps at a glance. That&#8217;s how I noticed this new review of FatWatch, my weight tracking app for iPhone: It does exactly what [...]]]></description>
			<content:encoded><![CDATA[<p>I confess, I have some minor narcissistic tendencies. For example, the App Store search bar on my iPhone usually contains my own name, so I can check on the ratings of my apps at a glance.</p>
<p>That&#8217;s how I noticed this new review of <a href="http://www.fatwatchapp.com/">FatWatch, my weight tracking app for iPhone</a>:</p>
<blockquote><p>It does exactly what it says it does, but it&#8217;s far too expensive and the developer seems to have abandoned it. Get one of the free weight apps and save yourself the dough.</p></blockquote>
<p>Ouch!</p>
<p>In a world of disposable mobile apps, FatWatch might seem expensive, but it&#8217;s actually quite cheap for what it does: tracking your weight <em>against a moving average</em> in a well-designed application. <a href="http://fourmilab.ch/hackdiet/e4/signalnoise.html">The average is key</a>; it&#8217;s the only useful way to track a human being&#8217;s weight, and none of the free apps can do the math for you.</p>
<p>For devotees of <a href="http://fourmilab.ch/hackdiet/">The Hacker&#8217;s Diet</a>, it also lets you import your weight history from the old Palm Eat Watch app and export it to your computer any time you choose.</p>
<p>As for the other concern, <strong>I assure you that FatWatch has not been abandoned.</strong> I use it every day! I suppose it is overdue for an update, but that&#8217;s only to add new features, as (save for a minor cosmetic issue) no bugs have been reported in FatWatch 1.4.</p>
<p>The good news is that I recently completed a contract project that puts me in a comfortable enough financial position to devote time to a FatWatch update. So, watch this space, and if you&#8217;re interested in beta testing, wait for an announcement soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.benzado.com/blog/post/321/dont-call-it-a-comeback/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Introducing MetroCost</title>
		<link>http://www.benzado.com/blog/post/313/introducing-metrocost</link>
		<comments>http://www.benzado.com/blog/post/313/introducing-metrocost#comments</comments>
		<pubDate>Thu, 29 Oct 2009 03:32:56 +0000</pubDate>
		<dc:creator>Benjamin</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[MetroCost]]></category>

		<guid isPermaLink="false">http://www.benzado.com/blog/?p=313</guid>
		<description><![CDATA[After writing my last post, I realized that I had never formally announced MetroCost on this blog. Well, now is as good a time as any, because until the end of the week I&#8217;m giving it away for free! MetroCost is an app for iPhone or iPod touch that helps you track your public transit [...]]]></description>
			<content:encoded><![CDATA[<p>After writing my last post, I realized that I had never formally announced MetroCost on this blog. Well, now is as good a time as any, because until the end of the week I&#8217;m giving it away for free!</p>
<p><strong><a href="http://www.metrocost.com/">MetroCost</a> is an app for iPhone or iPod touch that helps you track your public transit expenses.</strong> I live in New York City, so I use the subway a lot, but I&#8217;m a freelancer, so I don&#8217;t ride it every day. I began to wonder: should I really be paying $89 a month for an Unlimited Ride card, or would I save money if I paid $2.25 per ride?</p>
<p>Except it&#8217;s not that simple, because if you add $8 or more to a Pay-Per-Ride MetroCard, a 15% bonus is added to your total. As long as you add at least $8 at a time, a ride actually costs $1.96.</p>
<p>So, how does MetroCost help figure this out?</p>
<p><span id="more-313"></span>Each time you ride the subway or the bus, launch MetroCost and swipe a finger across the &#8220;magnetic&#8221; strip. It will keep a record and, based on your average ride count per day, compare the costs of an unlimited versus a pay-per-ride card.</p>
<p>If you&#8217;ve recorded 30 days&#8217; worth of rides, the calculations will be exact; if you&#8217;ve recorded less than that, you will still get a useful estimate. Either way, the next time you need to buy or refill your card, consult MetroCost to see which is best for you.</p>
<p>MetroCost is set up for New York City transit out of the box, but it&#8217;s totally customizable. As long as the fare doesn&#8217;t vary with distance traveled (sorry, Washington, DC) you can use MetroCost to save money.</p>
<p>You can also frivolously change MetroCost&#8217;s appearance to match your transit system&#8217;s color scheme.</p>
<p>MetroCost debuted at $1.99 but for this week only you can <a href="http://www.benzado.com/itunes/app326574369">get it for FREE on the iTunes App Store</a>. On Saturday I&#8217;m restoring the price, and maybe raising it, so you&#8217;d be crazy not to download it now.</p>
<p>Don&#8217;t be crazy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.benzado.com/blog/post/313/introducing-metrocost/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Avoid defining your iPhone app&#8217;s default values in two places</title>
		<link>http://www.benzado.com/blog/post/275/xsl-for-default-plist</link>
		<comments>http://www.benzado.com/blog/post/275/xsl-for-default-plist#comments</comments>
		<pubDate>Tue, 06 Oct 2009 22:13:34 +0000</pubDate>
		<dc:creator>Benjamin</dc:creator>
				<category><![CDATA[Nerdery]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[cocoa]]></category>
		<category><![CDATA[xcode]]></category>
		<category><![CDATA[xsl]]></category>
		<category><![CDATA[xsltproc]]></category>

		<guid isPermaLink="false">http://www.benzado.com/blog/?p=275</guid>
		<description><![CDATA[This is a guide to using XSLT to extract default values from your iPhone app&#8217;s Settings bundle into a separate property list file. That file can be loaded by your app at runtime, sparing you the need to maintain the same data in two places and avoiding the risk of a mismatch leading to buggy [...]]]></description>
			<content:encoded><![CDATA[<p>This is a guide to using XSLT to extract default values from your iPhone app&#8217;s Settings bundle into a separate property list file. That file can be loaded by your app at runtime, sparing you the need to maintain the same data in two places and avoiding the risk of a mismatch leading to buggy behavior.</p>
<p><span id="more-275"></span>Your iPhone app includes a Settings bundle, so that you can keep your application simple and leave the <a href="http://www.settingsareinthesettingsapp.com/">settings in the settings app</a>. Specifically, you allow the user to customize the FooColor setting, with a default value of Red.</p>
<p>Initially, the user defaults database doesn&#8217;t contain a value for FooColor. Although you defined a default value in the Settings bundle, only the Settings app pays any attention to it.</p>
<p><b>Take Note:</b> Cocoa uses the term &#8220;user defaults&#8221; to refer to application settings in general. Don&#8217;t confuse that with the notion of a default value, which is the initial value of a setting before it has been changed through user action.</p>
<p>The proper way to load default values at runtime is to use NSUserDefaults&#8217;s <code>registerDefaults:</code> method. It takes a single NSDictionary object and merges it into the user defaults registration domain. (The user defaults database is divided into domains, or layers.) Values in the registration domain are only used if they are not defined anywhere else, so you don&#8217;t need to worry about overwriting a user&#8217;s preference.</p>
<p>You create a property list file named Defaults.plist, define an entry giving &#8220;FooColor&#8221; the value &#8220;Red&#8221;, and load it:</p>
<pre>NSString *path = [[NSBundle mainBundle] pathForResource:@"Defaults" ofType:@"plist"];
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path];
[[NSUserDefaults standardUserDefaults] registerDefaults:dict];</pre>
<p>The only problem with this set up is that you must keep your Settings bundle and Defaults.plist files in sync. If you change the default FooColor from Red to Blue, you must change both. If you add a new setting, you must add it to both. If you&#8217;ve been programming for more than a month, you know that eventually you will make a mistake which will lead to a bug that will take forever to track down and take years off your life.</p>
<p><strong>Therefore, a better solution is to dynamically generate Defaults.plist from the data that is already in the Settings bundle.</strong> You can do so with <a href="http://www.benzado.com/blog/wp-content/uploads/2009/10/ExtractDefaults.xsl.txt" title="ExtractDefaults.xsl.txt">ExtractDefaults.xsl</a>, a simple stylesheet which creates an XML property list from a Settings bundle definition, and xsltproc, which is fortunately already installed on your Mac.</p>
<p>First, if you really did create a Defaults.plist, remove it from your project and delete the file. It&#8217;s graduating from a source file to a build product!</p>
<p>Then, select your target in Xcode. Go to the menu bar and select Project | New Build Phase | New Run Script Build Phase. A window appears. In the Script area, enter the following shell script:</p>
<pre>SETTINGS_PLIST=$SRCROOT/Settings/Root.plist
XSL=$SRCROOT/ExtractDefaults.xsl
DEFAULTS_PLIST=${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/Defaults.plist
xsltproc -o $DEFAULTS_PLIST $XSL $SETTINGS_PLIST
plutil -convert binary1 $DEFAULTS_PLIST</pre>
<p>You may need to edit the first three lines, depending on the path to your Settings page file and where you saved ExtractDefaults.xsl. It&#8217;s also recommended that you fill in the Input Files and Output Files lists, so that Xcode can intelligently determine when the script needs to be run (when input files are newer than output files). Following the script above, Input Files should contain:</p>
<pre>$(SRCROOT)/Settings/Root.plist
$(SRCROOT)/ExtractDefaults.xsl</pre>
<p>Output Files should contain:</p>
<pre>$(BUILT_PRODUCTS_DIR)/$(WRAPPER_NAME)/Defaults.plist</pre>
<p>Note that Xcode needs round parenthesis around variable names, unlike the shell script, which uses nothing or curly braces. There&#8217;s a good reason for this, but I don&#8217;t know what it is.</p>
<p><strong>That&#8217;s it!</strong> Now, when you build your app, the script will generate a Defaults.plist file inside of your app bundle, so it can be loaded by your code. And you won&#8217;t have to worry about your app defaults mismatching your Settings bundle defaults, because it is being handled by a machine, and machines never fail!</p>
<h3>Mini-FAQ</h3>
<p><strong>Where do I get ExtractDefaults.xsl?</strong> <a href="http://www.benzado.com/blog/wp-content/uploads/2009/10/ExtractDefaults.xsl.txt" title="ExtractDefaults.xsl.txt">Click here to download the file.</a> It&#8217;s free to use for whatever you want to do with it. If you improve on it in some way, kindly let me know.</p>
<p><strong>What if I have also default values not defined in my Settings bundle?</strong> You can manually enter them into another property list file, and load both. It&#8217;s totally cool to call <code>registerDefaults:</code> several times with different dictionaries. <em>Totally cool!</em></p>
<p><strong>What if my Settings bundle contains multiple page files?</strong> In that case you could run the script over each one, generating several Defaults.plist files, and load them all at runtime. Or, if you&#8217;re really clever, figure out some way to merge them all into a single property list at build time. <em>I can&#8217;t do everything for you.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.benzado.com/blog/post/275/xsl-for-default-plist/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>App Store Reviewer Incentives</title>
		<link>http://www.benzado.com/blog/post/268/app-store-reviewer-incentives</link>
		<comments>http://www.benzado.com/blog/post/268/app-store-reviewer-incentives#comments</comments>
		<pubDate>Sat, 08 Aug 2009 17:28:27 +0000</pubDate>
		<dc:creator>Benjamin</dc:creator>
				<category><![CDATA[Nerdery]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.benzado.com/blog/?p=268</guid>
		<description><![CDATA[I think Daniel Jalkut has it backwards: Many of the mercenary testers I encountered were motivated to scrape the system for bugs, as ridiculous as they may be. They logged them into the bug system and then defended them at all costs, as if their lives depended on it. And it turned out, they did. [...]]]></description>
			<content:encoded><![CDATA[<p>I think <a href="http://www.red-sweater.com/blog/872/app-store-mercenaries">Daniel Jalkut has it backwards</a>:</p>
<blockquote><p>Many of the mercenary testers I encountered were motivated to scrape the system for bugs, as ridiculous as they may be. They logged them into the bug system and then defended them at all costs, as if their lives depended on it. And it turned out, they did. At least, their paychecks did.</p>
<p>I would not be surprised to learn that App Store reviewers are working under a similar structure. A system that rewards “unique, valid rejections” would certainly explain the behavior we have seen coming to light in the past year.</p></blockquote>
<p>QA teams, like the ones Daniel writes about, reward &#8220;unique, valid bug reports&#8221; because all the testers are testing the same piece of software. If a group of testers repeatedly file duplicate bug reports, clearly you have an inefficient team, and can afford to let some of them go. The team has an incentive to reward unique reports.</p>
<p>The App Store review team, on the other hand, has one reviewer per app, and each app is different. Even if the team was perversely trying to justify its existence by beefing up its rejection numbers, there would be no need to come up with &#8220;unique, valid rejections.&#8221; In that case it would be more efficient for them to reject apps with increasingly vague reasons, or no reason at all.</p>
<p>It is more likely that reviewers are severely punished (i.e., fired) for approving an app that later causes a problem. That&#8217;s the kind of situation that leads to overzealous reviewers without assuming that management is dumb.</p>
<p>And there are problems: all the writing on the Ninjawords rejection pits Apple against enlightened liberal people. Not pictured are the parents who have purchased an iPod touch for their young child and want to let them download games from the App Store, but maybe don&#8217;t want to let them downloading Motorboat, which is not actually about boats, but involves rubbing your nose on the touchscreen.</p>
<p>When Apple added ratings to the App Store, it did not do so in a vacuum. It has quite a few customers with children, who I suspect express themselves by making phone calls instead of posting on blogs. So while we&#8217;ve read a lot about the helpless developers who are being persecuted by puritannical Apple, we haven&#8217;t read the testimony of parents who are trying to give their child a little bit of freedom without having to worry that they will get the idea that sticking your nose in a woman&#8217;s cleavage is an acceptable thing to talk about during Thanksgiving dinner.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.benzado.com/blog/post/268/app-store-reviewer-incentives/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FatWatch 1.4.1</title>
		<link>http://www.benzado.com/blog/post/244/fatwatch-141</link>
		<comments>http://www.benzado.com/blog/post/244/fatwatch-141#comments</comments>
		<pubDate>Wed, 24 Jun 2009 21:45:17 +0000</pubDate>
		<dc:creator>Benjamin</dc:creator>
				<category><![CDATA[FatWatch]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.benzado.com/blog/?p=244</guid>
		<description><![CDATA[I intended FatWatch 1.4.1 to be a minor update, primarily to fix a display issue that appears on iPhone OS 3.0. If you&#8217;ve upgraded, you may have noticed that when you switch between Variance and BMI in the Log view, the table rows no longer update immediately; you must scroll to force them to redraw. [...]]]></description>
			<content:encoded><![CDATA[<p>I intended FatWatch 1.4.1 to be a minor update, primarily to fix a display issue that appears on iPhone OS 3.0. If you&#8217;ve upgraded, you may have noticed that when you switch between Variance and BMI in the Log view, the table rows no longer update immediately; you must scroll to force them to redraw.</p>
<p>I submitted an update to Apple, changing as little else as possible, hoping that it would get through their review process in time for the public release of 3.0. Unfortunately, it was rejected for violating the iPhone Human Interface Guidelines. That&#8217;s right: I was nailed for something that they previously approved.</p>
<h3>What I got away with</h3>
<p>I could bitch about it, but they were right: the objection was to the Wi-Fi Import/Export feature, which in FatWatch 1.4 was enabled by a simple switch.</p>
<p><img class="aligncenter size-medium wp-image-249" title="fw140-wifi-off" src="http://www.benzado.com/blog/wp-content/uploads/2009/06/fw140-wifi-off-200x300.png" alt="fw140-wifi-off" width="200" height="300" /></p>
<p>If you want to import or export a CSV file containing your weight history, all you had to do was turn that switch, and a new row would appear beneath it with an IP address to connect to.</p>
<p><img class="aligncenter size-full wp-image-247" title="fw140-wifi-active" src="http://www.benzado.com/blog/wp-content/uploads/2009/06/fw140-wifi-active.png" alt="fw140-wifi-active" width="320" height="109" /></p>
<p>If you didn&#8217;t know what to do with all those geeky numbers and slashes, hopefully you would tap on it, because doing so would display an alert explaining that you are supposed to enter that into the address bar of a web browser on your computer.</p>
<p>Even when working properly, this is a spartan interface. I&#8217;d honestly be surprised if anybody who doesn&#8217;t describe themselves as a &#8220;geek&#8221; figured it out. What&#8217;s worse (and this is where I got into trouble with Apple) is when you turn on Wi-Fi Import/Export and you&#8217;re not even connected to a Wi-Fi network. You get a blank row.</p>
<p><img class="aligncenter size-full wp-image-248" title="fw140-wifi-airplane" src="http://www.benzado.com/blog/wp-content/uploads/2009/06/fw140-wifi-airplane.png" alt="fw140-wifi-airplane" width="320" height="107" /></p>
<p>So yes, I could say to Apple, <em>but that&#8217;s how it worked all along!</em> But that&#8217;s like telling the police officer you shouldn&#8217;t get a ticket because you run this red light every day and nobody gave you a ticket before.</p>
<h3>Making things right</h3>
<p>Initially, I tried to fix things by detecting whether a Wi-Fi connection was available and, if not, snapping the switch back to the OFF position and displaying an alert with an error message. While that would have been an improvement, it still felt&#8230; terrible.</p>
<p>After sleeping on it (always more productive than hammering away all night, will I ever learn?) I realized that Wi-Fi Import/Export really deserves its own screen, rather than the series of alert views I had allocated it. In practice, you aren&#8217;t going to use your iPhone or iPod touch for anything else while you are importing or exporting a file, so there&#8217;s no need for it to operate in the &#8220;background&#8221; of the app.</p>
<p>So in FatWatch 1.4.1, the Wi-Fi Import/Export changes from a switch to a menu item.</p>
<p><img class="aligncenter size-full wp-image-256" title="fw141-wifi-off" src="http://www.benzado.com/blog/wp-content/uploads/2009/06/fw141-wifi-off.png" alt="fw141-wifi-off" width="320" height="66" /></p>
<p>When you tap it, you see a screen that explains what Wi-Fi Import/Export does and how to use it. It also tells you that you can use Bonjour, instead of typing in a series of dots and colons and numbers. FatWatch always used Bonjour, but there wasn&#8217;t enough space in the old interface to explain it.</p>
<p><img class="aligncenter size-medium wp-image-254" title="fw141-wifi-active" src="http://www.benzado.com/blog/wp-content/uploads/2009/06/fw141-wifi-active-200x300.png" alt="fw141-wifi-active" width="200" height="300" /></p>
<p>FatWatch will now remember the last time you imported or exported a file; very useful if you want to export a file as a backup every so often and you can&#8217;t remember when you did it last.</p>
<p>But, most importantly, if you are not connected to a Wi-Fi network, FatWatch now makes it abundantly clear.</p>
<p><img class="aligncenter size-medium wp-image-255" title="fw141-wifi-airplane" src="http://www.benzado.com/blog/wp-content/uploads/2009/06/fw141-wifi-airplane-200x300.png" alt="fw141-wifi-airplane" width="200" height="300" /></p>
<p>As a bonus, now that I have a whole screen for this feature, I was able to get rid of the alerts and do some nice things, like display a progress bar so that you know things are working when you&#8217;re importing a large file.</p>
<p style="text-align: center;"><img class="alignnone size-thumbnail wp-image-250" title="fw141-import-1" src="http://www.benzado.com/blog/wp-content/uploads/2009/06/fw141-import-1-150x150.png" alt="fw141-import-1" width="150" height="150" /> <img class="size-thumbnail wp-image-251  alignnone" title="fw141-import-2" src="http://www.benzado.com/blog/wp-content/uploads/2009/06/fw141-import-2-150x150.png" alt="fw141-import-2" width="150" height="150" /> <img class="alignnone size-thumbnail wp-image-252" title="fw141-import-3" src="http://www.benzado.com/blog/wp-content/uploads/2009/06/fw141-import-3-150x150.png" alt="fw141-import-3" width="150" height="150" /></p>
<p>I won&#8217;t claim it&#8217;s perfect: even now I want to edit some of the text in those screenshots. I held myself to a fairly tight schedule because I didn&#8217;t want people to be waiting too long for the bug fixes that was supposed to be the primary focus of this release. However, I am glad Apple challenged me to improve this feature, because it has gone from an embarrassment to something I can feel mildly proud of.</p>
<h3>More</h3>
<p>A few other improvements that are coming in 1.4.1:</p>
<ul>
<li>The Wi-Fi Import/Export web pages are easier on the eyes.</li>
<li>FatWatch puts today&#8217;s date in the exported file name, for example: weight-2009-06-29.csv. Useful if you let those files accumulate in your downloads folder.</li>
<li>The Go To Date screen displays its buttons in a navigation bar; looks a lot nicer.</li>
<li>Fixed a bug where BMI values were calculated incorrectly. Basically, if you select your height in feet and inches, FatWatch always added an extra centimeter to your height. That has been fixed.</li>
</ul>
<p>Everybody cross your fingers, and hopefully it will appear on iTunes soon!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.benzado.com/blog/post/244/fatwatch-141/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>FatWatch and iPhone OS 3.0</title>
		<link>http://www.benzado.com/blog/post/242/fatwatch-and-3-dot-oh</link>
		<comments>http://www.benzado.com/blog/post/242/fatwatch-and-3-dot-oh#comments</comments>
		<pubDate>Wed, 17 Jun 2009 14:40:24 +0000</pubDate>
		<dc:creator>Benjamin</dc:creator>
				<category><![CDATA[FatWatch]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.benzado.com/blog/?p=242</guid>
		<description><![CDATA[iPhone OS 3.0 update is supposed to be available via iTunes any minute now, which means this post is long overdue. If you are using FatWatch 1.4 (the latest version at the time of this writing) then you can safely upgrade to iPhone OS 3.0 if you are willing to suffer a cosmetic issue. Specifically, [...]]]></description>
			<content:encoded><![CDATA[<p>iPhone OS 3.0 update is supposed to be available via iTunes any minute now, which means this post is long overdue.</p>
<p>If you are using FatWatch 1.4 (the latest version at the time of this writing) then you can safely upgrade to iPhone OS 3.0 if you are willing to suffer a cosmetic issue. Specifically, if you have BMI Monitoring enabled and use the control on the top of the Log view to switch between BMI and Variance, the values will not update unless you force them to by either scrolling the table or switching to and back from another view. It&#8217;s annoying, but not fatal.</p>
<p>I submitted an update to Apple that fixes this issue (and a few others), hoping it would be available on iTunes before the 3.0 update was released. Unfortunately, Apple rejected the update for a human interface issue concerning a feature that I hadn&#8217;t changed. It feels a little unfair to be rejected for something that was previously approved, but &#8220;I got away with it before&#8221; is not really a defense. They are right, it is something I should fix, it&#8217;s just that the timing is obviously less than ideal.</p>
<p>I intend to fix this issue and resubmit today or tomorrow, which means that FatWatch 1.4.1 should hopefully be available sometime next week. Or maybe not. I wish I could say. In the meantime, should you want to install the iPhone OS 3.0 update you can continue to use FatWatch 1.4 and be mildly annoyed at the display issue.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.benzado.com/blog/post/242/fatwatch-and-3-dot-oh/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>A nifty piece of technology</title>
		<link>http://www.benzado.com/blog/post/237/philometron</link>
		<comments>http://www.benzado.com/blog/post/237/philometron#comments</comments>
		<pubDate>Tue, 05 May 2009 22:33:48 +0000</pubDate>
		<dc:creator>Benjamin</dc:creator>
				<category><![CDATA[FatWatch]]></category>

		<guid isPermaLink="false">http://www.benzado.com/blog/?p=237</guid>
		<description><![CDATA[This looks interesting: PhiloMetron has developed a small adhesive patch which employs a variety of sensors to estimate your caloric intake. It then transmits the data via Bluetooth so you can view the trends on your cell phone. While you&#8217;re waiting for that to become available and/or affordable, you might be interested in FatWatch, an app [...]]]></description>
			<content:encoded><![CDATA[<p>This looks interesting: PhiloMetron has <a href="http://www.technologyreview.com/biomedicine/22501/">developed a small adhesive patch</a> which employs a variety of sensors to estimate your caloric intake. It then transmits the data via Bluetooth so you can view the trends on your cell phone.</p>
<p>While you&#8217;re waiting for that to become available and/or affordable, you might be interested in <a href="http://www.fatwatchapp.com/">FatWatch</a>, an app for your iPhone that also estimates your caloric intake, although it requires you to step on a scale and make a note of the number once a day.</p>
<p>(P.S. I found the above news via <a href="http://skepticalhypochondriac.com/2009/05/calorie-counter-patch/">The Skeptical Hypochondriac</a>. Recommended if you&#8217;re interested in health news without the hysteria.)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.benzado.com/blog/post/237/philometron/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why Apple won&#8217;t pre-approve apps</title>
		<link>http://www.benzado.com/blog/post/228/pre-review-theory</link>
		<comments>http://www.benzado.com/blog/post/228/pre-review-theory#comments</comments>
		<pubDate>Tue, 24 Mar 2009 22:51:58 +0000</pubDate>
		<dc:creator>Benjamin</dc:creator>
				<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.benzado.com/blog/?p=228</guid>
		<description><![CDATA[A lot of iPhone developers have wished that Apple would offer some kind of pre-approval process for applications. Right now, you could spend months developing an app, submit it to Apple, only to have it rejected. If you could get a thumbs up or down based on a design, before you started coding, you could [...]]]></description>
			<content:encoded><![CDATA[<p>A lot of iPhone developers have wished that Apple would offer some kind of pre-approval process for applications. Right now, you could spend months developing an app, submit it to Apple, only to have it rejected. If you could get a thumbs up or down based on a design, before you started coding, you could save yourself a lot of heartache.</p>
<p>Sorry, but Apple ain&#8217;t gonna do it.</p>
<p>First of all, there is no way Apple is going to offer a <em>binding</em> approval based on a design. You and they may have interpreted the design differently, and if your finished app does something they didn&#8217;t expect, they will want to reserve the right to reject it. Thus, even with a design review, you still risk rejection.</p>
<p>Even so, a design review that offered only an early rejection result would still have some value. To you. But it would be insanely expensive for Apple, because of supply and demand. Specifically, the supply of and demand for an app reviewer&#8217;s time.</p>
<h3>It&#8217;s basic economics</h3>
<p>Although iPhone Developer Program membership only costs $99/year, there is an additional hidden cost for every app you want to submit to Apple: the expense of creating an app in the first place. This effectively limits the amount of work that Apple&#8217;s review team has to do.</p>
<p>A design review program would effectively be a huge decrease in the cost of a reviewer&#8217;s time. Creating a good design and mock-ups takes substantially less effort than building a complete application. And creating a <a href="http://newyork.craigslist.org/search/ggg?query=iphone">hastily put together paragraph with poor spelling</a> about your app idea takes even less effort than that. So, with next to no effort at all, you will be able to send your app idea to Apple for review.</p>
<p>And I&#8217;m certain that lots of people will, because there is a huge surplus of ideas out there. It&#8217;s <em>easy</em> to come up with an idea. Everybody I know with an iPhone has told me about their idea for an app. Apple will be absolutely flooded with these design review requests. In order to handle them all, they will have to hire more reviewers and train them.</p>
<p>What does Apple get in exchange for that expense? Well, nothing. At best it<em> might</em> reduce their app review load, since some ideas that would have become app submissions will be stopped at the design review stage. But that number will be insignificant. Meanwhile, the expense of maintaining a design review team will be enormous.</p>
<p>It might work if the design review team was entirely financed by the people requesting reviews. A per-review fee could accomplish that, but it would have to be a non-trivial amount. In the end, most developers would scoff at it. (&#8220;Design review? What a waste of money! Why not just develop the app and submit it?&#8221;)</p>
<h3>A happy ending</h3>
<p>Given that iPhone apps must go through a review process, somebody must do the work of evaluating whether a design will be permitted on the App Store. Right now, Apple is asking the developers to do the work, since they have little to gain by doing it for you. True, they don&#8217;t publish an Ultimate Approval Guidelines Document, but you do have access to the iPhone Developer Program Agreement, the iPhone Human Interface Guidelines, trademark and copyright law, and a catalogue of all apps previously approved. So it&#8217;s not like it is completely impossible to figure out what&#8217;s allowed.</p>
<h3><span style="font-weight: normal; font-size: 13px;">The good news is that, for all the complaining, rejections are not a serious problem. Rejections are not fatal to an app, and most of the time the violation is fairly easy to fix. The complaints I see on mailing lists are mostly about things like improperly used or trademark infringing icons. Even Podcaster eventually found a home on the App Store as RSS Player. I don&#8217;t know of a single case where an developer was completely unable to post their app on the store and get the opportunity to recoup their investment. (Prove me wrong in the comments.)</span></h3>
]]></content:encoded>
			<wfw:commentRss>http://www.benzado.com/blog/post/228/pre-review-theory/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How the App Store review process probably works</title>
		<link>http://www.benzado.com/blog/post/225/app-review-theory</link>
		<comments>http://www.benzado.com/blog/post/225/app-review-theory#comments</comments>
		<pubDate>Tue, 24 Mar 2009 05:36:45 +0000</pubDate>
		<dc:creator>Benjamin</dc:creator>
				<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.benzado.com/blog/?p=225</guid>
		<description><![CDATA[One of the most popular conversations to have on iPhone development mailing lists is, &#8220;How long has your app been waiting in review?&#8221; This almost always lead to a comment by somebody about how the review process is nonsensical and hopelessly broken, etc. It shouldn&#8217;t bother me, but it does, because that attitude is disrespectful [...]]]></description>
			<content:encoded><![CDATA[<p>One of the most popular conversations to have on iPhone development mailing lists is, &#8220;How long has your app been waiting in review?&#8221; This almost always lead to a comment by somebody about how the review process is nonsensical and hopelessly broken, etc. It shouldn&#8217;t bother me, but it does, because that attitude is disrespectful and ignorant of the scale of the problem Apple is tackling. Everybody thinks they could do a better job of everything when they are sitting in an armchair.</p>
<p>Anyway, I wound up writing a long email about my theory on how the App Store review process probably works, attempting to use actual data. I&#8217;m reproducing it here with some light editing.</p>
<p>First, here are the facts:</p>
<ol>
<li>The App Store opened July 10, 2008 (about 8 months ago).</li>
<li>According to Apple&#8217;s iPhone OS 3.0 presentation:
<ol>
<li>There are over 25,000 apps on the App Store.</li>
<li>In February, 96% of submitted apps were approved.</li>
<li>In February, 98% of approvals were in 7 days or less.</li>
</ol>
</li>
<li><a href="http://www.niallkennedy.com/blog/2008/09/iphone-app-store.html">Podcaster was in review</a> for about one month before rejection for &#8220;duplicating iTunes functionality.&#8221;</li>
<li>Several web browsing apps were in review for a month or more, before being <a href="http://www.macrumors.com/2009/01/13/apple-allows-3rd-party-web-browsers-in-app-store/">approved more or less at the same time</a>. The same thing happened to fart sound apps.</li>
<li><a href="http://blog.atebits.com/">Tweetie was submitted</a> around March 2 and rejected on March 10, because an F-bomb appeared on the Trends screen.</li>
<li>App Store growth (by number of apps) has been <a href="http://apple20.blogs.fortune.cnn.com/2009/03/18/how-the-iphone-app-store-grows/">accelerating</a>.</li>
</ol>
<p>Now let&#8217;s work out a theory to fit the facts:</p>
<p>On average, Apple has been adding apps to the store at a rate of 3,125 per month.  The pace is actually accelerating (it took three months to reach 3,400) so the rate today is probably closer to 4,000 per month. That works out to 1,000 per week, or 25 apps per hour, assuming a 40 hour work week.</p>
<p>If each application review takes about an hour, you would need a staff of 25-30 testers to maintain this rate.  They probably install the app, tap around, look for problems, etc., then make an approve/reject decision.</p>
<p>In an ideal world, the entire staff would be highly intelligent and could be trusted to make carefully reasoned decisions in every scenario.  In California, where Apple is located, those people are doing more interesting jobs. The vast majority of apps are going to be fairly clear cases, so it would make more sense to hire cheaper and have the testers work from a checklist.  The checklist might look like:</p>
<ul>
<li>App does not require additional payment to unlock functionality.</li>
<li>App uses standard icons as prescribed by the interface guidelines.</li>
<li>App does not use any of the seven words you can&#8217;t say on television.</li>
<li>App does not show boobies.</li>
</ul>
<p>If the app fails any test, it gets rejected. If it passes all the tests, it gets approved.</p>
<p>If this were true, it makes sense that Tweetie was rejected rather quickly: the Tester, who probably doesn&#8217;t use or care about Twitter, was working down his list, saw the curse word (which is an instant reject), hit the reject button, and started testing the next app in his queue.  After all, he&#8217;s got to meet his quota if he wants to keep<br />
his job.</p>
<p>On the other hand, Podcaster was in review for about a month before it was ultimately rejected.  What&#8217;s the difference?  Podcaster was rejected for duplicating the functionality of the iTunes app in a then-unreleased version of the iPhone OS.  (Unfair, but nobody said life was fair.)  This is a much less clear-cut situation. In addition to approve and reject, the Tester probably also has the option to pass the app along to a committee. Again, you probably don&#8217;t want to bother the committee too often, but sometimes you&#8217;re not sure what to do, or you don&#8217;t have the authority to release information about unpublished Apple software.</p>
<p>The committee probably has to do things like check with the Legal Department and iPhone OS Engineers and Designers. They debate what should pass and try to revise the checklist to handle similar cases more clearly in the future.</p>
<p>The committee probably also looks for similar cases to deal with them as a group. That would explain why the web browser apps were released from review limbo at roughly the same time: they probably clarified internally what counted as duplicating Safari, then re-reviewed them. Same goes for the fart machine apps, as Apple clarified their definition of obscene.</p>
<p>Based on my professional experience, that is how I would organize things. (I might have each app checked by two testers, budget-permitting.)  The view from the outside seems to confirm the basic idea that they are gradually improving the process as they approve more apps and update their checklist.</p>
<p>Given the volume of apps they are processing, it&#8217;s not surprising that there are going to be some mistakes like what happened to Tweetie: but that was hardly a fiasco, it was eventually approved.</p>
<p>If you&#8217;re going to say that Apple should have had a flawless process in place on Day One&#8230; well, I&#8217;m sure the view is lovely from up there on your high horse.  Before the App Store began accepting submissions it would have been impossible to write one set of rules that would clearly apply to every application.  So they did the best they could and have revised it over time, with experience.</p>
<p>Now, if you want to object to the <strong>rules</strong> (that Apple must approve the apps in the first place, that you can&#8217;t do porn, etc.) that is certainly your right. And if you want to complain that Apple is too secretive, yeah, but it&#8217;s worked so well for them that I don&#8217;t think they&#8217;re going to give it up.</p>
<p>But given that, the <strong>process</strong> hardly seems broken.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.benzado.com/blog/post/225/app-review-theory/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
