Swift Interview Questions

Q – Introduce your past experience?

I have put this question here because this is the opening of any interview. Example:

I have extensive/good working experience on iOS app programming. I have worked on travel, chat, business, sports kind of apps. I have worked on UIKit, Foundation, Table View, Collection View, Core Data, Url session etc, Autolayout, Notification and In app purchase to name a few. I am also familiar with third party libraries like Alamofire, SDWebimage, AFNetworking etc. I am self starter, quick learner and team worker.


Tell your over all experience, companies – recent two etc.


Start talking about Most recent  project, your responsibilities, challenges and end with it 🙂

Note : You should know each and every thing written in your resume. So either you know what you wrote in your resume or just remove it.

Q – Difficulties when you want to use Swift things in Objective-C? Hint – Associated Enums, Tuples 🙂
Q – Let’s say you have a json, how will you parse it? Hint – Codable

Answer –

Q – What are different ways to unwrap optionals?

Answer – 6 ways 🙂


Q – What is difference between class function and static function in swift?


Playground file for class vs static functions: https://bit.ly/2BsErB2

Q – What are defer and fallthrough?
Q – What are swift value and reference types?
Q – How to make sure that your singleton class is initialized once?
Q – In Xcode/Playground/online compiler Create a class Person and add two stored property personName, personAge. I want a conversation on different way of initialization?
Q – Few things you like and dislike about using Xcode?


lacking (hanging = freezing)

sometimes auto-complete (Sometimes don’t get third-party libraries auto-complete)


Auto-completion – don’t need to remember the exact name or spelling

Instant result and fix – able to find out the problem right away

Storyboard – able to visualize UI flow

Easy to find out the documentation file

Q – How do you make a decision between using third party library and doing by yourself?
Q – What things do you take into consideration while merging code?
Q – What is your daily routine as a developer in office?
Q – Have you ever got conflicts? Most nightmare code conflict you ever encountered and how did you fixed it? (must talk about xcode conflict, storyboard conflict, talk real time experience)
Q – I have a app with sign in button, user clicked sign up but the app hanged what can be issue there?
Q – How you will parse xml based response? Codable? NSXmlParser ?
Q – How you will parse json based response? Codable?
Q – What do you mean by associated enum? What is optional? (this question is a hint, interviewer want to know if you know it or not optional are actually enum types)
Q – How to create a secure iOS app?


  • Use keychain to save sensitive data.
  • Communicate over Https.
  • Use http post body to transfer data over network, do not use query string or passing data in url.
  • Proper session handling like in banking apps, there must be single session of a user, you can not login from multiple deice with same credentials.
  • Make sure third party libraries are not stealing sensitive info.
  • Make sure public open source api are not sending critical data to their server.
Q – Give me example of pass by value and pass by reference in swift.

I am going to talk about copying objects in swift. Copying can be two ways — copy content (pass by value) and copy reference (pass by reference).

Copy Content is also known as Deep CopyDeep Copy works with value types. For example Structure, Array, Dictionary, Set, String etc.

Copy Reference is also known as shallow Copy. shallow Copy works with reference types. For example Classes.

Example of Deep Copy:

In above example we see that when we make deep copies, source (personObj) and destination(personObjAnother) objects have their own copies. Changes made to the newly copied objects does not impact source object.

  • Why Deep Copies ?

Deep copies are less prone to race conditions and suits well in multithreaded environment. You are sure the object on which you are performing changes will impact only same object. It will not make any impact on the source object. This is one of the reason also why apple have made collection types (Array, Dictionary, Set) as value types in Swift (which are reference types in Objective C).

Example of Shallow Copy:


In above example we see that when we make shallow copies, source (personObj) and destination(personObjAnother) objects have shared copies. Changes made to the newly copied objects does also impact source object.

  • Why Shallow Copies ?

Shallow copies are faster to create because sharing the reference only. The created copies does not entirely create new instance in memory instead only address/reference is copied.

