<?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>Time.code()</title>
	<atom:link href="http://subfurther.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://subfurther.com/blog</link>
	<description>A  Digital Media Development Blog</description>
	<lastBuildDate>Sat, 21 Jul 2018 00:00:30 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
	<item>
		<title>Alternative V</title>
		<link>http://subfurther.com/blog/2018/07/18/alternative-v/</link>
		<comments>http://subfurther.com/blog/2018/07/18/alternative-v/#comments</comments>
		<pubDate>Thu, 19 Jul 2018 00:26:39 +0000</pubDate>
		<dc:creator><![CDATA[Chris Adamson]]></dc:creator>
				<category><![CDATA[career]]></category>

		<guid isPermaLink="false">http://subfurther.com/blog/?p=4305</guid>
		<description><![CDATA[OK, here&#8217;s the tl;dr before the jump: I&#8217;m joining Apple full-time as a Software Engineering Author, starting Monday 7/23/18. The Xcode Treasures book is now complete, with my having just turned in the last chapter to my editor. Given corporate policies on outside activities, I won&#8217;t be blogging here anymore. I also won&#8217;t be speaking [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>OK, here&#8217;s the tl;dr before the jump:</p>
<ul>
<li><strong>I&#8217;m joining Apple full-time as a Software Engineering Author, starting Monday 7/23/18.</strong></li>
<li>The <a href="https://pragprog.com/book/caxcode/xcode-treasures" rel="noopener" target="_blank"><em>Xcode Treasures</em></a> book is now complete, with my having just turned in the last chapter to my editor.</li>
<li>Given corporate policies on outside activities, I won&#8217;t be blogging here anymore.</li>
<li>I also won&#8217;t be speaking at conferences.</li>
<li>Not sure about the <a href="http://www.invalidstream.com" rel="noopener" target="_blank">livestream</a>, which is on a Summer hiatus anyways. It might return, but in a very different form.</li>
</ul>
<p>Obviously, you should <a href="https://twitter.com/invalidname" rel="noopener" target="_blank">unfollow me on Twitter</a> <em>right now</em>, because I won&#8217;t be tweeting about development topics anymore, which means my posts will be nothing but anime and complaining about parenting.</p>
<p><span id="more-4305"></span></p>
<p>So, I haven&#8217;t been too public about this, but I&#8217;ve actually been working for the last year as a contractor in Apple&#8217;s Developer Publications group. Earlier this year, they asked if I wanted to interview to come on full-time, but I said I wanted to finish <i>Xcode Treasures</i> first, because I thought it was an important book and I wanted to see it through. So, as the book work was in the final stretch last month, I went out to Cupertino for a round of interviews.</p>
<p><img src="http://subfurther.com/blog/wp-content/uploads/2018/07/IL-plinth-small.jpg" alt="1 Infinite Loop plinth" title="IL-plinth-small.jpg" border="0" width="378" height="504" openintab/></p>
<p>So, why board the mothership? Well that should be obvious: <em>to get in on the sweet employee discount before the Mythical Modular Modern Mac Pro comes out next year.</em> 20% (or whatever it is) off a $7,500 configuration is serious coin, bucko.</p>
<p>But seriously, I actually like what they&#8217;re doing with developer publications. It&#8217;s not my place to say why they&#8217;re doing things the way they are, but if you step back and let yourself compose a thoughtful and complete understanding of the form, state, and use of developer documentation, you may realize what DevPubs is up to is the right thing to do.</p>
<p>Now I know there are people out there who are all like &#8220;But… but my wall of API diffs that I look at every WWDC Monday night and then never again!&#8221; Trust me — the other 364 days of the year will eventually be worth it.</p>
<p>(Also, anytime you&#8217;re going to take one of these &#8220;the big company doesn&#8217;t get it, but <em>I</em> do&#8221; stances, I think it&#8217;s important to commit: either full-on <em>TRON</em> cosplay as you shout &#8220;I fight for the users!&#8221;, or see if you can get Bruce Boxleitner to come on your podcast.)</p>
<p>Of course, for me, there&#8217;s also the idea of job security, which is reassuring after facing challenges with the ups-and-downs of the app economy over the years. With two kids, one of whom has severe medical issues, getting on a company health plan will be extremely helpful to our family&#8217;s financial well-being.</p>
<h3>Consequences</h3>
<p>That said, surely you&#8217;ve noticed that all the people who leave the public sphere to work at Apple get real quiet. That&#8217;s to be expected. Obviously, they can&#8217;t talk about anything secret they&#8217;re working on.</p>
<p>But even if I&#8217;m working on, say, some ancient thing in Foundation, does my publicly expressing an opinion on <code>URLConnection</code> (It sucks! Migrate to <code>URLSession</code> already!) mean that my employer is saying that? Of course not. But people will take it that way. In particular, some people with an axe to grind with a company will find the most contentious thing any employee has said and try to hang it on the employer. And it often works. Best way to avoid getting fired over saying something stupid? Don&#8217;t say it in the first place. (Did I mention I really need health coverage?)</p>
<p>But I&#8217;ve been particularly public for the last decade, after coming over from Java to Cocoa. So here&#8217;s the plan for all the stuff I&#8217;ve got out there:</p>
<ul>
<li>This will probably be the last blog post for the foreseeable future. While this is a &#8220;digital media development blog&#8221;, according to the banner, the whole topic area hits too close to Apple&#8217;s businesses for comfort. For example, the rivalry of HEVC, VP9, and AV1 would be fun to write about, but Apple is very much involved in that fight (having adopted HEVC, but also being on the board that guides AV1), so even talking about those topics in an objective manner is likely a conflict of interests. Good thing <a href="http://www.streamingmedia.com/Articles/ReadArticle.aspx?ArticleID=126339" rel="noopener" target="_blank">Streaming Media just covered the codec wars</a> in a new article.</li>
<li>I submitted the final chapter of <a href="https://pragprog.com/book/caxcode/xcode-treasures" rel="noopener" target="_blank"><em>Xcode Treasures</em></a> a few days ago, and will clean up the remaining errata and as much tech reviewer feedback as I can before going pencils-down on Monday. I don&#8217;t feel like this book has found its audience yet, and I regret that I won&#8217;t be able to promote it further, but since the changes in Xcode 10 are rather modest, it shouldn&#8217;t need updating either and may have a pretty long shelf life.</li>
<li>I don&#8217;t know what I&#8217;m going to do with <a href="http://invalidstream.com" rel="noopener" target="_blank">Invalidstream</a>. I really enjoy making it, but the viewership is nearly zero, and I obviously can&#8217;t do a half-hour of iOS/Mac developer lessons every week anymore. In fact, even the second segment—let&#8217;s plays of iPad games—is a conflict of interest, because of the whole &#8220;@invalidname said <em>Madden NFL</em> for iPad is boring-ass lootbox garbage, so now I&#8217;m mad at Apple&#8221; problem. Maybe I&#8217;ll bring it back as PS1/PS2 retro-gaming, anime reviews, and/or visual novel read-alongs, I just don&#8217;t know. Let&#8217;s see how I feel once summer&#8217;s over.</li>
<li>Obviously, I&#8217;m going to lay off the tech tweets and snark about Apple and the iOS/Mac APIs on <a href="https://twitter.com/invalidname" rel="noopener" target="_blank">Twitter</a>, so you really, <strong>really</strong> should unfollow me. This means you, Marco. Six months from now, my Twitter posts may consist entirely of fast food wine pairings, and excerpts from my five-volume <em>Muv-Luv</em> fanfic / epic takedown of Trumpian white nationalism.</li>
</ul>
<h3>You Talk Too Much</h3>
<p>The other obvious thing I&#8217;m dropping is speaking at developer conferences, but to be honest, I did that months ago. When I was asked about participating in <a href="https://www.swiftbynorthwest.com" rel="noopener" target="_blank">Swift By Northwest</a>, I said I was happy to help promote it, but was not interested in speaking anymore.</p>
<p><img src="http://subfurther.com/blog/wp-content/uploads/2018/07/speaking-at-confs.png" alt="Pop Team Epic meme. Offstage: Will you ever speak at developer conferences again? Pipimi: (extends middle finger)" title="speaking-at-confs.png" border="0" width="417" height="578" /></p>
<p>This was a decision I came to after the poor reception to what I thought was one of the better talks I&#8217;d ever done. Since so many of these conferences use &#8220;Swift&#8221; in their name now, I thought it would be disingenuous to just do a random cool-new-framework talk, so to do something really <em>about</em> Swift, I dug into the idea of how Apple&#8217;s media frameworks push Swift farther than it is currently able to go, and what we should do in the meantime until Swift matures.</p>
<p><iframe src="https://www.slideshare.net/slideshow/embed_code/key/hsuKCjebigQ4J" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> </p>
<div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/invalidname/media-frameworks-versus-swift-swift-by-northwest-october-2017" title="Media Frameworks Versus Swift (Swift by Northwest, October 2017)" target="_blank">Media Frameworks Versus Swift (Swift by Northwest, October 2017)</a> </strong> from <strong><a href="https://www.slideshare.net/invalidname" target="_blank">Chris Adamson</a></strong> </div>
<p><br clear="all"/></p>
<p>The reaction wasn&#8217;t what I&#8217;d hoped. Attendees found the jokes unfunny (or even inappropriate) and didn&#8217;t really care for the message that there are some things that, for now at least, should still be written in C or C++. But the real killer was that people weren&#8217;t interested in my speaking at all. There aren&#8217;t a lot of feelings quite as bad as people deliberately fleeing you, but that&#8217;s exactly what happened to me at the single-track Swift by Northwest:</p>
<blockquote class="twitter-tweet" data-width="520" data-dnt="true">
<p lang="en" dir="ltr">Best thing about my conference talks is how they can consistently clear out the room before they even begin. <a href="https://t.co/Pbs5Fx5B1z">pic.twitter.com/Pbs5Fx5B1z</a></p>
<p>&mdash; Chris Adamson (@invalidname) <a href="https://twitter.com/invalidname/status/924043521295769600?ref_src=twsrc%5Etfw">October 27, 2017</a></p></blockquote>
<p><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></p>
<blockquote class="twitter-tweet" data-width="520" data-dnt="true">
<p lang="en" dir="ltr">13/ I thought this was possibly the best talk I’d ever done, at least by Chicago when I got the Audio Unit working, but the feedback was actually pretty negative. And the sight of all my friends fleeing the room in Seattle was too much to take. I’m not doing any talks in 2018.</p>
<p>&mdash; Chris Adamson (@invalidname) <a href="https://twitter.com/invalidname/status/947621996925542400?ref_src=twsrc%5Etfw">January 1, 2018</a></p></blockquote>
<p><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></p>
<p>So, yeah, what I&#8217;m selling, nobody&#8217;s buying. Sounds like a perfect time to close up shop.</p>
<h3>The Good Fight</h3>
<p>It&#8217;s good to keep challenging yourself, to never get comfortable (usually not a problem for me, but still). On the <em>Xcode Treasures</em> book, editor Tammy Coron has pushed back a lot harder than most of my previous book editors, and has a strong sense of process, so that&#8217;s been good for me to work through. (Also, the interview I did with her and Tim Mitra for the <a href="http://roundaboutfm.com/episode-108-chris-adamson/" rel="noopener" target="_blank">Roundabout: Creative Chaos podcast</a> is easily the most interesting of the few interviews I&#8217;ve ever done, so it&#8217;s nice that exists).</p>
<p>At Apple, the rigor I&#8217;ve been put through by mentors and editors is like on a whole other level. It&#8217;s really exacting, from the top-level strategy of docs, articles, and sample code, to the nit-picky ground game of copy-editing. You really have to think through what you&#8217;re doing, how it works, and what your readers are going to get out of it. You can&#8217;t finesse or hand-wave your way out of problems in your narrative; you have to face them head on. It takes a lot of work to get things to a point where all parties approve them.</p>
<p>But hey, at my age, learning new things is not something to be feared; it&#8217;s a challenge to be embraced.</p>
<p><em>And again, don&#8217;t forget to <a href="https://twitter.com/invalidname" rel="noopener" target="_blank">unfollow me on Twitter</a> if you haven&#8217;t already (but you probably already have).</em></p>
]]></content:encoded>
			<wfw:commentRss>http://subfurther.com/blog/2018/07/18/alternative-v/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Xcode Treasures: Platform Specifics</title>
		<link>http://subfurther.com/blog/2018/06/23/xcode-treasures-platform-specifics/</link>
		<comments>http://subfurther.com/blog/2018/06/23/xcode-treasures-platform-specifics/#respond</comments>
		<pubDate>Sat, 23 Jun 2018 18:57:31 +0000</pubDate>
		<dc:creator><![CDATA[Chris Adamson]]></dc:creator>
				<category><![CDATA[publishing]]></category>
		<category><![CDATA[xcode]]></category>

		<guid isPermaLink="false">http://subfurther.com/blog/?p=4301</guid>
		<description><![CDATA[The third update to the Xcode Treasures beta book went out yesterday, and this is a good one: it&#8217;s all about platform-specific features. While the book sort of takes Swift + iOS as its default stance, I&#8217;ve used Mac examples where it makes more sense to do so, and I drop into Objective-C or C [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>The third update to the <a href="https://pragprog.com/book/caxcode/xcode-treasures" rel="noopener" target="_blank"><i>Xcode Treasures</i></a> beta book went out yesterday, and this is a good one: it&#8217;s all about platform-specific features.</p>
<p><img src="http://subfurther.com/blog/wp-content/uploads/2018/06/caxcode-toc-ch12.png" alt="Table of contents for chapter 12" title="caxcode-toc-ch12.png" border="0" width="643" height="201" /></p>
<p><span id="more-4301"></span></p>
<p>While the book sort of takes Swift + iOS as its default stance, I&#8217;ve used Mac examples where it makes more sense to do so, and I drop into Objective-C or C when I need to for language-specific reasons (like showing off certain debugging or profiling features). But this chapter is specifically about features in Xcode that only make sense for one platform, or that combine multiple platforms.</p>
<p>In part, this came from the fact that I knew from day one that I really wanted to do a section about writing command-line apps, since they&#8217;re short and useful and fun, and people don&#8217;t always realize that you even <i>can</i> write them with Xcode. There&#8217;s even a little bit of guidance for how to turn them into daemons or agents, and get them to the user&#8217;s computer via an Installer package, although Xcode is of no help whatsoever for doing install stuff, so I sort of have to point you in the right direction (<code>pkgbuild</code> and <code>productbuild</code>) and leave it at that.</p>
<p>There&#8217;s also a fair amount of tvOS stuff &#8212; on-demand resources and how you set those up in the project to have Apple host them for you, and building the layer stack images for app icons. For watchOS developers, <a href="https://twitter.com/slaunchaman" rel="noopener" target="_blank">Jeff Kelley</a> suggested a useful and hard-to-find feature: setting up your own pairings of iPhone and watch simulators. Y&#8217;know, for those times you want to pair the newest iPhone with the oldest Apple Watch.</p>
<p><img src="http://subfurther.com/blog/wp-content/uploads/2018/06/xcode-scheme-selector-watch-targets-customized.png" alt="Xcode scheme selector watch targets customized" title="xcode-scheme-selector-watch-targets-customized.png" border="0" width="328" height="125" /></p>
<p>One particularly important part of the chapter is setting up a project to build for multiple platforms from the same codebase. I&#8217;d originally written it to add a tvOS app target to an iOS example from earlier in the book, but after editor Tammy Coron made a suggestion about reorganizing the sections of the chapter, I saw an opportunity to do this example as an iOS+Mac demo instead. Obviously, this was fresh on my mind after <a href="http://subfurther.com/blog/2018/06/17/apple-didnt-kill-appkit-millenials-did/" rel="noopener" target="_blank">last</a> <a href="http://subfurther.com/blog/2018/06/18/follow-up-how-to-build-an-xcode-project-that-builds-for-both-ios-and-macos/" rel="noopener" target="_blank">week&#8217;s</a> blogging, and will hopefully spur readers to take the leap into cross-platform projects now, instead of waiting a year for Apple&#8217;s well-at-least-it&#8217;s-not-Electron solution.</p>
<p><a href="http://subfurther.com/blog/wp-content/uploads/2018/06/svn-commit-message-take-that-marzipan.png" rel="noopener" target="_blank"><img src="http://subfurther.com/blog/wp-content/uploads/2018/06/svn-commit-message-take-that-marzipan.png" alt="Svn commit message take that marzipan" title="svn-commit-message-take-that-marzipan.png" border="0" width="420" height="68" /></a></p>
<p>True story: Tammy&#8217;s suggestion was actually about changing the flow to put watchOS before tvOS. As a consequence, this moved multi-platform between command-line (macOS) and watchOS, so making the multi-platform section be about Mac made for better flow out of the command-line material (since both are Mac) and into watchOS (since watchOS projects are by their nature multi-platform). It&#8217;s like it was meant to be, y&#8217;know? So I actually wrote the code and rewrote the section <i>the night before the beta went out</i>, and even tweaked a screenshot <i>the next morning</i>. Move fast and break stuff, I guess.</p>
<p>Two chapters left: Extending Xcode has been in the can for months, Testing still needs to get written. Not sure which one they&#8217;ll ship next, but we&#8217;re almost done now.</p>
]]></content:encoded>
			<wfw:commentRss>http://subfurther.com/blog/2018/06/23/xcode-treasures-platform-specifics/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Follow-up: How to Build an Xcode Project that Builds for Both iOS and macOS</title>
		<link>http://subfurther.com/blog/2018/06/18/follow-up-how-to-build-an-xcode-project-that-builds-for-both-ios-and-macos/</link>
		<comments>http://subfurther.com/blog/2018/06/18/follow-up-how-to-build-an-xcode-project-that-builds-for-both-ios-and-macos/#respond</comments>
		<pubDate>Mon, 18 Jun 2018 23:19:35 +0000</pubDate>
		<dc:creator><![CDATA[Chris Adamson]]></dc:creator>
				<category><![CDATA[ios]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[xcode]]></category>

		<guid isPermaLink="false">http://subfurther.com/blog/?p=4293</guid>
		<description><![CDATA[Since I talked about making multi-platform projects like it was no big deal in my blog yesterday, I figured I should at least back that up. macandiosbuilddemo (GitHub link) is an Xcode project that builds an iOS master-detail app and a macOS windowed app from the same code base. It&#8217;s fairly trivial and unpolished, just [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Since I talked about making multi-platform projects like it was no big deal in my blog <a href="http://subfurther.com/blog/2018/06/17/apple-didnt-kill-appkit-millenials-did/" rel="noopener" target="_blank">yesterday</a>, I figured I should at least back that up.</p>
<p><a href="https://github.com/invalidstream/macandiosbuilddemo"  rel="noopener" target="_blank">macandiosbuilddemo</a> (GitHub link) is an Xcode project that builds an iOS master-detail app and a macOS windowed app from the same code base. It&#8217;s fairly trivial and unpolished, just fetching a JSON feed from this blog, showing recent entries in a table, and letting you drill into one.</p>
<p><img src="http://subfurther.com/blog/wp-content/uploads/2018/06/ios-and-mac-demo.png" alt="Side by side iOS and macOS apps, built from the same Xcode project" title="ios-and-mac-demo.png" border="0" width="539" height="443" /><br />
<span id="more-4293"></span></p>
<p>The types to represent blog entries and a feed, as well as the JSON stuff, are the business logic of the app, and they are in a &#8220;common&#8221; group. These files are 100% compatible between macOS and iOS, being based on the Foundation framework and the Swift Standard Library.</p>
<p>The trick is just to use the &#8220;target membership&#8221; checkboxes in the File Inspector to have them build for both platforms (in this example, I put all supporting files in frameworks, so they build as part of either an iOS private framework or macOS private framework). You could also add them with the plus button in the Build Phases tab of each target&#8217;s settings.</p>
<p>There&#8217;s also a view model class that represents the blogs to be shown, which has a delegate it can call out to when the contents update. This is trivial, and barely an example of MVVM, but it allows me to keep even the view models cross-platform &#8212; all that the platform-specific view controllers need to do is to implement the delegate method and update themselves. In practice, this actually ended up being identical between platforms as well:</p>
<pre><code>
extension MasterViewController: BlogFeedPresenting {
  func blogFeedViewModelDidUpdate(_ model: BlogFeedViewModel) {
    DispatchQueue.main.async {
      self.tableView.reloadData()
    }
  }
}
</code></pre>
<p>I also made a quick one-off video walking through the project:</p>
<p><iframe src="https://player.vimeo.com/video/275715922?app_id=122963" width="520" height="293" frameborder="0" title="Xcode: Building for iOS AND macOS" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe></p>
<p>Finally, I don&#8217;t want to make this sound like news. It&#8217;s really not. It&#8217;s just using Xcode targets as they were meant to be used, something that just seems to have been overlooked a lot.</p>
<blockquote class="twitter-tweet" data-width="520" data-dnt="true">
<p lang="en" dir="ltr">Iirc, Apple only has one WWDC session on sharing code between iOS and macOS (back in 2014) . How come they didn’t bang that drum every year ?</p>
<p>&mdash; Jimmy Coyne (@jimmycoyne) <a href="https://twitter.com/jimmycoyne/status/1008595340889677824?ref_src=twsrc%5Etfw">June 18, 2018</a></p></blockquote>
<p><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></p>
<blockquote class="twitter-tweet" data-width="520" data-dnt="true">
<p lang="en" dir="ltr">Huh. Our apps would be twice as hard to maintain if we didn’t do this. I kinda assumed everyone knew&#8230;</p>
<p>&mdash; Liz Marley (@emarley) <a href="https://twitter.com/emarley/status/1008811633890680832?ref_src=twsrc%5Etfw">June 18, 2018</a></p></blockquote>
<p><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></p>
<blockquote class="twitter-tweet" data-width="520" data-dnt="true">
<p lang="en" dir="ltr">I was thinking the same thing. But then I tell people we build 3 SDKs from 1 workspace and people go “wow”. Another idea for a talk, maybe? <img src="https://s.w.org/images/core/emoji/11/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>&mdash; Ben Scholtysik (@Elektrojunge) <a href="https://twitter.com/Elektrojunge/status/1008813722834427904?ref_src=twsrc%5Etfw">June 18, 2018</a></p></blockquote>
<p><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></p>
<p>Anyways, there&#8217;s also an example of this coming in what should be the next update to <a href="https://pragprog.com/book/caxcode/xcode-treasures"  rel="noopener" target="_blank"><i>Xcode Treasures</i></a>, but that example is about adding tvOS to an iOS project, and I wanted to get a Mac example out there too. This took about three hours to write, evenly split between business logic, iOS UI, and macOS UI.</p>
<p>Anyways, point being: this is totally doable. No, it&#8217;s not just a checkbox, because it assumes you would want some level of control over what your Mac UI looks like and how it works. Y&#8217;know, like you care what you&#8217;re doing, and how your users experience your app.</p>
]]></content:encoded>
			<wfw:commentRss>http://subfurther.com/blog/2018/06/18/follow-up-how-to-build-an-xcode-project-that-builds-for-both-ios-and-macos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apple Didn’t Kill AppKit, Millenials Did</title>
		<link>http://subfurther.com/blog/2018/06/17/apple-didnt-kill-appkit-millenials-did/</link>
		<comments>http://subfurther.com/blog/2018/06/17/apple-didnt-kill-appkit-millenials-did/#respond</comments>
		<pubDate>Sun, 17 Jun 2018 20:32:18 +0000</pubDate>
		<dc:creator><![CDATA[Chris Adamson]]></dc:creator>
				<category><![CDATA[ios]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[xcode]]></category>

		<guid isPermaLink="false">http://subfurther.com/blog/?p=4284</guid>
		<description><![CDATA[(yes, thank you for indulging my outrageous clickbait headline, which wildly misrepresents the contents of this blog post) Two weeks after WWDC, and we&#8217;re all still talking about Marzipan, the de facto name for UIKit-on-macOS that was acknowledged in the keynote. Like, seriously, as I&#8217;m typing this Colin and Steve are arguing about it, so [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>(yes, thank you for indulging my outrageous clickbait headline, which wildly misrepresents the contents of this blog post)</p>
<p>Two weeks after WWDC, and we&#8217;re all still talking about Marzipan, the de facto name for UIKit-on-macOS that was acknowledged in the keynote. Like, seriously, as I&#8217;m typing this <a href="https://twitter.com/colincornaby/status/1008398439187562496" rel="noopener" target="_blank">Colin and Steve are arguing about it</a>, so everyone who follows both of them gets to watch.</p>
<p><img src="http://subfurther.com/blog/wp-content/uploads/2018/06/craig-and-kits-full.jpg" alt="Craig Federigi showing diagrams of macOS/iOS app architectures" title="craig-and-kits-full.jpg" border="0" width="480" height="270" /></p>
<p>It won&#8217;t even be available to developers for another year, so we have lots of time to argue, and to enjoy the unintended consequence of <a href="https://en.wikipedia.org/wiki/Osborne_effect" rel="noopener" target="_blank">Osborning</a> macOS&#8217; AppKit framework.</p>
<p>But&#8230; what if this is all sound and fury, signifying nothing? What if tasty Marzipan turns out to be a big Nothingburger? Because that could well be how it pans out instead.<br />
<span id="more-4284"></span></p>
<h3>The Argument For</h3>
<p>So, the case for Marzipan (that&#8217;s the code name that came up in all the rumors earlier this year, and what everyone understands, so let&#8217;s go with it) is something like this: there are a lot more iOS developers than Mac developers, and they&#8217;re writing code that is <i>this close</i> to working on the Mac. Simplify that process and you get a flood of Mac apps for free.</p>
<p>Another version of this argument is phrased as a criticism of macOS&#8217; user interface framework: AppKit is too hard for developers coming over from iOS, it&#8217;s too different, it has crappy old legacy stuff that&#8217;s waved off as &#8220;you had to be there&#8221;. <code>NSTableView</code>s don&#8217;t work quite like <code>UITableView</code>s, <code>NSViewController</code>s aren&#8217;t exactly like <code>UIViewController</code>s, and so on. It&#8217;s too off-putting for indie developers, and an unwanted expense for corporations to have to find and hire developers who know and like AppKit.</p>
<h3>Side-Eye</h3>
<p>Maybe I&#8217;m not bringing sufficient enthusiasm to the argument in favor, but the above is pretty much it, as I see it.</p>
<p>And this is where I jump off the Marzipan hype train. Because the above is <i>an argument in favor of laziness and cheapness</i>, which are two things we do not typically associate with developing for Apple platforms.</p>
<p><img src="http://subfurther.com/blog/wp-content/uploads/2018/06/meiya-steadfast.jpg" alt="Meiya steadfast" alt="Meiya: Honestly, you should be more steadfast in your resolve" title="meiya-steadfast.jpg" border="0" width="640" height="360" /></p>
<p>Is it really that hard to share a codebase between Mac and iOS? I just sent off the &#8220;other platforms&#8221; chapter of <a href=https://pragprog.com/book/caxcode/xcode-treasures" rel="noopener" target="_blank"><i>Xcode Treasures</i></a>, and one of the sections is about creating multi-platform projects. The book shows how to add tvOS to an iOS project from earlier in the book, but the idea is the same regardless of which platforms you support: portion off the code you can into cross-platform frameworks, ideally leaving only platform-specific UI code in each platform&#8217;s targets.</p>
<p><img src="http://subfurther.com/blog/wp-content/uploads/2018/06/xcode-file-inspector-multiple-target-membership.png" alt="Xcode file inspector multiple target membership" title="xcode-file-inspector-multiple-target-membership.png" border="0" width="311" height="220" /></p>
<p>This is more plausible than you might initially realize, because the platforms share a <b>lot</b> of code under the hood: Foundation, Core Location, StoreKit… these are all on iOS, macOS, and tvOS (and some are even on watchOS). Even the underpinnings of the UI are cross-platform: Core Graphics, Core Animation, Core Text, AV Foundation, etc., all exist across the Apple platforms. That&#8217;s why it makes sense for the documentation sets to have merged a few years ago: you don&#8217;t need four copies of <code>NSURL</code> docs when it&#8217;s the largely same thing everywhere.</p>
<p>Yes, you would want to be thoughtful about how you architect your code so it builds and runs on all these platforms. 10,000-line view controllers are going to be much harder to port than small, embeddable VCs, where you&#8217;ll have more control over which to put in their own windows versus embedding in parent VCs, etc. (Dave DeLong&#8217;s <a href="https://davedelong.com/blog/2017/11/06/a-better-mvc-part-1-the-problems/" rel="noopener" target="_blank">A Better MVC</a> is a crucial guide here). In fact, I&#8217;ve found that using embedded VCs is also critical to making apps that work well on iPhone and iPad &#8212; it gives you flexibility with scenes that need a full screen on the phone but maybe could be part of a bigger scene on the tablet.</p>
<p>I can also imagine an <a href="https://en.wikipedia.org/wiki/Model–view–viewmodel" rel="noopener" target="_blank">MVVM</a> approach being good for a UIKit/AppKit hybrid, because the logic you put in the view models would likely be fairly cross-platform, leaving just platform-specific code remaining in a small view controller.</p>
<p>But here&#8217;s the painful part: the techniques to do these things are already available, well-known, <i>and very few people are using them.</i> There are still lots of iPhone-only apps, or apps that make poor use of the iPad and just let their table views stretch out to infinity. And as for tvOS… <b>it already runs UIKit</b>. Your scenes are actual damn <code>UIViewController</code>s. And yet look at the dearth of TV apps. <b>We&#8217;ve had Marzipan on the TV for years and almost nobody uses it.</b></p>
<p>That&#8217;s something that makes me skeptical about the Marzipan dream. Developers who give a crap are already able to make this kind of thing work, and developers who don&#8217;t give a crap aren&#8217;t going to do it no matter how easy you make it.</p>
<p>IIUC, <a href="https://twitterrific.com/mac" rel="noopener" target="_blank">Twitterrific</a> builds for both macOS and iOS from the same code-base, and the IconFactory is a small shop. But maybe that&#8217;s the point: it&#8217;s made by a small team that knows, cares, and enjoys what they&#8217;re doing. Exactly the kind of people that make the best Mac and iOS apps. Exactly <b>not</b> the kind of people you target a cross-platform framework at.</p>
<h3>Repulsed by Electrons</h3>
<p>To be clear, the enemy is not other Apple-platform developers. The enemy is the use of bloated, cross-platform, phone-it-in frameworks. &#8220;Write once, run everywhere&#8221; has been promised and come up wanting for decades: Java applications and applets, Adobe AIR, Xamarin, PhoneGap, and so on. One semi-success story of recent years are the various approaches like Electron and Chromium, which effectively embed an entire instance of the Chrome web browser in an app wrapper. This approach is used by such Mac apps as Slack, Discord, and Spotify.</p>
<p>It is also a goddamned scourge, and straight up an abuse of the end-user&#8217;s equipment.</p>
<blockquote class="twitter-tweet" data-width="520" data-dnt="true">
<p lang="en" dir="ltr">See, that&#39;s what makes me mad. I think developers who use those are literally *stealing* the functionality that their users paid for. It&#39;s like saying &quot;I have a greater claim to your CPU and RAM, and that is that I&#39;m too lazy to learn native languages &amp; APIs.&quot;</p>
<p>&mdash; Chris Adamson (@invalidname) <a href="https://twitter.com/invalidname/status/1002660801675751424?ref_src=twsrc%5Etfw">June 1, 2018</a></p></blockquote>
<p><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></p>
<p>But here&#8217;s a thought: is this approach popular because writing webapp code is inherently easier or more productive? Or is it the value in the fact that the webapp code has already been written &#8212; for the web page &#8212; and this just gives it a suitable environment to run in?</p>
<p>Because in that case, screw the app, you might as well just run the web version:</p>
<blockquote class="twitter-tweet" data-width="520" data-dnt="true">
<p lang="en" dir="ltr">Here’s a thought: save 1.5 GB of RAM by quitting the “native” Slack and Discord apps and just run them in the browser instead. <a href="https://twitter.com/hashtag/ElectronSucks?src=hash&amp;ref_src=twsrc%5Etfw">#ElectronSucks</a> <a href="https://t.co/KR78ByNfDp">pic.twitter.com/KR78ByNfDp</a></p>
<p>&mdash; Chris Adamson (@invalidname) <a href="https://twitter.com/invalidname/status/1005157465653235712?ref_src=twsrc%5Etfw">June 8, 2018</a></p></blockquote>
<p><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></p>
<p>And this is something that not a lot of us probably want to admit, but a <b>lot</b> of iOS apps are de facto replacements for webapps, and make sense on mobile primarily because of the limits of mobile web browsers and the impracticality of juggling lots of open tabs on the phone.</p>
<p>Back in my Java days, author Bruce Tate&#8217;s <a href="https://amzn.to/2ljws1D" rel="noopener" target="_blank"><i>Beyond Java</i></a> raised hackles by exposing an unpleasant truth about web development: most of it consists of connecting databases to web pages. Well you know what, a lot of iOS apps consist of connecting databases to <code>UITableView</code>s. The presentation ends up being different, but the concept really isn&#8217;t.</p>
<p>In fact, look at the four Marzipan apps being included with macOS Mojave: News, Stocks, Voice Memos, and Home. The first two of those are basically web pages.</p>
<p><img src="http://subfurther.com/blog/wp-content/uploads/2018/06/craig-and-marzipan-apps.jpg" alt="Icons of Marzipan apps: News, Stocks, Voice Memos, Home" title="craig-and-marzipan-apps.jpg" border="0" width="480" height="270" /></p>
<p>In fact, they may not even be as good as competitive web pages. If you&#8217;re interested in stocks, and you have an online broker, aren&#8217;t you going to be better served by the Charles Schwab or Ameritrade page, which will have not just price data but access to your account? Is the News app really competitive with the wealth of news websites? And what is it about being double-clickable apps that gives them any kind of advantage over web pages?</p>
<p>How many iOS apps out there are basically duplicating web pages? What&#8217;s the advantage of a Netflix or Hulu macOS app over their web page equivalents? In many cases, their current iOS apps have <b>less</b> functionality than their web versions: you often can only manage users and queues in the web version. Or consider how the Pandora iOS app is basically playback-only: if you want to create a new custom station, you need to use the web page. Why would I want the minimally-functional iOS app brought to macOS, when a more functional equivalent just requires popping open a new Safari tab?</p>
<p>The web is all about content consumption. That&#8217;s what browsers, not apps, are for.</p>
<p>Sure, there are exceptions, because some iOS apps do real work (<a href="https://overcast.fm/podcasts" rel="noopener" target="_blank">Overcast</a> would be an obvious example). But for the most part, I have a hard time thinking of iOS apps that I wish I had on my Mac.</p>
<p>Anyone keen on replacing their Steam game collection with free-to-play games from their phone? I thought not.</p>
<h3>Share and Share Alike</h3>
<p>One more thing: macOS development has a ethos of completeness and interoperability that doesn&#8217;t exist on iOS. Any Mac app worth its salt supports copy-and-paste and undo-redo, but in my experience, these features are rare in iOS (beyond the degree to which they&#8217;re provided by system UI widgets). In fact, I used to do a conference session about copy/paste and undo/redo, framed as an &#8220;80&#8217;s flashback&#8221; because it feels like the secrets of these APIs have all but been lost to time.</p>
<p><iframe src="https://www.slideshare.net/slideshow/embed_code/key/lkkbZ7ETYvy6au" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> </p>
<div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/invalidname/attack-ofthe80scocoaconfchicago2015" title="Revenge of the 80s: Cut/Copy/Paste, Undo/Redo, and More Big Hits (CocoaConf Chicago, 2015)" target="_blank">Revenge of the 80s: Cut/Copy/Paste, Undo/Redo, and More Big Hits (CocoaConf Chicago, 2015)</a> </strong> from <strong><a href="https://www.slideshare.net/invalidname" target="_blank">Chris Adamson</a></strong> </div>
<p><br clear="all/><br clear="all/>If I start seeing Mac apps where Edit > Undo is grayed out, and cmd-C does nothing but beep, those apps are likely going straight into the trash.</p>
<h3>The Future!</h3>
<p>The thing is &#8212; and this proves how crappy a Cassandra I am (and how I don&#8217;t have access to any big-time secrets) &#8212; when I first read the Marzipan rumors, I assumed they were a misreading of a more interesting, more ambitious project.</p>
<p>Because if I were a software architect looking at these platforms, I&#8217;d be pretty frustrated by the cruft, and in particular how the frameworks are unable to take advantage of new programming languages and paradigms.</p>
<p>I had a rant in a now-lost <a href="https://micro.blog" rel="noopener" target="_blank">micro.blog</a> reply I sent to <a href="https://dimsumthinking.com/Blog/index.html" rel="noopener" target="_blank">Daniel Steinberg</a>, the gist of which is how there are four paradigms for asynchronous events in Cocoa and Cocoa Touch, and three of them are poorly-suited to Swift. Key-Value Observing requires that the observing object subclass <code>NSObject</code>, and implement <code>observeValue(forKeyPath:of:change:context)</code> (a method that necessarily becomes a switchboard once you&#8217;re observing more than one key path). Target-action and delegation both require dynamic dispatch: either as storing a selector to call on the target, or to look up whether the delegate implements a given method. That&#8217;s great for Objective-C, less so for Swift.</p>
<p>Thing is, both of these languages now support executable code (and captured scope) as a type: Objective-C blocks and Swift closures. That&#8217;s why all the new frameworks tend to use handler-style APIs: you pass in a block to be executed when something interesting happens (a task completes, a timer fires, etc.). This last style is the most familiar to developers raised on <code>onClick</code> and leads naturally to modern styles of programming, like the <a href="https://github.com/ReactiveX/RxSwift" rel="noopener" target="_blank">RxSwift</a> that&#8217;s so <a href="http://subfurther.com/blog/2017/03/13/rxnot/" rel="noopener" target="_blank">beloved by hipsters</a>.</p>
<p>I can totally see a future UI framework that unifies UIKit and AppKit in a form that makes much more sense for Swift than either does today. That&#8217;s something to get excited about. It could be a long way off, if it&#8217;s even in the cards at all.</p>
<p>But in the meantime, the prospect of zero-effort iOS ports doesn&#8217;t sound like it&#8217;s going to bring a lot of value to my Mac. It&#8217;s fine that Apple&#8217;s doing it, but for the time being, the Marzipan hype train just gets a shrug from me. And if I do feel the need to get moving on a Mac app &#8212; I keep thinking about making <a href="https://github.com/invalidstream/dvdivvy" rel="noopener" target="_blank">DVDivvy</a> a real app now that QuickTime&#8217;s days are numbered &#8212; there&#8217;s no question I&#8217;ll go directly to AppKit to do it.</p>
]]></content:encoded>
			<wfw:commentRss>http://subfurther.com/blog/2018/06/17/apple-didnt-kill-appkit-millenials-did/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Xcode Treasures: Source Code Management</title>
		<link>http://subfurther.com/blog/2018/05/31/xcode-treasures-source-code-management/</link>
		<comments>http://subfurther.com/blog/2018/05/31/xcode-treasures-source-code-management/#respond</comments>
		<pubDate>Thu, 31 May 2018 18:01:24 +0000</pubDate>
		<dc:creator><![CDATA[Chris Adamson]]></dc:creator>
				<category><![CDATA[publishing]]></category>
		<category><![CDATA[xcode]]></category>

		<guid isPermaLink="false">http://subfurther.com/blog/?p=4272</guid>
		<description><![CDATA[Another update to the Xcode Treasures beta has been released today. This one is all about Source Code Management. To be honest, this could well have been called The Git Chapter, since Xcode&#8217;s protocol-agnostic source control features are dropping support for Subversion, leaving Git as the Highlander-style there-can-only-be-one winner. And to be even more honest, [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Another update to the <a href="https://pragprog.com/book/caxcode/xcode-treasures" rel="noopener" target="_blank"><i>Xcode Treasures</i></a> beta has been released today. This one is all about <b>Source Code Management</b>.</p>
<p><img src="http://subfurther.com/blog/wp-content/uploads/2018/05/scm-toc.png" alt="Scm toc" title="scm-toc.png" border="0" width="597" height="150" /><br />
<span id="more-4272"></span><br />
To be honest, this could well have been called <b>The Git Chapter</b>, since Xcode&#8217;s protocol-agnostic source control features are dropping support for Subversion, leaving Git as the <i>Highlander</i>-style there-can-only-be-one winner.</p>
<p>And to be even more honest, this chapter more than any other owns up to limitations in Xcode. Our IDE of well-we-didn&#8217;t-really-have-a-choice doesn&#8217;t offer every Git command, and doesn&#8217;t even try to. Some commands, like <code>bisect</code>, would require an entirely different UI to implement, and the hard-core history-rewriting commands like <code>cherry-pick</code> and <code>rebase</code> are apparently above Xcode&#8217;s pay grade.</p>
<p>So what&#8217;s the point? In practice, a lot of developers <b>do</b> use Xcode&#8217;s Git support… in addition to using some other system like the command-line or the GitHub app. Some people use Xcode&#8217;s nice UI for doing visual diffs; others do simple commits in Xcode rather than losing their momentum by switching apps. The chapter gets into the features you might decide to pick and choose.</p>
<p>Also, it has one of my editor&#8217;s favorite jokes/references in the whole book (it&#8217;s either this, or the &#8220;duck season / wabbit season&#8221; joke back in chapter 6):</p>
<p><a href="http://subfurther.com/blog/wp-content/uploads/2018/05/xcode-conflict-resolution-1.png" rel="noopener" target="_blank"><img src="http://subfurther.com/blog/wp-content/uploads/2018/05/xcode-conflict-resolution-1.png" alt="Xcode conflict resolution" title="xcode-conflict-resolution.png" border="0" width="599" height="218" /></a></p>
<p>And, for those of you who end up outside of Xcode, there&#8217;s a section on how to resolve conflicts on the command-line with <code>/Applications/Utilities/FileMerge</code>:</p>
<p><img src="http://subfurther.com/blog/wp-content/uploads/2018/05/filemerge-resolve-merge-conflict.png" alt="Filemerge resolve merge conflict" title="filemerge-resolve-merge-conflict.png" border="0" width="598" height="293" /></p>
<p>To top it off, there are even some tips on resolving merge conflicts in project files and storyboards, along with some finger-wagging about better development practices that would have kept hypothetical you from having a storyboard merge conflict in the first place (but, yes, you can make sense of the storyboard XML and resolve a merge conflict by hand if you&#8217;re brave… I&#8217;ve actually done it myself a few times and I&#8217;m not dead yet).</p>
]]></content:encoded>
			<wfw:commentRss>http://subfurther.com/blog/2018/05/31/xcode-treasures-source-code-management/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Xcode Treasures: Security</title>
		<link>http://subfurther.com/blog/2018/05/10/xcode-treasures-security/</link>
		<comments>http://subfurther.com/blog/2018/05/10/xcode-treasures-security/#respond</comments>
		<pubDate>Thu, 10 May 2018 23:06:18 +0000</pubDate>
		<dc:creator><![CDATA[Chris Adamson]]></dc:creator>
				<category><![CDATA[publishing]]></category>
		<category><![CDATA[xcode]]></category>

		<guid isPermaLink="false">http://subfurther.com/blog/?p=4262</guid>
		<description><![CDATA[The first update to the Xcode Treasures beta release went out yesterday, and it&#8217;s a doozy: Security. Actually, in my original proposal and outline for the book, this was called Code-Signing Hell. Obviously, I knew I had to cover it, but was not looking forward to the experience. As I dug into the material again [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>The first update to the  <a href="https://pragprog.com/book/caxcode/xcode-treasures" rel="noopener" target="_blank"><i>Xcode Treasures</i></a> beta release went out yesterday, and it&#8217;s a doozy: <b>Security</b>. Actually, in my original proposal and outline for the book, this was called <b>Code-Signing Hell</b>. Obviously, I knew I had to cover it, but was not looking forward to the experience.</p>
<p><img src="http://subfurther.com/blog/wp-content/uploads/2018/05/xcode-treasures-security-toc.png" alt="Xcode treasures security toc" title="xcode-treasures-security-toc.png" border="0" width="597" height="138" /><br />
<span id="more-4262"></span><br />
As I dug into the material again &#8212; we did cover code-signing and App Store submission in <a href="https://pragprog.com/book/caxcode/xcode-treasures" rel="noopener" target="_blank"><em>iOS 10 SDK Development</em></a> and its predecessors, after all &#8212; it turns out that the approach of this new book really helped out. After all, everything Xcode touches is fair game, so I could start with a simple Mac-only concept: sandboxing. That lets the chapter start of with a simple introduction to the current target&#8217;s capabilities tab, before getting into the whole kielbasa of iOS code-signing and App Store submission.</p>
<p>After a simple look at local-only sandbox concerns, things actually fell into place for a coherent narrative. Go beyond sandboxing and you find that there are capabilities like push notifications and iCloud that touch Apple&#8217;s backend or the user&#8217;s private data, and therefore require <em>entitlements</em>. And to deal with entitlements, you&#8217;ll need an AppID that specifies your entitlements, which you manage at <a href="https://developer.apple.com/account">https://developer.apple.com/account</a>.</p>
<p>And when you find the AppID in the &#8220;Certificates, Identifiers, and Profiles&#8221; section, you&#8217;re already on top of the other two parts of the equation: the profile that will connect an AppID to a permitted action like installing on a development device or distributing via the App Store, and the certificate that you use to sign it, thereby proving your identity to Apple and ultimately your end-users.</p>
<p>Xcode&#8217;s automatic signing helps to teach this stuff, because you can let it generate all of these for you automatically. It makes it much easier to get to the final step, which covers manual signing. That&#8217;s a pain, but it feels like having made the journey there step-by-step, you can see how the pieces fit together, and take care of it yourself (if you must).</p>
<p><img src="http://subfurther.com/blog/wp-content/uploads/2018/05/xcode-project-editor-general-signing-manual.png" alt="Xcode project editor general signing manual" title="xcode-project-editor-general-signing-manual.png" border="0" width="599" height="317" /></p>
<p>It really helps that my editor, Tammy Coron, is also an Xcode user and has had to deal with app-signing struggles, so she was able to make sure the line through this material was clean (she had me rearrange some stuff where AppIDs get introduced), and pushed me to really justify manual signing in the era of automatic signing.</p>
<p>The other thing that helped this fall into place was re-titling the chapter &#8220;Security&#8221;, although at first that&#8217;s misleading. This isn&#8217;t entirely about Xcode keeping you secure. By and large, these systems exist to protect Apple and its users <strong>from you</strong>, or at least someone pretending to be you. It doesn&#8217;t feel great to have to jump through hoops and show your bona fides to get your app up on the store, but it&#8217;s not unjustified either. </p>
<p>And honestly, it&#8217;s a hell of a lot better than it used to be. For me, the biggest improvement has been that you can have one development certificate per machine, rather than per account. In the bad old days, you&#8217;d inevitably caught on your laptop with a bad configuration, have to manually revoke your old cert and create a new one, and then clean up everything when you get back to your desktop Mac. Multiple development certs, plus automatic signing, made this material a lot easier to write than it was five years ago.</p>
]]></content:encoded>
			<wfw:commentRss>http://subfurther.com/blog/2018/05/10/xcode-treasures-security/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Xcode Treasures Now Available</title>
		<link>http://subfurther.com/blog/2018/04/25/xcode-treasures-now-available/</link>
		<comments>http://subfurther.com/blog/2018/04/25/xcode-treasures-now-available/#comments</comments>
		<pubDate>Wed, 25 Apr 2018 14:37:01 +0000</pubDate>
		<dc:creator><![CDATA[Chris Adamson]]></dc:creator>
				<category><![CDATA[publishing]]></category>
		<category><![CDATA[xcode]]></category>

		<guid isPermaLink="false">http://subfurther.com/blog/?p=4235</guid>
		<description><![CDATA[Announcement from Pragmatic Progammers today: Xcode Treasures: Master the Tools to Design, Build, and Distribute Great Apps is now in beta. So, this is the book that I&#8217;ve been cagily dropping hints about on Twitter for months, and that I showed off at CocoaHeads Ann Arbor two weeks back. I&#8217;ve also started creating videos for [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Announcement from Pragmatic Progammers today: <a href="https://pragprog.com/book/caxcode/xcode-treasures" rel="noopener" target="_blank"><i>Xcode Treasures: Master the Tools to Design, Build, and Distribute Great Apps</i></a> is now in beta.</p>
<p><img src="https://imagery.pragprog.com/products/540/caxcode_xlargebeta.jpg?1524504240" align="right"/></p>
<p>So, this is the book that I&#8217;ve been cagily dropping hints about on Twitter for months, and that I showed off at <a href="https://www.meetup.com/A2-CocoaHeads/events/249163669/" rel="noopener" target="_blank">CocoaHeads Ann Arbor</a> two weeks back. I&#8217;ve also started creating videos for it as part of <a href="http://invalidstream.com/" rel="noopener" target="_blank">invalidstream</a>, where you can already check out demos from the Debugging chapter (parts <a href="https://vimeo.com/264206749" rel="noopener" target="_blank">1</a>, <a href="https://vimeo.com/265492143" rel="noopener" target="_blank">2</a>, and <a href="https://vimeo.com/266462062" rel="noopener" target="_blank">3</a>).<br />
<span id="more-4235"></span></p>
<h3>Targets</h3>
<p>Let&#8217;s hold up: WTF is this book anyways? Is it a new version of the Prags&#8217; introductory <i>iOS 8|9|10 SDK Development</i> book? Nope, we decided to something radically different this year, something for readers at different stages of their development.</p>
<p><i>Xcode Treasures</i> is about Xcode itself, not about any of the SDKs. In fact, while the default mindset is Swift + iOS, the book contains examples for iOS, macOS, tvOS, and watchOS, written in Swift, Objective-C, and even plain ol&#8217; procedural C. The idea is, I&#8217;ll use whatever form best suits the topic at hand. Want to see how the Address Sanitizer works? You&#8217;ll need to write some crashing C code for that. Interested in Auto Layout? I think you get the gist better by making a Mac window with Auto Layout and resizing it yourself: you get real time feedback on how your constraints are being applied.</p>
<p><a href="http://subfurther.com/blog/wp-content/uploads/2018/04/mac-layout-demo-equal-widths.png"><img src="http://subfurther.com/blog/wp-content/uploads/2018/04/mac-layout-demo-equal-widths.png" alt="" width="517" height="120" class="alignnone size-full wp-image-4245" /></a></p>
<p>None of the examples are so hard or so deep that you can&#8217;t at least get the idea of what&#8217;s going on, even if it&#8217;s out of your usual wheelhouse. And if it inspires you to try out one of the other Apple platforms or languages, better yet.</p>
<p>Because the thing is, the real goal of the book is to come to a deeper understanding of Xcode itself. Think of how you usually use it: you start with a template like &#8220;Single-View App for iOS&#8221; or &#8220;Metal Game for Mac&#8221;, or &#8220;TVML App&#8221; and it&#8217;s all set to build and run as-is, even with no functionality. Then you start adding code and art. And sooner or later, you find that you have some sort of unusual or advanced need, and maybe you can&#8217;t figure it out because all the time you saved by starting from a template rather than building a project from first principles meant you never had to see how Xcode really works.</p>
<p>At this point, maybe you conclude that Xcode is dumb and can&#8217;t do what you need, when really you&#8217;ve only ever used 10% of what Xcode can do, and there&#8217;s not a clear path to see how the other 90% works.</p>
<p><a href="http://subfurther.com/blog/wp-content/uploads/2018/04/xcode-view-hierarchy-debugger.png"><img src="http://subfurther.com/blog/wp-content/uploads/2018/04/xcode-view-hierarchy-debugger.png" alt="Xcode view debugging" width="568" height="389" class="alignnone size-full wp-image-4247" /></a></p>
<h3>Preferences</h3>
<p>Doing something different than the usual beginner book was one of my inspirations for writing this book, but there was another: I want to answer the sort of lazy cynicism that has emerged about Xcode in some developer circles. So much of social media rewards takedowns and hot takes, so you can always collect social status just by ripping on Xcode. Problem is, newcomers to development on the Apple platforms see this and emulate it as a means of elevating their own status within the community. Of course, that&#8217;s not specific to Apple developers: if you want instant street cred among anime fans, just tweet &#8220;<i>Sword Art Online</i> sucks&#8221; and everyone will tell you how right and good you are. Same goes for throwing around the term &#8220;late-stage capitalism&#8221; like you are genuinely credentialed to predict the future of world economics. Dump on stuff and people will reward you for it. Even as a life-long pessimist, I&#8217;ve grown tired of this racket.</p>
<p>The book&#8217;s working title was <i>No Regrets Xcode</i>, and at one point, I toyed with proposing <i>Xcode for People Who Hate Xcode</i> as a title. But a full-throated defense of Xcode is an essay or a blog, not a programming book. Instead, I hope to prove by example &#8212; many, <strong>many</strong> examples &#8212; that Xcode is better than you think it is.</p>
<p>Now, I&#8217;m not blindly loyal either. I see all those 1-star reviews for <a href="https://geo.itunes.apple.com/us/app/xcode/id497799835?mt=12&#038;at=10l4Gc" rel="noopener" target="_blank">Xcode on the Mac App Store</a>. And one of my tech reviewers pointed out that despite my cheerleader-y tone, he has filed hundreds of bugs with Xcode, and I&#8217;m sure they&#8217;re all valid.</p>
<p>My argument is this: to me, Xcode is indeed plagued by the same reliability problems that affect most Apple software in the current era (c.f., Marco Arment&#8217;s <a href="https://marco.org/2015/01/04/apple-lost-functional-high-ground" rel="noopener" target="_blank">Apple Has Lost the Functional High Ground</a>). It&#8217;s worse because we as developers depend on Xcode to get our work done. But how do you think people who depend on the Pro video apps feel right now? High Sierra has a been a disaster for them, and as just a part-time video guy, I&#8217;m often hobbled by lock-ups in Final Cut Pro, or this <a href="https://discussions.apple.com/thread/8086765" rel="noopener" target="_blank">insane bug</a> in Compressor where output files were many times larger than configured, but only on the 2013 Mac Pro (I was <a href="https://discussions.apple.com/thread/8086765" rel="noopener" target="_blank">not happy</a> about this one). And let us not even speak of iTunes and its myriad problems.</p>
<p>So, yes, Xcode is flawed. But is it <em>fundamentally</em> flawed? Is there some core concept &#8212; its multi-paned single window UI, its scriptable build system, the nature of app bundles and code signing &#8212; that makes it impossible for Xcode to <em>ever</em> be good? I don&#8217;t believe anyone is making this argument. The closest you get to this is storyboard haters who build their UIs in code. I disagree with that camp, but even if I didn&#8217;t, that alone is not enough to relegate all of Xcode to junk status.</p>
<p><a href="http://subfurther.com/blog/wp-content/uploads/2018/04/ib-make-programmatic-segue.png"><img src="http://subfurther.com/blog/wp-content/uploads/2018/04/ib-make-programmatic-segue.png" alt="Creating storyboard segues" width="539" height="136" class="alignnone size-full wp-image-4251" /></a></p>
<h3>Connections</h3>
<p>So yeah, I&#8217;m playing a contrarian game here. That&#8217;s why the cover of the book is such a wonderful design that everyone fell in love with when we saw it. On the one hand, gold + apple. But it&#8217;s also the <a href="https://en.wikipedia.org/wiki/Apple_of_Discord" rel="noopener" target="_blank">Golden Apple</a> that goddess of discord Eris used to spark an argument between rival goddesses and, ultimately, lead to the Trojan War. With all the arguments about Xcode, what better thing to put on the cover than the literal icon of strife?</p>
<p><a href="http://subfurther.com/blog/wp-content/uploads/2018/04/macaddict-1-smaller.jpg"><img src="http://subfurther.com/blog/wp-content/uploads/2018/04/macaddict-1-smaller.jpg" alt="" width="295" height="390" class="alignright size-full wp-image-4239" /></a></p>
<p>But I&#8217;m also reminded of another contrarian play. <i>MacAddict</i> magazine launched at the nadir of the Mac, in September 1996, when the Mac was getting walloped by Windows 95. And yet look at the cover of the <a href="https://archive.org/details/MacAddict-001-199609" rel="noopener" target="_blank">first issue</a>: &#8220;Why the Mac&#8217;s future is bright&#8221;.</p>
<p>And you know what, <em>they were right</em>. Even despite the fact that not only were the financials bad, but the Mac itself had a lot of problems: this was the era of Type 11 errors destroying all your work, and software companies goosing their stock price by publicly announcing they were dropping the Mac. In fact, this first issue even has a cover feature on how great OpenDoc is, even though OpenDoc turned out to be a software architecture wrong turn that eventually fizzled out.</p>
<p>MacAddict worked because its writers, editors, and readers knew that if you looked past these problems, the fundamental vision of the Mac as a tool for creation and communication was far more compelling than the Corporate Obedience mindset that Windows offered.</p>
<p>So, I&#8217;m making the case that it&#8217;s time to take a fresh look at Xcode. Acknowledge the bugs, sure. Hope that they get better. But beyond that, look at how nice the code editor is (and how you can customize it to suit your own tastes). Look at how the build system is smart about resolving dependencies, how you can set up your own build properties on a per-configuration basis or even run arbitrary scripts during the build, or run the whole thing from the command line and let Jenkins handle your CI. Think about how app slicing and on-demand resources make things better for your users by making smarter use of their limited on-device storage, and how Xcode gives you a UI for managing these assets visually. Behold the wonderfully clever power of LLDB to give you powerful breakpoint capabilities, and tools like Instruments, Main Thread Checker, Address Sanitizer and more.</p>
<p><a href="http://subfurther.com/blog/wp-content/uploads/2018/04/instruments-leaks-cycle.png"><img src="http://subfurther.com/blog/wp-content/uploads/2018/04/instruments-leaks-cycle.png" alt="Retain cycle debugging UI" width="464" height="240" class="alignnone size-full wp-image-4249" /></a></p>
<h3>Build and Run</h3>
<p>The <a href="https://pragprog.com/book/caxcode/xcode-treasures" rel="noopener" target="_blank">beta book</a> launching today has 7 chapters. Three more are fully written and will roll out over the next few weeks. Two more are still being written. After incorporating errata fixes and other feedback from readers, this should result in a final book in August or so. With books from the Prags, I always advocate getting the eBook or an eBook-plus-paper bundle directly from the Prags, because you get updates, and it includes all the formats you&#8217;d need: ePub for iBooks, .mobi for Kindle, and PDF.</p>
<p>[Update: Currently, only the ebook is available, because they can&#8217;t charge for something that won&#8217;t ship within 30 days, and the print edition is further out than that. ebook buyers will get a coupon offering upgrade pricing to the ebook + print bundle when it&#8217;s ready. Details on the Prags&#8217; <a href="https://pragprog.com/frequently-asked-questions/beta-books" rel="noopener" target="_blank">Beta Books FAQ</a>.]</p>
<p>The book&#8217;s home page also include three samples that you can check out for a taste of what&#8217;s covered. It was hard to pick, but I went with embedded scenes, code snippets, and build phases. All of these contain tricks and techniques you can apply to your own work right away.</p>
<p>I&#8217;m also really fortunate that editor Tammy Coron is also a long-time Xcode user, so she&#8217;s able to give me detailed feedback and have a fresh set of eyes on where the material does and doesn&#8217;t flow well, is and isn&#8217;t helping. Along with a lot of tech reviewer feedback (some of which I&#8217;m still working through), that&#8217;s making this a better book.</p>
<p>Hopefully you&#8217;ll all enjoy this deep dig into the depths of Xcode!</p>
]]></content:encoded>
			<wfw:commentRss>http://subfurther.com/blog/2018/04/25/xcode-treasures-now-available/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The Final Conf-Down</title>
		<link>http://subfurther.com/blog/2018/01/15/the-final-conf-down/</link>
		<comments>http://subfurther.com/blog/2018/01/15/the-final-conf-down/#comments</comments>
		<pubDate>Mon, 15 Jan 2018 23:57:43 +0000</pubDate>
		<dc:creator><![CDATA[Chris Adamson]]></dc:creator>
				<category><![CDATA[speaking]]></category>

		<guid isPermaLink="false">http://subfurther.com/blog/?p=4200</guid>
		<description><![CDATA[I tweeted this morning that I was working on updating my spreadsheet of upcoming iOS / macOS developer conferences, which I use to maintain a page of conferences (and anime conventions, because me) over on invalidstream.com. I also got into this research to provide a segment for the sporadic CocoaConf Podcast (iTunes, Overcast) This post [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>I <a href="https://twitter.com/invalidname/status/952888947876814848" rel="noopener" target="_blank">tweeted</a> this morning that I was working on updating my spreadsheet of upcoming iOS / macOS developer conferences, which I use to maintain a <a href="http://www.invalidstream.com/cons/" rel="noopener" target="_blank">page of conferences</a> (and anime conventions, because me) over on invalidstream.com. I also got into this research to provide a segment for the sporadic CocoaConf Podcast (<a href="https://itunes.apple.com/us/podcast/cocoaconf-podcast/id882941510?mt=2&#038;at=10l4Gc">iTunes</a>, <a href="https://overcast.fm/itunes882941510/cocoaconf-podcast" rel="noopener" target="_blank">Overcast</a>) This post is going to be about the changes in that scene I&#8217;ve seen recently.</p>
<p><a href="http://subfurther.com/blog/wp-content/uploads/2018/01/confs-spreadsheet.png"><img src="http://subfurther.com/blog/wp-content/uploads/2018/01/confs-spreadsheet.png" alt="Spreadsheet of upcoming iOS &amp; macOS developer conferences" width="649" height="500" class="alignnone size-full wp-image-4201" /></a><br />
<span id="more-4200"></span></p>
<p>The immediate and obvious takeaway is the significant contraction in this space over the last two years. By my count, the US now has only 9 conferences that are exclusively for iOS/macOS developers (in approximate chronological order for this year):</p>
<ul>
<li><a href="https://forwardswift.com" rel="noopener" target="_blank">Forward Swift</a></li>
<li><a href="https://teki-con.com" rel="noopener" target="_blank">Teki-Con</a></li>
<li><a href="https://www.rwdevcon.com" rel="noopener" target="_blank">RWDevCon</a></li>
<li><a href="http://360idev.com" rel="noopener" target="_blank">360iDev</a></li>
<li><a href="https://developer.apple.com/wwdc" rel="noopener" target="_blank">WWDC</a></li>
<li><a href="http://www.altconf.com" rel="noopener" target="_blank">AltConf</a></li>
<li><a href="https://swiftbynorthwest.com" rel="noopener" target="_blank">Swift by Northwest</a></li>
<li><a href="http://swiftsummit.com" rel="noopener" target="_blank">Swift Summit</a></li>
<li><a href="https://www.tryswift.co/events/2017/nyc/" rel="noopener" target="_blank">try! Swift NYC</a></li>
</ul>
<p>I say &#8220;only&#8221; because it was only about 4 years ago that <a href="http://cocoaconf.com" rel="noopener" target="_blank">CocoaConf</a> <em>ran more conferences than this by themselves in a single calendar year.</em> And now, CocoaConf itself is gone; its organizers, the Klein family, run a single annual conference in its place, Swift by Northwest. The remaining conferences are almost entirely held on the coasts in cities like NYC, DC, and of course SF. Only one is in the South, and none are in the Midwest, Texas, or the Southwest.</p>
<p>[It should also be noted that in some years, Apple runs a world-wide traveling series of &#8220;Tech Talks&#8221;, often when they have a new platform to build support for. The last one <a href="https://developer.apple.com/videos/techtalks-apple-tv/" rel="noopener" target="_blank">was in 2015</a>, and promoted the Apple TV SDK.]</p>
<p>In my spreadsheet, I use the event type &#8220;later&#8221; to denote a conference that is expected to be held in the next 12 months but doesn&#8217;t have a date yet, and &#8220;defunct&#8221; for conferences I believe will not be held again. As I said on Twitter, my criteria for defunct is &#8220;no events held in the last 12 months, and none scheduled as of now&#8221;. By that criteria, this is my list of recently-defunct Apple developer conferences:</p>
<ul>
<li><a href="http://min.360idev.com" rel="noopener" target="_blank">360iDev min</a></li>
<li><a href="http://cocoaconf.com" rel="noopener" target="_blank">CocoaConf</a></li>
<li><a href="https://cocoalove.org" rel="noopener" target="_blank">CocoaLove</a></li>
<li><a href="http://www.do-ios.com" rel="noopener" target="_blank">DO iOS</a></li>
<li><a href="http://www.indiedevstock.com" rel="noopener" target="_blank">IndieDevStock</a></li>
<li><a href="http://nsconference.com" rel="noopener" target="_blank">NSConference</a></li>
<li><a href="http://nsnorth.ca" rel="noopener" target="_blank">NSNorth</a></li>
<li><a href="https://nsscotland.com" rel="noopener" target="_blank">NSScotland</a></li>
<li><a href="http://www.playgroundscon.com" rel="noopener" target="_blank">Playgrounds</a></li>
<li><a href="http://ull.ie" rel="noopener" target="_blank">Úll</a></li>
</ul>
<p>I didn&#8217;t include <a href="https://releasenotes.tv" rel="noopener" target="_blank">Release Notes</a> on this list, because their most recent podcast episode made it clear that while they are not holding a 2018 event, they aren&#8217;t piling it in either; it sounds like they want to shift the time of year they hold their conference. Daniel Steinberg also <a href="https://twitter.com/dimsumthinking/status/952915062049648641" rel="noopener" target="_blank">tweeted at me</a> to say that both Do iOS and NSNorth have said they hope to return, and similar sentiments are expressed on the home pages of IndieDevStock and Playgrounds. So, you know, maybe they&#8217;re not <em>all</em> dead.</p>
<p>[Also, I&#8217;m not interested in tracking conferences that went away many years ago and will obviously never return, which is why I don&#8217;t bother with an entry for <a href="https://en.wikipedia.org/wiki/Voices_That_Matter" rel="noopener" target="_blank">Voices That Matter: iPhone Developers Conference</a> from seven years back or the <a href="http://conferences.oreillynet.com/macosx2002/" rel="noopener" target="_blank">O&#8217;Reilly Mac OS X Conference</a> from 15 years ago.]</p>
<p><a href="http://subfurther.com/blog/wp-content/uploads/2018/01/oreilly-osx-conf-bag.jpg"><img src="http://subfurther.com/blog/wp-content/uploads/2018/01/oreilly-osx-conf-bag.jpg" alt="OReilly Mac OS X Conference bag from like 2005 or something" width="605" height="454" class="alignnone size-full wp-image-4217" /></a></p>
<p>For the sake of keeping things interesting, I do track a few conferences that are &#8220;close enough&#8221; to be of interest to this community, like conferences for IT pros (<a href="https://www.macad.uk" rel="noopener" target="_blank">Mac Admin &#038; Developer Conference UK</a>, <a href="http://macadmins.psu.edu" rel="noopener" target="_blank">MacAdmins</a>), Mac power-user events (<a href="https://macstockconferenceandexpo.com" rel="noopener" target="_blank">MacStock</a>), and did you know that there&#8217;s actually a conference just for Filemaker developers? Because there actually is a <a href="http://www.filemaker.com/learning/devcon/" rel="noopener" target="_blank">FileMaker Developer Conference</a>. This variety is nice for the video scroll, which I use as an interstitial when I&#8217;m livestreaming, so I can give my voice a break.</p>
<p><iframe src="https://player.vimeo.com/video/251222608" width="520" height="293" frameborder="0" title="conference-roll-motion-jan-2018-h264" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe></p>
<p>But still, I think it&#8217;s interesting to note that there&#8217;s been an obvious, substantial contraction in the conference scene. Some of the survivors seem to be healthy (Ray Wenderlich says <a href="https://twitter.com/rwenderlich/status/953002097053544448" rel="noopener" target="_blank">RWDevCon is nearly sold out</a>), so is there any way to make sense of what is and isn&#8217;t working here? A few thoughts&#8230;</p>
<h3>iOS Is Old News</h3>
<p>The obvious explanation is that after 10 years, iOS is old news, that most people who want to work with it are already doing so, and there&#8217;s less travel/training money available. This makes sense, to a point, although if that&#8217;s the case, then how can the <a href="https://nofluffjuststuff.com/home/main" rel="noopener" target="_blank">No Fluff Just Stuff</a> tour be doing 17 events this year, hawking old warhorses like Java and Spring?</p>
<p>Still, the idea that iOS is old and unsexy can be seen in the fact that nearly every new conference focuses on Swift, even putting it in their name: dotSwift, try! Swift, Forward Swift, Swift by Northwest, Swift Summit, etc. Good for marketing, although as a speaker, I find it somewhat limiting: I don&#8217;t feel like I could do a talk on, say, debugging with Instruments or Auto Layout in storyboards, since those wouldn&#8217;t really be <em>about</em> Swift. One reason I&#8217;m not planning any talks this year is that I just don&#8217;t have anything novel or insightful to say about Swift at the moment, since I&#8217;m not currently working with it as much as a lot of other people are.</p>
<h3>Apple Development Is A Cargo Cult</h3>
<p><a href="http://subfurther.com/blog/wp-content/uploads/2018/01/IMG_4482.jpg"><img src="http://subfurther.com/blog/wp-content/uploads/2018/01/IMG_4482.jpg" alt="WWDC 2017 main entry" width="653" height="490" class="alignnone size-full wp-image-4213" /></a></p>
<p>Every conference is completely overshadowed by WWDC. It used to be that nobody wanted to hold a conference between June and October, because the new bits at WWDC would still be technically under NDA, so you officially couldn&#8217;t talk publicly about them. That meant that anything you could talk about was, by necessity, old news, which made an August conference a hard sell.</p>
<p>Today, WWDC is nearly impossible to get into, and all its videos are quickly made available to non-attendees (lately, most or all of them have been livestreamed). So if you&#8217;re just interested in getting Official Info from Cupertino, just standing in front of that firehose is all that&#8217;s necessary.</p>
<p>And honestly, that&#8217;s what most people want. If you see the platform as just a collection of APIs, tools, and languages, you could make the argument that third parties aren&#8217;t in a position to bring anything else to the table. It&#8217;s not like there are very many third-party tools that most iOS developers use &#8212; Cocoapods and Carthage, I suppose? Maybe SwiftLint? God forbid, RxSwift? But mostly it&#8217;s about the built-in bits. So if you can already get a session of those, why travel for something else?</p>
<p>[Well, I&#8217;d argue things like clarity, novelty, and honesty: speakers with real-world experience can talk about how the APIs hold up in real life or if they&#8217;re not as good as Apple says, they can offer insights into more advanced uses or unanticipated issues, they may be able to offer more passion and excitement than WWDC engineer-speakers, etc.]</p>
<h3>Few Personalities Can Sell Seats</h3>
<p>Another factor is whether or not people will come to see specific speakers, and who they are. Who&#8217;s really famous in iOS/macOS developer circles? It&#8217;s not like we have a lot of open-source projects with leaders that everyone follows. A lot of the conferences rely on book authors (like me), but book sales continue to decline, so I don&#8217;t suppose we&#8217;re much of a draw.</p>
<p>Bloggers? John Gruber of <a href="http://daringfireball.org" rel="noopener" target="_blank">Daring Fireball</a> speaks infrequently, such as at the <a href="https://2014.xoxofest.com/" rel="noopener" target="_blank">2014 XOXO Festival</a>, and of course in his live episode of The Talk Show every year during WWDC week. I don&#8217;t recall if Michael Tsai (whose <a href="https://mjtsai.com/blog/" rel="noopener" target="_blank">linkblog</a> is essential reading) ever does conferences, and I&#8217;m drawing a blank on other notable names.</p>
<p>Podcasters? We&#8217;re doing a little better there. Daniel Jalkut and Manton Reece of <a href="http://coreint.org" rel="noopener" target="_blank">Core Intuition</a> have both spoken at various conferences (including CocoaConfs in DC and Austin). OTOH, the <a href="http://atp.fm" rel="noopener" target="_blank">Accidental Tech Podcast</a> guys are infrequent speakers: I recall Casey Liss keynoting a CocoaConf DC, and Marco Arment recorded an <a href="https://www.relay.fm/radar" rel="noopener" target="_blank">Under The Radar</a> at CocoaConf Next Door during WWDC 2017 week, but that&#8217;s about it. OTOH, Curtis Herbert of <a href="http://independence.fm/" rel="noopener" target="_blank">Independence</a> speaks at several conferences, and was the organizer of the CocoaLove conference. Yosemite by CocoaConf used to always have Andy Ihnatko, but that conference appears to be done too.</p>
<h3>Is Staying Home An Option?</h3>
<p>Part of the problem with conference-going is that it&#8217;s damned expensive. Even if a conference keeps registration under four figures, big city hotel stays will often cost far more than the conference ticket, plus airfare and meals. You have to really pinch pennies just to keep a week at WWDC under $4000. That was one of the things I liked about CocoaConf: they toured and came to where the attendees were (so you could maybe drive to it), and they generally set up shop in inexpensive airport hotels rather than pricey downtown locations.</p>
<p>For international attendees, border crossings are also a hassle and risk, particularly given the ugly xenophobia that is now official US policy. It&#8217;s understandable that overseas developers would think twice about coming here (or, for that matter, that non-US nationals working for Apple would risk leaving the US for Tech Talks, since they might well not be let back in).</p>
<p>And when you think about it, if most people in the world are experiencing WWDC on a screen, maybe that&#8217;s the way other conferences should go too.</p>
<p>This weekend, I attended <a href="https://vnconf.com" rel="noopener" target="_blank">Visual;Conference</a>, a seven-hour online webinar for developers/writers/artists working on <a href="https://en.wikipedia.org/wiki/Visual_novel" rel="noopener" target="_blank">visual novels</a>. The presentations were all streamed via GoToWebinar, with back-channel chat and questions to speakers handled by a Discord channel. For $10 I got to participate, hang out in my slob clothes, have a <a href="https://twitter.com/invalidname/status/952255814630289408" rel="noopener" target="_blank">beer and nachos for lunch</a>, and still learn about <a href="https://twitter.com/invalidname/status/952293499294150657" rel="noopener" target="_blank">the iOS app that makes $1 million <strong>per day</strong></a>.</p>
<p><a href="http://subfurther.com/blog/wp-content/uploads/2018/01/vnconf-banner.png"><img src="http://subfurther.com/blog/wp-content/uploads/2018/01/vnconf-banner.png" alt="Banner from vnconf.com" width="531" height="277" class="alignnone size-full wp-image-4207" /></a></p>
<p>Videos from Visual;Conference 2018 are available as a <a href="https://www.youtube.com/watch?v=cW7qEfd0Ygo&#038;list=PLsXG4_BY8moz115WTn73dj5DyJghBqB4o" rel="noopener" target="_blank">playlist</a> from the conference&#8217;s <a href="https://www.youtube.com/channel/UCQtQMEIQkh3ajtx_BMemvIA" rel="noopener" target="_blank">YouTube channel</a>.</p>
<p>Maybe we can bring these worlds together. Not that a WWDC session is ever going to begin by saying &#8220;Spoilers for <em>Doki Doki Literature Club</em>, everyone…&#8221; (though wouldn&#8217;t that be great?), but maybe someone should give an online iOS/macOS conference a shot? It might be particularly good for a niche topic that maybe only 50-100 people in the world are going to be interested in. Although even with this approach there are problems with time zones, since you aren&#8217;t bringing speakers and attendees together physically &#8212; Visual;Conference started with its Japanese speakers at 11AM ET / 8AM PT, even though this was 1AM for the speakers Japan-time, and they were gracious staying up that late for us. If you wanted to hold an online conference open even to just Europe and the Americas, it&#8217;s going to be either too early for someone, too late for someone else, or both.</p>
<p>Honestly, I&#8217;d rather have CocoaConf back, but since that&#8217;s not happening, and there is literally not an Apple developer conference within a day&#8217;s drive of me this year, I guess I&#8217;m stuck.</p>
]]></content:encoded>
			<wfw:commentRss>http://subfurther.com/blog/2018/01/15/the-final-conf-down/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Video Killed the Prose Star</title>
		<link>http://subfurther.com/blog/2018/01/14/video-killed-the-prose-star/</link>
		<comments>http://subfurther.com/blog/2018/01/14/video-killed-the-prose-star/#respond</comments>
		<pubDate>Mon, 15 Jan 2018 02:48:13 +0000</pubDate>
		<dc:creator><![CDATA[Chris Adamson]]></dc:creator>
				<category><![CDATA[publishing]]></category>
		<category><![CDATA[streaming]]></category>

		<guid isPermaLink="false">http://subfurther.com/blog/?p=4190</guid>
		<description><![CDATA[I&#8217;m always surprised by the popularity of video lessons. Personally, I prefer the density of books, but there&#8217;s clearly an audience out there that wants to see things done step-by-step on screen, while watching and listening to the presenter. Every time I get a royalty statement on the Core Audio book, there&#8217;s a little bit [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>I&#8217;m always surprised by the popularity of video lessons. Personally, I prefer the density of books, but there&#8217;s clearly an audience out there that wants to see things done step-by-step on screen, while watching and listening to the presenter. Every time I get a royalty statement on the Core Audio book, there&#8217;s a little bit of activity from two videos I did for them while working on the book (one a studio-produced &#8220;live lesson&#8221;, the other a conference presentation from like 2012 or something).</p>
<p>Sort of as an experiment &#8212; and also because I needed ready-to-go content for my weekly <a href="http://invalidstream.com/" rel="noopener" target="_blank">livestream</a> &#8212; I decided to go through the entire <a href="https://pragprog.com/book/adios4/ios-10-sdk-development" rel="noopener" target="_blank"><i>iOS 10 SDK Development</i></a> book that I co-wrote with Janie, in 30 minute chunks at the beginning of each week&#8217;s stream, prior to getting into the fun stuff like the iPad let&#8217;s plays and the visual novels. The Xcode segment was fairly easy to prep each week, it got me back in touch with the contents of the book and what I do and don&#8217;t like about it, and being all in XCode, it was a different way of presenting the material than several paragraphs of thinky-think followed by a code listing.</p>
<p><a href="http://subfurther.com/blog/wp-content/uploads/2018/01/fcpx-invalidstream-xcode-segment.jpeg"><img src="http://subfurther.com/blog/wp-content/uploads/2018/01/fcpx-invalidstream-xcode-segment.jpeg" alt="Final Cut Pro screenshot while editing Xcode segment of invalidstream" width="565" height="306" class="alignnone size-full wp-image-4194" /></a></p>
<p>Oh, and as a bonus, it allowed me to create a complete intro-to-iOS-development video course.</p>
<p>The Prags have been publishing links to each video as I get them up on Vimeo, on <a href="https://pragprog.com/book/adios4/ios-10-sdk-development" rel="noopener" target="_blank">the book&#8217;s home page</a>, and last week, I finished the book. So if you&#8217;re so inclined, you can start watching all 24 videos, even without a copy of the book. Heck, you can even <a href="https://pragprog.com/titles/adios4/source_code" rel="noopener" target="_blank">download the code</a> from the book&#8217;s home page.</p>
<p>And yeah, I know, it&#8217;s &#8220;iOS <b>10</b> SDK Development&#8221;. Actually, I was pleasantly surprised that nothing broke during our year away from the book. If I had to update it now, I&#8217;d want to cover the Safe Area in Auto Layout instead of just talking about margins, and of course I&#8217;d get in some iPhone X screenshots, but that&#8217;s about it. (There are other topics I&#8217;d want to cover, but what&#8217;s there now isn&#8217;t incorrect or anything.) We&#8217;re pretty lucky that we moved the book&#8217;s sample code away from Twitter and turned it into a podcast app instead, because all the Social framework stuff that we depended on for the iOS 6 through 9 books is <strong>gone</strong> in iOS 11. We totally dodged a bullet there.</p>
<p><a href="http://subfurther.com/blog/wp-content/uploads/2018/01/social-framework-festival-of-deprecation.png"><img src="http://subfurther.com/blog/wp-content/uploads/2018/01/social-framework-festival-of-deprecation.png" alt="SLServiceType constants deprecated in iOS 11 and macOS High Sierra" width="656" height="326" class="alignnone size-full wp-image-4192" /></a></p>
<p>So anyways, help yourself to the videos, either on the Prags page or <a href="http://invalidstream.com" rel="noopener" target="_blank">invalidstream.com</a>. I&#8217;m taking a couple weeks&#8217; hiatus from the stream to speed up work on my next (unannounced) book, and to build up the content pipeline for another few Friday nights of Xcode work, non-F2P iPad games, and <i>Muv-Luv Alternative</i> (we&#8217;re almost to where it gets good!).</p>
]]></content:encoded>
			<wfw:commentRss>http://subfurther.com/blog/2018/01/14/video-killed-the-prose-star/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Buggy Whip Manufacturer Calls on Apple to Add Buggy Whip App to CarPlay</title>
		<link>http://subfurther.com/blog/2017/10/19/buggy-whip-manufacturer-calls-on-apple-to-add-buggy-whip-app-to-carplay/</link>
		<comments>http://subfurther.com/blog/2017/10/19/buggy-whip-manufacturer-calls-on-apple-to-add-buggy-whip-app-to-carplay/#respond</comments>
		<pubDate>Thu, 19 Oct 2017 11:53:32 +0000</pubDate>
		<dc:creator><![CDATA[Chris Adamson]]></dc:creator>
				<category><![CDATA[politics]]></category>
		<category><![CDATA[skullduggery!]]></category>

		<guid isPermaLink="false">http://subfurther.com/blog/?p=4183</guid>
		<description><![CDATA[From MacRumors, National Association of Broadcasters Again Urges Apple to Add FM Radio to iPhones: Following Apple&#8217;s clarification that iPhone 7 and iPhone 8 models do not have FM radio chips or antennas designed to support FM signals, the National Association of Broadcasters (NAB) has expressed some doubt about Apple&#8217;s statement and has called on [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>From MacRumors, <a href="https://www.macrumors.com/2017/10/18/nab-urges-apple-to-add-fm-radio-to-iphone/" rel="noopener" target="_blank">National Association of Broadcasters Again Urges Apple to Add FM Radio to iPhones</a>:</p>
<blockquote><p>Following Apple&#8217;s clarification that iPhone 7 and iPhone 8 models do not have FM radio chips or antennas designed to support FM signals, the National Association of Broadcasters (NAB) has expressed some doubt about Apple&#8217;s statement and has called on the company to add FM functionality to its future iPhones.</p>
<p>[…]</p>
<p>In its blog post, the NAB appeals to Apple CEO Tim Cook, highlighting the number of hurricanes experienced in Mobile, Alabama, Cook&#8217;s hometown, since 1969, and calling on the company to introduce FM support as a way for customers to get news alerts during disasters. </p></blockquote>
<p>If your concern is access to news during disasters, may I suggest concerned families simply buy a dedicated portable AM/FM radio? Among its advantages:</p>
<ul>
<li>Such radios start at <a href=“http://amzn.to/2l0ugi7”>under US$10</a>, and the product line as a whole is 1 to 3 degrees of magnitude less expensive than iPhones.</li>
<li>AM/FM radios last longer on a fresh set of batteries than iPhones do on a charge, and can be recharged indefinitely during a power outage, so long as more batteries are available.</li>
</ul>
<p>It’s a sad scene between this and the FCC Chairman cluelessly <a href=“https://apps.fcc.gov/edocs_public/attachmatch/DOC-346949A1.pdf”>calling on Apple to magically activate FM features</a> that either aren’t physically connected or don’t exist at all.</p>
<p>It also speaks volumes that the NAB needs to rely on either national disasters or Federal bullying to get broadcast radio devices into the hands of consumers. Usually when consumers are <b>forced</b> to buy something, it’s a pretty good sign that what’s being sold is crap. Try listening to US terrestrial radio — dominated by ClearChannel bots playing the same songs over and over, and asshole blowhards going on hours-long conservative rants — and it’s little surprise that fewer Americans have any interest in the technology anymore.</p>
<p>No wonder the NAB wants to ride piggy-back on Apple’s popularity and the hundreds of millions of iPhones out there. But I think they ought to get their own house in order first, before they start talking crap about Apple.</p>
]]></content:encoded>
			<wfw:commentRss>http://subfurther.com/blog/2017/10/19/buggy-whip-manufacturer-calls-on-apple-to-add-buggy-whip-app-to-carplay/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
