SlideShare a Scribd company logo
1 of 21
Download to read offline
* 
* 
* Who Am I?
* What is Cordova?
* What are Hooks?
* What are Hooks written in?
* What problems do they solve?
* What Hooks do I use?
* Demo – Hooks in Action
* Q&A
* Resources
* 
* Gavin Pickin – developing Web Apps since late 90s
* What else do you need to know?
* Blog - http://www.gpickin.com
* Twitter – http://twitter.com/gpickin
* Lets get on with the show.
* 
* Apache Cordova is a set of device APIs that allow a
mobile app developer to access native device
function such as the camera or accelerometer from
JavaScript.
* Combined with a UI framework such as jQuery
Mobile or Dojo Mobile or Sencha Touch, this allows
a smartphone app to be developed with just HTML,
CSS, and JavaScript.
* http://cordova.apache.org/#about
* 
* And because these JavaScript APIs are consistent
across multiple device platforms and built on web
standards, the app should be portable to other
device platforms with minimal to no changes.
* In 2011 Adobe / Nitobi donated the phonegap
codebase to Apache Software Foundation to be
managed as an Opensource project. It was
eventually renamed Cordova.
* http://phonegap.com/2012/03/19/phonegap-cordova-
and-what%E2%80%99s-in-a-name/
* 
* Cordova includes a CLI that runs on NodeJS, to
help you compile your project for different
deployment platforms.
* Phonegap Build is one service that allows you to
build Apps without system dependent tools like
Xcode (iOS)
* 
* Hooks are scripts that execute when special events
are emitted from the plugin, or build process.
* There are a lot of hooks you can use, below is a
sample
* after_build / before_build
* After_platform_add / before_platform_add
* After_prepare / before_prepare
* A full list of hooks can be found here
https://github.com/apache/cordova-lib/blob/master/
cordova-lib/templates/hooks-README.md
* 
* Developing for multiple platforms is easier with
Cordova, but there are a lot of repetitive tasks, or
build steps that you can automate
* Using Hooks you can simply build your own Build
Process using the framework provided to you.
* They can make you a more efficient developer.
* 
* Hooks can be written in any programming language
* BUT – Cordova highly recommends writing hooks in
NodeJS to ensure the hook are cross platform.
Since the Cordova CLI is written in NodeJS, they
will always work.
* Since your hooks will be NodeJS, you can use the
power of NPM to help yu write them.
* 
* The most common way is to place the script in
the /hooks/{event_name}/ folder
* Files are executed in their alphabetical order.
Since Windows and *nix systems treat aG and ag
differently, I recommend prefixing with 001_ etc.
* You can also define Application hooks in config.xml
* You can define Plugin hooks from
/plugins/…/plugin.xml
* 
<hook type="before_build" src="scripts/appBeforeBuild.bat" />
<hook type="before_build" src="scripts/appBeforeBuild.js" />
<hook type="before_plugin_install" src="scripts/appBeforePluginInstall.js" />
<platform name="wp8">
<hook type="before_build" src="scripts/wp8/appWP8BeforeBuild.bat" />
<hook type="before_build" src="scripts/wp8/appWP8BeforeBuild.js" />
<hook type="before_plugin_install" src="scripts/wp8/appWP8BeforePluginInstall.js" />
</platform>
<platform name="windows8">
<hook type="before_build" src="scripts/windows8/appWin8BeforeBuild.bat" />
<hook type="before_build" src="scripts/windows8/appWin8BeforeBuild.js" />
<hook type="before_plugin_install" src="scripts/windows8/
appWin8BeforePluginInstall.js" />
</platform>
https://github.com/apache/cordova-lib/blob/master/cordova-lib/templates/hooks-README.md
* 
<hook type="before_plugin_install" src="scripts/beforeInstall.js" />
<hook type="after_build" src="scripts/afterBuild.js" />
<platform name="wp8">
<hook type="before_plugin_install" src="scripts/
wp8BeforeInstall.js" />
<hook type="before_build" src="scripts/wp8BeforeBuild.js" />
</platform>
* 
* Being new to NodeJS most of the hooks I use
currently are ones I have found online… with minor
tweaks.
* JS Hint Hook
* Cordova Uglify
* Work In Progress
* Jasmine for Unit Testing
* Hook for Splash and Icon Creation
* 
* JSHint is a community-driven tool to detect errors
and potential problems in JavaScript code and to
enforce your team's coding conventions. It is very
flexible so you can easily adjust it to your
particular coding guidelines and the environment
you expect your code to execute in. JSHint is open
source and will always stay this way.
* http://jshint.com/about/
* Hook - https://gist.github.com/gpickin/
04a7acfc4907f3ed27f6
* 
* Cordova hook that allows you to uglify or minify
your apps JavaScript and CSS. It is using UglifyJS2
for JavaScript compression and clean-css to minify
CSS.
* Install from NPM - npm install cordova-uglify
* https://github.com/rossmartin/cordova-uglify
* Hook - https://gist.github.com/gpickin/
f23a4980b5359ba570b1
* 
* Let me show you how the JS Hint Hook will help
save you time testing an app on a device with
errors in your code.
https://gist.github.com/gpickin/04a7acfc4907f3ed27f6
* Let me show you how to use Cordova Uglify Hook
for when your building to send to the app store.
https://gist.github.com/gpickin/f23a4980b5359ba570b1
* 
$ cordova build ios
Running command: /Users/gavinpickin/Dropbox/Apps/cstctraining/hooks/
before_prepare/02_jshint.js /Users/gavinpickin/Dropbox/Apps/cstctraining
Linting www/js/services/attendeeDAO.js
Linting www/js/index.js
File www/js/services/attendeeDAO.js has no errors.
-----------------------------------------
Linting www/js/services/attendeeService.js
File www/js/index.js has no errors.
-----------------------------------------
File www/js/services/attendeeService.js has no errors.
-----------------------------------------
Linting www/js/services/attendeeSyncService.js
File www/js/services/attendeeSyncService.js has no errors.
-----------------------------------------
Linting www/js/services/auditDAO.js
File www/js/services/auditDAO.js has no errors.
* 
$ cordova build ios
Running command: /Users/gavinpickin/Dropbox/Apps/cstctraining/hooks/
before_prepare/02_jshint.js /Users/gavinpickin/Dropbox/Apps/cstctraining
Linting www/js/services/attendeeDAO.js
Linting www/js/index.js
Errors in file www/js/services/attendeeDAO.js
1:1 -> Expected an assignment or function call and instead saw an expression. ->
funct ion newAttendeeDAO() {
1:6 -> Missing semicolon. -> funct ion newAttendeeDAO() {
1:7 -> Expected an assignment or function call and instead saw an expression. ->
funct ion newAttendeeDAO() {
1:10 -> Missing semicolon. -> funct ion newAttendeeDAO() {
1:27 -> Missing semicolon. -> funct ion newAttendeeDAO() {
-----------------------------------------
File www/js/index.js has no errors.
* 
Running command: /Users/gavinpickin/Dropbox/Apps/cstctraining/hooks/
after_prepare/uglify.js /Users/gavinpickin/Dropbox/Apps/cstctraining
cordova-uglify will always run by default, uncomment the line checking for the
release flag otherwise
uglifying js file /Users/gavinpickin/Dropbox/Apps/cstctraining/platforms/ios/
www/js/index.js
minifying css file /Users/gavinpickin/Dropbox/Apps/cstctraining/platforms/ios/
www/css/index.css
minifying css file /Users/gavinpickin/Dropbox/Apps/cstctraining/platforms/ios/
www/css/jquery.mobile-1.4.2.min.css
minifying css file /Users/gavinpickin/Dropbox/Apps/cstctraining/platforms/ios/
www/css/jquery.mobile.external-png-1.4.2.min.css
minifying css file /Users/gavinpickin/Dropbox/Apps/cstctraining/platforms/ios/
www/css/jquery.mobile.icons-1.4.2.min.css
encountered a .png file, not compressing it
encountered a .svg file, not compressing it
* 
* Any questions?
* Any recommendations for improving this talk?
* 
* Copy Icons / Splashscreens, Replace Text
Depending on Environment, Add Plugins
Source: Holly Schinsky – DevGirl – Adobe Evangelist
http://devgirl.org/2013/11/12/three-hooks-your-
cordovaphonegap-project-needs/
* JS Hint, Cordova Uglify
Source: Nic Raboy
http://ionicframework.com/blog/minifying-your-source-code/
* Dan Moore - Hooks and Cordova
http://www.mooreds.com/wordpress/archives/1197

More Related Content

What's hot

VCCW - Vagrant based WordPress development environment
VCCW - Vagrant based WordPress development environmentVCCW - Vagrant based WordPress development environment
VCCW - Vagrant based WordPress development environment
Takayuki Miyauchi
 

What's hot (19)

DevAssistant, Docker and You
DevAssistant, Docker and YouDevAssistant, Docker and You
DevAssistant, Docker and You
 
Bower & Grunt - A practical workflow
Bower & Grunt - A practical workflowBower & Grunt - A practical workflow
Bower & Grunt - A practical workflow
 
VCCW - Vagrant based WordPress development environment
VCCW - Vagrant based WordPress development environmentVCCW - Vagrant based WordPress development environment
VCCW - Vagrant based WordPress development environment
 
Cross-platform Desktop application with AngularJS and build with Node-webkit
Cross-platform Desktop application with AngularJS and build with Node-webkitCross-platform Desktop application with AngularJS and build with Node-webkit
Cross-platform Desktop application with AngularJS and build with Node-webkit
 
Webpack: from 0 to 2
Webpack: from 0 to 2Webpack: from 0 to 2
Webpack: from 0 to 2
 
node-webkit : Make a magic from your a desktop app to desktop app!
node-webkit : Make a magic from your a desktop app to desktop app!node-webkit : Make a magic from your a desktop app to desktop app!
node-webkit : Make a magic from your a desktop app to desktop app!
 
Hack Rio/OS
Hack Rio/OSHack Rio/OS
Hack Rio/OS
 
Node.js with Express
Node.js with ExpressNode.js with Express
Node.js with Express
 
Node js
Node jsNode js
Node js
 
Spring IO '15 - Developing microservices, Spring Boot or Grails?
Spring IO '15 - Developing microservices, Spring Boot or Grails?Spring IO '15 - Developing microservices, Spring Boot or Grails?
Spring IO '15 - Developing microservices, Spring Boot or Grails?
 
Getting started with .net on openSUSE (asp.net with c#)
Getting started with .net on openSUSE  (asp.net with c#)Getting started with .net on openSUSE  (asp.net with c#)
Getting started with .net on openSUSE (asp.net with c#)
 
HTML5 for dummies
HTML5 for dummiesHTML5 for dummies
HTML5 for dummies
 
Introduction to Express and Grunt
Introduction to Express and GruntIntroduction to Express and Grunt
Introduction to Express and Grunt
 
React Native Expo
React Native ExpoReact Native Expo
React Native Expo
 
"Will Git Be Around Forever? A List of Possible Successors" at UtrechtJUG
"Will Git Be Around Forever? A List of Possible Successors" at UtrechtJUG"Will Git Be Around Forever? A List of Possible Successors" at UtrechtJUG
"Will Git Be Around Forever? A List of Possible Successors" at UtrechtJUG
 
WebSocket on client & server using websocket-sharp & ASP.NET Core
WebSocket on client & server using websocket-sharp & ASP.NET CoreWebSocket on client & server using websocket-sharp & ASP.NET Core
WebSocket on client & server using websocket-sharp & ASP.NET Core
 
Web pack and friends
Web pack and friendsWeb pack and friends
Web pack and friends
 
Pluggable web app using Angular (Odessa JS conf)
Pluggable web app using Angular (Odessa JS conf)Pluggable web app using Angular (Odessa JS conf)
Pluggable web app using Angular (Odessa JS conf)
 
ITB2019 CommandBox vs Node.js - Nolan Erck
ITB2019  CommandBox vs Node.js - Nolan ErckITB2019  CommandBox vs Node.js - Nolan Erck
ITB2019 CommandBox vs Node.js - Nolan Erck
 

Viewers also liked

Viewers also liked (9)

Writing a phone gap or cordova plugin to install it by command line
Writing a phone gap or cordova plugin to install it by command lineWriting a phone gap or cordova plugin to install it by command line
Writing a phone gap or cordova plugin to install it by command line
 
Building Mobile Application Using PhoneGap
Building Mobile Application Using PhoneGapBuilding Mobile Application Using PhoneGap
Building Mobile Application Using PhoneGap
 
Native Apps vs. Mobile Web: Pros & Cons
Native Apps vs. Mobile Web: Pros & ConsNative Apps vs. Mobile Web: Pros & Cons
Native Apps vs. Mobile Web: Pros & Cons
 
Rapid App Development for PhoneGap
Rapid App Development for PhoneGapRapid App Development for PhoneGap
Rapid App Development for PhoneGap
 
Intro to PhoneGap and PhoneGap Build
Intro to PhoneGap and PhoneGap BuildIntro to PhoneGap and PhoneGap Build
Intro to PhoneGap and PhoneGap Build
 
PHONE GAP
PHONE GAPPHONE GAP
PHONE GAP
 
Phone gap android plugins
Phone gap android pluginsPhone gap android plugins
Phone gap android plugins
 
Open Source Vs Proprietary Software
Open Source Vs  Proprietary SoftwareOpen Source Vs  Proprietary Software
Open Source Vs Proprietary Software
 
SQLcl overview - A new Command Line Interface for Oracle Database
SQLcl overview - A new Command Line Interface for Oracle DatabaseSQLcl overview - A new Command Line Interface for Oracle Database
SQLcl overview - A new Command Line Interface for Oracle Database
 

Similar to Getting your Hooks into Cordova

App開發 - Web Developer的逆襲
App開發 - Web Developer的逆襲App開發 - Web Developer的逆襲
App開發 - Web Developer的逆襲
益祥 許
 

Similar to Getting your Hooks into Cordova (20)

GDGSCL - Docker a jeho provoz v Heroku a AWS
GDGSCL - Docker a jeho provoz v Heroku a AWSGDGSCL - Docker a jeho provoz v Heroku a AWS
GDGSCL - Docker a jeho provoz v Heroku a AWS
 
Phonegap android angualr material design
Phonegap android angualr material designPhonegap android angualr material design
Phonegap android angualr material design
 
Angularjs Tutorial for Beginners
Angularjs Tutorial for BeginnersAngularjs Tutorial for Beginners
Angularjs Tutorial for Beginners
 
Intro to PhoneGap
Intro to PhoneGapIntro to PhoneGap
Intro to PhoneGap
 
Mobile development in 2020
Mobile development in 2020 Mobile development in 2020
Mobile development in 2020
 
OpenMIC March-2012.phonegap
OpenMIC March-2012.phonegapOpenMIC March-2012.phonegap
OpenMIC March-2012.phonegap
 
NCDevCon 2017 - Cross Platform Mobile Apps
NCDevCon 2017 - Cross Platform Mobile AppsNCDevCon 2017 - Cross Platform Mobile Apps
NCDevCon 2017 - Cross Platform Mobile Apps
 
Building an Ionic hybrid mobile app with TypeScript
Building an Ionic hybrid mobile app with TypeScript Building an Ionic hybrid mobile app with TypeScript
Building an Ionic hybrid mobile app with TypeScript
 
Tutorial: Develop Mobile Applications with AngularJS
Tutorial: Develop Mobile Applications with AngularJSTutorial: Develop Mobile Applications with AngularJS
Tutorial: Develop Mobile Applications with AngularJS
 
Cordova iOS Native Plugin Development
Cordova iOS Native Plugin DevelopmentCordova iOS Native Plugin Development
Cordova iOS Native Plugin Development
 
OSDC.no 2015 introduction to node.js workshop
OSDC.no 2015 introduction to node.js workshopOSDC.no 2015 introduction to node.js workshop
OSDC.no 2015 introduction to node.js workshop
 
Workshop on Hybrid App Development with Ionic Framework
Workshop on Hybrid App Development with Ionic FrameworkWorkshop on Hybrid App Development with Ionic Framework
Workshop on Hybrid App Development with Ionic Framework
 
Hybrid app development frameworks
Hybrid app development frameworksHybrid app development frameworks
Hybrid app development frameworks
 
Multi-stage Docker builds to make building easy!
Multi-stage Docker builds to make building easy!Multi-stage Docker builds to make building easy!
Multi-stage Docker builds to make building easy!
 
Ionic - Revolutionizing Hybrid Mobile Application Development
Ionic - Revolutionizing Hybrid Mobile Application DevelopmentIonic - Revolutionizing Hybrid Mobile Application Development
Ionic - Revolutionizing Hybrid Mobile Application Development
 
App開發 - Web Developer的逆襲
App開發 - Web Developer的逆襲App開發 - Web Developer的逆襲
App開發 - Web Developer的逆襲
 
GDG-ANDROID-ATHENS Meetup: Build in Docker with Jenkins
GDG-ANDROID-ATHENS Meetup: Build in Docker with Jenkins GDG-ANDROID-ATHENS Meetup: Build in Docker with Jenkins
GDG-ANDROID-ATHENS Meetup: Build in Docker with Jenkins
 
Run your Appium tests using Docker Android - AppiumConf 2019
Run your Appium tests using Docker Android - AppiumConf 2019Run your Appium tests using Docker Android - AppiumConf 2019
Run your Appium tests using Docker Android - AppiumConf 2019
 
Getting started with the NDK
Getting started with the NDKGetting started with the NDK
Getting started with the NDK
 
Introduction to PhoneGap
Introduction to PhoneGapIntroduction to PhoneGap
Introduction to PhoneGap
 

More from Gavin Pickin

Setting up your Multi Engine Environment - Apache Railo and ColdFusion
Setting up your Multi Engine Environment - Apache Railo and ColdFusionSetting up your Multi Engine Environment - Apache Railo and ColdFusion
Setting up your Multi Engine Environment - Apache Railo and ColdFusion
Gavin Pickin
 

More from Gavin Pickin (12)

Itb 2021 - Bulding Quick APIs by Gavin Pickin
Itb 2021 - Bulding Quick APIs by Gavin PickinItb 2021 - Bulding Quick APIs by Gavin Pickin
Itb 2021 - Bulding Quick APIs by Gavin Pickin
 
Containerizing ContentBox CMS
Containerizing ContentBox CMSContainerizing ContentBox CMS
Containerizing ContentBox CMS
 
ColdBox APIs + VueJS - powering Mobile, Desktop and Web Apps with 1 VueJS cod...
ColdBox APIs + VueJS - powering Mobile, Desktop and Web Apps with 1 VueJS cod...ColdBox APIs + VueJS - powering Mobile, Desktop and Web Apps with 1 VueJS cod...
ColdBox APIs + VueJS - powering Mobile, Desktop and Web Apps with 1 VueJS cod...
 
AN EXERCISE IN CLEANER CODE - FROM LEGACY TO MAINTAINABLE
AN EXERCISE IN CLEANER CODE - FROM LEGACY TO MAINTAINABLEAN EXERCISE IN CLEANER CODE - FROM LEGACY TO MAINTAINABLE
AN EXERCISE IN CLEANER CODE - FROM LEGACY TO MAINTAINABLE
 
3 WAYS TO TEST YOUR COLDFUSION API
3 WAYS TO TEST YOUR COLDFUSION API3 WAYS TO TEST YOUR COLDFUSION API
3 WAYS TO TEST YOUR COLDFUSION API
 
Take home your very own free Vagrant CFML Dev Environment - Presented at dev....
Take home your very own free Vagrant CFML Dev Environment - Presented at dev....Take home your very own free Vagrant CFML Dev Environment - Presented at dev....
Take home your very own free Vagrant CFML Dev Environment - Presented at dev....
 
How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016
How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016
How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016
 
BDD Testing and Automating from the trenches - Presented at Into The Box June...
BDD Testing and Automating from the trenches - Presented at Into The Box June...BDD Testing and Automating from the trenches - Presented at Into The Box June...
BDD Testing and Automating from the trenches - Presented at Into The Box June...
 
How do I write Testable Javascript so I can Test my CF API on Server and Client
How do I write Testable Javascript so I can Test my CF API on Server and ClientHow do I write Testable Javascript so I can Test my CF API on Server and Client
How do I write Testable Javascript so I can Test my CF API on Server and Client
 
Just Mock It - Mocks and Stubs
Just Mock It - Mocks and StubsJust Mock It - Mocks and Stubs
Just Mock It - Mocks and Stubs
 
How do I write Testable Javascript?
How do I write Testable Javascript?How do I write Testable Javascript?
How do I write Testable Javascript?
 
Setting up your Multi Engine Environment - Apache Railo and ColdFusion
Setting up your Multi Engine Environment - Apache Railo and ColdFusionSetting up your Multi Engine Environment - Apache Railo and ColdFusion
Setting up your Multi Engine Environment - Apache Railo and ColdFusion
 

Recently uploaded

%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
masabamasaba
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
masabamasaba
 
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
masabamasaba
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
chiefasafspells
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
 

Recently uploaded (20)

WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
 
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
 
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go Platformless
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
 
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
 

Getting your Hooks into Cordova

  • 2. *  * Who Am I? * What is Cordova? * What are Hooks? * What are Hooks written in? * What problems do they solve? * What Hooks do I use? * Demo – Hooks in Action * Q&A * Resources
  • 3. *  * Gavin Pickin – developing Web Apps since late 90s * What else do you need to know? * Blog - http://www.gpickin.com * Twitter – http://twitter.com/gpickin * Lets get on with the show.
  • 4. *  * Apache Cordova is a set of device APIs that allow a mobile app developer to access native device function such as the camera or accelerometer from JavaScript. * Combined with a UI framework such as jQuery Mobile or Dojo Mobile or Sencha Touch, this allows a smartphone app to be developed with just HTML, CSS, and JavaScript. * http://cordova.apache.org/#about
  • 5. *  * And because these JavaScript APIs are consistent across multiple device platforms and built on web standards, the app should be portable to other device platforms with minimal to no changes. * In 2011 Adobe / Nitobi donated the phonegap codebase to Apache Software Foundation to be managed as an Opensource project. It was eventually renamed Cordova. * http://phonegap.com/2012/03/19/phonegap-cordova- and-what%E2%80%99s-in-a-name/
  • 6. *  * Cordova includes a CLI that runs on NodeJS, to help you compile your project for different deployment platforms. * Phonegap Build is one service that allows you to build Apps without system dependent tools like Xcode (iOS)
  • 7. *  * Hooks are scripts that execute when special events are emitted from the plugin, or build process. * There are a lot of hooks you can use, below is a sample * after_build / before_build * After_platform_add / before_platform_add * After_prepare / before_prepare * A full list of hooks can be found here https://github.com/apache/cordova-lib/blob/master/ cordova-lib/templates/hooks-README.md
  • 8. *  * Developing for multiple platforms is easier with Cordova, but there are a lot of repetitive tasks, or build steps that you can automate * Using Hooks you can simply build your own Build Process using the framework provided to you. * They can make you a more efficient developer.
  • 9. *  * Hooks can be written in any programming language * BUT – Cordova highly recommends writing hooks in NodeJS to ensure the hook are cross platform. Since the Cordova CLI is written in NodeJS, they will always work. * Since your hooks will be NodeJS, you can use the power of NPM to help yu write them.
  • 10. *  * The most common way is to place the script in the /hooks/{event_name}/ folder * Files are executed in their alphabetical order. Since Windows and *nix systems treat aG and ag differently, I recommend prefixing with 001_ etc. * You can also define Application hooks in config.xml * You can define Plugin hooks from /plugins/…/plugin.xml
  • 11. *  <hook type="before_build" src="scripts/appBeforeBuild.bat" /> <hook type="before_build" src="scripts/appBeforeBuild.js" /> <hook type="before_plugin_install" src="scripts/appBeforePluginInstall.js" /> <platform name="wp8"> <hook type="before_build" src="scripts/wp8/appWP8BeforeBuild.bat" /> <hook type="before_build" src="scripts/wp8/appWP8BeforeBuild.js" /> <hook type="before_plugin_install" src="scripts/wp8/appWP8BeforePluginInstall.js" /> </platform> <platform name="windows8"> <hook type="before_build" src="scripts/windows8/appWin8BeforeBuild.bat" /> <hook type="before_build" src="scripts/windows8/appWin8BeforeBuild.js" /> <hook type="before_plugin_install" src="scripts/windows8/ appWin8BeforePluginInstall.js" /> </platform> https://github.com/apache/cordova-lib/blob/master/cordova-lib/templates/hooks-README.md
  • 12. *  <hook type="before_plugin_install" src="scripts/beforeInstall.js" /> <hook type="after_build" src="scripts/afterBuild.js" /> <platform name="wp8"> <hook type="before_plugin_install" src="scripts/ wp8BeforeInstall.js" /> <hook type="before_build" src="scripts/wp8BeforeBuild.js" /> </platform>
  • 13. *  * Being new to NodeJS most of the hooks I use currently are ones I have found online… with minor tweaks. * JS Hint Hook * Cordova Uglify * Work In Progress * Jasmine for Unit Testing * Hook for Splash and Icon Creation
  • 14. *  * JSHint is a community-driven tool to detect errors and potential problems in JavaScript code and to enforce your team's coding conventions. It is very flexible so you can easily adjust it to your particular coding guidelines and the environment you expect your code to execute in. JSHint is open source and will always stay this way. * http://jshint.com/about/ * Hook - https://gist.github.com/gpickin/ 04a7acfc4907f3ed27f6
  • 15. *  * Cordova hook that allows you to uglify or minify your apps JavaScript and CSS. It is using UglifyJS2 for JavaScript compression and clean-css to minify CSS. * Install from NPM - npm install cordova-uglify * https://github.com/rossmartin/cordova-uglify * Hook - https://gist.github.com/gpickin/ f23a4980b5359ba570b1
  • 16. *  * Let me show you how the JS Hint Hook will help save you time testing an app on a device with errors in your code. https://gist.github.com/gpickin/04a7acfc4907f3ed27f6 * Let me show you how to use Cordova Uglify Hook for when your building to send to the app store. https://gist.github.com/gpickin/f23a4980b5359ba570b1
  • 17. *  $ cordova build ios Running command: /Users/gavinpickin/Dropbox/Apps/cstctraining/hooks/ before_prepare/02_jshint.js /Users/gavinpickin/Dropbox/Apps/cstctraining Linting www/js/services/attendeeDAO.js Linting www/js/index.js File www/js/services/attendeeDAO.js has no errors. ----------------------------------------- Linting www/js/services/attendeeService.js File www/js/index.js has no errors. ----------------------------------------- File www/js/services/attendeeService.js has no errors. ----------------------------------------- Linting www/js/services/attendeeSyncService.js File www/js/services/attendeeSyncService.js has no errors. ----------------------------------------- Linting www/js/services/auditDAO.js File www/js/services/auditDAO.js has no errors.
  • 18. *  $ cordova build ios Running command: /Users/gavinpickin/Dropbox/Apps/cstctraining/hooks/ before_prepare/02_jshint.js /Users/gavinpickin/Dropbox/Apps/cstctraining Linting www/js/services/attendeeDAO.js Linting www/js/index.js Errors in file www/js/services/attendeeDAO.js 1:1 -> Expected an assignment or function call and instead saw an expression. -> funct ion newAttendeeDAO() { 1:6 -> Missing semicolon. -> funct ion newAttendeeDAO() { 1:7 -> Expected an assignment or function call and instead saw an expression. -> funct ion newAttendeeDAO() { 1:10 -> Missing semicolon. -> funct ion newAttendeeDAO() { 1:27 -> Missing semicolon. -> funct ion newAttendeeDAO() { ----------------------------------------- File www/js/index.js has no errors.
  • 19. *  Running command: /Users/gavinpickin/Dropbox/Apps/cstctraining/hooks/ after_prepare/uglify.js /Users/gavinpickin/Dropbox/Apps/cstctraining cordova-uglify will always run by default, uncomment the line checking for the release flag otherwise uglifying js file /Users/gavinpickin/Dropbox/Apps/cstctraining/platforms/ios/ www/js/index.js minifying css file /Users/gavinpickin/Dropbox/Apps/cstctraining/platforms/ios/ www/css/index.css minifying css file /Users/gavinpickin/Dropbox/Apps/cstctraining/platforms/ios/ www/css/jquery.mobile-1.4.2.min.css minifying css file /Users/gavinpickin/Dropbox/Apps/cstctraining/platforms/ios/ www/css/jquery.mobile.external-png-1.4.2.min.css minifying css file /Users/gavinpickin/Dropbox/Apps/cstctraining/platforms/ios/ www/css/jquery.mobile.icons-1.4.2.min.css encountered a .png file, not compressing it encountered a .svg file, not compressing it
  • 21. *  * Copy Icons / Splashscreens, Replace Text Depending on Environment, Add Plugins Source: Holly Schinsky – DevGirl – Adobe Evangelist http://devgirl.org/2013/11/12/three-hooks-your- cordovaphonegap-project-needs/ * JS Hint, Cordova Uglify Source: Nic Raboy http://ionicframework.com/blog/minifying-your-source-code/ * Dan Moore - Hooks and Cordova http://www.mooreds.com/wordpress/archives/1197