My side of the story of selling Apple iPhone apps on the Apple App Store while doing a day job…!!!

I am selling apps on Apple App Store since 2012, Tried free apps with excellent sales but no revenue or no Apple iAd revenue or very little. I kept doing that for two to four years. Then I removed all of my apps from the sale and kept my account inactive with no apps on ready for sale for almost one or two years.

Then Swift language was introduced with support for Unicode while watching Apple’s Keynote presentation, I got the idea of Learning Devanagari Script apps with support for Marathi, Sanskrit and Hindi Languages.

It got almost 3 months of the year 2016 for me to record 500 audio samples and videos with proper code to get to the level of MVP i.e. Minimum Viable Product.

Next three years I finished recording audio and designing videos and vector illustrations. So it was a total of 700 Audio Recordings with statements and alphabets (Vowels, Consonants and Barakhadi), and 422 animated videos for stroke by stroke guide. Then almost 500 vector and raster illustrations.

With Covid and Corona Epidemic and forced leave from March to November I finished and upscaled all of my apps with visual and performance quality for my Mudrakshar, Swarakshar and Chitrakshar apps.

(more…)

Continue Reading Post

My experience in converting my paid educational apps to a subscription business revenue model.

After experimenting with various apps, I ventured into an educational language-earning app in 2013/14. I developed three apps Mudrakshar for tracing Alphabets, Swarakshar for Pronouncing Alphabets and Chitrakshar for Alphabet Charts with Illustrations and audio pronunciation. All three apps were dedicated to Devanagari Script—mainly Marathi, Sanskrit and Hindi Language. For Chitrakshar, I added the English Language with Latin script.

I am developing my apps for Apple iOS, iPadOS and macOS platforms. Here is my Apple Developer Profile if you want to check it out.

I think the In-App purchase / StoreKit framework was not introduced back then. That’s what I remember. So I used paid app business model to support my app development and time invested.

Maybe because I started sailing my apps with an upfront paid pricing model, I was forcing my users to purchase them without allowing them to try them before they bought. As a result, I had significantly fewer downloads or sales. But over the years, I sold almost 1,000 units of apps or more. I also utilised App Store Connects’s App Bundles feature at that time. App Bundles undoubtedly helped me to sell more apps with discounts.

(more…)

Continue Reading Post

Programmatically get iOS, iPadOS, macOS Catalyst Operating System Name and Version and a model identifier of iPhone, iPad, and Mac devices.

Programmatically get iOS, iPadOS, macOS Catalyst Operating System Name and Version and a model identifier of iPhone, iPad, and Mac devices.

Here is a simple way to programmatically get the operating system name and version of your iOS, iPadOS and macOS.

The below code will also return the value of the iPhone, iPad and Mac Model identifiers to help you know if it’s MacBook or iMac in a Mac case or iPhone 11 Pro or iPhone 13 Pro etc.

Step 01: First import IOKit, It is only required for macOS Catalyst app-specific code.

(more…)

Continue Reading Post

Get your Apple iOS (iPhone), iPadOS (iPad) and Mac Catalyst app Version and Build number programmatically.

Here is a small function that I have written that you can use in your iOS, iPadOS or macOS Catalyst app to get your app’s current version and build number and print it on screen whether will on the app’s about or support view.

Function: copy the below function in the Xcode project’s UIViewController Swift class file.

(more…)

Continue Reading Post

Let’s learn how to implement WKWebView in Your iOS, iPadOS and macOS Catalyst app

Before we jump into implementing WKWebView I would first introduce you to why you want to use it. WKWebView helps you when you want to load a webpage inside your app without throwing users to a third party browser outside of your app.

Let’s start coding,

Step 01: First Import WebKit

import WebKit

Step 02: Add ‘WKNavigationDelegate’ to your declaration of ViewController Class

WKNavigationDelegate

It will look something like this:

class ViewController: UIViewController, WKNavigationDelegate {
}

