Cryptical 4.0...and a look back

Today I released a new major version of Cryptical, my little password generator for iOS. Cryptical 4.0 (re-)adds1 the ability to exclude specific characters from selected character sets. I modernized the interface a bit, using a more consistent look over all screens that fit the current version of iOS, completely overhauled the Batch Generation screen and also replaced all of the icons with newer, better designed alternatives. Additionally there are plenty of other improvements and bug fixes. So all in all, it is a solid new version.

Cryptical is now over 10 years old. I released version 1.0 in August of 2010–today it is the oldest app of mine still available on the App Store. Of course it did not remain unchanged over time; it received plenty of updates. Back in 2010, “Lite” and “Pro” version were a common thing–there was a free “lite” version with a reduced feature set, and the paid-upfront “pro” version with all the features and without ads. For ads on the free version I initially used AdMob, but quickly replaced it when iAd2 became available. It was the early times in the App Store and business models were still sorted out. Cryptical featured a pixel-perfect custom interface, made by myself in Photoshop. This is what we did, back then, and honestly it did not look bad.

Cryptical 1.0 vs. Cryptical 4.0. Remember skeuomorphic interfaces?

I quickly realized though that I was cannibalizing sales of the pro version with my own light version. The feature set of the light version was “good enough” for most users, and they did not seem to mind the ads. This left me with little choice. If I wanted to have any meaningful revenue with the version paid upfront, I had to remove the free version–which I did in 2011.

The app remained largely unchanged until 2015, when a bug occurring in iOS 8 forced me to either remove the app from sale, or supply an update. For some reason the launch screen animation did not start3, which meant users could not use the app at all on iOS 8. I received some angry emails about it. For a short time I thought about simply removing the app from sale, but I actually liked it. I loved the name, the concept and used it myself all the time. Browsing the App Store for competitors, I quickly realized that nothing like Cryptical existed–most of them were badly designed and/or lacked features. Given the age of the code base, however, just fixing the bug would have been impossible. I had to rewrite it. I just had switched to a new job, writing Swift full-time. And so I rewrote it in Swift. I redesigned the interface to get rid of the skeuomorphic design and matched the “flat” look of iOS. And since I no longer saw much of a point of charging for a small app like that, I made Cryptical free, with all its “pro” features.

Over the years Cryptical received a few more updates, mostly bug fixes and changes to adapt to new iOS devices. The last update was in 2018. And then, in December of 2020, I received an Email vom Apple:

“Action Needed: Your app’s compatibility with iOS and iPadOS - We noticed that your app, Cryptical, was built using the iOS 8.4 SDK or earlier. As a result, your app cannot be signed with our latest App Store code signing certificate, which will be required for apps to launch in upcoming releases of iOS 14 and iPadOS 14.”

Once again, this forced my hand. iOS now actively started to warn users when they launched the app, telling them in a system alert that “the developer” had to update the app, or it would no longer work with future versions of the OS. Over a very short period of time, I received many, many emails from concerned Cryptical users, all of them asking me to supply an update. As it turns out, Cryptical had quite a fan base, especially in the US. Without me noticing, it had accumulated 1120 5-Star-Reviews, a surprisingly large number for such a niche app. People who used Cryptical loved it. And so I once again checked out the source repository, and began work.

I first considered only building it with a newer SDK. There was a problem though: I was now using an M1 MacBook Pro, and the code base and most of its dependencies were written in Swift 3. Xcode 12 on macOS Big Sur could no longer convert this version of Swift to the current Swift version, and the last version which could - Xcode 10 - did not run on Big Sur (or my M1 Mac). I had to manually update the code and its dependencies to compile on the new machine. In the end, I rewrote large parts of the app, did a few interface refreshments and prepared Cryptical for future updates.

There is one more addition to Cryptical that I have not mentioned before: it now contains a Tip Jar. Over the years, people often asked me how they could support the development of the app, and I usually told them to buy my other apps. You can now do that directly, in Cryptical, if you wish. Tipping is optional, of course - all features remain free.

So what does the future hold for Cryptical? I have a few feature ideas in the pipeline. While it still remains a hobby project (do not expect weekly updates), I will not let it remain unchanged for two years anymore though. Promised.

  1. It actually used to have this feature back in the first versions, but I removed it for some reason in a later rewrite of the app. 

  2. The fact that Apple once had its own mobile advertising framework seems inconceivable in today’s world. Ads have the dirty stain of customer tracking and privacy violation, so it is not surprising that iAd shut down in 2016. 

  3. It had a snazzy animation, because, well…that is how we rolled back in 2010. 

