<?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: Saamer Mansoor</title>
    <description>The latest articles on DEV Community by Saamer Mansoor (@saamerm).</description>
    <link>https://dev.to/saamerm</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%2F690459%2F7ad3d0ae-dff9-4aa4-b5a1-2e2a4f944bf9.jpeg</url>
      <title>DEV Community: Saamer Mansoor</title>
      <link>https://dev.to/saamerm</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/saamerm"/>
    <language>en</language>
    <item>
      <title>Quick tip-How to run native iOS code in react native-Example: App icon change</title>
      <dc:creator>Saamer Mansoor</dc:creator>
      <pubDate>Tue, 19 Jul 2022 12:18:05 +0000</pubDate>
      <link>https://dev.to/saamerm/quick-tip-how-to-run-native-ios-code-in-react-native-example-app-icon-change-2ph</link>
      <guid>https://dev.to/saamerm/quick-tip-how-to-run-native-ios-code-in-react-native-example-app-icon-change-2ph</guid>
      <description>&lt;p&gt;Do you understand React Native and how to implement basic things, but now you want to understand how the more complex stuff? &lt;br&gt;
To explain the concept of running native iOS code, I am using &lt;a href="https://github.com/skb1129/react-native-change-icon"&gt;Surya's package&lt;/a&gt; as our simple example because changing the AppIcon during runtime is a simple line of code in &lt;a href="https://developer.apple.com/documentation/uikit/uiapplication/2806818-setalternateiconname"&gt;native Swift/Objective-C&lt;/a&gt; into which you pass iconName as a string:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;UIApplication.shared.setAlternateIconName(iconName)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  How to run the line using React Native
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;I placed my sample code &lt;a href="https://github.com/saamerm/RN-TS-AppIconChange/tree/ios-sm"&gt;here&lt;/a&gt; as a reference to the code below.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You need four files for making calls to native iOS:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;index.tsx, the only file change needed in the shared code, which creates the connection with the native code
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { NativeModules } from 'react-native';
const changeIcon = (iconName: string): Promise&amp;lt;string&amp;gt; =&amp;gt;
    NativeModules.ChangeIcon.changeIcon(iconName);
export { changeIcon };
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;ChangeIcon.m, Objective-C file added in Xcode to the project directory that makes the native code accessible
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#import &amp;lt;React/RCTBridgeModule.h&amp;gt;
@interface RCT_EXTERN_MODULE(ChangeIcon, NSObject)
RCT_EXTERN_METHOD(changeIcon:(NSString *)iconName withResolver:(RCTPromiseResolveBlock)resolve withRejecter:(RCTPromiseRejectBlock)reject)
@end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;
  - ChangeIcon.swift, added in Xcode to the project which contains your native code (tap to expand)
  &lt;br&gt;

&lt;pre&gt;&lt;code&gt;@objc(ChangeIcon)
class ChangeIcon: NSObject {

    @objc
    static func requiresMainQueueSetup() -&amp;gt; Bool {
        return false
    }

    @available(iOS 10.3, *)
    @objc(changeIcon:withResolver:withRejecter:)
    func changeIcon(iconName: String, resolve:RCTPromiseResolveBlock,reject:RCTPromiseRejectBlock) -&amp;gt; Void {
        if !UIApplication.shared.supportsAlternateIcons {
            reject("Error", "Alternate icon not supported", nil)
            return
        }
        let currentIcon = UIApplication.shared.alternateIconName
        if iconName == currentIcon {
            reject("Error", "Icon already in use", nil)
            return
        }
        resolve(true)
        UIApplication.shared.setAlternateIconName(iconName)
    }
}
&lt;/code&gt;&lt;/pre&gt;




&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bridging-Header, is automatically recommended to be added by Xcode while adding the swift file above, as you can see in the image above the title. You don't need to rename it, just add this line
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#import &amp;lt;React/RCTBridgeModule.h&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;

