<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: JulietteR</title>
    <description>The latest articles on DEV Community by JulietteR (@julietter).</description>
    <link>https://dev.to/julietter</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F165968%2F4f85ad75-77fc-4c07-949f-3b4975177898.JPG</url>
      <title>DEV Community: JulietteR</title>
      <link>https://dev.to/julietter</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/julietter"/>
    <language>en</language>
    <item>
      <title>How to Upgrade from React Native 0.57 to 0.59 | Part 2: Upgrading to 0.59</title>
      <dc:creator>JulietteR</dc:creator>
      <pubDate>Tue, 30 Jul 2019 16:04:25 +0000</pubDate>
      <link>https://dev.to/julietter/how-to-upgrade-from-react-native-0-57-to-0-59-part-2-upgrading-to-0-59-2921</link>
      <guid>https://dev.to/julietter/how-to-upgrade-from-react-native-0-57-to-0-59-part-2-upgrading-to-0-59-2921</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7g2QxAOo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/proxy/1%2Atg4oPcJpJ7dOTE9x0WstQg.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7g2QxAOo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/proxy/1%2Atg4oPcJpJ7dOTE9x0WstQg.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Welcome to Part 2!
&lt;/h4&gt;

&lt;p&gt;If you’re here, then I will assume that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You know that you need to update React Native 0.59&lt;/li&gt;
&lt;li&gt;You’re already on React Native 0.58&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No? Not correct? Then please check out the first part of this tutorial: &lt;a href="https://dev.to/julietter/how-to-upgrade-from-react-native-0-57-to-0-59-part-1-upgrading-to-0-58-492i"&gt;Part 1: Upgrading to 0.58&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Everyone else, read along to see how you can upgrade and get your React Native Android apps 64-bit ready!&lt;/p&gt;

&lt;h4&gt;
  
  
  Part 2: Upgrading to React Native 0.59 ⬆️
&lt;/h4&gt;

&lt;h4&gt;
  
  
  🔑 Key Changes
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Full 64-bit Android support! (No more warnings from the Play Store!)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://reactjs.org/docs/hooks-intro.html"&gt;React Hooks&lt;/a&gt; support!&lt;/li&gt;
&lt;li&gt;Our very first deprecations due to the &lt;a href="https://github.com/react-native-community/discussions-and-proposals/issues/6"&gt;Lean Core initiative&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Step 1: Update your &lt;code&gt;package.json&lt;/code&gt; ⬆️
&lt;/h4&gt;

&lt;p&gt;Open up your &lt;code&gt;package.json&lt;/code&gt; and update the following dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;package.json&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="nl"&gt;"dependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"react"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"16.8.3"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"react-native"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0.59.10"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"devDependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"@babel/core"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^7.4.5"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"@babel/runtime"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^7.4.5"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"babel-jest"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^24.8.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"jest"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^24.8.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"metro-react-native-babel-preset"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^0.54.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"react-test-renderer"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"16.8.3"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Then, delete your &lt;code&gt;node_modules&lt;/code&gt; and reinstall a fresh batch with &lt;code&gt;npm i&lt;/code&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 2: Update Flow ⬆️
&lt;/h4&gt;

&lt;p&gt;Once again, an easy one. Open &lt;code&gt;.flowconfig&lt;/code&gt; and update the flow dependency:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// .flowconfig

// Delete this line:
node_modules/react-native/flow-github/

// Update this version number, if you have not already:
[version]
^0.92.0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;If you use Flow and run into errors after this update, head over to their &lt;a href="https://github.com/facebook/flow/blob/master/Changelog.md"&gt;changelog&lt;/a&gt; to diagnose any issues.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 3: Add a New &lt;code&gt;metro.config.js&lt;/code&gt; File 🆕
&lt;/h4&gt;

&lt;p&gt;Create a new file in your root directory called &lt;code&gt;metro.config.js&lt;/code&gt; and add the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// metro.config.js&lt;/span&gt;

&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;transformer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;getTransformOptions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;experimentalImportSupport&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;inlineRequires&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;}),&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Everything is set to &lt;code&gt;false&lt;/code&gt; for now, but you now have the ability to play around with some new bundling options. Cool! 😎&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 4: Update &lt;code&gt;android/build.gradle&lt;/code&gt; ⬆️
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; Update &lt;code&gt;android/build.gradle&lt;/code&gt; to support some new libraries/SDKs. Don’t delete anything, just update the following version numbers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight groovy"&gt;&lt;code&gt;&lt;span class="c1"&gt;// android/build.gradle&lt;/span&gt;

&lt;span class="n"&gt;buildscript&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
     &lt;span class="n"&gt;ext&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
          &lt;span class="n"&gt;buildToolsVersion&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"28.0.3"&lt;/span&gt;
          &lt;span class="n"&gt;targetSdkVersion&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;28&lt;/span&gt;
     &lt;span class="o"&gt;}&lt;/span&gt;

     &lt;span class="n"&gt;dependencies&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
          &lt;span class="n"&gt;classpath&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"com.android.tools.build:gradle:3.4.0"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
     &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt; Now, delete the following. You will no longer need to specify the version of Gradle that you need to use here:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight groovy"&gt;&lt;code&gt;&lt;span class="c1"&gt;// android/build.gradle&lt;/span&gt;

&lt;span class="c1"&gt;// Delete this section:&lt;/span&gt;
&lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="nf"&gt;wrapper&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;type:&lt;/span&gt; &lt;span class="n"&gt;Wrapper&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
     &lt;span class="n"&gt;gradleVersion&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'4.7'&lt;/span&gt;
     &lt;span class="n"&gt;distributionUrl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;distributionUrl&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;replace&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"bin"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"all"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Step 5: Update Gradle ⬆️
&lt;/h4&gt;

&lt;p&gt;Though we’re no longer specifying the version, we still need to update Gradle to 5.4.1.&lt;/p&gt;

&lt;p&gt;Open up &lt;code&gt;android/gradle/wrapper/gradle-wrapper.properties&lt;/code&gt; and change the &lt;code&gt;distributionUrl&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Step 6: Update &lt;code&gt;android/app/build.gradle&lt;/code&gt; ⬆️
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; In &lt;code&gt;android/app/build.gradle&lt;/code&gt;, delete the following line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight groovy"&gt;&lt;code&gt;&lt;span class="c1"&gt;// android/build.gradle&lt;/span&gt;

