Fokussierter Tag mit 7 Commits für den neuen Matrix Mobile Client:
- Manalink - Expo React Native App für Matrix Chat
- Reactions - Emoji-Reaktionen auf Nachrichten
- Read Receipts - Lesebestätigungen
- Message Forwarding - Nachrichten weiterleiten
- EAS Build - TestFlight-Konfiguration
Manalink: Matrix Mobile Client
Neue Expo React Native App als nativer Mobile Client für das selbstgehostete Matrix-Setup.
Architektur
┌─────────────────────────────────────────────────┐
│ Manalink (Expo React Native) │
├─────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Rooms │ │ Chat │ │ Settings │ │
│ │ List │ │ View │ │ │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │
│ ┌──────────────────────────────────────┐ │
│ │ matrix-js-sdk │ │
│ │ matrix-sdk-crypto-wasm (E2EE) │ │
│ └──────────────────────────────────────┘ │
│ │
└──────────────────────────┬──────────────────────┘
│
▼
┌─────────────────────┐
│ Matrix Synapse │
│ (matrix.mana.how) │
└─────────────────────┘
Features
| Feature | Status | Beschreibung |
|---|---|---|
| Room List | ✅ | Alle Räume mit Unread Count |
| Chat View | ✅ | Nachrichten-Timeline |
| Reactions | ✅ | Emoji-Reaktionen auf Nachrichten |
| Read Receipts | ✅ | Lesebestätigungen senden/empfangen |
| Message Forwarding | ✅ | Nachrichten an andere Räume |
| DM Encryption | ✅ | E2EE Fix für Direktnachrichten |
| Media Upload | ✅ | Bilder und Dateien senden |
Reactions Implementation
// Emoji Reaction auf eine Nachricht
async function sendReaction(roomId: string, eventId: string, emoji: string) {
await matrixClient.sendEvent(roomId, 'm.reaction', {
'm.relates_to': {
rel_type: 'm.annotation',
event_id: eventId,
key: emoji,
},
});
}
DM Encryption Fix
Problem: Verschlüsselte DMs zeigten “Unable to decrypt” nach App-Neustart.
// Fix: Crypto Store korrekt initialisieren
const client = createClient({
baseUrl: homeserverUrl,
userId: userId,
accessToken: token,
cryptoStore: new IndexedDBCryptoStore(indexedDB, 'manalink-crypto-store'),
});
// Wichtig: initCrypto() VOR startClient()
await client.initCrypto();
await client.startClient();
EAS Build für TestFlight
Konfiguration für iOS TestFlight Distribution via EAS Build.
eas.json
{
"build": {
"development": {
"developmentClient": true,
"distribution": "internal"
},
"preview": {
"distribution": "internal",
"ios": {
"simulator": false
}
},
"production": {
"autoIncrement": true,
"ios": {
"buildConfiguration": "Release"
}
}
},
"submit": {
"production": {
"ios": {
"appleId": "[email protected]",
"ascAppId": "6744632877"
}
}
}
}
Root Dev Scripts
Neue Dev-Scripts im Root für einfaches Starten der Matrix-Apps.
{
"dev:matrix:mobile": "pnpm --filter @manalink/mobile start",
"dev:matrix:web": "pnpm --filter @matrix/web dev"
}
Monorepo Fix: sharp in neverBuiltDependencies
sharp wurde zu pnpm.neverBuiltDependencies hinzugefügt, um EAS Build Probleme zu beheben.
Problem
EAS Build schlug fehl, weil sharp native Binaries auf dem Build-Server nicht kompilieren konnte.
Lösung
// package.json (root)
{
"pnpm": {
"neverBuiltDependencies": ["sharp"]
}
}
Zusammenfassung
| Bereich | Commits | Highlights |
|---|---|---|
| Manalink App | 3 | Core App mit Room List & Chat |
| Features | 2 | Reactions, Read Receipts, Forward |
| EAS Build | 1 | TestFlight Konfiguration |
| Monorepo | 1 | sharp Fix für EAS |
Nächste Schritte
- Push Notifications - APNs Integration für iOS
- Voice Messages - Aufnahme und Abspielen
- Search - Nachrichten-Suche in Räumen
- SDK 55 Upgrade - Expo SDK Update