<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>The Atomic Birdhouse</title>
    <link>https://atomicbird.com/</link>
    <description>Recent content on The Atomic Birdhouse</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Thu, 19 May 2022 00:00:00 +0000</lastBuildDate><atom:link href="https://atomicbird.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Solar Powered Birdhouse</title>
      <link>https://atomicbird.com/blog/birdhouse-solar-power/</link>
      <pubDate>Thu, 19 May 2022 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/birdhouse-solar-power/</guid>
      <description>In my last couple of posts I&amp;rsquo;ve talked about the hardware and software behind my birdhouse camera project. I haven&amp;rsquo;t previously covered how I&amp;rsquo;m giving it all enough power to operate, and therein lies a tale.
No Power? No Problem If I had a power outlet located anywhere near the bird house, this would have been easy. Pretty much any micro-USB power adapter would plug into the Raspberry Pi, and I&amp;rsquo;d be set.</description>
    </item>
    
    <item>
      <title>Raspberry Pi Birdhouse Software</title>
      <link>https://atomicbird.com/blog/birdhouse-software/</link>
      <pubDate>Mon, 09 May 2022 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/birdhouse-software/</guid>
      <description>In my last post I went over the components of the bird house camera I set up this year to get a better look at the local black-capped chickadees. Today I&amp;rsquo;ll talk about the software that makes it work.
Initial Setup Being relatively new to Raspberry Pi, I started off with a full install of Raspbian Deskop. It&amp;rsquo;s more than I need, since I won&amp;rsquo;t have anything like a desktop setup, but with a 64GB SD card I wasn&amp;rsquo;t concerned about the space.</description>
    </item>
    
    <item>
      <title>Raspberry Pi Birdhouse Camera</title>
      <link>https://atomicbird.com/blog/birdhouse-camera-hardware/</link>
      <pubDate>Sat, 07 May 2022 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/birdhouse-camera-hardware/</guid>
      <description>My current non-app related project has taken me out into the back yard, but brought along my coding and technical experience. Given this site&amp;rsquo;s name, the project might be called the atomic birdhouse.
For the past couple of years I&amp;rsquo;ve had a bird house in my yard, in which black-capped chickadees have nested and raised chicks. I&amp;rsquo;d see them come and go, and sometimes hear sounds from inside the house.</description>
    </item>
    
    <item>
      <title>Clash of the Optionals</title>
      <link>https://atomicbird.com/blog/clash-of-the-optionals/</link>
      <pubDate>Fri, 21 Jan 2022 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/clash-of-the-optionals/</guid>
      <description>&amp;hellip;or, how to accidentally break Swift initialization rules.
Today I&amp;rsquo;m going to talk about optionals. Swift optionals. And also another kind of optional. And how you might break the ironclad rules of Swift without realizing it until it&amp;rsquo;s too late.
What is an &amp;ldquo;optional&amp;rdquo; anyway? It depends who you ask. Swift will give you one answer, but Core Data has other ideas. So what happens when you bring them together?</description>
    </item>
    
    <item>
      <title>Core Data Using Only Code</title>
      <link>https://atomicbird.com/blog/core-data-code-only/</link>
      <pubDate>Mon, 08 Nov 2021 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/core-data-code-only/</guid>
      <description>If you know anything about Core Data, you&amp;rsquo;re probably aware of Xcode&amp;rsquo;s built-in model editor. If you&amp;rsquo;ve used Core Data, you&amp;rsquo;ve probably spent more time with it than you care to remember. It edits the data model, which then gets compiled to a binary form Core Data can use when your app runs. Conveniently it can also generate some code for you, subclasses of NSManagedObject for each entity in the model.</description>
    </item>
    
    <item>
      <title>Stumping People for 1000* Years</title>
      <link>https://atomicbird.com/blog/stumping-1000-years/</link>
      <pubDate>Thu, 02 Sep 2021 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/stumping-1000-years/</guid>
      <description>* Base 2
Last week at 360iDev I hosted the 8th edition of Stump 360. Stump is an evening event that, to my surprise as much as anyone else&amp;rsquo;s, has become a tradition at 360iDev.
What is Stump 360? Stump started as an unofficial spin-off of &amp;ldquo;Stump the Experts&amp;rdquo; at Apple WWDC, which ran for many years. The two overlapped by a year or two, but WWDC Stump stopped several years ago.</description>
    </item>
    
    <item>
      <title>Core Data Backups, Redux</title>
      <link>https://atomicbird.com/blog/core-data-backups-redux/</link>
      <pubDate>Mon, 29 Mar 2021 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/core-data-backups-redux/</guid>
      <description>This is the second of two posts following up on my earlier post about backing up and restoring Core Data.
