<?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>Codethink &#187; process</title>
	<atom:link href="https://codethink.no-ip.org/posts/process/feed" rel="self" type="application/rss+xml" />
	<link>https://codethink.no-ip.org</link>
	<description>A blog about coding, life, and other arbitrary topics</description>
	<lastBuildDate>Sun, 15 Mar 2026 21:30:15 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.29</generator>
	<item>
		<title>[XCode] Building Universal iOS Frameworks</title>
		<link>https://codethink.no-ip.org/archives/688</link>
		<comments>https://codethink.no-ip.org/archives/688#comments</comments>
		<pubDate>Sun, 26 Jun 2011 11:56:12 +0000</pubDate>
		<dc:creator><![CDATA[aroth]]></dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[xcode]]></category>

		<guid isPermaLink="false">http://codethink.no-ip.org/wordpress/?p=688</guid>
		<description><![CDATA[Here&#8217;s an excellent little project that I stumbled across not too long ago: https://github.com/kstenerud/iOS-Universal-Framework This project provides a single installation shell script that will add a new Project Template to XCode, one that can be used to build universal iOS &#8230; <a href="https://codethink.no-ip.org/archives/688">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Here&#8217;s an excellent little project that I stumbled across not too long ago:</p>
<p><a href="https://github.com/kstenerud/iOS-Universal-Framework" target="_blank">https://github.com/kstenerud/iOS-Universal-Framework</a></p>
<p>This project provides a single installation shell script that will add a new Project Template to XCode, one that can be used to build universal iOS frameworks.  Now this wouldn&#8217;t be a big deal (and in all rights, <em>shouldn&#8217;t</em> be a big deal), if not for the fact that for some unspecified and frustrating reason, XCode has no built-in ability to create such frameworks.  This means that up until recently if you had an iOS library that you wanted to use across many projects, or that you wanted to distribute for other developers to use in their projects, you had only a few not-very-good options:</p>
<ul>
<li>Include your source code in every project that uses your library (increased compilation time, hooray!).</li>
<li>Build two library versions, one for armv6/armv7 and one for x86.</li>
<li>Screw with the linker to <a href="http://mark.aufflick.com/blog/2010/11/19/making-a-fat-static-library-for-ios-device-and-simulator" target="_blank">manually create a &#8220;fat&#8221; library</a>.</li>
<li>Use the <a href="http://db-in.com/blog/2011/05/creating-universal-framework-to-iphone-ios/" target="_blank">Bundle Hack</a> and hope that it works.</li>
</ul>
<p>It&#8217;s worth noting here that the first three options listed above do nothing to help with the management of any shared header files needed to actually make use of the library code.  The fourth option does allow you to include public headers in your build artifact, but the setup to do so is tedious, and the entire thing is basically a giant hack besides.  None of these options are really very convenient or useful from the developer&#8217;s point of view.</p>
<p>What developers really need, what they should have access to, and what XCode should have supported at least since the release of iOS 4.0, is the ability to build true universal iOS frameworks that are &#8220;real&#8221; frameworks in the same sense that UIKit and CoreGraphics are real frameworks.  And that&#8217;s exactly what the <a href="https://github.com/kstenerud/iOS-Universal-Framework" target="_blank">iOS-Universal-Framework</a> project gives you.  Just install it and you get a handy XCode Project Template that can be used to build a universal iOS framework.  This lets you build real iOS frameworks that include libraries for both x86 and armv6/armv7 in a single package, automatically bundled with your public header files.  You (or anyone else) can then use the generated framework inside of other projects in the same way as any other iOS framework; just add it to your &#8220;Link With Binary Libraries&#8221; build phase, and away you go.</p>
<p>All told, the  <a href="https://github.com/kstenerud/iOS-Universal-Framework" target="_blank">iOS-Universal-Framework</a> Project Template is great and works exactly as advertised.  Just install it and you&#8217;re good to go.  I&#8217;ve only come across one minor caveat worth mentioning, which is that although the template does correctly produce a universal iOS framework, the build product shown in XCode will actually point to an architecture-specific version of the framework.  In order to find the correct, universal framework it is necessary to do a &#8220;Show in Finder&#8221; on the build product shown in XCode (or otherwise navigate to your project output directory), and then go up a level (or two) in the filesystem to find the folder that contains the universal version of the framework (<em>edit:  as per Karl&#8217;s comment below, this has now been fixed.  Hooray!</em>).  </p>
<p>Apart from that minor annoyance this little XCode extension is really quite excellent, and I encourage you to give it a try.  My personal thanks to Karl Stenerud for putting this together.</p>
]]></content:encoded>
			<wfw:commentRss>https://codethink.no-ip.org/archives/688/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>How to Write Good Code</title>
		<link>https://codethink.no-ip.org/archives/28</link>
		<comments>https://codethink.no-ip.org/archives/28#comments</comments>
		<pubDate>Tue, 25 Jan 2011 12:30:37 +0000</pubDate>
		<dc:creator><![CDATA[aroth]]></dc:creator>
				<category><![CDATA[banter]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[refactoring]]></category>

		<guid isPermaLink="false">http://localhost/wordpress/?p=28</guid>
		<description><![CDATA[Xkcd probably ties for second with Penny Arcade in my list of favorite webcomics (the #1 spot goes to Questionable Content, despite my unending annoyance at the fact that the author has yet to have Marten hook up with Faye). &#8230; <a href="https://codethink.no-ip.org/archives/28">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://xkcd.com" target="_blank">Xkcd</a> probably ties for second with <a href="http://penny-arcade.com/comic" target="_blank">Penny Arcade</a> in my list of favorite webcomics (the #1 spot goes to <a href="http://questionablecontent.net" target="_blank">Questionable Content</a>, despite my unending annoyance at the fact that the author has yet to have Marten hook up with Faye).  For those not familiar, Xkcd tends to focus on popular science, algorithms, coding, and other similarly geeky topics.  Not long ago the following gem was published:</p>
<p><a href="http://codethink.no-ip.org/wordpress/wp-content/uploads/2011/01/xkcd1.png" rel="lightbox[28]"><img src="http://codethink.no-ip.org/wordpress/wp-content/uploads/2011/01/xkcd1-261x400.png" alt="Xkcd-844" title="Xkcd-844" width="261" height="400" class="aligncenter size-medium wp-image-184" /></a></p>
<p>Now I&#8217;ve spent enough time in the tech industry to recognize that on many occasions this comic is as accurate as it is humorous.  When working on any project of substance it is far more often the case that the requirements are a moving target, a living and breathing entity being pushed and pulled and cajoled and mutated by any number of external influencers, from the UX department who have just completed Yet Another Usability Study&trade; and concluded that The Entire UI Needs To Be Redone&trade; to the lead architect who wants to restructure the internals to use his new design that will Solve All Problems Forever&trade; to the engineers working deep in the code who have just discovered that The Feature You Want Is Not Feasible&trade;.  </p>
<p>The pragmatic coder is left with two basic options, often punctuated with an Unreasonable Deadline&trade;; either code fast and try to meet the requirements before they change, or do things correctly and hope the requirements don&#8217;t change too much before you get there.  More experienced coders know how to code fast better and/or how to code well faster, but the basic options remain the same, and often you will still be faced with scenarios where you&#8217;ve coded yourself into a corner, or had the requirements change before you got there.  </p>
<p>So what to do in these situations?  As much as I appreciate the tongue-in-cheek humor of the original comic, I believe there is a simple solution to the problem that it poses.  Namely, <a href="http://en.wikipedia.org/wiki/Refactoring" target="_blank" target="_blank">refactoring</a>.  Refactoring fits in like so:</p>
<p><a href="http://codethink.no-ip.org/wordpress/wp-content/uploads/2011/01/xkcd-mod.png" rel="lightbox[28]"><img src="http://codethink.no-ip.org/wordpress/wp-content/uploads/2011/01/xkcd-mod-226x400.png" alt="Xkcd #844-a" title="Xkcd #844-a" width="226" height="400" class="aligncenter size-medium wp-image-37" /></a></p>
<p>Refactoring is the art of transforming What I Have&trade; into What I Need&trade; and getting from I Finally Made It Work&trade; to I Can Make It Work Anywhere&trade; <em>without having to throw away and rewrite 90% of your code</em>, and the ability to refactor effectively is often the only thing truly separating good engineers from poor ones.  </p>
<p>This is a subject that should be covered in any serious computer-science curriculum, yet unfortunately the first experience many engineers will have with refactoring will be when their first employer asks them to turn That Really Old Codebase That Nobody Understands&trade; into The Next Big Thing&trade;.  At this point one of two things will happen.  Either they will refactor That Really Old Codebase That Nobody Understands&trade; into Something I Can Work With&trade;, or they will decide that We Have to Rebuild It From Scratch&trade;.  Either approach can take a long time, but one is guaranteed to be far more disruptive and risk-prone than the other.</p>
<p>Embrace refactoring.  It won&#8217;t save your life, lead you to salvation, or guarantee you eternal paradise, but it just might save your project, or even your company, from failure.</p>
]]></content:encoded>
			<wfw:commentRss>https://codethink.no-ip.org/archives/28/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
