Mobile App Development

Mobile First.

Mobile application development has grown a lot over the years. With high scale of mobile users, the demand of mobile apps for business is increasing day by day. Websites are going responsive and mobile friendly. Platforms like iOS and Android are dominating the market. As per research made in 2015 they are  7,000,000,000+ mobile phones in the world.

A recent study by mobileinsurance.com has revealed that the average person spends 90 mins a day on their phone. That figure may not sound like a lot but that amounts up to 23 days a year and 3.9 years of the average person’s life is spent staring at their phone screen.

Since that fateful phone call four decades ago, mobile phones have evolved dramatically. Those magical portable technology boxes have become an essential part of interpersonal communication, and their significance will only increase with time. From the rise of SMS to anywhere, anytime Internet connectivity to mobile photography. From Symbian to Android. iPhone 1g to iPhone 7 plus. We have reached the maturity of mobile evolution.

We at Cyphertree have been in the part of this evolution. Our professional have worked from last 10 years in mobile technology. From QT to Corodova we have witness the era of Nokia to Android. 

What are the Cross platform mobile development tools we have used?

  • SenchaSencha is a tool that lets you develop your apps in HTML5.
  • PhoneGap : Owned by Adobe, PhoneGap is a free resource that first-time app developers can use to translate code from HTML5, CSS, and JavaScript.
  • Cocos2d : Cocos2d is primarily used in two-dimensional game development. It gives developers the option of five different forks or platforms to develop on, based on the preferred programming language like C++, Objective-C and Python.
ios_overview

iOS

is a mobile Operating System used in Apple products like iPhone, iPad and wearables.

iOS is very matured and powerful mobile operating system. iOS is second most popular mobile operating system after Android. Languages used are Objectieve-C and Swift. Swift is open source and fastest growing community in the open source history. There are also reactive extension to Swift like RxSwift and Realm.

At Cyphertree our professionals have worked on iOS app development since iOS 3.0 to the latest iOS 10.0. Indeed its worth mentioning to be part of the iOS journey. From understanding the human interface guidelines from design, development, testing and Launch we offer 360 degree service for iOS development.

Apple has a mature development studio for iOS development called Xcode. The latest release is Xcode 8 and iOS 10.0. Language used for development as mentioned above is currently Swift 3 and Objective-c. Swift is open source language which also supports reactive extension like Rxswift.

The Fabric app gives you access to all the information you need to triage issues including full stack traces, number of affected users and a breakdown of devices and platforms

The IBAnalyzer is a command line tool that helps find common xib and storyboard-related problems in your Xcode projects without running your app or writing unit tests. IBAnalyzer starts by parsing all .xib, .storyboard and .swift files in a folder and then uses this data to generate warnings.

Wake a platform that helps designers share their work with the rest of their team. Wake provides a handy Mac app that lets you share designs without leaving Sketch, Photoshop or Illustrator with a simple keyboard shortcut.

In Xcode, continuous integration is the process of automating and streamlining the building, analyzing, testing, and archiving of iOS apps, in order to ensure that they are always in a releasable state. In a continuous integration workflow, we write apps locally in Xcode on development Mac and check them into a source code repository.

Jenkins is usually what people think about when they here about continuous integration. It’s been here for a while and can do just about anything.

Jenkins can be configured to perform tests on iOS 9 projects. In Jenkins’ repository exist the XCode integration plugin that allows us compile the source code and execute tests.

The XCode integration plugin does the execution of the tests and the result is written in a file with XML format inside the project. The XML file generated can be read by JUnit. That’s why we are going to use the JUnit plugin to show the tests executed in the iOS 10 project. The Test Result Analyzer plugin shows the results of the tests on graphics for a better understanding.

Yes, UI Automation testing is an important feature for mobile application developers that was introduced in iOS4. It is supported by a new instrument object called “Automation.” It’s quite suitable for UI testing of productivity style applications and is both a probe for Instruments as well as a JavaScript library provided by Apple to exercise and validate a running application.