Q – What are the advantages of Swift programming?

  1. Speed : Most of the types are struct example Array, Dictionary, Set, String Some of the examples. Struct are value types, passed by values, good choice for multithreading environment and memory safety(locks, mutex etc)
  2. The stack is faster because the access pattern makes it trivial to allocate and deallocate memory from it (a pointer/integer is simply incremented or decremented), while the heap has much more complex bookkeeping involved in an allocation or free.
  3. Memory Management – For classes ARC and for value type, the compiler will use traditional stack-based allocation, just as is done with most value types in languages such as C and its derivatives.
  4. Enums – So rich enum, have functions, raw and value types.
  5. Less Error-Prone: App crashes in Swift are appreciably lower as compared to Objective-C, because most of the errors caught at compile time, very less runtime issue to happen.
  6. Better Syntax: Easy, similar to python, kotlin, JS.
  7. Type Inference – Automatic type detection based on r value like python.
  8. Type Safety : Strictly typed language, less error prone. Compare python is dynamic typed language
  9. Uses Copy on Write ? , My write up hare
  10. Swift is Functional, Protocol Oriented and object oriented Programming language.
  11. You are not sure about initial value of variables, use optionals.
  12. Server side swift with vapor, very very new, may be we see good in near future.
  13. Extension : I love it, add functions to existing classes at run time.
  14. Open-Source: Correct! A great apple swift community working on it.

The list can go on!

  • In what situations is Objective C a wiser option for a project than Swift?

Might be you want to use c, c++ based library. In this case you will have to use bridging header to work with swift.

Why used c, c++ ? Because there might be shared code/logic between apple, windows, android, blackberry.

  • Passing data from one VC to another VC, what design patterns we can follow to do that?

We can use push, present, segue, delegate, notification center etc

Q – class vs struct vs enums?

Q – How did you use MVVM in your project? Draw Architecture?

Q – NSURLSession VS Alamofire diff? Hint – Alamofire give callback on main queue, while URLSession gives callback on background queue.

Q – Delegate VS Notification Center vs block vs closure.

Q – How will you detect retain cycle and fix it?

Q – What is persistent and transient memory?

Persistent – current active instances of a class.

Transient – number of times a class have been deallocated or deinitialized.

Q – What are some latest changes in swift 4.2 or tell me about concepts:

Q – Agile?

Agile, is a process that helps teams provide quick and unpredictable responses to the feedback they receive on their project. 

Q – SearchController

Uses the SearchResultsUpdatingprotocol, along with NSComparisonPredicate, to filter out search results from the group of available products. NSComparisonPredicateis a foundation class that specifies how data should be fetched or filtered using search criteria.

Q – How to design universal application?

Adaptive UI

Size Classes

  • The Compact Size Class refers to a constrained space
  • The Regular Size Class refers to an expansive space.

The second concept is Auto Layout, which define the user interface using a series of constraints.

Q – NSCache ?

A mutable collection you use to temporarily store transient key-value pairs that are subject to eviction when resources are low.

Q – CocoaTouch Frameworks?

The Foundationframework provides a base layer of functionality for apps and frameworks, including data storage and persistence, text processing, date and time calculations, sorting and filtering, and networking.

The AVFoundationframework combines four major technology areas that together encompass a wide range of tasks for capturing, processing, synthesizing, controlling, importing and exporting audiovisual media on Apple platforms.

Q – Grand Central Dispatch (GCD)is a low-level API for managing concurrent operations.

Thread types: Main queue, background queue

Queue types:

Serial queue: First-In-First-Out


  • Predictable Execution Order
  • Prevents Race Conditions

Concurrent queue:  Start at the same time


  • Faster
  • Unpredictable Order

GCD, NSOperation and OQ Difference?

Q – Strong vs. Weak vs. Unowned?

Strong: Default. The child class exists as long as the parent exists.

Weak: Child may or may not exists. Will not exists if parent is removed from memory.

Unowned: Child definitely exists all the time but is removed when parent is removed.

When to use?

Weak: when the reference can become nil at some point in its lifetime

Unowned: When you know that the reference will never be nil once set.

Alamofireis an HTTP networking library written in Swift. It’s a layer on top of URLSession with the goal to make common networking features easier to implement.

BDD framework: Quick and Nimble

Quickis for writing testing cases structure and logic

Nimbleis pattern matching method