My past post covered the difficulty of learning how to use mostly-undocumented framework methods, specifically about a Core Data method called replacePersistentStore(...). Arnaud Joubay recently messaged me to ask why I used a different approach when backing up and restoring persistent stores. Now that I&amp;rsquo;ve had some time to look at that method and work out what I can about how to use it, let&amp;rsquo;s see how it works in practice.</description>
    </item>
    
    <item>
      <title>Mostly Undocumented</title>
      <link>https://atomicbird.com/blog/mostly-undocumented/</link>
      <pubDate>Thu, 25 Mar 2021 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/mostly-undocumented/</guid>
      <description>Last year I wrote about backing up and restoring Core Data. Recently Arnaud Joubay messaged me to ask about it. I used a method called migratePersistentStore(...) to duplicate a persistent store. Arnaud asked why I had not used a similar method called replacePersistentStore(...) instead. He also sent me a link to a post on Apple&amp;rsquo;s dev forum site, attributed to an anonymous framework engineer, which had this to say on the topic:</description>
    </item>
    
    <item>
      <title>Backing up Core Data Stores</title>
      <link>https://atomicbird.com/blog/core-data-back-up-store/</link>
      <pubDate>Tue, 26 May 2020 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/core-data-back-up-store/</guid>
      <description>Today we&amp;rsquo;re going to travel back in time a little with Core Data. Or at least find out how your app can do so. What if you want to make a backup copy of your app&amp;rsquo;s data? What if you want to restore from that backup later on? This won&amp;rsquo;t be mainly about data safety, because your app&amp;rsquo;s data will be getting backed up to the user&amp;rsquo;s iCloud account and, maybe, their Mac.</description>
    </item>
    
    <item>
      <title>Adding thumbnails with PDFKit</title>
      <link>https://atomicbird.com/blog/pdfkit-thumbnails/</link>
      <pubDate>Wed, 15 Apr 2020 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/pdfkit-thumbnails/</guid>
      <description>Today I&amp;rsquo;m continuing with some ideas from my recent post about using PDFKit. In that post I was using a custom PDF view for an app that would work something like a basic slide presentation app.
Part of that was adding a thumbnail view with PDFThumbnailView, which ended up looking like this.
PDFThumbnailView works with a PDFView and generates thumbnails for pages in the current document. You can tell it how big the thumbnails should be and whether to arrange the thumbnails horiontally or vertically, but that&amp;rsquo;s about it as far as layout goes.</description>
    </item>
    
    <item>
      <title>JSON vs Property Lists, Revisited</title>
      <link>https://atomicbird.com/blog/json-vs-plists-2020/</link>
      <pubDate>Tue, 03 Mar 2020 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/json-vs-plists-2020/</guid>
      <description>In a previous post I wrote about How JSON compares to Apple property lists and the obstacles to converting data between them. That was a while ago but the post is still accurate, as far as it goes. But Swift changes the situation in some ways, so an update is in order.
Recap: JSON vs. Property Lists The previous post was motivated by the problems some people encountered trying to download JSON from a server and then save it as a property list.</description>
    </item>
    
    <item>
      <title>Getting started with PDFKit</title>
      <link>https://atomicbird.com/blog/pdfkit-basics/</link>
      <pubDate>Wed, 26 Feb 2020 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/pdfkit-basics/</guid>
      <description>In my post about my custom presentation slide app I mentioned that because of time constraints, I decided against doing my own slide layout. Instead I&amp;rsquo;d do that in DeckSet, export my slides to PDF, and show the PDFs in my app.
So, how do you do that then?
Getting a PDF on the screen The basics of PDFKit are actually pretty basic. If you have a PDF, you create a PDFDocument to hold it and a PDFView to display it.</description>
    </item>
    
    <item>
      <title>Interactive Presentation Slides at 360iDev</title>
      <link>https://atomicbird.com/blog/interactive-presentation-slides-at-360idev/</link>
      <pubDate>Tue, 28 Jan 2020 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/interactive-presentation-slides-at-360idev/</guid>
      <description>This is a story of how a trip to a karaoke bar led to me writing my own app to display presentation slides. Of how a user interface that allows live smartass comments led to me being completely nerd sniped until I was able to do something I&amp;rsquo;ve never seen in a conference session&amp;ndash; however silly the result was.
In the end audience members could send Emoji and other images directly to the slides during the session, which ended up looking like this.</description>
    </item>
    
    <item>
      <title>Better logging with Emoji</title>
      <link>https://atomicbird.com/blog/emoji-logging/</link>
      <pubDate>Fri, 17 Jan 2020 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/emoji-logging/</guid>
      <description>Apple&amp;rsquo;s developer tools provide a rich variety of debugging aids. Sometimes though, it&amp;rsquo;s useful to do things the old fashioned way. With debugging, this often means just printing out data while your code runs, and then looking through the results to see what&amp;rsquo;s going on.
