90a1390716
Fixes reported by testers and found in an app review: - First message right after install no longer fails. Before the app finished registering with the relay, the outgoing message could crash on a null delivery address. The profile field is now optional and the send path throws a clear "still connecting, try again shortly" error while registration completes in the background. - The QR code and share link now appear only once the delivery address is ready. Previously a link generated before the first connection lacked routing, so the other side could not send the first message. The screen now shows a connecting state and reactively swaps in the QR when ready. - Incomplete contact links are rejected on import instead of failing at first send, with a clear prompt to ask for a fresh link. - Auto-lock no longer silences the app: after locking and unlocking, messaging is restarted (it previously stayed dead until app restart). - Group messages are marked failed on a non-per-member send error instead of hanging in the "sending" state forever. - Hardened the relay client against a rare duplicate connection when toggling Tor or locking mid-connect, and fromShareString now rejects a delivery address of the wrong length. - Pin unifiedpush below 6.2.0 to drop the webcrypto dependency (its native framework lacks LC_ENCRYPTION_INFO and blocked the iOS upload). - Skip Android release lint (network dependency check hangs on the build host and adds no value for a Flutter app).
10 KiB
10 KiB
Changelog
Všechny podstatné změny v aplikaci Šepot. Formát dle Keep a Changelog, verzování dle ajtak standardu.
[1.1.1] – 2026-07-18
Opraveno
- Odeslání první zprávy hned po instalaci už neselže. Krátce po založení účtu, než se aplikace stihla připojit k relayi, mohla zpráva spadnout s hláškou „Odeslání selhalo". Nově se v tu chvíli ukáže srozumitelné „Šepot se ještě připojuje — zkus to za chvíli" a připojení proběhne na pozadí.
- QR kód a odkaz se ukážou až s doručovací adresou. Když sis chtěl ukázat vlastní QR dřív, než se aplikace poprvé připojila, vygeneroval se neúplný odkaz — protistrana pak nemohla poslat první zprávu („Kontakt nemá doručovací adresu"). Nově se místo neúplného kódu ukáže stav připojování a QR se objeví, jakmile je hotové.
- Neúplný odkaz kontaktu se odmítne při přidání, ne až při prvním odeslání — s jasnou výzvou požádat protistranu o nový odkaz.
- Zamčení po nečinnosti už neumlčí aplikaci. Po automatickém zamknutí a opětovném odemčení se zprávy zase přijímají i odesílají — dřív mohl messaging zůstat po odemčení vypnutý až do restartu aplikace.
- Skupinová zpráva se při chybě neodeslání označí jako neodeslaná místo aby zůstala navždy ve stavu „odesílá se".
- Ošetřeno vzácné zdvojení spojení s relayem při rychlém přepnutí Toru nebo zamčení během připojování.
Změněno
- Interní úklid závislostí notifikací (odstraněna nepoužívaná větev, která komplikovala sestavení verze pro iOS).
[1.1.0] – 2026-07-13
Přidáno
- Náhled fotky před odesláním. Vyfocená nebo vybraná fotka už neodchází okamžitě — otevře se náhled, kde jde fotku otočit, kreslit po ní prstem (7 barev, krok zpět), přidat na ni text (tažením se přesouvá, klepnutím upraví) a připojit popisek. Odejde až po klepnutí na Odeslat; zavření náhledu nic nepošle.
Opraveno
- Nastavení se nevykreslilo — obrazovka místo obsahu ukazovala chybovou hlášku „Tahle obrazovka se nevykreslila". Profilová karta předávala do překladu otisk klíče jako objekt místo textu.
- Avatar s iniciálami spadl na prázdném jménu nebo jménu s dvojitou mezerou; iniciály se nově skládají po grafémech, takže nerozpůlí emoji.
- Písma se dodávají v aplikaci (Inter, JetBrains Mono — OFL). Aplikace dřív stahovala fonty za běhu z Google CDN — síťový požadavek na cizí server navíc a binárka odlišná od zveřejněného zdroje.
- Trvale vadná příchozí zpráva už neotravuje frontu. Zpráva, jejíž obsah nejde po dešifrování zpracovat (poškozená pole od upraveného klienta), se potvrdí a zahodí — dřív se doručovala donekonečna při každém připojení. Nedešifrovatelné obálky fronta dál drží.
- Příloha s poškozeným náhledem od protistrany shodila vykreslení bubliny; vadný náhled se nově zahodí při příjmu a base64 krypto polí příloh se validuje.
- Zachycení výměny důvěryhodního kořene relaye (signál MITM) na pozadí — dřív tichá neošetřená výjimka, teď příznak čitelný pro UI.
- PNG bez průhlednosti (screenshoty, upravené fotky) se posílají jako JPEG — několikanásobně menší přenos; PNG zůstává jen pro obrázky se skutečnou průhledností.
[1.0.0] – 2026-07-11
První ostrá verze. Šepot je od 11. 7. 2026 open source — kompletní zdrojový kód aplikace i serveru je veřejný na gitea.ajtak.it/julius.joska/sepot (zrcadlo github.com/juliusjoska/sepot).
Přidáno
- Aplikace mluví pěti jazyky: česky, anglicky, německy, rusky a italsky. Jazyk se řídí systémem (neznámé jazyky spadnou na angličtinu), nebo ho přepneš ručně v Nastavení → Obecné. Přeložené jsou i notifikace, chybové hlášky, iOS dialogy oprávnění a chybová obrazovka startu; volba jazyka funguje už na zamykací obrazovce.
- Připojení přes Tor. Přepínač v Nastavení → Připojení (Android, vyžaduje Orbot): provoz na server jde přes síť Tor a skryje tvou IP adresu. Přepnutí přestaví spojení za běhu, bez restartu aplikace.
- Skupinové konverzace. Skupinu (až 128 členů) založíš z Kontaktů, posílat do ní jde všechno co do běžného chatu — text, fotky, přílohy, hlasovky, reakce, odpovědi i mizící zprávy. Menu nabízí seznam členů, přejmenování a odchod. Zprávy jsou end-to-end šifrované každému členovi zvlášť, takže platí stejná ochrana jako v běžné konverzaci; server o skupině neví nic.
Opraveno
- Automatický zámek, změna PINu i nátlakový PIN ověřeny na zařízení.
[0.3.2] – 2026-07-10
Přidáno
- Smazání účtu maže i server. „Smazat všechna data" nově kromě
lokálního wipe odregistruje účet z relaye (
DELETE /v1/identity): smaže se registrace identity, záznamy zařízení, distribuční klíče, push token i fronta nedoručených zpráv. Když je zařízení offline, aplikace na to upozorní a zbytek řeší podpora@sepot.cz.
Opraveno
- iOS: privacy manifest (
PrivacyInfo.xcprivacy) je součástí Xcode projektu — konec ručního vkládání při každém buildu (ITMS-91053). - iOS:
Info.plistměl dvakrátCFBundleDisplayName(jednou bez diakritiky) a povoloval landscape, ačkoli je aplikace zamčená na portrét. Sjednoceno.
[0.3.1] – 2026-07-09
Opraveno
- Nahlašování už nevybízí k vkládání obsahu zpráv. Formulář dřív nabízel „pokud chceš něco doložit, vlož to do popisu sám“. U hlášení o ohrožení dítěte by to znamenalo, že se k provozovateli dostane materiál, jehož držení je trestné — a k posouzení ho stejně nesmí použít. Nově formulář obsah odmítá a u této kategorie odkazuje na STOPonline.cz a Policii ČR.
[0.3.0] – 2026-07-09
Nahlašování zneužití a standardy ochrany dětí — bez nich Šepot nesmí do obchodů (Google Play UGC policy, Child Safety Standards, App Store 1.2).
Přidáno
- Nahlášení zneužití — Nastavení → Bezpečnost → Nahlásit zneužití, nebo z menu konverzace. Do teď „nahlásit“ jen zablokovalo kontakt a nikam nedošlo; nově hlášení dorazí provozovateli. Kategorie zahrnují ohrožení dítěte (CSAE), které se řeší přednostně.
- Standardy ochrany dětí — veřejný dokument na sepot.cz/bezpecnost-deti, odkaz přímo z nastavení.
- Deklarace exportní compliance (
ITSAppUsesNonExemptEncryption) — Šepot používá vlastní E2E šifrování, což se Applu hlásí pravdivě.
Opraveno
- iOS: bílá obrazovka po spuštění. Nativní knihovna libsignal se na
iPhonu nenačetla (framework je v
Frameworks/, ale není zalinkovaný, a výchozí loader ho hledal v kořeni.app). Start teď knihovnu načítá přes@rpatha navíc už nikdy neskončí němou plochou — když se šifrovací jádro nespustí, objeví se čitelná chybová obrazovka s textem k odeslání. - Verze uvedená v Nastavení → O aplikaci ukazovala pořád
0.1.0.
Poznámka k soukromí
Hlášení neodchází přes relay, ale na webový server sepot.cz — ten se při odeslání dozví IP adresu odesílatele. Aplikace na to upozorňuje ještě před odesláním. Obsah zpráv se neodesílá nikdy; do hlášení jde jen to, co uživatel sám napíše.
[0.2.0] – 2026-07-08
Velká funkční vlna — z E2E základu je plnohodnotný soukromý messenger.
Přidáno
- Jádro chatu — odpovědi na zprávy, reakce emotikonem, úprava a mazání odeslaných zpráv.
- Hlasové zprávy — nahrávání mikrofonem přímo v chatu, přehrávání s průběhem. Šifrované per-file, plaintext audio nikdy nejde na disk.
- Obnova účtu ze zálohovací fráze — 24 slov vrátí tvoji identitu (stejný SEP kód, kontakty tě dál poznají).
- Šifrované zálohy historie — export/import konverzací; zálohu dešifruje jen tvoje identita.
- Blokování a nahlášení kontaktu — příchozí zprávy od blokovaného se zahodí.
- Potvrzení přečtení (volitelné, výchozí vypnuto).
- Smazat u mě — lokální smazání zprávy vedle „Smazat pro všechny".
- Zabezpečení obrazovky — blok screenshotů a skrytí obsahu v přepínači aplikací.
- Nátlakový (decoy) PIN — druhý PIN otevře prázdnou aplikaci; skutečná data zůstanou skrytá.
- Nativní iOS push (APNs) — bez závislosti na Googlu.
Změněno
- Sjednocené logo napříč launcherem, splash obrazovkou i uvnitř aplikace.
- Čistší pole pro psaní — jeden tenký obrys, ikony uvnitř, nižší profil.
- Bubliny se scalují podle délky zprávy.
Opraveno
- Doručenky (✓✓) se povýší i u offline příjemce, jakmile si zprávu vyzvedne.
- Náhledy fotek už neukazují předchozí obrázek (chyba recyklace v seznamu).
Bezpečnost
- Zálohy i decoy PIN stojí na oddělených šifrovaných databázích a klíčích odvozených z identity.
[0.1.0] – 2026-07-04
První beta.
Přidáno
- End-to-end šifrované zprávy (libsignal, PQXDH + Double Ratchet, sealed sender) přes vlastní relay (WSS + Tor onion).
- Fotky a dokumenty — šifrované přílohy.
- Ověření kontaktu přes safety number a QR.
- Mizící zprávy s per-konverzace TTL.
- PIN (Argon2id) a biometrické odemčení, šifrovaná lokální DB (SQLCipher).
- Push — UnifiedPush (výchozí), FCM (opt-in).
- Bez telefonního čísla, bez e-mailu, bez reklam.
Verzování
- versionName
0.MINOR.PATCHv betě →1.0.0= veřejné vydání. - MINOR = nová várka funkcí / milník (0.2.0 → 0.3.0 → 0.4.0…).
- PATCH = jen opravy chyb a drobnosti (0.2.1, 0.2.2…).
- Build number (
+N) roste+1při každém uploadu, nezávisle na versionName, stejný pro iOS i Android. Uživatel ho nevidí.