Q – New features of Swift?
  1. Random Number Generating
  2. CaseIterable For enumerations
  3. Toggle For Booleans
  4. Shuffle and Shuffled
  5. All Satisfy
  6. Dynamic Member Look Up
  7. Warning and Error Directives

 Remote Notification vs. Local Notification

Local notificationsare scheduled by the app and can be triggered by time, date or place.

Remote notificationson the other hand are sent by a backend. This can be your own backend, but also a cloud service you are using.

APNs workflow?

With push notification setup completely on your provider and in your app. Your provider can then send notification requests to APNs. APNs conveys corresponding notification payloads to each targeted device, and manage interactions with the user.

 Steps to setup APNs?

Step 1: Choose third party server

Step 2: Configure developer SSL certificate

Step 4: Go to project target capabilities in X Code and enable notification

Step 5: Export p12 from keychain

Step 6: Register the third party server with your p12 certificate

Step 7: Go to plist add ‘App downloads content in response to push notifications’ inside Required background modes

Step 8: Register notification in AppDelegate (requestAuthorization)

Step 3: Construct payload for each message

Step 9: Implement delegate methods (didRigisterForRemoteNotificationsWithDeviceToken, didFailToRegisterForRemoteNotificationsWithError)

Use Pusheror PushWizardfor APNs testing.

How to create an iOS APNs Certificate?

Step 1: Creating a CSR (Certificate Assistant “Request a certificate”) from your Keychain

Step 2: Downloading an APNs Certificate from your account
Step 3: Converting the .cer File to a .p12 Certificate.

Configure your app to process background updates notifications?

  1. Enable Background mode in project target capabilities
  2. Enable Remote Notification background mode


The payloadspecifies the types of user interactions (alert, sound or badge) that you want performed

Maximum payload size is 4KB, For Voice notifications 5KB

Before iOS 8 maximum payload size was 256 bytes.

Apple Pay (Using Stripe)- Integration

  • Create a Merchant ID
  • Configure Apple Pay capabilities in Xcode for the project
  • Create a sandbox user in iTunes Connect
  • Add a test card
  • Create a payment request in the project
  • Handle the result
  1. Add Apple PayCapabilities
  2. Add a merchant ID
  3. Create a Stripeaccount
  4. Create a certificate for Stripeto be able to process payments
  5. Get API key from Stripe
  6. Install Stripe cocoa pod
  7. Import Stripe in AppDelegate and register it with setDefaultPublishableKey
  8. Implement Apple Pay button by using class PKPaymentButton(trigger payments through Apple pay)
  9. Conform to protocol “PKPaymentAuthorizationViewControllerDelegate” enabled by “canMakePayments” (PKPaymentSummaryItemcontains checkout items)
  10. PreparePKPaymentRequestfor PKPaymentAuthorizationViewController
  11. Handle completion in didAuthorizePaymentdelegate method.
  12. Dismiss window in paymentAuthorizationViewControllerDidFinish.

(PKPaymentNetwork used to choose payment method)

 Apple Pay – Workflow

  1. Present the Apple Pay button
  2. Create the payment request
  3. Present the payment sheet
  4. Respond to charges by the user
  5. Submit payment information to payment gateway

Apple Pay – Security

When you add a credit/debit card to Apple Pay, information that you enter on your device is encrypted and sent to Apple servers. If camera, the information is never saved

Apple decrypts the data, determine your card’s payment network and re-encrypts the data with a key that only your payment network can unlock. 


Extensions add new functionality to an existing class, structure, enumeration, or protocol type. This includes the ability to extend types for which you do not have access to the original source code (known as retroactive modeling). Extensions are similar to categories in Objective-C. (Unlike Objective-C categories, Swift extensions do not have names.)

Extensions in Swift can:

Add computed instance properties and computed type properties

Define instance methods and type methods

Provide new initializers

Define subscripts

Define and use new nested types

Make an existing type conform to a protocol

Computed Value? 

Implicitly unwrap vs. forced unwrap

Force Unwrap: It’s the action of extracting the value contained inside an Optional. I am sure this Optional value does contain a real value, extract it!

When we define an Implicitly unwrappedoptional, we define a container that will automatically perform a force unwrap each time we read it.

Class vs. struct


Multi-level inheritance

UIButton Hierarchy

UIButton inherits from -> UIControl -> UIView -> UIResponsder -> NSObject

