<?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>Forem: Alexandre C.</title>
    <description>The latest articles on Forem by Alexandre C. (@alexcoding42).</description>
    <link>https://forem.com/alexcoding42</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%2F657584%2Feb264652-6987-4ffe-a6ae-8838fb9cb97e.png</url>
      <title>Forem: Alexandre C.</title>
      <link>https://forem.com/alexcoding42</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/alexcoding42"/>
    <language>en</language>
    <item>
      <title>WHY I BELIEVE IN CROSS-PLATFORM TECHNOLOGIES</title>
      <dc:creator>Alexandre C.</dc:creator>
      <pubDate>Wed, 01 Mar 2023 21:43:01 +0000</pubDate>
      <link>https://forem.com/alexcoding42/why-i-believe-in-cross-platform-technologies-4kmd</link>
      <guid>https://forem.com/alexcoding42/why-i-believe-in-cross-platform-technologies-4kmd</guid>
      <description>&lt;p&gt;In 2023, we really have a choice to develop a mobile application (web is even worse, I don't know how they manage to decide 😄). Without getting into the eternal native vs. cross-platform debate, I will explain here why I believe that choosing a cross-platform technology like Flutter or React Native is truly relevant for starting a mobile application project in 2023:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Get 2 applications for once: you get a REAL mobile application for both iOS and Android at the same time. And it comes with all the other bonuses! Maintaining a single codebase, recruiting/managing a single mobile development team instead of separately for iOS and Android.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Meet functional and business needs: when you take a step back, you'll notice that the vast majority of mobile applications boil down to displaying UI, dynamic lists of content, search journeys, detail pages, features like user authentication, saving favorites, notifications, API calls and database for displaying or updating content, etc... Nothing that cross-platform technologies cannot do in 2023.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Get good quality and performance: I know, it's a big topic, especially if developers are reading this. But in reality, cross-platform mobile applications are as performant and high-quality as native applications today; many expert studies show this. Take your phone, download Facebook, Tesla, Discord, BMW, Sncf Connect applications (all cross-platform) and tell me if as a user, you see a real shocking difference in terms of fluidity, UI and user experience.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Manage cost: it's not news that the tech industry is struggling right now, with all the layoffs, especially in the USA. Huge blind investments are rare and the big growth of tech companies has slowed down. The industry is currently in a period of cost reduction, and it impacts everyone, including projects. In my opinion, cross-platform has its best card to play right now.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Target several devices: few companies want just a mobile application. Often they also want a website or web application. People buy more phones or tablets than PCs. New devices are selling more and more (smart watches, VR headsets, embedded dashboards in cars...). So many platforms for which companies would want to offer an application to their users. Again, cross-platform technologies have already anticipated this evolution and are doing well.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The list is not exhaustive, there are other benefits. In 2023, I think we need to dare changing our approach and questioning some status quos. And above all, try to look ahead and anticipate the future by making appropriate choices.&lt;/p&gt;

</description>
      <category>mobile</category>
      <category>flutter</category>
      <category>reactnative</category>
      <category>crossplatform</category>
    </item>
    <item>
      <title>How to set environment variables with EAS/Expo and React Native</title>
      <dc:creator>Alexandre C.</dc:creator>
      <pubDate>Fri, 27 Jan 2023 05:33:46 +0000</pubDate>
      <link>https://forem.com/alexcoding42/how-to-set-environment-variables-with-easexpo-and-react-native-3b2n</link>
      <guid>https://forem.com/alexcoding42/how-to-set-environment-variables-with-easexpo-and-react-native-3b2n</guid>
      <description>&lt;p&gt;Most of the time your project will need to handle environment variables such as API Url or API key. As it is unsafe to store your keys and sensitive data on Github/Gitlab or hardcoded in your project, the best solution when it comes to React Native project is to benefit from EAS and Expo configuration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Your React Native project should be configured to use EAS, follow &lt;a href="https://docs.expo.dev/build/setup/" rel="noopener noreferrer"&gt;this documentation&lt;/a&gt; if it's not the case.&lt;/p&gt;

&lt;p&gt;Then if your project is already managed by Expo you should have the &lt;code&gt;expo-constants&lt;/code&gt; package, if not you can install it following &lt;a href="https://dev.tonpx%20expo%20install%20expo-constants"&gt;these instructions&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Last you have to install &lt;code&gt;dotenv&lt;/code&gt; package in your project&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npx expo install dotenv&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Configure your environment variables
&lt;/h2&gt;

&lt;p&gt;First important thing, at the root of your project you must convert the &lt;em&gt;app.json&lt;/em&gt; file to &lt;em&gt;app.config.js&lt;/em&gt; file&lt;/p&gt;

&lt;h3&gt;
  
  
  Plaintext environment variables
&lt;/h3&gt;

&lt;p&gt;In your &lt;em&gt;eas.json&lt;/em&gt; file you can add plaintext/harcoded environment variables that you are comfortable with committing to your source code. For example API Url. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Warning&lt;/strong&gt;&lt;br&gt;
Don't put secrets here!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;eas.json&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp78qq3902phyhcltzv6c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp78qq3902phyhcltzv6c.png" alt="eas" width="800" height="1005"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then in your &lt;em&gt;app.config.js&lt;/em&gt; you must reference these variables like this&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;app.config.js&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcs184wyn7bi26v3ny5wn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcs184wyn7bi26v3ny5wn.png" alt="extra plaintext" width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Secrets
&lt;/h3&gt;

&lt;p&gt;To manage secrets in your environment variables you have to create a new secret with EAS CLI&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;eas secret:create --scope project --name SECRET_NAME --value secretvalue --type string&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;To view any existing secrets for your project, run&lt;br&gt;
&lt;br&gt;
 &lt;code&gt;eas secret:list&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;You can also importing your secrets from a &lt;em&gt;.env&lt;/em&gt; file&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;eas secret:push --scope project --env-file .env&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Then to access your secrets you need to configure your &lt;em&gt;app.config.js&lt;/em&gt; file&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa6a7it7gpp8ylc9t7dcs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa6a7it7gpp8ylc9t7dcs.png" alt="extra secrets" width="800" height="526"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Access your environment variables in your project
&lt;/h2&gt;

&lt;p&gt;To use environment variables in your project it is easy using &lt;code&gt;expo-constants&lt;/code&gt; package.&lt;/p&gt;

&lt;p&gt;For example in a screen&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3zyklr0ey99a6c05ourb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3zyklr0ey99a6c05ourb.png" alt="access constants" width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For more details and configuration you can always to the &lt;a href="https://docs.expo.dev/build-reference/variables/#using-plaintext-environment-variables" rel="noopener noreferrer"&gt;official Expo and EAS documentation&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gratitude</category>
    </item>
    <item>
      <title>How to submit for review your iOS and Android applications with EAS and React Native</title>
      <dc:creator>Alexandre C.</dc:creator>
      <pubDate>Thu, 26 Jan 2023 10:43:30 +0000</pubDate>
      <link>https://forem.com/alexcoding42/how-to-submit-for-review-your-ios-and-android-applications-with-eas-and-react-native-4boc</link>
      <guid>https://forem.com/alexcoding42/how-to-submit-for-review-your-ios-and-android-applications-with-eas-and-react-native-4boc</guid>
      <description>&lt;p&gt;With EAS you can submit for review your React Native app, directly from terminal. No need to do it manually from the stores dashboards.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;For both iOS and Android you should have filled in the required fields and have created a new app from the dashboards. You can follow &lt;a href="https://dev.to/alexcoding42/how-to-submit-your-mobile-application-on-app-store-408i"&gt;this guide&lt;/a&gt; to understand how to proceed for iOS, and &lt;a href="https://dev.to/alexcoding42/how-to-submit-your-mobile-application-on-play-store-1l8i"&gt;this guide&lt;/a&gt; for Android.&lt;/p&gt;

&lt;p&gt;Also, you must have installed the EAS CLI. You can refer to &lt;a href="https://docs.expo.dev/build/setup/" rel="noopener noreferrer"&gt;this guide&lt;/a&gt; to see how to proceed&lt;/p&gt;

&lt;h2&gt;
  
  
  iOS
&lt;/h2&gt;

&lt;p&gt;For iOS you need to configure the &lt;code&gt;eas.json&lt;/code&gt; file as follow&lt;/p&gt;

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

"submit": {
    "production": {
      "ios": {
        "appleId": "your.apple.id.username",
        "ascAppId": "123456789",
        "appleTeamId": "1AB2C3D45E"
      }
    }
  }


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Apple ID&lt;/strong&gt; is the username of your Apple Developer Account, the email that you use to connect to your Apple account&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ascAppID&lt;/strong&gt; is the App Store Connect unique application Apple ID number. You can find it under App Information section when you created your app on App Store Connect&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fztpqzi8ingrlumnmqt4b.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fztpqzi8ingrlumnmqt4b.png" alt="ascAppID"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;appleTeamId&lt;/strong&gt; is your Apple Developer Team ID. You can find it under you Profile 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F27rv5uo1koj9bwms899f.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F27rv5uo1koj9bwms899f.png" alt="apple team ID"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When &lt;code&gt;eas.json&lt;/code&gt; file is configured correctly, open a terminal and run&lt;/p&gt;

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

eas submit --platform ios


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;That's all your app should be submitted for review. You can refer to the &lt;a href="https://docs.expo.dev/submit/ios/" rel="noopener noreferrer"&gt;official documentation&lt;/a&gt; to get more information and configuration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Android
&lt;/h2&gt;

&lt;p&gt;For Android the steps are different, you need to create a &lt;a href="https://cloud.google.com/iam/docs/creating-managing-service-accounts" rel="noopener noreferrer"&gt;Google Service Account&lt;/a&gt; and download its JSON private key&lt;/p&gt;

&lt;h3&gt;
  
  
  Prerequisite
&lt;/h3&gt;

&lt;p&gt;Your Android app must have been submitted manually once before.&lt;/p&gt;

&lt;h3&gt;
  
  
  Create a Google Service Account
&lt;/h3&gt;

&lt;p&gt;You need to connect to your &lt;a href="https://console.cloud.google.com/" rel="noopener noreferrer"&gt;Google Cloud Console&lt;/a&gt;, select your project and search for the &lt;em&gt;Services Accounts&lt;/em&gt; section, then click &lt;code&gt;Create Service Account&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmxh6yws8qe6ouz4zzsxh.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmxh6yws8qe6ouz4zzsxh.png" alt="create service account"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can fill in the required fields as follow&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe3oym11u5kuh7rsqloyi.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe3oym11u5kuh7rsqloyi.png" alt="service account details"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then you need to select a role for your service account. Choose &lt;code&gt;Service Account User&lt;/code&gt; and click &lt;code&gt;Done&lt;/code&gt; button.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffnbher0hijoq5y5dn9u6.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffnbher0hijoq5y5dn9u6.png" alt="role"&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqrb95s2p1ntthftm2f33.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqrb95s2p1ntthftm2f33.png" alt="service account user"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you are back on the services accounts dashboard you need to create a new key for your service account&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6zz7t63khekljada59ld.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6zz7t63khekljada59ld.png" alt="new key"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then create a new key&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fti1hczwjpuvtz1s4m7kn.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fti1hczwjpuvtz1s4m7kn.png" alt="new key"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And choose JSON format&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvf75fc2qc8khx6wogqun.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvf75fc2qc8khx6wogqun.png" alt="json format"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can download the json file and rename it as you want. I recommend name it &lt;em&gt;service_account.json&lt;/em&gt; for better clarity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Start the submission
&lt;/h3&gt;

&lt;p&gt;Now that you have the JSON service account file you need to like it to your project. At the root of your project upload your &lt;em&gt;service account json file&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;And configure your &lt;code&gt;eas.json&lt;/code&gt; file as follow&lt;/p&gt;

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

"submit": {
    "production": {
      "android": {
        "serviceAccountKeyPath": "./service_account.json",
        "track": "production"
      }
    }
  }


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Warning&lt;/strong&gt;&lt;br&gt;
Don't forget to add &lt;em&gt;service_account.json&lt;/em&gt; file to your .gitignore !&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You can now submit your app to Play Store&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 submit --platform android

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;You can refer to the &lt;a href="https://docs.expo.dev/submit/android/" rel="noopener noreferrer"&gt;official documentation&lt;/a&gt; for more information and configuration&lt;/p&gt;

&lt;h2&gt;
  
  
  Final eas.json file
&lt;/h2&gt;

&lt;p&gt;Your final eas.json file should look like this&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fimagh1beg3vneaov97w6.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fimagh1beg3vneaov97w6.png" alt="eas config"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ios</category>
      <category>android</category>
      <category>eas</category>
      <category>reactnative</category>
    </item>
    <item>
      <title>How to submit your Android application on Play Store</title>
      <dc:creator>Alexandre C.</dc:creator>
      <pubDate>Wed, 25 Jan 2023 18:00:16 +0000</pubDate>
      <link>https://forem.com/alexcoding42/how-to-submit-your-mobile-application-on-play-store-1l8i</link>
      <guid>https://forem.com/alexcoding42/how-to-submit-your-mobile-application-on-play-store-1l8i</guid>
      <description>&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;You should have at least one .aab file, which is production ready generated build.&lt;br&gt;
You can take a look at &lt;a href="https://dev.to/alexcoding42/how-to-create-production-builds-for-app-store-and-play-store-with-easexpo-and-react-native-491d"&gt;this article&lt;/a&gt; if you want to learn how to generate a production ready build with React Native and EAS/Expo&lt;/p&gt;

&lt;p&gt;Besides you should have an &lt;a&gt;Google Developer Account&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Create an app
&lt;/h2&gt;

&lt;p&gt;When connecting to your Google Play Console dashboard you can click the &lt;code&gt;Create App&lt;/code&gt; button&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lQBdnLM3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/57es9ktr4zu9vvc60lql.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lQBdnLM3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/57es9ktr4zu9vvc60lql.png" alt="create app button" width="880" height="257"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then you must fill the required fields and accept the declarations&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Yb2tBlZz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9a4yyg6ab5i26untnj10.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Yb2tBlZz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9a4yyg6ab5i26untnj10.png" alt="create app" width="880" height="550"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Set up your app
&lt;/h2&gt;

&lt;p&gt;This is the most important section, all sections must be filled&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3xeQwLAL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rnexwxjv7en1k8qu73f2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3xeQwLAL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rnexwxjv7en1k8qu73f2.png" alt="set up app" width="880" height="548"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Privacy Policy
&lt;/h3&gt;

&lt;p&gt;I recommend to use a privacy policy generator to handle your privacy policies. You can find one &lt;a href="https://app.privacypolicies.com/"&gt;here&lt;/a&gt; which is free.&lt;/p&gt;

&lt;h3&gt;
  
  
  App Access
&lt;/h3&gt;

&lt;p&gt;If your app has limited access such as authentication, protected screens you shoud provide instructions and account details that a Google member can use to test your app&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--p8TaT3xM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6qyuz17kl1ee2i654jkp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--p8TaT3xM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6qyuz17kl1ee2i654jkp.png" alt="app access" width="880" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Ads
&lt;/h3&gt;

&lt;p&gt;Check if yes or not your app contains advertising&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jr29fI5T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w5nq0qo9kpqk8adhv9ba.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jr29fI5T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w5nq0qo9kpqk8adhv9ba.png" alt="ads" width="880" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Content ratings
&lt;/h3&gt;

&lt;p&gt;Start answering the questions to determine the minimum age rating of your app. Remember that telling the thruth will speed up the reviewing process because your app will be tested entirely first&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Zxg_3OL8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bcaxapmrtvn0m0g50osf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Zxg_3OL8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bcaxapmrtvn0m0g50osf.png" alt="content ratings" width="880" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Target audience and content
&lt;/h3&gt;

&lt;p&gt;This section should be filled quickly if you correctly filled the ads and app access sections&lt;/p&gt;

&lt;h3&gt;
  
  
  News app
&lt;/h3&gt;

&lt;p&gt;Just indicate if your app is a news app or not&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--H_QXGKVY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ki8rg642lvz4ewhcvdke.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--H_QXGKVY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ki8rg642lvz4ewhcvdke.png" alt="news app" width="880" height="335"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Covid-19 contact tracing and status app
&lt;/h3&gt;

&lt;p&gt;Just indicate if your app involves in any way status about covid and contact tracing&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NP38SktF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qpa3fpg6gwrb6z0jemg8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NP38SktF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qpa3fpg6gwrb6z0jemg8.png" alt="covid-19" width="880" height="241"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Data safety
&lt;/h3&gt;

&lt;p&gt;You should read carefully this section and answer according to your app specificity&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BPZlv6jH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/99cg8wg0jnaa76ci0m5m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BPZlv6jH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/99cg8wg0jnaa76ci0m5m.png" alt="data safety" width="880" height="669"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Government apps
&lt;/h3&gt;

&lt;p&gt;Just indicate if your app is developed by or on behalf of a government&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WZ2aGS8G--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xs7pwvywchxh4f7jf07f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WZ2aGS8G--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xs7pwvywchxh4f7jf07f.png" alt="government apps" width="880" height="337"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Store settings
&lt;/h3&gt;

&lt;p&gt;This section is where you can configure the global info of your app on the store such as app category and contact details&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dkGOJEi4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ljmmuszsfk00wsdsel17.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dkGOJEi4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ljmmuszsfk00wsdsel17.png" alt="store settings" width="880" height="624"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Main store listing
&lt;/h3&gt;

&lt;p&gt;In this section you can fill all information that should be displayed on the Play Store such as app name, description, screenshots&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3Bztpxnc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yvwzwdrntmzjdqspi95t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3Bztpxnc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yvwzwdrntmzjdqspi95t.png" alt="main store listing" width="880" height="693"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Release your app
&lt;/h2&gt;

&lt;p&gt;This is the last required section where you can upload your .aab file, select countries and regions where you wish the app to be deployed, select group of testers and submit your app for review&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xOchtLUS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u3tom5y36ynfxrkz889e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xOchtLUS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u3tom5y36ynfxrkz889e.png" alt="release your app" width="880" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Deployment
&lt;/h2&gt;

&lt;p&gt;Once your app has been reviewed it should be automatically available on Play Store, you will receive an email. It can take more than 2 days nowadays to review an Android app so be patient 😉&lt;/p&gt;

</description>
      <category>mobile</category>
      <category>application</category>
      <category>submission</category>
      <category>playstore</category>
    </item>
    <item>
      <title>How to submit your iOS application on App Store</title>
      <dc:creator>Alexandre C.</dc:creator>
      <pubDate>Wed, 25 Jan 2023 09:35:23 +0000</pubDate>
      <link>https://forem.com/alexcoding42/how-to-submit-your-mobile-application-on-app-store-408i</link>
      <guid>https://forem.com/alexcoding42/how-to-submit-your-mobile-application-on-app-store-408i</guid>
      <description>&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;You should have at least one &lt;em&gt;.ipa file&lt;/em&gt;, which is a generated build for iOS ready for production.&lt;br&gt;
You can take a look at &lt;a href="https://dev.to/alexcoding42/how-to-create-production-builds-for-app-store-and-play-store-with-easexpo-and-react-native-491d"&gt;this article&lt;/a&gt; if you want to learn how to generate a production ready build with React Native and EAS/Expo&lt;/p&gt;

&lt;p&gt;Besides you should have an &lt;a&gt;Apple Developer Account&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Create an app
&lt;/h2&gt;

&lt;p&gt;When you are connected to your developer account, you can click on My Apps from the dashboard&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--r3IZSM7g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3m536638gnz1irax572m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--r3IZSM7g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3m536638gnz1irax572m.png" alt="app store dashboard" width="880" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then create a new app by clicking on the + icon&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--thAnURJv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5nqprtqkbtwp2txihksy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--thAnURJv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5nqprtqkbtwp2txihksy.png" alt="create app" width="880" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Choose &lt;code&gt;New app&lt;/code&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KGji00Pg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s36hwghm6r4zfjr12r3v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KGji00Pg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s36hwghm6r4zfjr12r3v.png" alt="new app" width="880" height="490"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Configure your new app like this&lt;br&gt;
&lt;strong&gt;Bundle ID&lt;/strong&gt; should be the one you use in Xcode, you can create a new one or choose an existing one&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SKU&lt;/strong&gt; is a unique ID for your app, I recommend using the same as the bundle ID&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;User Access&lt;/strong&gt; by default should be &lt;code&gt;Full Access&lt;/code&gt; to make your app available to everyone. But if it is an admin app for example you can choose &lt;code&gt;Limited Access&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Fill in the details
&lt;/h2&gt;

&lt;p&gt;The most important section appears first where you have to upload screenshots. You should fill in all the required fields.&lt;/p&gt;

&lt;p&gt;For the &lt;strong&gt;Support URL&lt;/strong&gt; I recommend using the one from a privacy policies generator where your privacy policies are stored, or the url of your website&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;Marketing URL&lt;/strong&gt; you can put the name of your website/portfolio&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jmlckHbr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rp44ftxqevlxe7qlb1ki.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jmlckHbr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rp44ftxqevlxe7qlb1ki.png" alt="version information" width="880" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Build section
&lt;/h3&gt;

&lt;p&gt;Under the &lt;strong&gt;Build&lt;/strong&gt; section should appear the binary that you uploaded from Xcode or another tool. For example in React Native with EAS you just have to configure the &lt;code&gt;eas.json&lt;/code&gt; file like this&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0fgnS50S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/witcl0res4dzjc8cgw1o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0fgnS50S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/witcl0res4dzjc8cgw1o.png" alt="eas json" width="880" height="1129"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can find the &lt;strong&gt;ascAppId&lt;/strong&gt; from the App Store connect dashboard under App Information section&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qEgXJsFp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/33v1h0ld5c2n7m1rivc6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qEgXJsFp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/33v1h0ld5c2n7m1rivc6.png" alt="ascAppId" width="880" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;appleTeamId&lt;/strong&gt; can be found in your App Store settings profile&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Jzh9FRWc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t06e1i9lj8upru4vtrcp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Jzh9FRWc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t06e1i9lj8upru4vtrcp.png" alt="apple team ID" width="880" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then, to upload your iOS app to the Apple App Store, run &lt;code&gt;eas submit --platform ios&lt;/code&gt; from a terminal&lt;/p&gt;

&lt;h3&gt;
  
  
  App Review Information
&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;App Review Information&lt;/strong&gt; must be checked and filled &lt;strong&gt;only if&lt;/strong&gt; your app contains any authentication. You should provide an account that an Apple support member can use to authenticate through your app, and describe the steps in &lt;em&gt;Notes&lt;/em&gt;. You can also provide a video in &lt;em&gt;Attachment&lt;/em&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--V5oA6mgW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mrz3weei6vp598jh0021.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--V5oA6mgW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mrz3weei6vp598jh0021.png" alt="app review info" width="880" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  App Information
&lt;/h2&gt;

&lt;p&gt;You must fill in the details according to your needs in this section&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DNWwksTb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5igwdkueg3ei1t7ale9c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DNWwksTb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5igwdkueg3ei1t7ale9c.png" alt="app information" width="880" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Pricing and Availability
&lt;/h2&gt;

&lt;p&gt;You must fill in the details according to your needs in this section&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--e9ZY9s-V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c5ybzh0pwoxmtujooynt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--e9ZY9s-V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c5ybzh0pwoxmtujooynt.png" alt="pricing" width="880" height="597"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  App Privacy
&lt;/h2&gt;

&lt;p&gt;A very important section. You should fill in the details of your privacy policies according to your app features. This is important to tell the truth as your app will be review by a member of Apple team, and rejection of your app can delay your production deployment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ytk__lZR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e90e22gk54mkubcchzcv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ytk__lZR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e90e22gk54mkubcchzcv.png" alt="privacy policies" width="880" height="643"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I recommend strongly to use this &lt;a href="https://app.privacypolicies.com/"&gt;privacy policies generator&lt;/a&gt; to ease the process, and you can get a free URL storing your privacy policies&lt;/p&gt;

&lt;h2&gt;
  
  
  Submit your app for review
&lt;/h2&gt;

&lt;p&gt;Other sections are not mandatory you can fill in if you want.&lt;/p&gt;

&lt;p&gt;When everything is filled you can go back to the dashboard or your app and click on &lt;code&gt;Add for Review&lt;/code&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PKkI-SHk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8as1utnwarn3mylqijzk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PKkI-SHk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8as1utnwarn3mylqijzk.png" alt="add for review" width="880" height="159"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Ready for sale
&lt;/h2&gt;

&lt;p&gt;When your app is available on App Store, the status should change to &lt;code&gt;Ready for Sale&lt;/code&gt; from your app dashboard. Please note that the review process can take few days according to the complexity of your app and the detailed information that you have filled. It is important to give clear and accurate information to speed the process.&lt;/p&gt;

</description>
      <category>appstore</category>
      <category>mobile</category>
      <category>application</category>
      <category>submission</category>
    </item>
    <item>
      <title>How to create production builds for App Store and Play Store with EAS/Expo and React Native</title>
      <dc:creator>Alexandre C.</dc:creator>
      <pubDate>Tue, 24 Jan 2023 08:45:15 +0000</pubDate>
      <link>https://forem.com/alexcoding42/how-to-create-production-builds-for-app-store-and-play-store-with-easexpo-and-react-native-491d</link>
      <guid>https://forem.com/alexcoding42/how-to-create-production-builds-for-app-store-and-play-store-with-easexpo-and-react-native-491d</guid>
      <description>&lt;p&gt;Through this guide I will walktrough the steps that are required to create production builds with EAS that are ready to be deployed on the stores.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;In order to follow it you must have the &lt;code&gt;eas-cli&lt;/code&gt; installed on your machine. If it is not the case you can run from a terminal ```npm&lt;br&gt;
&lt;br&gt;
 install -g eas-cli&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
According to [Expo documentation](https://docs.expo.dev/build/setup/) with EAS CLI you can either deploy a bare React Native app or an app that has been created with Expo.

## Login into your Expo account

First you need to login by typing into a terminal ```eas

 login

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;If you are already signed in to an Expo account using Expo CLI, you can skip this step you should be already automatically logged in&lt;/p&gt;

&lt;h2&gt;
  
  
  Configure the project
&lt;/h2&gt;

&lt;p&gt;Then you need to configure both iOS and Android for EAS build ```eas&lt;br&gt;
&lt;br&gt;
 build:configure&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
In `app.json` or `app.config.js` file I **strongly recommend** to configure the build number and version code which must match your package.json version, because EAS prevents you to submit twice the same app version, so you have to increase it manually to bypass EAS checks.

Example for the 1st release :

&amp;gt; app.json (or app.config.js)

![version 1](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5joooc083keaac320496.png)

Example for the 2nd release :

&amp;gt; app.json (or app.config.js)

![version 2](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a3zsmsd0ljfw7da27x5o.png)

## Build for app stores

You must have a [Google developer account](
Google Play Consolehttps://play.google.com › signup) and a [Apple developer account](
Apple Developerhttps://developer.apple.com)

You can create separate build for Android ```eas

 build --platform android

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Or iOS ```eas&lt;br&gt;
&lt;br&gt;
 build --platform ios&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
But it is better to create builds for both platforms at the same time ```eas

 build --platform all

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Everything should be handled automatically by EAS now, you can follow the progress from the terminal. But if you don't want to wait you can escape the terminal when it tells you to exit with &lt;code&gt;Ctrl+C / Cmd+C&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;By accessing your Expo dashboard you can check if the builds are deployed and download them to upload them in the stores&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Example of Expo dashboard&lt;/p&gt;
&lt;/blockquote&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fis5j1a2im6m0pmxy0yrc.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fis5j1a2im6m0pmxy0yrc.png" alt="Expo dashboard"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Enjoy your new builds
&lt;/h2&gt;

&lt;p&gt;When builds are successfully created it should generate a &lt;em&gt;.ipa file&lt;/em&gt; for iOS and &lt;em&gt;.aab file&lt;/em&gt; for Android.&lt;br&gt;
These are the files that you have to upload on Google Play Console and Apple Developer Dashboard to submit your app to the stores&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fywax8rfomnsdt1516cdn.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fywax8rfomnsdt1516cdn.png" alt="iOS Expo build"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fydcls60emh0zw638yrlp.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fydcls60emh0zw638yrlp.png" alt="Android Expo build"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  More details
&lt;/h2&gt;

&lt;p&gt;To get more information about configuration and other things you should refer to the official documentation of &lt;a href="https://docs.expo.dev/build/introduction/" rel="noopener noreferrer"&gt;EAS Build&lt;/a&gt;&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>mobile</category>
      <category>eas</category>
      <category>build</category>
    </item>
    <item>
      <title>Is Flutter the next big thing for cross-platform application development?</title>
      <dc:creator>Alexandre C.</dc:creator>
      <pubDate>Wed, 24 Nov 2021 19:05:14 +0000</pubDate>
      <link>https://forem.com/alexcoding42/is-flutter-the-next-big-thing-c9</link>
      <guid>https://forem.com/alexcoding42/is-flutter-the-next-big-thing-c9</guid>
      <description>&lt;p&gt;No! This is not the 100th article that will compare React Native VS Flutter 😄.&lt;br&gt;
Today I just want to focus on this trending technology and subject, and talk about the benefits it can bring to mobile application development world.&lt;/p&gt;

&lt;p&gt;On November 19th, SNCF France's national state-owned railway company, one of the most important in the public transport industry, annonced a big change with their applications : most of them will be merged and reunited in one application called &lt;em&gt;SNCF Connect&lt;/em&gt; 👉🏾 &lt;a href="https://archives.flutter-digest.com/editions/46"&gt;https://archives.flutter-digest.com/editions/46&lt;/a&gt;&lt;br&gt;
And in order to deliver it, rework and redesign what they already have they use &lt;strong&gt;Flutter&lt;/strong&gt; 🤯&lt;br&gt;
Passionate developers in France cannot wait the feedback from the technical teams, because this is the first time such a technology is used at this scale in France (millions users use SNCF applications everyday...)&lt;/p&gt;

&lt;p&gt;During the last Flutter Engage keynote this year, we also learned that Ubuntu (one of linux distribution) is using Flutter to build the new Ubuntu installer software 👉🏾 &lt;a href="https://ubuntu.com/blog/flutter-and-ubuntu-so-far"&gt;https://ubuntu.com/blog/flutter-and-ubuntu-so-far&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From the Flutter website we can see it is more and more adopted by big companies such as BMW, Alibaba, Toyota, Ebay or Tencent 👀 &lt;a href="https://flutter.dev/showcase"&gt;https://flutter.dev/showcase&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, is this the beginning of the end for other frameworks and libraries that do cross-platform development such as React Native, or native development such as Swift or Kotlin ? &lt;br&gt;
Of course not! 😌&lt;/p&gt;

&lt;p&gt;What is incredible in the IT world is that a new joiner can actually helps improve its competitors.&lt;br&gt;
Take a look at SwiftUI for example, both SwiftUI and Flutter are declarative UI frameworks which allow you to develop composable components for your mobile application. They are so similar that a SwiftUI developer can switch to Flutter without being lost and vice versa. If you want to explore main similarities and differences between the two frameworks, you can take a look at this excellent article from Code Magic 👉🏾 &lt;a href="https://blog.codemagic.io/flutter-vs-swift/"&gt;https://blog.codemagic.io/flutter-vs-swift/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;React Native, the main competitor of Flutter for cross-platform development is also improving constantly, learning from its strengths and weaknesses. Last example presented by William Candillon is Skia (graphic engine used by Flutter) can now be adopted in React Native too 🔥 &lt;a href="https://youtu.be/AxLmUsJAH7c"&gt;https://youtu.be/AxLmUsJAH7c&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From the last Stackoverflow Developer Survey &lt;a href="https://insights.stackoverflow.com/survey/2021#most-loved-dreaded-and-wanted-misc-tech-want"&gt;https://insights.stackoverflow.com/survey/2021#most-loved-dreaded-and-wanted-misc-tech-want&lt;/a&gt; we can also see that the interes in Flutter is booming. It is one of the top 3 most loved ❤️ and wanted 🎯 technology combined!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uTV8D5Tt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iz5tae2oq95temjw7dm0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uTV8D5Tt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iz5tae2oq95temjw7dm0.png" alt="Most loved technology" width="880" height="623"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gQG1lmRy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6c07yhb0jc7n12muzoa5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gQG1lmRy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6c07yhb0jc7n12muzoa5.png" alt="Most wanted technology" width="880" height="625"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I can't wait to see the latest stats to check if the trend will grow or decrease, but in my opinion it will increase.&lt;/p&gt;

&lt;p&gt;Now, how can you decide which framework to use? How to check if Flutter is well adapted to what you want to deliver?&lt;br&gt;
This great article from BAM Tech wrote an excellent comparison between React Native and Flutter, they created their own decision tree to decide which framework to use 👉🏾 &lt;a href="https://blog.bam.tech/developer-news/react-native-or-flutter-the-decision-tree"&gt;https://blog.bam.tech/developer-news/react-native-or-flutter-the-decision-tree&lt;/a&gt;&lt;br&gt;
If you speak or understand french, you can also take a look at their speech at Flutter France conference that occured 2 months ago 👉🏾 &lt;a href="https://www.youtube.com/watch?v=qybl4GOAUR8&amp;amp;ab_channel=FlutterFrance"&gt;https://www.youtube.com/watch?v=qybl4GOAUR8&amp;amp;ab_channel=FlutterFrance&lt;/a&gt; (or activate the subtitles 😃)&lt;/p&gt;

&lt;p&gt;To conclude, Flutter is not yet the champion without contest in its category. But it sure is a great competitor that is bringing positive changes to the community and the industry. The next years should decide if this technology will continue to grow or stabilize, if it will be adopted more and more or it will be just a temporary phase.&lt;/p&gt;

&lt;p&gt;I personally bet on the growing side, not only because it is backed by Google, but because the developer community has done a fantastic job in few years. And because for me, when a technology is able to inspire other technologies or help them improve, this is the sign of a great success.&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>mobile</category>
      <category>application</category>
      <category>crossplatform</category>
    </item>
    <item>
      <title>Pourquoi travailler avec un freelance en remote fera partie de la réalité de demain?</title>
      <dc:creator>Alexandre C.</dc:creator>
      <pubDate>Mon, 15 Nov 2021 07:12:11 +0000</pubDate>
      <link>https://forem.com/alexcoding42/pourquoi-travailler-avec-un-freelance-en-remote-fera-partie-de-la-realite-de-demain-4f76</link>
      <guid>https://forem.com/alexcoding42/pourquoi-travailler-avec-un-freelance-en-remote-fera-partie-de-la-realite-de-demain-4f76</guid>
      <description>&lt;p&gt;Avez-vous entendu parler de la &lt;em&gt;Grande Démission&lt;/em&gt; (&lt;em&gt;The Great Resignation&lt;/em&gt; en anglais) ? &lt;/p&gt;

&lt;p&gt;C'est le phénomène dont tout le monde parle en ce moment aux Etats-Unis, le magazine Harvard Business Review y consacre même un article entier 👉🏾 &lt;a href="https://hbr.org/2021/09/who-is-driving-the-great-resignation"&gt;https://hbr.org/2021/09/who-is-driving-the-great-resignation&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Plus de &lt;strong&gt;4 millions&lt;/strong&gt; de salariés américains ont démissioné de leur poste, ce qui marque un tournant majeur dans le monde du travail, et ce qui illustre que depuis la pandémie les salariés ont modifié leur rapport au travail.&lt;/p&gt;

&lt;p&gt;Certes les raisons de ces démissions sont variées et propres à chacun, et cela est aussi lié au dynamisme du marché de l'emploi nord américain. Mais l'on ne peut s'empêcher de faire le rapprochement avec les statistiques récentes concernant le nombre de freelances aux Etats-Unis : plus de 50 millions d'américains ont exercé ou exercent toujours une activité freelance 👉🏾 &lt;a href="https://www.upwork.com/press/releases/53-million-americans-now-freelance-new-study-finds-2"&gt;https://www.upwork.com/press/releases/53-million-americans-now-freelance-new-study-finds-2&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Le futur monde du travail ne se dessine plus; il est déjà en place!&lt;/p&gt;

&lt;p&gt;Et l'actualité foisonne à ce sujet :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Entre Naomi Klein qui nous consacre un article qui démontre que depuis le début de la pandémie les investissements dans la tech sont massifs💰 &lt;a href="https://theintercept.com/2020/05/08/andrew-cuomo-eric-schmidt-coronavirus-tech-shock-doctrine/"&gt;https://theintercept.com/2020/05/08/andrew-cuomo-eric-schmidt-coronavirus-tech-shock-doctrine/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Zoom qui a battu des records de croissance 🚀 durant la pandémie et a forcé ses concurrents à réinventer&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Facebook qui devient Meta pour nous proposer un monde interconnecté à travers le numérique 💻 &lt;a href="https://theconversation.com/de-quoi-le-meta-de-facebook-est-il-le-nom-171018"&gt;https://theconversation.com/de-quoi-le-meta-de-facebook-est-il-le-nom-171018&lt;/a&gt;. Récemment Microsoft a annoncé s'associer avec Meta pour lui aussi développer son metaverse &lt;a href="https://www.theverge.com/2021/11/10/22774059/microsoft-teams-meta-facebook-workplace-integration"&gt;https://www.theverge.com/2021/11/10/22774059/microsoft-teams-meta-facebook-workplace-integration&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Boursorama qui passe au télétravail quasi total pour la moitié de ses salariés, et qui paie même les frais de transport quand il faut passer ponctuellement au bureau &lt;a href="https://www.lemonde.fr/economie/article/2021/09/28/teletravail-total-chez-boursorama-les-salaries-commencent-a-quitter-paris-pour-la-province_6096226_3234.html"&gt;https://www.lemonde.fr/economie/article/2021/09/28/teletravail-total-chez-boursorama-les-salaries-commencent-a-quitter-paris-pour-la-province_6096226_3234.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;L'Allemagne qui vient tout juste d'annoncer un projet de loi pour faire du télétravail la règle à l'ensemble du territoire &lt;a href="https://www.lci.fr/sante/covid-19-le-teletravail-pourrait-devenir-la-regle-en-allemagne-grace-a-un-projet-de-loi-face-au-regain-de-l-epidemie-2201887.html"&gt;https://www.lci.fr/sante/covid-19-le-teletravail-pourrait-devenir-la-regle-en-allemagne-grace-a-un-projet-de-loi-face-au-regain-de-l-epidemie-2201887.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cela finira par influencer et impacter le marché du travail français (si ce n'est déjà pas le cas...)&lt;/p&gt;

&lt;p&gt;La pandémie a mis nos nerfs à rude épreuve, mais elle a aussi permis de repenser notre rapport au travail.&lt;/p&gt;

&lt;p&gt;Quel est l'intérêt dans des grandes villes comme Paris de faire un trajet aller d'1h20 en moyenne (quant au trajet retour...) pour venir au bureau et faire ses réunions sur Skype ou Teams avec les collègues ?&lt;/p&gt;

&lt;p&gt;Quel est l'intérêt de prendre sa voiture et d'être dans les embouteillages chaque matin pour aller au boulot alors que l'on parle de sauver la planète et de réduire notre impact sur le climat ?&lt;/p&gt;

&lt;p&gt;Pourquoi continuer de devoir jongler entre les horaires de la nounou, les grands-parents, la crèche loin de la maison pour faire garder ses enfants ?&lt;/p&gt;

&lt;p&gt;Prenons l'exemple de deux profils.&lt;br&gt;
Le premier se déplace chaque jour pour venir au bureau, affronte les embouteillages et les aléas des transports, doit s'organiser pour trouver un équilibre travail/famille, doit bloquer ses vacances à l'avance et avoir de la chance de ne pas se les voir annuler à cause de nouvelles conditions sanitaires.&lt;/p&gt;

&lt;p&gt;L'autre a la flexibilité de travailler depuis chez lui ou un autre lieu, il n'a pas à affronter les transports ni les embouteillages, il est libre de s'organiser comme il le souhaite et peut ajuster son organisation vis-à-vis de sa famille, il peut partir deux semaines sans avoir à poser de vacances et continuer de travailler tout en profitant de son séjour.&lt;/p&gt;

&lt;p&gt;Lequel de ses deux profils pensez-vous qui sera plus épanoui au travail ? Plus productif ? Lequel a plus de chance de vous quitter pour la concurrence qui lui offre de meilleures conditions de travail ?&lt;/p&gt;

&lt;p&gt;Vous l'avez bien compris, recourir à un freelance en remote vous permet non seulement de travailler avec celui-ci de manière plus flexible, mais en plus de lui offrir un épanouissement au travail vous lui permettez d'être deux fois plus productif. Les entreprises ont tout intêrêt à repenser leur vision du travail car elles ne pourront être que les premières bénéficiaires.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to create integration test with Cypress in your Next.js project</title>
      <dc:creator>Alexandre C.</dc:creator>
      <pubDate>Wed, 07 Jul 2021 11:42:21 +0000</pubDate>
      <link>https://forem.com/alexcoding42/how-to-set-up-cypress-in-your-next-js-project-for-integration-test-159j</link>
      <guid>https://forem.com/alexcoding42/how-to-set-up-cypress-in-your-next-js-project-for-integration-test-159j</guid>
      <description>&lt;p&gt;In this tutorial we'll describe how you can use Cypress to test your Next.js application, so that you can be more confident when writing or refactoring code.&lt;/p&gt;

&lt;h1&gt;
  
  
  What is Cypress ?
&lt;/h1&gt;

&lt;p&gt;Cypress is a Javascript end-to-end test framework. It allows you to test your application directly in the browser, with React it's a perfect match because you can test each of your component in the browser and visually see what's wrong and where.&lt;br&gt;
You can learn more about it and how it works  &lt;a href="https://www.cypress.io/" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Generate a Next.js app
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;npx create-next-app&lt;/code&gt;&lt;br&gt;
or&lt;br&gt;
&lt;code&gt;yarn create next-app&lt;/code&gt;&lt;br&gt;
and follow the instructions&lt;/p&gt;

&lt;p&gt;If you prefer to use Typescript&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npx create-next-app --typescript&lt;/code&gt;&lt;br&gt;
 or&lt;br&gt;
&lt;code&gt;yarn create next-app --typescript&lt;/code&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Install Cypress
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;npm install cypress --save-dev&lt;/code&gt; or &lt;code&gt;yarn add cypress -D&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;In your &lt;em&gt;&lt;strong&gt;package.json&lt;/strong&gt;&lt;/em&gt; add a script line&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "lint": "next lint",
    "cypress:open": "cypress open"
  },
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you use Typescript make sure you add cypress types in your &lt;em&gt;&lt;strong&gt;tsconfig.json&lt;/strong&gt;&lt;/em&gt; file&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"compilerOptions": {
    ...
    "types": ["cypress"]
  },
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Run Cypress
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;npm run cypress:open&lt;/code&gt; or &lt;code&gt;yarn cypress:open&lt;/code&gt; will run Cypress for the first time. It will generate automatically every necessary files for you and tests examples in a &lt;strong&gt;cypress&lt;/strong&gt; folder at the root of your project, and open a dedicated page in your browser&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8cw1broew604cu7cnh6i.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8cw1broew604cu7cnh6i.png" alt="Cypress in browser screenshot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can try running the integration tests examples&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F83m4kzeg1nva1kvhug0t.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F83m4kzeg1nva1kvhug0t.png" alt="Integration tests examples running screenshot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These files can be found in your &lt;code&gt;cypress/integration&lt;/code&gt; folder. You can delete all of them as we'll write our own one.&lt;/p&gt;

