SlideShare a Scribd company logo
medium/@rotemmiz
github.com/yershalom
github.com/rotemmiz
@yershalom
@rotemmiz
shalomy@wix.com
rotemm@wix.com
Mobile At Wix
Shalom Yerushalmy
Rotem Mizrachi-Meidan
Continuous Workflow for a Large React Native
App
April 2018
Wix Engineering Locations
Hi.
RotemShalom
Continuous workflow for a large react native app - mobile at wix
The Wix App
 Written from scratch in React Native
 Started a 24 months ago
 40 developers
 70% JavaScript, 30% Native code
 7 product groups, and growing
Modularity
01
Module
.
|____test
|____img
|____src
|____module.js
|____rn-cli.config.js
|____package.json
...
Engine
.
|____app_builds
| |____android
| | |____dev
| | | |____WixApp.apk
| |____iphonesimulator
| | |____dev
| | | |____WixApp.app
|____img
|____src
|____ios
|____android
|____cli
|____package.json
 Components React Native components
 Methods RPC interface
 Events PubSub interface
Module API
module.js
export default class DemoModule {
init() {
}
components() {
return [
{
id: 'wix.module.DemoTab’,
generator: () => DemoScreen,
store,
provider: Provider
}
];
}
methods() {
return [
//registered methods
];
}
onAppStateChanged(appState) {
}
}
React Native
Navigation
Module API
JavaScript
ObjC, Java, C
Native extensions
Native extensions
Native extensions
Native/RN
extensions
/
API Views Biz
Logic
Stores
…
React Native
Feature Config BI Logging
…
API Views
Biz
Logic
Clubs
API Views Biz
Logic
CRM
Modules
Engine
OS
…
detoxreact-native-navigation
react-native-interactable react-native-ui-lib
react-native-calendars
react-native-keyboard-input
react-native-autogrow-textinputDetoxInstruments
remx
react-native-notificationsreact-native-camera-kit
react-native-keyboard-input
react-native-paged-contacts
react-native-action-view
Continuous workflow for a large react native app - mobile at wix
CI &
Infrastructure
02
CRM
Clubs
Stores
Engine
Wix App
GA
GA
GA
GA
RC
RC
RC
RC
TestFlight/
Google Play
package.json
"dependencies": {
"wix-inbox-mobile": "ga",
"wix-mobile-media-manager": "ga",
"wix-social-chat-mobile": "ga",
"wix-one-clubs-feed": "ga",
"wix-one-clubs-manager": "ga",
"wix-store-merchant-app": "ga",
"wix-one-app-engine": "ga",
...
},
Integrations
 What are we building?
 Infrastructure
 CI Server
 Publishing
Over
Module
Code
Change
git push
Module Build, Test & Version
Internal
Release
Wix App
Release
publish
Private Repo
upload
AppBlade
upload
TestFlight & GP
Module RC
Wix App Build & Test
RC-GA
Wix App RC
Wix App Build & Test
GA-GA
 Supports patching
 Git tree state -> Version
