mirror of
https://codeberg.org/spla/Tuts.git
synced 2026-10-19 18:02:16 +00:00
Aplicació client en català de Mastodon, per a iOS
- Swift 100%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| Docs | ||
| Tuts | ||
| Tuts.xcodeproj | ||
| TutsNotificationService | ||
| TutsTests | ||
| TutsUITests | ||
| TutsWatch Watch App | ||
| TutsWatch Watch AppTests | ||
| TutsWatch Watch AppUITests | ||
| .gitignore | ||
| LICENSE | ||
| README.md | ||
Tuts
Client de Mastodon per a iOS i Apple Watch, escrit en Swift i SwiftUI. La interfície és en català.
Suport
Per a dubtes, errors o suggeriments:
- Correu: tuts@spla.cat
- Mastodon: @spla@mastodont.cat
Captures de pantalla
(pròximament)
Requisits
- Xcode 26 o superior
- iOS 26.2 o superior
- Compte a qualsevol servidor de Mastodon (o compatible amb la seva API)
- Les col·leccions demanen Mastodon 4.6 o superior; Tuts les amaga als servidors que no en tenen
Instal·lació
- Clona el repositori:
git clone https://codeberg.org/spla/Tuts.git - Obre
Tuts.xcodeprojamb Xcode - Selecciona el teu dispositiu o simulador
- Compila i executa (⌘R)
No cal cap dependència externa ni gestor de paquets.
Funcionalitats
Línia de temps
- Inici, local i federada
- Actualització en temps real (streaming): tuts nous, edicions i tuts esborrats
- Comptador de tuts nous i posició de lectura recordada per compte
- Forats a la línia de temps per baixar el tros que falta quan has estat temps fora
- Refresc complet amb un botó
- Tuts amb text, imatges, vídeos, GIFs i enquestes
- Previsualització de links (preview card)
- Tuts llargs truncats amb botó "Llegir més"
- Cites de tuts (Mastodon 4.5+), respectant el permís de cita de cada tut (Mastodon 4.6+)
- Històric d'edicions
- Impuls, favorit, marcador, resposta
- Bloquejar, silenciar i denunciar usuaris
Notificacions
- Notificacions agrupades (API v2, Mastodon 4.3+)
- Notificacions push xifrades, per compte, que obren la notificació al compte que l'ha rebut
- Tria dels tipus de notificació push
- Política de notificacions (filtrar qui no segueixes, comptes nous, etc.)
- Notificacions filtrades: avís a la pestanya i safata per llegir el que la política ha retingut i acceptar-ho o descartar-ho, amb el que s'accepta destacat a la llista
- Sol·licituds de seguiment: acceptar i rebutjar
- Notificacions de col·leccions, amb accés directe a la col·lecció
- Polling automàtic cada 60 segons
- Badge amb comptador de no llegides
- Accions ràpides (respondre, impulsar, favorit) des de la llista de notificacions
Publicar
- Editor de tuts amb emojis personalitzats del servidor
- Respostes i fils
- Editar tuts propis
- Esborranys locals
- Adjuntar imatges i vídeos
- Enquestes
- Visibilitat (públic, no llistat, privat, directe)
- Content Warning
- Programar tuts
Cerca
- Cerca de tuts, comptes i hashtags
- Tendències (tuts, hashtags i enllaços)
Col·leccions (Mastodon 4.6+)
- Les teves col·leccions i les col·leccions on surts
- Crear, editar i esborrar col·leccions (nom, descripció, tema, idioma, visibilitat, contingut sensible)
- Afegir i treure comptes, fins a 25 per col·lecció, respectant qui accepta sortir-hi
- Afegir algú a les teves col·leccions des del seu perfil
- Veure les col·leccions d'altres comptes
- Treure't d'una col·lecció d'algú altre
Perfil
- Vista del propi perfil amb tuts, respostes i impulsos
- Editar perfil
- Perfils d'altres usuaris
- Seguidors i seguits
- Llistes de comptes (qui ha marcat com a favorit, qui ha impulsat)
Altres
- Multi-compte (canvi ràpid entre comptes)
- Esborrar el compte des de l'app: obre la pàgina d'esborrat del servidor i, un cop fet, treu el compte de Tuts, del dispositiu i de l'Apple Watch
- Enllaços universals: els enllaços a tuts i perfils s'obren dins de Tuts
- Llistes personalitzades
- Seguir etiquetes i etiquetes destacades al perfil
- Anuncis del servidor
- Marcadors
- Filtres de contingut
- Bloquejar i silenciar
- Informació del servidor
- Denunciar tuts
- Traduir tuts
- Lightbox d'imatges amb gest de pinça
- Reproductor de vídeo i GIFs integrat
- Emojis personalitzats del servidor
- Aparença: tema clar, fosc o del sistema, color d'accent, mida del text i contrast (baix, per defecte, OLED amb negre pur i alt)
- Avís amb l'hora de desbloqueig quan el servidor aplica el límit de peticions
Apple Watch
- Línia de temps
- Notificacions
- Publicar tuts curts
Arquitectura
- Patró: MVVM amb SwiftUI
- Xarxa:
ClientAPI— crida directa a la API REST de Mastodon - Autenticació: OAuth 2.0 via
ASWebAuthenticationSession, token guardat al Keychain - Caché: SwiftData per a la línia de temps local
- Watch: WatchConnectivity per a la comunicació iPhone ↔ Watch
Estructura del projecte
Tuts/
├── App/ # Punt d'entrada (TutsApp.swift)
├── Components/ # Components reutilitzables (CellaToot, etc.)
├── Funcionalitats/
│ ├── Announcements/ # Anuncis del servidor
│ ├── Autenticacio/ # Login, registre, OAuth
│ ├── Bookmarks/ # Marcadors
│ ├── Cerca/ # Cerca, tendències i etiquetes
│ ├── Colleccions/ # Col·leccions de comptes
│ ├── Favorits/ # Favorits
│ ├── Filtres/ # Filtres, bloquejar, silenciar
│ ├── Llistes/ # Llistes personalitzades
│ ├── Notificacions/ # Notificacions
│ ├── Perfil/ # Perfil d'usuari
│ ├── Publicar/ # Editor de tuts, esborranys i programats
│ ├── Servidor/ # Info del servidor
│ └── Timeline/ # Línia de temps i detall de tut
├── Models/ # Models de dades (Status, Account, etc.)
└── Sistema/
├── Disseny/ # LiquidGlass, targetes i tema
├── Emmagatzematge/ # Keychain, caché, esborranys
└── Xarxa/ # ClientAPI
TutsNotificationService/ # Extensió que desxifra les notificacions push
TutsWatch Watch App/ # App de l'Apple Watch
API de Mastodon
Implementa els endpoints principals de l'API REST de Mastodon:
GET /api/v1/timelines/*— línies de tempsGET /api/v1/streaming(WebSocket) — temps realGET/POST /api/v1/markers— posició de lecturaGET/POST /api/v1/statuses/*— tuts, favorits, impulsos, quotesGET /api/v2/notifications— notificacions agrupadesGET/PATCH /api/v2/notifications/policy— política de notificacionsGET/POST /api/v1/notifications/requests/*— notificacions filtradesPOST/PUT/DELETE /api/v1/push/subscription— notificacions pushGET/POST /api/v1/follow_requests/*— sol·licituds de seguimentGET /api/v1/accounts/*— perfils i relacionsGET /api/v2/search— cercaPOST /api/v1/apps+ OAuth 2.0 — autenticacióGET /api/v1/lists/*— llistesGET/POST/PATCH/DELETE /api/v1/collections/*— col·leccionsGET/POST /api/v1/scheduled_statuses— tuts programatsGET/POST /api/v1/tags/*i/api/v1/featured_tags— etiquetesGET /api/v1/announcements— anuncis del servidorGET /api/v1/bookmarks— marcadorsGET /api/v1/filters/*— filtresGET /api/v1/trends/*— tendències