◦ Food delivery from your phone with LINE MAN application ◦ Restaurant accept orders via RMS application ◦ Written in React Native ◦ Available for Android and iOS
not available across Android and iOS ◦ MapView is not available on Android ◦ Android Alert can only have 3 buttons ◦ ActionSheet have no Android alternative ◦ DatePicker in iOS is a component ◦ DatePicker in Android is an API ◦ Elevation CSS is only available in Android ◦ Shadow CSS is only available in iOS ◦ Push notification is only available in iOS
is sooooo unstable ◦ React Native Push Notification used to notify the application twice on Android, one when notification is received, another when notification is tapped ◦ There is no way to detect whether the user actually tapped the notification ◦ I had to fork it to disable background notification to make both platforms have the same behavior ◦ In version 2.0.1 userInteraction and background flag were added
any third party solution ◦ There is no ActionSheet alternative for Android ◦ There is react-native-dialogs, which is only available for Android ◦ I had to write my own wrapper to Dialogs/ActionSheet
test everything in both iOS and Android! • React-native-maps requires linking with Google APIs/MapKit ◦ Requires native application development knowledge
◦ 0.28: Flex styling property behavior now behaves slightly differently ▪ A few flex: 1 breaks in iOS ◦ 0.36: Fix unconstrained sizing in main axis ▪ This one breaks the whole app layout in iOS ▪ I have to tell our testers "Check everywhere we have a button, because it will break" ◦ 0.36: Default scrollview to flexShrink to allow views below it ◦ 0.39: Android now use C-based layout engine ▪ Now Android breaks the same way iOS do!
platform • Appium is cross platform, however the underlying way of finding elements is different • React Native have testID, but Appium doesn't support that (RN #7135) • We have to use accessibilityLabel for testing
with very large screen to test (so we don't have to scroll) • With hacks to make information available within one accessibilityLabel • And later the iOS tests were neglected • And the tests run very slowly • In the end I ignored the tests and only cares about testing Redux reducers
• … but not on Android • Android LayoutAnimation is behind an experimental flag • It is extremely noticeable in debug mode. React Native Redux Router have only a few frames moving from page to page.
restaurant information list is reallyyyy long • It freeze the app for a few seconds while it loads • Every time you make a change it freeze • In the end I hacked ListView together, it is now twice as fast (but still freeze) • But if you scroll really fast the ListView will not end at the end of the page