&lt;p&gt;Don't forget to complete the &lt;a href="https://github.com/skb1129/react-native-change-icon#ios"&gt;other steps&lt;/a&gt; for the app icon update involving adding the image to the specific folder. Simply import the function from your index.tsx and then the simplest way to use it in your UI is to call the function on a button press:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { changeIcon } from './NativeModules';
...
    &amp;lt;Button title='checked' onPress={() =&amp;gt; changeIcon('checked')}/&amp;gt;

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

&lt;/div&gt;






&lt;p&gt;This is a part of a series of articles, please subscribe to get updates and let me know if you would like me to write another version of this article using JSI (&lt;a href="https://dev.to/saamerm/did-facebook-really-slow-down-or-move-away-from-react-native-2fh5"&gt;the future of React Native&lt;/a&gt;) instead. Ask me any questions &lt;a href="https://twitter.com/saamerm"&gt;on Twitter&lt;/a&gt;, and don't forget to connect with &lt;a href="https://linkedin.com/in/saamer"&gt;me on LinkedIn&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The First Prototype is an emerging Mobile App Design and Development consulting small business, specializing in &lt;a href="https://thefirstprototype.com/mobile-app-development-detroit-ios-android.html"&gt;Cross platform and Native iOS &amp;amp; Android apps&lt;/a&gt;. Sign up on our website, and &lt;a href="http://instagram.com/prototypemakers"&gt;support&lt;/a&gt; us &lt;a href="http://twitter.com/prototypemakers"&gt;on social media&lt;/a&gt;, to be informed of simple innovations in projects like our 5-star NumberBomb game on &lt;a href="https://apps.apple.com/app/numberbomb/id1560372045"&gt;iOS&lt;/a&gt; &amp;amp; &lt;a href="https://play.google.com/store/apps/details?id=com.tfp.numberbomb"&gt;Android&lt;/a&gt;!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>ios</category>
      <category>react</category>
      <category>mobile</category>
    </item>
    <item>
      <title>Android Version Code &amp; Name from AppCenter environment variables</title>
      <dc:creator>Saamer Mansoor</dc:creator>
      <pubDate>Mon, 11 Oct 2021 04:18:59 +0000</pubDate>
      <link>https://dev.to/saamerm/android-version-code-name-from-appcenter-environment-variables-2a3a</link>
      <guid>https://dev.to/saamerm/android-version-code-name-from-appcenter-environment-variables-2a3a</guid>
      <description>&lt;p&gt;Android developers using ReactNative, Flutter, Java or Kotlin use Microsoft AppCenter, a free, neat and extremely popular DevOps tool, to automate app build creation and distribution. A popular challenge is the ability to set your App's Version Name and Build Number/Code without making constant code changes, so that you can easily create newer apps with the click of the Build button in AppCenter. &lt;/p&gt;

&lt;h2&gt;
  
  
  What is the Version Code and Name?
&lt;/h2&gt;

&lt;p&gt;The Version Name is the value that you see in the Play Store as "Current Version" shown below. The version code (or build number) is not visible to the end-user, but just like the version name you cannot upload an app that has a version code less than or equal to the existing one. &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%2Fbaicvzvm8x5qnsuay1og.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%2Fbaicvzvm8x5qnsuay1og.png" alt="Play Store screenshots"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Build Settings changes:
&lt;/h2&gt;

