DEV Community

Automatic Versioning for React Native Apps

Osama Qarem on April 18, 2020

Problem You need to update your app's version to 1.0.0: 1. You open up android/app/build.gradle to update the version and bump the buil...
Collapse
 
fondakogb profile image
federazionekoinonie • Edited

Thank you: this helped me a lot in a project few months ago!

SOLVED ISSUE
I started a new react-native project with updated versions of softwares, and I faced following issue. When I execute:

fastlane add_plugin increment_version_name increment_version_code load_json

I get this error:

Seems like the plugin is not available on RubyGems, what do you want to do?
Looking for related GitHub issues on fastlane/fastlane...
˜/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/highline-1.7.10/lib/highline.rb:624:in `encode': \e[31m[!] no implicit conversion of Hash into String\e[0m (TypeError)
     from ˜/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/highline-1.7.10/lib/highline.rb:624:in `say'
     . . .
     from ˜/.rbenv/versions/3.0.0/bin/fastlane:23:in '<main>'

Googling a bit I found this: github.com/fastlane/fastlane/issue...
And effectively I have (now, for this project) ruby 3.0, not 2.6.5 anymore (I thinked was something related to upgrated OS from Mojave to Catalina, or to new Node.js...)
So I 'solved' by downgrading ruby to 2.7.2 and now it works like a charm again!

Collapse
 
sendypw profile image
Sendy Putra

Added too auto-changelog

npm install -g auto-changelog
Enter fullscreen mode Exit fullscreen mode

and add to package.json script

"version": "auto-changelog -p"
Enter fullscreen mode Exit fullscreen mode

thats will be automate create changelog after automate versioning

Collapse
 
sardok profile image
sinx

Can't you use package['name'] in Fastline file? What is the reason chosing ENV[APP_NAME] over it?

Collapse
 
osamaqarem profile image
Osama Qarem

Good point! Thanks. I've updated the post!

The reason being is that I copied most of the fastfile for this post from a project I was working on where pacakge['name'] was different from the Xcode project name 😂

Collapse
 
noonyfirstfence profile image
noonyfirstfence

Very good, one issue I noticed as I currently only have Andorid not iOS and because the iOS function runs in Fastlane first it errors and stops the following Android function firing. I've modified it so that both functions run independently so that now if one fails the other still tries. Hope its helpful to anyone else using only one OS.

desc 'Bump build numbers, and set the version to match the pacakage.json version.'
lane :bump do
  begin
    inc_ver_ios
  rescue => error
    puts "Error in inc_ver_ios: #{error.message}"
  end
  begin
    inc_ver_and
  rescue => error
    puts "Error in inc_ver_ios: #{error.message}"
  end
end
Enter fullscreen mode Exit fullscreen mode
Collapse
 
jcoulaud profile image
Julien Coulaud

What a coincidence, that is exactly what I was looking for and you just published it! Thx :)

Collapse
 
osamaqarem profile image
Osama Qarem

Happy it helped!

Collapse
 
victorbruce profile image
Victor Bruce

Thank you very much for this wonderful guide.🙏🏾😊

Collapse
 
billtlee profile image
Bill Lee

This is great! I was using app.json for that. If I use your solution, do I need to remove the buildnumber and versioncode from app.json? Thanks!

Collapse
 
osamaqarem profile image
Osama Qarem

No strict rules here! The solution is customizable! Do what suits your needs and makes more sense to you 👍

Collapse
 
anwargul0x profile image
Anwar Gul

Great Work , If possible please do write on fastlane setup for react native.

Collapse
 
osamaqarem profile image
Osama Qarem

Thank you:)
I do have another guide. I hope you find it useful:
github.com/osamaq/reactnative-fast...

Collapse
 
anwargul0x profile image
Anwar Gul

Really Thank you so much.

Collapse
 
adityaaxa profile image
aditya-axa

This will have issue with xcode 11 as there is new variable need to use github.com/SiarheiFedartsou/fastla...

Collapse
 
sebadiazarg profile image
Sebastian Diaz

Hi @osamaq ! I'll try this, it would be very useful. Thanks!
Do you know if it'll work exactly with Xcode 12? Thanks again.

Collapse
 
osamaqarem profile image
Osama Qarem

It does. I've used it many times while working with Xcode 12.0.1. have fun 👍

Collapse
 
ivelaval profile image
Ivan Avila

Brother what a great contribution, even I can use the tags as source of truth for versioning system in my react native app and I can ignore versioning when publishing. Great post!