{"id":20450038,"url":"https://github.com/ooni/probe-multiplatform","last_synced_at":"2025-04-13T02:11:08.818Z","repository":{"id":236955723,"uuid":"793502707","full_name":"ooni/probe-multiplatform","owner":"ooni","description":null,"archived":false,"fork":false,"pushed_at":"2025-04-08T13:34:31.000Z","size":164070,"stargazers_count":14,"open_issues_count":32,"forks_count":3,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-04-08T14:34:50.047Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ooni.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-04-29T10:47:00.000Z","updated_at":"2025-04-08T13:34:33.000Z","dependencies_parsed_at":"2024-06-28T07:20:32.308Z","dependency_job_id":"bbed755e-4f81-486f-a3aa-44b420cfea3f","html_url":"https://github.com/ooni/probe-multiplatform","commit_stats":{"total_commits":206,"total_committers":4,"mean_commits":51.5,"dds":"0.31553398058252424","last_synced_commit":"7fa6c84b760c72d908112739c5ee716a481a7e8e"},"previous_names":["ooni/probe-multiplatform"],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ooni%2Fprobe-multiplatform","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ooni%2Fprobe-multiplatform/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ooni%2Fprobe-multiplatform/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ooni%2Fprobe-multiplatform/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ooni","download_url":"https://codeload.github.com/ooni/probe-multiplatform/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248654090,"owners_count":21140236,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-15T10:50:02.478Z","updated_at":"2025-04-13T02:11:08.805Z","avatar_url":"https://github.com/ooni.png","language":"Kotlin","funding_links":[],"categories":["Misc"],"sub_categories":["Notes"],"readme":"# OONI Probe Multiplatform App\n\n[![OONI Probe Android](https://github.com/ooni/probe/blob/master/images/OONIProbeLogo.png?raw=true)](https://ooni.org)\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://slack.openobservatory.org/\"\u003e\n    \u003cimg src=\"https://slack.openobservatory.org/badge.svg\" alt=\"chat on Slack\"\u003e\n  \u003c/a\u003e\n\n  \u003ca href=\"https://github.com/ooni/probe-multiplatform/issues\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/issues/ooni/probe-multiplatform\" alt=\"open issues\"\u003e\n  \u003c/a\u003e\n\n  \u003ca href=\"https://twitter.com/intent/follow?screen_name=OpenObservatory\"\u003e\n    \u003cimg src=\"https://img.shields.io/twitter/follow/OpenObservatory?style=social\u0026logo=twitter\" alt=\"follow on Twitter\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\nMultiplatform (Android and iOS currently) version of the Probe app.\n\n**Releases**\n\n[![Probe Android @ Google Play](https://img.shields.io/endpoint?color=2D638B\u0026logo=google-play\u0026logoColor=8DD8F8\u0026url=https%3A%2F%2Fplay.cuzi.workers.dev%2Fplay%3Fi%3Dorg.openobservatory.ooniprobe%26gl%3DUS%26hl%3Den%26l%3DProbe%2520Android%2520%2540%2520Google%2520Play%26m%3D%24version)](https://play.google.com/store/apps/details?id=org.openobservatory.ooniprobe)\u003cbr/\u003e\n[![Probe Android @ F-Droid](https://img.shields.io/f-droid/v/org.openobservatory.ooniprobe?logo=fdroid\u0026logoColor=8DD8F8\u0026label=Probe%20Android%20%40%20F-Droid\u0026color=2D638B)](https://f-droid.org/en/packages/org.openobservatory.ooniprobe/)\u003cbr/\u003e\n[![Probe iOS @ App Store](https://img.shields.io/itunes/v/1199566366?logo=appstore\u0026logoColor=8DD8F8\u0026label=Probe%20iOS%20%40%20App%20Store\u0026color=2D638B)](https://apps.apple.com/us/app/ooni-probe/id1199566366)\u003cbr/\u003e\n[![NMS Android @ Google Play](https://img.shields.io/endpoint?color=D32625\u0026logo=google-play\u0026logoColor=D32625\u0026url=https%3A%2F%2Fplay.cuzi.workers.dev%2Fplay%3Fi%3Dcom.dw.ooniprobe%26gl%3DDE%26hl%3Den%26l%3DNMS%2520Android%2520%2540%2520Google%2520Play%26m%3D%24version)](https://play.google.com/store/apps/details?id=com.dw.ooniprobe)\u003c/br\u003e\n[![NMS iOS @ App Store](https://img.shields.io/itunes/v/6738992797?logo=appstore\u0026logoColor=D32625\u0026label=NMS%20iOS%20%40%20App%20Store\u0026color=D32625)](https://apps.apple.com/us/app/news-media-scan/id6738992797)\n\n**CI Status**\n\n[![Validate](https://github.com/ooni/probe-multiplatform/actions/workflows/validate.yml/badge.svg)](https://github.com/ooni/probe-multiplatform/actions/workflows/validate.yml)\n[![Android Instrumented Tests](https://github.com/ooni/probe-multiplatform/actions/workflows/run_android_instrumented_tests.yml/badge.svg)](https://github.com/ooni/probe-multiplatform/actions/workflows/run_android_instrumented_tests.yml)\n\n## Project structure\n\n* `composeApp` is for code that will be shared across your Compose Multiplatform applications.\n  It contains several subfolders:\n  - `commonMain` is for code that’s common for all targets.\n  - `androidMain` Android-specific code\n  - `iosMain` iOS-specific code written in Kotlin\n  - `dwMain` News Media Scan specific Branding and customization\n  - `ooniMain` OONI Probe specific Branding and customization\n\n* `iosApp` contains the iOS application configuration and the engine integration written in Swift\n\n* `.github` contains the Continuous Integration configuration for Github\n\n* `gradle/libs.versions.toml` specifies the versions of the plugins and dependencies used across\n  the different modules.\n\n## Build, Install, and Run\n\nTo build, install, and run your application, use the following commands:\n\n- For OONI Probe:\n  ```\n  ./gradlew runDebug -Porganization=ooni\n  ```\n\n- For News Media Scan:\n  ```\n  ./gradlew runDebug -Porganization=dw\n  ```\n\nThere is a custom gradle task(`copyBrandingToCommonResources`) that is used to copy brand specific\nresources to the common resources folder. This task is called before the `preBuild` task.\n\n## Creating Run Configurations in Android Studio\n\nConfigure run configurations for easy execution within Android Studio:\n\n### OONI Probe Android Configuration\n\n1. Click the **Plus (+)** sign in the top left corner of the \"Run/Debug Configurations\" dialog.\n2. Choose 'Gradle'.\n3. Configure with the following:\n- **Name:** OONI_Probe\n- **Run:** :composeApp:runDebug -Porganization=ooni\n\n### News Media Scan Android Configuration\n\n1. Repeat the steps for creating a new configuration.\n2. Configure with the following:\n- **Name:** News_Media_Scan\n- **Run:** :composeApp:runDebug -Porganization=dw\n\n### OONI Probe iOS Configuration\n\nThe \"Run/Debug Configurations\" already has the proper configuration and you just need to select the\nXCode Project Scheme `OONIProbe` and run it.\n\n### News Media Scan iOS Configuration\n\nThe \"Run/Debug Configurations\" already has the proper configuration and you just need to select the\nXCode Project Scheme `NewsMediaScan` and run it.\n\n### Switching between OONI Probe and News Media Scan\n\n- Ensure you can run clean and build the project successfully.\n- Run `pod install` in the `iosApp` directory.\n\n## Testing\n\nCommon tests (tests inside `commonTest`) only run on the iOS Simulator.\nChoosing the option `android (local)` won't work. This is a current\n[issue](https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-test.html#f03e048) with\nthe official testing library.\n\n## Translations\n\nThe app is translated by the community through [Transifex](https://www.transifex.com/otf/ooniprobe/)\n([Guidelines](https://github.com/ooni/translations/blob/master/Guidelines%20for%20OONI%20Probe.md)).\n\n**Important Note:** Any Pull Request that introduces new strings into the app should be\nreviewed by @agrabeli. The Pull Request should include screenshots showing the strings in context.\n\nNew or updated strings on the default version of the `strings-common.xml` and\n`strings-organization.xml` files are automatically uploaded to Transifex when a Pull Request is\nmerged into the `main` branch.\n\nTransifex automatically creates Pull Requests with the latest translation changes to keep the app\nup-to-date.\n\n### Metadata\n\nMetadata such as Store Listing copy and screenshots are located in the `metadata` root folder.\nTransifex also maintains those translations automatically.\n\nInside `fastlane/metadata` are only symbolic links mapping the locales supported by Google Play or\nApple App Store to the Transifex locales. Changes should only be made to the root `metadata` folder.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fooni%2Fprobe-multiplatform","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fooni%2Fprobe-multiplatform","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fooni%2Fprobe-multiplatform/lists"}