&lt;span class="n"&gt;android&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
     &lt;span class="c1"&gt;// Delete the next line&lt;/span&gt;
     &lt;span class="n"&gt;buildToolsVersion&lt;/span&gt; &lt;span class="n"&gt;rootProject&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ext&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;buildToolsVersion&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt; Now, add the following &lt;code&gt;compileOptions&lt;/code&gt; section inside the &lt;code&gt;android&lt;/code&gt; object:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight groovy"&gt;&lt;code&gt;&lt;span class="c1"&gt;// android/app/build.gradle&lt;/span&gt;

&lt;span class="n"&gt;android&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="n"&gt;compileOptions&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;sourceCompatibility&lt;/span&gt; &lt;span class="n"&gt;JavaVersion&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;VERSION_1_8&lt;/span&gt;
        &lt;span class="n"&gt;targetCompatibility&lt;/span&gt; &lt;span class="n"&gt;JavaVersion&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;VERSION_1_8&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3.&lt;/strong&gt; Next, add the final required 64-bit build system, &lt;code&gt;"x86_64"&lt;/code&gt;, to the following lists:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight groovy"&gt;&lt;code&gt;&lt;span class="n"&gt;android&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;splits&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;abi&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="n"&gt;include&lt;/span&gt; &lt;span class="s2"&gt;"armeabi-v7a"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"x86"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"arm64-v8a"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"x86_64"&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
  &lt;span class="n"&gt;buildTypes&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;variant&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;outputs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;each&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="n"&gt;output&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
      &lt;span class="kt"&gt;def&lt;/span&gt; &lt;span class="n"&gt;versionCodes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"armeabi-v7a"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"x86"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"arm64-v8a"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"x86_64"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;4.&lt;/strong&gt; Finally, since we are only upgrading to React Native &lt;code&gt;0.59.10&lt;/code&gt; (there are newer versions out there), we must specify the React Native dependency that Android should use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight groovy"&gt;&lt;code&gt;&lt;span class="n"&gt;dependencies&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
     &lt;span class="c1"&gt;// implementation "com.facebook.react:reactnative:+"&lt;/span&gt;
     &lt;span class="n"&gt;implementation&lt;/span&gt; &lt;span class="s2"&gt;"com.facebook.react:react-native:0.59.10"&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Step 7: Update &lt;code&gt;android/gradlew&lt;/code&gt; and &lt;code&gt;android/gradlew.bat&lt;/code&gt; ⬆️
&lt;/h4&gt;

&lt;p&gt;One last step in updating to 64-bit builds. Add the following options to your &lt;code&gt;android/gradlew&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# android/gradlew&lt;/span&gt;

&lt;span class="nv"&gt;DEFAULT_JVM_OPTS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'"-Xmx64m" "-Xms64m"'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;…and to your &lt;code&gt;android/gradlew.bat&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight batchfile"&gt;&lt;code&gt;# &lt;span class="kd"&gt;android&lt;/span&gt;&lt;span class="na"&gt;/gradlew&lt;/span&gt;.bat

&lt;span class="kd"&gt;set&lt;/span&gt; &lt;span class="kd"&gt;DEFAULT_JVM_OPTS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"-Xmx64m"&lt;/span&gt; &lt;span class="s2"&gt;"-Xms64m"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Step 8: Add a New &lt;code&gt;android/app/src/debug/AndroidManifest.xml&lt;/code&gt; 🆕
&lt;/h4&gt;

&lt;p&gt;Create a new file called &lt;code&gt;android/app/src/debug/AndroidManifest.xml&lt;/code&gt; and add the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;manifest&lt;/span&gt; &lt;span class="na"&gt;xmlns:android=&lt;/span&gt;&lt;span class="s"&gt;"http://schemas.android.com/apk/res/android"&lt;/span&gt;
    &lt;span class="na"&gt;xmlns:tools=&lt;/span&gt;&lt;span class="s"&gt;"http://schemas.android.com/tools"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;uses-permission&lt;/span&gt; &lt;span class="na"&gt;android:name=&lt;/span&gt;&lt;span class="s"&gt;"android.permission.SYSTEM_ALERT_WINDOW"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;application&lt;/span&gt; &lt;span class="na"&gt;android:usesCleartextTraffic=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt; &lt;span class="na"&gt;tools:targetApi=&lt;/span&gt;&lt;span class="s"&gt;"28"&lt;/span&gt; &lt;span class="na"&gt;tools:ignore=&lt;/span&gt;&lt;span class="s"&gt;"GoogleAppIndexingWarning"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/manifest&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;We now have a separate manifest for our Android debug builds.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 9: Remove the SYSTEM ALERT WINDOW 🚨
&lt;/h4&gt;

&lt;p&gt;The &lt;code&gt;SYSTEM_ALERT_WINDOW&lt;/code&gt; permission is what lets us see our favorite red box errors in Android. Since we’ve moved their permission to the new debug manifest file above, remove it from the release manifest file so we don’t ever see it in production.&lt;/p&gt;

&lt;p&gt;In &lt;code&gt;android/app/src/main/AndroidManifest.xml&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- android/app/src/main/AndroidManifest.xml --&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;manifest...&lt;/span&gt;
  &lt;span class="err"&gt;&amp;lt;!--&lt;/span&gt; &lt;span class="err"&gt;Delete&lt;/span&gt; &lt;span class="err"&gt;the&lt;/span&gt; &lt;span class="err"&gt;following:&lt;/span&gt; &lt;span class="err"&gt;--&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;uses-permission&lt;/span&gt; &lt;span class="na"&gt;android:name=&lt;/span&gt;&lt;span class="s"&gt;"android.permission.SYSTEM_ALERT_WINDOW"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Step 10: Update iOS Files 🍎
&lt;/h4&gt;

&lt;p&gt;A few changes need to be made to your &lt;code&gt;AppDelegate&lt;/code&gt; files to prevent some errors from occurring:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; Open &lt;code&gt;ios/APP_NAME/AppDelegate.h&lt;/code&gt; and add the following import:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// ios/APP_NAME/AppDelegate.h

#import &amp;lt;React/RCTBridgeDelegate.h&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt; Next, add that &lt;code&gt;RCTBridgeDelegate&lt;/code&gt; import to the &lt;code&gt;AppDelegate&lt;/code&gt; class:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// ios/APP_NAME/AppDelegate.h

@interface AppDelegate : UIResponder &amp;lt;UIApplicationDelegate, RCTBridgeDelegate&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3.&lt;/strong&gt; Open &lt;code&gt;ios/APP_NAME/AppDelegate.m&lt;/code&gt; and remove all of the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// ios/APP_NAME/AppDelegate.m 

// DELETE:
 NSURL *jsCodeLocation;