Step 03: Now create two variables for loading webView and one for button which will close webView

var webView: WKWebView!
var closeWebViewUIButton = UIButton(type: .system) as UIButton

Step 04: Now naviagte to your ViewDid Load method

override func viewDidLoad() {
super.viewDidLoad()
}

Step 05: Now in your ViewDidLoad method add the following code, Which will load WKWebView. You can change the URL as per your preference.

(more…)

Continue Reading Post

Choosing the right view between UILabel and UITextView to display text inside your iOS, iPadOS and macOS Catalyst App

The dilemma of choosing between UILabel and UITextView starts when you want to display text in your Apple iOS, iPadOS or macOS Catalyst App.

I have even gone through this process of choosing UILabel or UITextView to display text on my app.

So I have made a small numbered list to help you out to choose the right option…

Choose UILable to display text:

  1. If the text word count is small in number
  2. If Top Aligning text to the top border is not the requirement
  3. UILable is not tappable or interactive or selectable to the user’s input
  4. if you want to automatically adjust the font size and fit text to the UILabel bounding box layout

Here is Sample Code for UILabel:

(more…)

Continue Reading Post

How programmatically add Fab (Floating Action Button) Button to iPhone, iPad and Mac (Catalyst) App

When Google released Material Design Guidelines they introduced many new design elements and one of them was Fab Button i.e. Floating Action Button

Normally we see the Fab button in Android Mobile Apps but a lot of Apple iPhone, iPad and Mac App Developers has started using the Fab button in their design.

Here we will see how to add the Fab button programmatically in your iOS, iPadOS and macOS app on any view including UICollectionView or UITableView.

Step 01: First declare the UIButton variable in your View Controller

var fabButton = UIButton()

Step 02: Add this code to viewDidLoad()

(more…)

Continue Reading Post

Here is how to set UINavigation Bar Large Title Text Colour (Foreground Colour) in iOS 11, 12, 13 and above

Here is how to set UINavigation Bar Large Title Text Colour (Foreground Colour) in iOS 11, 12, 13 and above,

 
Declare Navigation Bar Title Text & Large Title Settings like this in your View Controller’s ViewDidLoad() Method:

 

self.navigationItem.title = "Home"
self.navigationController?.navigationBar.prefersLargeTitles = true
self.navigationController?.navigationItem.largeTitleDisplayMode = .automatic

 
Now write below line inside ViewDidLoad() to get Large Title Foreground colour as White Colour like this:

(more…)

Continue Reading Post

Here is how to do UIImageView Image Inset in Apple iOS App using Xcode

Here is example if you want to inset UIImageView so that image does not fit edge to edge of the UIImageView

 
Note: Use of latest version of Xcode & Latest version of Swift Programming Language is preferred.

 
Here is step by step procedure to achieve designed result:

 
Step 01: Create Apple iOS Project in Xcode. Add UIImageView to View Controller in Storyboard.

 
Step 02: Now Connect that UIImageView to View Controller Swift File. It will look something like this.

 

@IBOutlet weak var imageView: UIImageView!

 
Step 03: Now add following code in ViewDidLoad Function of your View Controller File.

(more…)

Continue Reading Post

Here is how to animate Tab bar tab switch with a CrossDissolve slide transition in UITabBarViewController!

While searching for answer on web for how to give CurlUp / CrossDissolve / FlipFromRight / FlipFromLeft / CurlDown / FlipFromTop / FlipFromBottom transition effect for UITabBar Tab Switch.

 
I found out this answer but with bug or black screen when you tap on same tab twice i.e. destination and current tab is same.

 
So I solve this issue with my logic and additional if and else statement.

 
So here is final answer without any bug.

 

Step 01: Add this two classes as Super Class to your UITabBarViewController

 

UITabBarController, UITabBarControllerDelegate

 

Step 02: Now add following code to your viewDidLoad Function in your UITabBarViewController

 

self.delegate = self

(more…)

Continue Reading Post