Month: December 2015
BitLang: My First iOS App
You may have read how I recently learned to develop in Swift for iOS. Well, here’s a link to the app (BitLang) I set out to build during that learning process; now available on the iTunes AppStore.
More About the Inspiration and Background for Why I Chose to Build BitLang:
While on our “year long trip around the world” I found myself going back and forth between Duolingo (a language learning app) and Google Translate (a phrase translation app). While I love both products, they had a few shortfallings when it came to a couple of specific needs I had.
First, I wanted to learn from a pre-organized set of phrases that pertained to my immediate needs. I would then want to build upon that set of phrases with custom phrases of my choice.
Although I enjoy the general Duolingo-made learning process, it is built with a long-term lesson plan in mind. I am required to learn phrases like “Your horse ate my apples” to get familiar with the grammar of a language. What I want, however, is to learn phrases I can use for my one week tour through France. For example, due to travel plans this weekend I may just want to prepare myself to say, “May I have a local beer on tap?”, “Check please”, or “Two more red wines.”
Of course, I can accomplish my phrase-by-phrase translation needs using Google Translate, but it doesn’t do a great job organizing the translations by category or language. Also, it isn’t built to help me practice the phrases once I’ve looked them up.
I was frustrated by those gaps left between my favorite products. So, I posted feature requests to both product’s sites and got a “[not in our roadmap]” answer. (Which I completely understand and respect.) At first I was disappointed, but then I realized, “Hey, wait a sec, I know how to build things. Maybe I should just create a solution myself.” And so, BitLang was born.
The app is still a work in progress and is growing from its humble MVP beginnings. Here are the designs I mocked up for the first few iterations. Currently it just looks up phrases and allows the users to bookmark them into a single folder. It currently only translates for three languages: French, Spanish and German.
In the next few versions users will be able to login, view pre-made translation packages, and bookmark those packages. Beyond that I will start digging into deeper learning based workflows (quizzes and tests) as well as some community based features.

You can read more about the iterations I took in fleshing out the BitLang concept below.
Phase I
At first, I focused heavily on the learning part of the concept. Trying to simplify the lessons into premade (but pertinent) Q&A with very simple phrases. Users would translate a phrase one word at a time.

Phase II
Phase I became very complex, and the questions ended up getting pretty redundant. Also, I was missing the whole aspect of being able to generate a list of phrases that interest the user the most. For it all to work, the system would have to be made up of a custom lesson, not UGC. So for the next iteration I focused more on the “looking up of phrases” side of things. To make things even more challenging decided to build it while learning Polymer 1.0.

