october 2017, st. petersburg - tau...
TRANSCRIPT
![Page 1: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/1.jpg)
October 2017, St. Petersburg
Software Engineering Conference RussiaOctober 2017, St. Petersburg
Software Engineering Conference Russia
Improvement of hybrid solutions forthe development of cross-platform
mobile applications
Dmitry Soldatenkov & Alexander Epifanov
![Page 2: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/2.jpg)
Alexander Epifanov
Co-founder,VP Technology
Mobile and embedded expert and manager.More than 11 years of experience in mobile development.
Worked at TWP, RhoMobile, Motorola Solutions, Zebra Technologies and other companies.
Details : https://www.linkedin.com/in/aepifanov
E-Mail: [email protected]
About presenters 2
Dmitry Soldatenkov
Co-founder,CTO
In high school I understood that programming is my main interest I worked in one of the first Russian companies to develop computer games. Then work on a large product for developers (TogetherSoft / Borland). During my career my interests shifted to the mobile platforms, and currently I work in this area more than 13 years.
I worked at Vivendi, TogetherSoft, Borland, LG Electronics, TWP, RhoMobile, Motorola Solutions, Zebra Technologies.
Details : https://www.linkedin.com/in/dsoldatenkov
E-Mail: [email protected]
![Page 3: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/3.jpg)
Remark 3
Time limit
Since this presentation has strong time limit we will skip some parts, but you can download full presentation from our web site http://tau-technologies.com
Previous presentation
On previous SECR 2016 we also presented our lecture about cross-platform solutions:“Current state and future of solutions for develop enterprise cross-platform mobile applications.” You can download this presentation in Russian with this link: http://files.tau-technologies.com/Events/2016_10_CEE_SECR/TAU_Technologies_CEE_SECR_2016_RUS.pdf
In previous lecture we spoke about existing solutions on market and compared them more detailed than this time - see previous presentation to know more.
![Page 4: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/4.jpg)
Contents 4
1. Architectures of cross-platform mobile development solutions2. Extended Browser - solution for lightweight web applications3. Why hybrid way is better than native4. Problems of hybrid solutions5. Mixed-hybrid architecture6. Building of mixed-hybrid architecture based on existing
client-server solutions7. Ruby on Rails8. Node.js9. Node.js based solutions for desktop - NW.js and Electron
10. RhoMobile 11. RhoMobile with Ruby12. RhoMobile with Node.js13. Tau Quadrant14. Questions
![Page 5: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/5.jpg)
1. Cross-platform development is always a tradeoff! 5
=+ +
+ +
+ +
![Page 6: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/6.jpg)
1. Mobile cross-platform development architectures 6
Platform API
Framework WebView
UI + LogicHTML/CSS/JS
code
Framework
Platform API
Framework WebView
UI HTML/CSS/JS code
Framework
Logiccross-platform code
Platform Browser
UI + LogicHTML/CSS/JS
code
Webcross-platform Application
Platform API
UI + LogicNative code
SImple not cross-platform Native Application
Hybridcross-platform Application
Mixed Hybridcross-platform Application
Cordova/PhoneGap RhoMobile+ a lot of
HTML/CSS/JS frameworks
Cordova/PhoneGap with jxCore plugin,
RhoMobile (Ruby/JS)+ a lot of
HTML/CSS/JS frameworks
Platform API
UIplatform dependent
or cross-platform
code
Framework
Nativecross-platform Application
Xamarin (C#)Appcelerator (JS)React Native (JS)NativeScript (JS)QT (C++, QML)
RubyMotion (Ruby)CodenameOne (Java)
Corona (Lua)
Logiccross-platform code
a lot ofHTML/CSS/JS frameworks
iOS: ObjC, Swift, C++Android: Java, C++
WinCE/WM: C#, C++
![Page 7: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/7.jpg)
1. Solutions on market 7
RubyMotion
Native Hybrid
![Page 8: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/8.jpg)
2. Extended Browser - solution for lightweight web applications 8
Platform API
Rhodes WebView
UI + LogicHTML/CSS/JS
code
local (open from filesystem)or
remote (open from remote server)
Rhodes Framework
Peripherals API
RhoBrowserSometimes we just need a lightweight web application with access to some H/W capabilities of device or some native API.
Adding a set of APIs into device browser we get a solution to execute our lightweight web applications (HTML/CSS/JS).
Some of device vendors already have this kind of solution. For instance, Zebra Technologies has Enterprise Browser (based on RhoMobile, not on Cordova, and supporting WM/WinCE):https://www.zebra.com/us/en/products/software/mobile-computers/mobile-app-utilities/enterprise-browser.html
Honeywell also has similar product: http://www.intermec.com/products/ib/index.aspx
Tau Technologies has similar product - RhoBrowser, which runs on iOS, Android, WinCE/WM and supporting Zebra’s enterprise devices (WM and Android) H/W capabilities like Barcode scanner, RFID scanner etc.
![Page 9: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/9.jpg)
3. Benefits of cross-platform development 9
● Cross-platform native solutions can decrease development resources up to two times !
Problems of not-hybrid solutions :
● Developers must learn specific API/Language● Application’s code can not be used out of solution
![Page 10: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/10.jpg)
3. Benefits of hybrid solutions 10
● Hybrid Cross-platform solutions (like Cordova or RhoMobile) can decrease development resources up to three times !
Important benefits :
● You can use existing web developers !● You can use already developed code from web
applications (HTML/CSS/JS) !● You can transfer your code from web portal to
application and from one hybrid solution to another without changes !
![Page 11: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/11.jpg)
4. Problems of hybrid solutions 11
Main problem is all code and data is inside WebView
Big application like big web Application will have low performance will run in single thread etc.
Web-based UI does not look and feel like native oneNot a big deal for in-house enterprise apps;Javascript UI frameworks can look almost like Native UI
Different web browser versions
Use own browser, Crosswalk for instance (https://crosswalk-project.org/)RhoMobile has own WebKit port for WinCE/WM.JS Frameworks also help.
![Page 12: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/12.jpg)
5. Mixed-hybrid architecture 12
Platform API
Framework WebView
UI HTML/CSS/JS code
Framework
Logiccross-platform code
Mixed Hybridcross-platform ApplicationHow we can solve main problem of hybrid solutions ?
Extract not-UI code from WebView into separate threads and container !
Mixed-Hybrid solution do it !
But how make it ?What language should we use ?How UI in WebView should be connected to logic and data ?
![Page 13: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/13.jpg)
6. Client-Server web application 13
Platform Browser
HTML/CSS/JSapp code
+
JS frameworks
Remote server
Wait a minute.We have a web browser with HTML/CSS/JS code and separate logic/DB ? But this is well known client-server architecture for web applications !
We have a lot of already existing code for this platforms.We have a lot of experienced developers for this platforms.We already used this in our web applications etc.
![Page 14: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/14.jpg)
7. Ruby on Rails from Client-Server with remote server 14
Web server
routing
controller
model
view
Platform API DB
public
Platform Browser
HTML/CSS/JSapp code
+
JS frameworks
Remote server
![Page 15: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/15.jpg)
7. Ruby on Rails to Client-Server with local server on device ! 15
Web server
routing
controller
model
view
RhoMobile API DB
public
RhoMobile WebView
HTML/CSS/JS app code + JS frameworks
RhoMobile API RHODES
Hybrid architecture.UI implemented with web technologies inside WebView.
Developers can use any JS frameworks.
We have local HTTP server with Ruby VM on our mobile device. Ruby code executed on mobile device.
![Page 16: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/16.jpg)
8. Node.js from Client-Server with remote server 16
Platform Browser
HTML/CSS/JSapp code
+
JS frameworks
Remote server
Node.js core DB
Node.js application - HTTP server
![Page 17: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/17.jpg)
8. Node.js to Client-Server with local server on device 17
RhoMobile API DB
Rhomobile WebView
HTML/CSS/JS app code + JS frameworks
RhoMobile API RHODES
Hybrid architecture.UI implemented with web technologies inside WebView.
Developers can use any JS frameworks.
We have local JS VM and Node.js environment. Node.js application starts local HTTP server.
Rhodes Node.js environment
Node.js application - local HTTP server
![Page 18: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/18.jpg)
9. Node.js based desktop solutions 18
name NW.js
developer NW.js community
type hybrid
source code full
price
website http://nwjs.io/
Supported platforms Linux, Mac OS X, Windows
name Electron
developer Electron community
type hybrid
source code full
price
website http://electron.atom.io/
Supported platforms Linux, Mac OS X, Windows
Hybrid solutions to make desktop applications based on Node.js
![Page 19: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/19.jpg)
10. RhoMobile Solution 19
RHOMOBILE SUITE
RHODESRHO STUDIO RHO CONNECT
RHO BROWSER
Rhodes● Solution for development of mobile cross-platform
hybrid and mixed-hybrid applications● Developers can use just HTML/CSS/JS (like Cordova),
and also use Ruby in Ruby on Rails like environment● Includes a lot of modules with support for different APIs
like Barcode, Printing etc.● Support iOS, Android, WinCE/WM, WP● Own port of Ruby 2.3.3 VM
TAU EXTENSIONS
Tau Extensions Additional modules include:
● Crosswalk WebView for Android (replaces system WebView in application)
● Own port of WebKit for WinCE/WM (replaces system IE in application)
● improved OpenSSL for Android● module with Node.js based on jxCore
![Page 20: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/20.jpg)
10. Installation of RhoMobile 20
There are three ways to install RhoMobile - please install our latest release 6.0 :
● Download and install our all-in-one installation package.http://tau-technologies.com/developers/downloads/
● Install gems manually
● Download source code from GitHub(you should manually define path to rhodes in applications)Source code : https://github.com/rhomobile/rhodes
After install you should set up paths to mobile SDKs:
$ gem install rhodes$ gem install rho-tau-extensions$ gem install rhoconnect$ gem install rhoconnect-client
Before installation please install all prerequisites into your system. Details:http://docs.tau-technologies.com/en/6.0/guide/rhomobile-installhttp://docs.tau-technologies.com/en/6.0/guide/nativesdksetup
$ rhodes-setup
![Page 21: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/21.jpg)
11. How it works. Mobile cross-platform application with Ruby 21
Let’s make our application: (see details: http://docs.tau-technologies.com/en/6.0/guide/creating_a_project) :
rhodes - command line tool for generating :applications, models, extension. Generated code is fully workable and can be built and run.
$ rhodes app MyApp
![Page 22: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/22.jpg)
11. How it works. Mobile cross-platform application with Ruby 22
We get MyApp folder where located generated application’s code, resources etc.
MyApp
app
loading.png
helpers
Settings
index.erb
layout.erb
application.rb
loading.html
public
icon
rhoconfig.txt
AndroidManifest.erb
build.yml
Rakefile
resources
ios
android
![Page 23: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/23.jpg)
11. How it works. Mobile cross-platform application with Ruby 23
“app” folder contains application’s code - *.ruby and *.erb (templates) files
In runtime this folder is located under root of local HTTP server.
MyApp
app
loading.png
helpers
Settings
index.erb
layout.erb
application.rb
loading.html
public
icon
rhoconfig.txt
AndroidManifest.erb
build.yml
Rakefile
resources
ios
android
![Page 24: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/24.jpg)
11. How it works. Mobile cross-platform application with Ruby 24
Folders with helper ruby files
MyApp
app
loading.png
helpers
Settings
index.erb
layout.erb
application.rb
loading.html
public
icon
rhoconfig.txt
AndroidManifest.erb
build.yml
Rakefile
resources
ios
android
![Page 25: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/25.jpg)
11. How it works. Mobile cross-platform application with Ruby 25
MyApp
app
loading.png
helpers
Settings
index.erb
layout.erb
application.rb
loading.html
public
icon
rhoconfig.txt
AndroidManifest.erb
build.yml
Rakefile
resources
ios
android
erb template for index page (start page in application by default)Used two steps HTML generation :Page template contains only content, and shared other parts and loading of CSS,JS in separate erb template layout
<div class="container-fluid">
<div class="row"> <div class="list-group"> <a href="#" class="list-group-item"> <span class="glyphicon glyphicon-chevron-right pull-right" aria-hidden="true"> </span> Add link here... </a> </div> </div>
</div>
![Page 26: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/26.jpg)
11. How it works. Mobile cross-platform application with Ruby 26
MyApp
app
loading.png
helpers
Settings
index.erb
layout.erb
application.rb
loading.html
public
icon
rhoconfig.txt
AndroidManifest.erb
build.yml
Rakefile
resources
ios
android
erb template for all pages (can be overriden in each controller)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head> <title>MyApp</title> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"/>
loading of CSS and JS ...
</head>
<body data-platform="<%= Rho::System.getProperty('platform') %>"><%= @content %></body>
</html> framework places generated page content here
![Page 27: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/27.jpg)
11. How it works. Mobile cross-platform application with Ruby 27
MyApp
app
loading.png
helpers
Settings
index.erb
layout.erb
application.rb
loading.html
public
icon
rhoconfig.txt
AndroidManifest.erb
build.yml
Rakefile
resources
ios
android
application class code - activation, deactivation etc.
require 'rho/rhoapplication'
class AppApplication < Rho::RhoApplication def initialize # Tab items are loaded left->right, @tabs[0] is leftmost tab in the tab-bar # Super must be called *after* settings @tabs! @tabs = nil #To remove default toolbar uncomment next line: #@@toolbar = nil super end
end
![Page 28: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/28.jpg)
11. How it works. Mobile cross-platform application with Ruby 28
MyApp
app
loading.png
helpers
Settings
index.erb
layout.erb
application.rb
loading.html
public
icon
rhoconfig.txt
AndroidManifest.erb
build.yml
Rakefile
resources
ios
android
folder with static files of local HTTP server: CSS, JS, images etc.
public
css
images
jqmobile
jquery
js
![Page 29: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/29.jpg)
11. How it works. Mobile cross-platform application with Ruby 29
MyApp
app
loading.png
helpers
Settings
index.erb
layout.erb
application.rb
loading.html
public
icon
rhoconfig.txt
AndroidManifest.erb
build.yml
Rakefile
resources
ios
android
folder with resources used for application build: icon, splash image, iTunes image etc.
See details in documentation:
http://docs.tau-technologies.com/en/6.0/guide/app_icon_splash
http://docs.tau-technologies.com/en/6.0/guide/build_ios
![Page 30: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/30.jpg)
11. How it works. Mobile cross-platform application with Ruby 30
MyApp
app
loading.png
helpers
Settings
index.erb
layout.erb
application.rb
loading.html
public
icon
rhoconfig.txt
AndroidManifest.erb
build.yml
Rakefile
resources
ios
android
application’s configuration - used in run-time
# startup page for your applicationstart_path = '/app'
options_path = '/app/Settings'
# Rhodes log propertiesMinSeverity = 1LogToOutput = 1MaxLogFileSize=50000logserver = 'http://rhologs.heroku.com'logname='MyApp'
syncserver = ''sync_poll_interval=0
...
![Page 31: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/31.jpg)
11. How it works. Mobile cross-platform application with Ruby 31
MyApp
app
loading.png
helpers
Settings
index.erb
layout.erb
application.rb
loading.html
public
icon
rhoconfig.txt
AndroidManifest.erb
build.yml
Rakefile
resources
ios
android
template for application’s Android manifest.See details: http://docs.tau-technologies.com/en/6.0/guide/build_android
![Page 32: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/32.jpg)
11. How it works. Mobile cross-platform application with Ruby 32
MyApp
app
loading.png
helpers
Settings
index.erb
layout.erb
application.rb
loading.html
public
icon
rhoconfig.txt
AndroidManifest.erb
build.yml
Rakefile
resources
ios
android
Build configuration - settings used for application building, enable/disable capabilities, link extensions etc.
name: MyAppversion: 1.0vendor: rhomobilebuild: debugapplog: rholog.txt
capabilities: - camera
iphone: configuration: Release sdk: latest BundleIdentifier: com.rhomobile.myapp BundleURLScheme: myapp
android: version: 4.1.0 logcatFilter: APP:I StrictMode:I DEBUG:I *:E
extensions: []
![Page 33: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/33.jpg)
11. How it works. Mobile cross-platform application with Ruby 33
MyApp
app
loading.png
helpers
Settings
index.erb
layout.erb
application.rb
loading.html
public
icon
rhoconfig.txt
AndroidManifest.erb
build.yml
Rakefile
resources
ios
android
Standard Ruby script for rake commands (build, run, etc.)
![Page 34: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/34.jpg)
11. How it works. Mobile cross-platform application with Ruby 34
Let’s add simple DB model to our application - Rhodes generator makes model Ruby file and set of views (erb files) for view, edit, delete etc.(details: http://docs.tau-technologies.com/en/6.0/guide/rhom_ruby)
Run Rhodes generator from application’s folder :
$ rhodes model Product name,brand,price
![Page 35: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/35.jpg)
11. How it works. Mobile cross-platform application with Ruby 35
MyApp
app
Product
product.rb
product_controller.rb
index.erb
show.erb
new.erb
You can see some new content in app folder: Product folder with set of files
edit.erb
![Page 36: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/36.jpg)
11. How it works. Mobile cross-platform application with Ruby 36
MyApp
app
Product
product.rb
product_controller.rb
index.erb
show.erb
new.erb
This file contains model definition code. PropertyBag scheme is used by default.
edit.erb
# The model has already been created by the framework, and extends Rhom::RhomObject# You can add more methods hereclass Product include Rhom::PropertyBag
# Uncomment the following line to enable sync with Product. # enable :sync
#add model specific code hereend
![Page 37: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/37.jpg)
11. How it works. Mobile cross-platform application with Ruby 37
MyApp
app
Product
product.rb
product_controller.rb
index.erb
show.erb
new.erb
product_controller.rb - Ruby code for controller class.Contoller’s methods are called from WebView by URL like /app/Controller/method and return HTML page generated from erb template named method.erb by default ( can be overridden by controller’s code ).If method is not exists then simple content generation used by erb template.
edit.erb
require 'rho/rhocontroller'require 'helpers/browser_helper'
class ProductController < Rho::RhoController include BrowserHelper
def index @products = Product.find(:all) render :back => '/app' end
def edit @product = Product.find(@params['id']) if @product render :action => :edit, :back => url_for(:action => :index) else redirect :action => :index end end
…
Find all object from Product model
@params - hash with all parameters of request (query part of URL)
![Page 38: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/38.jpg)
11. How it works. Mobile cross-platform application with Ruby 38
MyApp
app
Product
product.rb
product_controller.rb
index.erb
show.erb
new.erb
edit.erb
set of views - erb templates to generate main model access pages.index.erb is default page. Controller’s index functions also executed by default, when local server answer request like /app/Controller/
<div class="container-fluid">
<div class="row page-title">… </div>
<div class="row"> <div class="list-group"> <% @products.each do |product| %> <a href="<%= url_for :action => :show, :id => product.object %>" class="list-group-item"> <span class="glyphicon glyphicon-chevron-right pull-right" aria-hidden="true"></span> <%= product.name %> </a> <% end %> </div> </div>
</div>
enumerate all objects from model and make HTML list with links to view each object
![Page 39: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/39.jpg)
11. How it works. Mobile cross-platform application with Ruby 39
FInal change - modify our application start URL in rhoconfig.txt to Product page:
# startup page for your applicationstart_path = '/app/Product'
![Page 40: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/40.jpg)
11. How it works. Mobile cross-platform application with Ruby 40
Let’s run our application on iPhone Simulator:
Also you can generate XCode project and use XCode for build/run etc.Generate XCode project :
Generated XCode project located in:
Details: http://docs.tau-technologies.com/en/6.0/guide/build_ios
$ rake run:iphone
$ rake rake build:iphone:setup_xcode_project
MyApp
project
iphone
MyApp.xcodeproj
![Page 41: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/41.jpg)
11. How it works. Mobile cross-platform application with Ruby 41
Run application on Android Emulator:
Build and run application on USB-linked Android device :
Details: http://docs.tau-technologies.com/en/6.0/guide/build_android
$ rake run:android
$ rake run:android:device
![Page 42: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/42.jpg)
11. How it works. Mobile cross-platform application with Ruby 42
Application’s screenshots:
![Page 43: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/43.jpg)
12. How it works. Mobile cross-platform application with Node.js 43
название JXCore
разработчик Nubisa (прекращено)
тип Node.js порт
исходный код full
доступность
сайт https://github.com/jxcore/jxcore
Платформа
название Thali
разработчик Thali (спонсирует Microsoft)
тип гибридный (Cordova +JXCore)
исходный код full
доступность
сайт http://thaliproject.org/
Платформа
Rhodes use jxCore Node.js port for iOS and Android platforms.JXCore - already closed project. Currently still alive fork - Thali Project (sponsored by Microsoft)JXCore FAQ: http://www.goland.org/jxcore/Also jxCore has Cordova plugin: https://github.com/jxcore/jxcore-cordova
![Page 44: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/44.jpg)
12. How it works. Mobile cross-platform application with Node.js 44
Let’s make our application with Node.js: (see details: http://docs.tau-technologies.com/en/6.0/guide/creating_a_project) :
rhodes - command line tool for generating :applications, models, extension. Generated code is fully workable and can be built and run.
$ rhodes nodejsapp MyApp
![Page 45: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/45.jpg)
12. How it works. Mobile cross-platform application with Node.js 45
MyApp
nodejs
server
app.js
package.json
build.yml
rhoconfig.txt
AndroidManifest.erb
Rakefile
publicbootstrap-3.3.7
imagesjquery
main.js
rhoapp.js
resources
ios
android
We get MyApp folder with application’s code, resources etc.
![Page 46: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/46.jpg)
12. How it works. Mobile cross-platform application with Node.js 46
MyApp
nodejs
server
app.js
package.json
build.yml
rhoconfig.txt
AndroidManifest.erb
Rakefile
publicbootstrap-3.3.7
imagesjquery
main.js
rhoapp.js
resources
ios
android
This folder contains Node.js application main files and additional files
![Page 47: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/47.jpg)
12. How it works. Mobile cross-platform application with Node.js 47
MyApp
nodejs
server
app.js
package.json
build.yml
rhoconfig.txt
AndroidManifest.erb
Rakefile
publicbootstrap-3.3.7
imagesjquery
main.js
rhoapp.js
resources
ios
android
This folder contains Node.js application filesThis folder is also root folder of local Node.js HTTP server
![Page 48: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/48.jpg)
12. How it works. Mobile cross-platform application with Node.js 48
MyApp
nodejs
server
app.js
package.json
build.yml
rhoconfig.txt
AndroidManifest.erb
Rakefile
publicbootstrap-3.3.7
imagesjquery
main.js
rhoapp.js
resources
ios
android
This folder contains static files of local Node.js HTTP server - CSS, JS, images etc.
At build time an ‘api’ folder will be added here with Rhodes API JS files.
![Page 49: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/49.jpg)
12. How it works. Mobile cross-platform application with Node.js 49
MyApp
nodejs
server
app.js
package.json
build.yml
rhoconfig.txt
AndroidManifest.erb
Rakefile
publicbootstrap-3.3.7
imagesjquery
main.js
rhoapp.js
resources
ios
android
app.js main file of Node.js application - this file will be executed on start. Developer should start local HTTP server with predefined port here and call notify of Rhodes API.
var server_port = Rho.System.NodejsServerPort
var path = require('path');var express = require('express');var app = express();
app.use('/public', express.static(path.join(__dirname, 'public')));
app.get('/', function (req, res) { res.send('Hello World! (' + Date.now() + ")");});
var server = app.listen(server_port, function () { Rho.Log.info("Express server is started. (port: "+server_port+")", "Node.js JS"); // application must be inform RHomobile platform about starting of http server ! Mobile.httpServerStarted();});
![Page 50: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/50.jpg)
12. How it works. Mobile cross-platform application with Node.js 50
MyApp
nodejs
server
app.js
package.json
build.yml
rhoconfig.txt
AndroidManifest.erb
Rakefile
publicbootstrap-3.3.7
imagesjquery
main.js
rhoapp.js
resources
ios
android
package.json - file with Node.js application’s main properties. Same with usual Node.js application.Contains all used modules.
{ "name": "rhonodejsapplication", "version": "0.0.1", "private": true, "dependencies": { "express": "*" }}
![Page 51: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/51.jpg)
12. How it works. Mobile cross-platform application with Node.js 51
MyApp
nodejs
server
app.js
package.json
build.yml
rhoconfig.txt
AndroidManifest.erb
Rakefile
publicbootstrap-3.3.7
imagesjquery
main.js
rhoapp.js
resources
ios
android
main.js - core init code, also includes init of Rhodes API.Developer must not change this file!
![Page 52: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/52.jpg)
12. How it works. Mobile cross-platform application with Node.js 52
MyApp
nodejs
server
app.js
package.json
build.yml
rhoconfig.txt
AndroidManifest.erb
Rakefile
publicbootstrap-3.3.7
imagesjquery
main.js
rhoapp.js
resources
ios
android
rhoapp.js - this file is executed during application initialisation. By default contains code for setup of main application’s event processing - activate, deactivate etc. Developer can change this file.Below you can see part of code where we make Native Toolbar in our application when application is activated (it is native platform Toolbar)
…
function onRhomobileApplicationActivated() { Rho.Log.info("Node.js event : APP_EVENT_ACTIVATED", "Node.js JS App");
var native_toolbar = [ {"action": "back", "icon": "/nodejs/server/public/images/bar/back_btn.png"}, {"action": "separator"}, {"action": "home", "icon": "/nodejs/server/images/bar/home_btn.png"}, {"action": "refresh"}, {"action": "options", "icon": "/nodejs/server/images/bar/gears.png"} ]; Rho.NativeToolbar.create(native_toolbar);}
...
![Page 53: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/53.jpg)
12. How it works. Mobile cross-platform application with Node.js 53
MyApp
nodejs
server
app.js
package.json
build.yml
rhoconfig.txt
AndroidManifest.erb
Rakefile
publicbootstrap-3.3.7
imagesjquery
main.js
rhoapp.js
resources
ios
android
folder with resources used for application building: icon, splash image, iTunes image etc.
See details in documentation:
http://docs.tau-technologies.com/en/6.0/guide/app_icon_splash
http://docs.tau-technologies.com/en/6.0/guide/build_ios
![Page 54: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/54.jpg)
12. How it works. Mobile cross-platform application with Node.js 54
MyApp
nodejs
server
app.js
package.json
build.yml
rhoconfig.txt
AndroidManifest.erb
Rakefile
publicbootstrap-3.3.7
imagesjquery
main.js
rhoapp.js
resources
ios
android
build.yml - application’s build config
![Page 55: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/55.jpg)
12. How it works. Mobile cross-platform application with Node.js 55
MyApp
nodejs
server
app.js
package.json
build.yml
rhoconfig.txt
AndroidManifest.erb
Rakefile
publicbootstrap-3.3.7
imagesjquery
main.js
rhoapp.js
resources
ios
android
application’s runtime configuration
# startup page for your applicationstart_path = '/'
options_path = '/app/Settings'
# Rhodes log propertiesMinSeverity = 1LogToOutput = 1MaxLogFileSize=50000logserver = 'http://rhologs.heroku.com'logname='MyApp'
syncserver = ''sync_poll_interval=0
...
![Page 56: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/56.jpg)
12. How it works. Mobile cross-platform application with Node.js 56
MyApp
nodejs
server
app.js
package.json
build.yml
rhoconfig.txt
AndroidManifest.erb
Rakefile
publicbootstrap-3.3.7
imagesjquery
main.js
rhoapp.js
resources
ios
android
template for application’s Android manifest.See details: http://docs.tau-technologies.com/en/6.0/guide/build_android
![Page 57: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/57.jpg)
12. How it works. Mobile cross-platform application with Node.js 57
MyApp
nodejs
server
app.js
package.json
build.yml
rhoconfig.txt
AndroidManifest.erb
Rakefile
publicbootstrap-3.3.7
imagesjquery
main.js
rhoapp.js
resources
ios
android
Standard Ruby script for rake commands (build, run, etc.)
![Page 58: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/58.jpg)
12. How it works. Mobile cross-platform application with Node.js 58
You should install node modules before building application.We should do the same with usual Node.js app - go to nodejs/server folder and run standard command :
After this command is done you can see new folder node_modules with all Node.js modules used.
MyApp
nodejs
server
app.js
package.json
publicbootstrap-3.3.7
imagesjquery
main.js
rhoapp.js
node_modulesexpress
...jade
$ npm install
![Page 59: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/59.jpg)
12. How it works. Mobile cross-platform application with Node.js 59
Let’s run our application on iPhone Simulator:
Also you can generate XCode project and use XCode for build/run etc.Generate XCode project :
Generated XCode project located in:
Details: http://docs.tau-technologies.com/en/6.0/guide/build_ios
$ rake run:iphone
$ rake rake build:iphone:setup_xcode_project
MyApp
project
iphone
MyApp.xcodeproj
![Page 60: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/60.jpg)
12. How it works. Mobile cross-platform application with Node.js 60
Run application on Android Emulator:
Build and run application on linked via USB Android device :
Details: http://docs.tau-technologies.com/en/6.0/guide/build_android
$ rake run:android
$ rake run:android:device
![Page 61: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/61.jpg)
12. How it works. Mobile cross-platform application with Node.js 61
Source code - https://github.com/tauplatform/NodeJSApp
In run time configuration file rhoconfig.txt we define start URL:/public/index.htmlthis is URL on our local HTTP server, started in /app.js
So in our application’s WebView following URL will be opened: http://127.0.0.1:port/public/index.html
NodeJSApp
nodejs
server
app.jspackage.json
build.yml
rhoconfig.txt
AndroidManifest.erb
Rakefile
publicbootstrap-3.3.7
imagesjquery
main.js
rhoapp.js
resources
ios
android
index.html
# startup page for your applicationstart_path = '/public/index.html'
...
Simple example - NodeJSApp
![Page 62: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/62.jpg)
12. How it works. Mobile cross-platform application with Node.js 62
Simple example - NodeJSApp
Source code - https://github.com/tauplatform/NodeJSApp
In main Node.js application file (app.js) we register global function, where we write some into application’s log and execute some Javascript code in application’s WebView:
NodeJSApp
nodejs
server
app.js
package.json
build.yml
rhoconfig.txt
AndroidManifest.erb
Rakefile
publicbootstrap-3.3.7
imagesjquery
main.js
rhoapp.js
resources
ios
android
index.html
…
global.myfunc = function() { Rho.Log.info("$$$$$$$$$$$$$$$$$ RUN NODEJS CODE !!!", 'Node.js JS'); Rho.WebView.executeJavascript("showAlert();");};
...
![Page 63: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/63.jpg)
12. How it works. Mobile cross-platform application with Node.js 63
Simple example - NodeJSApp
Source code - https://github.com/tauplatform/NodeJSApp
onExecuteNodejsCode() is called on button press
showAlert() will be called from Node.js code via Rhodes API - Rho.WebView.executeJavascript()
When user presses button :1. JS code is executed from WebView, and this function invokes JS code
in Node.js context via Rhodes API - Rho.Nodejs.executeJavascript()2. Our JS code in Node.js context will execute JS code in WebView and
we will see Alert.
NodeJSApp
nodejs
server
app.js
package.json
build.yml
rhoconfig.txt
AndroidManifest.erb
Rakefile
publicbootstrap-3.3.7
imagesjquery
main.js
rhoapp.js
resources
ios
android
index.html
<script type="text/javascript">
function onExecuteNodejsCode() { Rho.Nodejs.executeJavascript("myfunc();");}
function showAlert() { alert("Alert !!!");}
</script>
![Page 64: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/64.jpg)
12. How it works. Mobile cross-platform application with Node.js 64
Complex example - todo-nodejs
Source code - https://github.com/tauplatform/todo-nodejs
This is complex example of Node.js application - todo list of tasksUses following components:
● express (Node.js web framework)● bootstrap (CSS)● hbs (Express.js view engine for handlebars.js)● sequelize (Node.js ORM)● sqlite3 (DB)
![Page 65: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/65.jpg)
12. Examples of real applications based on RhoMobile solution 65
![Page 66: October 2017, St. Petersburg - Tau Technologiesfiles.tau-technologies.com/Events/2017_10_21_CEE_SECR/TAU... · October 2017, St. Petersburg ... (like Cordova), and also use Ruby in](https://reader031.vdocument.in/reader031/viewer/2022022520/5b1c94507f8b9af2348bce34/html5/thumbnails/66.jpg)
13. How choose solution for development - Tau Quadrant 66
Platform typeServer code based on
.NET Java Ruby Javascript
iOS,Android
lightweight Cordova/PhoneGap Cordova/PhoneGap Cordova/PhoneGap,Rhodes Cordova/PhoneGap
big Xamarin Xamarin,Codename One Rhodes
Appcelerator,Native Script/Telerik,React Native,Kony
WinCE,WMandiOS,Android
Extended Browser is enough
Rhodes BrowserZebra Enterprise Browser (only for Zebra)
Rhodes BrowserZebra Enterprise Browser (only for Zebra)
Rhodes BrowserZebra Enterprise Browser (only for Zebra)
Rhodes BrowserZebra Enterprise Browser (only for Zebra)
lightweight or big one Rhodes Rhodes Rhodes Rhodes