Some scenarios where printing debug data helps include:
When you need to check on something that happens a lot. When the mental context switching between using your app and using the debugger gets to be too much.</description>
    </item>
    
    <item>
      <title>Return to Independence</title>
      <link>https://atomicbird.com/blog/return-to-independence/</link>
      <pubDate>Tue, 14 Jan 2020 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/return-to-independence/</guid>
      <description>Aaaaand, I&amp;rsquo;m back. It&amp;rsquo;s been a long time since I posted anything here.
Mainly this was because I worked full time for a while. I found it hard to work all day on someone else&amp;rsquo;s project, then come home and do even more blog-worthy code-related stuff. At the end of the work day I was done with code. So, this blog faded away. Back before that, in my glorious years of independence, I could find time to explore whatever technical areas caught my eye.</description>
    </item>
    
    <item>
      <title>BombBomb in the Gazette</title>
      <link>https://atomicbird.com/blog/bombbomb-gazette/</link>
      <pubDate>Sat, 04 Nov 2017 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/bombbomb-gazette/</guid>
      <description>The Colorado Springs Gazette just did a nice feature article about BombBomb, the place where I write apps these days. The best part (for me) is that the lead photo shows Conor McCluskey (our CEO) showing off an iMessage extension I wrote for the company&amp;rsquo;s app.</description>
    </item>
    
    <item>
      <title>Data Detection in Swift</title>
      <link>https://atomicbird.com/blog/data-detection-in-swift/</link>
      <pubDate>Wed, 25 Oct 2017 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/data-detection-in-swift/</guid>
      <description>I have a love/hate relationship with regular expressions. I love them because they’re great for examining text to find useful information and, often, to change the text in some way. I hate them because once you get beyond basic matching, they descend into bizarre write-only code that gives me flashbacks to my days writing Perl. In extreme cases they may well endanger the universe. And so we come to one of my recent coding issues: How can I find out if a string contains a valid email address?</description>
    </item>
    
    <item>
      <title>Migrating from Dropbox</title>
      <link>https://atomicbird.com/blog/migrating-from-dropbox/</link>
      <pubDate>Thu, 10 Nov 2016 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/migrating-from-dropbox/</guid>
      <description>Over the past year or so I&amp;rsquo;ve been trying out Resilio Sync (formerly BitTorrent Sync) as a possible alternative to Dropbox. It&amp;rsquo;s gradually improved to where I think I can rely on it. With my Dropbox subscription up for renewal in a couple of weeks, now&amp;rsquo;s the time. In this post I&amp;rsquo;ll describe how to set up Resilio to get a Dropbox-like experience.
What I want from file syncing I&amp;rsquo;ve used Dropbox for several years now.</description>
    </item>
    
    <item>
      <title>Date Math is Hard, Let&#39;s Do it Tomorrow</title>
      <link>https://atomicbird.com/blog/date-math-is-hard-lets-do-it-tomorrow/</link>
      <pubDate>Sun, 06 Nov 2016 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/date-math-is-hard-lets-do-it-tomorrow/</guid>
      <description>This post is based on a lightning talk I gave at CocoaConf San Jose a couple of days ago.
It&amp;rsquo;s that time of year&amp;ndash; the time when summer time, or &amp;ldquo;Daylight Saving Time&amp;rdquo; as we for some reason call it in the USA&amp;ndash; is ending. That time when a developer&amp;rsquo;s thoughts turn to date math and what a pain in the ass it can be.
Why is this so hard to get right?</description>
    </item>
    
    <item>
      <title>My other blog</title>
      <link>https://atomicbird.com/blog/my-other-blog/</link>
      <pubDate>Fri, 09 Sep 2016 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/my-other-blog/</guid>
      <description>I try to keep this blog on topic, sticking to technical posts of interest to iOS and macOS developers. So when I wanted to write about something else I set up a different blog unrelated to my business.
As some of you are aware, when I&amp;rsquo;m not working on apps I&amp;rsquo;m also a radio DJ, at KRCC in Colorado Springs, CO. If you aren&amp;rsquo;t, you might still have noticed how I used to win prizes at &amp;ldquo;Stump the Experts&amp;rdquo; at Apple WWDC by identifying song.</description>
    </item>
    
    <item>
      <title>Stump 360 III: The Search for Stump</title>
      <link>https://atomicbird.com/blog/stump-360-iii/</link>
      <pubDate>Fri, 12 Aug 2016 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/stump-360-iii/</guid>
      <description>Later this month I&amp;rsquo;m hosting Stump 360 III: The Search for Stump, the third annual Stump 360. It&amp;rsquo;s part of 360iDev in Denver. It&amp;rsquo;s on August 23, 4:45pm - 6:00pm.
In case you&amp;rsquo;re not familiar with Stump 360, here&amp;rsquo;s some possibly interesting information.
Stump is sort of approximately a game with two teams, the audience and the panel. It&amp;rsquo;s a quiz/trivia style event where each team poses questions to the other in the hope of stumping them.</description>
    </item>
    
    <item>
      <title>Stump 360 Questions, 2015</title>
      <link>https://atomicbird.com/blog/stump-360-questions-2015/</link>
      <pubDate>Fri, 12 Aug 2016 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/stump-360-questions-2015/</guid>
      <description>Here&amp;rsquo;s the list of questions asked at Stump 360 in 2015. If you&amp;rsquo;re not familiar with Stump 360, see my other post that describes it more fully
