Automatisera testutskick av React Native-appar

På PiJa använder vi Travis CI för våra automatiska byggen.

Följande är en komplett guide för att sätta upp automatiserade utskick av testversioner för både iOS och Android vid varje ny commit mot develop branchen.

Steg 1 - Manuella testutskick med Crashlytics Beta

Bli medlem på Fabric.io och skapa en ny organisation.

Installera bundler http://bundler.io/

Installera Fabric och Crashlytics

iOS
Android
  • Starta android studio
  • Ladda ner och installera android studio pluginent från Fabric.
  • Öppna ditt project och starta Fabric pluginet
  • Välj ditt project i Fabric pluginet och välj organisation
  • Följ instruktionerna för Crashlytics
  • När Crashlytics har installerats i din android app klicka på build alternativet och "Generate Signed APK..."
  • Välj appen och fortsätt till nästa steg
  • Skapa en ny keystore. (exempel på detta: <Projekt namn>/android/keystores/release.keystore)

Skapa en APK i android studio

  • Logga in med lösenorden som du precis har skapat och skapa en release APK.

Skapa en APK med react native

  • Skapa en global gradle fil i sökvägen user/.gradle/gradle.properties
  • I gradle.properties filen skapar du 2 variabler "PROJEKTNAMN_STORE_PASS=lösenord för din keystore" och "PROJEKTNAMN_ALIAS_PASS=lösenord för release alias"
  • När filen har sparats så ska gradle.properties (Global Properties) finnas i ditt projekt i android studio under "Gradle Scripts"
  • Öppna sedan build.gradle och skapa "signingConfigs" efter "splits"
signingConfigs {
  release {
    if (project.hasProperty('PROJEKTNAMN_STORE_PASS')) {
      storeFile file('../keystores/release.keystore')
      storePassword PROJEKTNAMN_STORE_PASS
      keyAlias 'release'
      keyPassword PROJEKTNAMN_ALIAS_PASS
    }
    if (System.getenv("TRAVIS")) {
      storeFile file('../keystores/release.keystore')
      storePassword System.getenv("ANDROID_KEYSTORE_PASS")
      keyAlias 'release' keyPassword System.getenv("ANDROID_ALIAS_PASS")
    }
  }
}
  • Kör sedan "react-native run-android --variant=release" i roten på ditt projekt i terminalen.

Gör ett utskick

  • När en release apk har skapats gå sedan in i Fabric pluginet och välj ditt projekt som  du har skapat.
  • Dra in release APK filen </p>

Steg 2 - Förenkla byggena med Fastlane

Skapa en testgrupp för de automatiska utskicken med fastlane på Fabric.io
  • Gå till Fabric.io och välj antingen iOS eller Android projektet
  • Klicka på Beta sedan manage groups och skapa din testgrupp. Notera alias i små bokstäver.
  • Skapa 2 stycken Gemfiles: android/Gemfile ios/Gemfile
  • I Båda gemfilerna ska det finnas:
source "https://rubygems.org"
gem "fastlane"

Kör sedan

  • "bundle install"
iOS
Android
  • Gå till roten av ditt projekt i terminalen
  • Gå till android mappen
  • Initisiera Fastlane med "bundle exec fastlane init" 2 filer skapas: Fastfile och Appfile
  • Öppna Fastfile och ändra på raden där det står crashlytics under lane :beta till:

Skapa en .env fil under fastlane mappen. Denna fil ska inte committas till versionshantering Lägg till

CRASHLYTICS_API_TOKEN=organisationens_api_token
CRASHLYTICS_BUILD_SECRET=organisationens_build_secret

Öppna Fastfile och skapa en beta lane

desc "Submit a new Beta Build to Crashlytics Beta"
lane :beta do
gradle(task: "clean assembleRelease")
crashlytics(
  groups: "aliaspåtestgrupp"
)
end
  • Testa om det funkar genom att köra kommandot "bundle exec fastlane beta" i terminalen

Steg 3 - Köra Fastlane beta på Travis CI

  • Skapa en travis.yml fil
  • Skapa 2 nya filer: travis/android.sh travis/ios.sh
  • I android.sh filen ska det stå:
#!/bin/bash

if [[ $TRAVIS_BRANCH == 'develop' ]]
then
  (cd android && bundle exec fastlane android beta)
fi
  • I ios.sh ska det stå:
#!/bin/bash

if [[ $TRAVIS_BRANCH == 'develop' ]]
then
  (cd ios && bundle exec fastlane ios travisbeta)
fi
iOS
Android
  • Under install: (i android delen) i din travis.yml fil
- gem install bundler
- "(cd android &amp;&amp; bundle install --path vendor/bundle)"
  • Skapa en rad som heter script: och under den raden skriv:
- 'if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then bash ./travis/android.sh; fi'