ViewController life cycle:


Application life cycle:

Higher Order Functions in Swift – Array

Higher order functions are simply functions that operate on other functions by either taking a function as an argument, or returning a function.

Sorted take a closure or simply use sorted(by:).

Mapinstead of sorting it changes each element of the array based on the closure passed to the method.

Filterwill return an array that has only elements that pass your filter specified in your closure.

Reducefunction allows you to combine all the elements in an array and return an object of any type.

Flatmapflatten the 3 groups into one collection.

CompactMapis the map function but contains non-nil results.

Web Services (How to access)

We use web servicesto communicate with database. Web serviceis often a REST API that returns data in JSON (or XML) format.

REST(Representational State Transfer) is an approach to communications which makes simple HTTP calls for inter-machine communication. REST can be understood as a simple request/response mechanism.

REST is often preferred over SOAP(Simple Object Access Protocol) because REST does not use as much bandwidth as heavyweight SOAP does which makes it a better option for use over the Internet.

SOAP is a protocol REST is an architecture
SOAP can’t user REST because it is a protocol REST can user SOAP web services because it is a concept and can use any protocol like HTTP, SOAP
SOAP requires more bandwidth REST requires less bandwidth and resources
SOAP permits XML data format only REST permits different data format such as plain text, HTML, XML, JSON etc.
SOAP is less preferred than REST REST is more preferred than SOAP

Q – JSON Serialization, Codable, Decodable, Alamofire, AFNetworking.?

Questions And Answers – Core Data

I provide live iOS career counselling, app training, interview preparation using objective c or swift, in case you want complete iOS training can contact me on below details:

skype : alok.upadhyay32

mail : meiosdose@gmail.com

what’sapp : +91–7838552946

  1. What is object graph in core data?
  2. What is core data?
  3. What is data persistance?
  4. What is core data stack?
  5. Give a example of data model?
  6. What are relationships in core data?
  7. What is abstract entity in core data?
  8. How to achieve Inheritance in core data entities?
  9. What is mainConcurrencyType?
  10. What is privateConcurrencyType?
  11. What is managed object context?
  12. How to create managed Object Context
  13. How to perform background task in core data
  14. Can we have more than one MOC
  15. Will you ever pass managedObject from one context to another context
  16. How to pass one managedObject from one context to other context
  17. What do you mean by thread safe
  18. What are different ways of creating private context
  19. How to write code for perform some long running task in background in core data
  20. What are core data delete rules
  21. What is NSAsynchronousFetchRequest
  22. How to set up NSAsynchronousFetchRequest
  23. How we can do multithreading with core data?
  24. How to transfer manage object from one thread to another thread?
  25. what is CoreData and what do we use it for
  26. is CoreData == sqlite or some wrapper?
  27. what types of stores does core data support
  28. What is the minimum necessary classes and relationship between them?
  29. Can the NSPersistentStoreCoordinator have more persistent stores?
  30. What is an NSManagedObjectId
  31. What is lazy initialization, how does this relate to core data, situations when this can be handy
  32. How to read only a few attributes of an entity
  33. What is a fetchedresultcontroller
  34. How to synchronize contexts
  35. How could one simulate an NSManagedObject (dynamic properties)
  36. What is relation
  37. what is insert command
  38. what is update command
  39. what is delete command
  40. persistant vs transient
  41. set up core data stack in iOS 9
  42. 5-6 points core data vs sqlite
  43. what is NSFetchResultController, will it block main UI
  44. When to do core data light weight migration all scenarios

Please support us by comment, like and share our facebook page.


Object Graph

In computer science, in an object-oriented program, groups of objects form a network through their relationships with each other—either through a direct reference to another object or through a chain of intermediate references. These groups of objects are referred to as object graphs.

An object graph is a view of an object system at a particular point in time. 

Object-oriented applications contain complex webs of interrelated objects. Objects are linked to each other by one object either owning or containing another object or holding a reference to another object to which it sends messages. This web of objects is called an object graph.


An array object that contains a single string object represents a small, simple object graph.

A group of objects containing an application object, with references to the windows, menus and their views, and other supporting objects, may represent a large, complex object graph.