In general, Stump 360 questions can cover
Anything iOS or Apple related Especially anything covered in a 360iDev talk. Keep in mind the audience is allowed to use Google, etc, so questions shouldn&amp;rsquo;t be too easy.
These are the questions asked of the audience at Stump 360 in 2015.</description>
    </item>
    
    <item>
      <title>Using Stack Views in Table Cells</title>
      <link>https://atomicbird.com/blog/uistackview-table-cells/</link>
      <pubDate>Thu, 04 Aug 2016 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/uistackview-table-cells/</guid>
      <description>One of the cool things UIStackView can do for you is make it easy to dynamically update your app&amp;rsquo;s user interface while it&amp;rsquo;s running, with smooth animations and not a lot of code. My recent talk at iOSDevCamp DC covered some techniques. Natasha the Robot wrote a couple of great posts based on my talk, and today I&amp;rsquo;m going to talk about another unexpected (to me?) use of stack views.</description>
    </item>
    
    <item>
      <title>Flexible UI Design with UIStackView</title>
      <link>https://atomicbird.com/blog/uistackview-flexible-design/</link>
      <pubDate>Thu, 28 Jul 2016 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/uistackview-flexible-design/</guid>
      <description>As I mentioned in my last post, last week I did a talk at iOSDevCamp DC where I talked about UIStackView, a relatively new UIKit class that&amp;rsquo;s my new favorite thing in iOS development. I&amp;rsquo;m going to cover some of the more useful things UIStackView can do in posts here, which will fall more or less into two categories:
Simplified and flexible UI design, making common UI patterns easier to implement and modify.</description>
    </item>
    
    <item>
      <title>UIStackView talk at iOSDevCamp DC</title>
      <link>https://atomicbird.com/blog/iosdevcampdc/</link>
      <pubDate>Tue, 26 Jul 2016 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/iosdevcampdc/</guid>
      <description>Last week I did a talk at iOSDevCamp DC, an annual event hosted by Luis de la Rosa. I talked about UIStackView, under the admittedly grandiose title of &amp;ldquo;Mastering UIStackView&amp;rdquo;. I&amp;rsquo;ve used stack views for a number of things recently, as I&amp;rsquo;ve come to realize they&amp;rsquo;re a lot more useful than a lot of introductory material might suggest.
I&amp;rsquo;ll be writing about some of this in the very near future, but in the meantime the excellent Natasha the Robot has already done two blog posts based on stuff that I covered:</description>
    </item>
    
    <item>
      <title>Dates and Data Models</title>
      <link>https://atomicbird.com/blog/handling-dates/</link>
      <pubDate>Thu, 25 Feb 2016 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/handling-dates/</guid>
      <description>Just use NSDate, right? The obvious choice for handling dates in iOS and OS X apps is NSDate. It&amp;rsquo;s obvious, right? It&amp;rsquo;s got &amp;ldquo;date&amp;rdquo; right in its name, doesn&amp;rsquo;t it?
And that&amp;rsquo;s the thing about NSDate. It&amp;rsquo;s mis-named. It almost says so right in the docs:
NSDate objects encapsulate a single point in time, independent of any particular calendrical system or time zone.
A single point in time? I don&amp;rsquo;t know about you but I think of &amp;ldquo;date&amp;rdquo; as meaning more like</description>
    </item>
    
    <item>
      <title>File Coordination Fixed!</title>
      <link>https://atomicbird.com/blog/file-coordination-fix/</link>
      <pubDate>Mon, 18 May 2015 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/file-coordination-fix/</guid>
      <description>I wrote a post a few months ago about sharing data between iOS apps and app extensions in which I recommended using NSFileCoordinator and NSFilePresenter. But I had to update the post to remove that portion when some helpful people pointed me to Apple Tech Note 2408, which read in part:
When you create a shared container for use by an app extension and its containing app in iOS 8, you are obliged to write to that container in a coordinated manner to avoid data corruption.</description>
    </item>
    
    <item>
      <title>Swift Generators and Sequences</title>
      <link>https://atomicbird.com/blog/swift-generators-sequences/</link>
      <pubDate>Mon, 23 Mar 2015 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/swift-generators-sequences/</guid>
      <description>A large part of the Swift Standard Library is concerned with Generators, Sequences and Collections and functions that operate on them, so it’s pretty important to have a good understanding of them.
