iCalvin.org

iOS Projects

This is a rundown of my current public iOS projects available in the App Store. I usually try to keep a couple active projects at a time, and I'll update this list whenever a new one launches. This list does not include personal projects like my Family Finance manager or the app which runs my blog and social media feeds. If you're curious about those please reach out.

Passify

Passify serves two roles for my own purposes that I think will be useful to the general public when it launches.

First, it allows me to keep a digital business card with contact information and links to my website quickly at hand in the iOS Wallet app, with a QR code that allows easy importing to anyone's phone. This came in handy at WWDC '18 when I was meeting developers and community members I wanted to stay in touch with.

Secondly it gives me a way to import the occasional event ticket or boarding pass that doesn't natively support Wallet Passes. It does this with quick and easy barcode scanner, or a text field that can generate a QR or Bar code. This allows me to get passes and tickets out of my email inbox and into my preferred repository.

I started working on Passify on the side last summer, and buying a home has delayed the launch more that I hoped, but I hope to have it available to the public by WWDC '19.

First screenshot of Passify, showing the pass editing screen during Second screenshot of Passify, showing a custom pass ready to import to Apple Wallet

Drink Keeper

Drink Keeper is a project I started after the WWDC 2014 Keynote and the introduction of HealthKit. I was browsing the HealthKit data types and seeing companies announcing HealthKit support, and didn't see anyone using the Blood Alcohol Content type. I found a forumla for estimating B.A.C. using a person's weight, gender, and that amount of 'Standard Drinks' they had consumer and when, and got to work making an App to save drinking information to HealthKit.

This was actually the first app I've ever sold, as well as my most popular app by far. When WatchKit was introduced I figured it would be a good addition to the app, and was able to have the watchOS version in the store for launch day. They syncing manager I had built was pretty reliable because it relied on the system keychain for storing current drinking sessions, but when watchOS 2 launched with local apps I no longer had access to the same keychain for both apps, and the new WatchConnectivity class wasn't ablew to give me the reliability I needed. I eventually abandoned the project in frusteration.

Drink Keeper 3.0 was a complete rewrite of the app with lots of great new features, but upon submission I was told that Apple no longer allows the category of BAC calculators in the App Store. I have appealed this decision multiple times, because I stand by the formula that formed the basis of Drink Keeper, but I don't expect the decision to be overturned any time soon. You can learn more about Apple's decision and my thoughts on the matter (as well as App Review guidelines) here.

First screenshot of Drink Keeper, showing the main screen during a drinking session Second screenshot of Drink Keeper, showing the Add Drink screen Third screenshot of Drink Keeper, showing the profile and settings screen

Sticky Emoji Sticker Pack

Sticky Emoji is a quick iMessage App I whipped together using content from the open source Emoji One project. They're a really helpful resource for anyone looking to use some simple and beautiful Emoji references, and they stay up to date very quickly. They also provide a JSON file with rich information about each emoji and keywords to make searching really easy.

This was my first iMessage App and it was really quick and easy to implement. I really just wanted two things from it. First, to be able to drop Emoji onto conversations rather than sending them as an individual reply. Second, to be easily search through them so I didn't have to swipe through 1800+ emoji looking for the one I wanted.

I also wanted to implement a Stack View on the side with Category buttons so you could jump right to Flags, or Activities without necessarily having to search. I ended up abandoning it because I realized that MSStickerBrowserView didn't allow you to jump to a particular NSIndexPath. Despite how much it seems like a UICollectionView it is very limited in what it can and can't do in comparison. I'm still thinking about what the best way to implement this category jumping functionality.

First screenshot of Sticky Emoji, showing the full screen browser Second screenshot of Sticky Emoji, showing search Third screenshot of Sticky Emoji, showing inline stickers on a message


Web Projects

Typically I don't do too much web stuff, mostly just APIs for my app projects.

iCalvin.org

I built this website and the blogging engine entirely in Swift using Vapor. I also have an iOS app and a (very) rough Marzipan app to allow me to quickly share links, images, and posts to the blog here. It was a lot of fun to make and learn the limitations and capabilities of Server Side Swift. I wrote a longer write up over here when it launched. The site has since been rewritten to use Vapor rather than Perfect. The first iteration used Swift to generate static HTML content based on a directory of blog posts and a couple static markdown files. The current version is a bit smarter, using Leaf templates to serve requests on the fly, stores blogs in a database rather than in a directory, and provides me with custom analytics (as of today my most read post was on DonersChoose).

CoreML Training Data Collection

At one point I was working on a skateboard workout tracking app for watchOS. One of the goals I had was to use CoreML to determine when the user was pushing, cruising, or walking, and automatically switch tracking modes appropriately. To get the training data I built a Swift API that would collect GPS and Motion data from a dev build of the app, and catalog the data based on my own sorting on device (manually switching modes from push -> coast for example). My computer struggled (and crashed often) with CreateML however, and Apple introduced Skating workout tracking with watchOS 5, eliminating my core problem I was trying to solve.


Podcasts

CastKit

We recorded the first episode of what would become CastKit at WWDC in Apple's Podcast Studio, and since then I've kept it going on a monthly basis, bringing in my very good friends Bob Solorio and Steve Ciauri as co-hosts to talk iOS Development, new APIs and projects, and general Apple nerd-dom. Check it out!