Latest update: May 17, 2022

What’s New

Updated the plan for YENCO.COM apps going forward to include a link to a second great new macOS SwiftUI book that has finally been released!

Updated iKeeper status with news that the SwiftUI macOS version has finally been started!

 

Important information regarding macOS Catalina 10.15 and beyond

My current macOS apps (Archive, Finance, and iKeeper) were created using an amazing third-party developer tool called SuperCard. Unfortunately SuperCard is a 32-bit app that creates 32-bit apps and with macOS Catalina, macOS Big Sur, macOS Monterey, and going forward, Apple now requires applications to be 64-bit in order to run. While the makers of SuperCard have expressed interest in developing a 64-bit version eventually, it remains unclear at this time if, or when, that will happen. It is certainly no easy task to rewrite any app, and especially one with the complexity of SuperCard which, as a developer tool, needs to be many things to many different people. While my current apps WILL NOT RUN in macOS Catalina, macOS Big Sur, or macOS Monterey, they continue to work exceptionally well with macOS Mojave 10.14.6 and earlier. If you rely on Archive, Finance or iKeeper, I can only recommend holding off on upgrading to macOS Catalina, macOS Big Sur, or macOS Monterey at this time until I can bring my apps to 64-bit. I woke up to some sad, though not entirely unexpected, news on July 10, 2021. Apple removed my current macOS apps from sale on the Mac App Store. While I am disappointed, I can fully understand where Apple is coming from on this.  I can only press forward in my efforts with SwiftUI and hope to have updates to release at some point.

The plan for YENCO.COM apps going forward

When Apple first unveiled their new Swift programming language, out of curiosity, I took a look at it and was pleasantly surprised at how approachable and, at least for basic programming concepts, similar to SuperCard it was. I decided to explore this further. At the time, SuperCard was going through another update to fix a bunch of things that Apple had broken with a macOS update (something that was becoming a more frequent occurrence) and I figured reading some iBooks about Swift and trying out Xcode would be a cool way to pass some time as I waited. I soon realized that while there was some overlap of basic programming concepts, there were also a lot of new concepts that were unfamiliar and it would take me some time to fully wrap my head around them, but I also recognized that there was some merit in learning Swift and Xcode as a long-term goal. And then the SuperCard update became available and I was able to get back to work and release some upgrades for my apps. So a dual strategy took shape: I would continue to update my apps with SuperCard as I gradually learned Xcode and Swift as an eventual replacement. And then the aforementioned 64-bit requirement came along.

With macOS Catalina the plan changed. I stepped up the pace. I read more iBooks about Swift and Xcode. I conducted more involved experiments using Xcode and Swift. I found myself in a race to understand Xcode and Swift enough to completely write updates to all of my macOS apps from scratch. This was all still very new to me and so I decided to do a bit of triage. The plan was to forego some of the more advanced and secondary features in my current apps and create versions that focus on the core features starting with the app with the simplest code and working my way through to the app with the most complex code. As a result, the first project I selected was iKeeper 6 (with the plan being to follow with Finance 9 and then Archive 9).

The plan was good, but there was a disconnect between creating a user interface in Xcode (using Interface Builder, and later Storyboards) and connecting it up with Swift, and while I did have some early success (which you can see mentioned below at the start of the section on "iKeeper status"), in the end it all came crashing down. The user interface needed code that was very un-Swift-like and after months of struggle I wasn’t having much luck at reconciling those differences. It was very discouraging and I even started to consider giving up entirely.

Then came SwiftUI It was like Apple was reading my mind and I watched in amazement as SwiftUI seemlessly blended the user interface and Swift together. There was, and continues to be, some good news and some bad news. SwiftUI was something new and with that came some missing features that were not implemented yet (and some still haven’t been). SwiftUI is still evolving and so some ways of doing things have changed rather drastically. There was not really a lot of comprehensive learning materials out there, and while this has greatly improved for iOS and iPadOS, macOS is still sadly lagging behind.

