SDO Multiplatform is the multiplatform client for Sound Doctrine Online (sounddoctrine.online). This repository contains a Kotlin Multiplatform project with the original iOS/macOS Xcode project integrated within it, supporting iOS, Android, and Desktop platforms.
Looking for non-charismatic, non-ecumenical, Independent Fundamental Baptist (IFB) preaching and congregational singing from around the world? They're all on Sound Doctrine Online.
Sound Doctrine Online is a video streaming platform that hosts IFB content from around the world.
The aim of Sound Doctrine Online is to make Hard Preaching from across the world accessible to everyone. It includes documentaries, sermons, congregational singing, and short excerpts of preaching.
This is a Kotlin Multiplatform project that supports multiple platforms:
- Location:
SDOMultiplatform/directory - Platforms: iOS, Android, Desktop (macOS/Windows/Linux), Web (Wasm)
- Technology: Kotlin Multiplatform, Compose Multiplatform
- Status: Active development
- Location:
SDOMultiplatform/iosApp/directory - Platforms: iOS 16+
- Technology: Swift, SwiftUI (integrated with Kotlin Multiplatform shared code)
- Status: Part of the multiplatform structure
- Android Studio or IntelliJ IDEA
- JDK 11 or later
- For iOS development: Xcode and macOS
- For Android development: Android SDK
-
Navigate to the multiplatform project:
cd SDOMultiplatform -
Open the project:
- Open
SDOMultiplatformfolder in Android Studio or IntelliJ IDEA
- Open
-
Run the app:
- Android: Select
composeAppconfiguration and run - iOS: Select
iosAppconfiguration and run (requires macOS and Xcode) - Desktop: Select
desktopAppconfiguration and run - Web: Run
./gradlew wasmJsBrowserRun
- Android: Select
To provide local environment variables (such as API endpoints or keys) to the iOS project, create a UserEnvironmentVariables.plist file:
- Location:
SDOMultiplatform/iosApp/iosApp.xcodeproj/xcuserdata/<your-username>.xcuserdatad/UserEnvironmentVariables.plist
- Format:
-
The file should be a property list (
.plist) with each variable as a key-value pair. Example:<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>HASURA_ENDPOINT</key> <string>https://sdo-prod.hasura.app/v1/graphql</string> <key>HASURA_ACCESS_KEY</key> <string>YOUR_ACCESS_KEY_HERE</string> </dict> </plist>
-
- Notes:
- This file is user-specific and should not be committed to version control.
- Add any required environment variables for your local development.
- The multiplatform project shares business logic and UI across all platforms
- Platform-specific code is organized in respective source sets
- For iOS, the app supports iOS 16 and above
- You may need to set up signing with your Apple ID in Xcode for iOS device deployment
- See
SDOMultiplatform/README.mdfor detailed setup instructions
You can create a CodeQL database for code analysis and run custom queries as follows:
For the Kotlin Multiplatform project:
codeql database create ./databases/kotlin-database \
--language=java \
--command="cd SDOMultiplatform && ./gradlew compileKotlin"For Swift code in the iOS project:
codeql database create ./databases/swift-database \
--language=swift \
--command="cd SDOMultiplatform/iosApp && xcodebuild build -project iosApp.xcodeproj -scheme iosApp"Refer to the CodeQL documentation for more details on advanced usage.