It was starting to come together, but as I mentioned in my key learnings for iOS development, I was forcing a web app model in what was obviously better suited for a native app. My lack of skills to develop in iOS has annoyed me for years so I figured it was time to make the move. That is when the BitLang app became to be.
Updates/Feedback
- Is really looking for a tool that provides gender along with translations. e.g. spanish: Cup -> Taza … should be … La Taza
- Is looking forward to the helpful learning side. One users suggests getting notifications for any words looked up. The interesting thing he asked here is: why should I organize things – If i’m looking it up I want to learn it so assume it.
- Big win: Tons of people find the same holes in language learning tools. I’m not the only one. People urn for crash course mixed with lookup.
Key links to finally learning iOS development
If you haven’t picked up any iOS development skills yet, now is the time. It’s never been easier. Below are my reasons to finally take the plunge (successfully), followed by some helpful links to help you learn to create your first app too.
Contrary to popular belief, I’ve never coded up an iOS app myself. My excuse? For one, hiring great iOS developers gave me more time to focus on building great teams and products for my startups. In addition, Objective-C has a unique syntax and requires a deeper understanding of handling memory, which demanded even more learning time. Finally, there was an immense level of complexity involved in testing, certifying and delivering native iOS apps to market. As a matter of fact, those higher than normal learning curves inspired many startups (including a few that I launched) to focus on making developing apps easier.
Since I already had a strong web development background, I always found it easier to build prototypes for my ideas using the latest web-based, app-building, technologies. Year-after-year a new product claimed to have “the right stuff” needed to create an iOS app that felt fully native, without needing to learn to code directly in Objective-C. Year-after-year I found those claims to be more wishful thinking than reality. Although quicker to develop, those technologies always left the final product feeling hacky, unresponsive or limited, and, in order to go full steam ahead with a project, a fully native version would be necessary.
Earlier this year I took another shot at using a new piece of web tech to build out a mobile app idea I had. This time I learned Polymer 1.0. I loved it as a web framework, but my hopes that Google had managed to finally develop an SPA framework that translated into a smooth functioning mobile app was, yet again, overly optimistic.
It isn’t really the technology’s fault though. The rendering mechanisms for HTML/Web (et al.) just weren’t made to process smooth app-like features. It renders top to bottom, grabs all its assets remotely, makes a lot of inferences, is based on standards that try and work across an array of products made by a variety of companies, and manages general security measures that must be spread across every site. In the web world, the browser is the ad-hoc gatekeeper, and its fighting to keep up. The mission of a browser is critically different to that of apps: to allow a user to serendipitously browse a large breadth of sites in a single view, all the while protecting the user from exposure to malicious pages that are inherently sprinkled into a user’s browsing session. Native apps are different. Both the user and the developer have a strong working agreement between what the developer would like you to see and how the user would like to see it. With that level of trust the developer is able to confidently create an experience specifically tailored to the goal of the app and the interest of the user; the OS can focus on greasing the wheels.
…
Sorry, I digress. Point is, yet again I was disappointed in what the web (and web wrappers) could offer, and, almost as a yearly tradition, I took a stab at learning how to develop directly in iOS again. This time, I’m glad I did!
Maybe it was due to all the free time I had while on our year long trip, but I doubt it; it came rather easily this time around. No, I think the main contributor to my smooth transition is that Apple has done a stellar job incrementally improving the life of an iOS developer over the years. I think the real turn was the release of Swift in 2014. The language is a natural leap from other common languages, as compared to its Objective-C counterpart. Also, there is no longer a heavy requirement to understand how to manage an app’s memory and delegations. The other power ally in creating ease for iOS developers is XCode’s more powerful yet simplified environment, along with interactive interfaces like Storyboards, segues, IB Designables and more. In addition, now that TestFlight is fully integrated with iTunes Connect and Xcode, testing an app on a device, releasing it to external testers, and pushing it to the App Store is only a few clicks worth of effort; fairly brainless really.
All this added up to a surprisingly easily made V1 of my very first fully native iOS app! Yay! This will be fun 😀
Links to Learning iOS
Here are some key links I bookmarked while learning Swift in Xcode 9.0, including: vides, Q&As on StackOverflow, and tutorials. I strongly recommend learning the language by working toward implementing an idea you want to bring to life. Not only does it give you an inherent direction in what needs to be learned, but it also helps you push through the tough parts of learning that would otherwise spell defeat. The app I built used APIs, JSON, CoreData, Table Views (for listing data), Audio, and more. Hope this list helps!
UI Table View Controller
Prototyping a Custom Cell
http://www.ioscreator.com/tutorials/prototype-cells-tableview-tutorial-ios8-swift
http://stackoverflow.com/questions/25541786/custom-uitableviewcell-from-nib-in-swift
http://www.appdesignvault.com/xcode-swift-tutorial-dribbble/
https://grokswift.com/uitableview-updates/
Async Calls
Search Bar
http://shrikar.com/swift-ios-tutorial-uisearchbar-and-uisearchbardelegate/
Storyboards Navigation and Segues
http://stackoverflow.com/questions/26207846/pass-data-through-segue
http://www.raywenderlich.com/113394/storyboards-tutorial-in-ios-9-part-2
Swift Swift: Programmatic Navigation View Controllers in Swift
http://stackoverflow.com/questions/12561735/what-are-unwind-segues-for-and-how-do-you-use-them
http://stackoverflow.com/questions/25167458/changing-navigation-title-programmatically
Reusable Xibs
Core Data
https://www.andrewcbancroft.com/2015/02/18/core-data-cheat-sheet-for-swift-ios-developers/#querying
http://stackoverflow.com/questions/28754959/swift-how-to-filter-in-core-data
http://jamesonquave.com/blog/developing-ios-apps-using-swift-part-3-best-practices/
Network and Observers
http://stackoverflow.com/questions/24049020/nsnotificationcenter-addobserver-in-swift
http://stackoverflow.com/questions/25398664/check-for-internet-connection-availability-in-swift
https://www.andrewcbancroft.com/2015/03/17/basics-of-pull-to-refresh-for-swift-developers/
http://www.jackrabbitmobile.com/design/ios-custom-pull-to-refresh-control/
http://stackoverflow.com/questions/24466907/passing-optional-callback-into-swift-function
Gestures
http://www.raywenderlich.com/77974/making-a-gesture-driven-to-do-list-app-like-clear-in-swift-part-1
http://useyourloaf.com/blog/creating-gesture-recognizers-with-interface-builder.html
Designables
Page View Controller (Pages on swipe control)
A long drive to Galle through the jungles of Sri Lanka
The best way to get around Sri Lanka is by cab. From one major area the next is a three to nine hour cab ride. We made a few stops along the way to stretch our legs.
A day in Kandy and the Temple of the Sacred Tooth
Isurumuniya Temple in Sri Lanka
Camping in a dubanese desert
Dave, Sheila, Jackie and I took a drive deep into the desert to spend the night camping under the stars. We even made a fire from flint, a sliver of steel and a cotton ball, which was important for warmth and SMORES!
Indian Street food in Dubai
Funny, after all the time we spent in India this area in Dubai was the first time we felt it was safe enough to eat Indian street food without a Deli Belly conclusion.
Next Stop, The Dead Sea to float like a log!
We drove from Petra to visit the Dead Sea (on the Jordan side). We had a good laugh floating with ease in the salty sea, covered in mineral mud. The water was so salty that after a few minutes our lips began to puff!
Visiting Petra in three videos
Drive to Petra
Our drive from Amman Airport to the town of Petra
Petra I
Our hike from the entrance of Petra, passed the Treasury and to the Nabatean Theatre
Petra II
Up the cliff staircase, with some amazing views of the valley, and to the Monastery

