Thursday 30 August 2018

Multiple Target XCode

Hello Friends

If you developed an App and you want to create different different settings of app like Local, Dev, Prod environments server url change or multiple app developed with same code with minor changes at that time Multiple Target is use full.

How to create multiple target?

- Select project in navigator and select target

creating new target from xcode app


- Now selecting target and create duplicate target 



- Now rename the target (Target Copy -> TargetPROD)

duplicate target create in xcode


- Then Go To Scheme and select Mange Schemes


- Then Double tap to rename Target name (Target copy -> TargetPROD)

Rename target from project schemes


- Now Target created.
- Now based on target we set preprocessor in Build Settings -> Other Swift Flags

- > Target -> -D DEV
- > TargetPROD -> -D PROD

Other swift flag change from build settings in xcode



- Now add this code and change both target and run

import UIKit

#if DEV
    let baseURL = "Dev base url"
#else
    let baseURL = "Prod base url"
#endif

class ViewController: UIViewController {

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

}

In Target => Print "Dev base url"
In TargetPROD => Print "Prod base url"

You can change also Info.plist, File, bundle settings etc.


You can also watch video 


If you have any query then comment.

Thank you.



Wednesday 29 August 2018

Generics in iOS Swift

The main use of Generic is avoid code duplication.
Generic placeholder is defined within angle brackets <>.

For example there are two array with different type.

let arrayOfInt = [5,10,15,20]
let arrayOfString = ["Karan","Ankur","Bunty"]

For print this array of value you can create two function like

func printInt(fromArrayOfInt arrayOfInt:[Int]){
    arrayOfInt.map({print($0)})

}

func printString(fromArrayOfString arrayOfString:[String]){
    arrayOfString.map({print($0)})
}

And use

printInt(fromArrayOfInt: arrayOfInt)
printString(fromArrayOfString: arrayOfString)

Output:

5
10
15
20
Karan
Ankur
Bunty

Now using Generic no need to create two function. We can print all type of array using single function like 


func printArray<T>(fromArray arrayOfValue: [T]){
    arrayOfValue.map({print($0)})
}

and calling is same

printArray(fromArray: arrayOfInt)
printArray(fromArray: arrayOfString)

In order to use Generic with struct, class or enum, you can define the Generic placeholder after the name. 

Github link : Generics

You can also watch video : 



Tuesday 28 August 2018

Swift Protocol

Protocols are a way of specifying how to use of an object.

In Swift Protocols define interfaces which can be any struct, class or enum.



For use of protocol in swift watch below video





Swift MVVM design pattern


Design pattern is an important part for code reusability.

History
Since the beginning of it's development, iOS has used MVC (Model View Controller) design pattern, which helps the developers to reuse code. It also helps to keep UI and business logic separately.

Why MVVM ?
In MVC, As the View and Controller is combined in the ViewController, the controller overloaded. So in order to reduce the code size in controller, MVVM pattern has been introduced.

In MVVM pattern, ViewController does not interact directly with the Model unlike in MVC. Here, ViewController interacts with ViewModel, and ViewModel interact with the Model.

Model(Database) <-->ViewModel (Business Logic) <--> ViewController (UI/View related code)

There are some other architecture design pattern also there like MVC, MVP, MVVM, Viper etc.

Check out below link for MVVM architecture pattern example in Swift.

https://youtu.be/FBJzPppZLsg