<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[David Smith]]></title>
  <link href="http://david-smith.org/atom.xml" rel="self"/>
  <link href="http://david-smith.org/"/>
  <updated>2012-05-17T09:55:47-04:00</updated>
  <id>http://david-smith.org/</id>
  <author>
    <name><![CDATA[David Smith]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[Introducing Audiobooks 5.0]]></title>
    <link href="http://david-smith.org/blog/2012/05/15/introducing-audiobooks-5-dot-0/"/>
    <updated>2012-05-15T10:12:00-04:00</updated>
    <id>http://david-smith.org/blog/2012/05/15/introducing-audiobooks-5-dot-0</id>
    <content type="html"><![CDATA[<p><a href="http://itunes.apple.com/us/app/audiobooks-premium/id324596259?mt=8&partnerId=30&siteID=IzE7m699rYo-kZGOJCGdiJS7BwDyWZ7k6A"><img src="http://david-smith.org/resources/audiobooksicon.png" style="float:right;width:128px;border:none;padding:0px;margin:10px;-webkit-box-shadow:none;"></a></p>

<p>Today I&#8217;m proud to unveil <em>Audiobooks</em> 5.0.  <em>Audiobooks</em> is an iOS application for listening to audiobooks on your iPhone or iPad.</p>

<p>Today&#8217;s launch represents a near complete overhaul of the app&#8217;s appearance as well as a major update to both the content and functionality of the app.  I&#8217;ll talk about the update a bit more at the end of this article but to start with I thought it might be interesting to trace its history.</p>

<!--More-->


<h3>Interface</h3>

<p><img src="http://david-smith.org/resources/playerscreenevolution.png" alt="" /></p>

<p><em>Audiobooks</em> was my first &#8216;complicated&#8217; application, I started working on it in March of 2009.  Previously, all my apps consisted of only a handful of view controllers and were entirely static in their dataset.</p>

<p>Audiobooks lets you browse and listen to any of a library of thousands of audiobooks (most taken from the <a href="http://librivox.org">LibriVox Project</a>). Presenting and managing that much content presented a variety of challenges both in terms of performance and usability.  It was initially created to work with iPhone OS 2.2.1.  Back then many of the conveniences and abilities of iOS that I take for granted now didn&#8217;t exist.  The initial interface was bare, spartan and generally native.</p>

<p>The above graphic shows the progression of the main player screen over the years with 1.0 on the left and 5.0 on the right.  Over the years I have updated its appearance along with the fashions of the time.  The most recent version sought to clean up and simplify the interface.  Over time it had grown cluttered and visually noisy.</p>

<p>One of the challenges of being a developer who dabbles in design is fighting the tendency to use every last hip new thing you see in other apps.  The previous version really suffered from this.  There were gaussian noise textures, rounded corners and drop shadows galore.</p>

<p>As I have grown more confident in my design sense I have found that generally speaking the simpler my design aesthetic the better.  The less I try to be &#8216;fancy&#8217; the more likely I am to succeed.  In order to pull off a visually stunning interface requires skills that I simply don&#8217;t have and so I&#8217;m better served to stick to a simple, minimalistic design.</p>

<h3>Icon</h3>

<p><img src="http://david-smith.org/resources/iconevolution.png" alt="" /></p>

<p>Perhaps the most important visual component of an app is its icon.  This is the first impression you make on your customer.  <em>Audiobooks</em> has had three icons over its life.</p>

<p>The first icon (which I am rather embarrassed about now) was just me taking a clipart speaker and then mucking about in Photoshop playing with blending options.  It is hideous to my eye now but served the app for its first year.  When I launched version 2.0 I commissioned a designer to come up with an updated icon.  This kept with the initial structure but replaced the gaudy appearance with a cleaner, more polished look.</p>

<p>While I liked the icon it never really had the &#8216;pop&#8217; I wanted, nor the visual appeal needed to really grab attention.  I reached out to the great designers at the <a href="http://iconfactory.com">Iconfactory</a> for the 5.0 update.  They were a delight to work with and the result I think speaks for itself.  The app now has a graphically rich icon that I think will really catch customer&#8217;s eyes when browsing the App Store.</p>

<h3>Sales</h3>

<p>In its 3 year lifespan it has been downloaded around 4.7M times between both the free and paid versions.  That number still is staggering to me every time I think about it.  It is a number that speaks to the reach of the App Store far more than to the quality of the app.  There is something marvelous about a platform where a single developer in his basement can create something that then reaches out to millions of people.</p>

<p>The road to here has been nothing if not variable.  The life of an app developer is one of constant flux.  I have had daily fluctuations in sales of more than 8x.  Over time you just grow used to the cyclical nature of the Store and embrace the ride.</p>

<p>The only consistent pattern I&#8217;ve ever seen in the store is a weekly surge in sales over the weekend (seen every 7 days below) and a major spike in sales on Christmas.  Otherwise, sales are a fickle thing.</p>

<p><img src="http://david-smith.org/resources/audiobookssales.png" alt="" /></p>

<h3>New in 5.0</h3>

<p>Version 5.0 includes a lot of behind the scenes improvements and changes that users will never see but will hopefully improve their experience.  I wanted to get back to basics and refactor and improve the underlying code that had grown stale with 3 years of use.  I am dropping support for iOS 3.x with this update which means I am able to finally make use of many of the great design patterns permitted when using blocks.</p>

<p>Every screen in the app was overhauled visually.  I removed all of the textures and over wrought colors in the app.  Instead, it is now clean, simple and works within a palette of grays.  Since the app is focused on an audio experience rather than a visual one I wanted to strip down anything that cluttered the interface and make it as straightforward as possible to find, download and enjoy an audiobook.</p>

<p>This is my first app to make use of iCloud extensively.  For iOS 5.x users their library and bookmarks will now sync between all their devices.  So you can now start a book on your iPad at home, get in your car and pickup right where you left off on your iPhone.</p>

<p>I also introduced variable playback speed.  You can listen to audiobooks at either 1.5X or 2X speed.</p>

<p>Finally, I added 133 new Plus books (430 total now) as well as 613 new Free books (4,382 total now).</p>

<p>If you&#8217;d like to check it out you can get it in the App Store here.  Enjoy.</p>

<center><a href="http://itunes.apple.com/us/app/audiobooks-premium/id324596259?mt=8&partnerId=30&siteID=IzE7m699rYo-kZGOJCGdiJS7BwDyWZ7k6A"><img style="border:none;padding:0px;margin:5px" src="http://david-smith.org/resources/appstorebadge.png"></a></center>




<center><a href="http://audiobooksapp.com/AudiobooksPressKit.zip">Press Kit</a></center>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[iOS 5.1.1 Upgrade Stats]]></title>
    <link href="http://david-smith.org/blog/2012/05/11/ios-5-dot-1-1-upgrade-stats/"/>
    <updated>2012-05-11T13:58:00-04:00</updated>
    <id>http://david-smith.org/blog/2012/05/11/ios-5-dot-1-1-upgrade-stats</id>
    <content type="html"><![CDATA[<p>On May 7, 2012 Apple released <a href="http://support.apple.com/kb/DL1521">iOS 5.1.1</a> as an over-the-air (OTA) update.  This post will continue my popular <a href="http://david-smith.org/blog/2012/03/10/ios-5-dot-1-upgrade-stats/">series</a> <a href="http://david-smith.org/blog/2012/02/17/more-ios-version-stats/">of</a> <a href="http://david-smith.org/blog/2012/02/15/ipad-os-version-stats/">posts</a> <a href="http://david-smith.org/blog/2011/11/14/ios-5-over-the-air-update-rate/">discussing</a> the evolution of user adoption for iOS releases.</p>

<p>This post will present data showing how quickly users are updating to iOS 5.1.1.  The data below is taken from the user base of my <a href="http://itunes.apple.com/us/app/audiobooks-premium/id324596259?mt=8&amp;partnerId=30&amp;siteID=IzE7m699rYo">Audiobooks</a> apps. Audiobooks is universal so provides data for both iPhone and iPad.  The free and paid versions of <em>Audiobooks</em> together get around 100k weekly downloads so provides a statistically meaningful data set.  This data reflects the active unique users each day across all devices.</p>

<!--More-->


<blockquote><p>Bookmark this page or <a href="http://twitter.com/_DavidSmith">follow</a> me on Twitter if you are curious to see the data progress over time.  I&#8217;ll be updating this page periodically until the numbers seem to stabilize.</p></blockquote>

<p><a name="May11"></a></p>

<h4>Friday, May 11, 2012</h4>

<p>To start the adoption tracking I&#8217;m going to look at the data on an hourly basis.  After more than a few days this starts to become unwieldy but should be manageable for the first 4 days.  The data for 4 days shows a clear and very consistent progression.  Users are updating at a rate of roughly 7.5%/day, leading to a total adoption of around 30% so far.</p>

<div id="container" style="margin: 0 auto"></div>


<p>This is very similar what was seen with <a href="http://david-smith.org/blog/2012/03/10/ios-5-dot-1-upgrade-stats/index.html#march12">iOS 5.1</a>.  The consistency across OTA releases indicates to me that users are now accustomed to performing their updates via OTA and will likely continue to do so at a quick rate going forward towards iOS 6.</p>

<script type="text/javascript">
$(function () {
    var chart;
    $(document).ready(function() {
        chart = new Highcharts.Chart({
            chart: {
                renderTo: 'container',
                type: 'area'
            },
            title: {
                text: 'iOS 5.1.1 Hourly Adoption'
            },
            xAxis: {
categories: ['07/May', '07/May:04', '07/May:05', '07/May:06', '07/May:07', '07/May:08', '07/May:09', '07/May:10', '07/May:11', '07/May:12', '07/May:13', '07/May:14', '07/May:15', '07/May:16', '07/May:17', '07/May:18', '07/May:19', '07/May:20', '07/May:21', '07/May:22', '07/May:23', '08/May:00', '08/May:01', '08/May:02', '08/May', '08/May:04', '08/May:05', '08/May:06', '08/May:07', '08/May:08', '08/May:09', '08/May:10', '08/May:11', '08/May:12', '08/May:13', '08/May:14', '08/May:15', '08/May:16', '08/May:17', '08/May:18', '08/May:19', '08/May:20', '08/May:21', '08/May:22', '08/May:23', '09/May:00', '09/May:01', '09/May:02', '09/May', '09/May:04', '09/May:05', '09/May:06', '09/May:07', '09/May:08', '09/May:09', '09/May:10', '09/May:11', '09/May:12', '09/May:13', '09/May:14', '09/May:15', '09/May:16', '09/May:17', '09/May:18', '09/May:19', '09/May:20', '09/May:21', '09/May:22', '09/May:23', '10/May:00', '10/May:01', '10/May:02', '10/May', '10/May:04', '10/May:05', '10/May:06', '10/May:07', '10/May:08', '10/May:09', '10/May:10', '10/May:11', '10/May:12', '10/May:13', '10/May:14', '10/May:15', '10/May:16', '10/May:17', '10/May:18', '10/May:19', '10/May:20', '10/May:21', '10/May:22', '10/May:23', '11/May:00', '11/May:01', '11/May:02', '11/May', '11/May:04', '11/May:05', '11/May:06', '11/May:07', '11/May:08'],
                tickmarkPlacement: 'on',
                title: {
                    enabled: false
                },
                labels: {
                    step: 24,
                }
            },
legend: {
   enabled: true,
    reversed: true
}
,
            yAxis: {
                title: {
                    text: null
                },
opposite: true
            },
           credits: {
                   enabled: false
                },
            plotOptions: {
                area: {
                    animation: false,
                    stacking: 'percent',
                    lineColor: '#ffffff',
                    lineWidth: 1,
                    marker: {
                        enabled:false
                    }
                }
            },
            series: [
{
name: '5.1.1',
data : [0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.2,1.4,1.6,1.9,1.6,1.9,2.0,3.1,4.3,3.6,4.4,5.4,4.6,3.0,6.4,4.7,6.8,7.3,6.9,7.6,10.6,9.5,8.9,11.9,10.2,12.3,12.3,11.9,11.9,11.1,9.5,13.1,10.8,13.0,18.3,13.8,18.1,18.8,12.9,12.6,17.4,16.4,13.1,16.8,17.8,19.0,16.4,15.7,20.5,18.9,17.2,20.9,20.0,18.1,19.5,19.5,19.2,19.4,22.9,20.3,25.2,23.1,22.6,21.3,26.2,26.6,20.2,24.2,24.1,21.2,27.0,23.7,23.6,27.8,25.3,24.8,25.2,23.6,29.1,25.2,26.9,31.7,25.9,28.1,22.6,25.6,28.0,27.8,33.4,28.1,27.6,29.7,33.6,29.5]
},
{
name: '5.1.0',
data : [68.3,68.6,69.7,68.5,67.6,66.2,68.1,73.0,68.0,61.6,68.2,69.2,68.3,68.5,69.8,66.0,61.3,64.2,62.9,66.1,64.8,61.2,63.4,59.7,62.6,63.2,63.8,56.9,61.1,62.5,62.1,60.8,57.7,61.8,57.6,56.7,59.0,59.5,58.7,57.0,56.9,53.0,53.9,53.2,51.4,55.0,56.4,50.0,53.7,53.9,58.4,57.1,53.7,51.6,55.9,53.9,52.0,51.8,55.1,49.0,51.5,53.1,54.2,48.8,47.0,48.4,46.0,49.6,46.3,41.7,50.3,43.8,43.1,45.1,49.7,47.9,46.2,49.8,43.9,47.8,42.3,45.7,49.3,48.7,47.7,43.1,42.8,43.1,39.9,40.3,44.5,42.6,43.8,39.1,39.9,41.8,40.1,43.6,45.7,43.5,37.6,41.2]
},
{
name: '5.0.1',
data : [9.2,11.7,9.3,9.8,8.6,10.4,12.1,10.1,9.5,9.9,9.7,9.8,9.8,11.1,10.4,8.0,10.2,9.9,11.7,6.7,10.5,11.0,12.8,11.5,11.0,9.9,8.9,11.1,9.2,9.7,8.0,9.5,9.5,9.0,8.6,9.1,7.1,6.9,10.8,9.5,9.9,11.3,11.1,12.4,12.1,11.4,8.9,10.6,11.8,9.8,9.0,9.8,11.7,7.6,8.7,10.8,8.8,9.6,8.4,7.9,8.7,7.3,8.3,11.3,8.8,14.3,10.8,8.7,9.9,14.4,9.2,13.2,10.0,9.1,11.2,8.2,10.1,8.1,8.9,8.7,12.4,8.2,7.6,8.1,9.7,10.1,10.0,8.2,8.7,8.4,8.7,8.9,9.8,11.3,8.8,10.3,9.1,8.7,7.6,8.8,9.0,9.1]
},
{
name: '5.0.0',
data : [1.1,0.7,0.9,1.5,1.0,2.0,0.2,0.5,1.7,0.7,0.9,0.5,0.5,1.0,0.0,0.8,1.0,1.2,0.5,0.5,1.3,0.0,0.6,1.0,0.5,1.0,0.4,1.3,0.4,0.4,2.2,0.7,1.7,0.5,0.6,1.4,0.5,0.4,1.1,1.3,0.4,0.2,0.0,0.6,0.6,1.3,1.3,1.5,0.2,0.7,0.7,1.1,0.9,0.6,0.9,1.5,0.5,0.4,1.4,1.5,1.2,0.9,0.7,0.9,1.1,0.4,0.2,1.7,1.0,1.4,0.5,1.3,1.8,1.6,1.0,1.3,1.2,0.2,1.1,1.2,1.3,0.7,1.4,1.2,0.4,1.0,0.5,1.7,1.5,0.2,1.4,0.8,2.4,0.8,0.5,1.5,1.7,1.8,0.4,1.1,0.2,0.6]
},
{
name: '4.X',
data : [18.9,17.1,18.3,17.9,18.6,18.9,18.3,14.4,18.7,23.3,19.0,17.7,18.2,16.3,16.1,20.2,22.1,19.2,19.8,19.6,17.8,20.7,16.9,20.4,18.1,17.7,18.2,21.6,16.6,17.0,17.4,14.4,18.2,16.2,19.8,19.3,19.2,20.3,17.1,16.2,18.5,20.9,15.0,17.6,16.5,13.1,18.2,24.7,15.2,17.8,16.2,14.2,14.3,19.9,17.1,15.5,17.5,18.2,16.2,19.6,17.3,17.9,15.6,17.6,22.2,15.9,18.3,17.7,15.3,18.5,15.9,18.7,17.3,15.7,16.6,17.2,18.1,19.8,17.3,16.4,20.0,16.4,15.0,15.9,16.2,20.7,16.2,20.3,20.3,18.9,17.4,15.6,18.2,21.4,20.7,17.5,14.1,16.3,17.4,15.8,17.6,18.5]
},
{
name: '3.X',
data : [2.5,1.9,1.8,2.3,4.2,2.4,1.2,2.1,1.0,3.1,0.5,0.9,1.5,1.3,1.7,1.9,1.2,2.0,0.7,1.6,1.0,4.2,0.0,2.6,1.0,1.0,1.7,1.6,2.0,0.9,1.4,2.7,2.7,0.2,1.2,1.6,2.3,1.9,2.9,3.0,3.7,1.5,1.7,2.5,1.2,0.4,2.2,0.5,1.7,1.4,2.6,1.1,1.5,1.3,0.9,2.6,0.8,1.1,1.8,1.0,1.4,2.6,1.8,1.9,1.7,1.6,1.7,2.0,2.2,0.9,1.5,1.7,1.6,1.9,1.2,1.3,0.2,0.9,1.8,2.2,0.4,1.2,1.4,1.2,0.8,1.4,1.5,1.5,2.6,0.6,2.1,3.9,3.4,1.7,2.1,1.0,1.7,1.5,1.3,1.1,1.9,1.1]
},
      ]
        });
    });
});
</script>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Extrapolation vs Speculation]]></title>
    <link href="http://david-smith.org/blog/2012/05/09/extrapolation-vs-speculation/"/>
    <updated>2012-05-09T20:00:00-04:00</updated>
    <id>http://david-smith.org/blog/2012/05/09/extrapolation-vs-speculation</id>
    <content type="html"><![CDATA[<p>It seems like a good half of what I read in the Apple related press contains, what they&#8217;d call on an earnings call, <em>forward looking statements</em>.  It is quite remarkable how each and every day one of the news sites finds some tidbit or rumor to write about.  I suppose it is to be expected since their page-view driven business model demands a constant stream of visitors.   Apple typically only has maybe 10 announcement days each year and so the remaining 355 days have to be filled with something.</p>

<p>Recently, however, I&#8217;ve started to draw a distinction between two distinct kinds of <em>forward looking statements</em>.  There are those that are extrapolations and then there is idle speculation.  I&#8217;ve started skipping over the later entirely and only reading things akin to the former.</p>

<p>I consider extrapolations to be those things that we might surmise based on a careful examination of Apple&#8217;s past actions.  They are formed by tracing a line between past actions and then using those to predict what might come next.  To make reasonable extrapolations you need to be well immersed in Apple&#8217;s history and concede that you may not be able to write bold, page-view grabbing headlines.  This is more the work of a skilled tracker stalking in the wild.  Picking up on all the little clues Apple leaves as it moves and combining them to predict their next move.</p>

<p>Speculation on the other hand is more the work of waving your hands and making wild guesses.  It is easy to burn through dozens of articles essentially fabricating ideas and then running with them.  Finding some random part in Vietnam and then building a whole story around it.  I just don&#8217;t find this type of &#8216;news&#8217; interesting anymore.  It is useful for my business as an app developer to have some sense of what might be coming, but in order for that to be of any use the information needs to have some basis in reality.</p>

<p>A few examples of things that I would consider extrapolation at this point would include:</p>

<ul>
<li>Apple will likely announce iOS 6 at WWDC.  It will include a variety of new features and be given to developers as a beta.</li>
<li>Apple will likely announce the next generation of iPhone this September (likely named the new iPhone) which will be a more visual departure from the current model.  This will launch with iOS 6.</li>
<li>Apple will likely announce the availability and release candidate builds of Mountain Lion at WWDC.  This will include mostly what we have seen before but potentially include any new features that correspond with iOS 6 announcements.</li>
<li>Apple will likely announce evolutionary improvements to their iPod line-up this September.</li>
<li>Apple will likely announce their next generations of laptop/desktop computers sometime this summer.  These will be based on the latest Intel architecture (Ivy Bridge). At some point these will include a Retina like display but the timing of that is entirely unknown.</li>
<li>Apple will likely announce their next version of the iPad next spring.</li>
</ul>


<p>These are conclusions drawn from looking at recent history and then looking for patterns or clues in the evidence. They may not all be 100% accurate but if they aren&#8217;t it will be because they signal a break in pattern rather than a unreliable source or faulty imagination.  When in doubt assume that Apple will do exactly what it did last year.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Patience]]></title>
    <link href="http://david-smith.org/blog/2012/05/09/patience/"/>
    <updated>2012-05-09T10:12:00-04:00</updated>
    <id>http://david-smith.org/blog/2012/05/09/patience</id>
    <content type="html"><![CDATA[<p>The nature of writing apps for sale in the App Store means that there are many things that you are simply not in control of.  You cede this control to Apple in exchange for access to their marketplace.  These things include direct access to your customers, the ability to make whatever software you like and control over the timeline of your releases.</p>

<p>As an app developer you can <em>prepare</em>, but you can never <em>plan</em>.</p>

<p>I truly believe the policies of the App Store, by and large, help me make more money.  They create an environment where millions of customers around the world gladly part with billions of dollars each year.  Apple does a good job of patrolling the store and keeping things safe for users.  They aren&#8217;t perfect, but they do a consistently great job.</p>

<p>I mention all this because the major update to <a href="http://itunes.apple.com/us/app/audiobooks-premium/id324596259?mt=8&amp;partnerId=30&amp;siteID=IzE7m699rYo-kZGOJCGdiJS7BwDyWZ7k6A">Audiobooks</a> that I was hoping to launch today has been delayed due to a need for &#8216;extended review&#8217; time.  The details of the delay are unclear but I expect it is a simple misunderstanding and all will be resolved soon.  This disappointment, however, is nevertheless difficult.  I&#8217;m excited to launch the software I&#8217;ve spent the last few months working on.  Every time I see a customer complain about something that I know is fixed and improved in the new version I go a little crazy.</p>

<p><strong>Patience</strong> is probably the most important attribute of a successful app developer.  Without it you&#8217;ll go mad.  In the 3.5 years I&#8217;ve had apps on the Store I&#8217;ve encountered almost every imaginable delay and hiccup.  At first I&#8217;d get all bent out of shape about them.  Now, as I&#8217;ve spent more time doing this, I see them as just the symptoms of the great system that makes my living.  Without them I don&#8217;t think I&#8217;d be able to have made a living at this for so long.</p>

<p>So I&#8217;ll just keep preparing for the launch.  Hoping to share the great new features and aesthetics I have ready—soon.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Universal iPhone Dark Mode]]></title>
    <link href="http://david-smith.org/blog/2012/04/19/poor-mans-iphone-dark-mode/"/>
    <updated>2012-04-19T12:02:00-04:00</updated>
    <id>http://david-smith.org/blog/2012/04/19/poor-mans-iphone-dark-mode</id>
    <content type="html"><![CDATA[<p>Many of my favorite reading apps (Kindle, iBooks, Pocket, Instapaper,…) include a dedicated <em>dark mode</em>.  This typically involves the app setting the background to black and the text to a light gray.  This works great for using your iPhone in the dark.  For me this is typically when I&#8217;m putting my young children to bed or reading at night.  The dark mode is easier on your eyes and means you don&#8217;t totally loose your night vision.</p>

<p>The challenge I&#8217;ve often run into is what to do for apps that don&#8217;t include a dedicated dark mode.  Things like checking email, twitter, RSS or using Safari.  The transition between a dark mode app and one of these apps is jarring.  I came up with a bit of a hack to get around this.  It isn&#8217;t perfect but generally speaking I&#8217;ve found it to be a great way to use my iPhone at night.</p>

<!--More-->


<ol>
<li>Open your Settings app.</li>
<li>Select <em>General</em> → <em>Accessibility</em> → <em>Triple-click Home</em>.</li>
<li>Enable <em>Toggle White on Black</em>.</li>
</ol>


<p><img src="http://david-smith.org/resources/darkmodesettings.png" height="480px"></p>

<p>Now whenever you want to use your iPhone in the dark simply triple tap your home button and the screen will invert.  This will look fine for text and plain backgrounds.  Photographs and other images will look awful but that is expected and you quickly get used to it.  Triple click again to return to normal mode.</p>

<p><img src="http://david-smith.org/resources/darkmodeexample2.png" height="480px">
<img src="http://david-smith.org/resources/darkmodeexample.png" height="480px"></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Space Shuttle Discovery comes to DC]]></title>
    <link href="http://david-smith.org/blog/2012/04/17/space-shuttle-discovery-comes-to-dc/"/>
    <updated>2012-04-17T12:32:00-04:00</updated>
    <id>http://david-smith.org/blog/2012/04/17/space-shuttle-discovery-comes-to-dc</id>
    <content type="html"><![CDATA[<p>The Space Shuttle Discovery arrived at its new home today.  It will be on display at the Air &amp; Space Museum (just a few miles from my house).  To get here NASA flew it to Dulles Airport, <a href="http://www.nasa.gov/topics/nasalife/features/shuttle_museum.html">carried by a modified Boeing-747</a>.  I was able to grab a few photographs of the landing from a nearby parking lot.</p>

<!-- More -->


<p><img src="http://david-smith.org/resources/shuttle1.jpg" alt="" />
<img src="http://david-smith.org/resources/shuttle3.jpg" alt="" />
<img src="http://david-smith.org/resources/shuttle2.jpg" alt="" />
<img src="http://david-smith.org/resources/shuttle4.jpg" alt="" /></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Cinch: An Amateur Photographer's Review]]></title>
    <link href="http://david-smith.org/blog/2012/04/14/cinch-an-amateur-photographers-review/"/>
    <updated>2012-04-14T11:00:00-04:00</updated>
    <id>http://david-smith.org/blog/2012/04/14/cinch-an-amateur-photographers-review</id>
    <content type="html"><![CDATA[<p>Let me start off by saying what this review is not.  I am not a professional photographer, while I&#8217;ve done some pro work in the past I primarily take pictures of my children and family these days.  This review is by and for the amateur photographer who uses an SLR to get good pictures but who isn&#8217;t doing so to support their living.</p>

<h3>Background</h3>

<p>The <a href="http://www.luma-labs.com/products/cinch">Cinch</a> is the latest project out of <a href="www.luma-labs.com">Luma Labs</a>, a boutique photography equipment manufacturer.  It is the brain child of <a href="http://twitter.com/duncan">Duncan Davidson</a> and <a href="http://twitter.com/gak_pdx">Greg Koenig</a>.  The Cinch is a camera strap added to their line-up after they were forced to pull their awesome Luma Loop after some ridiculous patent <a href="http://luma-labs.com/blogs/news/4540122-an-open-letter-to-our-customers-past-and-future">trolling</a>.  The Luma Loop was a free sliding sling style strap.  With the Cinch they needed to find another direction to innovate in and they did just that, with great effect.</p>

<!-- More -->


<p><img src="http://david-smith.org/resources/cinch.jpg"></p>

<h3>The Concept</h3>

<p>The Cinch is based around a deceptively simple idea.  They took a traditional camera strap and made two small changes.  First, they moved one of the mounting points from the side of the camera body and instead had it screw into the tripod mount of the camera.  Second, they added a one-hand operable mechanism for adjusting the strap length by around 8&#8221;.  These two adjustments combine in a surprisingly powerful way.</p>

<p>By moving the mounting point to the tripod mount the camera&#8217;s position when hanging shifts significantly.  Rather than the lens pointing outwards away from the body, instead the lens now nestles into your body.  This <strong>dramatically</strong> reduces the &#8216;bounce&#8217; of the camera while walking (or even running) with the camera.  I tried this with my longest (300mm) lens with the same result.  The camera just stays put, simple as that.</p>

<p>The mechanism for adjusting the length is very straight-forward, you simply pull the large (glove friendly) pull tab located along the front of the strap.  Pulling it towards the camera shortens the strap, pulling it away lengthens.  The 8&#8221; or so that this adjustment makes is just enough to switch the strap into 3 distinct &#8216;modes&#8217;:</p>

<ul>
<li><p><em>Travel:</em> Tighten the strap all the way down when not taking pictures.  You are free to run around after you kids with minimal bounce.  The camera is snug to your body and very comfortable.</p></li>
<li><p><em>Regular Shooting:</em> Loosen the strap all the way to provide enough freedom of movement to frame and shoot your pictures.  The movement of pulling up the camera to your eye with one hand and lengthening the strap with the other became second nature after a few days of use.</p></li>
<li><p><em>Stabilized Shooting:</em> Once the camera is up to your eye pull down on the pull tab to cinch the camera to your body.  This really helps to reduce vibration and generally helps you push your camera especially in lower light situations.</p></li>
</ul>


<h3>In Use</h3>

<p>I had my wife snap a picture of me during a recent adventure with my son into the woods.  This hopefully gives a good sense of how the camera lies when running around.</p>

<p><img src="http://david-smith.org/resources/cinch2.jpg"></p>

<h3>Note on Sizing</h3>

<p>The Cinch comes in three sizes Small, Regular, and Big.  Their <a href="http://www.luma-labs.com/products/cinch">website</a> provides a rough guide for how big you should get it.  I can&#8217;t emphasize strongly enough how important it is to get the right size.  The Cinch is designed to have a snug fit during use.  Having a strap too large would negate the benefits while moving and too small just wouldn&#8217;t be comfortable.</p>

<p>I wear an American Apparel medium t-shirt.  I started off with the Regular size but found this to be a bit too big.  So I then got the Small and it worked perfectly.</p>

<h3>Bottom Line</h3>

<p>I highly recommend the <a href="http://www.luma-labs.com/products/cinch">Cinch</a>.  It retails for $70.  Considering the cost of the SLR it is strapped to this is a relatively minor upgrade that does a lot to increase the comfort in wearing and security of the camera.</p>

<p>My experience with Luma Labs itself was also excellent.  They were prompt and professional in all my interactions with them and were always very helpful.</p>

<h3>Giveaway</h3>

<p>Like I mentioned above I tried the Regular Cinch first then ultimately decided that the Small was a better fit for my frame.  So I now have a Regular sitting around in my camera bag.  I figure this could find a much better home with one of my readers.  <em>The Giveaway has ended Congratulations to the winner, Richard M.</em></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[InstaBackup: Backup all your Instagram Photos]]></title>
    <link href="http://david-smith.org/blog/2012/04/09/instabackup-get-your-images-out-of-instagram/"/>
    <updated>2012-04-09T17:11:00-04:00</updated>
    <id>http://david-smith.org/blog/2012/04/09/instabackup-get-your-images-out-of-instagram</id>
    <content type="html"><![CDATA[<p>With today&#8217;s <a href="http://blog.instagram.com/post/20785013897/instagram-facebook">news</a> that Instagram was bought by Facebook it seems a lot of people (myself included) are concerned about what the future holds for this beloved webservice.</p>

<p>My personal future with Instagram is unclear, but whether I stay with them or not I wanted to get a backup of my images out of Instagram&#8217;s servers and safely onto my Mac.</p>

<p>So I whipped up a simple Mac app to backup your pictures.  I provide it here free for your use.  Simply login with your Instagram credentials and it will pull down all the images you have taken with Instagram.</p>

<!-- More -->


<p><img src="http://david-smith.org/resources/instabackup.png" width="400px"></p>

<center><a href="http://itunes.apple.com/us/app/instabackup/id518000330?mt=12&partnerId=30&siteID=IzE7m699rYo-kZGOJCGdiJS7BwDyWZ7k6A"><img style="border:none;padding:0px;margin:5px" src="http://david-smith.org/resources/macappstorebadge.png"></a></center>




<br/><center>Compatible with Mac OS X 10.7 Lion & 10.6 Snow Leopard</center><br/>


<p><em>Mountain Lion users need to authenticate with Chrome or Firefox, InstaBackup is not compatible with Safari on Mountain Lion</em></p>

<p>If you hit any problems or have any questions <a href="http://twitter.com/_DavidSmith">@Reply me on Twitter</a>.</p>

<p>If you cannot use the Mac App Store you may still get the app here:  <a href="http://david-smith.org/resources/InstaBackup.dmg">InstaBackup.dmg</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[A truly post-PC experience.]]></title>
    <link href="http://david-smith.org/blog/2012/03/15/a-truly-post-pc-experience/"/>
    <updated>2012-03-15T11:43:00-04:00</updated>
    <id>http://david-smith.org/blog/2012/03/15/a-truly-post-pc-experience</id>
    <content type="html"><![CDATA[<p>During the iPad 3 announcement Apple spent a lot of time emphasizing that they view the iPad as the vanguard of a <em>post-PC era</em>.  That term, <em>post-PC</em>, gets bantered around in the press a lot but I&#8217;m not sure if many journalists really think about what would make something <strong>post</strong>-PC.  While reading the <a href="http://www.loopinsight.com/2012/03/14/review-ipad-third-generation/">various</a> <a href="http://www.macworld.com/article/1165849/review_the_third_generation_ipad.html">reviews</a> <a href="http://daringfireball.net/2012/03/ipad_3">of</a> the iPad released last night I was struck by the one feature of the new iPad that will make it the first computer capable of delivering a truly post-PC experience, <strong>LTE</strong>.</p>

<p>To say something is <strong>post</strong>-[something] requires that we have eliminated something in gaining something new. In this case it is about removing anachronisms and the dead weight carried by old technology.  The iPad could be counted on this score in a variety of ways.  It removes the need for a keyboard, mouse, external display.  It provides almost no physical connections and instead provides iCloud to move and manage your data.  It simplifies the process of discovering great software and removes the hassle of managing your device&#8217;s integrity with sandboxing.</p>

<p>At first I thought the addition of high-speed LTE cellular data for the iPad was just a feature bump, a <a href="http://daringfireball.net/2012/03/ipad_3">&#8216;clarification&#8217;</a> to the existing feature set of the iPad.  Something added to give tech bloggers something to write about, but in reality it would have little impact on how the device is used.</p>

<p>In Jason Snell&#8217;s <a href="http://www.macworld.com/article/1165849/review_the_third_generation_ipad.html">review</a> of the iPad 3 he includes a <a href="http://images.macworld.com/images/article/2012/03/networkingspeedchart-275150.png">chart</a> showing that transfer speeds over LTE are comparable to what most people would expect over home WiFi.  That simple observation I think fundamentally changes how people can interact with the world and it is the iPad that will lead the way.</p>

<p>The remarkable thing about adding LTE to the iPad is that now Apple has removed the need to even have internet service in your home to have a fully capable digital life.  Someone who is seeking to <em>get online</em> now simply needs to walk into an Apple Store, spend $629 and signup for a $20/month data plan and they are done.  <strong>That&#8217;s it</strong>.   Your entire digital life is now contained a single box.</p>

<p>The barrier to having a rich, meaningful and connected digital life is now around $869 for your first year, and then $240/year thereafter.  That is substantially less than almost any other in home setup.  Apple has created a device that can finally offer a truly end-to-end integrated experience.  With software, hardware and now broadband networking all without ever leaving your iPad screen.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[iOS 5.1 Upgrade Stats]]></title>
    <link href="http://david-smith.org/blog/2012/03/10/ios-5-dot-1-upgrade-stats/"/>
    <updated>2012-03-10T12:23:00-05:00</updated>
    <id>http://david-smith.org/blog/2012/03/10/ios-5-dot-1-upgrade-stats</id>
    <content type="html"><![CDATA[<center><h4 style="color:#F22">This post is no longer active, the latest data (including iOS 5.1.1) is available <a style="color:#22F;text-decoration:underline;" href="http://david-smith.org/blog/2012/05/11/ios-5-dot-1-1-upgrade-stats/">here</a>.</h4></center>


<hr />

<p>On November 10, 2011 Apple released the iOS 5.0.1 <a href="http://david-smith.org/blog/2011/11/14/ios-5-over-the-air-update-rate/">update</a>. This was the first time Apple made use of an Over-the-Air (OTA) update for iOS.  On March 7, Apple released their second OTA, <a href="http://support.apple.com/kb/DL1504?viewlocale=en_US&amp;locale=en_US">iOS 5.1</a>.  This includes incremental updates to iOS along with Siri support for Japanese.  OTA updates are significant for developers because they dramatically increase the pace at which users update their devices.  This allows us to more quickly drop support for old versions and more rapidly embrace the new features provided by the latest OS.</p>

<p>This post will present data showing how quickly users are updating to iOS 5.1.  The data below is taken from the user base of my <a href="http://itunes.apple.com/us/app/audiobooks-premium/id324596259?mt=8&amp;partnerId=30&amp;siteID=IzE7m699rYo">Audiobooks</a> apps. Audiobooks is universal so provides data for both iPhone and iPad.  The free and paid versions of <em>Audiobooks</em> together get around 100k weekly downloads so provides a statistically meaningful data set.  This data reflects the active unique users each day across all devices.</p>

<!--More-->


<blockquote><p>Bookmark this page or <a href="http://twitter.com/_DavidSmith">follow</a> me on Twitter if you are curious to see the data progress over time.  I&#8217;ll be updating this page periodically until the numbers seem to stabilize.</p></blockquote>

<p><a name="april15"></a></p>

<h4>Sunday, April 15, 2012</h4>

<p>Upgrades appear to have leveled off into the slow trickle phase.  After the initial surge of upgrades (both OTA and otherwise) user adoption has transitioned into a more measured pace.  Overall there is still a clear movement towards the newer OS variants.  82% of all users are now running some flavor of iOS 5.x.</p>

<p><a href="http://david-smith.org/resources/all041512.png"><img src="http://david-smith.org/resources/all041512.png" alt="" /></a></p>

<p>As the overall numbers don&#8217;t show a lot of movement I was curious which platforms were &#8216;pulling&#8217; down on the update pace.  I ran the numbers for April 15 splitting the OS data between iPhone, iPod touch and iPad devices.  This data showed a clear pattern.  The iPhone and iPad show nearly identical stats with roughly 85% of users on iOS 5.x.  The iPod touch is the laggard of the group with only 66% of users on iOS 5.x.  This only has a limited effect on the overall numbers because the iPod touch represents only 14% of my user base (iPhone is 49%, iPad is 37%).</p>

<p>The numbers have finally hit the point where I am now planning to drop support for iOS 4 in my next major updates.</p>

<p><a href="http://david-smith.org/resources/platforms041512.png"><img src="http://david-smith.org/resources/platforms041512.png" alt="" /></a></p>

<p><a name="march21"></a></p>

<h4>Wednesday, March 21, 2012</h4>

<p>The iPad 3 launched on Friday, March 16. So I was expecting a huge swell in 5.1 adoption given all the new devices, from what I see in the data it looks more like a minor bump in adoption dwarfed by the overall rate.</p>

<p>The current adoption rate hits a significant milestone.  It took iOS just <strong>15 days</strong> to get the same percentage of users on the <strong>latest</strong> OS version as are currently on any <strong>single</strong> version of Android.</p>

<p>According to Google&#8217;s <a href="http://developer.android.com/resources/dashboard/platform-versions.html">Platform Versions</a> site the most widely used Android version is API Level 10 Gingerbread which currently has 61.5% of users.  This was released in mid-2011.</p>

<p><a href="http://david-smith.org/resources/all032112.png"><img src="http://david-smith.org/resources/all032112.png" alt="" /></a></p>

<p>Looking just at the OTA eligible users we again see a promising future for iOS developers. Nearly 80% of users are on the latest version within 15 days.</p>

<p><a href="http://david-smith.org/resources/ota032112.png"><img src="http://david-smith.org/resources/ota032112.png" alt="" /></a></p>

<p><a name="march12"></a></p>

<h4>Monday, March 12, 2012</h4>

<p>The first checkpoint that I thought interesting to note was when the upgrade rate for OTA update eligible users (i.e. users running iOS 5.0 or greater) hit around 50%.  This milestone occurred on March 12, or 5 days after the update was released.  It hits this point a few hours later than 5.0.1 <a href="http://david-smith.org/blog/2011/11/14/ios-5-over-the-air-update-rate/">did</a>, but the general pace seems pretty consistent between the two releases.</p>

<p>If that pace keeps up (very likely given the flood of 5.1 iPads arriving on Friday) we should see a near total adoption of 5.1 for OTA update eligible users sometime in the first week or two of April.</p>

<p><a href="http://david-smith.org/resources/5dot003122012.png"><img src="http://david-smith.org/resources/5dot003122012.png" alt="" /></a>
<a href="http://david-smith.org/resources/allversions03122012.png"><img src="http://david-smith.org/resources/allversions03122012.png" alt="" /></a></p>

<h4>Regarding Android</h4>

<p>It would be easy to point a finger at Android and remark on how different this picture (38% of users running the latest iOS version in 5 days) is to the fragmentation we see on Android devices.  That isn&#8217;t really constructive since the amazing upgrade pace we see above is a result of users being given the opportunity to upgrade and then acting on it.  Most users of Android simply don&#8217;t have that opportunity.  While that doesn&#8217;t make things any better for the poor developers who try to support the various flavors of Android it isn&#8217;t really an apples-to-apples comparison.  However, it does reinforce my near complete focus on developing for Apple&#8217;s platforms.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Techniques for Shrinking App Size]]></title>
    <link href="http://david-smith.org/blog/2012/03/05/techniques-for-shrinking-app-bundle-size/"/>
    <updated>2012-03-05T09:10:00-05:00</updated>
    <id>http://david-smith.org/blog/2012/03/05/techniques-for-shrinking-app-bundle-size</id>
    <content type="html"><![CDATA[<p>This Wednesday Apple geeks around the world anxiously await the release of the next generation of iPad.  This is widely expected to include a <a href="http://www.apple.com/iphone/features/retina-display.html">Retina</a> display increasing the resolution of the iPad to a whopping 2048x1536. While I can&#8217;t wait to use an iPad with a screen this large, it does present a <a href="http://www.macstories.net/stories/retina-universal/">challenge</a> to developers who want to keep their app bundles below the 20MB limit for 3G download.  Here are a few techniques that developers can use to keep their bundles lean.</p>

<!--More-->


<h4>Remove Unused Code</h4>

<p><img src="http://david-smith.org/resources/frameworks.png" alt="" /></p>

<p>The first candidate for trimming some space is to find any unused code in your project.  The most likely candidate for such waste would be any 3rd party libraries that are being included with your project but aren&#8217;t actively being used.  Furthermore, be sure that you aren&#8217;t including the entire contents of a library when you only need a few files.</p>

<h4>Remove Unused Resources</h4>

<p><img src="http://david-smith.org/resources/slender.png" alt="" /></p>

<p>Be sure that you aren&#8217;t including any resources that aren&#8217;t used in your current project.  I often find that my app will include images, icons, or sounds from past versions that are no longer being referenced.  Auditing your project for these is often tricky so I can recommend a great tool called <a href="http://itunes.apple.com/us/app/slender/id493656257?mt=12&amp;partnerId=30&amp;siteID=IzE7m699rYo">Slender</a> that eliminates some of the guess work by analyzing your project for unused files and helping you remove them.</p>

<h4>Load Resources On-Demand</h4>

<p>If your project includes resources like tutorial videos or graphics that are expected to be rarely needed,  consider moving these onto a web-server somewhere and have your application load them on-demand.  Amazon&#8217;s <a href="http://aws.amazon.com/s3/">S3</a> service or a small VPS on <a href="http://www.linode.com/?r=012b7f6cce756f893c5fc1a4ffe35cf494a8eb29">Linode</a> will typically do the trick quite well.  Discretion is needed with this technique since you want to avoid frustrating the user with a massive download after installation.  Personally I find this helpful for the tutorial videos I include in <a href="http://itunes.apple.com/us/app/my-recipe-book-your-recipes/id375811859?mt=8&amp;partnerId=30&amp;siteID=IzE7m699rYo">My Recipe Book</a>, these are only referenced in secondary screens in the app and are not part of the user&#8217;s initial experience.</p>

<h4>Use Patterned Images</h4>

<p><img src="http://david-smith.org/resources/patterns.png" alt="" /></p>

<p><code>UIColor</code> includes a fantastic <a href="https://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIColor_Class/Reference/Reference.html">feature</a> for reducing the need to include large textured images within your project.  An example of this is shown above where you want to give your app a stylized background, though this technique applies equally well to smaller areas where you want to add texture to a UI control.  Simply set the background color of the desired view to a patterned color like this:</p>

<pre><code>view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"pattern.png"]];
</code></pre>

<p>The view now will have a textured background that scales and adjusts with the size of the view.  A good source for textures that tile well is the <a href="http://subtlepatterns.com">Subtle Patterns</a> project.</p>

<h4>Use Stretched Images</h4>

<p><img src="http://david-smith.org/resources/strechedimage.png" alt="" /></p>

<p><code>UIImage</code> includes a performant method of creating images that scale dynamically with size.  The image is setup so that the middle section stretches keeping the edges unchanged.  This is often used for things like buttons where the corners and sides are styled but the body of the button is plain.  I also works well for creating an &#8216;etched&#8217; effect in table views (like in the App Store example above).  Here rather than creating a 320x48 image that represents the cell background you create a tiny <strong>1x3</strong> image with the desired top, body and bottom colors desired.  This is then assigned as your <code>backgroundView</code> resulting in the effect shown.</p>

<pre><code>UIImage* template  = [UIImage imageName:@"template.png"];
UIImage* stretched = [template resizableImageWithCapInsets:UIEdgeInsetsMake(1, 0, 1, 0)]
cell.backgroundView = [[UIImageView alloc] initWithImage:stretched];
</code></pre>

<h4>Draw UI Elements in Quartz</h4>

<p>For basic, geometric UI elements you can often avoid using a PNG image for achieving the design goal.  Rather than pre-generating the elements in Photoshop and then bundling them with the app, simply render the desired styling at runtime.  This can be as simple as creating a square button style:</p>

<p><img src="http://david-smith.org/resources/squarebutton.png" alt="" /></p>

<pre><code>UIButton* squareButton = [UIButton buttonWithType:UIButtonTypeCustom];
[squareButton.layer setBorderColor: [[UIColor blackColor] CGColor]];
[squareButton.layer setBorderWidth: 1.0];
[squareButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
squareButton.backgroundColor = [UIColor whiteColor];
</code></pre>

<p>Or, complicated like the <a href="http://code.google.com/p/iphonegradientbuttons/">Gradient Buttons</a> project by Jeff LaMarche.  The goal here is to render what you need in code, rather than bundling dozens of tiny background views with your app.</p>

<p><img src="http://david-smith.org/resources/styledbutton.png" alt="" /></p>

<h3>Conclusions</h3>

<p>Judicious use of these techniques can dramatically reduce the size of your application bundle, helping you squeeze under the download limit.  However, be careful in going overboard and trying to squeeze things too much.  You should never let your desire you get under the cap mean you abandon good design taste or user experience.</p>

<h4>Links (Updated)</h4>

<ul>
<li><a href="https://twitter.com/tonymillion">Tony Million</a> did a <a href="http://www.tonymillion.com/post/18844582999/how-to-really-reduce-the-size-of-your-ios-app">great follow-up</a> discussing how to reduce the size of image resources by decreasing their bit depth.</li>
</ul>


<p>If you have any other techniques that you&#8217;d like included in this list please let me know on Twitter, I&#8217;m <a href="http://twitter.com/_DavidSmith">@_DavidSmith</a>.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Caring where things come from]]></title>
    <link href="http://david-smith.org/blog/2012/03/03/caring-where-things-come-from/"/>
    <updated>2012-03-03T14:52:00-05:00</updated>
    <id>http://david-smith.org/blog/2012/03/03/caring-where-things-come-from</id>
    <content type="html"><![CDATA[<p>This last week <a href="http://readability.com">Readability</a> launched their new iOS app.  This is an application with a complicated <a href="http://david-smith.org/blog/2011/11/16/a-punch-to-the-gut-always-hurts/">history</a> for me.  Its launch prompted some unexpected mixed feelings.  It is a well crafted, thoughtfully designed application clearly created with care by its developers, but I found that I just couldn&#8217;t grow to like it.  Something kept pulling me away, a nagging feeling that it just didn&#8217;t fit.</p>

<p>After thinking about it for a few days I think that feeling originates from a concern not only with <em>what</em> I use but also <em>who</em> makes it.  This concern applies to more things in my life than just apps.  I prefer produce from a CSA, meat from a local farmer and coffee beans from a small roaster. I have paid memberships to smaller news sites like <a href="http://daringfireball.net">Daring Fireball</a> and <a href="http://shawnblanc.net">Shawn Blanc</a>, rather than subscribing to the New York Times.  In the world of apps I prefer to play games from small indie game studios like <a href="http://www.imangistudios.com/">Imangi</a> or <a href="http://bigbucketsoftware.com/theincident/">Big Bucket</a>.</p>

<p>I imagine this impulse comes from the way I make my living.  I craft and sell apps in the App Store, relying on the collective good-will of others to pay for my &#8216;wares.  This isn&#8217;t some hipster-like aversion to the mainstream; I just prefer using my money to support <em>people</em> rather than <em>companies</em> wherever I can.</p>

<p>So after taking Readability for a quick spin and admiring the things it does well, it is no longer on my iPhone.  Instead, <a href="http://instapaper.com">Instapaper</a> continues in its daily role as my offline reader, a truly fine product from a <a href="http://marco.org">source</a> I&#8217;m proud to support.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[More iOS Version Stats]]></title>
    <link href="http://david-smith.org/blog/2012/02/17/more-ios-version-stats/"/>
    <updated>2012-02-17T11:56:00-05:00</updated>
    <id>http://david-smith.org/blog/2012/02/17/more-ios-version-stats</id>
    <content type="html"><![CDATA[<p>I got a lot of positive feedback to my recent <a href="http://david-smith.org/blog/2012/02/15/ipad-os-version-stats/">article</a> about iOS version statistics.  I thought I&#8217;d go a step farther and expand the results to include <a href="http://itunes.apple.com/us/app/audiobooks-premium/id324596259?mt=8&amp;partnerId=30&amp;siteID=IzE7m699rYo">Audiobooks</a>, in addition to <a href="http://itunes.apple.com/us/app/my-recipe-book-your-recipes/id375811859?mt=8&amp;partnerId=30&amp;siteID=IzE7m699rYo">My Recipe Book</a>.  Audiobooks provides data for both iPhone and iPad.  Furthermore, the <a href="http://itunes.apple.com/us/app/audiobooks/id311507490?mt=8&amp;partnerId=30&amp;siteID=IzE7m699rYo">free</a> version of <em>Audiobooks</em> has around 100k weekly downloads so provides a much wider sample set.  The data below represents the last week of usage.</p>

<!--More-->


<p><img src="http://david-smith.org/resources/greaterthaniosversion.png" alt="" /></p>

<p>Based on this data it looks safe to drop support for 3.x.  This would impact no more than 2% of users on the iPhone and 1% on the iPad.</p>

<p>Dropping support for 4.x is more controversial.  Based on my data it looks like this would impact at between 17-25% of iPad users and 25% of iPhone users.</p>

<p>My data has a much larger proportion on 4.x than the data recently <a href="https://twitter.com/#!/marcoarment/status/168155309569875969">shared</a> by Marco Arment, who is seeing greater than 90% on 5.0+ in <a href="http://itunes.apple.com/us/app/instapaper/id288545208?mt=8&amp;partnerId=30&amp;siteID=IzE7m699rYo">Instapaper</a>.  While we could speculate about reasons for the difference in our two data sets, the bottom line is that it looks like a meaningful proportion of my users are still on 4.x.</p>

<p>The current #1 paid app in the App Store, <a href="http://itunes.apple.com/us/app/clear/id493136154?mt=8&amp;partnerId=30&amp;siteID=IzE7m699rYo">Clear</a>, only runs on iOS 5 so clearly supporting 4.x isn&#8217;t necessary for success in the store.</p>

<p>Looking at Apple&#8217;s own apps doesn&#8217;t provide clarity either.</p>

<ul>
<li><a href="http://itunes.apple.com/us/app/itunes-u/id490217893?mt=8&amp;partnerId=30&amp;siteID=IzE7m699rYo">iTunes U</a>, <a href="http://itunes.apple.com/us/app/airport-utility/id427276530?mt=8&amp;partnerId=30&amp;siteID=IzE7m699rYo">AirPort Utility</a>, <a href="http://itunes.apple.com/us/app/keynote/id361285480?mt=8&amp;partnerId=30&amp;siteID=IzE7m699rYo">Keynote</a>, <a href="http://itunes.apple.com/us/app/pages/id361309726?mt=8&amp;partnerId=30&amp;siteID=IzE7m699rYo">Pages</a>, and <a href="http://itunes.apple.com/us/app/numbers/id361304891?mt=8&amp;partnerId=30&amp;siteID=IzE7m699rYo">Numbers</a> require 5.0+</li>
<li><a href="http://itunes.apple.com/us/app/itunes-movie-trailers/id471966214?mt=8&amp;partnerId=30&amp;siteID=IzE7m699rYo">iTunes Movie Trailers</a> and <a href="http://itunes.apple.com/us/app/garageband/id408709785?mt=8&amp;partnerId=30&amp;siteID=IzE7m699rYo">GarageBand</a> require 4.3+</li>
<li><a href="http://itunes.apple.com/us/app/apple-store/id375380948?mt=8&amp;partnerId=30&amp;siteID=IzE7m699rYo">Apple Store</a> and <a href="http://itunes.apple.com/us/app/ibooks/id364709193?mt=8&amp;partnerId=30&amp;siteID=IzE7m699rYo">iBooks</a> require 4.2+</li>
<li><a href="http://itunes.apple.com/us/app/remote/id284417350?mt=8&amp;partnerId=30&amp;siteID=IzE7m699rYo">Remote</a> requires 3.1.2+</li>
</ul>


<p>Apple typically supports only the most recent iOS version when releasing a new app, then gradually bumps the requirements for existing apps.  It looks like Apple&#8217;s most widely installed apps (iBooks and Apple Store) are still on 4.2.  My gut says that 4.2 a good minimum for right now, with 4.3 as an aggressive alternative.  That provides coverage for the vast majority of users and allows the developer to take advantage of most of the new affordances recently introduced.</p>

<p>For <em>new</em> apps 5.0 seems like a large enough audience to be safe.  I hope to jump to iOS 5 for <em>existing</em> apps this summer but will only do that when I see the proportion of neglected users fall below ~5%.  Developers should collect their own data for their apps and plan accordingly.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Mountain Lion: Developer Reactions]]></title>
    <link href="http://david-smith.org/blog/2012/02/16/mountain-lion-developer-reactions/"/>
    <updated>2012-02-16T12:31:00-05:00</updated>
    <id>http://david-smith.org/blog/2012/02/16/mountain-lion-developer-reactions</id>
    <content type="html"><![CDATA[<p>This morning Apple surprised the developer community with the announcement and developer preview release of the next version of OS X, <a href="http://www.apple.com/macosx/mountain-lion/">Mountain Lion</a>.  This OS will bring a large number of iOS-like features to the Mac and generally create more <em>customer experience</em> consistency between the two platforms.  Here are my initial reactions to what this announcements means for developers:</p>

<!--More-->


<p><img src="http://david-smith.org/resources/mountainlion.png" alt="" /></p>

<ul>
<li>Apple is crushing everyone else in terms of mindshare with developers of desktop apps.  It would be unheard of for Microsoft to get onto a yearly release cycle with Windows.  By being so aggressive with pushing out new features and demonstrating such a commitment to the platform it reassures me that I&#8217;m in the right line of work.</li>
<li>Apple is doing everything they can to push users onto the latest OS.  While I don&#8217;t think pricing has been announced it wouldn&#8217;t surprise me if ML was a free upgrade (just like on iOS). You can even see this with today&#8217;s release of <a href="http://www.apple.com/macosx/mountain-lion/messages-beta/">Messages Beta</a>, which only runs on the absolute latest Lion update (10.7.3).  Apple is pulling the bulk of customers forward, which makes developers&#8217; lives so much easier.</li>
<li>Apple is seeking to leverage the size and skill of the iOS developer community to propel Mac OS.  All their apps are starting to take on a look and feel familiar to  iOS developers. Furthermore, it seems like system features are starting to debut in iOS and then are added to Mac OS.  This means there is a large cadre of developers already familiar with these tools and frameworks who can start using them right away.</li>
<li>As the two platforms (iOS and Mac OS) grow more and more alike it has started to get me wondering if we will see the two unified in OS X 11.  That is wild speculation at this point, but it seems increasingly likely that the two platforms are on a collision course.</li>
<li><a href="http://www.apple.com/macosx/mountain-lion/security.html">GateKeeper</a> is a big step forward in terms of building user trust and helping push Macs into the mainstream.  I can see this feature as a big win for developers because it should help to make users more confident that installing software is safe and reliable.  While a few developers of specialized tools might get grumpy about it.  However, for most developers anything that helps make users more trusting of 3rd party software is a good thing.</li>
</ul>


<p><img src="http://david-smith.org/resources/gatekeeper.jpg" alt="" /></p>

<blockquote><p>I also discussed this on today&#8217;s episode of <a href="http://developingperspective.com/2012/02/16/35-iconfactory/">Developing Perspective</a>.</p></blockquote>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[iPad OS Version Stats]]></title>
    <link href="http://david-smith.org/blog/2012/02/15/ipad-os-version-stats/"/>
    <updated>2012-02-15T15:11:00-05:00</updated>
    <id>http://david-smith.org/blog/2012/02/15/ipad-os-version-stats</id>
    <content type="html"><![CDATA[<p>The <a href="http://mattgemmell.com/2011/12/05/latest-version/">question</a> of when to drop support for older operating systems is always a bit <a href="http://david-smith.org/blog/2011/12/06/my-ios-version-strategy/">tricky</a>.  An app creator wants to balance the dual goals of customer and developer happiness.  Support for older devices can serve as an anchor to development holding back adoption of new features or capabilities.</p>

<p>I&#8217;m starting work on a major upgrade to <a href="http://itunes.apple.com/us/app/my-recipe-book-your-recipes/id375811859?mt=8&amp;partnerId=30&amp;siteID=IzE7m699rYo">My Recipe Book</a>, my iPad app for organizing and managing your recipe collection.  As part of my planning process I set out to determine what OS version I could safely limit myself to.  <em>My Recipe Book</em> reports some basic analytics so I pulled them into Excel and run the numbers.</p>

<!--More-->


<p><img src="http://david-smith.org/resources/ipadversionhistory.png" alt="" /></p>

<p>As you can see around 88% of the users of <em>My Recipe Book</em> are running at least iOS 5 and 99% of users are running at least 4.2.  I&#8217;ll be dropping support for 3.2 in as part of this update.  This will allow me to restructure and improve the quality of much of my code, especially by the incorporation of blocks.  I expect to drop support for iOS 4.x soon, probably early this summer as more of the remaining 12% upgrade.</p>

<p>Perhaps the most striking thing about that chart is how quickly 5.0.1 was adopted.  The over-the-air update process introduced in iOS 5 seems to really push user adoption.  Almost all users (98%) who could use over-the-air updates have done so in the 3 months since the update was released.  This bodes extremely well for developers in the future when iOS 6 may be adopted at a similar rate.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[HashContacts: an iOS Address Book Wrapper]]></title>
    <link href="http://david-smith.org/blog/2012/02/15/hashcontacts-ios-address-book-wrapper/"/>
    <updated>2012-02-15T12:59:00-05:00</updated>
    <id>http://david-smith.org/blog/2012/02/15/hashcontacts-ios-address-book-wrapper</id>
    <content type="html"><![CDATA[<p>The recent <a href="http://thenextweb.com/insider/2012/02/15/what-ios-apps-are-grabbing-your-data-why-they-do-it-and-what-should-be-done/">controversy</a> regarding address book data in iOS got me thinking about how difficult it is for developers to take reasonable steps to protect user data.  If it posed a significant developmental challenge then it would at least be understandable, though still <em>inexcusable</em>, for app makers to ignore best-practices.</p>

<!--More-->


<p>It turns out, however, that it is <em>trivially</em> easy to wrap the Apple provided Address Book frameworks in a way that safe guards the data by:</p>

<ol>
<li>Asking for user permission before opening the address book</li>
<li>Then <a href="http://mattgemmell.com/2012/02/11/hashing-for-privacy-in-social-apps/">hashing</a> the desired data so that it is kept private.</li>
</ol>


<p>After only 3 hours of effort I wrote a class (available in <a href="https://github.com/crossforward/HashedContacts">github</a>) that provides both of these functions in an easily dropped-in fashion.</p>

<p>Any developer that does not take <em>at least</em> these two trivial steps to protect their customers&#8217; private data is being willfully negligent and should be ashamed.</p>

<p><img src="http://david-smith.org/resources/alert_example.png" alt="" /></p>

<p><a href="https://github.com/crossforward/HashedContacts"><strong>Github Source Code</strong></a> (MIT Licensed)</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Unexpected Parenting Essentials]]></title>
    <link href="http://david-smith.org/blog/2012/02/11/unexpected-parenting-essentials/"/>
    <updated>2012-02-11T16:04:00-05:00</updated>
    <id>http://david-smith.org/blog/2012/02/11/unexpected-parenting-essentials</id>
    <content type="html"><![CDATA[<p>I have a number of friends who are having their first child in the near future.  This got me thinking about the things I have found useful in parenting my own two children that no parenting book, blog or TV show ever mentioned.  These are things that have helped make raising young children just that little bit easier.</p>

<!-- More -->


<h3>Travel Mug</h3>

<p>I remember reading some parenting guide my Pediatrician gave me that made it very clear that drinking hot beverages while around my child was extremely dangerous and strictly forbidden.  The concern here is that something will cause the drink to spill, potentially scalding your child.  That is an entirely reasonable thing to avoid, but taking away a new parent&#8217;s coffee is low blow.  Our solution was to get a self sealing, spill-proof travel mug.  These eliminate the risk of accidental spills and let you enjoy your preferred hot beverage (ideally coffee) while around your children.</p>

<p>This has also come with the unintended benefit of enjoying our drinks when they are actually <em>hot</em>.  Prior to this the common pattern was to make a cup of tea or coffee, then run around after my kids and then discover it again a few hours later, stone cold.</p>

<p>I recommend this <a href="http://amzn.to/A4HUdK">Contigo Auto Seal</a> travel mug.</p>

<h3>Earplugs</h3>

<p>Young children, babies especially, are loud.  They also have a tendency to not sleep at times when you desperately need some rest yourself.  With our oldest this meant that my wife or I would be miserable, lying awake at night while the other parent was soothing, changing or feeding him.  Eventually we saw the foolishness in us both being awake at any one time so sought out a solution.  The result was to find the best earplugs that we could and whenever one of us was &#8216;off duty&#8217; we put them in and get some much needed sleep.  The brand we settled on (<a href="http://amzn.to/zZ7dIN">HEAROS Xtreme protection</a>) provides enough protection from noise that we can sleep but not <em>so much</em> that we can&#8217;t be roused if needed.</p>

<h3>Extra long headphones</h3>

<p>With an infant our evenings are always filled with before-bed feedings, &#8216;tanking&#8217; up our daughter in the hopes she sleeps longer through the night.  This is also the time that we used to enjoy sitting together and watching our favorite shows.  The challenge we found is that our daughter doesn&#8217;t settle well if there is noise around her so at first we just thought we&#8217;d have to give up on this.  Eventually we worked out another method.  I got an extra long headphone cable and hooked it up to my TV system.  Now we can sit comfortably on our couch, put in ear buds to listen to the show, all while not disturbing our daughter as she eats.</p>

<p>The exact specs of this setup will vary with your own home TV system, but for me it was an extra long RCA-3.5mm cable like <a href="http://amzn.to/zfGyhP">this</a>, connected to a female-to-female adapter like <a href="http://amzn.to/x25eG0">this</a>.  The goal is just to connect to whatever Audio-Out is available and then run it long enough to sit comfortably and enjoy your shows.</p>

<p>I find that in-ear headphones work best for this since they don&#8217;t fall out as easily.  My favorite ones are the <a href="http://www.amazon.com/gp/product/B000XP8DJC?ie=UTF8&amp;tag=dsorg-20&amp;linkCode=xm2&amp;camp=1789&amp;creativeASIN=B000XP8DJC">Etymotic HF5</a>.</p>

<h3>Video Monitor</h3>

<p>While this one is may actually be recommended in parenting books, it was a fairly recent addition to our home that has revolutionized my peace of mind.  We got a video monitor to replace our old &#8216;audio-only&#8217; monitor when it started to die.  The difference is dramatic.  Being able to see our children without going into their rooms is so much better than simply hearing them.  For our toddler it means we can see if he is quietly sleeping or quietly destroying is room.  For our newborn it is fantastic to be able to simply check on her and make sure she is doing well.  The video is high resolution enough to even watch her breathe.</p>

<p>We have this <a href="http://amzn.to/xfKJIe">Motorola Video Monitor</a>, and it&#8217;s awesome.</p>

<h3>Wipes</h3>

<p>Modern parenting requires a pretty constant use of baby wipes.  When I first became a father I thought this would be a simple choice, but it turns out that there is a surprising variation in quality.  I&#8217;ve probably tried a dozen different brands.  The best are the <a href="http://amzn.to/Acleuf">Earth&#8217;s Best Chlorine Free Wipes</a>.  It isn&#8217;t even a close competition.  These are by far the best.  They clean up all messes more quickly and with fewer wipes than anything else I&#8217;ve ever come across.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Visualizing the iPad 3 Screen]]></title>
    <link href="http://david-smith.org/blog/2012/02/10/visualizing-the-ipad-3-screen/"/>
    <updated>2012-02-10T11:18:00-05:00</updated>
    <id>http://david-smith.org/blog/2012/02/10/visualizing-the-ipad-3-screen</id>
    <content type="html"><![CDATA[<p>It is now widely <a href="http://allthingsd.com/20120209/apple-to-announce-ipad-3-first-week-in-march/">accepted</a> that Apple will be releasing a new iPad early in March.  It is expected this will include a <a href="http://www.apple.com/iphone/features/retina-display.html">Retina</a> display like the iPhone.  This would have a resolution of 2048x1536 (double its current resolution of 1024x768).  I find numbers like that often hard to visualize so I did a quick graph comparing that to current Apple displays.  A screen that size would be 96 pixels taller than a <a href="http://www.apple.com/imac/specs.html">27&#8221; iMac</a> or <a href="http://www.apple.com/displays/">Thunderbolt Display</a> in landscape and 608 pixels taller in portrait.</p>

<!--More-->


<p>This will present problems for developers and designers of iPad apps unless Apple also releases a new display with either a higher resolution or a HiDPI mode.  Otherwise we will no longer be able to view 1:1 mockups or run the simulator at full size without clipping part of the view.</p>

<p><a href="http://david-smith.org/resources/ipadcomparison.png"><img style="width:100%" src="http://david-smith.org/resources/resolutionsscaled.png"></a></p>

<p>Click on the diagram to see it at 1:1 pixel size.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Address Book Security]]></title>
    <link href="http://david-smith.org/blog/2012/02/09/address-book-security/"/>
    <updated>2012-02-09T06:44:00-05:00</updated>
    <id>http://david-smith.org/blog/2012/02/09/address-book-security</id>
    <content type="html"><![CDATA[<p>Following up on my <a href="http://david-smith.org/blog/2012/02/07/understanding-ios-privacy/">article</a> about how privacy works on iOS, I thought it helpful to also give a more opinionated post discussing privacy.  I&#8217;ll focus on the security of the address book since that is the topic <em>du jour</em>, but these concepts apply more generally as well.</p>

<!--More-->


<p>There are 3 technical approaches Apple could take in response to this issue.</p>

<ul>
<li><strong>Remove the Feature (No Access)</strong>: If the data in your address book is considered too sensitive to allow access by 3rd-party developers then Apple could remove the access.</li>
<li><strong>Add a User Alert (Constrained Access)</strong>: Pop-up an alert message when an application wishes to access the address book requesting user permission.</li>
<li><strong>Do Nothing (Open Access)</strong>: Leave the platform just like it is now.  This gives any application, <em>approved</em> in the App Store, full read-write access to your address book.</li>
</ul>


<p>If the goal of any policy change is to <strong>guarantee</strong> the security of user data only the first option would be sufficient.  Once a developer has access to the data there is no way to realistically ensure it isn&#8217;t used for nefarious purposes or in ways that violate user trust.  However, such a change would dramatically hurt the platform in terms of user experience and capability.</p>

<p>Adding a user alert before providing access to the data seems superficially to enhance the security of a user&#8217;s data by at least asking their permission.  However, in reality this approach does little to effect change from the current state.</p>

<p><img src="http://david-smith.org/resources/androidpermissions.png" alt="" /></p>

<p>Look no further than the spread of malware on <a href="http://googlemobile.blogspot.com/2012/02/android-and-security.html">Android</a>.  Here applications have been caught doing all manner of nefarious things with user data.  In each case, the user <strong>had given</strong> the application permission to access their data through the Android Market <a href="http://downloadsquad.switched.com/2010/06/28/understanding-the-android-market-security-system/">permissions</a> system.</p>

<p>The problem isn&#8217;t that apps are being given access to the user data, the problem is how they then use it.  There are dozens of perfectly valid reasons an application could ask for permission to access your address book and then go on to use that data in a way that violates user trust.  Whether the user  initially gave their permission or not, if the data is used against their desires they will feel betrayed.</p>

<p>I&#8217;d argue that Apple already has the best tool it could possibly have for ensuring user privacy — <strong>a closed App Store</strong>.</p>

<p>Every application developer in the App Store has signed a legal agreement with Apple stating that they will abide by the rules of the Store.  If a developer violates these rules their continued presence in the store is in jeopardy.  Apple has laid out clear privacy rules that all applications are required to abide by.  The best defense against violations in user trust would be Apple being even more vigorous in their defense of user data and enforcement of their <em>existing</em> contractual rights against violators.</p>

<p>While app review cannot be expected to catch every nefarious use of private data (only deep forensic analysis could do that), it can certainly be used to catch blatant and clear violations.  I hope that the sandboxing mechanism introduced in OS X Lion will be brought to iOS which requires that developers provide justifications for the system features they use or else be prevented access.  That does much to enhance the effectiveness of app review.</p>

<p>Apple should also be expected to remove apps from the store that violate policy in a timely manner.  I was surprised that Path wasn&#8217;t pulled when it became clear they were in violation of sections 17.1 and 17.2 of the App Review Guidelines.  I think such a move (even if they were allowed back after fixing the issue) would have done much to discourage this behavior in other developers.  Setting an example that this type of data use is strictly forbidden.</p>

<p>Rather than adding security theatre to iOS by nagging the user about each access to their data, more precise wielding of the tools already in place would be a much more effective and user benefiting approach.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Understanding iOS Privacy]]></title>
    <link href="http://david-smith.org/blog/2012/02/07/understanding-ios-privacy/"/>
    <updated>2012-02-07T21:36:00-05:00</updated>
    <id>http://david-smith.org/blog/2012/02/07/understanding-ios-privacy</id>
    <content type="html"><![CDATA[<p>The social sharing app <a href="http://path.com">Path</a> found itself in a bit of hot water today as it was <a href="http://mclov.in/2012/02/08/path-uploads-your-entire-address-book-to-their-servers.html">reported</a> that they were uploading user&#8217;s address book data to their servers without user opt-in.  This behavior is clearly in violation of both user trust and App Store <a href="http://mclov.in/2012/02/08/path-uploads-your-entire-address-book-to-their-servers.html#comment-432262850">policies</a>.</p>

<p>The incident got me thinking about how privacy is managed on iOS and more universally. Generally speaking there are five ways that an OS vendor can ensure the privacy of user data.</p>

<!-- More -->


<ul>
<li><strong>Isolation</strong>: If the OS vendor prevents programmatic access to user data then there is no concern for privacy breaches.  The data is simply unavailable to 3rd party applications.  This approach provides complete security but at the cost of preventing even legitimate uses.  This is the current state for things like email, voicemail, and text messages on iOS.</li>
<li><strong>Legal Contract</strong>: The OS vendor may lock down their platform so that only developers who have signed a legal agreement stating they will abide by a standard privacy policy are allowed to distribute apps.  This type of restriction is not at all technical, instead it seeks to control access to sensitive data to people with a legal obligation to protect it.</li>
<li><strong>Review</strong>: The OS vendor may perform some level of either technical or functional review of an application to verify compliance with a privacy policy.  This can be done either at a code (static analysis) level or done by a person performing typical user acts within the application.</li>
<li><strong>Entitlements/Sandboxing</strong>: A more rigorous version of <em>Review</em>, in this case application developers must explicitly state the privacy related operations will perform and then provide explanations to the reviewers when those needs are not directly related to the applications main function.  This approach provides more security than simple review because developers are programmatically prevented from performing privacy related actions that they do not <em>explicitly</em> ask for.</li>
<li><strong>User Approval</strong>: The user is told what operations the application is going to use (either at install or performance) and then given the opportunity to allow or deny the actions.  An example of this is the Permissions tab shown for any Android Market <a href="https://market.android.com/details?id=com.facebook.katana">app</a> or the location <a href="http://support.apple.com/library/APPLE/APPLECARE_ALLGEOS/HT4995/HT4995_04--loc_alert-001-en.png">alert</a> in iOS.</li>
</ul>


<p>In general iOS enforces privacy via <em>Contract</em> &amp; <em>Review</em>.  The exceptions to that are the use of <em>Isolation</em> for email, voicemail, text messages, and  other more &#8216;sensitive&#8217; data.  Real-time location data is given the extra protection of a <em>User Approval</em>.</p>

<p>With this approach Apple is seeking to strike a balance between capability (which would be limited by <em>Isolation</em>) and user annoyance (which is aggravated by <em>User Approval</em>).  It is to say that Apple should require user&#8217;s to give explicit permission before any app may access their personal data, however, this approach is in practice no more secure than the others.  Constantly nagging users with permission requests ends up making them numb to their true meaning.  Users typically just end up clicking &#8216;allow&#8217; for any alert without reading or fully understanding the implications.  Windows Vista is the poster child for this <a href="http://www.codinghorror.com/blog/2006/04/windows-vista-security-through-endless-warning-dialogs.html">failing</a>.</p>

<p>Instead, it seems Apple has made it clear that they are committed to security by review, and more recently to enhance that via <em>Entitlements/Sandboxing</em>.  With OS X Lion, Apple introduced application <a href="https://developer.apple.com/technologies/mac/whats-new.html">Sandboxing and Privilege Separation</a> which will be enforced in the Mac App Store review process.  This approach should allow them to weed out nefarious applications more easily and generally provide greater control.  I wouldn&#8217;t be all surprised if this found its way to iOS in the next major update.</p>

<p>It should be noted, however, that none of these methods (except Isolation) would have likely prevented what Path was doing.  The app has a perfectly reasonable reason to access your address book when searching for new contacts and setting up your account.  The problem comes from them then using that data in an in appropriate way.  Only deep forensic analysis of the application would bring this to light.  The problem lies with nefarious developers finding ways to violate the rules, rather than with the rules being flawed themselves.  Highly <a href="http://inessential.com/2012/02/07/one_of_my_mistakes">motivated</a> developers will always find away to get around any security restriction—and it appears that Path was indeed highly motivated.</p>

<h4>Your Data in iOS</h4>

<p>I thought it might be helpful to provide a quick guide to what data is available to apps in iOS5.</p>

<ul>
<li><strong>Email/Account Info</strong>: No Access</li>
<li><strong>Voicemail/Calls/FaceTime</strong>: No Access</li>
<li><strong>Text Messages</strong>: No Access</li>
<li><strong>Notes</strong>: No Access</li>
<li><strong>iTunes Account Information</strong>: No Access</li>
<li><strong>Real-time Location</strong>: Access after user approval</li>
<li><strong>Twitter Account</strong>: Access after user approval</li>
<li><strong>Photos</strong>: Access to all photos after location approval</li>
<li><strong>Address Book</strong>: Access to all contacts</li>
<li><strong>Media Library</strong>: Read-Only access to the movie, music, &amp; podcasts</li>
<li><strong>Calendar</strong>: Access to calendar event information</li>
<li><strong>Camera/Microphone</strong>: Access while application running</li>
<li><strong>UUID</strong>: Access, but deprecated and will likely disappear soon</li>
</ul>


<blockquote><p><strong>Update:</strong> I did a follow-up post with my opinions on address aook access in iOS <a href="http://david-smith.org/blog/2012/02/09/address-book-security/">here</a>.</p></blockquote>
]]></content>
  </entry>
  
</feed>

