Tinodios: Tinode Messaging Client for iOS

Overview

Tinodios: Tinode Messaging Client for iOS

iOS client for Tinode in Swift.

Status: beta. Usable and mostly stable but bugs may happen.

Getting support

Features

Completed

  • Login
  • Register new accounts.
  • Start new chats.
  • Edit personal details.
  • Edit chat parameters.
  • View the list of active chats
  • Send and receive plain text messages one-on-one or in group chats.
  • In-app presence notifications.
  • Unread message counters.
  • Local data persistence.
  • Transport Level Security - https/wss.
  • Drafty: Markdown-style formatting of text, e.g. *style* → style.
  • Viewing attachments and inline images.
  • Delivery and received/read indicators for messages (little check marks in messages).
  • Muting/un-muting conversations and other permission management.
  • Invite contacts to the app by SMS or email.
  • Push notifications.
  • Attachments and inline images.

Not Done Yet

  • Previews not generated for videos, audio, links or docs.
  • Typing indicators.
  • No support for switching between multiple backends.
  • Mentions, hashtags.
  • Replying or forwarding messages.
  • End-to-End encryption.

Dependencies

SDK

Application

Push notifications

If you want to use the app with your own server and want push notification to work you have to set them up:

  • Register at https://firebase.google.com/, set up the project if you have not done so already.
  • Download your own config file GoogleService-Info.plist and place it in the Tinodios/ folder of your copy of the project. The config file contains keys specific to your Firebase/FCM registration.
  • Copy Google-provided server key to tinode.conf, see details here.

Translations

The app is currently available in the following languages:

  • English (default)
  • Chinese (simplified)
  • Chinese (traditional)
  • Russian
  • Spanish

More translations are welcome. See instructions.

Other

Screenshots

App screenshot - chat list App screenshot - conversation App screenshot - account settings App screenshot - topic info App screenshot - find people

