Todd Kramer Welcome! I'm an engineering manager and programmer living in New York City. I enjoy writing about Swift and management on this blog and maintaining open source projects on GitHub. I'm also a cellist and composer. You can listen to some of my music here.

Machine Learning in Swift: Document Classification with Core ML

It's an exciting time for Swift developers to get into machine learning. With Apple's new Core ML framework, support on all four platforms, and a growing library of models available for the framework, incorporating machine learning solutions in Swift apps has never been easier.

A 4-Step Approach To Code Reviews

When working with a team, code reviews are critical to maintaining a consistent, high-quality codebase. Hopefully, your project has thorough test coverage and your team has a shared understanding of best practices. You may even use tools like danger or SwiftLint to enforce components of the code review process. But when it comes to architecting and . . .

Building A PDF Viewer With PDFKit in iOS 11

PDFKit has been available to Mac developers since 10.4, but with iOS 11 Apple brought its support for viewing, editing, and authoring PDFs to iPhone and iPad. Previously, viewing PDF files meant rendering each page yourself with Core Graphics and Core Text, using an indirect solution like UIWebView or QuickLook, or . . .

Understanding Startup Stock Options

Stock options are often a large component of an employee's compensation at most startups. While the ultimate value of those options is impossible to predict, it's important for anyone who is granted options to understand the basics of how they work and their tax consequences. This article is an attempt to explain those basics . . .

Making A Cross-Platform Swift Framework

With technologies like handoff and continuity, a unified developer program, and many of the same system frameworks available on all four of its platforms, Apple has been moving over the past few years to more seamlessly integrate its ecosystem of devices. This presents a great opportunity for us to bring our apps to each platform while reusing a lot of the app logic we've already written.