// DELETE:
jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
  RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
                                                      moduleName:@"RnDiffApp"
                                               initialProperties:nil
                                                   launchOptions:launchOptions];
  rootView.backgroundColor = [UIColor blackColor];
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;4.&lt;/strong&gt; Still in &lt;code&gt;ios/APP_NAME/AppDelegate.m&lt;/code&gt; , add the following import:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// ios/APP_NAME/AppDelegate.m 

#import &amp;lt;React/RCTBridge.h&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;5.&lt;/strong&gt; Within the &lt;code&gt;- (BOOL)application:(UIApplication *) ... didFinishLaunchingWithOptions.. {&lt;/code&gt; implementation, add the following. Note, replace &lt;code&gt;YOUR_APP_NAME_HERE&lt;/code&gt; with the name of your app (the name according to XCode).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// ios/APP_NAME/AppDelegate.m 

- (BOOL)application:(UIApplication *) ... 
{
  // Add the following:
  RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];

    RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge 
      moduleName:@"YOUR_APP_NAME_HERE"
      initialProperties:nil];

  rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;6.&lt;/strong&gt; Right before &lt;code&gt;@end&lt;/code&gt; at the end of the file, add the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// ios/APP_NAME/AppDelegate.m 

- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
{
#if DEBUG
  return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
#else
  return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
#endif
}

@end
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Step 11: Trim the Fat! ✂️
&lt;/h4&gt;

&lt;p&gt;As part of the &lt;a href="https://github.com/react-native-community/discussions-and-proposals/issues/6"&gt;Lean Core Initiative&lt;/a&gt;, React Native is starting to remove components that were once shipped with React Native. In this iteration, the following components are affected:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/react-native-community/react-native-async-storage"&gt;&lt;code&gt;&amp;lt;AsyncStorage&amp;gt;&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/itinance/react-native-fs"&gt;&lt;code&gt;&amp;lt;ImageStore&amp;gt;&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/react-native-community/react-native-masked-view"&gt;&lt;code&gt;&amp;lt;MaskedViewIOS&amp;gt;&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/react-native-community/react-native-netinfo"&gt;&lt;code&gt;&amp;lt;NetInfo&amp;gt;&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/react-native-community/react-native-slider"&gt;&lt;code&gt;&amp;lt;Slider&amp;gt;&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/react-native-community/react-native-viewpager"&gt;&lt;code&gt;&amp;lt;ViewPagerAndroid&amp;gt;&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you use any of these components, you will now see some deprecation warnings. ⚠️ Fun!!&lt;/p&gt;

&lt;p&gt;Don’t worry though! These components have migrated to different repos that are now maintained by the React Native community. I’ve linked each community with their corresponding component above.&lt;/p&gt;

&lt;p&gt;To get rid of the warnings, you will need to go through your app and replace any instance of these components with their corrected import.&lt;/p&gt;

&lt;p&gt;For example..&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Replacing  Imports: An Example:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; Install the new library with &lt;code&gt;npm i @react-native-community/viewpager&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt; Link the library: &lt;code&gt;react-native link @react-native-community/viewpager&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.&lt;/strong&gt; Find an instance of &lt;code&gt;ViewPagerAndroid&lt;/code&gt; in your app.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4.&lt;/strong&gt; Remove the React Native import:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Old Code&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;View&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ViewPagerAndroid&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react-native&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;// New Code&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;View&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react-native&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;5.&lt;/strong&gt; Add the new import:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;ViewPager&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@react-native-community/viewpager&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;6.&lt;/strong&gt; Read the new documentation to see if any changes need to be made. In this case, &lt;code&gt;ViewPagerAndroid&lt;/code&gt; needs to be replaced with &lt;code&gt;ViewPager&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Old Code&lt;/span&gt;
&lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
          &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ViewPagerAndroid&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;...&lt;/span&gt;
          &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/ViewPagerAndroid&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;     &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// New Code&lt;/span&gt;
&lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
          &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ViewPager&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;...&lt;/span&gt;
         &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/ViewPager&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;     &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;7.&lt;/strong&gt; Repeat until your deprecations are gone!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A Note About Your&lt;/strong&gt;  &lt;strong&gt;&lt;code&gt;node_modules&lt;/code&gt;&lt;/strong&gt; ℹ️&lt;/p&gt;

&lt;p&gt;Deprecated components can exist in your packages as well! If you see a deprecation, first check to see if a package update to handle the deprecation already exists. If it does not, create a pull request! Or if you’re in a hurry, patch the package yourself 😉&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Patching Packages&lt;/strong&gt;  🚑&lt;/p&gt;

&lt;p&gt;Need to patch a package? My favorite way to do this is with &lt;a href="https://github.com/ds300/patch-package"&gt;patch-package&lt;/a&gt;. This is a library that diffs changes you made to a &lt;code&gt;node_modules package&lt;/code&gt;, saves those changes, and applies those changes every time you run &lt;code&gt;npm i&lt;/code&gt;. Here’s a quick tutorial:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; Run &lt;code&gt;npm i patch-package&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt; Add this post-install script to your &lt;code&gt;package.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"postinstall"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"patch-package"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3.&lt;/strong&gt; Head into your &lt;code&gt;node_modules&lt;/code&gt; and make whatever changes you need to your target dependency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4.&lt;/strong&gt; Once done, run &lt;code&gt;npx patch-package package-name&lt;/code&gt;. This will create a patch file for that particular package. You should commit these files to your project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5.&lt;/strong&gt; Now, anytime you delete your &lt;code&gt;node_modules&lt;/code&gt;, your patch(es) will get added after you run &lt;code&gt;npm i&lt;/code&gt;. 🙌&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 12: Test, Test, Test 🧪
&lt;/h4&gt;

&lt;p&gt;Build your apps. Make sure to run them on actual iOS and Android devices. See any new deprecation warnings? Best to nip them in the bud right now. Note that warnings can also come from within your dependencies!&lt;/p&gt;

&lt;h4&gt;
  
  
  And You’re Done!
&lt;/h4&gt;

&lt;p&gt;Got &lt;code&gt;0.59&lt;/code&gt; working for your project? YOU. ARE. &lt;strong&gt;DONE!&lt;/strong&gt; 🎉 🎉 🎉 🎉&lt;/p&gt;

&lt;p&gt;Go ahead. Build some Android APKs. Some will be built in 64-bit. How can you make sure?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Testing 64-Bit Builds&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; Navigate to your Android release directory (where your release APKs are stored).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt; Connect a 64-bit device&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.&lt;/strong&gt; Run one of the following commands, according to your device’s architecture (ARM or X86):&lt;/p&gt;

