The Widgets War

Audio Widget ThumbnailWhile not as dire sounding as the title of this article, (I like alliteration.) I’m in the middle of a battle. The difficultly of creating widgets was severely underestimated. Every single widget (except maybe the clock) has been a struggle. What’s even more surprising is how much I love it. It’s an epic challenge of man-vs-machine. The thrill of victory, in this cerebral conflict, is exhilarating.

Apple nailed it in their “Goodnight Developers” WWDC 2019 Keynote intro video. The experience is just like that, but with more yelling. Well, at least for me. I seem to be having even higher highs and lower lows with my project. Here’s an example…

Music Player Tasks – Checklist

After weeks of struggling with the “Audio Player” widget, I dedicated an entire day to finishing up a single widget. There was a list of five missing features. Even after the day was done, I had only managed to complete a single task. And yet, it felt as if I had accomplished a lot.

Admittedly, I’m still learning Swift. Everyone is still learning Swift. It’s a new programming language that has been changing significantly every year. Yet, that’s not the cause of the slowdown. It really is a challenge. How hard can it be to play music? That was my first reaction to this part of the project. Now, I realize the insanity.

Yes, insanity – that’s a great word. See, it’s not enough for the “Audio Player” to play music. It needs to manage the songs. It needs to skip songs. For the longest time, all it could do was play the first song in the list. The 80s freestyle song “Sincerely Yours” played over… and over… and over again… maddening!

Audio Player – Sincerely Yours

I like 80s freestyle, but this was getting ridiculous. Combined with the technical issues that seemed unsurmountable, I could feel myself giving up. There were so many issues with this one little widget. How to access local music? How to play the music? How to access the metadata? How to display the metadata? How to build a queue of songs? How to build a bridge between Swift and the WKWebView? As soon as I would resolve one issue, another one would appear.

While working on the app, I’m having to manage customer service issues too. A lot of people are disappointed that the Widgets app is not a perfect replacement of Dashboard. I understand the frustration, but the Widgets app is not meant to be exactly the same thing. The dream… the vision… for the Widgets app is to build something different, perhaps something better. That’s motivation to keep going.

When I finally got the “Audio Player” working – wow – such a rush!

To test the quality of the widget, I had it play songs at 100 times the normal speed. That’s even more madness I suppose, but it sounded so cool. During this stress testing, lots of errors were found and corrected. There’s still more work to be done, but it’s really close now. That’s when it really hit me. I realized the true scope of this project.

Winamp is a media player. While it has lots of features. It basically has one job and it does that job well. Yet, that is such a beloved app. It’s also very successful. Perusing the related Winamp Wikipedia article, it says that Nullsoft (the company that created the software) sold for $80 million dollars.

The Widgets app has many jobs. Each widget is almost like building an entire app. While the “Audio Player” widget is simply not on the level of Winamp, the overall quality of the Widgets app is heading in that direction. How far will this project progress? Will the Widgets app be legendary?

While the sales are far from early retirement levels, this project feels different. More and more people are genuinely interested in this app. There is a need for this app. This app does a job that lots of people like.

Will Photics enjoy the spoils of war? Will the success continue? I don’t know. What I do know is that I’m enjoying the journey. Before this project, I felt pretty lousy. I was wasting so many hours watching YouTube. There was this nagging feeling that I should be doing something better in life. This app makes a difference. Even if in a small way, it can help people. That’s wonderful! Plus, figuring out the brain teasers adds variety from the daily grind. Once one widget is done, another challenge awaits.

But instead of moving forward, the immediate goal is go back a bit. Once the “Audio Player” widget is complete, the “Contacts” widgets is in serious need of repair. It can’t handle thousands of contacts, which causes a crash on startup. That’s a big issue! The challenge is real. The problem is likely hurting sales and ratings. The goal for version 1.8 of the Widgets app is to fix that problem. Some other nice improvements are in the queue.

I’m working hard to make Widgets a quality app that people love. To those that bought a copy of the app, thanks! Additionally, I updated the “Widgets” section of this website. It includes information about technical issues, feature requests and a list of widgets that are under consideration. While future development is not guaranteed, I’m highly motivated to keep improving the app. Hopefully you’ll enjoy the upcoming updates soon.