I was going to write a blog post about how to create and use Swift generators and sequences. But while I was trying to understand them myself, I found this post over at iOSDeveloperZone.
Go read that, and pretend that I wrote something as helpful.</description>
    </item>
    
    <item>
      <title>Using Core Data with Swift</title>
      <link>https://atomicbird.com/blog/swift-core-data/</link>
      <pubDate>Mon, 16 Mar 2015 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/swift-core-data/</guid>
      <description>Over the past month or so I&amp;rsquo;ve been diving into Swift, after many years of working with Objective-C on Macs and iOS. It&amp;rsquo;s been a change but, gradually, I&amp;rsquo;m learning the Swift way of doing things. On the way I&amp;rsquo;ve run into a few bumps in the road when dealing with Core Data, and I thought would be useful to share how I got past them.
Xcode Generated Subclasses Considered Harmful This is the main impetus for this post.</description>
    </item>
    
    <item>
      <title>Sharing data between iOS apps and app extensions</title>
      <link>https://atomicbird.com/blog/sharing-with-app-extensions/</link>
      <pubDate>Thu, 20 Nov 2014 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/sharing-with-app-extensions/</guid>
      <description>Since iOS app extensions run as part of a host application rather than as part of their containing app (i.e. your app&amp;rsquo;s extensions run in somebody else&amp;rsquo;s app), data sharing isn&amp;rsquo;t automatic. Finding standard locations like the documents directory doesn&amp;rsquo;t work for shared data. In this post I&amp;rsquo;ll go through the details of how to make it all work.
Along the way I&amp;rsquo;ll get into how to set up real-time messaging between apps and their extensions.</description>
    </item>
    
    <item>
      <title>iOS 8 App Extension Demo</title>
      <link>https://atomicbird.com/blog/ios-extension-demo/</link>
      <pubDate>Wed, 19 Nov 2014 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/ios-extension-demo/</guid>
      <description>iOSDevCamp Colorado was a couple of weeks ago and I did a presentation/demo on iOS app extensions. I wanted to focus on how to actually do things, so mostly I worked in Xcode rather than present from slides. But rather than paste code in as I went or (gasp!) try to do it live, I worked from a git repository I had built while developing the demo app. Every time I made a significant change, I&amp;rsquo;d commit it.</description>
    </item>
    
    <item>
      <title>iOS 8 App Extension Development Tips</title>
      <link>https://atomicbird.com/blog/ios-app-extension-tips/</link>
      <pubDate>Fri, 03 Oct 2014 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/ios-app-extension-tips/</guid>
      <description>Recently I&amp;rsquo;ve been working on some iOS 8 app extensions, and I&amp;rsquo;ve run into a few non-obvious details that might come in handy for anyone else in the same situation. Some of the following relates to bugs still in the system, and so will probably only be relevant for a limited time.
Debugging: General The intended approach is simple: when you tell Xcode to run the extension, Xcode will ask you what host app you want to use.</description>
    </item>
    
    <item>
      <title>CloudKit: Moves like Azure</title>
      <link>https://atomicbird.com/blog/cloudkit-moves-like-azure/</link>
      <pubDate>Tue, 17 Jun 2014 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/cloudkit-moves-like-azure/</guid>
      <description>After my past travails using iCloud with Core Data, I was both interested and concerned when Apple announced CloudKit at WWDC 2014. In this post I&amp;rsquo;m going to go over what Apple has planned for CloudKit from the perspective of someone wanting to sync app data via some cloud-based means. &amp;ldquo;Planned&amp;rdquo; is a key word here, because it&amp;rsquo;s still to early to say how things work in practice.
CloudKit vs. iCloud Core Data CloudKit makes a refreshing change from iCloud Core Data in that there&amp;rsquo;s a lot less magic going on in the framework.</description>
    </item>
    
    <item>
      <title>[objC autorelease]; t-shirts</title>
      <link>https://atomicbird.com/blog/objc-autorelease-tee/</link>
      <pubDate>Tue, 10 Jun 2014 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/objc-autorelease-tee/</guid>
      <description>At WWDC 2014 Apple introduced Swift, a new programming language for iOS and OS X developers. Objective-C has had a long and distinguished run with Apple, but times change and we move on. In recognition of this, and in reference to the [objC retain]; shirts of days gone by, I set up a Teespring campaign to say goodbye&amp;ndash; gradually&amp;ndash; to Objective-C.
Why not [objC release];? Swift is the clear way forward, but Objective-C won&amp;rsquo;t be disappearing right away.</description>
    </item>
    
    <item>
      <title>Making your own Passbook Business Card</title>
      <link>https://atomicbird.com/blog/passbook-card-details/</link>
      <pubDate>Mon, 09 Jun 2014 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/passbook-card-details/</guid>
      <description>My Passbook and iBeacon enabled business card was something of a hit at WWDC last week. Some people wanted more detail on how it worked or how to create their own version. This post describes the process, from the perspective of a software developer. If you&amp;rsquo;re not a developer, there are numerous web sites that will help compose Passbook passes, but I can&amp;rsquo;t personally vouch for any.
