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

PPTX
Everything you need to know about mern stack programming
PPTX
Why are developers choosing to train in Mern Stack these days?
PPTX
Building Information Systems with MERN
PDF
MEAN Vs MERN Stack | Detailed Comparison Between MEAN & MERN Stack
DOCX
Ionic
PDF
APIs for mobile
PDF
From MEAN to the MERN Stack
PPTX
10 top web development frameworks (new version 21 11)
Everything you need to know about mern stack programming
Why are developers choosing to train in Mern Stack these days?
Building Information Systems with MERN
MEAN Vs MERN Stack | Detailed Comparison Between MEAN & MERN Stack
Ionic
APIs for mobile
From MEAN to the MERN Stack
10 top web development frameworks (new version 21 11)

What's hot (19)

PDF
Prakash kadam CV
PPTX
Top 5 Front End Development Tools For 2021
PPTX
Performance optimization of vue.js apps with modern js
PDF
Difference between asp.net web forms and asp.net mvc
PPTX
Full stack devlopment using django main ppt
PPT
Flex presentation1
PDF
Difference between asp.net mvc 3 and asp.net mvc 4
PDF
Dreamweaver Application
PPTX
Aeternity Blockchain - Ecosystem & Devtools [2019]
DOCX
Esakkiappan
PPTX
PWA basics for developers
DOCX
Website development tools
PDF
Top front end website development tools and frameworks
PPTX
Web Development and Web Development technologies - Temitayo Fadojutimi
PDF
Difference between wcf and asp.net web api
PDF
Amir Zuker: Building web apps with web assembly and blazor - Architecture Nex...
PDF
How To be a Backend developer
PPTX
Mvc webforms
DOC
Resume
Prakash kadam CV
Top 5 Front End Development Tools For 2021
Performance optimization of vue.js apps with modern js
Difference between asp.net web forms and asp.net mvc
Full stack devlopment using django main ppt
Flex presentation1
Difference between asp.net mvc 3 and asp.net mvc 4
Dreamweaver Application
Aeternity Blockchain - Ecosystem & Devtools [2019]
Esakkiappan
PWA basics for developers
Website development tools
Top front end website development tools and frameworks
Web Development and Web Development technologies - Temitayo Fadojutimi
Difference between wcf and asp.net web api
Amir Zuker: Building web apps with web assembly and blazor - Architecture Nex...
How To be a Backend developer
Mvc webforms
Resume
Ad

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

DOCX
CURRICULUM VITAE
PDF
Putting the Native in React Native - React Native Boston
PPTX
Oracle JavaScript Extension Toolkit Web Components Bring Agility to App Devel...
PPTX
Full-Stack-Web-Development-Internship-Report.pptx
DOC
SatishKumar_Prolifics
PDF
JavaScript : One To Many
PDF
Introduction to React Native - Lev Vidrak, Wix
PDF
Mobile Vue.js – From PWA to Native
PPTX
Visual Studio | Lanzamiento VS2017 en Buenos Aires - 11/03/2017
PPTX
Mobile Dev For Web Devs
PPTX
Windows phone 8 app using Kendo UI
PDF
Convert your Full Trust Solutions to the SharePoint Framework (SPFx)
DOC
Faheem_Resume_068315
PDF
ReactJS Vs React Native: Understanding Differences, Advantages, Disadvantages
PDF
Regith Resume
PDF
Building UWP apps with React-Native
PPTX
ATAGTR2017 Upgrading a mobile tester's weapons with advanced debugging
PPTX
Upgrading Mobile Tester's Weapons with Advanced Debugging
PPTX
React Native - Framework For Mobile App (Seminar)
DOC
Narender Soni Resume - Updated
CURRICULUM VITAE
Putting the Native in React Native - React Native Boston
Oracle JavaScript Extension Toolkit Web Components Bring Agility to App Devel...
Full-Stack-Web-Development-Internship-Report.pptx
SatishKumar_Prolifics
JavaScript : One To Many
Introduction to React Native - Lev Vidrak, Wix
Mobile Vue.js – From PWA to Native
Visual Studio | Lanzamiento VS2017 en Buenos Aires - 11/03/2017
Mobile Dev For Web Devs
Windows phone 8 app using Kendo UI
Convert your Full Trust Solutions to the SharePoint Framework (SPFx)
Faheem_Resume_068315
ReactJS Vs React Native: Understanding Differences, Advantages, Disadvantages
Regith Resume
Building UWP apps with React-Native
ATAGTR2017 Upgrading a mobile tester's weapons with advanced debugging
Upgrading Mobile Tester's Weapons with Advanced Debugging
React Native - Framework For Mobile App (Seminar)
Narender Soni Resume - Updated
Ad

Recently uploaded (6)

PPTX
ASMS Telecommunication company Profile
PDF
6-UseCfgfhgfhgfhgfhgfhfhhaseActivity.pdf
PDF
heheheueueyeyeyegehehehhehshMedia-Literacy.pdf
DOC
证书学历UoA毕业证,澳大利亚中汇学院毕业证国外大学毕业证
DOC
Camb毕业证学历认证,格罗斯泰斯特主教大学毕业证仿冒文凭毕业证
PDF
Lesson 13- HEREDITY _ pedSAWEREGFVCXZDSASEWFigree.pdf
ASMS Telecommunication company Profile
6-UseCfgfhgfhgfhgfhgfhfhhaseActivity.pdf
heheheueueyeyeyegehehehhehshMedia-Literacy.pdf
证书学历UoA毕业证,澳大利亚中汇学院毕业证国外大学毕业证
Camb毕业证学历认证,格罗斯泰斯特主教大学毕业证仿冒文凭毕业证
Lesson 13- HEREDITY _ pedSAWEREGFVCXZDSASEWFigree.pdf

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