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

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")
- Adresa repozitáře, kam se všechno bude ukládat.
- 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.
- ID týmu, které se dá zjistit např. tady: https://developer.apple.com/account/#/membership
- Bundle identifier aplikace.
- 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!