The very basics: A Passbook pass is defined by a JSON file.</description>
    </item>
    
    <item>
      <title>Passbook and iBeacon for a 21st Century Business Card</title>
      <link>https://atomicbird.com/blog/passbook-ibeacon-business-card/</link>
      <pubDate>Fri, 30 May 2014 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/passbook-ibeacon-business-card/</guid>
      <description>I&amp;rsquo;ll be in San Francisco during WWDC next week (though without a ticket). This is the only time of year I ever think about business cards, and this year I decided that paper business cards suck and it was time to do something cooler.
Instead I&amp;rsquo;ll have an electronic card distributed via Passbook. Electronic cards are hardly a new idea but (on iOS) they usually depend on both people already having the business card app.</description>
    </item>
    
    <item>
      <title>Storm (i)Cloud</title>
      <link>https://atomicbird.com/blog/storm-icloud/</link>
      <pubDate>Sat, 12 Apr 2014 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/storm-icloud/</guid>
      <description>Last year I did a series of posts here where I ran through problems I had encountered with Core Data&amp;rsquo;s iCloud integration, with various solutions and workarounds I had been able to devise. Then iOS 7 and Mac OS X 10.9 came out with numerous visible (and internal) updates and people started asking me, so, is it any better now? Can we use it?
Since then, the answer has been: I have no frickin&amp;rsquo; idea.</description>
    </item>
    
    <item>
      <title>Probably Approximately Correct Location for iOS</title>
      <link>https://atomicbird.com/blog/probably-approximately-correct-location/</link>
      <pubDate>Mon, 28 Oct 2013 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/probably-approximately-correct-location/</guid>
      <description>If you&amp;rsquo;re writing an iOS app and you need to know the user&amp;rsquo;s current location, the answer is straightforward: use Core Location. That fires up device GPS (when available). Apple&amp;rsquo;s A-GPS combines this with things like local Wifi networks and IP addresses to work out the device&amp;rsquo;s location. All of this, of course, assuming that the user allows your app to know their location.
That&amp;rsquo;s great if you actually need nearly-exact location information.</description>
    </item>
    
    <item>
      <title>Mark Dalrymple on the Objective-C Run Time</title>
      <link>https://atomicbird.com/blog/mark-dalrymple-objc-runtime/</link>
      <pubDate>Thu, 18 Jul 2013 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/mark-dalrymple-objc-runtime/</guid>
      <description>Over at the Big Nerd Ranch blog, my friend Mark Dalrymple continues his &amp;ldquo;Inside the Bracket&amp;rdquo; series with an article on practical uses of Objective-C&amp;rsquo;s run time introspection.
Last time you saw the parts of the Objective-C runtime API that let you query a bunch of the metadata the compiler keeps around once it’s done building your project. Like most discussions of API, it was pretty abstract. “Look at all the pretty tools!</description>
    </item>
    
    <item>
      <title>Dropbox Datastore, the iCloud Killer? (updated)</title>
      <link>https://atomicbird.com/blog/dropbox-datastore/</link>
      <pubDate>Wed, 10 Jul 2013 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/dropbox-datastore/</guid>
      <description>This week was DBX, Dropbox&amp;rsquo;s first ever developer conference. The big news as far as I&amp;rsquo;m concerned is their new Datastore API. In a break from their file-oriented past, Dropbox now has an API for syncing structured data between devices. I&amp;rsquo;ve long been a happy Dropbox user and I&amp;rsquo;ve lately been a frustrated iCloud developer. So the question is, should I care? Should you?
Some of the hype has suggested that the new API is an &amp;ldquo;iCloud killer&amp;rdquo;.</description>
    </item>
    
    <item>
      <title>Learning iPad Programming, 2nd Edition</title>
      <link>https://atomicbird.com/blog/learning-ipad-programming-2/</link>
      <pubDate>Tue, 21 May 2013 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/learning-ipad-programming-2/</guid>
      <description>Learning iPad Programming, 2nd edition, by the excellent Kirby Turner and myself, is finally available. This project has been in the works for a while and now it&amp;rsquo;s finally actually shipping and in print and stuff instead of just being preorderable. If you order now you can probably have your copy before I get mine. (It&amp;rsquo;s also available in electronic formats for Kindle and iBooks and as a PDF).