App List FAQ

App List has been available on the App Store for more than two weeks now, and has accumulated close to 6000 downloads across 70 countries. The reaction was overwhelmingly positive; it holds an average App Store rating of 4.9 (out of 5). I am quite surprised about the success and I am very happy that users find it so useful.

I have also received many questions via Email, Twitter and App Store reviews. I would like to address the five most frequent of those questions in this post.

App List 1.1 is currently “In Review” at Apple, and has unfortunately been in this state since May 28 (almost 13 days at the time of writing). Usually, apps stay “In Review” for a few hours at most, but for some reason it takes exceptionally long this time. I have already contacted App Review and asked what the holdup is, but all they told me is that they “need more time”. Since I am unsure what the result of that review will be I have currently stopped putting more work into the app. The list of potential and upcoming features is long (see question #3 of this FAQ), but until I can be somewhat certain that App List has a future on the App Store, I am not spending more of my time on it.

That being said, the app is still available on the App Store and there is a chance that the review time is just oddly twisted due to Coronavirus, the upcoming WWDC or the current political climate in the US. Assuming a good outcome, here are the most frequent questions and answers to them.

1. Can you add support for language X?

Short answer: Probably not.

Long answer: I can only really add support for languages I am reasonably able to speak myself. This means English, German (which will be added with version 1.1 that is currently “In Review”) and - by extension through my wife - Swedish. All other languages are pretty much out of the question. The reason is simple. Getting translations for the strings in the app is not much of a problem. But by adding another language, you also need to support that language. If I, say, add a Chinese localization, I will receive a lot more support requests in Chinese, all of which I am not able to answer. App List is a free app, a hobby project. I do not have the resources to support millions of potential customers whom I do not understand.
This is by far the most asked question. When I answer it, I keep getting the reply “your app will be so much more successful in country X if you support language Y”. I am sure it will, but this also opens up the support problem, and does not solve the “free app - no money” problem.

2. Why offer this for free? Where is the catch?

There is no catch. App List is free, period. There is a tip jar1 which you can use to buy me a coffee if you like the app, but that is all. None of the current functionality requires payment. There are also no ads in it, and I do not track my users so there is nothing to sell to anyone.

But why am I doing it like that? Given the feature set App List certainly deserves a hefty price tag. It is tremendously useful, especially if you need to monitor apps for a living (journalists or project managers come to mind). So given that, and given the large amount of work that went into making it, I should probably take $10 to up to $50 for it. But here is the problem: this is just a hobby project. I made this because I wanted it for myself, and there was no app that offered the features I needed. If I start selling this for a “premium” price, I also need to offer “premium” support. I simply do not have time for this. If I offer it for less than the “premium” amount, I still need to make sure that it works as advertised. Since the source data for App List is coming directly from Apple (iTunes Search API and the App Store itself) it may stop working from one day to another, without me being able to much about it. With a free app, this responsibility is lifted from me. It does not cost you anything, and I do not guarantee anything. It is as simple as that.

3. Can you add feature X?

I always welcome feature requests. If you have an idea for a feature, an improvement request, or a bug report, please do not hesitate to send those to me. There are however a couple of feature requests I get all the time, so I want to comment on those quickly.

  1. Searching for an app directly in App List

    This is tricky, because the iTunes Search API only supports 10 requests per minute. Searching and browsing for apps will quickly exceed that limit. It is also highly questionable if Apple will allow this, because it would prevent people from seeing the search ads in the App Store app. So there is currently no plan to add this feature.

  2. Listing In-App purchases, subscriptions and getting price change notifications for them

    This is high on my to-do list and should be possible. No ETA though, sorry.

  3. A version for macOS and tvOS

    I am currently working on the macOS version. It will likely be a Catalyst app, which means it requires macOS Catalina. A tvOS version is planned, but I have not checked its technical feasibility yet.

  4. URL Schemes

    This is already implemented and will be released with a version after the 1.1 that is currently “In Review”. Whenever that is.

  5. Price history for each app

    This is a clever feature that would be nice to have, but unfortunately it is technically unfeasible. Apple does not provide historic pricing data, so I would have to rely on third party data providers…who, guess what, charge money for their service. Another possibility would be to start tracking price changes on my own server, but that would mean tracking all apps all the time, which is impossible with the APIs Apple provides.

4. Will you support iOS 12?

Unfortunately the answer is no. It does not make much sense for me to retroactively add support for iOS 12. There is currently a 80/15 split between iOS 13 and iOS 12. I am trying to minimize support costs, and adding a deprecated operating system would increase support costs. I would have to rewrite the app to use iOS 12 compatible APIs, I would have to test on iOS 12 and keep testing every release on it. There is no way I can do that with my free app. Sorry, folks.

5. Why are background updates required for price notifications?

App List utilizes background APIs (to be precise I am using the BackgroundTasks API introduced with iOS 13) to regularly refresh the apps on your list. If an app has a price change, it posts a local notification (which looks and behaves just like a remote push notification) to inform you about the price change. The advantage is that this all happens on the device and there is no need for a separate server component. The disadvantage is that the way background modes work on iOS, the less an app is used by the user, the less frequent it will be called in the background. So if you use App List very little, the price notifications can become quite unreliable, making you use it even less, etc. Even worse, if you manually kill the app, it is never called in the background, and therefore you will never get a price notification!

The only way to solve this problem is by moving the checking for price changes away from the device and to a server. The server would periodically check apps selected for price update notifications, and post a remote push notification if there is a change. The push notification will always be delivered, independent from how much you use the app or if it is asleep in the background. I am not doing this though, because the server would cause additional costs, and the more people use App List, the more resources the server would require.

Wrap up

These are the answers to the five most common questions. If you have additional questions, do not hesitate to contact me! Use the support button you find on the App List about screen, or just write me an Email.

  1. As an aside, these tips are not making me rich. During the first two weeks I had about $30 worth of tips. Apple takes a cut of 30%, and after I pay taxes on it there is barely anything left. I do not want to give the impression that I am doing this for the money though. This is fine. I never intended App List to even regain the costs of development, but I also do not want people to think that these tips are going to finance my next car. 

Introducing App List

When Apple released iOS 11 in September of 2018, it featured a redesigned App Store. Unfortunately, in the redesign process, a well-liked function was removed: the wishlist. Previously, if you came across an App that you did (or could) not buy or download immediately, you could add it to that wishlist and come back to it at later point in time.

When I first started using the iOS 11 beta full-time I was sure that this was just an accident, and that it would be added again later. After all, the wishlist was an extremely useful feature. As it turned out, Apple really did not seem to like it, because they never added it back.1

I personally really needed that feature, though, because I come across Apps all the time that I simply can not download or buy immediately. Not having some kind of bookmark quickly made me forget about the App. Some developers jumped on the opportunity and made wishlist Apps, but I tried them all back then and never liked any of them.

The good thing about being a developer for your preferred computing platform is that if you have an itch, you can just scratch it. So I quickly created a personal wish list app that I liked, and called it a day. But apparently I was not alone with my problem and my personal preferences, and during many chats with friends and colleagues I quickly realized that there was a real market out there for such an App. And so I kept working on it and improving it.

The result is App List, a comprehensive App bookmarking and wishlist solution for iPhone and iPad.

App List on the iPad Pro

App List serves all the basic functions one would expect from an App wishlist. It lets you quickly add an App from within the App Store2, just by sharing (it features a Sharing Extension for that), and lets you continue browsing the App Store afterwards. If you want, it will send you a Push Notification about price changes. And it quickly directs you to the App Store if you select an App.

But App List is so much more. It packs additional functionality that makes it a complete App bookmarking and monitoring solution. It features several tagging, filtering, sorting and search options to get the most out of your personal App collection.

App List offers comprehensive filtering and sorting options
(Screenshot from App List on the iPhone 11 Pro)

You can use it to track your own apps or that of competitors. It lets you build portfolios of Apps for design studies. Or you could use it to keep track of Apps that you do not use very often, for example travel Apps. Just give Apps a special tag, and you can filter and search for them. Ever wanted to share a list of all your favorite cooking Apps with someone else, all at once? If you added them to App List, you can just select them all and share them with App Name + URL.

App List lets you easily share Apps with other people

If you do not like the default look of the list entries, you can just reconfigure them. Display what information is important to you, and hide the rest. Do you want a huge App artwork, tiny artwork or no artwork at all? The list entry configuration of App List has got you covered.

App List lets you configure the list entries freely

You can use all of the App Store storefronts with App List. It not just supports iOS apps, but iPadOS, macOS, watchOS and tvOS Apps as well! In addition to this, App List will, via iCloud, automatically sync the contents of your App List with all your iOS devices. It also features a dark mode, full support for iPadOS screen orientations and splitscreen multitasking and has pointer support.

App List is now available on the App Store – for free! If you want to support ongoing development or just buy me a coffee, you can use the Tip Jar you can find in settings. No purchase is necessary to use the full functionality though! I hope you enjoy using it as much as I enjoyed making it. And please, if you like App List, share it with your friends.

  1. On a side note, the iOS 11 App Store redesign was a complete failure for me. Not just as a developer, because it did have a negative impact on the downloads of my own Apps, but also as an iOS user. Previously, I spent lots of time browsing the various category lists for new and interesting Apps. With the new editorial format, that browsing was not possible anymore, and I personally do not like the “news” approach. I never read the full-text articles on the App Store front page. I seldom miss the “old days”, but when it comes to the App Store, I do. 

  2. You can also share an App Store or iTunes URL from other Apps, and Springboard (the iOS Home Screen) itself. This lets you quickly create a collection of Apps you have already installed, without searching them in the App Store. 

A better iPad input solution

My current iPad input solution: Magic Keyboard & Magic Mouse (2nd Gen.) and the Apple Pencil

The last few months have been good for iPad users. At WWDC 2019, Apple announced an iOS fork for their tablet computer, unsurprisingly called “iPadOS”. They also announced substantial changes in the way apps and the operating system itself could interact with third party storage: suddenly USB mass storage devices could be connected to the iPad without much hassle, and apps could import photos directly from the camera without routing through Photos.app. Safari finally had a “desktop” browsing experience. And to top it off, there was a new accessibility option: basic pointer device support–-a forshadowing of a more substantial rethinking of input methods in iOS.

As it turned out, iPad users did not have to wait very long for that rethinking to happen. In an (for Apple, at least) unprecedented move, in March 2020 they announced not just a new accessory–the Magic Keyboard for iPad–but full pointer support for the whole OS. Nobody saw that coming.

It seems obvious that the iPad Magic Keyboard would be the perfect accessory for me. It provides both a good keyboard as well as a pointing device. At a price point of 399 Euros, however, I did not want to buy one immediatly. After reading a lot of reviews, and reading many opinions from people actually buying it, it basically came down to this:

  • The keyboard is great and the integration with the iPad hardware and iOS is excellent
  • The keys with backlight are a nice touch
  • It is surprisingly heavy (heavier than the iPad itself)
  • It should be seen as a keyboard stand more than as a keyboard case
  • There are some controversial design choices: there is no escape key, for example, or function keys
  • The build quality is hit-and-miss: the outer material seems to be very fragile and quickly leads to deep scratches even from things like bread crumbs. Many report scratches right out of the factory. And after a while, many people claim bubbles forming under the outer material - as if the adhesive was not applied thoroughly. It seems quality control has failed severely when it comes to the Magic Keyboard.
  • There are claims that the keyboard is draining the iPad battery quickly

All in all I was not very impressed by these reviews and reports. Given the price point, I expected a much higher quality. This is surprising for an Apple product, which usually has excellent build quality at a high price–the Magic Keyboard seems to have a high price only. And then there is the trackpad. I personally prefer mice over trackpads every time, as I find trackpads to be much harder to use, especially when trying to point precisely. Thankfully, the iPad also supports the Magic Mouse (2nd Gen, the 1st Gen is not fully supported), which has been my primary mouse for over ten years now.

Besides the Magic Mouse, I keep using a Magic Keyboard with my iPad. It is an excellent keyboard: light, easy to carry around (I even bought a small pouch for it), requires charging only every few months or so, and it has things the iPad Magic Keyboard is lacking: an escape key, as well as keys for changing the brightness, media keys and volume control keys.

The only downside to this setup is that I cannot use the iPad like a laptop, for example in bed or on the lap. iPad, keyboard and mouse are separate components which can really only be used on a table together. This is thankfully not an issue for me. Other than that, it is the perfect solution for me: I can keep using a mouse, the keyboard has no real downsides and the iPad is still as flexible as it can be.

Everyone takes on a new (old) hobby

During this time of the coronavirus crisis, most people are (hopefully!) staying at home more than they usually do–myself included.

With all the working from home and an eliminated commute time, I find myself having more time for hobbies than I typically have. So I start tinkering, working on new apps, and playing games. This leads to many things I would love to write about, but I really have place to write it anywhere (anymore).

Rather than wasting all my time on World of Warcraft Classic, I decided to revive my blog, and while I’m at it, redesign the whole website. So here it is, I hope it stays. Enjoy!