&lt;p&gt;&lt;code&gt;adb install --abi arm64-v8a ARM64-APP-NAME-HERE.apk&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;or&lt;/p&gt;

&lt;p&gt;&lt;code&gt;adb install --abi x86_64 X86-APP-NAME-HERE.apk&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4.&lt;/strong&gt; You have now forced the install of a 64-bit app. If it installs and runs correctly, then you are good to go!&lt;/p&gt;

&lt;p&gt;Don’t have an Android device? Just upload your APKs to the Play Store. Google will let you know if you don’t pass the 64-bit test 🙂&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xelyHLeY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/proxy/1%2AfNFOi-aa-bSLwOMpTy3l1g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xelyHLeY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/proxy/1%2AfNFOi-aa-bSLwOMpTy3l1g.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👋 Hi! I’m &lt;a href="http://www.julietterapala.com"&gt;Juliette&lt;/a&gt;. I work at &lt;a href="https://www.eventric.com/"&gt;Eventric&lt;/a&gt; as a Software Developer. Come follow me on Twitter at &lt;a href="https://twitter.com/JulietteR"&gt;@Juliette&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>react</category>
      <category>ios</category>
      <category>android</category>
    </item>
    <item>
      <title>How to Upgrade from React Native 0.57 to 0.59 | Part 1: Upgrading to 0.58</title>
      <dc:creator>JulietteR</dc:creator>
      <pubDate>Tue, 23 Jul 2019 11:29:07 +0000</pubDate>
      <link>https://dev.to/julietter/how-to-upgrade-from-react-native-0-57-to-0-59-part-1-upgrading-to-0-58-492i</link>
      <guid>https://dev.to/julietter/how-to-upgrade-from-react-native-0-57-to-0-59-part-1-upgrading-to-0-58-492i</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fproxy%2F1%2Atg4oPcJpJ7dOTE9x0WstQg.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fproxy%2F1%2Atg4oPcJpJ7dOTE9x0WstQg.jpeg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Hey you! You need to upgrade to 0.59! 📢
&lt;/h4&gt;

&lt;p&gt;If you haven’t already heard, all React Native apps will need to be upgraded to 0.59 by &lt;strong&gt;August 01, 2019&lt;/strong&gt; if you wish to submit updates to the Google Play store. This is due to a new 64-bit requirement set forth by Google Play. They're pretty serious about it:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;By August 1, 2019, all apps that use native code must provide a 64-bit version in addition to the 32-bit version in order to publish an update. This past January, we reiterated that this is required in order to make way for innovation and in anticipation of future Android devices that only support 64-bit code.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Lucky for us, React Native has introduced 64-bits builds in their &lt;code&gt;0.59&lt;/code&gt; release. The problem, though, is that it can be a little tricky to update. That’s why I created this tutorial. Follow along if you want to get your app up the speed and future-proofed for upcoming releases as well.&lt;/p&gt;

&lt;h4&gt;
  
  
  About This Tutorial
&lt;/h4&gt;

&lt;p&gt;In my situation, I needed to upgrade a project from &lt;code&gt;0.57.4&lt;/code&gt; to &lt;code&gt;0.59.8&lt;/code&gt; (Note: A newer &lt;code&gt;0.59.10&lt;/code&gt; has since been released). I also required both an Android and an iOS build.&lt;/p&gt;

&lt;p&gt;When bumping a project up by two minor versions, &lt;strong&gt;I highly suggest upgrading one minor version at a time.&lt;/strong&gt; (e.g. &lt;code&gt;0.57&lt;/code&gt; to &lt;code&gt;0.58&lt;/code&gt;, then &lt;code&gt;0.58&lt;/code&gt; to &lt;code&gt;0.59&lt;/code&gt;). It eases troubleshooting if something goes wrong.&lt;/p&gt;

&lt;p&gt;So if you need to climb up from &lt;code&gt;0.57&lt;/code&gt; like I did, I present to you &lt;strong&gt;Part 1 of 2: Upgrading to 0.58!&lt;/strong&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Part 1: Upgrading to React Native 0.58 ⬆️
&lt;/h4&gt;

&lt;h4&gt;
  
  
  🔑 Key Changes
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;The iOS JavaScriptCore framework now needs to be linked to our app.&lt;/li&gt;
&lt;li&gt;Android’s target 27 SDK is now supported.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Step 1: Update your package.json ⬆️
&lt;/h4&gt;

&lt;p&gt;Open up your &lt;code&gt;package.json&lt;/code&gt; and update the following dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;package.json&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="nl"&gt;"dependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"react"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"16.6.3"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"react-native"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0.58.6"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"devDependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"babel-core"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^7.0.0-bridge.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"react-test-renderer"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"16.6.3"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, delete your &lt;code&gt;node_modules&lt;/code&gt; and reinstall a fresh batch with &lt;code&gt;npm i&lt;/code&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 2: Modernize Babel 🗣
&lt;/h4&gt;

&lt;p&gt;See that Babel upgrade above? Version 7 introduced a new type of Babel config file that is now much preferred, and even required by many libraries that you may use.&lt;/p&gt;

&lt;p&gt;To update:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; Create a new &lt;code&gt;babel.config.js&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt; Port over any configs you may have in your current &lt;code&gt;.babelrc&lt;/code&gt; file. These presets will now need to be exported, like in the example below.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// a basic react native babel.config.js&lt;/span&gt;

&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="na"&gt;presets&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;module:metro-react-native-babel-preset&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3.&lt;/strong&gt; Once done, delete your old &lt;code&gt;.babelrc&lt;/code&gt; file.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 3: Update Flow ⬆️
&lt;/h4&gt;

&lt;p&gt;Here’s an easy one. Open &lt;code&gt;.flowconfig&lt;/code&gt; and update the flow dependency:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// .flowconfig