Comments
  • File uploading and taking photo

    File uploading and taking photo

    Files don't upload (out of band). Tested on iOS 12.4.3. MessageCell for file is once display and disappear. In topic, click "+" attachment button -> "Image" -> "Take Photo" and app closed

    opened by YKuvonchbek 14
  • Some users are missing in Find-local and New Group-members views

    Some users are missing in Find-local and New Group-members views

    iOS client shows just 4 results in Find and New Group members views while Android shows 6:

    https://github.com/tinode/tindroid/blob/master/android-find-people.png https://github.com/tinode/tindroid/blob/master/android-new-topic.png

    opened by or-else 14
  • Crash in ContactsSynchronizer

    Crash in ContactsSynchronizer

    This is a fresh installation which has never logged in. It seems to assume that the database has been created.

    #5	0x000000010d4a6558 in SubscriberDb.createTable() at /tinode/ios/Tinodios/db/SubscriberDb.swift:68
    #6	0x000000010d3f31f5 in BaseDb.initDb() at /tinode/ios/Tinodios/db/BaseDb.swift:82
    #7	0x000000010d3f3e8f in static BaseDb.getInstance() at /tinode/ios/Tinodios/db/BaseDb.swift:100
    #8	0x000000010d3ee233 in ContactsManager.init() at /tinode/ios/Tinodios/account/ContactsManager.swift:32
    #9	0x000000010d3ede30 in ContactsManager.__allocating_init() ()
    #10	0x000000010d3edddc in globalinit_33_4AE933758BA578E6197EF98E870A28F2_func0 /tinode/ios/Tinodios/account/ContactsManager.swift:27
    #11	0x0000000111b7ddb5 in _dispatch_client_callout ()
    #12	0x0000000111b7f83c in _dispatch_once_callout ()
    #13	0x00000001111f6579 in swift_once ()
    #14	0x000000010d3edeb4 in ContactsManager.default.unsafeMutableAddressor at /tinode/ios/Tinodios/account/ContactsManager.swift:27
    #15	0x000000010d3a28f6 in ContactsSynchronizer.synchronizeInternal() at /tinode/ios/Tinodios/account/ContactsSynchronizer.swift:125
    #16	0x000000010d39f7ab in closure #1 in ContactsSynchronizer.authStatus.didset at /tinode/ios/Tinodios/account/ContactsSynchronizer.swift:45
    
    opened by or-else 9
  • Something wrong with auto-reconnect

    Something wrong with auto-reconnect

    Something is off with auto-reconnect. The client repeatedly creates connections to the server, sends {hi} but no {login}:

    2019/06/05 12:10:40 in: '{"hi":{"ua":"Tinodios\/1 (iOS 12.2; en); tinode-swift\/1.0","id":"151","dev":"CCE21C82-C877-4773-95BC-A903D2435274","lang":"en","ver":"0.15"}}' ip='127.0.0.1:50844' sid='dhf3tnguijE' uid=''
    2019/06/05 12:10:40 in: '{"sub":{"id":"129008","topic":"usr6gesh4vSn_Q","get":{"data":{"limit":24},"sub":{"ims":"2019-06-05T01:36:29.578Z"},"desc":{"ims":"2019-06-05T01:36:29.578Z"},"what":"data sub desc"}}}' ip='[::1]:50857' sid='bV_S6PJUNG4' uid='wjKtwAryZPg'
    2019/06/05 12:10:41 ws: session started nR_2zlGdunY 16
    2019/06/05 12:10:41 in: '{"hi":{"ua":"Tinodios\/1 (iOS 12.2; en); tinode-swift\/1.0","id":"152","dev":"CCE21C82-C877-4773-95BC-A903D2435274","lang":"en","ver":"0.15"}}' ip='127.0.0.1:50844' sid='dhf3tnguijE' uid=''
    2019/06/05 12:10:42 ws: session started 4b6b_1LlHoQ 17
    2019/06/05 12:10:42 in: '{"hi":{"ua":"Tinodios\/1 (iOS 12.2; en); tinode-swift\/1.0","id":"153","dev":"CCE21C82-C877-4773-95BC-A903D2435274","lang":"en","ver":"0.15"}}' ip='127.0.0.1:50844' sid='dhf3tnguijE' uid=''
    2019/06/05 12:10:43 ws: session started 3VNGbEQ74EI 18
    2019/06/05 12:10:43 in: '{"hi":{"ua":"Tinodios\/1 (iOS 12.2; en); tinode-swift\/1.0","id":"154","dev":"CCE21C82-C877-4773-95BC-A903D2435274","lang":"en","ver":"0.15"}}' ip='127.0.0.1:50844' sid='dhf3tnguijE' uid=''
    2019/06/05 12:10:44 ws: session started _LWpTGOz58I 19
    2019/06/05 12:10:44 in: '{"hi":{"ua":"Tinodios\/1 (iOS 12.2; en); tinode-swift\/1.0","id":"155","dev":"CCE21C82-C877-4773-95BC-A903D2435274","lang":"en","ver":"0.15"}}' ip='127.0.0.1:50844' sid='dhf3tnguijE' uid=''
    

    To reproduce start the server, connect the client. Shut down then restart the server. You may have to wait a few minutes before restarting.

    opened by or-else 9
  • Remove EditHistoryDb

    Remove EditHistoryDb

    This PR changes the logic of message replacement as follows:

    • EditHistoryDb is gone.
    • message content and head are never updated
    • added a new column replaced_by_seq to MessageDb which represents seq of the message that replaces the current row. This allows for easy latest version lookups.
    opened by aforge 7
  • App freezes in launchscreen

    App freezes in launchscreen

    Sometimes the app freezes and hangs in the launchscreen after sending a {hi} request to the server and not receiving a response (when we have an auth token saved on the device). Implement future timeouts to prevent such problems from happening.

    bug 
    opened by aforge 7
  • TinodiosNSExtension not working and notice not shown

    TinodiosNSExtension not working and notice not shown

    When we do these: 1.run TinodiosNSExtension with Tinode.app 2.log in with bob account. 3.send the app to the background. 4.set a breakpoint on didReceive() function in TinodiosNSExtension/NotificationService.swift. 5.send a message from frank to bob using another device or browser.

    result: badge increased on Tinode.app but breakpoint not issued and notification not shown in notification center.

    consider: I checked this by sending push notification manually in firebase (mutable-content:1, alert:{title,body}) , this work and breakpoint issued but because it didn't have enough payload, in line 44, exited.

    any suggestion?

    cannot reproduce 
    opened by hamedvbv 6
  • Picture directly from camera does not upload

    Picture directly from camera does not upload

    Describe the bug Press the add button -> choose image -> take photo ->empty image caption -> use photo -> image will not upload

    To Reproduce Steps to reproduce the behavior:

    1. Go to chat with someone
    2. Press the add button
    3. choose image
    4. take photo
    5. empty image caption
    6. use photo
    7. image will not upload

    Expected behavior

    1. Image should upload, but nothing happens
    2. if you choose "Camera roll" will work as expected

    Tinodios (please complete the following information):

    • Version 1.7.1
    • Device iPhone 11 Pro max
    • iOS version 14.7.1

    Server

    • Type :own setup
    • Server type : unmodified
    • Server version 0.17.9

    Additional context 2021-08-25 01:48:22.484798+0800 Tinodios[1297:270885] Keyboard cannot present view controllers (attempted to present <UIAlertController: 0x106864800>) 2021-08-25 01:48:29.176672+0800 Tinodios[1297:270885] [Camera] Failed to read exposureBiasesByMode dictionary: Error Domain=NSCocoaErrorDomain Code=4864 "*** -[NSKeyedUnarchiver _initForReadingFromData:error:throwLegacyExceptions:]: data is NULL" UserInfo={NSDebugDescription=*** -[NSKeyedUnarchiver _initForReadingFromData:error:throwLegacyExceptions:]: data is NULL} Elvvvis %b false image size: 282620, max inband size: 195584

    bug 
    opened by young310 5
  • 'MetaGetBuilder' is ambiguous for type lookup in this context

    'MetaGetBuilder' is ambiguous for type lookup in this context

    not sure if it is a bug or not, when I build the app, several errors like "xxx is ambiguous for type lookup in this context" raised

    image

    Maybe I did something wrong, please help

    cannot reproduce 
    opened by genepeng 5
  • Keyboard handling fix

    Keyboard handling fix

    This pull request have following purposes:

    1. Fix the issue when collectionView will scroll all the way down when keyboard appears by calculating correct value to add to collectionView.contentOffset.y on keyboard appearance.
    2. Make the code more compact and clear, by adding a separate util struct to get all necessary info about the keyboard and its frame.
    3. Remove unnecessary code like removeKeyboardObservers - it is not needed anymore since iOS9.
    opened by nikletsopen 5
  • Drafty parsing works

    Drafty parsing works

    This is the first part of implementing Drafty: parsing works, messages are converted to Drafty and sent as such. They appear formatted in Tindroid and Webapp.

    Tinodios shows Drafty messages as plain text.

    opened by or-else 5