One day while looking for macOS-specific SwiftUI tutorials, I came across a short video by Paul Hudson at Hacking With Swift. It covered a little bit of SwiftUI for macOS, but also mentioned a full, free, comprehensive SwiftUI course he had just released… for iOS. The video was very good, but it was also clear that I really needed something that covered things in a lot more detail to learn SwiftUI. I emailed Paul and he kindly wrote back and assured me that, while there are differences between macOS, and iOS and iPadOS, the core elements of SwiftUI are the same so I would not be wasting my time learning something specifically tailored to iOS and iPadOS. And with that, I started 100 Days of SwiftUI. I have to say, for anyone reading this that is looking to learn SwiftUI, this is a really great course and I highly recommend it.

I finished 100 Days of SwiftUI at the end of February 2021. For a few days after that I watched through some other SwiftUI videos that Paul and others had created. They now made a lot more sense. Unfortunately there is still a surprising lack information specific to macOS, but Paul mentioned to me that he is working on a macOS SwiftUI book.

In March 2021, I altered my plan slightly. While waiting for more macOS-specific SwiftUI materials to become available, I would use what I learned in Paul's course to work on a project for iOS and iPadOS. It would be fun to see just how far I could get with iOS and iPadOS and, in theory, it would give me some working SwiftUI code that could be adapted to macOS so I’m not just sitting around waiting to start entirely from scratch. I decided to start with iKeeper and then move on to Finance as they would both make sense on iOS and iPadOS and I still like the idea of starting with the easier pieces and then building up to the more complex parts. How is the new plan going? Check out the “iKeeper status” section below…

