Today I learned

iOS apps require account deletion

Since WWDC21 all iOS apps that provide registration are also required to provide the deletion of those accounts.

Invalid Gradle Private Key

Gradle did reject my ssh key due to invalid privatekey.

The solution: converting it into a different format.

ssh-keygen-p -f id_rsa -m pem

CSS Rotate und Skew

With CSS skew you can simulate a perspective effect. If you want to additionally rotate the element, use rotate first then skew.

Otherwise you might get a really wierd result.

Swift and Firebase

Nothing especially new here, but a reminder: Firebase might be a good choice if you need realtime updates.

Instead of implementing and connecting to websockets and implementing one-time requests and observing differently, you can simply use getData or observeValue as they are already implemented.

Even some errors vanish when observing: you start by the cache and if there is no update due to errors, you don’t get new data. But beware: Firebase still might not be the best choice, depending on your app or the circumstances.

SwiftUI @main AppDelegate

When using @main on a SwiftUI.App and @UIApplicationDelegateAdaptor(AppDelegate.self) you can still have an AppDelegate without handling SwiftUI manually as without @main.

You don’t even need a SceneDelegate! A huge difference for tiny apps!

Android Permission now requires a description

Now, Android apps require a description for each permission. Back then, it was optional.

In contrast to iOS, this is only a guideline and not enforced by the Android SDK. Instead the developer needs to implement their own alert. But with great power, comes great responsibility as it could be abused.

Updating Bitrise binary uploads

Bitrise binary uploads cannot be updated after saving. Instead they need to be deleted and recreated. Thus all workflow steps need to be updated if they rely on the data.

Pro-tip: when copy-pasting, skip the BITRISE_IO and _URL parts – they will be inserted automatically when using the web UI.

Localization order

When maintaining multiple locales within your project, try to keep line numbers consistent across all locales. Also keep the order of translations consistent.

That makes differences easy to spot.

SwiftUI translations and UIKit

Nothing new today, but a quick reminder:

Even if you don’t need to explicitly localize String literals for Text manually, you can still need to when passing Strings to UIAlertController or other UIKit classes.

Of course. But sometimes I still forget while writing the code.

ftp-simple vscode workspace

ftp-simple allows opening FTP connections as VS Code workspace!