Core Data

  1. Core Data is a object graph management and persistence Framework”. Core Data is a framework that you use to manage the model layer objects in your application.It provides generalized and automated solutions to common tasks associated with object life cycle and object graph management, including persistence.”
  2. Core Data is a model layer technology. Core Data helps you build the model layer that represents the state of your app. Core Data is also a persistent technology, in that it can persist the state of the model objects to disk.”
  3. Core Data’s focus is on objects rather than the traditional table-driven relational database approach. When storing data, you are actually storing an object’s contents, where an object is represented by an Objective-C/Swift class that inherits the NSManagedObject class. A typical application will have several objects used together, forming an object graph.”
  4. Most imp point A Core Data consist of following stack objects:

    • a managed object model
    • a managed object context
    • a persistent store coordinator
    • a persistent store (storage)

Persistance Data

Save data in hard disk, so that it is available in multiple launched/ save data permanently.

Core Data Stack

A Core Data stack consist of following objects:

  • a managed object model
  • a managed object context
  • a persistent store coordinator
  • a persistent store (storage)


  • An object that is an instance of NSManagedObjectModel. An NSManagedObjectModelobject describes a schema, a collection of entities (data models) that you use in your application. It uses a private internal store to maintain its properties and implements all the basic behavior required of a managed object.
  • The managed object model represents the data model of the application. 
  • An object that describes a schema—a collection of entities (data models) that you use in your application.
  • Even though Core Data isn’t a database, you can compare the managed object model to the schema of a database, that is, it contains information about the models or entities of the object graph, what attributes they have, and how they relate to one another.
  • The managed object model is an instance of NSManagedObjectModel and describes the schema used in your Core Data application. It is loaded from the model file which contains all the entity descriptions with their attributes and relationships that you defined in the Core Data Model inspector. So the model describes your objects.

Managed Object Context

A managed object should always be associated with a managed object context. There are no exceptions to this rule. Remember that a managed object context manages a number of records or managed objects.

Persistent Store Coordinator

The persistent store coordinator is the glue of the Core Data stack. It keeps a reference to the managed object model and the managed object context. And, as the name implies, the persistent store coordinator is in charge of the persistent store of the application.

A coordinator that associates persistent stores with a model (or a configuration of a model) and that mediates between the persistent stores and the managed object contexts.

Persistent Store Coordinator are actually the instances of “NSPersistentStoreCoordinator” class.

Persistent store

A persistent store is a repository in which managed objects may be stored. You can think of a persistent store as a database data file where individual records each hold the last-saved values of a managed object. Core Data offers three native file types for a persistent store: binary, XML, and SQLite. From the above screen shot you can see persistent store coordinates with Persistent store coordinator.

Data Model


The Library entity has two attributes, name and location, both of type String. The Author entity also has two attributes, firstName and lastName, both of type String. The Book entity has three attributes, title of type StringpublicationDate of type Date, and pages of type Integer 16. This is what the data model should look like in the data model graph.

Please support us by comment, like and share our facebook page.


A relationship specifies the entity, or the parent entity, of the objects at the destination.


A book belongs to a library. This means that we need to create a relationship that links a book to a library.

Steps :

  1. Open Library.xcdatamodeld and switch to the editor’s table style.
  2. Select the Book entity.
  3. Click the plus button at the bottom of the Relationships table to add a relationship to the entity.
  4. Set Relationship to library and Destination to the Library entity. Leave Inverse empty for now.
  5. Switch to the editor’s graph style to visual representation of the relationship we defined.

We can conclude below points :

  1. The relationship is to-one relationship.
  2. A book can belong to one library only.
  3. The single arrow is pointing from book entity to library entity.
  4. There is no arrow pointing back from Library to Book, so there is no inverse relationship. It means that the library the book belongs to does not know that the library belongs to this book.

How to make a relationship system where library knows what books it contains. We have following relationship :


Steps :

  1. Switch to editor’s table style and select the Library entity.
  2. Add a relationship named books.
  3. Set Destination to Book and set Inverse to library.

Switch to the data model graph to see what that looks like. The connection between Library and Book contains arrows pointing to and from each entity. See :