At the end of March 2022, Paul Hudson finally released Hacking with macOS: SwiftUI Edition and it includes all the latest changes to Xcode and SwiftUI that Apple have made in the time since Paul initially mentioned the book to me so it is fully up-to-date! I am very excited about this (and surprised that this appears to be the very first book released anywhere that focuses on SwiftUI exclusively for macOS. Paul’s book was very good but, due to several things beyond Paul’s control, was not complete and missing a few chapters / tutorial projects to work through. I read through all of what was provided and it was quite good, but I needed more information. Around mid-April 2022, raywenderlich.com released macOS by Tutorials by Sarah Reichelt and I started to go through that. It filled in most of my remaining questions and it was also extremely helpful to see programming tutorials approached with a different perspective.

Important information for Finance and iKeeper users

If you must upgrade to macOS 10.15 or later, I STRONGLY RECOMMEND turning OFF password protection in my Finance and iKeeper apps (if you are using that feature) BEFORE you upgrade (you WILL NOT be able to do this after installing Catalina or Big Sur because my current apps WILL NOT RUN). There are two reasons for turning off the password protection: First, it will ensure that you can, at the very least, use any 64-bit SQLite database app to read the data you have entered into my apps (although it won’t be as organized or useful as a dedicated app, it will at least give you a way to access your information). Second, it will help you to move to a newer version of my apps built with Xcode and SwiftUI. Right now it seems highly unlikely that the first new versions of my apps will have a password protection feature at all or, even if they do, that it would work in a way that is backward compatible to what I did in my SuperCard-based apps.

iKeeper status

I was making some progress with the plan of writing a completely new macOS app from scratch to cover the essential basic features of iKeeper in Xcode (with Storyboards for the user interface) and Swift. There were complicated things that were surprisingly easy to do, and simple things that were surprisingly complicated. But every time I started to think that things were going really well and maybe I was getting the hang of it, there consistently was something unexpected that came up and completely derailed that momentum. There were some victories, such as reading in an existing iKeeper 5 SQLite database file (without password protection), and that Swift code might end up being very useful and well worth the time it took to figure out. There were also a lot of failures and eventually the whole thing just came crashing down around me.

I’m sure if you have read all the updated information in the sections above the suspense is killing you and you're dying to hear where things stand right now with iKeeper and the new plan. I can’t contain my excitement any longer, so here it is: iKeeper for iOS and iPadOS is done!

That’s right, approximately two-and-a-half months and my first post-“100 Days of SwiftUI” project is complete. I have to admit, I was really worried and didn't say anything here as I was working on it because it was going really well and the last time I was that optimistic and included some news in this section, everything ended in complete disaster. SwiftUI constantly exceeded my expectations and I was amazed as I overcame every single obstacle that had doomed my previous efforts. Apple really got this right. That isn’t to say there were not challenges along the way. I’m still very new to all of this and couldn’t have done it without Paul Hudson’s excellent course and his SwiftUI By Example reference guide and other materials, Mark Moeykens at Big Mountain Studio with his SwiftUI Visual Reference Guide, my good friends Tomas Franzén and Chilton Webb, and others.

I even got a bit carried away with all the fun. Not only does iKeeper for iOS and iPadOS cover all the basic features of iKeeper 5, it also goes beyond to add some improvements I’ve been wanting to make and some really cool new features. Check out the little sneak peek I posted here.

Where does that leave iKeeper? I’m not planning on releasing the iOS / iPadOS version until there is a new macOS version to go along with it so existing users can import their data. As I write this, I have finished reading through Paul Hudson’s Hacking with macOS: SwiftUI Edition (except for a few missing chapters) and Sarah Reichelt’s macOS by Tutorials. They have answered many of my macOS-specific questions and I have finally started to work on the macOS version of iKeeper! In regards to the iOS / iPad OS version, WWDC 2021 introduced some changes for SwiftUI and in the process of working on the macOS version of iKeeper it may be beneficial for me to update some code on the iOS / iPadOS version in areas where things overlap. So I might have to bump up the requirements to iOS / iPadOS 15. The macOS version will likely require macOS 12 as things stand at this moment. I would also note here that WWDC 2022 is coming soon and with it there will likely be further improvements made to SwiftUI so that will also have to be considered as I continue to work on this project. 

Finance status

With the SwiftUI version of iKeeper for iOS / iPadOS done, I was hard at work on the SwiftUI version of Finance for iOS / iPadOS. Things were progressing rather well, though a bit slowly as I carefully considered the new interface options available to me in SwiftUI. As I mentioned in the previous section, what I’ve learned in the process of working on iKeeper has been extremely useful and applicable. When it comes to picking a date, creating some labels, adding new data, deleting data, updating data, syncing data with iCloud, displaying an overview list (including in a multi-column format on larger screens), searching or filtering that list, adding a popup a menu, managing preference options, and more, I’ve already been down this path once before (even more in some cases when including the tutorials of “100 Days of SwiftUI”). The point here is that, where there is commonality, I’ve learned things in SwiftUI that is making the process a bit easier.

That doesn’t mean that it has been entirely smooth sailing. There are features that do not overlap. There are still many challenges and a LOT for me to learn (and that has caused some frustration and delays in recent months), but at least I didn’t have to start entirely from square one on everything.

For now the work on the SwiftUI version of Finance for iOS / iPadOS is on hold as I learn more about SwiftUI for macOS. Once I have learned enough to create the new version of iKeeper for macOS and can get that (and the iOS / iPadOS version of that) finally released I will turn my attention back to this project.

A note about Archive

I get it. I am an Archive user too and I would love to be able to upgrade to macOS Monterey. I’m frustrated that work hasn’t even started on the new version of this app, or any macOS app, or has it? With the SwiftUI version of iKeeper for iOS / iPadOS complete and the SwiftUI version of Finance for iOS / iPadOS currently underway I am continuing to learn about core features of SwiftUI and gaining valuable experience every day that should be relevant regardless of platform. That said, Archive doesn’t really make sense on iOS / iPadOS and it is clear that there are unique areas of macOS that will likely require some time for me to learn when the moment comes. I wish I could say for certain that I know how this all works for macOS, but that is unfortunately still something of a mystery and, as I mentioned in previous sections above, the answers will have to wait until there are more materials available that explain this in detail for me to delve into.