My game Postcardful has been selected as one of the Top Games To Checkout in August 2020 by GamesKeys portal. You can check the article out here: https://gameskeys.net/top-games-to-checkout-in-august-2020/.
Category: My apps and games
Why I stopped using SwiftUI and AWS in my personal project
At the end of March this year, when the coronavirus lockdown began, I started missing table tennis. I decided to create a mobile app for table tennis players and enthusiasts. I already have a few personal apps and games in the iOSĀ App StoreĀ but I wantedĀ ForehandĀ to be a bigger, multiplatform (iOS and Android) and long term one. Something like a personal business card for a mobile apps developer.
As Iām an iOS developer, I started from an iOS app. Itās 2020, Iām starting a new iOS app, sounds like a great opportunity to learn more about SwiftUI I thought. So I started building the iOS version of Forehand using SwiftUI. It was going quite well letās say, I added a few initial screens.

SwiftUI project structure
First problems that I faced were around a performance of VStack. I had a VStack containing 5 WebView views, each of them loading a different HTML, embedded YouTube video.

WebView which I embedded 5 times (each with a different HTML) in VStack
Putting 5 instances of such a view was killing the performance, VStack was just almost non-scrollable.
Main issue number 2 was customising a navigation bar. Navigation bar on some of the screens was supposed to look like this:

Navigation bar with a custom background colour
or like this:

Another example of a navigation bar with a custom background colour
Unfortunately customising navigation barās background colour or its titleās background colour is not natively supported in SwiftUI and I needed to try some UIKit-ish solutions. None of them was perfect and at some point I even ended up replacing a navigation bar with a normal View. It worked, I could fully customise it but I didnāt feel itās a long term solution. At the end I left default colours.
The last thing that Iām gonna mention in this article about problems with SwiftUI is Onboarding screen. In UIKit we do it with UIPageViewController. Unfortunately there is no built in SwiftUI component for that yet. I researched Stackoverflow what workarounds other developers do, I found a few solutions. They were based on manually calculating frames of swiped views. It didnāt work well for all screen sizes unfortunately so I decided to use a UIKit bridge called UIViewControllerRepresentable. UIViewControllerRepresentable and UIViewRepresentable are protocols which let you embed old good UIViewController or UIView in a SwiftUI app. So I had Onboarding screen working but there was a navigation to the Home screen after tapping a Next button on the last page of onboarding missing. In a UIKit-only app it would be an easy push(viewController) or performSegue(with identifier) but SwiftUI screens are driven by state changes so itās a bit different.
I ended up doing something like this:

