Skip to main content

5 Common pitfalls while starting iOS app

In this article I listed 5 most common missteps while starting iOS application. Typically beginners might have taken these approaches. 

1. Internet connectivity status checking over response error :

It is essential to check network connectivity status offline or online before starting services. 
To test reachability you might wrote in response callback : 

Problem: Time consuming in case URL takes tool long to respond. More over you cannot rely on server to check connectivity. Simply because server may be down at the moment you sent request.

Solution: Use Apple’s Reachability class. It can monitor network status of WiFi or Cellular data instantly. Notifies in case network status changes. Bonus - Also make sure app works in iPv6 network as well.

2. Textfield behind keyboard : 


Credit : Stackoverflow.com

We start developing app in Xcode and run in Simulator. By default keyboard preference of simulator is hidden and we kept using Mac keyboard for field input. Hence there is a chance of missing this basic feature before handing over to testing team.
Even the same issue seen when orientation change. Also fields are visible in iPhone Plus or XL devices and hidden in 4" iPhone 5/5S/5SE models. So it is better to have an eye on the keyboard and fields.

Solution : Make use of keyboard notifiers 'UIKeyboardWillShow' before appearing and 'UIKeyboardWillHide' before hiding.


3. Neglecting Safe area Layout : 


In iOS 11 Apple has deprecated topLayoutGuide and bottomLayoutGuide properties and introduced the safe area layout guide. When you create new storyboard option is enabled by default. Left un-noticed for old storyboard or nib files and you know it will mess up UI in iPhone X and its successors. 

SolutionYou convert from top and bottom layout guides to the safe area layout guide by changing the setting in the file inspector for the Storyboard. Apple suggests that we do not to place any controls outside safe area. 

4. Inconsistency Font, Colour throughout app : 

Typically when a team collaborating on app development, individual developers consider own font size or colour code (worst case) on their assigned screens. This questions maturity of app.

Solution : Have a standard struct or class for entire app which will make sure consistency of font size, family and even colour codes. 
For instance, below list is commonly I refer from Apple's Mail app.
  • Bold title - 34pt 
  • Body text - 17pt 
  • Secondary text - 15pt 
  • Tertiary text - 13pt 

5. Hardcoded view frames : 

When we create custom views programmatically, we tend to create with custom frames. This might look at good shape upon running simulator or similar devices with size class. That might not true in Plus sized iPhones or vice versa.  

Solution : Use 'Autolayout constraints' in necessary places. Make sure constraints added initialisation stage and full layout life cycle to be executed In case post modification of view frame. This article might help to get more clarity.

That's all about few check points to be consider while starting your iOS application. Comment if you taken such wrong approaches and then found correct way to implement same.

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 = CATransitionSubtype .

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 Cycle ov

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 UICollection

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

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