It took me a while to figure out all the ins and outs of callback URLs and the new (yeah a few years old) twitter APIs. But I have it working on both the Catalyst app and the iOS app. I’ve not figured out how to get it working on the WatchOS version… but excited to have submitted the App to Apple for review. Let me know what you think!
Apple’s iPad Magic Keyboard thoughts
I’ve been a huge iPad fan since it first game out. I bought the first four versions sight unseen, and with each one I loved it more. I have the original iPad keyboard stand, that plugged into the 30 pin slot and only worked in portrait mode. When the first iPad Pro came out, I immediately picked it up, along with the Keyboard Folio. It was amazing! It showed the promise that was yet to come in the iPad – a device that not only was great for reading and consuming concept, but a true creation device.
But to do a lot of development for iOS you need the mouse. Yes, you can use text editors and write code, but the ability to run simulators, wasn’t there yet. And not many apps have added keyboard shortcuts to their code.
When the 11inch iPad Pro was released, and iPadOS was released at WWDC last year, I envisioned that xCode was coming soon.The support of a mouse for accessibility showed that something was coming, and now we see how that vision was fulfilled.
So how is the new Magic Keyboard? There are a bunch of great detailed reviews, my favorite is from Federico Viticci over at MacStories. His level of details in all his reviews is fantastic! I highly recommend you read it, in bringing together your own perspective. Having said that:
- Is it worth the money? – Hate to give a consultant’s answer to this one, but “it depends.” What do you plan to do with it? What are you doing with your iPad today, that would require you to get a keyboard and trackpad? Do you already have a keyboard? (As I mentioned above, I’ve used the iPad Pro keyboard case from Apple).
- What’s the most annoying thing about the Magic Keyboard? I had to think hard about this one. I am using the 11inch 2018 iPad Pro. I have an 13inch MacBook Pro from my day job, a 16 inch MacBook Pro for my personal development machine, and a 27inch iMac for fun. Each of these devices has a different keyboard. So the annoying part would be moving back and forth between the devices and taking a few seconds to get my finger positioning right. I am a touch typist, so the muscle memory takes a few minutes to kick in. The other thing is, I do touch the trackpad more on the iPad Magic Keyboard, more than I do on any other device. I feel that is because of the keyboard size. If I had the 12.9 inch iPad Pro, I don’t think I would have this issue.
- What’s the most surprising thing? This is easy, how quickly I was able to figure out all the gestures. I was surprised that much of the experience just seemed natural.
I am hoping that the rumors that xCode is coming to the iPad are true. I am ok if it is limited functionality. I am used to that as apps come to the iPad, as long as they add functionality overtime. Just look at what Adobe has been doing with PhotoShop, or Microsoft with Office.
I don’t think the iPad is a Laptop, even with the keyboard and trackpad. It is a different experience and when I am using it, I do things differently. I feel I am much more focused, and in some cases more productive. Now if I could only have a few more of these Magic Keyboards, I would put them around the house!!!
Time keeps on slippin, splippin, slippin
I’ve been amazed by all the posts and stories from people having time to do all the things they have been putting off. They are taking the “extra” time made available during our current lockdowns, and learning new skills, playing old games, and basically just relaxing. Unfortunately, I’ve not had that ability.
On March 12th, I presided over an emergency meeting of the board and production team of the non-profit theatre group were I am currently President of the board. We were two weeks from opening night of this year’s performance, and the governor of our state had just announced that groups of 250 people or more could not meet. The group decided that we could not, keep rehearsing, and had to quickly develop a plan for how we could restart rehearsals and the production, when restrictions were removed. We’ve currently moved the show date to early August, and I am hoping that the dates hold.
I had hoped that this break would free up my evenings to relax a bit, but instead I still had to submit the group’s main yearly grant proposal. Given that this is my last year as President of the group, I’ve been working hard to document and automate many of the processes, something I had wished had been done before. Due to COVID-19, the deadline for the grant was moved to our a few weeks, which was a good thing for my automation, but meant that I filled the time with more work on the grant.
The other automation I’ve been working on is to complete the transition from Quicken to Quickbooks for the non-profit’s financial management. The amount of manual work that the group does to generate reports and budgets for each production, has been amazingly high. So transitioning to quickbooks would greatly improve the reporting, and also benefit in the generation of grant proposals.
These two activities easily filled the vacuum of time that opened due to the show shifting. (In my best Ronco – Ron Popeil voice) but wait, there’s more. I’ve been working to nominate new board members for the non-profit, cancelling all our March ad buys for the show, and rescheduling them for the August date. So that takes a bit more time.
I had planned on working on re-adding Twitter support into my app – Wasted Time. If you follow my blog, you know that last year, I completely rewrote the app in Swift UI and Combine making it available for the Mac and Apple Watch, on top of the original iPhone version. The twitter API I was using is no longer supported, and I would need to completely rewrite that part of the app, which I didn’t want to cause to delay the app. Of course, I’ve not had time to circle back and work on this, but I have plans. 😉
It seems that the extra time has been filled with extra work.
Mac App Store = Tighter checks on new app
I’ve been playing with Catalyst since WWDC. Well not so much playing with it, but thinking about it while completely rewriting my Wasted Time app into SwiftUI. The main catalyst for rewriting the app is all the frustrations I had with Storyboards and Autolayout. Every time I wanted to add a new UI element to my app, it seemed that Autolayout would freak out! I also used this opportunity to write a simple WatchOS only version of Wasted Time, and surprisingly it translated well. (It has been available on the Watch App Store since Oct.)
After writing the WatchOS version of Wasted Time, I used this as the basis for the full rewrite of the iOS app. I learned that some of the SwiftUI elements, didn’t translate well; just like some of the iOS elements didn’t work on WatchOS (Tabbed Menu Items). (Available on the iOS and iPadOS App Store since Jan. 2nd).
One of the key differences between this version on prior versions, is that I need to rewrite my Twitter code, which I have not yet done. As such, I don’t have Twitter enabled in the new version, and will probably not have this done for a few months (I am currently rehearsing for a new light opera which I will perform in late March, it consumes all my free time).
I also submitted the Mac version, using catalyst, at the same time as the iOS version; however, it has been rejected from the App Store multiple times! This has been an incredible learning experience. The most surprising aspect of the rejects is that they find one issue and immediately reject. Each of the items so far, could have been easily seen in the first submitted version. Let’s go thru them:
1) Rejection due to name mismatch. I had setup the app for the App Store as Wasted Time Mac! But when using Catalyst, it just used the name of the App in the about window. As such it was listed as “Wasted Time”. I was able to just go to iTunes Connect and rename the app, and then hit resubmit the same binary.
2) Rejection due to twitter switch not “working”. This was on me completely. I had added the UI element for the Twitter code as I started to work on Twitter. But I had not yet completed the Twitter code. So the App Store toggled the switch and nothing happened. (Unfortunately my plan was to get this work, but after half of my vacation coding time being taken away due to illness, the code wasn’t ready). Funny thing is, the iOS version has the same switch, and it passed the App Store check.
3) Reject due to help menu. When I first started working on the Mac version of the app, I did a truly native app version. I had issues with the App Store upload, I also decided it would be cooler to actually do the catalyst version. On the native version, I actually had gone in to the Storyboard and removed a bunch of menu items. On the Catalyst version, I had not removed non-functioning menu items. The basic app layout has a tab which explains how to use it. This is because on iOS devices there’s no real help system. In Catalyst you can’t use the storyboard “fix” to remove the menu items, but by using the menuBuilder function, I was able to remove all those items which do not function.
4) Forth time is the charm! Here’s the URL for Wasted Time – on the Mac!
Cracking the Code
Today’s been very productive so far:
- I’ve been able to fix a few UI issues that have really bugged me in my Mac version of WastedTime.
- I’ve uploaded version 9.0 of WastedTime for iOS to the App Store – the total rewrite of Wasted Time using SwiftUI and Combine
- I’ve built both a Mac Native and a Mac Catalyst version of Wasted Time
Things I still need to do:
- Figure out how to use Twitter api with the call back URL
Year End Thoughts
Finally taking some time off and getting time to reflect on the year/decade in technology. Einstein’s idea of relative time is very appropriate for thinking about the last decade. Every year that I am on this planet, the time between years seems to run quicker and quicker.
It’s been an amazing decade for technology: We’ve scene the launch of AR and VR in a meaningful way – remember Google Glass and the original Oculus Rift? Well now we have HoloLens and Oculus Quest, and we are seeing meaningful usage in maintenance within the enterprise. We’ve seen Apple shift from Objective-C to Swift, and expansion to new ways to manage the explosion of screens (who has played with SwiftUI?).
We’ve gone from a web-based / desktop world, to a app based / mobile world. Personally, I spend more time on my iPad for reading, writing, and some content creation then I do on my MacBook Pro.
The Internet of Things has gone from hype to the trough of disillusionment. This is actually great news, as this means that it is common enough that we will now start building out those solutions that are meaningful.
Electric vehicles have gone from rare to the Tesla 3 being the best selling car in the world. The number of these that I see in the lot at the office, seems to reinforce this.
On the negative side, all this connectivity and innovation has driven an explosion of ransomware with cities, hospitals, and other government. Security and privacy continue to be under attack, as most people still do not understand how much information they leak online.
And finally, we still don’t have cheap and affordable flying cars! Well maybe this coming decade!
Status update on WastedTime (all platforms)
Over the last few weeks, I’ve been working to do two things on the WastedTime set of apps. (Wow! I can say set of Apps now).
While the basic functionality is working on all three platforms, iOS, macOS, and WatchOS, I am not happy with the behavior of SwiftUI to render the various graphics. SwiftUI has introduced some really cool images with the SFSymbols library, and using those simplifies the sizing of elements across platforms.
Well, not really, given that SFSymbols is not really supported correctly on macOS. So that means that my buttons to add and remove attendees in a meeting cannot be the same on macOS. That wouldn’t be a problem, if SwiftUI would allow me to use the Image() for buttons. My plan was to go back to my original images used in the iOS app, and just leverage them for the macOS version. Nope – they don’t render at all.
So, I decided I would go back and start working on the Twitter integration instead. This seemed like it would be pretty easy, since I had that working fine using TwitterKit on iOS for years now.
Well, not really, given that Twitter discontinued that service… So, I would have to try and use a new library. I decided to try Swifter. I had heard good things about this library, and they support both iOS and macOS. While I setup the code to enable Twitter and to create a Tweet, nothing happened. Evidently, you need to setup a callbackURL to leverage the new Twitter serviced. Having not dealt with callbackURLs at all, I took to StackOverflow to get more information. Net-net, there is no information. So, go to the gitrepo for Swifter, and again, no help. So I posted an issue to the repo, and have been in a wait state until I hear back.
Guess, I am going to have to do a lot more reading and learning. More to come…
WastedTime for Mac (beta available)
So, I did it, I wrote my first ever macOS application. It is WastedTime for Mac, and I am amazed it works. It is still beta, and I am going to add in the twitter integration. I also need to add keyboard short cuts so you can you the (+) and (-) keys on your keyboard to add and remove attendees, but it works!
The most amazing part was that I could take my WatchOS app, and extend the project to add a new target, and reuse 90% of the program logics. Once I have the macOS version completed I will recreate the iOS and iPadOS version. Wish me luck!!

oh, and by the way, here’s a picture of the app – yeah I could really use a designer:
Working on Wasted Time for Mac
Now that WastedTime Watch! Has been released, and so far, I’ve not heard any new bug reports, or even seen any crash reports, I’ve started re-writing WastedTime completely. What I mean by that is, I am working on converting the iPhone/iPad version to a Catalyst application. I will then release a Mac version.
What does this mean? Well I’ve been using Twitter’s own Swift based APIs that were made available a few years back via Cocoapods. That has been killed a while back, and it certainly is not supported on the Mac. This means I am learning a whole new API to support the Twitter integration. It is called Swifter.
The biggest transition, however, is covert in from RxSwift to Combine. Luckily, when I wrote WastedTime Watch!, I did it from the ground up, so I had written a Combine version of most of the logic. So hopefully I will get a few hours each week for the next few weeks to complete the re-write.
Wish me luck!
WastedTime Watch! version 1.0.1
After much struggle and gnashing of teeth, I had a few people help me on StackOverflow! And I am proud to announce that the big bug has been squashed. The issue was the app would not store the settings. So now, after I get approval from Apple, you can finally save your settings!