https://github.com/ooni/probe-multiplatform
https://github.com/ooni/probe-multiplatform
Last synced: about 1 year ago
JSON representation
- Host: GitHub
- URL: https://github.com/ooni/probe-multiplatform
- Owner: ooni
- Created: 2024-04-29T10:47:00.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2025-04-08T13:34:31.000Z (about 1 year ago)
- Last Synced: 2025-04-08T14:34:50.047Z (about 1 year ago)
- Language: Kotlin
- Size: 156 MB
- Stars: 14
- Watchers: 6
- Forks: 3
- Open Issues: 32
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- open-source-ios-apps - ooniprobe
- fucking-open-source-ios-apps - ooniprobe
README
# OONI Probe Multiplatform App
[](https://ooni.org)
Multiplatform (Android and iOS currently) version of the Probe app.
**Releases**
[](https://play.google.com/store/apps/details?id=org.openobservatory.ooniprobe)
[](https://f-droid.org/en/packages/org.openobservatory.ooniprobe/)
[](https://apps.apple.com/us/app/ooni-probe/id1199566366)
[](https://play.google.com/store/apps/details?id=com.dw.ooniprobe)
[](https://apps.apple.com/us/app/news-media-scan/id6738992797)
**CI Status**
[](https://github.com/ooni/probe-multiplatform/actions/workflows/validate.yml)
[](https://github.com/ooni/probe-multiplatform/actions/workflows/run_android_instrumented_tests.yml)
## Project structure
* `composeApp` is for code that will be shared across your Compose Multiplatform applications.
It contains several subfolders:
- `commonMain` is for code that’s common for all targets.
- `androidMain` Android-specific code
- `iosMain` iOS-specific code written in Kotlin
- `dwMain` News Media Scan specific Branding and customization
- `ooniMain` OONI Probe specific Branding and customization
* `iosApp` contains the iOS application configuration and the engine integration written in Swift
* `.github` contains the Continuous Integration configuration for Github
* `gradle/libs.versions.toml` specifies the versions of the plugins and dependencies used across
the different modules.
## Build, Install, and Run
To build, install, and run your application, use the following commands:
- For OONI Probe:
```
./gradlew runDebug -Porganization=ooni
```
- For News Media Scan:
```
./gradlew runDebug -Porganization=dw
```
There is a custom gradle task(`copyBrandingToCommonResources`) that is used to copy brand specific
resources to the common resources folder. This task is called before the `preBuild` task.
## Creating Run Configurations in Android Studio
Configure run configurations for easy execution within Android Studio:
### OONI Probe Android Configuration
1. Click the **Plus (+)** sign in the top left corner of the "Run/Debug Configurations" dialog.
2. Choose 'Gradle'.
3. Configure with the following:
- **Name:** OONI_Probe
- **Run:** :composeApp:runDebug -Porganization=ooni
### News Media Scan Android Configuration
1. Repeat the steps for creating a new configuration.
2. Configure with the following:
- **Name:** News_Media_Scan
- **Run:** :composeApp:runDebug -Porganization=dw
### OONI Probe iOS Configuration
The "Run/Debug Configurations" already has the proper configuration and you just need to select the
XCode Project Scheme `OONIProbe` and run it.
### News Media Scan iOS Configuration
The "Run/Debug Configurations" already has the proper configuration and you just need to select the
XCode Project Scheme `NewsMediaScan` and run it.
### Switching between OONI Probe and News Media Scan
- Ensure you can run clean and build the project successfully.
- Run `pod install` in the `iosApp` directory.
## Testing
Common tests (tests inside `commonTest`) only run on the iOS Simulator.
Choosing the option `android (local)` won't work. This is a current
[issue](https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-test.html#f03e048) with
the official testing library.
## Translations
The app is translated by the community through [Transifex](https://www.transifex.com/otf/ooniprobe/)
([Guidelines](https://github.com/ooni/translations/blob/master/Guidelines%20for%20OONI%20Probe.md)).
**Important Note:** Any Pull Request that introduces new strings into the app should be
reviewed by @agrabeli. The Pull Request should include screenshots showing the strings in context.
New or updated strings on the default version of the `strings-common.xml` and
`strings-organization.xml` files are automatically uploaded to Transifex when a Pull Request is
merged into the `main` branch.
Transifex automatically creates Pull Requests with the latest translation changes to keep the app
up-to-date.
### Metadata
Metadata such as Store Listing copy and screenshots are located in the `metadata` root folder.
Transifex also maintains those translations automatically.
Inside `fastlane/metadata` are only symbolic links mapping the locales supported by Google Play or
Apple App Store to the Transifex locales. Changes should only be made to the root `metadata` folder.