&lt;p&gt;If you haven't started using AppCenter, you just need to create a new Android app, select the App language and then connect your Git Repository, then against a specific branch you can select specific build settings so it automatically creates a new build with every Pull Request merged, for your QA to test.&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%2F8460p02tpoyl637bqplx.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%2F8460p02tpoyl637bqplx.png" alt="AppCenter build settings changes"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can &lt;a href="https://stackoverflow.com/a/32138560/11104068" rel="noopener noreferrer"&gt;manually change the values&lt;/a&gt; of the &lt;code&gt;versionCode&lt;/code&gt; and &lt;code&gt;versionName&lt;/code&gt; in your &lt;code&gt;build.gradle&lt;/code&gt;, but that can't be independently done by someone non-technical, and requires another manual code change &amp;amp; pull request by a developer, approval by reviewer of code like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;versionCode 201
versionName "1.2.1"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Let's automate this!
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&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%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/microsoft" rel="noopener noreferrer"&gt;
        microsoft
      &lt;/a&gt; / &lt;a href="https://github.com/microsoft/appcenter" rel="noopener noreferrer"&gt;
        appcenter
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Central repository for App Center open source resources and planning.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Overview&lt;/h1&gt;
&lt;/div&gt;

&lt;div class="markdown-alert markdown-alert-important"&gt;
&lt;p class="markdown-alert-title"&gt;Important&lt;/p&gt;
&lt;p&gt;Visual Studio App Center is scheduled for retirement on &lt;strong&gt;March 31, 2025&lt;/strong&gt;. While you can continue to use Visual Studio App Center until it is fully retired, there are several recommended alternatives that you may consider migrating to.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://aka.ms/appcenter/retire" rel="nofollow noopener noreferrer"&gt;Learn more about support timelines and alternatives.&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Contents&lt;/h1&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Planning&lt;/h2&gt;
&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://github.com/Microsoft/appcenter/wiki/Planning" rel="noopener noreferrer"&gt;Planning Process&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Microsoft/appcenter/wiki/Roadmap" rel="noopener noreferrer"&gt;Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Microsoft/appcenter/wiki/Iteration-plans" rel="noopener noreferrer"&gt;Iteration Plans&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Over the past few years our team’s focus has been to deliver a first class DevOps experience for mobile and desktop developers. A substantial part of this journey involved building the next generation of HockeyApp services for our customers. Earlier this year, we completed the HockeyApp shut down. We are now looking at what's next for the App Center service.&lt;/p&gt;

&lt;p&gt;Just like any software engineering team, as we focused on building and scaling App Center, we accumulated technical debt that can no longer be sustained. Therefore, as we look to what is next, the App…&lt;/p&gt;
&lt;/div&gt;


&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/microsoft/appcenter" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;AppCenter allows you to add &lt;a href="https://github.com/Microsoft/appcenter/tree/master/sample-build-scripts" rel="noopener noreferrer"&gt;pre-build scripts&lt;/a&gt; that can provide a lot more flexibility, but this feature is very easy to automate, and doesn't even need a shell script! To understand the changes, it's important to note that Android expects an integer value for Version Code and a string value for Version Name! When you put any value into the AppCenter environment variable dictionary, you can retrieve the values using the &lt;code&gt;System.getenv()&lt;/code&gt; function, so we simply replace our &lt;code&gt;build.gradle&lt;/code&gt; code from above, with this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;versionCode System.getenv("VERSION_CODE") ? System.getenv("VERSION_CODE").toInteger() : 201
versionName System.getenv("VERSION_NAME") ? System.getenv("VERSION_NAME").toString() : "1.2.1"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We added the ternary null checker so that the code works if you try to manually deploy from your local machine as well. That's it, just build and give it a test!&lt;/p&gt;