Releases(v1.10.6)
  • v1.10.6(Dec 8, 2022)

  • v1.10.5(Nov 16, 2022)

  • v1.10.4(Nov 7, 2022)

    25c4e59 6b78241 Fix for disappearing chats. ae0eb80 Use AppDelegate.window instead of deprecated keyWindow. 3913192 Fix for data race in displaying an avatar f04a476 Make sure messages do not hide under keyboard.

    Source code(tar.gz)
    Source code(zip)
  • v1.10.3(Nov 3, 2022)

  • v1.10.2(Nov 1, 2022)

    25fe12a Update video call status text for started and accepted calls. dd4f371 Better processing of incoming call events. d754e35 More logging for FCM token methods. 2cee3ab Fix for a crash: move UiUtils.showToast under DispatchQueue.main.async 16040f6 adding video call screenshot b5ab8c8 Fix typo in var name. 00bcfe0 Do not publish message without a draft. 53772a9 5284308 UI tests

    Source code(tar.gz)
    Source code(zip)
  • v1.10.0(Oct 11, 2022)

    Video and audio calling

    Other changes: 094ae50 Update ChatListVC when app becomes active again. ddd496b Added link to translations instructions f984670 Fix crash with missing segue e0fd7e9 Visual tweaks 04426d6 Fix font styling in quotes 94ade45 Fix selection of message previews, remove redundant code 935fc0b Remove Pods/* from git 6f43cdc Provide pod installation instructions 099c04c Do not log out of app on network errors. 81b5e77 Retain account across DB updates to avoid logout

    Source code(tar.gz)
    Source code(zip)
  • v1.9.1(Jun 14, 2022)

  • v1.9.0(Jun 5, 2022)

    Sending and receiving audio messages

    Other changes:

    • [Go to the latest message] button.
    • Support for "message read" push notifications.
    • Delayed removal of deleted topics.
    • Bug fixes

    The full list of changes: https://github.com/tinode/ios/compare/v1.8.0...v1.9.0

    Source code(tar.gz)
    Source code(zip)
  • v1.8.0(Feb 16, 2022)

    Multiple new features:

    • Replying to messages.
    • Forwarding messages.
    • Avatars can now be sent as URLs.
    • Trusted badges: verified account, staff account, danger.
    • Translations updated, lots of missing strings added.
    • SwiftWebSockets replaced with stock URLSessionWebSocket.
    • TopicInfo refactored into multiple screens.
    • All icons8 icons replaced due to licensing.
    • Multiple bug fixes.

    The full list of changes: https://github.com/tinode/ios/compare/v1.7.9...v1.8.0

    Source code(tar.gz)
    Source code(zip)
  • v1.7.9(Aug 20, 2021)

    b508107 Show Last Seen in TopicInfo, update localizations, add missing strings. 66a1806 Fixed handling of LastSeen the same way as on Android. b9980cf 2a4acad Added Russian translation. aace2dc Actually add Chinese (hanT) translation to build.

    Source code(tar.gz)
    Source code(zip)
  • v1.7.2(Jul 30, 2021)

    826b7b1 Fix LastSeen not being refreshed properly b831692 159e4b7 Traditional Chinese translation from @SiderealArt 5bd9219 Run swiftlint on the codebase. 11bb8c8 Sync with Tindroid SDK. bec1319 Grp topics: reload upon receving new subscription data. 8e58e6a Constrain the size of previews.

    Source code(tar.gz)
    Source code(zip)
  • v1.7.1(Jun 5, 2021)

  • v1.6.2(May 28, 2021)

  • v1.6.1(Dec 20, 2020)

    • Support for sending and receiving large images as links to uploaded files.
    • Don't show [undefined] badge when permissions of group members are not available
    • Fix URL parsing and presentation
    • Channel indicator in chat entry

    Full list of changes: https://github.com/tinode/ios/compare/v1.5.0...v1.6.1

    Source code(tar.gz)
    Source code(zip)
  • v1.6.0(Dec 11, 2020)

  • v1.5.0(Sep 18, 2020)

    Support for channels: group chats with unlimited number of read-only members.

    The new functionality works only with the sandbox server. Production server is not yet updated for channels.

    Source code(tar.gz)
    Source code(zip)
  • v1.4.0(Jul 6, 2020)

    8f8eaaa Fix account deletion. 1d887b8 In contact sync, do not prepend data with prefixes (it's redundant). 1e6b318 Move Connection settings to a separate page in bundle. 22234a0 Fetch user desc in service extension if missing. ddc7fa9 Explicitly handle "sub" push notifications in the foreground. 58876e7 Attempt fixing {note recv} for push notifications. 59762be Pass background fetch when topic is attached. 1755cf8 Enable push notification background processing.

    Full list of changes: https://github.com/tinode/ios/compare/v1.3.3...v1.4.0

    Source code(tar.gz)
    Source code(zip)
  • v1.3.3(Jun 23, 2020)

    New features:

    • Spanish translation by @sanmiguel2019
    • Immediate contacts sync on change
    • Support for display of blocked contacts
    • Background uploads.
    • Key press and read notifications settings are being used now
    • Account settings refactored into 4 screens.

    Other changes:

    • Dropped support for iOS 9
    • Pods updated to latest versions
    • Fabric Crashlytics updated to Firebase Crashlytics
    • Session background indicator moved from {sub} to {hi} packet.

    Bug fixes:

    • Page loading in MessageViewController fixed
    • Fixes: file preview details ui and build.
    • Handle auth token expiration.
    • Fix auth token loss error.
    • Remove race condition in MessageInterctor.sendReadNote.
    • Fix saving-retrieving-updating credentials
    • Added iCloud entitlement

    Full list of changes: https://github.com/tinode/ios/compare/v1.2.3...v1.3.3

    Source code(tar.gz)
    Source code(zip)
  • v1.2.3(Apr 22, 2020)

    • Incognito mode: ability to be online while appearing offline to other users
    • Ability to delete account.
    • Chinese translations completed (would be nice for a native speaker to check them).
    • PromisedReply substantially refactored.
    • Dropped support for iOS 9.

    Bug fixes:

    • Crash in Drafty fixed.
    • Adding and deleting account contacts work as expected now.

    Full list of changes: https://github.com/tinode/ios/compare/v1.1.1...v1.2.3

    Source code(tar.gz)
    Source code(zip)
  • v1.2.0(Apr 13, 2020)

    • Incognito mode.
    • PromisedReply substantially refactored.
    • Adding and deleting account contacts works correctly now.
    • Crash in Drafty fixed.

    Full list of changes: https://github.com/tinode/ios/compare/v1.1.1...v1.2.0

    Source code(tar.gz)
    Source code(zip)
  • v1.1.1(Mar 14, 2020)

    Tagging of releases switched to Apple-required scheme of 1.x.x.

    Notable changes:

    • Images and documents are now offered for preview before sending.
    • Push notifications for new subscriptions are now handled.
    • Data race while sending read notifications fixed.
    • Password handling UI improved.
    • Several bug fixes.

    Full list of changes: v0.16.3...v1.1.1

    Source code(tar.gz)
    Source code(zip)
  • v0.16.3(Jan 21, 2020)

  • v0.16.2(Nov 19, 2019)

    Dark mode works. Push notifications work, including unread counter. @KyoShio contributed Simplified Chinese translation. Thanks! Multiple bug fixes, total of 130 commits.

    Source code(tar.gz)
    Source code(zip)
  • v0.16.1(Sep 20, 2019)

    Support for banning and reporting topics and users. Links to ToS, Privacy policy, contacts.

    tinode/ios@d6c12f8 hide blocked topics from contact list tinode/ios@053103b adding muted + blocked icons to contacts tinode/ios@7d2d939 handling of banned users tinode/ios@39fc4a5 use constant instead of literal topic name tinode/ios@6c711ee add client-side topic reporting tinode/ios@c6149b5 add explanation to report action tinode/ios@9065798 add tap handlers tinode/ios@04846c9 more blocking and reporting tinode/ios@99496af hooking up blocking and reporting

    Source code(tar.gz)
    Source code(zip)
Owner
Tinode
Tinode LLC
Tinode
Secret Messenger - a free and open source Jabber (XMPP) messaging client for Apple

Secret Messenger is a free and open source Jabber (XMPP) messaging client for Apple and Android devices focused on Privacy and Security with full OMEMO encrypted messaging support.

Secret Messenger 4 May 2, 2022
Email-based instant messaging for iOS.

deltachat-ios Email-based instant messaging for iOS. Testing Betas are distributed via Testflight. Just scan this QR code with the camera app of your

Delta Chat 258 Dec 31, 2022
🌟🌟🌟🌟🌟 Falcon Messenger is a Fast and Beautiful cloud-based messaging app. With iOS and IPadOS Support. Available on the App Store.

Open the FalconMessenger.xcworkspace in Xcode. Change the Bundle Identifier to match your domain. Go to Firebase and create new project. Select "Add F

null 397 Dec 31, 2022
iOS - Real-time messaging app 🎨

General mChat is a real-time messaging app written in Swift for iOS devices. Since mChat uses a fast and reliable Firebase Database, it receives data

Vitaliy Paliy 569 Nov 28, 2022
Open-Source Messaging App

Acani Chats Open-Source Native iOS Messages App This project and its submodules no longer work and are no longer being maintained. Acani Chats is an i

Acani 2.1k Dec 21, 2022
surespot is a mobile messaging application that secures all messages using end-to-end encryption.

surespot-ios ios surespot client surespot is a mobile messaging application that secures all messages using end-to-end encryption. Contribute surespot

surespot 70 Jul 21, 2022
An internet based messaging app similar to WhatsApp

Flash-Chat Flash Chat is an internet based messaging app similar to WhatsApp Table of Contents Description What I Learned How To Use Author Info Scree

Ferdous 0 Nov 6, 2021
An internet based messaging app similar to WhatsApp

Flash-Chat An internet based messaging app similar to WhatsApp What i learned while working on this project: How to integrate third party libraries in

Aleksandr Morozov 3 Apr 10, 2022
iOS-mail — ProtonMail iOS client app

iOS-mail Introduction iOS-mail — ProtonMail iOS client app The app is intended for all users of the ProtonMail service. Whether they are paid or free,

null 1.2k Jan 3, 2023
ChatSecure is a free and open source encrypted chat client for iOS that supports OTR and OMEMO encryption over XMPP.

ChatSecure ChatSecure is a free and open source XMPP messaging client for iOS that integrates OTR and OMEMO encrypted messaging support, and has optio

ChatSecure 3.1k Dec 31, 2022
Colloquy is an advanced IRC, SILC & ICB client for macOS and iOS!

Colloquy Dependencies This repository uses git submodules for some of its dependencies, so you will have to check those out as well. You can do this f

Colloquy 175 Jan 7, 2023
A glossy Matrix collaboration client for iOS

Element iOS Element iOS is an iOS Matrix client provided by Element. It is based on MatrixKit and MatrixSDK. Beta testing You can try last beta build

Element 1.5k Jan 1, 2023
Free Jabber/XMPP client for iOS and macOS

Monal A cross platform, modern XMPP client for iOS and MacOS This is the Monal XMPP client as found in the app store. If you want to use the latest st

Monal 400 Jan 5, 2023
Mumble client for iOS-based devices

Mumble for iOS (iPhone, iPod touch and iPad) Note: This repo and the app for iOS are unmaintained. If you are interested in taking over development of

Mumble 185 Nov 18, 2022
Legacy mobile Rocket.Chat client in Swift for iOS

IMPORTANT: PLEASE READ THIS FIRST Rocket.Chat mobile is moving to React Native. Development on this repository by Rocket.Chat has now ceased. If your

Rocket.Chat 1k Dec 22, 2022
Spika is universal chat module with backend, web, ios and Android client.

Spika Spika is messenger module for Web/iOS/Android with backend. You can include messenger feature to your app or service with minimum code. For deta

Clover Studio 608 Dec 23, 2022
A Swift client for Supabase Realtime server.

realtime-swift Listens to changes in a PostgreSQL Database and via websockets. A Swift client for Supabase Realtime server. Usage Creating a Socket co

Supabase Community 35 Dec 1, 2022
//afone is the reference implementation for SIP Telephony on iOS

//afone is the reference implementation for SIP Telephony on iOS that can be used on different SIP stacks with no effort. It comes with an easily exte

Automat Berlin GmbH 31 Nov 16, 2022
A native iOS video chat app based on WebRTC

AppRTC - iOS implementation of the Google WebRTC Demo About This Xcode project is a native wrapper for the Google's WebRTC Demo. It organizes the WebR

ISBX 1.3k Dec 31, 2022