Co se stane, když podceníte paměť v Swiftu

From Madagascar
Revision as of 01:10, 2 October 2026 by 185.158.104.124 (talk) (Created page with "Stav aplikace a životní cyklus obrazovky Dalším častým zdrojem chyb je práce se stavem. V moderním Swiftu se používá kombinace struktur a pozorovatelných objektů. Pokud si nejste jistí, kde má data žít, držte se jednoduchého pravidla: stav, který se týká jedné obrazovky, patří do dané obrazovky. Stav, který sdílí více obrazovek, patří výš do hierarchie. Když to porušíte, vzniknou nekonzistence, kdy jedna část aplikace zobrazuje star...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Stav aplikace a životní cyklus obrazovky Dalším častým zdrojem chyb je práce se stavem. V moderním Swiftu se používá kombinace struktur a pozorovatelných objektů. Pokud si nejste jistí, kde má data žít, držte se jednoduchého pravidla: stav, který se týká jedné obrazovky, patří do dané obrazovky. Stav, který sdílí více obrazovek, patří výš do hierarchie. Když to porušíte, vzniknou nekonzistence, kdy jedna část aplikace zobrazuje stará data a druhá nová. Pomůže vám také pochopit, kdy se obrazovka znovu vytváří a kdy jen aktualizuje. Právě tady se nejčastěji ztrácejí data nebo se naopak zbytečně načítají znovu.

Častou chybou je neošetřená expirace. Vždy kontrolujte claim „exp" a při vypršení tokenu vracejte 401 Unauthorized s jasnou zprávou. Pokud tokeny vydáváte více službám, nastavte správné „aud" (audience) a „iss" (issuer). Bez těchto kontrol může token vydaný pro jinou službu získat přístup tam, kam nepatří. Dále nikdy neposílejte token v URL – může se dostat do logů a historie prohlížeče.

Implementace JWT není složitá, ale chyby v detailech mají vážné důsledky. Držte se zásady nejmenšího oprávnění, kontrolujte všechny relevantní claimy a nikdy nedůvěřujte tokenu bez ověření podpisu. Pravidelný audit a testování zranitelností by měly být samozřejmostí.

Na co si dát pozor v praxi Doba platnosti tokenu by měla být krátká – typicky 15 minut až hodina. Pro delší relace použijte refresh token, který má delší platnost a lze jej revokovat. Refresh token ukládejte bezpečně, ideálně v httpOnly cookie, nikdy v localStorage. Přístupový token naopak může být v paměti nebo v cookie s příznakem Secure a SameSite. Vyhněte se ukládání citlivých údajů do payloadu – token je pouze podepsaný, ne šifrovaný, takže si jej kdokoli může přečíst.

Proveďte audit stávající sady a u každého testu odpovězte na jednu otázku: závisí výsledek na stavu mimo testovanou funkci? Pokud ne, patří do jednotkové vrstvy. Pokud ano, do integrační. Testy, které nedokážou odpovědět ani na jednu variantu, obvykle jen kopírují implementaci a nemají hodnotu – ty smažte. Počet integračních testů držte výrazně nižší než jednotkových, obvykle v poměru jedna ku pěti až jedné ku deseti.

Pro bezpečný přenos používejte výhradně HTTPS. Token v hlavičce Authorization je sice běžný, ale bez TLS jej může odposlechnout kdokoli na síti. Při nasazení za proxy nebo API bránou ověřte, že nedochází k přepisování hlaviček. Zvažte také rotaci podpisových klíčů – staré klíče nechte chvíli platné pro ověření, ale nové tokeny podepisujte klíčem novým. Tím předejdete výpadkům při kompromitaci klíče.

U síťových aplikací narazíte na zvláštní variantu copyleftu, která se spouští při poskytování služby přes síť. Pokud provozujete server a upravíte takto licencovaný kód, může vzniknout povinnost zpřístupnit zdrojový kód uživatelům služby. To bývá pro mnohé překvapení, protože si myslí, že když software nešíří jako soubor, nic neporušují. Není to pravda. Před nasazením do produkce si ověřte, jestli vaše úpravy spouštějí tuto povinnost.

JWT (JSON Web Token) je kompaktní, samostatný token, který nese informace o uživateli a jeho oprávněních. Skládá se ze tří částí: hlavičky, payloadu a podpisu. Hlavička určuje algoritmus podpisu, payload obsahuje tvrzení (claims) – např. identifikátor uživatele, roli, čas expirace. Podpis zaručuje, že token nebyl pozměněn. Token se obvykle předává v hlavičce Authorization: Bearer . Výhodou je bezstavovost – server nemusí ukládat relace, což usnadňuje škálování.

Vývoj aplikací pro iOS v Swiftu vypadá na začátku jednoduše: nainstalujete vývojové prostředí, vytvoříte nový projekt a za chvíli běží první obrazovka. Jenže skutečné problémy nepřicházejí při psaní prvního kódu, ale ve chvíli, kdy aplikace začne růst. Právě tehdy se ukáže, jestli máte pevné základy, nebo jen slepenec obrazovek, které spolu nekomunikují.

Když do projektu přidáváte cizí kód, kontrolujte kompatibilitu licencí. Ne každá licence se dá zkombinovat s jinou. Permisivní licence se obvykle snášejí s copyleftem, ale dva různé silné copylefty vedle sebe často skončí konfliktem. Veďte si seznam závislostí i s jejich licencemi. Automatické nástroje sice mnohé odhalí, ale neposoudí, jak přesně kód používáte, a právě na tom záleží.

Kontrola nestačí jednorázově. Nové dotazy vznikají při každé změně a je snadné zapomenout na parametrizaci právě tam, kde se přidává filtr nebo export. Proto se vyplatí zavést pravidlo, že přímé spojování vstupu do SQL se v kódu vůbec nesmí objevit, a to i v pomocných funkcích a testech. Pravidelná revize dotazů a testování s neobvyklými vstupy odhalí slabá místa dřív než útočník.