Odeslat poptávku

2 nástroje, které vám zjednoduší práci s certifikáty a assety při vývoji iOS aplikací

Za posledních pár let jsme v našem týmu iOS vývojářů vyzkoušeli velké množství knihoven a nástrojů. 
Některé jsme vyhodnotili jako zbytečné, k jiným se vracíme při řešení některých specifických problémů. Hrstka z nich se zařadila mezi absolutní základ, který používáme na všech projektech už od jejich úplného začátku. A pořádně nám usnadňují práci.

Mezi ty nepostradatelné nástroje patří i Fastlane Match a R.swift, se kterými se vám vyplatí seznámit. První zmíněný usnadňuje nekonečný boj s certifikáty, druhý zase zásadním způsobem zvyšuje efektivitu při používání assetů, jako jsou obrázky, soubory, překlady a podobně.

Fastlane Match

Každý menší tým už na to určitě někdy narazil. Vyvine se aplikace, všechno se otestuje a pustí do světa. Uživatelé začnou aplikaci stahovat a najednou se objeví kritický bug. Ale co čert nechtěl, kolega, který aplikaci vyvíjel, je zrovna na dovolené. 

Oprava bugu se přiřadí někomu jinému z týmu. Ten otevře projekt a zjistí, že nemá potřebné certifikáty pro podpis aplikace. Má je samozřejmě jenom jeho kolega, který si na dovolenou nevzal notebook. 

Proto je musí smazat, vytvořit si nové, a až se mu kolega vrátí z dovolené, musí si vzpomenout, že mu je má vyexportovat a poslat, aby za týden neřešil ten samý problém znovu.

Přesně pro tyto případy je tu Fastlane Match. Je to nástroj pro snadnou správu a sdílení certifikátů a provisioning profilů. 
Dokáže se připojit na vývojářský účet od Applu, vytvořit potřebné certifikáty a provisioning profily pro danou aplikaci a potom tyto certifikáty nainstaluje na lokální zařízení. Zároveň je nahraje do soukromého repozitáře, odkud si je může stáhnout zbytek týmu.

Začít s Fastlane Match je extrémně jednoduché. Nejprve ho nainstalujete pomocí příkazu: 

sudo gem install fastlane

A poté přejdete do kořenové složky projektu, kde stačí napsat příkaz:

fastlane match init

Ten se ještě zeptá na adresu k soukromému repozitáři, kam se budou ukládat vygenerované certifikáty. Následně vytvoří nový soubor se jménem Matchfile. V základu toho v sobě moc nemá, ale po jednoduché konfiguraci může vypadat třeba takto:

git_url("https://gitlab.com/dactylgroup/ios-certificates.git")
git_branch("my-project")
team_id("XYZ")
app_identifier(["com.dactylgroup.my-project"])
username("APPLE_ID")
  1. Adresa repozitáře, kam se všechno bude ukládat.
  2. Název větve, kam se mají vygenerované certifikáty uložit. Fastlane si potom vytvoří v repozitáři větev s daným jménem.
  3. ID týmu, které se dá zjistit např. tady: https://developer.apple.com/account/#/membership
  4. Bundle identifier aplikace.
  5. Apple ID vašeho týmu.

Po jednoduché konfiguraci už stačí jenom napsat:

fastlane match development

Fastlane Match vygeneruje nové certifikáty a provisioning profily v případě nového projektu nebo je jenom stáhne z repozitáře a nainstaluje na lokální zařízení. Podle potřeby je kromě development dostupné i appstore, enterprise nebo adhoc.

Repozitář s vygenerovanými certifikáty a profily. (Zdroj: https://docs.fastlane.tools/actions/match/)

R.swift

Skript spouštěný při každém buildu aplikace prohledá celý projekt a najde v něm veškeré zdroje jako obrázky, fonty, překlady nebo storyboardy. Vytváří reference na tyto zdroje v souboru nazvaném R.generated.swift.

Výsledkem je, že například místo načítání obrázku z asset katalogu pomocí jeho jména může jeho získání vypadat takto:

Zdroj: https://github.com/mac-cain13/R.swift

A pokud bychom název obrázku změnili v asset katalogu, kompilátor zahlásí error:

Zdroj: https://github.com/mac-cain13/R.swift

Programátor tím získá hned několik benefitů:

  • Pokud by se obrázek někdy z projektu smazal nebo se přejmenoval, nepůjde přeložit a programátor dostane hlášení o chybě.
  • Plně funguje autocomplete.
  • Není potřeba přetypovávat. Pokud vytváříme třeba UITableViewCell pomocí R.swift, má správný typ.

Další situace, kdy má použití této knihovny velký přínos, jsou lokalizace, u kterých mohou snadno vzniknout stovky nebo i tisíce klíčů. Jejich zápis se potom změní z tohoto:

label.text = NSLocalizedString("registration.button.privacy-policy", comment: "")

na tento:

label.text = R.string.localizable.registrationButtonPrivacyPolicy()

A pokud je do řetězce potřeba doplnit další hodnoty, může to vypadat třeba takto:

/* “Email '%@' už existuje. */
label.text = R.string.localizable.errorEmailExists(email)

Další příklady, jak umí R.swift zjednodušit a zpřehlednit kód, najdete zde https://github.com/mac-cain13/R.swift včetně návodu na instalaci.

Oba nástroje nám v Dactylu zásadně zefektivňují práci. Proto budu rád, když článek nasdílíte kolegům, kterým by mohl pomoct. A jestli máte své „zlepšováky“, určitě nám o nich napište na Facebooku!