We launched Penbook almost two years ago on Windows, and it was an instant hit. It used Windows Surface Pens to let notebook lovers embrace their tablets. Improving on their physical notebooks, we gave them endless selection of paper templates to choose from and the ability to undo writing mistakes with a tap. Penbook remains one of the top-selling apps in the Microsoft Store.

When Apple released the Pencil 2, it showed us they were serious about iPad’s potential in this space – Pencil 1 always felt more like an experiment. Late in 2018, we bought some iPad Pros with the new Pencils and got exploring. In spring 2019 we started coding Penbook for iOS, expecting to finish sometime in 2020.

But then our plans completely changed.

Apple unveiled PencilKit and SwiftUI at WWDC in June, and the very next day we threw away all the code we had so far and started over from scratch. We decided to release Penbook in September, with iPadOS 13, since PencilKit would save us a bunch of time. That kicked off our summer of coding with beta tools for a beta release on a beta framework.

For most developers, SwiftUI was a promising new technology that they might slowly integrate into their workflows in a year or two. Since SwiftUI was iOS 13 only, it made little sense to invest too much time into a beta framework when your apps have to support iOS 12 for at least another year. For better or worse, we didn't have that restriction. We had to dive right in.

The Bliss of the Bleeding Edge

The joy of working with SwiftUI is hard to describe. As someone who has worked with UIKit but is more familiar with C# and XAML frameworks, SwiftUI was revelatory. It pushes declarative ideas far beyond what Microsoft has implemented with UWP, and is light-years beyond UIKit.

We were able to use its layout engine to quickly iterate on some new concepts for Penbook – ideas that we weren't able to implement in our Windows version. The finished app was a better product thanks to SwiftUI and, not to forget, PencilKit.

This is how PencilKit became an important part of our launch:

Penbook is not an app for artists. We didn't want to spend time designing brushes, worrying about latency, drawing angles, and all the other amazing things that make art apps work so well. PencilKit took care of all of that for us, and as a cherry on top it gives us low-latency, natural-feeling Pencil input. Today, in practical terms, there is no app that has better pencil input than Penbook.

Penbook is also not a record-everything competitor to Apple Notes. We didn't want to overburden our app with image insertion, audio recordings, PDF markup and the like. Truth be told, we already did that on Windows, and we didn't like what it did to Penbook. The tool we set out to create on Windows had changed into something quite different a year later, while compromising on the core mission of the app. This was a mistake we're trying hard not to repeat.

Penbook is simply a destination for freehand ideation, notes, sketches, planning, mind mapping, and other activities that paper excels at. PencilKit helps us there too, as we can now share pencil drawings with compatible apps. And freehand drawing is considerably nicer in Penbook than in Apple’s Notes, as Penbook only has to serve one master.

What this all means is that you can write or sketch something out in Penbook on your favorite paper, then easily copy and paste it as Pencil strokes to Notes. It removes the anxiety of having your data in multiple apps. In this sense, Penbook truly becomes like a physical notebook: a tool, rather than a database.

The Beta Sorrows

The first week of working with SwiftUI had our optimism needle pegging 100% most days. That would quickly plummet as the summer wore on.

Imagine learning a new platform with no official documentation (except a few videos from WWDC) and a very long and convoluted sample project. Add to that a core framework whose syntax changed every two weeks, making the WWDC videos hilariously wrong by the end of August. Sprinkle in a few random new bugs introduced into your projects every two weeks by the iOS beta. It all made for a very hectic sprint. Props to @Dimillian, @twostraws, @mecid, @johnsundell and @MengTo for keeping us on track.

We had multiple iPads on multiple betas just to keep going. There were 5 iPads with 5 Pencils roped into the iOS 13 beta (three with Pencil 2 and two with Pencil 1). We kept so many versions of Xcode around as a hedge against sudden blocking bugs that confusion reigned supreme.

The "highlight" of the summer was in the beginning of August. We had just fleshed out Penbook’s basic UX, and it was time to focus on Live Paper and build a pool of dynamic templates for launch. (Our templates are not assets yeeted into the app package; rather, they're parts of the UI, and they respond to time, dates and provide monthly or weekly views with accurate dates).

Beta 5 of iOS 13 came out the morning this work started, so I dutifully updated my tools just to find the app crashing on start. The release notes had a small bombshell for us:

Using the Path structure may cause your app to crash if you’re using the SDKs included in Xcode 11 beta 5. As a result, you may be unable to successfully follow the steps in the Drawing Paths and Shapes tutorial. (53523206)

The very thing that we use to draw our templates was broken, and remained so for over two weeks, as time ticked down to the September deadline. Using a different technology for templates at this point was out of the question, especially since we knew this bug would be short-lived.

Many basic SwiftUI features were simply broken: popovers, transitions, certain gestures, the list goes on. Apple's ambitious fall launch plan was unraveling too: iPadOS 13’s release was pushed to iOS 13.1, so they launched the beta for 13.1 in August. That wasn't communicated to us for a week or two, so during that time we still had to consider that iOS 13.0 would be rolled out to iPads just like it would to iPhones. That meant we had some devices running an old 13.0 beta, and others up-to-date 13.1 beta - just in case. The testing results between the two quickly diverged.

Finally, it's September 4 and a beta 2 for 13.1 drops. Our app release-candidate promptly crashes with no usable trace information. After some panicked sleuthing we get the culprit (ScrollView) and come up with a work around:

Well if you're having problems with iOS 13.1 b2 and your code, we found the line that locked up our whole project (SwiftUI):



ScrollView(.horizontal)



- horizontal scrolling deprecated? :) — Slaven (@slaven) September 4, 2019

In the end, we made our launch date: we released September 24, the same day iPadOS 13.1 came out. We launched with fewer Live Papers than originally planned (thank you, Path bug), but by any measure the app hit the spot with users, and we even got included in the Pencil collection on day one:

We are very happy how it all came together, but are hoping that the summer of 2020 will feature fewer betas, less TestFlighting, and more sunshine.



Penbook is now available for iPadOS. Download it now.