&lt;p&gt;Please subscribe so I know people out there want me to write more technical articles in my free time, and feel free to let me know &lt;a href="https://twitter.com/saamerm" rel="noopener noreferrer"&gt;on Twitter&lt;/a&gt; if you have any questions. You can support me by following &lt;a href="https://www.linkedin.com/company/prototypemakers" rel="noopener noreferrer"&gt;my small business on LinkedIn&lt;/a&gt;, to be informed of innovations &amp;amp; products like our free &lt;a href="https://play.google.com/store/apps/details?id=com.tfp.numberbomb" rel="noopener noreferrer"&gt;5-star NumberBomb game on Android&lt;/a&gt; &amp;amp; &lt;a href="https://apps.apple.com/app/numberbomb/id1560372045" rel="noopener noreferrer"&gt;iOS&lt;/a&gt;!&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>flutter</category>
      <category>android</category>
      <category>devops</category>
    </item>
    <item>
      <title>Did Facebook really slow down or move away from React Native?</title>
      <dc:creator>Saamer Mansoor</dc:creator>
      <pubDate>Wed, 08 Sep 2021 13:09:29 +0000</pubDate>
      <link>https://dev.to/saamerm/did-facebook-really-slow-down-or-move-away-from-react-native-2fh5</link>
      <guid>https://dev.to/saamerm/did-facebook-really-slow-down-or-move-away-from-react-native-2fh5</guid>
      <description>&lt;p&gt;Mobile application development is moving super fast for all the UI frameworks. The winner will really be who ever is able to sustain a true community, just like Firebase has been killing all other mobile NoSQL backend solutions. So far Google has been doing it extremely well with &lt;a href="https://medium.com/flutter/announcing-flutter-2-2-at-google-i-o-2021-92f0fcbd7ef9" rel="noopener noreferrer"&gt;Flutter v2.2&lt;/a&gt;. In my opinion, unless Microsoft forces its teams to use &lt;a href="https://devblogs.microsoft.com/dotnet/introducing-net-multi-platform-app-ui/" rel="noopener noreferrer"&gt;MAUI/Xamarin&lt;/a&gt; like Facebook did with React Native, it risks getting "&lt;a href="https://visualstudiomagazine.com/articles/2021/08/17/silverlighted.aspx" rel="noopener noreferrer"&gt;Silverlighted&lt;/a&gt;" eventually.&lt;/p&gt;

&lt;h4&gt;
  
  
  I thought facebook rewrote in native?
&lt;/h4&gt;

&lt;p&gt;Just watched a talk at the &lt;a href="https://www.react-native.eu" rel="noopener noreferrer"&gt;React Native EU Conference&lt;/a&gt; last week, where a Facebook Engineer showed how they had to significantly improve the main branch of react native to improve their fleet of apps and the efficiency of their teams.&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%2Fdezj6tp0gslwygkzyonv.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%2Fdezj6tp0gslwygkzyonv.png" alt="Joshua Gross's slide deck"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  I recently interviewed for a native swift/obj-c position with Facebook, they have entire native teams
&lt;/h4&gt;

&lt;p&gt;At 1 hour and 12 minutes of &lt;a href="https://youtube.com/watch?v=Kt--iBUQcww" rel="noopener noreferrer"&gt;this video from September 2021&lt;/a&gt;, Joshua Gross, Sr. Software Egr. at FB says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“At Facebook, all of our apps using React native, use react native from the main branch..”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Yeah you could be right that they are moving, because he doesn't say "all our apps use react native". But I did some searches and found that in mid-2018, there were unofficial rumors and some reorganization that made people believe that Facebook moved away. But according to the talk, they are still using it for over 1000 “surfaces”. &lt;/p&gt;
&lt;h4&gt;
  
  
  The Bottomline
&lt;/h4&gt;

&lt;p&gt;It’s important to note that all of the biggest drawbacks have already been tackled with updates really. One of the biggest is thanks to the use of JSI (like JNI in Java programming) in the libraries that uses C++ instead of the single threaded “JS Bridge” (for periodic communication between the JS code and native layer), thus you now finally get- “mutli threading” and “native performance”. The first talk of the conference by &lt;a href="https://twitter.com/mrousavy" rel="noopener noreferrer"&gt;Marc Rousavi&lt;/a&gt; goes through it, and here's his GitHub repo of a &lt;a href="https://github.com/mrousavy/Colorwaver" rel="noopener noreferrer"&gt;React Native app using JSI&lt;/a&gt; that detects "colorwaves (swatches/palettes)" from a camera in real-time by scanning each frame:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&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%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/mrousavy" rel="noopener noreferrer"&gt;
        mrousavy
      &lt;/a&gt; / &lt;a href="https://github.com/mrousavy/Colorwaver" rel="noopener noreferrer"&gt;
        Colorwaver
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      🎨 An app to detect color palettes in the real world - powered by VisionCamera
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmrousavy%2FColorwaver%2Fblob%2Fmain%2Fimg%2Fdemo.gif%3Fraw%3Dtrue" alt="A gif animation showing the color palette generated from a live camera instantaneously"&gt;

