RubyMotion Success Story: EverClip
To bootstrap our success stories series we had the great pleasure to talk to Francis Chong who just released EverClip, the first commercial app written in RubyMotion.
Hi Francis! Thanks for taking the time to talk to us. Could you introduce yourself?
I’m the co-founder of Ignition Soft. We are a small team focused on crafting mobile apps.
You just shipped EverClip, a pretty cool app for Evernote. The app got nice reviews and it is ranking #1 in various categories in the Japanese App Store. Congratulations! Could you tell us more about the app?
We want to save part of a web site, ebook, or images from various apps and store them permanently. We want to do that without switching back and forth between apps. We want to easily search and share this information.
Our solution is a pasteboard app that handles rich text (HTML) and posts it to Evernote.
EverClip is built entirely in RubyMotion. How much time did it take you to build the app? How did you find the experience using RubyMotion?
The first version with a minimal feature set took a few days. It took 2 months to have a version we felt was ready for production.
RubyMotion is a new product, we treated it with care and selected a smaller, experimental project to write our first app with it. It worked surprisingly well.
At the same time, as we were working on our app, we found bugs in different areas: compiler, build tools, external tools or missing documentation. We could see the toolchain was being constantly improved, the bugs were being fixed, and the documentation was being improved.
I’m quite happy to hack and see a great project evolving. That said, if I’m not familiar with iOS and ruby, or if I am working on a client project that are having hard schedule, I will probably find this ride too exciting and distracting.
You are an experienced iOS developer. How did RubyMotion compare to traditional tools (Xcode / Objective-C)?
At first, I found it not much different from Objective-C. You use the same APIs, but with a different tool and language. I often do the translation between Objective-C and Ruby. It is constantly evolving though, people build different wrappers, libraries and tools that make it feel more idiomatic ruby. I prefer the idiomatic ruby way, Ruby code can be much more concise and easy to read. Just check the BubbleWrap gem to see some samples.
How was your workflow with RubyMotion? What code editor did you use? Did you get to use any 3rd-party library or gem in EverClip?
I use Sublime Text 2 with the RubyMotion plugin which is extremely handy. I use bundler to manage gems, and CocoaPods to manage Objective-C open source libraries. I create view controllers and initialize views using the SimpleView gem, and handle events or notifications with BubbleWrap.
I use many 3rd-party libraries. Without DTWebArchive (handle rich text format in Safari), WebContentView (display HTML content), QuickDialog (quick form drawing) and libtidy (HTML cleanup), EverClip would not exist.
What are your favorite features of RubyMotion? How do you see RubyMotion in the future?
The toolchain. It is open source and easily extensible. I see many creative ways of using it, such as adding colors to the output of unit tests, or include gems/cocoapods in projects. I spend a night to hack a UIViewController generator that works with the ib gem, it is really easy with existing ruby tools and frameworks. The power for people to write or change their tool is really amazing and this is not going to (easily) happen if we are using XCode.
With more people writing production apps using RubyMotion, I can see people extracting the core of their app to create something like Rails for iOS app development. This may not be happening very soon, but the community around RubyMotion is very strong and active.
Will you use RubyMotion for your next app?
I am not throwing away XCode yet, but I’m going to develop more RubyMotion apps in the future.
If you are using RubyMotion in production and would like to participate to our success stories series, contact us! We would love to hear about what you are doing.