Skip to main content

Built & Released app within 2 weeks

After successful launch of my last iOS app,  I wished to make another one for a different app category. Last time it took me comparatively long time to make highly stable, premium quality UX after much many iterations. Thanks to valuable feedbacks from my peers & social media friends. But this time all I need it in a very short duration. Yes! at the speed of F1 car.






Being an F1 fan, I felt heat of upcoming 2019 season a month before it actually begins. I was assured that there are already couple of apps in the App Store which serves the same purpose. Even the official F1 organisation has got own feature rich / futuristic app. So why I am thinking to make my own version which could be a clone... 🤔

Well... the official F1 app is loaded with many great features & uses Unity framework under the hood for live circuits (a state of art feature). All these made heavier (~165MB when installed in my phone) app size to just view race results (if in case!). Couple of other apps that I found was flooded with ads & few others with good features but not impressive UX. In short - I was expected to have a F1 app which is minimal, light weight & ads free.

Until App Store submission

First 2 days I listed must have features in the app & a rough UI/UX flows - those I can be implement in remaining 10 days. I separated into 3 simple segments - keeping in mind that every season it needs to be updated. So that, each segment has to be implemented & integrated within 3 days. BTB, About backend, I’ll keep away from this post ;-)
  • Racing tab : Circuit details, Race dates (+ remainders) and view results if race finished.
  • Standing tab : Driver standing & team standing segments - giving brief details on each of them. I highlighted scores, Any way that’s all we need when each time race ends right?
  • New F1 Rules tab : Most probably every season F1 adds new rules. Keeping it in a short list could be useful for a F1 follower.
  On the 10th day - all about testing & preparations to ship the app. Entire app written in Xcode 10.1, Swift 4.2. & Cocoa Pods - as a dependency manager I installed :
Object Mapper - for parsing JSON
Alamofire - Consume REST API
JGProgressHUD - To show activity progress indicator.

Spent ~2 Hrs designing simple splash screen & app icons with the help of gravit designer.

After Apple Reviews

Apple reviews nowadays very fast - assures within 24hrs. It was true in my case too - as they completed review overnight. But ... the app was rejected 🛑 for 2 reasons.
- Drivers pictures that I took was from unknown source.
- Expecting to consider results from last season if not already begun new season.
Correcting above changes, on 13th day I uploaded 2nd build (fingers crossed 🤞🏼). Finally it took a longer review time than first (Expected) At the end the app (F1 Score Card 2019) was visible in the store after 7-8 Hrs. As a result it was a light weight (~10MB), minimalistic app as I expected in the store. 🎉 Feel free to rate, share your feedback in the store or below comment box. Thanks for reading till end.


Popular posts from this blog

Animating label text update - choosing a better way

Recently I published a countdown app .  At one point of development - I have to show a timer on a UILabel which ticks on each seconds. As usual I started  setting text to a label object - self .timerLabel.text = someString Easy piece of cake right !?   But wait ... it won't take much user attention when timer ticks on every seconds. So I decided to make use of a simple animation while label gets text update. I found there are dozens of ways to animate a label. In this short article, I listed 3 best way you can animate text on a label. ( Spoiler Alert 👀- I decided to go with 3rd option)  1. Fade In - Fade out animation : CATransition class has got transition type `fade`. With timing function of CATransition - I was able to see the below result. let animation: CATransition = CATransition () animation.timingFunction = CAMediaTimingFunction (name: CAMediaTimingFunctionName .easeInEaseOut) animation.type = CATransitionType .fade animation.subtype = C...

Prevent Navigationbar or Tabbar overlapping Subview - solved for Card view

Recently, I started with a Card view added as a subview of UIView in a view-controller. When a view controller created along subviews, it tends to use entire screen bounds and also slips behind Tab bar or Navigation bar. In my current situation, it's second case. Casually new iOS developers will write a patch by additional value for coordinate y and subtracting bar height from its size. A lot of them posted in SO threads too : How to prevent UINavigationBar from covering top of view? View got hidden below UINavigationBar iOS 7 Navigation Bar covers some part of view at Top So, how I got solved ? self.edgesForExtendedLayout = [] This  will avoid all subviews in a view controller get behind any bars. Read full apple  documentation on here. Full Source code below :  //Simple view controller where its view layed-out as a card. class WidgetCardViewController : UIViewController { var containerView = UIView () //MARK:- View Controller Life Cyc...

Printing Staircase Pattern : Swift coding challenge

In this post, we can try interesting pattern printing challenge in Swift. The problem statement goes like this " Print a staircase of given size 'n'. Make sure that its base and height are both equal to n, and the image is drawn only using `#` symbols and spaces. The last line is not preceded by any spaces." Expected Output : # ## ### #### ##### ###### Working solution: func makePatternOf ( _ size : Int ) { var str = "" // 1 for index in ( 0 ..< size ) { let stop = size -index-1; // 2 for _ in 0 ..< stop { str. append ( " " ) ; } // 3 for _ in 0 .. . index { str. append ( "#" ) ; } print ( str ) str = "" } } makePatternOf ( 6 ) Loop to visit every row of stair case. Loop for appe...

Implementing autocompletion OTP field in iOS

Long waiting is over. !!  iOS 12 brings Autofill for OTP text field which is close to Android provided a decade back. Previously in iOS we used to toggle between OTP text screen and message inbox.  Which was hard to remember and time consuming resulting a bad user experience. Personally, I have been asked from the client/customer couple of times to implement autocompletion for OTP field and took me a lot of time to convey that it is not possible in iOS. Why Autofill was not possible previously?  We all know that Apple gives at most care for user privacy. When we see iOS architecture, each individual app is like a separate island. There is no inter-app bridge between apps (exception for Keychain and URLSchemes APIs which gives very limited scope). Thus we cannot read message content from inbox. Where to start Autofilling? First of all, the target SMS need to have the OTP Code with prefix string "Code" or "Passcode"on its message content. Beware of OTP c...

UICollectionViewCell shows with wrong size on First time - Solved

We commonly use Collection view where its cell size calculated run time. The flow layout delegate is responsible to return individual cell sizes. BUT in most of the cases, delegate method `collectionView: layout sizeForItem:` expects cell size too early. Before generating actual cell size. extension YourViewController : UICollectionViewDelegateFlowLayout { func collectionView ( _ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { return CGSize (width: externalWidth, height: externalHeight) } } For instance, if a cell size depends on external view and its frame is not yet ready - results with wrong (or outdated) cell size. Typically happens for the first time view controller laid out all views. You can find similar queries in StackOverflow community : Collection view sizeForItemNotWorking UICollectionViewCell content wrong size on first load How to refresh UICollec...