1.423.4
Major Minor Patch
From package.json Number of commits in master Number of commits in branch
Versioning Scheme
Testing
03
Unit Tests
Mocked E2E
(UI Automation) Tests
E2E Tests
Testing With Detox
Frontend Backend
Mobile App
Module A
Biz
Logic
UI
Comp
Module B
Biz
Logic
UI
Comp
Production
E2E Tests
Production
E2E
Pros Cons
• Real user experience
• Easy to setup
• Easy to write
• High confidence
• Flaky
• Slow
• Hard to maintain
Frontend Backend
Mobile App
Module A
Biz
Logic
UI
Comp
Module B
Biz
Logic
UI
Comp
Mocked
E2E Tests
Mock Server
Mocked E2E Pros Cons
• Closer to code
• Stable
• Easy to maintain
• Hard to setup
• Hard to write
Mocking for Detox
With React Native
Mocking: Build Flavors
endpoint.js
endpoint.e2e.js
main.jsbundle
somebizlogic.js
e2e
main.jsbundle
module.exports = {
LOGIN_ENDPOINT: 'https://login.wix.com'
};
endpoint.js
module.exports = {
LOGIN_ENDPOINT: 'https://localhost:90210'
};
endpoint.e2e.js
module.exports = {
getSourceExts: () => process.env.RN_SRC_EXT ?
process.env.RN_SRC_EXT.split(',') :
[]
};
> RN_SRC_EXT=e2e.js react-native start
> RN_SRC_EXT=e2e.js xcodebuild <params>
> RN_SRC_EXT=e2e.js ./gradlew assembleRelease
rn-cli.config.js
endpoint.js
endpoint.e2e.js
describe('Login', () => {
const server = new MockServer();
beforeEach(async () => {
await server.start();
});
afterEach(async () => {
await server.stop();
});
it('should login and persist login after restart', async () => {
server.forUser(server.testUserId()).withBusinesses(1);
await device.launchApp({ delete: true, permissions: { notifications: 'YES' }});
await element(by.text('Log In TestUser1')).tap();
await expect(element(by.text('feed.FeedScreen'))).toBeVisible();
await device.launchApp({ newInstance: true });
await expect(element(by.text('feed.FeedScreen'))).toBeVisible();
});
});
Monitoring
04
Monitoring
 Errors -
 Performance -
 Business – Wix internal tool
Cross App
Upgrades
05
React Native
Navigation
Module API
JavaScript
ObjC, Java, C
Native extensions
Native extensions
Native extensions
Native/RN
extensions
/
API Views Biz
Logic
Stores
…
React Native
Feature Config BI Logging
…
API Views
Biz
Logic
Clubs
API Views Biz
Logic
CRM
Modules
Engine
OS
…
Future
Plans
06
“≈0 Manual QA”
Developers
 Unit tests
 Mocked E2E
 Contract tests
QA Engineers
 Prod E2E
manual backup
 Scenarios
Developers +
QA
 Educate
 Sync
Hotfixes
True Continuous
Codename:
Purple
Thanks
.
medium/@rotemmiz
github.com/yershalom
github.com/rotemmiz
@yershalom
@rotemmiz
shalomy@wix.com
rotemm@wix.com

More Related Content

What's hot (19)

PDF
Prakash kadam CV
prakashkadam15
 
PPTX
Top 5 Front End Development Tools For 2021
ForceBolt
 
PPTX
Performance optimization of vue.js apps with modern js
Filip Rakowski
 
PDF
Difference between asp.net web forms and asp.net mvc
Umar Ali
 
PPTX
Full stack devlopment using django main ppt
SudhanshuVijay3
 
PPT
Flex presentation1
Nguyen Tran
 
PDF
Difference between asp.net mvc 3 and asp.net mvc 4
Umar Ali
 
PDF
Dreamweaver Application
Sarah Hall
 
PPTX
Aeternity Blockchain - Ecosystem & Devtools [2019]
Przemysław Thomann
 
DOCX
Esakkiappan
Esakkiappan E
 
PPTX
PWA basics for developers
Filip Rakowski
 
DOCX
Website development tools
Sovereign software solution
 
PDF
Top front end website development tools and frameworks
Sovereign software solution
 
PPTX
Web Development and Web Development technologies - Temitayo Fadojutimi
Temitayo Fadojutimi
 
PDF
Difference between wcf and asp.net web api
Umar Ali
 
PDF
Amir Zuker: Building web apps with web assembly and blazor - Architecture Nex...
CodeValue
 
PDF
How To be a Backend developer
Ramy Hakam
 
PPTX
Mvc webforms
Muhammad Younis
 
DOC
Resume
Ragesh kn
 
Prakash kadam CV
prakashkadam15
 
Top 5 Front End Development Tools For 2021
ForceBolt
 
Performance optimization of vue.js apps with modern js
Filip Rakowski
 
Difference between asp.net web forms and asp.net mvc
Umar Ali
 
Full stack devlopment using django main ppt
SudhanshuVijay3
 
Flex presentation1
Nguyen Tran
 
Difference between asp.net mvc 3 and asp.net mvc 4
Umar Ali
 
Dreamweaver Application
Sarah Hall
 
Aeternity Blockchain - Ecosystem & Devtools [2019]
Przemysław Thomann
 