Ideally a library should have more than one books. Steps :

  1. Select the books relationship of the Library entity in the editor’s table style. Open the Data Model Inspector in the Utilities pane on the right to see the details of the relationship.
  2. In the Data Model Inspector, you can modify the relationship’s destination and inverse relationship. You can also modify the relationship’s type or cardinality. Core Data supports To-One and To-Many relationships. Set Type to To-Many.

Switch back to graph to see changes. The relationship from Library to Book now has two arrows, indicating that books is a to-many relationship.


There might be a real word scenario where book/books can belong to many libraries. To fulfill this relationship we need to turn the library relationship into a to-many relationship.

Select the library relationship of the Book entity in the editor’s table style and set Type to To-Many in the Data Model Inspector.

For the best naming convention practices update the name of the relationship to libraries so that it is easily understood that a book can belong to multiple libraries.

This is what the data model graph looks like after the changes. The relationship that links the Library and Book entities is now a many-to-many relationship.

Very important note

The recommended approach is to model relationships in both directions and specify the inverse relationships appropriately. Core Data uses this information to ensure the consistency of the object graph if a change is made.

Reference of apple documentation

You might get this warning if you set no inverse relationship in Xcode:

warning: Misconfigured Property: Person.address should have an inverse


Just add a inverse relationship from Address to Person and warning is gone.

Add relationship from Address to Person(Destination) like this :

And finally it should look like this :).

Abstract Entities

Specify that an entity is abstract if you will not create any instances of that entity. You typically make an entity abstract if you have a number of entities that all represent specializations of (inherit from) a common entity that should not itself be instantiated. For example, in the Employee entity you could define Person as an abstract entity and specify that only concrete subentities (Employee and Customer) can be instantiated. By marking an entity as abstract in the Entity pane of the Data Model inspector, you are informing Core Data that it will never be instantiated directly.

An Entity can be abstract, in which case it is never directly attached to a managed object.

An abstract object (in programming) or entity (in Core Data) is an object or entity that is never instantiated.

Entity Inheritance

Entity inheritance works in a similar way to class inheritance; and is useful for the same reasons. If you have a number of entities that are similar, you can factor the common properties into a superentity, also known as a parent entity. Rather than specifying the same properties in several entities, you can define them in one entity, and the subentities inherit them. For example, you might define a Person entity with attributes firstName and lastName, and subentities Employee and Customer, which inherit those attributes. An example of this layout is shown in Figure 2-3. Display the layout diagram by clicking the Editor Style buttons in the lower-right corner.

In many cases, you also implement a custom class to correspond to the entity from which classes representing the subentities also inherit. Rather than implementing business logic common to all the entities several times over, you implement them in one place and they are inherited by the subclasses.

IoT-1-Making LED light Switch ON and OFF Using “AT-09 BLE Module”, Arduino Uno & iPhone SE

I provide live iOS app training using objective c or swift, in case you want complete iOS training can contact me on below details:

skype : alok.upadhyay32

mail : meiosdose@gmail.com

what’sapp : +91–7838552946

Hello every one :). Hope you are doing good. We will discuss about communication over BLE between iPhoneSE and Arduino. We will control LED switch ON and OFF from iPhone over bluetooth.

Attached is the video of final output:


You should first read Bluetooth & Bluetooth fundamentalsdiscovering peripheralsconnecting peripherals for building strong fundamentals on BLE.


  • Download and install latest Arduino IDE from here. At the time of writing this blog it’s version is 1.8.5.
  • You must have latest version of XCode. At the time of writing this blog it is 9.3.1


  • I ordered AT-09 ble module (v4.0) from amazon.

    • iPhoneSE with iOS v11.3.
    • I ordered Arduino Uno kit from RoboIndia. Some other Arduino uno hardware which CAN work are:


Please support me by comment, like and share my face book page.


After successful installation of Arduino IDE launch it.

In editor window copy paste below code:

Let’s see what this code is doing:

The setup() function is called when a sketch starts. Use it to initialize variables, pin modes, start using libraries, etc. The setup() function will only run once, after each powerup or reset of the Arduino board.

The serial.begin()function sets the data rate in bits per second (baud) for serial data transmission. For communicating with the computer, use one of these rates: 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, or 115200. The rate specifies how fast data is sent over a serial line.

