Latry
Cross-platform Qt 6.9 VoIP client for amateur radio operators. Connect to SvxReflector networks with native iOS/Android apps featuring Opus codec, tap-to-talk, and background operation.
Install / Use
/learn @s1lviu/LatryREADME
Latry - VoIP Communication App for Amateur Radio Operators
Latry is a mobile SvxLink client for amateur radio enthusiasts, enabling digital voice communication across Android and iOS platforms. Built with Qt 6.9, it provides seamless connectivity to SvxReflector servers and HAM TETRA networks with low-latency audio processing.
Website: https://latry.app
Note: Latry is not officially affiliated with the SvxLink project and is intended for hobbyist use. Users should ensure compliance with local amateur radio regulations.
🚀 Features
- SvxReflector & HAM TETRA Networks - Seamless connectivity to reflector servers
- Low-Latency Audio - Opus codec with integrated jitter buffer for clear communication
- Simple Tap-to-Talk Interface - Traditional radio-style PTT operation
- Talkgroup Support - Real-time transmission visibility and talkgroup management
- Secure Authentication - Callsign and key pairing for server access
- Cross-Platform Support - Native apps for iOS and Android
- Background Operation - Maintains connection when app is minimized
- Lightweight Design - Focused, efficient client (not a full SvxLink node replacement)
- No Advertisements - Clean, distraction-free interface
- Dark Mode Support - Adaptive UI that follows system theme
📱 Platform-Specific Features
iOS
- Native iOS VoIP - CallKit integration for system-level VoIP support
- Background Audio - Continues operation when app is backgrounded
- iOS 13.0+ - Optimized for modern iOS devices
- App Store Ready - Configured for TestFlight and App Store distribution
Android
- Foreground Service - Reliable background operation with notifications
- Battery Optimization Bypass - Automatic handling of Android power management
- Wake Lock Management - Prevents device sleep during active communication
- Notification Controls - Quick access to PTT from notification shade
🏗️ Project Structure
The project uses platform-specific folders due to historical branching differences:
Latry/
├── android/ # Android-specific build (Qt 6.9+)
│ ├── android/ # Android manifest and resources
│ ├── CMakeLists.txt # Android build configuration
│ └── *.cpp/h # Shared C++ source files
│
├── iOS/ # iOS-specific build (Qt 6.9+)
│ ├── ios/ # iOS-specific files and resources
│ ├── CMakeLists.txt # iOS build configuration with advanced features
│ └── *.cpp/h # Shared C++ source files + iOS extensions
│
└── README.md # This file
Note: At some point there were differences between the Android and iOS branches, and it took too long to synchronize and condition the functionalities depending on the platform. The iOS branch is slightly ahead in terms of code changes.
🛠️ Prerequisites
System Requirements
iOS
- iOS 13.0 or newer
- iPhone/iPad with microphone and WiFi
Android
- Android 9.0 (API 28) or newer
- Device with microphone and WiFi
Development Requirements
Common
- CMake 3.16+
- C++ Compiler with C++17 support
- Opus Audio Codec Library
iOS Development
- macOS with Xcode 14.0+
- Qt 6.9+ with iOS support
- iOS Developer Account (for device deployment)
- Apple Developer Team ID (for code signing)
Android Development
- Qt 6.9+ with Android support
- Android SDK and NDK
- Java 8 or higher
🔧 Building the Project
iOS Build
- Setup Environment
export QT_ROOT="/opt/homebrew/Qt/6.9.0" # Adjust path as needed
export PATH="$QT_ROOT/ios/bin:$PATH"
export CMAKE_PREFIX_PATH="$QT_ROOT/ios"
- Configure Build
cd iOS
mkdir build-ios
cd build-ios
cmake .. \
-G Xcode \
-DCMAKE_SYSTEM_NAME=iOS \
-DCMAKE_OSX_DEPLOYMENT_TARGET=13.0 \
-DCMAKE_PREFIX_PATH="$QT_ROOT/ios" \
-DCMAKE_TOOLCHAIN_FILE="$QT_ROOT/ios/lib/cmake/Qt6/qt.toolchain.cmake" \
-DIOS_DEVELOPMENT_TEAM="YOUR_TEAM_ID" \
-DQT_FEATURE_debug_and_release=ON \
-DIOS=TRUE
- Build with Xcode
# Open in Xcode
open Latry.xcodeproj
# Or build from command line
xcodebuild -project Latry.xcodeproj \
-scheme Latry \
-configuration Release \
-destination "generic/platform=iOS"
Android Build
- Setup Environment
export ANDROID_SDK_ROOT="/path/to/android-sdk"
export ANDROID_NDK_ROOT="/path/to/android-ndk"
export QT_ROOT="/path/to/Qt/6.9.x"
- Configure Build
cd android
mkdir build-android
cd build-android
cmake .. \
-DCMAKE_TOOLCHAIN_FILE="$QT_ROOT/android_arm64_v8a/lib/cmake/Qt6/qt.toolchain.cmake" \
-DQT_ANDROID_ABIS="arm64-v8a" \
-DANDROID_ABI=arm64-v8a \
-DCMAKE_BUILD_TYPE=Release
- Build APK
cmake --build . --parallel
📦 Dependencies
Core Dependencies
- Qt 6.x - Application framework
- QtQuick - UI framework
- QtNetwork - Network communication
- QtMultimedia - Audio processing
- Opus Codec - Audio compression
- OpenSSL - Secure communications (Android)
Platform-Specific
iOS
- iOS Frameworks:
- Foundation, UIKit
- AVFoundation, AudioToolbox
- CallKit, PushKit
- UserNotifications
- Network, VideoToolbox
Android
- Android Permissions:
- INTERNET, RECORD_AUDIO
- WAKE_LOCK, FOREGROUND_SERVICE
- POST_NOTIFICATIONS
- REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
🎯 HAM Radio Integration
Latry is specifically designed for amateur radio operators with:
- SvxLink Protocol Support - Compatible with SvxLink reflector networks
- Talkgroup Management - Connect to specific amateur radio talkgroups
- Authentication - Secure key-based authentication for reflector access
- Callsign Integration - Proper callsign identification and display
- PTT Operation - Traditional push-to-talk radio operation
🔧 Configuration
Connection Settings
- Host - Reflector server address (e.g.,
reflector.145500.xyz) - Port - Connection port (typically
5300) - Callsign - Your amateur radio callsign
- Authentication Key - Provided by reflector administrator
- Talkgroup - Target talkgroup number
iOS Specific Setup
# Set your Apple Developer Team ID
-DIOS_DEVELOPMENT_TEAM="1A2BC3D4E5"
# Configure bundle identifier
-DIOS_BUNDLE_IDENTIFIER="yo6say.latry"
🐛 Known Issues & Troubleshooting
iOS
- Archive Issues: Enable
QT_USE_RISKY_DSYM_ARCHIVING_WORKAROUNDfor TestFlight builds - FFmpeg Frameworks: Debug binaries are automatically cleaned from frameworks
- Code Signing: Ensure valid Team ID and automatic signing is enabled
Android
- Battery Optimization: App guides users through battery optimization settings
- Background Service: Uses foreground service for reliable VoIP operation
- OpenSSL: KDAB OpenSSL integration for secure communications
🤝 Contributing
This project is published as open source because many people want various functionalities, and implementing all requests takes considerable time. The community is free to add and modify features as needed.
Pull Requests Welcome! I am open to pull requests and will continue to host the application on Google Play and the App Store.
When contributing:
- Follow existing code style and conventions
- Test on both iOS and Android platforms when possible
- Update documentation for new features
- Ensure compatibility with SvxLink reflector protocol
- Consider the platform-specific folder structure
📄 License
This project is licensed under the GNU General Public License v3.0 (GPLv3).
You are free to:
- Use, modify, and distribute this software
- Create derivative works
- Use it for commercial purposes
Under the following conditions:
- Provide source code of your modifications
- Use the same GPLv3 license for derivative works
- Include license and copyright notices
See the LICENSE file for full details.
👨💻 Author
Silviu YO6SAY
Amateur Radio Operator & CTO
🔗 Links
- Website: latry.app
- iOS App Store: Download Latry
- Google Play Store: Download Latry
Built with ❤️ for the Amateur Radio Community
Related Skills
node-connect
352.2kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
111.1kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
352.2kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
352.2kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