Not many books have a single project that lives and evolves through the entire narrative.</description>
    </item>
    
    <item>
      <title>iCloud as She is Spoke, Spring 2013</title>
      <link>https://atomicbird.com/blog/icloud-as-she-is-spoke-spring-2013/</link>
      <pubDate>Tue, 14 May 2013 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/icloud-as-she-is-spoke-spring-2013/</guid>
      <description>In this latest installment of my iCloud series I&amp;rsquo;ll be taking a look at real world iCloud. Not in the sense of how you should write code to make effective use of iCloud, but in the sense of finding out how people are actually using it in real shipping apps. This was one of my primary purposes in writing momdec, my Core Data model decompiler, and I&amp;rsquo;ll use it here to see what turns up.</description>
    </item>
    
    <item>
      <title>iCloud Complications, Part 3: I&#39;m Waiting...</title>
      <link>https://atomicbird.com/blog/icloud-complications-part-3/</link>
      <pubDate>Tue, 07 May 2013 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/icloud-complications-part-3/</guid>
      <description>In today&amp;rsquo;s installment of my continuing series on using iCloud with Core Data I&amp;rsquo;m going to discuss how factors beyond your control may render iCloud unusable, even if everything is working normally. Even if everything is working correctly, the current API can still require complex workarounds to get decent app performance. Through this, keep in mind that as with my previous post, I&amp;rsquo;m sticking to how the API is designed to work in the absence of bugs in the implementation.</description>
    </item>
    
    <item>
      <title>Introducing momcom</title>
      <link>https://atomicbird.com/blog/introducing-momcom/</link>
      <pubDate>Fri, 03 May 2013 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/introducing-momcom/</guid>
      <description>From the README on github:
momcom is a command-line tool for Mac OS X that takes an uncompiled Core Data model created with Xcode and compiles it to produce a compiled .mom or .momd suitable for use at run time.
Please note that momcom is experimental. Although it is intended to be at least as as functional as compiling a data model using Xcode&amp;rsquo;s built-in model compiler, it is not mature enough to recommend as a replacement.</description>
    </item>
    
    <item>
      <title>Introducing momdec</title>
      <link>https://atomicbird.com/blog/introducing-momdec/</link>
      <pubDate>Wed, 17 Apr 2013 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/introducing-momdec/</guid>
      <description>From the README on github:
momdec is a command-line tool for Mac OS X that takes a compiled Core Data model and decompiles it to produce an equivalent xcdatamodel or xcdatamodeld suitable for use in Xcode. The resulting model file can also be used with mogenerator to produce source code files for Core Data entities which have custom subclasses.
My latest open source project. A compiled managed object model contains enough information to reconstruct an equivalent editable model file.</description>
    </item>
    
    <item>
      <title>iCloud Complications, Part 2: De-duplication</title>
      <link>https://atomicbird.com/blog/icloud-complications-part-2/</link>
      <pubDate>Mon, 15 Apr 2013 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/icloud-complications-part-2/</guid>
      <description>Today I&amp;rsquo;m continuing my series of iCloud/Core Data-related posts with a discussion of duplicate data, how and why it occurs, and what you can do about it in your apps. As with my previous post in this series, today I&amp;rsquo;m sticking to how things are supposed to work and sometimes actually do.
The problem of duplicate data isn&amp;rsquo;t actually specific to iCloud. It can happen in any case where people might create data on different devices and where your app wants to sync that data between the devices.</description>
    </item>
    
    <item>
      <title>iOSDevCamp Colorado 2013</title>
      <link>https://atomicbird.com/blog/iosdevcamp-colorado-2013/</link>
      <pubDate>Fri, 12 Apr 2013 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/iosdevcamp-colorado-2013/</guid>
      <description>It&amp;rsquo;s almost time for iOSDevCamp Colorado!
iOSDevCamp is an informal un-conference where anyone is welcome and encouraged to present about anything relevant to iOS development. Colorado has a fantastic iOS developer community and these events are a great place to meet people, learn things, and have fun.
Three weeks from today! This is the fourth annual event in Colorado Springs. We held the first one on April 3, 2010, so we dubbed it iPadDevCamp since that was the day the first iPads shipped.</description>
    </item>
    
    <item>
      <title>iCloud Complications, Part 1</title>
      <link>https://atomicbird.com/blog/icloud-complications/</link>
      <pubDate>Tue, 09 Apr 2013 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/icloud-complications/</guid>
      <description>As (link:/blog/icloud-sotu text:promised), I&amp;rsquo;m going to be doing a number posts on using iCloud with Core Data. I&amp;rsquo;m not sure how many there will be, I&amp;rsquo;ll keep going as long as it takes. Today I&amp;rsquo;m starting off with some things that, while not actually bugs, may catch a developer off guard. In this post I&amp;rsquo;m sticking to how iCloud is designed to work, and not getting into the questions of how and when it doesn&amp;rsquo;t work.</description>
    </item>
    
    <item>
      <title>JSON and Property Lists: Alternate Universe Siblings</title>
      <link>https://atomicbird.com/blog/json-vs-plists/</link>
      <pubDate>Wed, 03 Apr 2013 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/json-vs-plists/</guid>
      <description>Update: This post is old but still accurate as far as comparing JSON with property lists, with examples for Objective-C code. If you&amp;rsquo;re using Swift, see my newer post that updates this one for Codable and Swift examples.