&lt;h1&gt;
  
  
  Write your first integration test
&lt;/h1&gt;

&lt;p&gt;Under &lt;code&gt;cypress/integration&lt;/code&gt; folder create a &lt;em&gt;home.spec.js&lt;/em&gt; file (or &lt;em&gt;home.spec.tsx&lt;/em&gt; if you use typescript) and add&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/// &amp;lt;reference types="cypress"/&amp;gt;

context("Home Page", () =&amp;gt; {
  beforeEach(() =&amp;gt; {
    cy.visit("http://localhost:3000");
  });

  it("should render the home page and display a message", () =&amp;gt; {
    cy.get("h1").contains("Welcome");
  });
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you use Typescript add &lt;code&gt;export {}&lt;/code&gt; to bypass Eslint compilation error&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/// &amp;lt;reference types="cypress"/&amp;gt;

context("Home Page", () =&amp;gt; {
  beforeEach(() =&amp;gt; {
    cy.visit("http://localhost:3000");
  });

  it("should render the home page and display a message", () =&amp;gt; {
    cy.get("h1").contains("Welcome");
  });
});

export {}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here we are telling Cypress each time it runs the test it should first navigate to the homepage, and search for a &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; tag containing "Welcome"&lt;/p&gt;

&lt;p&gt;If your run this test now it will fail and that's normal&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffigvt5izgwqfekub3193.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffigvt5izgwqfekub3193.png" alt="Failed test"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To make it work we need to run our server first and launch the tests, to automate this behavior we will install a library called &lt;em&gt;&lt;strong&gt;start-server-and-test&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install start-server-and-test --save-dev&lt;/code&gt;&lt;br&gt;
or&lt;br&gt;
&lt;code&gt;yarn add start-server-and-test -D&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Add a script in your &lt;em&gt;&lt;strong&gt;package.json&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "lint": "next lint",
    "cypress:open": "cypress open",
    "test": "start-server-and-test dev 3000 cypress:open"
  },
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can now run &lt;br&gt;
&lt;code&gt;npm run test&lt;/code&gt;&lt;br&gt;
or&lt;br&gt;
&lt;code&gt;yarn test&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;To execute your test and it should work&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqsnqhq0zckaqox35uza8.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqsnqhq0zckaqox35uza8.png" alt="Working test"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I will make the test fail again by replacing the word "Welcome" by "Bonjour" and Cypress automatically detect where the test has failed&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh1efbz383gkln8lwvx65.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh1efbz383gkln8lwvx65.png" alt="Second test failed"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now that you understand how Cypress is testing your component you can write your own tests based on what you want to test, and enjoy the visual regression tool in the browser embedded by Cypress 🥳&lt;/p&gt;
&lt;h1&gt;
  
  
  How to test &lt;em&gt;getStaticProps&lt;/em&gt;
&lt;/h1&gt;

&lt;p&gt;To show how we can perform Cypress test on props coming from &lt;em&gt;getStaticProps&lt;/em&gt; I have created a file called &lt;em&gt;&lt;strong&gt;stack.js&lt;/strong&gt;&lt;/em&gt; under &lt;code&gt;pages&lt;/code&gt; folder&lt;br&gt;
&lt;/p&gt;

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

const Stack = (props) =&amp;gt; {
  const favorites = props.stack;

  return (
    &amp;lt;div style={{display: 'flex', justifyContent: 'center', padding: '2rem'}}&amp;gt;
      &amp;lt;main&amp;gt;
        &amp;lt;h1&amp;gt;My Favorites Stack&amp;lt;/h1&amp;gt;
        &amp;lt;ul&amp;gt;
          {favorites.map((favorite) =&amp;gt; {
            return &amp;lt;li key={favorite}&amp;gt;{favorite}&amp;lt;/li&amp;gt;;
          })}
        &amp;lt;/ul&amp;gt;
      &amp;lt;/main&amp;gt;
    &amp;lt;/div&amp;gt;
  );
};

export default Stack;

export async function getStaticProps() {
  const favoriteStack = [
    'Javascript',
    'TypeScript',
    'React.js',
    'Next.js',
    'GraphQL',
    'Amazon Web Services',
    'Firebase',
  ];

  return {
    props: {
      stack: favoriteStack
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The goal is to make sure that we receive the correct props, so &lt;br&gt;
we can create a &lt;em&gt;&lt;strong&gt;stack.spec.js&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/// &amp;lt;reference types="cypress"/&amp;gt;

const favoriteStack = [
  'Javascript',
  'TypeScript',
  'React.js',
  'Next.js',
  'GraphQL',
  'Amazon Web Services',
  'Firebase',
];

context('Stack', () =&amp;gt; {
  beforeEach(() =&amp;gt; {
    cy.visit('http://localhost:3000/stack');
  });

  it('should render the stack page and display the favorite stack', () =&amp;gt; {
    cy.get('ul&amp;gt;li').each((item, index) =&amp;gt; {
      cy.wrap(item).should('contain.text', favoriteStack[index]);
    });
  });
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here the test should pass because we are receiving the exact same props that we are passing in our component&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fub0o8y09489p7iuf404h.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fub0o8y09489p7iuf404h.png" alt="Stack test"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can make the test fails by modifying any of the array item and Cypress should show you where it failed, for example here I expect to find "MongoDB" value instead of "Firebase"&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flck8d8dqx3s8wgnerxq4.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flck8d8dqx3s8wgnerxq4.png" alt="Stack test failed"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  How to test &lt;em&gt;getServerSideProps&lt;/em&gt;
&lt;/h1&gt;

&lt;p&gt;It should work the same way as for &lt;code&gt;getStaticProps&lt;/code&gt;. To demonstrate this we create a new file under &lt;code&gt;pages&lt;/code&gt; &lt;em&gt;&lt;strong&gt;platforms.js&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const Platforms = (props) =&amp;gt; {
  const favorites = props.stack;

  return (
    &amp;lt;div style={{display: 'flex', justifyContent: 'center', padding: '2rem'}}&amp;gt;
      &amp;lt;main&amp;gt;
        &amp;lt;h1&amp;gt;My Favorites Freelance platforms&amp;lt;/h1&amp;gt;
        &amp;lt;ul&amp;gt;
          {favorites.map((favorite) =&amp;gt; {
            return &amp;lt;li key={favorite}&amp;gt;{favorite}&amp;lt;/li&amp;gt;;
          })}
        &amp;lt;/ul&amp;gt;
      &amp;lt;/main&amp;gt;
    &amp;lt;/div&amp;gt;
  );
};

export default Platforms;

export async function getServerSideProps() {
  const favoritesPlatforms = [
    'Toptal',
    'Upwork',
    'Malt',
    'Comet'
  ];

  return {
    props: {
      stack: favoritesPlatforms
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then we add our test &lt;strong&gt;platforms.spec.js&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/// &amp;lt;reference types="cypress"/&amp;gt;

const favoritePlatforms = ['Toptal', 'Upwork', 'Malt', 'Comet'];

context('Platforms', () =&amp;gt; {
  beforeEach(() =&amp;gt; {
    cy.visit('http://localhost:3000/platforms');
  });

  it('should render the platforms page and display the favorite platforms', () =&amp;gt; {
    cy.get('ul&amp;gt;li').each((item, index) =&amp;gt; {
      cy.wrap(item).should('contain.text', favoritePlatforms[index]);
    });
  });
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And you can see it's working 🎉&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl96s27h02f164rfqy15p.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl96s27h02f164rfqy15p.png" alt="getServerSideProps test"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;Now you understand how Cypress can work with your Next.js project you can create your own tests based on your scenarios. Enjoy it!&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>cypress</category>
      <category>integrationtest</category>
    </item>
    <item>
      <title>Improve your Next.js 11+ project code quality ✅ with Typescript, Eslint, Husky and Lint-staged 🚀🔥</title>
      <dc:creator>Alexandre C.</dc:creator>
      <pubDate>Mon, 28 Jun 2021 16:51:55 +0000</pubDate>
      <link>https://forem.com/alexcoding42/set-up-typescript-eslint-husky-and-lint-staged-in-a-next-js-11-project-5g5j</link>
      <guid>https://forem.com/alexcoding42/set-up-typescript-eslint-husky-and-lint-staged-in-a-next-js-11-project-5g5j</guid>
      <description>&lt;h2&gt;
  
  
  Description
&lt;/h2&gt;

&lt;p&gt;In this straight to the point tutorial we will install the dependencies in bare Next.js project written in Javascript and created with yarn or npm. These tools will boost your development process and improve your code quality&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Warning: In order to follow this tuto you'll need at least Nextjs version 11+&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Install Next.js
&lt;/h2&gt;

&lt;p&gt;Make sure you have Node.js version 12+&lt;/p&gt;

&lt;p&gt;Run &lt;code&gt;yarn create next-app&lt;/code&gt; or &lt;code&gt;npx create-next-app&lt;/code&gt; and follow the instructions&lt;/p&gt;

&lt;p&gt;Then add an empty &lt;strong&gt;tsconfig.json&lt;/strong&gt; file in your root folder&lt;/p&gt;

&lt;h2&gt;
  
  
  Install Typescript
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;yarn add -D typescript @types/react @types/nodes&lt;/code&gt;&lt;br&gt;
or&lt;br&gt;
&lt;code&gt;npm install --save-dev typescript @types/react @types/nodes&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Run your project
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;yarn dev&lt;/code&gt; or &lt;code&gt;npm run dev&lt;/code&gt;&lt;br&gt;
The &lt;strong&gt;tsconfig.json&lt;/strong&gt; file should be filled automatically&lt;/p&gt;
&lt;h2&gt;
  
  
  Change your files extension
&lt;/h2&gt;

&lt;p&gt;You can now change &lt;code&gt;index.js&lt;/code&gt; and &lt;code&gt;_app.js&lt;/code&gt; to &lt;code&gt;index.tsx&lt;/code&gt; and &lt;code&gt;_app.tsx&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Install Eslint
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;yarn add -D eslint&lt;/code&gt; or &lt;code&gt;npm install --save-dev eslint&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Run &lt;code&gt;npx eslint --init&lt;/code&gt; and choose your configuration, here we will choose to go with Google style guide. Here is a screenshot of the config we choose :&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0t5p3vwgz0iy01fh137o.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0t5p3vwgz0iy01fh137o.png" alt="productivity"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⚠️ If you use &lt;strong&gt;yarn&lt;/strong&gt; into your project you should delete the &lt;strong&gt;package-lock.json&lt;/strong&gt; to make sure every dependencies are installed with yarn&lt;/p&gt;
&lt;h2&gt;
  
  
  Install Prettier
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;yarn add -D prettier eslint-config-prettier&lt;/code&gt; or &lt;code&gt;npm install --save-dev prettier eslint-config-prettier&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Create a &lt;strong&gt;.eslintrc.json&lt;/strong&gt; file at your root folder and add&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "env": {
    "browser": true,
    "es2021": true
  },
  "extends": ["plugin:react/recommended", "google", "prettier"],
  "parser": "@typescript-eslint/parser",
  "parserOptions": {
    "ecmaFeatures": {
      "jsx": true
    },
    "ecmaVersion": 12,
    "sourceType": "module"
  },
  "plugins": ["react", "@typescript-eslint"],
  "rules": {
    "require-jsdoc": "off",
    "react/react-in-jsx-scope": "off"
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a &lt;strong&gt;.prettierrc&lt;/strong&gt; at your root folder and add&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "endOfLine": "auto",
  "printWidth": 100,
  "tabWidth": 2,
  "trailingComma": "es5"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can add a &lt;strong&gt;.prettierignore&lt;/strong&gt; and a &lt;strong&gt;.eslintignore&lt;/strong&gt; to your root folder which contains&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules
/.pnp
.pnp.js

# testing
/coverage

# next.js
/.next/
/out/

# production
/build

# misc
.DS_Store
*.pem

# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# local env files
.env.local
.env.development.local
.env.test.local
.env.production.local

# vercel
.vercel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Configure your VsCode settings
&lt;/h2&gt;

&lt;p&gt;Create a &lt;strong&gt;.vscode&lt;/strong&gt; folder at your root folder and a &lt;strong&gt;settings.json&lt;/strong&gt; file&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "editor.formatOnPaste": true,
  "editor.formatOnSave": true,
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  "editor.codeActionsOnSave": {
    "source.fixAll.eslint": true,
    "source.fixAll.format": true
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Run Eslint
&lt;/h2&gt;

&lt;p&gt;Since version 11.0.0, Next.js provides an integrated ESLint experience out of the box. To run eslint you can add a script in your &lt;strong&gt;package.json&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "lint": "next lint"
  },
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now if you run &lt;code&gt;yarn lint&lt;/code&gt; or &lt;code&gt;npm run lint&lt;/code&gt; eslint should check your code and indicates some errors or warnings that you need to fix.&lt;/p&gt;

&lt;p&gt;You can also configure the fix to be done automatically when running eslint&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "lint": "next lint --fix"
  },
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Install Husky and Lint-staged
&lt;/h2&gt;

&lt;p&gt;In order to prevent your code to be committed with errors and warnings you can add and configure husky and lint-staged&lt;/p&gt;

&lt;p&gt;&lt;code&gt;yarn add -D husky lint-staged&lt;/code&gt; or &lt;code&gt;npm install --save-dev husky lint-staged&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Configure the scripts in your &lt;strong&gt;package.json&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "lint": "next lint",
    "type-check": "tsc --project tsconfig.json --pretty --noEmit",
    "postinstall": "husky install"
  },
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At your root folder add a &lt;strong&gt;lint-staged.config.js&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;module.exports = {
  // Run type-check on changes to TypeScript files
  '**/*.ts?(x)': () =&amp;gt; 'yarn type-check',
  // Run ESLint on changes to JavaScript/TypeScript files
  '**/*.(ts|js)?(x)': (filenames) =&amp;gt; `yarn lint . ${filenames.join(' ')}`,
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Configure lint-staged for pre-commit&lt;br&gt;
&lt;code&gt;yarn husky add .husky/pre-commit "yarn lint-staged"&lt;/code&gt; or&lt;br&gt;
&lt;code&gt;npm run husky install .husky/pre-commit "npm run lint-staged"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Now everytime you try to commit some changes husky should check your code and prevent committing if there is any errors&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>eslint</category>
      <category>nextjs</category>
      <category>cleancode</category>
    </item>
  </channel>
</rss>