XCTest is tightly coupled with Xcode but is still usable with both real iOS devices and simulators. XCTest allows developers to write tests for components at any level and also provides the framework for UI testing capabilities. XCTest tests are grouped into subclasses of XCTestCase. Writing any tests with XCTest should be trivial to iOS developers as XCTest is fully compatible with both Objective-C and Swift.

Autolayout, dynamically calculates the size and position of all the views in your view hierarchy, based on constraints placed on those views. For example, you can constrain a button so that it is horizontally centered with an Image view and so that the button’s top edge always remains 8 points below the image’s bottom. If the image view’s size or position changes, the button’s position automatically adjusts to match.

This constraint-based approach to design allows you to build user interfaces that dynamically respond to both internal and external changes.

What deployment tools we use?

Fastlane, is the tool to release your iOS and Android app. It handles all tedious tasks, like generating screenshots, dealing with code signing, and releasing the application.

Fastlane, is the tool to release your iOS and Android app. It handles all tedious tasks, like generating screenshots, dealing with code signing, and releasing the application.

UXrGTeG

React Native

A React Native app is a real mobile app. 

With React Native, you don’t build a “mobile web app”, an “HTML5 app”, or a “hybrid app”. You build a real mobile app that’s indistinguishable from an app built using Objective-C or Java. React Native uses the same fundamental UI building blocks as regular iOS and Android apps. You just put those building blocks together using JavaScript and React.

Why use React Native?

Most mobile apps built with JavaScript use Cordova, or a framework built on top of it, such as the popular Ionic or Sencha Touch. With Cordova, you have the ability to make calls to native APIs, but the bulk of your app will be HTML and JavaScript inside a WebView. While you can approximate native components – and it is certainly possible to build a great UI with HTML and JS – no Cordova app will match the look and feel of a real native app. The little things – like scrolling acceleration, keyboard behavior, and navigation – all add up and can create frustrating experiences for your customers when they don’t behave as expected.Although you still write JavaScript with React Native, the components you define will end up rendering as native platform widgets.

At a times cost of Native app development is too damn high. As it requires resource with special expertise. With react native development on both platforms is rapid as both share the same code.We feel that by using React Native you can actually save some time compared to traditional native development. In particular, on real projects one could save around 30% of development time. Of course this is just a high level estimate and depends on multiple factors.

There is no need for compilation with React Native, as the app updates instantly when saving, also speeding up development time.

React Native also allows you to use tools such as Code Push and AppHub to remotely update your JavaScript code. This means that you can push updates, features, and bug fixes instantly to your users, bypassing the labor of bundling, submitting, and having your app accepted to the App and Google play stores, a process that can take between 2 and 7 days (the App Store being the main pain point in this process). This is something that is not possible with native apps, though is possible with hybrid apps.

While working with React Native we noticed that good amount of components are not well documented with current release of React Native.When the documentation wasn’t satisfying enough we tried looking up things in the React Native source code, however we found ourselves disappointed by the poor quality of code base. Probably in a rush to push more functionality to the framework, they also sometimes overlook how clean the code is.

Of course it is possible to use third-party components, but the selection is not comparable with the number of community-generated libraries that we can find for iOS or Android. A big problem with these components is also the fact that the compatibility and support is not guaranteed with future React Native releases.

native vs hybrid

Performance

No doubt Native apps perform well compare to hybrid apps. But platform like React Native is equally good at performance.

Hybrid apps are HTML5 apps that are wrapped inside of a native container and provide access to native platform features. Cordova and PhoneGap are prime examples.

If you’re looking to build an MVP, prototype, or are not worried about the performance, then a hybrid app may work for you, keeping in mind the entire project will need to be rewritten if you do end up wanting to go native.

There are many innovative things going on in this space, like Ionic Framework. Hybrid is getting better and better, but it is still not as fluid or natural feeling as Native.