Mac OS X and iOS include support for JSON and property lists, two generic structured data formats, both in common use in different places. If Stack Overflow is any indication, there&amp;rsquo;s a fair amount of confusion regarding the two.</description>
    </item>
    
    <item>
      <title>Rich Siegel on iCloud</title>
      <link>https://atomicbird.com/blog/siegel-on-icloud/</link>
      <pubDate>Thu, 28 Mar 2013 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/siegel-on-icloud/</guid>
      <description>“Don’t you just turn on iCloud syncing, and it all Just Works?”
“Just works” might be the customer experience; but developers must do more to support iCloud (or any new OS technology) than simply flipping a switch. Things can go wrong, and they often do.
Rich gets into a lot more technical detail than most of the other iCloud coverage that&amp;rsquo;s come out recently.
I&amp;rsquo;m way too familiar with the technical issues described there for comfort.</description>
    </item>
    
    <item>
      <title>iCloud: State of the Union</title>
      <link>https://atomicbird.com/blog/icloud-sotu/</link>
      <pubDate>Wed, 27 Mar 2013 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/icloud-sotu/</guid>
      <description>As some of you know, I&amp;rsquo;ve spent a lot of time over the past year working with iCloud in Mac and iOS apps. Specifically, working with Core Data&amp;rsquo;s built-in support for iCloud. I&amp;rsquo;m going to be doing a series of blog posts covering iCloud in various ways. Today I&amp;rsquo;m going to start off with an overview covering how iCloud is supposed to work with Core Data and a little about how it actually works in practice.</description>
    </item>
    
    <item>
      <title>Waiting for WWDC</title>
      <link>https://atomicbird.com/blog/wwdc-notifiers/</link>
      <pubDate>Sun, 17 Mar 2013 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/wwdc-notifiers/</guid>
      <description>Once upon a time Apple would announce dates for their World-Wide Developer Conference and those of us who were interested would calmly begin planning our trip. The only urgency came from making sure to buy a ticket in time to get the earlybird price.
Those were the days. Now, the announcement of WWDC dates triggers a mad rush to buy tickets before they&amp;rsquo;re gone. Don&amp;rsquo;t hesitate, don&amp;rsquo;t think, or the decision is made for you.</description>
    </item>
    
    <item>
      <title>Rebooting my site with Kirby</title>
      <link>https://atomicbird.com/blog/rebooting-blog/</link>
      <pubDate>Fri, 15 Mar 2013 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/rebooting-blog/</guid>
      <description>After far too long I&amp;rsquo;m rebooting this site to bring it up to date, in a variety of ways.
Partly to bring the content up to something reasonably recent. For the past few years I&amp;rsquo;ve worked as an iOS and Mac OS X contract developer for a variety of clients. Atomic Bird is not at present a Mac app developer, so there&amp;rsquo;s no reason for the site to be designed as if it were.</description>
    </item>
    
    <item>
      <title>Extending NSData and (not) overriding dealloc</title>
      <link>https://atomicbird.com/blog/extending-nsdata/</link>
      <pubDate>Wed, 13 Mar 2013 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/blog/extending-nsdata/</guid>
      <description>A couple of weeks ago Matt Long was having a problem with an app running out of memory. He had a ginormous data file he needed to load up and process, and that memory hit was more than the app could bear. It would load just fine, into an NSData, but before he could finish with it the app would run short of memory and die.
Until recently the obvious thing would have been to tell NSData to create a memory-mapped instance.</description>
    </item>
    
    <item>
      <title>About Atomic Bird</title>
      <link>https://atomicbird.com/about/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/about/</guid>
      <description>I&amp;rsquo;m Tom Harrington, a veteran of iOS and macOS software development.
Since 2002 I&amp;rsquo;ve developed award-winning software for both clients and end users for Apple platforms including iPhone, iPad, and Mac. If you have an interesting project in mind, I&amp;rsquo;d love to hear about it. Contact me to discuss how we can work together to make it a reality.
Reach out by using one of the links in the sidebar.</description>
    </item>
    
    <item>
      <title>Contact</title>
      <link>https://atomicbird.com/contact/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/contact/</guid>
      <description>I&amp;rsquo;d love to hear from you! But every time I&amp;rsquo;ve set up a contact form on my web site it&amp;rsquo;s been heavily spammed. Rather than fight an ongoing battle against entropy, I&amp;rsquo;ve decided to not include a form on this site.
I can be reached through a variety of popular social and professional networks, including (but not limited to) Mastodon, Twitter, LinkedIn, and others. Links to these networks can be found in the sidebar.</description>
    </item>
    
    <item>
      <title>Mac Apps</title>
      <link>https://atomicbird.com/mac-apps/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://atomicbird.com/mac-apps/</guid>
      <description>Atomic Bird&amp;rsquo;s Mac OS X titles have been discontinued and are now free. They may be downloaded and registered using information below. Note that this software is unsupported and may not work normally with the current version of Mac OS X.
Macaroni Macaroni was a tool that handled regular system maintenance on Mac OS X. It ran in the background and handled various things that needed to be done on a regular schedule.</description>
    </item>
    
  </channel>
</rss>