[version]
^0.92.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you use Flow and run into errors after this update, head over to their &lt;a href="https://github.com/facebook/flow/blob/master/Changelog.md" rel="noopener noreferrer"&gt;changelog&lt;/a&gt; to diagnose any issues.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 4: Link the JavaScriptCore Framework 🔗
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; Open up your XCode project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt; Select your project:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fproxy%2F1%2Ae-16F4qmNUIbdl6V9JIw9w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fproxy%2F1%2Ae-16F4qmNUIbdl6V9JIw9w.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.&lt;/strong&gt; Select your project’s main target settings:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fproxy%2F1%2AQAip1dbngymFpYK22VdXyg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fproxy%2F1%2AQAip1dbngymFpYK22VdXyg.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4.&lt;/strong&gt; Navigate into the &lt;code&gt;Build Phases&lt;/code&gt; screen:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fproxy%2F1%2A3ZhaeWwxJu1CMueVGwU1qA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fproxy%2F1%2A3ZhaeWwxJu1CMueVGwU1qA.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5.&lt;/strong&gt; Under &lt;code&gt;Link Binary With Libraries&lt;/code&gt;, add the &lt;code&gt;JavaScriptCore.framework&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fproxy%2F1%2Ax7LhxNbYVVm7xVaKLCEHHg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fproxy%2F1%2Ax7LhxNbYVVm7xVaKLCEHHg.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fproxy%2F1%2Au6Aqk3Z114iQHG37roeuGw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fproxy%2F1%2Au6Aqk3Z114iQHG37roeuGw.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Be aware that you may need to clean your XCode caches after this change. &lt;a href="https://macpaw.com/how-to/clear-xcode-cache" rel="noopener noreferrer"&gt;Here’s an article that can help with that.&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 5: Update &lt;code&gt;android/build.gradle&lt;/code&gt; ⬆️
&lt;/h4&gt;

&lt;p&gt;Update &lt;code&gt;android/build.gradle&lt;/code&gt; to support some new libraries/SDKs. Don’t delete anything, just update the following version numbers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight groovy"&gt;&lt;code&gt;&lt;span class="c1"&gt;// android/build.gradle&lt;/span&gt;

&lt;span class="n"&gt;buildscript&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
     &lt;span class="n"&gt;ext&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
          &lt;span class="n"&gt;buildToolsVersion&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"28.0.2"&lt;/span&gt;
          &lt;span class="n"&gt;compileSdkVersion&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;28&lt;/span&gt;
          &lt;span class="n"&gt;targetSdkVersion&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;27&lt;/span&gt;
          &lt;span class="n"&gt;supportLibVersion&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"28.0.0"&lt;/span&gt;
     &lt;span class="o"&gt;}&lt;/span&gt;

     &lt;span class="n"&gt;dependencies&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
          &lt;span class="n"&gt;classpath&lt;/span&gt; &lt;span class="s1"&gt;'com.android.tools.build:gradle:3.2.1'&lt;/span&gt;
     &lt;span class="o"&gt;}&lt;/span&gt;

     &lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="nf"&gt;wrapper&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;type:&lt;/span&gt; &lt;span class="n"&gt;Wrapper&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
          &lt;span class="n"&gt;gradleVersion&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'4.7'&lt;/span&gt;
     &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Step 6: Update Gradle ⬆️
&lt;/h4&gt;

&lt;p&gt;Using the new Gradle version of 4.7 (updated in the previous step) will require you to update &lt;code&gt;android/gradle/wrapper/gradle-wrapper.properties&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;distributionUrl=https\://services.gradle.org/distributions/gradle-4.7-all.zip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Step 7: Update &lt;code&gt;android/app/build.gradle&lt;/code&gt; ⬆️
&lt;/h4&gt;

&lt;p&gt;In &lt;code&gt;0.58&lt;/code&gt;, React Native started to introduce 64-bit Android builds. To add this build type:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; First, remove the &lt;code&gt;ndk&lt;/code&gt; section. It will no longer be used:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight groovy"&gt;&lt;code&gt;&lt;span class="n"&gt;android&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
     &lt;span class="n"&gt;defaultConfig&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
          &lt;span class="c1"&gt;// Remove the following:&lt;/span&gt;
          &lt;span class="n"&gt;ndk&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
               &lt;span class="n"&gt;abiFilters&lt;/span&gt; &lt;span class="s2"&gt;"armeabi-v7a"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"x86"&lt;/span&gt;
          &lt;span class="o"&gt;}&lt;/span&gt;
     &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt; Add the &lt;code&gt;“arm64-v8a”&lt;/code&gt; architecture to the following lists:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight groovy"&gt;&lt;code&gt;&lt;span class="n"&gt;android&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;splits&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;abi&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="n"&gt;include&lt;/span&gt; &lt;span class="s2"&gt;"armeabi-v7a"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"x86"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"arm64-v8a"&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
  &lt;span class="n"&gt;buildTypes&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;variant&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;outputs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;each&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="n"&gt;output&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
      &lt;span class="kt"&gt;def&lt;/span&gt; &lt;span class="n"&gt;versionCodes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"armeabi-v7a"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"x86"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"arm64-v8a"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3.&lt;/strong&gt; Finally, since we are only upgrading to React Native &lt;code&gt;0.58.6&lt;/code&gt;, we must specify the React Native dependency that Android should use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight groovy"&gt;&lt;code&gt;&lt;span class="n"&gt;dependencies&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
     &lt;span class="c1"&gt;// implementation "com.facebook.react:reactnative:+"&lt;/span&gt;
     &lt;span class="n"&gt;implementation&lt;/span&gt; &lt;span class="s2"&gt;"com.facebook.react:react-native:0.58.6"&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Step 8: Change Up Android Build Scripts 🚧
&lt;/h4&gt;

