Phone Icon

ISU Mobile Club


Learn Mobile Development with Cuting Edge Technologies

When?


Wednesdays

at 6:30 P.M.

Who?


My name is Jonathan Mitchell and am the current president of the ACM Mobile Dev Sig, here at Illinois State. I am currently a Senior at ISU pursuing a bachelor's degree of Computer Science.

I have been personally researching mobile development for a little over 3 years. I started personally learning mobile because I had app ideas, and wanted to execute on them. I started my research by first learning Android development, then began learning iOS, web/web-based apps and eventually React Native.

If you have any questions about Mobile Dev, you can email me at jhmitch@ilstu.edu.

Where?


Old Union, Normal, IL 61790

(Room 132)

What we learn. What we use.


React Native: The Perfect Balance between Portability and Effeciency

React Native

By far, one of the biggest challenges as a mobile developer is finding a good framework. In history, there have been two ways to develop mobile apps: Natively and Web-based. Designing an app natively just simply means writing for the device's specific Operating System. Designing a Web-based application means to design an HTML page that looks like a mobile app, but in essence is powered by the phone's browser. Native apps give excellent performance, but will take more time to develop and will only run on the specified Operating System (Android OR iOS). Web-based apps on the other hand will give excellent portability, allowing the app the run on any device (Android AND iOS). However, since web-based apps are essentially ran though the phone's browser, we don't utilize the full potential 'power' of the phone. Therefore, much efficiency lacks in our application.

When designing a phone app natively, we usually use Java + Android SDKs for Android, and Objective-C/Swift + iOS SDKs with iOS. Designing an app natively will always produce the most efficient application, since we are 'tuned into' the device's specific Operating System. However, if we design an app natively, we sacrifice portability. We are forced to write the same application twice on both platforms, and learn both device's languages, frameworks, and caveats.

When designing a web-based phone app, we design it using HTML, CSS and Javascript. These are technologies that are meant to run within some sort of browser. Therefore, in order to have this app run on the phone, it needs to essentially execute the code within the phone's internet browser. Some popular frameworks used to achieve this are Cordova and Ionic. Essentially, Cordova and Ionic take advantage of something called a 'Web View', which iOS and Android both have. A web view is nothing more than a bare-bones internet browser; it takes in web code, and outputs the web view to the screen. Note that in order for a web-based application to truly look like a native application, the 'browser-bar' (AKA where you type URLs into) is cut off completely. However, a browser wasn't designed to compute somewhat 'expensive' operations, which a phone app might need. This is where efficiency lacks in web-based apps.

React Native is by far the perfect balance between portability, and efficiency. In React Native, we design the application using Javascript, but here's the strange thing: Although we write the application using Javascript (a web language), our app actually compiles down to native code. The funny thing is that React Native apps are not web-based apps, and their not quite native apps either. It's somewhere in-between. Through this, the sky is the limit. We essentially can have one Javascript code base, which acts as our app's logic. We can then compile down to both Android AND iOS devices.

Now by far, React Native is not perfect. It is still a very new open-source project. Various tools (ex. web-sockets) have been difficult to implement in React Native. However, the beauty of React Native is that we can tinker with the native code as well. One way of tinkering is that we can create our own custom modules natively, and easily import them into the Javascript project.

I have been using React Native for about a year now, and have absolutely been loving it. And don't get me wrong, it never hurts to learn native app development as well. Learning native development is actually beneficial if you want to write custom, native modules in the future. However, if you only want to write your apps natively, it will take more time and effort to produce two, identical apps for iOS and Android. For web-based app development, I personally do not recommend Cordova and Ionic. I have used these in the past and have seen the efficiency truly lack for non-intensive applications. In my opinion, the portability benefit does NOT outweigh the cost of the poor efficiency. I believe that React Native is by far the perfect balance between portability, and efficiency while developing mobile applications, and is 'the next big thing' when it comes to mobile development.

- Jonathan Mitchell, 20 Sep. 2016

Enjoy coding with live-reload.


Watch my React Native Tutorials on YouTube!