Title: Building Mobile Apps with Rhodes
1Building Mobile Apps with Rhodes
Adam Blum adam_at_rhomobile.com
2The Rhomobile Mission
Mobilize enterprise apps cost-effectively
with a great user experience.
- provide the high level productivity and
portability of web programming - with device optimization and offline capability
of native mobile apps - open source for rapid adoption by developers
3Platform Overview
- Rhodes
- microframework for building locally executing
natively optimized mobile apps - Developers run app generator for their objects of
interest and then edit HTML templates - Contains first mobile Ruby implementation
- RhoSync
- Sync focused on web service data (needed in the
age of SaaS)
4The Rhodes Microframework
- a minimalist Ruby implementation for mobile
devices - a Model-View-Controller "microframework" that
consists of a directory structure and file naming
convention. Writing to this framework primarily
consists of editing a set of ERB templates for
creating HTML to display data - the RhoSync synchronization engine client
- a simple object relational manager (ORM) called
Rhom - a web server which is installed on the mobile
device and runs locally - The RhoGen app generator
5Sample Rhodes Apps
- Rhomobile provides small set of enterprise apps
- CRM - subset of SugarCRMs capabilities syncing
to opportunities, contacts to device - Field service Siebel field service
- third party apps
- TrailGuide (Basecamp) will release in a couple
months - small number of vendors will accept GPL license
- their source will be published on rhohub.com
- highlight best of breed examples in several
verticals field service/MRO, medical, scientific - http//rhomobile/contest
6Building a Rhodes App
- Get your data (RhoSync)
- Generate a sync source
- Define your sync source adapter code
- Test it from the web page
- Generator your app (RhoGen)
- Generate an app (in the Rhodes \apps subdirectory
for now) - Generate a model and scaffold code
- Develop your app (Ruby/HTML editor of choice)
- Edit your model controllers
- Edit your HTML templates (ERB file)
- Build, test, deploy (development environment for
device) - Build your app
- Test your app
- Make available for download (or post to App
Store)
7RhoSync Architecture
RhoSync Server
Siebel
SOAP
SalesForce
Rhodes runtime
SOAP
your app
SugarCRM
SOAP
BaseCamp
REST
other app backends
REST
8Defining a Rhosync Source
- Provide a Source Adapter class with
- login- authentication code for the backend
- query - retrieve or read's objects from the
backend source - sync - take apart these objects and put them
into a "property bag - create
- update
- delete
- logoff not always necessary
9Generated Source Adapter Class
class ltnamegt lt SourceAdapter def
initialize(source) super end def login
TODO Write some code here end def query
TODO write some code here end def
sync usually the generic base class sync
does the job super end def
create(name_value_list) TODO write some
code here end def update(name_value_list)
TODO write some code here end def
delete(name_value_list) TODO write some
code here if applicable end def logoff
TODO write some code here if applicable
end end
10Sample Rhosync Source Query
select_fields 'name','case_number','priority','
status','type','description','resolution'
result client.get_entry_list(session_id,'Cases'
,'','case_number',0,select_fields,'10000',0)
11Rhodes Architecture
Rhodes app
RhoSync server
model
model
HTML (ERB) templates
controller
Source adapter
app backend
model
HTML (ERB) templates
controller
model
Source adapter
app backend
Rhodes runtime
ORM(Rhom)
browser control
RhoSync client
web server
synced local data (SQLite, PerstLite)
Ruby interpreter
mobile device
12Generate Your Rhodes App
- Generate your app
- rhogen app accountapp
- Creates
- application.rb
- index.html
- Generate your model
- cd accountapp
- rhogen model account http//rhosync.rhohub.com/sou
rces/1 1 name,industry - Creates
- controller.rb
- config.rb
- index.erb
- new.erb
13Edit A View
ltform title"Edit Account" class"panel"
id"account_edit_form" method"POST"
action"lturl_for('update')gt"gt ltfieldsetgt
ltinput type"hidden" name"id"
value"lt_at_account.objectgt"/gt ltdiv
class"row"gt ltlabelgtName lt/labelgt ltinput
type"text" name"accountname"
value"lt_at_account.namegt"/gt lt/divgt ltdiv
class"row"gt ltlabelgtIndustry lt/labelgt
ltselect name"accountindustry"gt
lt_at_industries.each do igt ltoption
valueltigt ltif _at_account.industryigt
selectedltendgtgtltigt lt/optiongt
ltendgt lt/selectgt lt/divgt
lt/fieldsetgt ltinput type"submit"
value"Update"/gt lt/formgt
14Build/Test On Your Favorite Device
15Platform Status
- 0.1 operational on iPhone, Windows Mobile and RIM
Blackberry today - Sample apps for SugarCRM and Siebel Field Service
- All open source
- github.com/rhomobile
- rhomobile.lighthouseapp.com
- 0.2 at end of December
- Better build process
- Faster sync
- Faster startup
- Symbian
- Settable source (already checked in)
- PIM access
160.3 Release
- February 2009
- RhoVer - vending machine
- Device capabilities service
- 1.0
- Android support
17Hosted Services
- Registration
- Developers
- Apps
- Sync
- Create
- Test
- App Creation
- Generate
- Edit
- Download/upload
- Build and provision
- Builds
- Vending
18RhoVer Over the Air Provisioning
1) user signs up via desktop browser
2) SMS sent to user with download URL
DeviceCap
RhoVer
rhohub.com/vending/yourapp !
3) User hits vending machine for app with
mobile browser
4) Uses DeviceCap (useragent strings/devices) to
send back download link
Download app for your Kogan Agora
5) User downloads runner/ app for device
RhoSync
Your app
enterprise app backend
Rhodes
6) App is running on device
18
19Why Rhomobile?
- Declarative tag-based approach (web programming)
is more productive - Rich client against local data much better than
remote web apps - Write it once and it works on all smartphones
- Open source from the ground up