&lt;p&gt;For those that use Buck, the build scripts have changed a bit:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; In &lt;code&gt;android/app/BUCK&lt;/code&gt;, replace the for &lt;code&gt;jarfile&lt;/code&gt;/&lt;code&gt;for aarfile&lt;/code&gt; loops with the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;### OLD CODE
&lt;/span&gt;&lt;span class="n"&gt;lib_deps&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;jarfile&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;glob&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;libs/*.jar&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]):&lt;/span&gt;
  &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;jars__&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;jarfile&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;jarfile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rindex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;/&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;jarfile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rindex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;.jar&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
  &lt;span class="n"&gt;lib_deps&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;:&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="nf"&gt;prebuilt_jar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;binary_jar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;jarfile&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;aarfile&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;glob&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;libs/*.aar&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]):&lt;/span&gt;
  &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;aars__&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;aarfile&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;aarfile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rindex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;/&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;aarfile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rindex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;.aar&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
  &lt;span class="n"&gt;lib_deps&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;:&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="nf"&gt;android_prebuilt_aar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;aar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;aarfile&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
 &lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;### NEW CODE
&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;:build_defs.bzl&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;create_aar_targets&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;create_jar_targets&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;lib_deps&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;

&lt;span class="nf"&gt;create_aar_targets&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;glob&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;libs/*.aar&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]))&lt;/span&gt;

&lt;span class="nf"&gt;create_jar_targets&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;glob&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;libs/*.jar&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt; Now, create a new &lt;code&gt;android/app/build_defs.bzl&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# android/app/build_defs.bzl
&lt;/span&gt;
&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Helper definitions to glob .aar and .jar targets&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;create_aar_targets&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;aarfiles&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;aarfile&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;aarfiles&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;aars__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;aarfile&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;aarfile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rindex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;aarfile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rindex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;.aar&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
        &lt;span class="n"&gt;lib_deps&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nf"&gt;android_prebuilt_aar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;aar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;aarfile&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;create_jar_targets&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;jarfiles&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;jarfile&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;jarfiles&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;jars__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;jarfile&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;jarfile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rindex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;jarfile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rindex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;.jar&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
        &lt;span class="n"&gt;lib_deps&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nf"&gt;prebuilt_jar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;binary_jar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;jarfile&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Step 9: Check Your Refs 👀
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;ScrollView&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;CameraRollView&amp;gt;&lt;/code&gt;, and &lt;code&gt;&amp;lt;SwipeableRow&amp;gt;&lt;/code&gt; all got some updates that may cause you trouble if you use any refs in these components.&lt;/p&gt;

&lt;p&gt;This wasn’t an issue in my project, but if it is for you, using &lt;code&gt;createRef()&lt;/code&gt; for these components should get you on your way. More info can be &lt;a href="https://github.com/react-native-community/releases/issues/81#issuecomment-459252692" rel="noopener noreferrer"&gt;found here&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 10: New Round Android Icons! 👏
&lt;/h4&gt;

&lt;p&gt;Last but not least, round Android icons are now supported! &lt;a href="https://dev.to/_s_farias/how-to-create-adaptive-icons-for-android-using-android-studio-459h"&gt;Here’s a great article on how to create these&lt;/a&gt;. Once you’ve created these files, add them to your &lt;code&gt;android/app/src/main/AndroidManifest.xml&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;manifest...&lt;/span&gt;
     &lt;span class="err"&gt;&amp;lt;application...&lt;/span&gt;
          &lt;span class="na"&gt;android:roundIcon=&lt;/span&gt;&lt;span class="s"&gt;"@mipmap/ic_launcher_round"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Step 11: Test, Test, Test 🧪
&lt;/h4&gt;

&lt;p&gt;Build your apps. Make sure to run them on actual iOS and Android devices. See any new deprecation warnings? Best to nip them in the bud right now. Some of these warnings may be coming from your dependencies. See if there are any updates out there. If not, you may need to patch things yourself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Patching Packages&lt;/strong&gt;  🚑&lt;/p&gt;

&lt;p&gt;Need to patch a package? My favorite way to do this is with &lt;a href="https://github.com/ds300/patch-package" rel="noopener noreferrer"&gt;patch-package&lt;/a&gt;. This is a library that diffs changes you made to a &lt;code&gt;node_modules&lt;/code&gt; package, saves those changes, and applies those changes every time you run &lt;code&gt;npm i&lt;/code&gt;. Here’s a quick tutorial:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; Run &lt;code&gt;npm i patch-package&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt; Add this post-install script to your &lt;code&gt;package.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"postinstall"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"patch-package"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3.&lt;/strong&gt; Head into your &lt;code&gt;node_modules&lt;/code&gt; and make whatever changes you need to your target dependency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4.&lt;/strong&gt; Once done, run &lt;code&gt;npx patch-package package-name&lt;/code&gt;. This will create a patch file for that particular package. You should commit these files to your project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5.&lt;/strong&gt; Now, anytime you delete your &lt;code&gt;node_modules&lt;/code&gt;, your patch(es) will get added after you run &lt;code&gt;npm i&lt;/code&gt;. 🙌&lt;/p&gt;

&lt;h4&gt;
  
  
  Next Steps
&lt;/h4&gt;

&lt;p&gt;Got &lt;code&gt;0.58&lt;/code&gt; working for your project? Congrats! 🎉 You’re halfway there!&lt;/p&gt;

&lt;p&gt;Stayed tuned for Part 2: Upgrading to React Native &lt;code&gt;0.59&lt;/code&gt;!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Flaychg7tuxkzt61a0jpv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Flaychg7tuxkzt61a0jpv.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👋 Hi! I’m &lt;a href="http://www.julietterapala.com" rel="noopener noreferrer"&gt;Juliette&lt;/a&gt;. I work at &lt;a href="https://www.eventric.com/" rel="noopener noreferrer"&gt;Eventric&lt;/a&gt; as a Software Developer. Come follow me on Twitter at &lt;a href="https://twitter.com/JulietteR" rel="noopener noreferrer"&gt;@Juliette&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>react</category>
      <category>android</category>
      <category>ios</category>
    </item>
    <item>
      <title>How to Replace a React Native ListView Component with a FlatList Component</title>
      <dc:creator>JulietteR</dc:creator>
      <pubDate>Fri, 21 Jun 2019 22:19:19 +0000</pubDate>
      <link>https://dev.to/julietter/how-to-replace-a-react-native-listview-component-with-a-flatlist-component-427l</link>
      <guid>https://dev.to/julietter/how-to-replace-a-react-native-listview-component-with-a-flatlist-component-427l</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F736%2F1%2AhkyRPx90XRl61s4Ti5oVBg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F736%2F1%2AhkyRPx90XRl61s4Ti5oVBg.png"&gt;&lt;/a&gt;Look familiar?&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;ListView&amp;gt;&lt;/code&gt; was officially deprecated in React Native &lt;code&gt;0.48&lt;/code&gt;. Sometimes, we ignore deprecation warnings (guilty! 🙈) and don't deal with things until they're officially removed. Do yourself a favor and replace your &lt;code&gt;&amp;lt;ListView&amp;gt;&lt;/code&gt;s now. It's easy, will improve your app performance, and will clean up your code ( &lt;strong&gt;Read:&lt;/strong&gt; No. More. &lt;code&gt;DataSource&lt;/code&gt;s!).&lt;/p&gt;

&lt;h3&gt;
  
  
  My &lt;code&gt;&amp;lt;ListView&amp;gt;&lt;/code&gt; Component (Puppies! 🐶)
&lt;/h3&gt;

&lt;p&gt;Here’s a simple class component named &lt;code&gt;&amp;lt;PuppyLitter&amp;gt;&lt;/code&gt; that we will need to update. It takes two props:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;puppies&lt;/code&gt;: An array of objects, one for each puppy in a litter. For example: &lt;code&gt;[{id: 1, name: 'Winky', age: 2}, {id: 2, name: 'Floofy', age: 1} ]&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;getPuppies()&lt;/code&gt;: A function that fetches an updated puppies array.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It renders a &lt;code&gt;&amp;lt;ListView&amp;gt;&lt;/code&gt; full of &lt;code&gt;&amp;lt;PuppyInfo&amp;gt;&lt;/code&gt; components, one for each puppy in the array. A &lt;code&gt;&amp;lt;PuppyInfo&amp;gt;&lt;/code&gt; will render things such as the puppy's name and date of birth.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h3&gt;
  
  
  Our Options
&lt;/h3&gt;

&lt;p&gt;A &lt;code&gt;&amp;lt;ListView&amp;gt;&lt;/code&gt; can be replaced by any of the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://facebook.github.io/react-native/docs/flatlist" rel="noopener noreferrer"&gt;&lt;code&gt;&amp;lt;FlatList&amp;gt;&lt;/code&gt;&lt;/a&gt;: A component that renders a list, such as a list of components.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://facebook.github.io/react-native/docs/sectionlist" rel="noopener noreferrer"&gt;&lt;code&gt;&amp;lt;SectionList&amp;gt;&lt;/code&gt;&lt;/a&gt;: Same as a  but with section support (think of a contact list with section headers labeled A, B, C..)&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://facebook.github.io/react-native/docs/virtualizedlist" rel="noopener noreferrer"&gt;&lt;code&gt;&amp;lt;VirtualizedList&amp;gt;&lt;/code&gt;&lt;/a&gt;: Simple. Very performant. Great for immutable arrays. Not great for an array of objects with property values that change.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To keep things simple, I’ll replace the &lt;code&gt;&amp;lt;ListView&amp;gt;&lt;/code&gt; with a &lt;code&gt;&amp;lt;FlatList&amp;gt;&lt;/code&gt;. I have no need for sections. I just want a list of puppies. The list may change though. Sometimes I'm indecisive and like to rename my puppies.&lt;/p&gt;

&lt;h3&gt;
  
  
  Converting to a &lt;code&gt;&amp;lt;FlatList&amp;gt;&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;First, let’s change our imports:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// import { ListView, RefreshControl, View } from "react-native"&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;FlatList&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;RefreshControl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;View&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react-native&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Next, get rid of all of this.&lt;br&gt;&lt;br&gt;
Really. No more &lt;code&gt;DataSource&lt;/code&gt;s! 🗑&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;p&gt;Let’s simplify our &lt;code&gt;renderRefreshControl()&lt;/code&gt; method:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Finally, update the rendered component:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h4&gt;
  
  
  Some things to note about &lt;code&gt;&amp;lt;FlatList&amp;gt;&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;data&lt;/code&gt; replaces your &lt;code&gt;dataStore&lt;/code&gt; prop. This is where you pass in your array.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;renderItem&lt;/code&gt; replaces &lt;code&gt;renderRow&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;IMPORTANT&lt;/strong&gt; : &lt;code&gt;renderItem&lt;/code&gt; passes an item, &lt;code&gt;🐶&lt;/code&gt;, from the data array, &lt;code&gt;[🐶, 🐶, 🐶]&lt;/code&gt;, within an &lt;em&gt;object&lt;/em&gt;. Your puppy will be the value of an item property within this object: &lt;code&gt;{item: 🐶}&lt;/code&gt; . If you wish to keep your &lt;code&gt;renderRow()&lt;/code&gt; method as is, pass in the item instead. &lt;/p&gt;

&lt;p&gt;Another option:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;renderItem&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{({&lt;/span&gt;&lt;span class="na"&gt;item&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;puppy&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="nx"&gt;_&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;_&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;renderRow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;puppy&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Keys have been added to each rendered item by using the &lt;code&gt;keyExtractor&lt;/code&gt; prop. We'll use the id of the puppy object.&lt;/li&gt;
&lt;li&gt;The new &lt;code&gt;this.renderRefreshControl()&lt;/code&gt; function needs to be bound to the component in &lt;code&gt;onRefresh&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pageSize&lt;/code&gt; does not exist here. Use &lt;code&gt;initialNumToRender&lt;/code&gt; to communicate home many rows to render in the initial batch (approximately how many will fit in the screen at once)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  My Final Component
&lt;/h3&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;p&gt;Doesn’t that look so much better?&lt;br&gt;&lt;br&gt;
It’s way more performant too! 🏁&lt;/p&gt;




&lt;p&gt;👋 Hi! I’m &lt;a href="http://www.julietterapala.com" rel="noopener noreferrer"&gt;Juliette&lt;/a&gt;. I work at &lt;a href="https://www.eventric.com/" rel="noopener noreferrer"&gt;Eventric&lt;/a&gt; as a Software Developer. Come follow me on Twitter at &lt;a href="https://twitter.com/JulietteR" rel="noopener noreferrer"&gt;@Juliette&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>react</category>
      <category>android</category>
      <category>ios</category>
    </item>
    <item>
      <title>Tutorial: How to Fix a Failing Android Build Due to [androidx.core:core:1.0.0] Issues (June 2019)</title>
      <dc:creator>JulietteR</dc:creator>
      <pubDate>Wed, 19 Jun 2019 02:48:42 +0000</pubDate>
      <link>https://dev.to/julietter/tutorial-how-to-fix-a-failing-android-build-due-to-androidx-core-core-1-0-0-issues-june-2019-4hde</link>
      <guid>https://dev.to/julietter/tutorial-how-to-fix-a-failing-android-build-due-to-androidx-core-core-1-0-0-issues-june-2019-4hde</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_rohEytb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2ALR5N28VEu0_KgRNsyj_qAw.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_rohEytb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2ALR5N28VEu0_KgRNsyj_qAw.jpeg" alt=""&gt;&lt;/a&gt;Photo by &lt;a href="https://www.instagram.com/johnnywharris/"&gt;Johnny Wharris&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you’re a React Native developer like me, you may have been surprised to see your Android build that JUST WORKED, failing and failing and failing again.&lt;/p&gt;

&lt;p&gt;The issue, if you’re in Android Studio, went something like this:&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Caused by: java.lang.RuntimeException: Manifest merger failed : Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18–91
 is also present at [androidx.core:core:1.0.0] AndroidManifest.xml:22:18–86 value=(androidx.core.app.CoreComponentFactory).
 Suggestion: add ‘tools:replace=”android:appComponentFactory”’ to \&amp;lt;application\&amp;gt; element at manifestMerger6369655802117611865.xml:7:5–9:19 to override.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Did you think to yourself &lt;em&gt;“Huh? AndroidX? I’m not supporting that yet.”&lt;/em&gt;, then follow along. Here’s how to fix the issue without adding AndroidX support.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Happened?
&lt;/h3&gt;

&lt;p&gt;Google pulled a fast one on us yesterday (June 17, 2019) and released a &lt;a href="https://developers.google.com/android/guides/releases"&gt;MAJOR version update&lt;/a&gt; on it’s &lt;code&gt;Google Play&lt;/code&gt; and &lt;code&gt;Firebase&lt;/code&gt; libraries. That means, any dependencies imported to the tune of:&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight groovy"&gt;&lt;code&gt;&lt;span class="n"&gt;implementation&lt;/span&gt; &lt;span class="err"&gt;‘&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;google&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;android&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;gms&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;play&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;services&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nl"&gt;base:&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="err"&gt;’&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;…(note the &lt;code&gt;+&lt;/code&gt;) will be affected.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to Fix It
&lt;/h3&gt;

&lt;p&gt;1) Hop over to your &lt;code&gt;/android/app/build.gradle&lt;/code&gt; file and check out your dependencies. Search for any instance of &lt;code&gt;play-services&lt;/code&gt; or &lt;code&gt;firebase&lt;/code&gt;* and see if it’s pulling in the latest version (&lt;code&gt;+&lt;/code&gt;).&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight groovy"&gt;&lt;code&gt;&lt;span class="n"&gt;dependencies&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;implementation&lt;/span&gt; &lt;span class="err"&gt;"&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;android&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;support&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;appcompat&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;
  &lt;span class="n"&gt;implementation&lt;/span&gt; &lt;span class="s2"&gt;"com.facebook.react:react-native:+"&lt;/span&gt;
  &lt;span class="c1"&gt;// found one! vv&lt;/span&gt;
  &lt;span class="n"&gt;implementation&lt;/span&gt; &lt;span class="s2"&gt;"com.google.android.gms:play-services-base:+"&lt;/span&gt;
  &lt;span class="c1"&gt;// found one! vv&lt;/span&gt;
  &lt;span class="n"&gt;implementation&lt;/span&gt; &lt;span class="s2"&gt;"com.google.android.gms:play-services-maps:+"&lt;/span&gt;
  &lt;span class="n"&gt;implementation&lt;/span&gt; &lt;span class="s2"&gt;"com.google.firebase:firebase-core:16.0.1"&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;2) Head over to &lt;a href="https://mvnrepository.com/"&gt;MVNRepository&lt;/a&gt; and search for the troublesome dependencies. Here you’ll be able to find the last released version of your module. Update &lt;code&gt;/android/app/build.gradle&lt;/code&gt; to that version along with a force flag to handle any version conflicts:&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight groovy"&gt;&lt;code&gt;&lt;span class="n"&gt;dependencies&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
 &lt;span class="n"&gt;implementation&lt;/span&gt; &lt;span class="err"&gt;"&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;android&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;support&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;appcompat&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;
 &lt;span class="n"&gt;implementation&lt;/span&gt; &lt;span class="s2"&gt;"com.facebook.react:react-native:+"&lt;/span&gt;
 &lt;span class="n"&gt;implementation&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"com.google.android.gms:play-services-base:16.1.0"&lt;/span&gt;&lt;span class="o"&gt;){&lt;/span&gt; &lt;span class="n"&gt;force&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
 &lt;span class="n"&gt;implementation&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"com.google.android.gms:play-services-maps:16.1.0"&lt;/span&gt;&lt;span class="o"&gt;){&lt;/span&gt; &lt;span class="n"&gt;force&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
 &lt;span class="n"&gt;implementation&lt;/span&gt; &lt;span class="s2"&gt;"com.google.firebase:firebase-core:16.0.1"&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;3) Time to handle your &lt;code&gt;node_modules&lt;/code&gt;. Navigate into &lt;code&gt;/android&lt;/code&gt; and run the following command:&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;./gradlew :app:dependencies
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;This will generate a dependency tree for your entire project.&lt;/p&gt;

&lt;p&gt;4) Grab the tree and paste in into a text editor. Search for any instance of &lt;code&gt;play-services&lt;/code&gt; or &lt;code&gt;firebase&lt;/code&gt;* and navigate up the tree to see where the module is being used. In this case, &lt;code&gt;react-native-push-notifications&lt;/code&gt; has a &lt;code&gt;com.google.android.gms:play-services-gcm:+&lt;/code&gt; dependency.&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;+ — — project :react-native-push-notification
 | + — — com.android.support:appcompat-v7:28.0.0 &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="se"&gt;\*&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
 | + — — com.facebook.react:react-native:+ -&lt;span class="se"&gt;\&amp;gt;&lt;/span&gt; 0.59.8 &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="se"&gt;\*&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
 | + — — com.google.android.gms:play-services-gcm:+ -&lt;span class="se"&gt;\&amp;gt;&lt;/span&gt; 17.0.0 &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="se"&gt;\*&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
 | + — — me.leolin:ShortcutBadger:1.1.8
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;5) Patch those packages! If I am in a time crunch, I will use &lt;a href="https://github.com/ds300/patch-package"&gt;&lt;code&gt;patch-package&lt;/code&gt;&lt;/a&gt;, a genius library that lets you make changes to a package and then creates a patch for you to store with your project. The patch will then apply via a &lt;code&gt;postinstall&lt;/code&gt; any time you or someone on your team runs &lt;code&gt;npm i&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;In my case, I navigated to the &lt;code&gt;build.gradle&lt;/code&gt; file of &lt;code&gt;react-native-push-notification&lt;/code&gt;, made my updates, ran:&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;npx patch-package react-native-push-notification
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;…and voila! I have a patch!&lt;/p&gt;

&lt;h4&gt;
  
  
  And You’re Done!
&lt;/h4&gt;

&lt;p&gt;In my case, I needed to apply patches to both &lt;code&gt;react-native-push-notification&lt;/code&gt; and &lt;code&gt;react-native-push-notification&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Do note that this is just a band-aid until you’re ready to support AndroidX and all its glory 🤖&lt;/p&gt;

&lt;p&gt;Hope this helps!&lt;/p&gt;

&lt;p&gt;*For a full list of updated dependencies navigate &lt;a href="https://developers.google.com/android/guides/releases"&gt;here&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;👋 Hi! I’m &lt;a href="http://www.julietterapala.com"&gt;Juliette&lt;/a&gt;. I work at &lt;a href="https://www.eventric.com/"&gt;Eventric&lt;/a&gt; as a Software Developer. Come follow me on Twitter at &lt;a href="https://twitter.com/JulietteR"&gt;@Juliette&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>androidstudio</category>
      <category>android</category>
      <category>reactnative</category>
      <category>mobileappdevelopment</category>
    </item>
  </channel>
</rss>
