February 2018
Welcome to the February 2018 release of React Native! This release includes work done by the React Native team and the community in January, and there are some big changes here after the holidays. Thanks for 270 commits from 87 contributors, you all are great! Here are a few highlights from the release:
- Long awaited Blob changes: upload, download, fetch locally, and more
- Sticky headers now work on inverted Lists
- Update to the newest React, which deprecated some lifecycle methods and added new ones – expect Yellowbox until React Native is updated
Space-evenly
is now there (sorry for the confusion with 0.52's release notes)- A lot of under-the-covers work on Yoga, iOS's Text and TextInput, and a ton of other areas
- Multiple crash fixes
The changelog is arranged by the customary added, removed, changed, and fixed plus internal; the changes are also organized by platform.
If you want to get involved in the process of preparing releases and making changelog (yes, we need your help!), please get in touch with me.
We keep the draft of changelogs here: https://github.com/turnrye/react-native-changelog. Visit this repository for tracking the progress of upcoming releases and suggesting improvements to the current one.
Added
- ✨ Blobs now can be: made from Strings, loaded by File using a FileReader API, uploaded and downloaded via
XMLHttpRequest#fetch
, and fetched on files to a local blob consistently (be56a3e and 854c233 by @satya164 and @fkgozali) - Dynamic node_module dependencies are now supported (b5e19ad by @jeanlauliac)
- Support sticky headers for inverted Lists with
invertStickyHeaders
(ecaca80 by @janicduplessis) space-evenly
is now supported (sorry for the confusion with 0.52 notes) (b1cdb7d by @gedeagas)- Platform plugins can participate in RNConfig,
link
, andunlink
– keep an eye on react-native-window's use of it! (a40bfa7 by @rozele) - Add
minify
flag to react-native bundle command (3f969cb by @tomduncalf)
VR Specific Additions
- Added ScrollView support (6fa039d by @MartinSherburn)
Android Specific Additions
- Bundle download progress is now shown like iOS (675f142 by @janicduplessis)
- Add back ability to customise OkHttp client (22efd95 by @cdlewis)
iOS specific additions
- ScrollView now supports smooth bi-directional content loading and takes new prop
maintainVisibleContentPosition
(cae7179 and 65184ec by @sahrens) - Allow substituting a default font handler (a9c684a by @mmmulani)
- Add
accessibilityElementsHidden
prop (3128816 by @aputinski) - Add EXTRA_PACKAGER_ARGS extensibility point on
scripts/react-native-xcode.sh
(PR rev 2122140 by @brunolemos with landing assists b8c86b8 and 0d4ff1b)
Removed
- Remove internal
utf8
utility - use the utf8 package now instead (431670f by @mathiasbynens)
iOS specific removals
- Removed outdated assertion in RCTShadowView related to breaking change in Yoga (e3ff3cf by @shergin)
Android specific removals
- Fix an issue when swapping to and from the
visible-password
orphone-pad
keyboard types. (164f6b6 by @BrandonWilliamsCS) - Remove redundant config in AndroidManifest.xml (d7a9ca2 by @gengjiawen)
iOS specific removals
- Delete RCTBatchedBridge (816d417 by @mhorowitz)
Changed
- Docs clarifications (7abffc3 by @IgorGanapolsky)
iOS Specific Changes
- ⚡️ Text and TextInput have been re-implemented from the ground up for performance, flexibility, and reduced technical debt (2716f53, ef4214a, 0009909, 74963eb, 6c4ef28, ebc9884, d7fa81f, 7d1ec7a, 5264832, 6bb8617, 5dbb3c5, 7e7d00a, 46fd864, 9dfa2e7, 8a882fe, and 0f9fc4b by @shergin and @hovox)
- Image's
resizeMode="center"
is now documented and has an example present (be7037f by @motiz88) - Geolocation API no longer timeouts when
skipPermissionRequests: true
(5c17db8 by @ngandhy) - Rounding pixels is now done with an algorithm from Yoga rather than React Native, reducing debt and improving performance (ceb1d1c and 114c258 by @shergin)
Android specific changes
- Numerous refactors around bundle handling and the
DevServerHelper
(644123a, e756251, 6e44356, 1019bda, 06d8f96, f88c9d6, and 108f966 by @davidaurelio)
Fixed
- Fix JS debugger issues related to CORS (29f8354 by @njbmartin)
- Keep the
.gitignore
d files during thereact-native-git-upgrade
process (7492860 by @ncuillery) - Fix re-render case on SwipeableRow (a580a44)
- Fix display of syntax error messages when HMR is enabled (2b80cdf by @ide)
- Add fixtures to metro blacklist in order to let build succeed (4194bb2 by @t4deu)
Android specific fixes
- Don't crash when using decimal
Animated.modulo
values withuseNativeDriver: true
(6c38972 by @motiz88) - Don't crash when receiving unknown websocket IDs (1a790f8 by @sunweiyang)
- Dont crash when
NativeModules.UIManager.showPopupMenu
method calls error callback (0c18ec5 by @dryganets) - Maintain cursor position when TextInput's
secureTextEntry
changes (09b43e4 by @jainkuniya) - Race condition fix in Dialogs module (d5e3f08 by @dryganets)
- Fix NPE in Android Switch during measure (7b1915e by @4ndroidev)
- Fix initialScrollIndex (ef596de by @olegbl)
- Fix redbox style (f363dfe by @ayc1)
- Fix crash due to mishandling of UTF-8 in progressive download. (9024f56 by @dryganets)
- Fix crash because ClassCastException fix: getText() returns CharSequence not Spanned (46cc490 by @dryganets)
- Fix and re-enable "view flattening" optimizations (877f1cd by @mdvacca)
iOS specific fixes
- Make sure
refreshControl
shows up on initial render if specified (ed5872e by @vonovak) - Fix Crash when CameraRoll is getting assets from iCloud and no filename is provided (2ae2436 by @pentarex)
- Fix Xcode Archive task failing if project path contains whitespace (8aa568e by @jevakallio)
react-native link
has been fixed to correctly link iOS and tvOS targets (a63fd37 by @dlowder-salesforce)GLog
fix on case sensitive APFS macOS (2fef1ba by @hovox)- Fixed issue where you cannot launch tvOS app on Apple TV simulator (afd988f)
Internal work
-
A massive amount of Yoga optimizations, cleanups, refactors, and test fixes (62d0100, 1475fc4, 9daa174, d4517dd, ca91f0e, 34b7ec8, fda861a, 9f7cedb, ac1c8c2, fcf2c7c, 2b27f1a, 210ae5b, 8208858, 7f94bff, bd7bf94, 2fe65b0, 9658d9f, ee5c91c, 64d530b, 400a29e, f75e21f, 528bbac, be8e7c6, d0f7d4d, 4b4959a, fdef378, 831a1bb, (2a22d99, 9f57ded, and ff2658c by @priteshrnandgaonkar, @passy, @ryu2), and others)
-
🚧 Lifecycle methods were renamed to be consistent with React RFC6 – note that there are Yellowbox warnings right now because of this, it's work-in-progress (6f007e8 by @bvaughn)
-
Some autogenerated mystery string files were added (c7846c4, bb6fcea, 8bd00a2, faa9519, f49f793)
-
Improvements to the cli's implementation (2c5fbd7, 752427b, and 619a8c9 by @arcanis, @voideanvalue, and @rozele)
-
Measure touch events from nearest "root view" (a70fdac by @mmmulani)
-
Allow to attach the HMR server to an external http server (8c6b816 by @rafeca)
-
Split folly/Memory out from headers-only targets in Buck (b8e79a7 by @mzlee)
-
Code cleanup of ReactHorizontalScrollView in Android (71ec85f by @mdvacca)
-
Always create a debugger websocket connection when in iOS dev builds (fa334ce by @bnham)
-
Make the React Native HMR client extend from the generic metro HMR client (9a19867 by @rafeca)
-
Better handling exception in loadScript() (3fbf785)
-
Handle invalidation error in RCTObjcExecutor (493f3e8 by @fromcelticpark)
-
Check for nullptr when accessing isInspectable method (70d23e8 by @fromcelticpark)
-
Fixing Prepack model for latest global.nativeExtensions changes. (01a58d1 by @NTillmann)
-
General code cleanup: unused code and configurations (e233646 and e701034 by @bvaughn and others)
-
Add support for finding multiple views with NativeIds using a single listener to Android (f5efc46 by @axe-fb)
-
Changes from Prettier (b815eb5, e758cb7, bf9cabb, and a5af841 by @shergin)
-
Support for inherited events in view managers (2afe7d4 by @shergin)
-
Flow types changes (3fc33bb, e485cde, 83ed9d1, 52ffa5d, d37cdd9, 6e7fb01, d99ba70, bcfbdf4, and a1c479f by @alexeylang, @sahrens, @yungsters, and @zjj010104)
-
Give IInspector a virtual destructor for correct InspectorImpl destruction (2a3c37f by @toulouse)
-
Migrated
SourceCode
andDeviceInfoModule
out of Native Modules (47fe523 and 429fcc8) -
Jest config change as part of bringing back support for the
assetPlugin
option in Metro (af6450c by @ide) -
Nested virtualized lists should receive recordInteration events (ae2d5b1)
-
xplat/js: asyncRequire: redirect async modules to control modules (5e11b88 by @jeanlauliac)
-
More progress towards split bundle support (1a1a956 and 9e34cbd by @fromcelticpark)
-
Implement bundle sync status (88980f2)
-
Various improvements to RCTSurface and RCTShadowView (7d9e902, 06ebaf2, 6882132, and 193a2bd by @shergin)
-
Progress towards experimental ReactFabric and FabricUIManager (b1e5c01, fa0ac92, 94dac23 by @fkgozali)
-
Refactored bridge ReadableNativeMap and ReadableNativeArray to add centralized accesses (7891805, 28be33a, and 5649aed)
-
Removed unused core from Image.android.js (ce3146a by @shergin)
-
Capture StackOverflowExceptions triggered when drawing a ReactViewGroup or ReactRootView and log more debugging information for it (1aac962 and 4d3519c by @mdvacca)
-
babel-preset-react-native
: only require plugins once (df6c48c by @davidaurelio) -
Report module id as string and as double, in case of invalid values are passed to nativeRequire (8f358a2 by @fromcelticpark)
-
More work moving build configurations to Skylark (d3db764, 869866c, a8c95d2, and 79a63d0 by @mzlee, @ttsugriy, and others)
-
Remove unused
packagerInstance
option and rename it toserver
(bbbc18c) -
The blog has moved to react-native-website (e16d673 by @hramos)
-
Removed broken link for 'Getting Help' in the README (b3a306a by @rickydam)
-
Changed to use boost-for-react-native cocoapod, which speeds up
pod install
a ton; this was in 0.53 originally but had to be re-added (d40db3a by @CFKevinRef) -
Remove fbobjc's RN copy (af0c863)
-
Measure time to create ReactInstanceManager (6224ef5 by @alexeylang)
-
Upgrade flow to v0.65.0 (7aba456 and 298f3bb by @avikchaudhuri and @mroch)
-
Upgrade ESLint to v4.17.0 (plus update related deps) (bba19e8 by @zertosh)
-
Upgrade React to v16.3.0-alpha.1 (03d7b2a and 5e80d95 by @grabbou and @hramos)
-
Synced React and ReactFabric render (c7ed03a, 1382975, and d676746 by @bvaughn)
-
Upgrade metro to v0.26.0 (9e6f3b8, ce50f25, e9b83e6, 2fe7483, 0f96ebd, 0de470e, e8893a0, and f4fde9d by @rafeca and @grabbou)
-
GitHub bot commands have been disabled in the short term (b973fe4 by @hramos)
-
Various CI configuration changes (17bd6c8, 51b6749, a2f3ba8, 2ef9b7f, 40b1792, 613afba, da8bec9, fa11fae, f50af7f, 9227ba7, 365a4d4, b58d848, c8e98bb, f5975a9, and 605a6e4 by @hramos, @grabbou, and @dryganets)
-
Trim docs that are already present in the open source docs site (28d60b6 by @hramos)
-
Fix obsolete instructions about editing docs (2f46712 by @ExplodingCabbage)
-
Fix links to beginner friendly issues (c355a34 by @hotchemi)
-
Don't run the Danger CI tool through Flow (1ea3065 by @hramos)
-
Namespace custom ESLint rules through eslint-plugin-lint (488b682 by @zertosh)
-
... and now we're at 0.54 🎉 (67e67ec, 21dd3dd, 49e35bd, 829f675, and 294d95a by @grabbou and @hramos)