{"id":399,"date":"2009-09-17T22:17:43","date_gmt":"2009-09-18T03:17:43","guid":{"rendered":"http:\/\/vgable.com\/blog\/?p=399"},"modified":"2009-09-17T22:17:47","modified_gmt":"2009-09-18T03:17:47","slug":"installing-mac-apps","status":"publish","type":"post","link":"https:\/\/vgable.com\/blog\/2009\/09\/17\/installing-mac-apps\/","title":{"rendered":"Installing Mac Apps"},"content":{"rendered":"<p>Today&#8217;s <a href=\"http:\/\/daringfireball.net\/2009\/09\/how_should_mac_apps_be_distributed\">Daringfireball article on the shortcomings of the Mac application-install procedure<\/a> is worth a skim.  Gruber&#8217;s suggestion that Mac OS X automatically move 3rd-party applications into the <code>\/Applications\/<\/code> folder on first-run, (<em>a la<\/em> the dashboard widget install process) is a good one<sup>1<\/sup>. Since <em>Mac OS X already prompts you on first run<\/em> (&#8220;Are you <em>sure<\/em> you want to run a program Apple didn&#8217;t write?&#8221;) it&#8217;s hard to see any downsides to this idea.<\/p>\n<p>But that&#8217;s not the behavior we have today<sup>1<\/sup>.<\/p>\n<h3>Don&#8217;t Use a Damn .dmg!<\/h3>\n<p>As it stands today, I don&#8217;t see a good reason to ship your apps as a .dmg. I&#8217;ve <a href=\"http:\/\/imlocation.wordpress.com\/2007\/08\/21\/why-use-a-dmg\/\">been suspicious of disk images for a few years now<\/a>; and usability tests <a href=\"http:\/\/limi.net\/articles\/improving-the-mac-installer-for-firefox\/\">show<\/a> that people get confused by them.<\/p>\n<p><strong>Distribute your application as a single <code>.app<\/code> in a <code>.zip<\/code> archive<\/strong>. What possible use are other files besides the application? If a &#8220;Readme&#8221; file should be read before using the application, then show it when the application is first launched.<\/p>\n<p>Installers are opaque and un-Mac like. There&#8217;s always a risk that they&#8217;ll <a href=\"http:\/\/support.apple.com\/kb\/TS1545\">install something that breaks the computer<\/a>. <strong>As a developer I am even more suspicious of installers on the Mac, because I know how broken Apple&#8217;s installer tools are<\/strong>.<\/p>\n<p>Of course, as a developer, I know that applications <em>do<\/em> sometimes need to install components. And here the best solution is for <strong>the application to check it&#8217;s environment and ask to install missing components <em>as needed<\/em><\/strong> (in essence be it&#8217;s own installer). It&#8217;s more robust, since it detects-and-corrects missing or damaged components. It always preserves the user-facing abstraction that the icon is the application.<\/p>\n<p>Applications shouldn&#8217;t install hacks dangerous enough to <em>require<\/em> a bundled user-facing unisntaller. To make <a href=\"http:\/\/vgable.com\/imlocation\/\">IMLocation<\/a> work, I had to install a background process &#8212; but I made it intelligent enough that it would uninstall itself if the main application had been deleted. Yes, this is more work, but it&#8217;s worth it.<\/p>\n<p><small><br \/>\n<sup>1<\/sup>Another idea is to make Safari and Firefox smart enough to download applications directly into the right <code>\/Applications\/<\/code> folder, bypassing the usual downloads folder. This elegantly solves the instillation problem, although it creates some new problems.<\/p>\n<p><sup>2<\/sup>Although it would be a cool hack to write.<br \/>\n<\/small><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Today&#8217;s Daringfireball article on the shortcomings of the Mac application-install procedure is worth a skim. Gruber&#8217;s suggestion that Mac OS X automatically move 3rd-party applications into the \/Applications\/ folder on first-run, (a la the dashboard widget install process) is a good one1. Since Mac OS X already prompts you on first run (&#8220;Are you sure [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[16,3,4,8],"tags":[340,67,279,59],"class_list":["post-399","post","type-post","status-publish","format-standard","hentry","category-accessibility","category-macosx","category-programming","category-usability","tag-firefox","tag-installers","tag-mac-os-x","tag-safari"],"_links":{"self":[{"href":"https:\/\/vgable.com\/blog\/wp-json\/wp\/v2\/posts\/399","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vgable.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vgable.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vgable.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vgable.com\/blog\/wp-json\/wp\/v2\/comments?post=399"}],"version-history":[{"count":1,"href":"https:\/\/vgable.com\/blog\/wp-json\/wp\/v2\/posts\/399\/revisions"}],"predecessor-version":[{"id":400,"href":"https:\/\/vgable.com\/blog\/wp-json\/wp\/v2\/posts\/399\/revisions\/400"}],"wp:attachment":[{"href":"https:\/\/vgable.com\/blog\/wp-json\/wp\/v2\/media?parent=399"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vgable.com\/blog\/wp-json\/wp\/v2\/categories?post=399"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vgable.com\/blog\/wp-json\/wp\/v2\/tags?post=399"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}