Esakkiappan
Esakkiappan E
 
PWA basics for developers
Filip Rakowski
 
Website development tools
Sovereign software solution
 
Top front end website development tools and frameworks
Sovereign software solution
 
Web Development and Web Development technologies - Temitayo Fadojutimi
Temitayo Fadojutimi
 
Difference between wcf and asp.net web api
Umar Ali
 
Amir Zuker: Building web apps with web assembly and blazor - Architecture Nex...
CodeValue
 
How To be a Backend developer
Ramy Hakam
 
Mvc webforms
Muhammad Younis
 
Resume
Ragesh kn
 

Similar to Continuous workflow for a large react native app - mobile at wix (20)

DOCX
CURRICULUM VITAE
Vicky Kumar
 
PDF
Putting the Native in React Native - React Native Boston
stan229
 
PPTX
Oracle JavaScript Extension Toolkit Web Components Bring Agility to App Devel...
Lucas Jellema
 
PPTX
Full-Stack-Web-Development-Internship-Report.pptx
MahaveerVPandit
 
DOC
SatishKumar_Prolifics
Satish kumar Bonu
 
PDF
JavaScript : One To Many
Jamel Eddine Mejri
 
PDF
Introduction to React Native - Lev Vidrak, Wix
DroidConTLV
 
PDF
Mobile Vue.js – From PWA to Native
MartinSotirov
 
PPTX
Visual Studio | Lanzamiento VS2017 en Buenos Aires - 11/03/2017
Pablo Ariel Di Loreto
 
PPTX
Mobile Dev For Web Devs
Justin James
 
PPTX
Windows phone 8 app using Kendo UI
Dhananjay Kumar
 
PDF
Convert your Full Trust Solutions to the SharePoint Framework (SPFx)
Brian Culver
 
DOC
Faheem_Resume_068315
Faheem Ahmad
 
PDF
ReactJS Vs React Native: Understanding Differences, Advantages, Disadvantages
Techtic Solutions
 
PDF
Regith Resume
Regith Lingesh
 
PDF
Building UWP apps with React-Native
Maurice De Beijer [MVP]
 
PPTX
ATAGTR2017 Upgrading a mobile tester's weapons with advanced debugging
Agile Testing Alliance
 
PPTX
Upgrading Mobile Tester's Weapons with Advanced Debugging
Abhijeet Vaikar
 
PPTX
React Native - Framework For Mobile App (Seminar)
Jaise P Jose
 
DOC
Narender Soni Resume - Updated
Narender Soni
 
CURRICULUM VITAE
Vicky Kumar
 
Putting the Native in React Native - React Native Boston
stan229
 
Oracle JavaScript Extension Toolkit Web Components Bring Agility to App Devel...
Lucas Jellema
 
Full-Stack-Web-Development-Internship-Report.pptx
MahaveerVPandit
 
SatishKumar_Prolifics
Satish kumar Bonu
 
JavaScript : One To Many
Jamel Eddine Mejri
 
Introduction to React Native - Lev Vidrak, Wix
DroidConTLV
 
Mobile Vue.js – From PWA to Native
MartinSotirov
 
Visual Studio | Lanzamiento VS2017 en Buenos Aires - 11/03/2017
Pablo Ariel Di Loreto
 
Mobile Dev For Web Devs
Justin James
 
Windows phone 8 app using Kendo UI
Dhananjay Kumar
 
Convert your Full Trust Solutions to the SharePoint Framework (SPFx)
Brian Culver
 
Faheem_Resume_068315
Faheem Ahmad
 
ReactJS Vs React Native: Understanding Differences, Advantages, Disadvantages
Techtic Solutions
 
Regith Resume
Regith Lingesh
 
Building UWP apps with React-Native
Maurice De Beijer [MVP]
 
ATAGTR2017 Upgrading a mobile tester's weapons with advanced debugging
Agile Testing Alliance
 
Upgrading Mobile Tester's Weapons with Advanced Debugging
Abhijeet Vaikar
 
React Native - Framework For Mobile App (Seminar)
Jaise P Jose
 
Narender Soni Resume - Updated
Narender Soni
 
Ad

Continuous workflow for a large react native app - mobile at wix