&lt;p&gt;&lt;em&gt;The First Prototype is an emerging Mobile App Design and Development consulting small business, specializing in &lt;a href="https://thefirstprototype.com/mobile-app-development-detroit-ios-android.html" rel="noopener noreferrer"&gt;Cross platform and Native iOS &amp;amp; Android apps&lt;/a&gt;. Sign up on our website, and &lt;a href="http://instagram.com/prototypemakers" rel="noopener noreferrer"&gt;support&lt;/a&gt; us &lt;a href="http://twitter.com/prototypemakers" rel="noopener noreferrer"&gt;on social media&lt;/a&gt;, to be informed of simple innovations in projects like our 5-star NumberBomb game on &lt;a href="https://apps.apple.com/app/numberbomb/id1560372045" rel="noopener noreferrer"&gt;iOS&lt;/a&gt; &amp;amp; &lt;a href="https://play.google.com/store/apps/details?id=com.tfp.numberbomb" rel="noopener noreferrer"&gt;Android&lt;/a&gt;!&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;
  Some Other React Native Criticisms
  &lt;h4&gt;
  
  
  If I wasn’t so busy hating JavaScript, I’d be stepping into the mobile spot
&lt;/h4&gt;

&lt;p&gt;If you are able to pickup any native/hybrid/cross platform UI framework, React Native will be a piece of cake in the learning curve, and pretty fun because of the live server/hot reload. Despite have a smaller PR budget than Flutter, React Native is &lt;a href="https://insights.stackoverflow.com/survey/2021#section-most-popular-technologies-other-frameworks-and-libraries" rel="noopener noreferrer"&gt;still the most popular&lt;/a&gt; framework for building mobile apps. &lt;/p&gt;
&lt;h4&gt;
  
  
  It’s easy conceptually, but the language makes it terrible. Besides, it’s less like mobile with hooks instead of using the lifecycle overrides.
&lt;/h4&gt;

&lt;p&gt;Actually, React &amp;amp; React Native applications can be written in TypeScript (TS) instead of JavaScript. And TS takes away most of the unsettling parts of React because it's strongly typed, and unsurprisingly &lt;a href="https://twitter.com/mrousavy/status/1435165435796860928" rel="noopener noreferrer"&gt;more than half of react native apps&lt;/a&gt; use Typescript. Hooks are just lifecycle overrides beneath the surface, but for functional components instead of class components&lt;/p&gt;
&lt;h4&gt;
  
  
  Maybe I’m completely confused. I’m going to go look at more JavaScript and rot my brain some more
&lt;/h4&gt;

&lt;p&gt;Don't worry, hooks is new too! It was introduced in v16.8 and we are on v17 now, but everyone’s storming towards it. And there’s different kinds of hooks you use depending on which lifecycle event you want to override. I highly recommend &lt;a href="https://twitter.com/bobziroll" rel="noopener noreferrer"&gt;Bob Ziroll&lt;/a&gt;’s &lt;a href="https://scrimba.com/topic/free" rel="noopener noreferrer"&gt;free course here&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Please subscribe to get updates of articles I write and feel free to let me know &lt;a href="https://twitter.com/saamerm" rel="noopener noreferrer"&gt;on Twitter&lt;/a&gt; if you have any questions, and don't forget to connect with &lt;a href="https://linkedin.com/in/saamer" rel="noopener noreferrer"&gt;me on LinkedIn&lt;/a&gt;!&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>react</category>
      <category>android</category>
      <category>ios</category>
    </item>
  </channel>
</rss>
