Odeslat poptávku

Jak zautomatizovat vydání a release mobilních aplikací? S Fastlane!

V našem dalším odborném článku se díváme na problematiku vydávání a release aplikací pro platformy Android a iOS. Odhalujeme, jakým způsobem k těmto aktivitám přistupujeme my, a přinášíme stručný návod dalším vývojářům.

Publikace aplikace = poměrně náročný proces

Při vývoji aplikace je vhodné průběžně testovat její dokončené části. Proto však musí vývojář aplikaci archivovat pomocí vývojového prostředí XCode a poté získaný archiv nahrát na Testflight (nebo jiný testovací portál) pro testery. Když je aplikace hotová, odladěná od všech chyb a připravená na produkční vydání do AppStore, je potřeba tento proces zopakovat a nahrát screenshoty aplikace ve všech podporovaných jazycích. Navíc je potřeba spravovat certifikáty, což bývá velká otrava a často u toho ztratíme pár vlasů. Nebylo by ale super, kdybychom si všechno toto trápení mohli odpustit díky nástroji, který by nám celý  proces zautomatizoval? 

Fastlane tool - velmi schopný pomocník 

Fastlane je pravděpodobně ten nejlehčí způsob, jak zautomatizovat vydání a release aplikací pro platformy Android/iOS. Postará se za nás o určité kroky, které by nám jinak zbytečně vzaly drahocenný čas. Řeč je například o automatické zvýšení verze aplikace, archivaci aplikace, changelog atd.

Funkce Fastlane:

  • Automatické vygenerování screenshotů ve všech jazycích a pro všechna zařízení, která aplikace podporuje.
  • Beta Deployment - Vydání beta verzí průběžného vývoje pro testery.
  • AppStore Deployment - Release nové produkční verze do AppStore.
  • Code Signing - Správa certifikátů potřebných pro vývoj a samotný release.

Po celém dokončení procesu vydání umí Fastlane také například poslat zprávu do Slacku, ve které bude informovat všechny uživatele vybraného kanálu o jejím vydání. Fastlane je také možné integrovat do již existujícího CI (Bitrise, Jenkins, ...), čímž je proces ještě pohodlnější. 

Dost ale teorie, pojďme skočit na instalaci a samotnou implementaci do projektu! 

Instalaci Fastlane je možné provést několika způsoby. U nás v Dactylu jsme využili Ruby, ale instalace je možná například i pomocí HomeBrew.

HomeBrew instalace

brew install fastlane

Následně doporučujeme nastavit Fastlane match pro správu certifikátů. Návod je přímo na stránkách Fastlane a je velmi dobře napsaný. Bylo by tedy zbytečné jej opisovat, a proto vám zde vložíme aspoň odkaz na nastavení.
 
Po úspěšné instalaci Fastlane se nyní přesuneme do složky projektu a v terminálu zadáme: 

fastlane init

 

To nám vygeneruje několik nových souborů do projektu - Appfile, Gemfile a Fastfile.
 
Do projektu ještě přidáme jeden soubor, který nazveme Pluginfile. Do něj nainstalujeme plugin pro automatické zvýšení verze aplikace. To provedeme vložením jednoho řádku do tohoto vytvořeného souboru.

gem 'fastlane-plugin-versioning'

Gemfile - slouží pro implementaci gemů pro Fastlane. 
AppFile - obsahuje Apple ID.
Fastfile - spravuje jednotlivé ,,lanes”.
 
V tomto tutoriálu si následně ukážeme, jak nastavit lane tak, aby nám Fastlane vydala verzi aplikace pro testery. Kroky každého vývojáře se můžou lišit, neboť každý má své vlastní potřeby, proto není nutné se tohoto postupu držet úplně přesně. 
 
V souboru AppFile určíme ID aplikace tak, aby sedělo s app_identifier v Xcode a také na App Store Connect.

for_platform :ios do 
  for_lane :beta do 
     app_identifier 'bundle_id_aplikace' 
  end

 

Nyní pojďme nastavit poslední soubor Fastfile. Prvně je potřeba nastavit název první lane a definovat kroky, které se v rámci procesu provedou. Na začátek je dobré si v souboru vytvořit pár proměnných, jež můžeme využít při větším počtu ,,lanes” (např. jedna pro betu, druhá pro produkční release).

buildFinalTarget = '' 
currentBranch = '' 
xcodeproj = 'vaseAplikace.xcodeproj' 
appleID = ''

 

Následně můžeme vytvořit první lane:

lane :beta do 
    buildFinalTarget = 'nazevVasehoTargetu' 
    currentBranch = 'nazevBranch' 
    appleID = 'vaseAppleId' 
    test_flight_build()
    commit_version() 
  end 
  • buildFinalTarget - název targetu, ze kterého budete chtít build udělat.
  • currentBranch - název větve, která bude pro build použita.
  • appleID - vaše Apple ID - je možné získat z AppStore Connect.
  • test_flight_build() a commit_version() budou definovány níže.

Následně přidáme test_flight_build(), který nám vybuildí aplikaci pro TestFlight

lane :test_flight_build do


    desc "Push a new #{buildFinalTarget} build to TestFlight" 


    increment_build_number( 
      xcodeproj: xcodeproj 
    ) 


    sync_code_signing( 
      type: 'appstore', 
      readonly: true
    ) 


    build_app( 
      clean: false, 
      workspace: "lifeapp-ios.xcworkspace", 
      configuration: "VaseKonfigurace", 
      scheme: buildFinalTarget,
      export_method: "app-store", 
      output_directory: "./build", 
      include_bitcode: true
    )

 

Configuration může být například “Release”, “Beta” atd. 
Posledním krokem je implementace commit_version, která vytvoří commit s novou verzí. Je zde také možnost definovat vlastní commit nebo i další kroky, které chcete provést.  

 lane :commit_version do


   build_number = get_build_number(xcodeproj: xcodeproj)
 
   version = get_version_number(
     xcodeproj: xcodeproj, 
     target: buildFinalTarget
   ) 
 
   commit_version_bump(
     message: "Release-#{version}-#{build_number}", 
   )
 
   add_git_tag( 
     grouping: "fastlane", 
     prefix: "#{version}-" 
   )
 
    push_to_git_remote( 
      remote_branch: currentBranch, 
      force: true, 
      tags: true 
   ) 
  end

 

Nyní bychom měli mít vše nastavené a nachystané pro náš první build! Než samotný fastlane spustíte, ujistěte se, že máte veškeré změny commitnuté a nejsou žádné rozpracované změny. Pro samotné spuštění nyní stačí v terminálu přejít do složky projektu a zadat jeden jediný příkaz: 

fastlane beta

 

Pokud je vše nastavené správně, měli byste vidět po dokončení něco takového!

Doufáme, že vám tento tutoriál pomůže při vlastním řešení! Pokud jste narazili na problémy nebo byste měli jakýkoliv dotaz, neváhejte se nás kontaktovat! 
 
 
Autorem tohoto textu je Kevin Singh, náš mobile team lead.