Our Biggest Mistake Was Betting Too Much On HTML5 — Mark Zuckerberg

User Experience

Customer experience for mobile is more important to your business than you might think. For many companies, including most serious startups as well as medium and large sized companies, hybrid apps may not deliver the quality that they want and that their customers demand, leaving the feeling unpolished and less professional.

Application which contain lot of media, graphics and which uses GPS, acceleration and such native components need better user experience, such apps are mostly native apps to ensure better quality. The apps which are simple listing apps and very less native components are used can go completely hybrid.

Your mobile device is with you, quite literally, every minute of the day. And if the device is with you constantly, it needs to be responsive and reliable. It should respond quickly and give you the answers you need as soon as possible. These are the expectations of all mobile users. Native applications have the best performance, highest security, and best user experience.

While 79 percent of consumers would retry a mobile app only once or twice if it failed to work the first time, only 16 percent would give it more than two attempts. Poor mobile app experience is likely to discourage users from using an app again. Source

Maintenance

With a hybrid application, unless a company adds a completely new feature that dramatically changes the user experience, the user doesn’t need to update the app in the app store. If the update in question is on a page that is loaded from the server, as the user navigates through your app they will instantly see the update. It’s that simple.

There is one more aspect to this. Using open source platforms like React Native which are still in growth stage keeps updating their platforms. Third party library dependency can be huge issue while maintaining the hybrid apps. It’s always better not to rely much on third party apps while developing hybrid apps.

You may easily get iOS and Android developer compare to React Native developer. React native developers are mostly Web developers, Javascript developers, who may not be very familiar with Mobile interface guidelines.

Additionally, depending on the complexity of the app, maintaining one source code is very appealing because new features are also easier to develop and deploy. Conversely, bug fixes are platform agnostic and can be done and released easily to production. Lastly, hybrid apps are distributed through the app store like all other apps which means the user will not see any immediate difference between a hybrid and a native app.

Cost

If you have less than four months to develop an app, and you want to test a limited private market on the viability of your app, then use Hybrid. If the test works, then move to native as soon as you can and show it to the world. If it doesn’t work, you’ve saved yourself time and money.

The cost of native mobile application development is high compare to native app developers, is a statement of past. Currently web developers are asking equal compensation compare to native app developers. The cost factor depends on lost of other factors. As mentioned earlier whats the nature of app, what is the user base. Who are going to use this app? If you are targeting luxury customers, invest in native apps or go hybrid.

There are clear and distinct advantages and disadvantages for both hybrid and native approaches, and that is why this discussion is still relevant. Speed to market, one source code, cross-compatible web technologies, easy updates, availability of resources, and lower (initial!) budget costs make hybrid applications very appealing.

Risk & Security

Just like most modern web applications, mobile applications bring big value to our lives, but also can introduce in big risks. When considering which development methodology best suits your needs, security should also play a role in your decision making.

Native applications are considered more secure than hybrid apps for numerous reasons which include the fact that they are able to leverage platform-specific built-in security features. The fact that hybrid apps are dependent on webviews means that they are prone to injection attacks when using certain API’s. Various techniques, tools and third party libraries that are specific to each platform have been made available to minimize the attack surface.

Hybrid apps make extensive use of web views, which can leave the application open to potential exploits if not the code is not properly secured, any attack which is specific to JavaScript, or HTML, is also a threat to hybrid applications and vulnerabilities related to the backend API are also common. While not a completely bulletproof solution against attacks against your app, one way to minimize the threat is by only working with secure frameworks with built-in security controls. Additionally, reverse engineering and man-in-the-middle attacks also threaten hybrid applications.

Platforms

Apple-Logo-black-png-transparent (1)
android-logo-transparent-background (1)
swift_logo
react
HTML5
ionic-logo-horizontal-transparent

Thinking about building a mobile app?