I was sending a āNextButtonTappedNotificationā from Onboarding SwiftUI view conforming to UIViewControllerRepresentable and it was being received by ContentView which is SwiftUI appās entry point. Not entirely clean solution but changing screens worked. There was a problem with a navigation bar though. I couldnāt get rid of an additional top header added by NavigationView / NavigationLink. I spent 2/3 evenings on that and taking into account previous problems as well I came to a conclusion that maybe it will be better to wait for SwiftUI 2.0 and not to spend my evenings on being frustrated and trying to fix things that are super easily achievable in UIKit. Thatās why I decided to stop using SwiftUI for the first version of Forehand. I rewrote everything what I had to UIKit views in 2 days and I started progressing with the project much faster.
Most of the mobile applications need some sort of backend, some remote data provider. Forehand is not different. As I am a one-man-band (in terms of devs, because I have an awesome designer working with me on Forehand too), I wanted to go for something easy to set up, integrate and multiplatform (iOS, Android). I considered 2 options: Firebase and AWS. From my previous experience I knew that Firebase is easier to set up, you donāt need to deal with a maze of permissions setup but on the other hand AWS seems to be more scalable. As I think about Forehand as the app that Iām gonna support and maintain for a longer time, I decided to use AWS driven backend for my app. Unfortunately I faced a blocking issue just at the beginning of the integration, at authentication stage. I want the users of my app to be able to authenticate using the following methods: Log in with Facebook, Sign in with Apple and Email + password sign in. Sign in with Apple is not only a nice to have sign in method, but itās also required by the App Store review guidelines if you have any social sign in method (including Log in with Facebook) in your app:Ā https://developer.apple.com/news/?id=09122019b. Even though AWS Cognito officially supports that sign in method as per this article:Ā https://aws.amazon.com/about-aws/whats-new/2019/11/amazon-cognito-now-supports-sign-in-with-apple/, there is still an open issueĀ https://github.com/aws-amplify/aws-sdk-ios/issues/1809Ā and people try to find hacks to make it work. I didnāt want to go that way, I didnāt want to spend my evenings on finding hacks to fix AWS Cognito bugs and thatās why I decided to switch to Firebase where all sign in methods which I needed worked perfectly and the whole configuration process is really well documented.
Conclusions
- Some of you may say that Iāve given up too early and thatās a fair point. I just want my free time that I spend on coding a personal app to be as enjoyable as possible. I also want to see the results as soon as possible, to touch what I build and to let other people touch it, test it, give some feedback.
- Most of the SwiftUI issues that Iāve faced are fixed in SwiftUI 2.0 which will be publicly live this autumn. There are lazy stacks, native support for onboarding-like screens and much more:Ā https://developer.apple.com/videos/play/wwdc2020/10041/. I just didnāt want to wait a few months for SwiftUI 2.0 to be publicly live and then maybe 2/3 months to build my app from scratch using a technology that Iām not fully confident with yet.
- In terms of a backend solution – Iām not forgetting about AWS. Maybe one day I will go for some kind of a hybrid solution: Firebase managed authentication and AWS for storing and providing data – I donāt know if itās possible though. I would need to do more research.
I hope this article will be at least a bit helpful for some of you. Please feel free to share your thoughts and experience with the technologies mentioned here.
Work on Forehand app started
update 3rd January 2021 – I updated a landing page URL because the app has been renamed
I have just started working on the new app called Forehand. It’s going to be an app for table tennis players willing to stay up to date with table tennis news and to develop their skills. There are 2 versions of Forehand app coming: iOS and Android one. I put a placeholder landing page at damianmarkowski.com/dmtabletennis already. I’m aiming to release the app on both platforms in June this year.
EasierSelfies is live
My new iOS app has been approved by Apple and is live in the App Store. It’s EasierSelfies. Thanks to this app you can take selfies much easier and quicker than with the default iOS camera. I noticed while travelling with a friend that it’s hard to take a selfie with an iPhone because of its camera button’s position and I decided to create an app with a movable take photo button.
Dark Mode in Quick10 and DMProjects
One week ago I added Dark Mode support to 2 of my apps: Quick10 and DMProjects. It adjusts automatically to iOS device settings. In the next update I might add a manual switch to turn it on / off as well.
My new app – DMProjects
I published a new iOS app called DMProjects a few weeks ago. It lets you organise any event / project you can imagine. Simply create a Board, add Tasks and keep track of them.
You can find it on the App Store: https://apps.apple.com/us/app/dmprojects/id1458999518.
I’m planning to release an Android version of this app in the nearest future as well š
Postcardful – promo video
I recorded a short promotional video for my newest game Postcardful. It’s available on YouTube: https://www.youtube.com/watch?v=qniMtb0LMg8.
Postcardful is live!
I just published my second iOS game – its name is Postcardful š
In Postcardful you are a traveler. You need to collect as many postcards as possible before you lose all 5 lives. Be careful, the planes arenāt your friends, better to avoid them. You can compete with your friends as well. Just keep an eye on a leaderboard.
You can download the game from the App Store using the following link: https://itunes.apple.com/gb/app/postcardful/id1439739100.
Quick10 – promo video
https://www.youtube.com/watch?v=O4mtM2Q05Kc
A few months after releasing my first game called Quick10 to the AppStore I decided to create a promotional video of this game and publish it on YouTube. And here it is:Ā https://www.youtube.com/watch?v=O4mtM2Q05Kc š
Quick10 – 1.6 update: Chinese (Simplified) version added
Hi all,
after having a look at the downloads statistics of Quick10 and realising that 39% of the users are from China, I decided to support their language as well as English. It comes with 1.6 update š
I would like to share with you those statistics. So here you are:
As you see I’ve published 6 updates of my first game within the first month. Pretty cool result, right? š I’m working on my next games too so stay tuned!
Thanks for reading this post.