The pinMode(pinNumber, OUTPUT)function can be used to decide at what pin number you want the output.

After creating a setup() function, which initializes and sets the initial values, theloop() function does precisely what its name suggests, and loops consecutively, allowing your program to change and respond. Use it to actively control the Arduino board.

Get the number of bytes (characters) available for reading, that’s what Serial.available() for.  This function check if there is some data available:

serial.read() function reads data received (“a” or “d”) from iPhone device in our case.

We use switch case to determine if data is “a” or  “d”.

digitalWrite(pinNumber, HIGH/LOW)function make our LED light ON or OFF on pin number 13.

All Set! Let’s upload code on Arduino Hardware.

Connect mac and Arduino with USB.

Make sure you have choose “Board:Arduino/Genuino Uno” and port “usbmodem1421Arduino/Genuino Uno”. Over all set up should look like this:

After uploading the code it’s time to setup circuit.

So the connections are as below:

Setting up BLE module

Connect RXD of A-9 BLE module -> TX of Arduino board.

Connect TXD of A-9 BLE module -> RX of Arduino board.

Connect VCC of A-9 BLE module -> 5V of Arduino board.

Connect GND of A-9 BLE module -> GND of Arduino board.

Setting up LED

Connect small leg of RED LED -> GND of Arduino board.

Connect big leg of RED LED -> Pin 13 of Arduino board.

Have a look at below circuit diagram:

Circuit Diagram

Yeah we have successfully set up our circuit. We are almost done setup for Arduino software and  and hardware.

Please support me by comment, like and share my face book page.

We are done half part till now. Let’s understand basic concept from iOS point of view and write some code.

Connection between BLE devices

I have used XCode v9.3.1, swift v4.3.1, iPhone iOS v11.3.1. If you are from non iOS background, then it might be difficult to understand code, but approach and logic is easy to understand. Some technical points:

Central : Our iOS device is central. It discovers services (which includes characteristics).

Peripheral : AT-09 BLE module is peripheral. We will use characteristics “FFE1” to write data “ON” and “OFF”.

CoreBluetooth Framework : In iOS this framework provides required classes and delegate methods to handle events like:

Discovering peripherals

Connecting peripherals

Discovering services

Discovering characteristics etc.

See below diagram how does BLE device connects to each other:

  • Bluetooth Central: This is the node that is trying to connect to a data source. Think of this as the client.
  • Bluetooth Peripheral: This is the node that is providing the primary data source. Think of this as the server.
  • Characteristic: A characteristic can be considered a variable. Characteristics are defined attribute types that contain a single logical value.
  • Service: A group of characteristics live under a “Service”. Services are collections of characteristics and relationships to other services that encapsulate the behavior of part of a device. Service are collection of data and associated behaviors describing a specific function or feature of a peripheral. For example, a heart rate sensor has a Heart Rate service. A peripheral can have more than one service.
  • Descriptors are defined attributes that describe a characteristic value.
  • Each service and characteristic is represented by a UUID which can be either a 16-bit or a 128-bit value.
  • Central’ Job
    • Scanning for peripherals
    • Connecting to a peripheral
    • Disconnecting from a peripheral
    • Discovering services
    • Discovering characteristics of a service
    • Subscribing to a characteristic
    • Receiving data from a characteristic
  • Peripheral’s Job
    • Advertising a service and characteristic
    • Adding service and characteristic to the PeripheralManager
    • Detecting of new subscribers to a characteristics
    • Detecting of unsubscribing
    • Handling of unready state of the device.

Note : Peripheral does not connect to peripheral. and central does not connect to central.


Core Bluetooth :


The Core Bluetooth framework provides the classes needed for your apps to communicate with devices that are equipped with Bluetooth low energy wireless technology.

Do not subclass any of the classes of the Core Bluetooth framework. Overriding these classes is unsupported and results in undefined behavior.

class CBCentral

The CBCentral class represents remote central devices that have connected to an app implementing the peripheral role on a local device. That is, when you are implementing the peripheral role using the CBPeripheralManager class, centrals that connect to your local peripheral are represented as CBCentral objects. Remote centrals are identified by universally unique identifiers (UUIDs), represented by NSUUID objects.

scan for other peripherals

