Native iPhone controls for the Movena SIP/PSTN dialout bridge, based on Nextcloud Talk for iOS
This repository is a Movena-focused fork of the upstream Nextcloud Talk iOS app. The upstream app provides secure Nextcloud Talk chat and calls; this fork adds the iOS-side controls needed to invite and manage phone participants through Movena's SIP/PSTN bridge.
The adaptation is deliberately server-driven: the iPhone app does not embed SIP credentials or run a local SIP stack. It calls the configured Nextcloud Talk/Movena OCS APIs, and the Movena HPB/PBX bridge handles the actual SIP/PSTN leg.
This fork makes the Movena work visible inside the native iOS call experience:
- adds a Call phone number action for moderators inside a Talk call
- adds Phone controls for DTMF, transfer start, transfer hold, transfer complete, transfer cancel, and phone hangup
- recognizes Talk's
sip-support-dialoutcapability before showing phone actions - supports phone participants with the
phonesactor type - sends the Movena bridge requests through native Swift API wrappers
For deeper architecture notes, runtime requirements, endpoint details, and test notes, see docs/movena-sip-dialout.md.
The Movena controls appear only when the signed-in account and room can support the bridge flow:
- the user is in a call and has moderator permissions
- the server advertises the
sip-support-dialoutTalk capability - the Movena HPB/PBX bridge endpoints are deployed server-side
- the Nextcloud Talk backend accepts phone attendee and dialout requests
This fork keeps the upstream Nextcloud Talk iOS foundation. The original app is a fully on-premises audio/video and chat communication service with web and mobile clients, designed for secure communication through Nextcloud.
- Nextcloud server version 22 or higher (that fulfills ATS requirements).
- Nextcloud Talk version 12.0 or higher.
- CocoaPods
After cloning this repository, you can use pod install to install all dependencies. After that, open the project with open NextcloudTalk.xcworkspace.
Pull Requests will be checked with SwiftLint. We strongly encourage the installation of SwiftLint to detect issues as early as possible.
Depending on how you try to run the project, you'll notice that it's not running "as-is". There are a few steps to make it work with your developer account:
- The project contains multiple targets (currently
NextcloudTalk,ShareExtensionandNotificationServiceExtension). The bundle ids of those targets start withcom.nextcloud.Talkwhich can't be used outside of Nextcloud GmbH. To run the project, change all bundle ids to something that's allowed for your developer account:com.<yourname>.Talk. - To communicate between the main app and its extensions, app groups are used. The group identifier for NextcloudTalk is set to
group.com.nextcloud.Talk, with the same restriction as above. Change the group identifier of all targets togroup.com.<yourname>.Talk. - Open the file
NCAppBranding.m(can be found in XCode under NextcloudTalk -> Settings) and changebundleIdentifierandgroupIdentifierto the same values you used in 1. and 2. - Run the project
Thanks for wanting to contribute source code to the Talk iOS app. That's great! 🎉
Please read the Code of Conduct. This document offers some guidance to ensure Nextcloud participants can cooperate effectively in a positive and inspiring atmosphere, and to explain how together we can strengthen and support each other.
For more information please review the guidelines for contributing to this repository.
- 🐛 Pick a good first issue or any issue/feature you like to work on
- 👩🔧 Create a branch and make your changes. Remember to sign off your commits using
git commit -sm "Your commit message" - ⬆ Create a pull request and
@mentionthe people from the issue to review - 👍 Fix things that come up during a review
- 🎉 Wait for it to get merged!
You got stuck while working on a issue or need some pointers? Feel free to ask in the corresponding issue or in our public Talk team conversation, we're happy to help.
We are using our own builds of the WebRTC library. They can be found in this repository.
Current version: 147.7727.0.
The tests included in talk-ios require a running Nextcloud instance. To run this locally, make sure you have a working docker enviroment and run the file start-instance-for-tests.sh - this will install a Nextcloud instance, install Nextcloud Talk and wait for everything to be up and running. By default this uses the main branch of Nextcloud and NextcloudTalk. You can edit the file to specify a different branch (e.g. stable33).
After that you can run the tests directly from Xcode or alternatively from the command line you can use:
xcodebuild test -workspace NextcloudTalk.xcworkspace \
-scheme "NextcloudTalk" \
-destination "platform=iOS Simulator,name=iPhone 16,OS=18.5" \
-test-iterations 3 \
-retry-tests-on-failure
If you are experiencing problems with push notifications, please check this document to detect possible issues.
- Telefon-Freiton in Deutschland nach DTAG 1 TR 110-1, Kap. 8.3 author: arvedkrynil
Do you want to try the latest version in development of Nextcloud Talk iOS? Simple, follow this simple step
We are also available on our public Talk team conversation, if you want to join the discussion.
License: GPLv3 with Apple app store exception.