Central devices scan for any advertising peripherals and displays it to the user

A central typically uses the information served up by peripherals to accomplish some particular task.

  • A central is kinda like the “boss”. It wants information from a bunch of its workers in order to accomplish a particular task.

It defines logic behind the Core bluetooth communication. It is able to scan, connect and disconnect peripherals and it also consumes information available at each peripheral. The central devices are usually mobile devices or tablets.

class CBPeripheral

The CBPeripheral class represents remote peripheral devices that your app—by means of a central manager (an instance of CBCentralManager)—has discovered advertising or is currently connected to. Peripherals are identified by universally unique identifiers (UUIDs), represented by NSUUID objects. Peripherals may contain one or more services or provide useful information about their connected signal strength.

advertise information as peripheral

  • A peripheral is kinda like the “worker”. It gathers and publishes data to that is consumed by other devices/means central.

The device that has information to share eg. Heart rate or temperature etc. The information can be pushed or advertise over the air.The peripheral devices are things like Heart rate monitor, BLE enables proximity tags, etc.

The following image defines the relationship between central and peripherals:

In the above scenario iOS devices (Central) communicate with the Heart rate Monitoring system (Peripheral) to get heart rate information and shows it on a device.

How Centrals Communicate with Peripherals?

Advertising is the primary way that peripherals make their presence known via Bluetooth LE.

In addition to advertising their existence, advertising packets can contain some data, such as the peripheral’s name. It can also include some extra data related to what the peripheral collects. For example, in the case of a heart rate monitor, the packet also provides heartbeats per minute (BPM) data.

The job of a central is to scan for these advertising packets, identify any peripherals it finds relevant, and connect to individual devices for more information.

class CBService

CBService and its subclass CBMutableService represent a peripheral’s service—a collection of data and associated behaviors for accomplishing a function or feature of a device (or portions of that device). CBService objects in particular represent services of a remote peripheral device (represented by a CBPeripheral object). Services are either primary or secondary and may contain a number of characteristics or included services (references to other services).

A CBPeripheral holds services (each defined as a CBService), and each CBService holds CBCharacteristics.

The following diagram shows the hierarchy of the CBPeripheral:

Let’s code now:

Below is the user interface part:

I will discuss some critical code only here which is very important to understand:

In Below code snippet we are initializing CBCentralManager and telling that CBCentralManager object’s(which is manager)  delegate is self (means we will implement delegate methods in ViewController class). The discover peripheral method is called when we click on “Discover Devices Button”

After successfully discover below delegate method didDiscoverPeripheral will be called:

We check if peripheral name is “MLT-05”, We show this information on user interface: 

Next, we hold reference of discovered peripheral in global variable and this time set peripheral’s delegate to self:

And after discovering peripheral we stop scanning.

Overall above code looks like this:

Yeah successfully discovered 🙂 🙂 🙂

Let’s connect now:

The below method will be called when user clicks on Connect button.

The code:

will call

Let’s see it’s implementation:

isMyPeripheralConected – this is the global variable we are holding reference to.

We are setting instance of view controller (self) as delegate of peripheral.

and then let’s discover characteristics after discovered services:

peripheral.discoverCharacteristics will call delegate methoddidDiscoverCharacteristicsFor:

In above code we are holding discover characteristic “FFE1” in global variable myCharacteristic. At this stage we can write  “a” and “d” for “ON” and “OFF” respectively.

Above methods are called when we click on ON and OFF buttons on iOS app.

The below method is responsible to send “a” (click on ON) and “d” (click on OFF) as bytes to our Arduino.

Putting all code together looks like :


Mistakes/Challenges I faced:

  • I ordered HC-05 module from Amazon which iPhone does not support.
  • While uploading code to Arduino hardware make sure there is no connection to LED and BLE Module. Upload Arduino code first then setup your circuit.
  • Finding peripheral characteristic value (FFE1) to write value (“a” for “ON” & “d” for “OFF”).

Happy coding, hope you enjoyed it :).

Please support me by comment, like and share my face book page.

I provide live iOS app training using objective c or swift, in case you want complete iOS training can contact me on below details:

skype : alok.upadhyay32

mail : meiosdose@gmail.com

what’sapp : +91–7838552946