{"id":28241836,"url":"https://github.com/significa/app-distribution-server","last_synced_at":"2025-06-11T13:32:10.988Z","repository":{"id":216090032,"uuid":"739190665","full_name":"significa/app-distribution-server","owner":"significa","description":"Simple, self-hosted Android and iOS mobile app distribution server (for IPA and APK files).","archived":false,"fork":false,"pushed_at":"2025-05-06T14:31:18.000Z","size":232,"stargazers_count":89,"open_issues_count":2,"forks_count":20,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-05-19T05:08:57.315Z","etag":null,"topics":["android","apk","ios","ios-ipa","ipa","self-hosted"],"latest_commit_sha":null,"homepage":"https://significa.co/blog/how-to-distribute-ios-ipa-builds","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/significa.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null}},"created_at":"2024-01-05T01:30:06.000Z","updated_at":"2025-05-16T13:14:45.000Z","dependencies_parsed_at":null,"dependency_job_id":"29816125-cb5f-44df-bb55-21d073041cf6","html_url":"https://github.com/significa/app-distribution-server","commit_stats":null,"previous_names":["significa/ios-ipa-app-distribution-server"],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/significa%2Fapp-distribution-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/significa%2Fapp-distribution-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/significa%2Fapp-distribution-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/significa%2Fapp-distribution-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/significa","download_url":"https://codeload.github.com/significa/app-distribution-server/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/significa%2Fapp-distribution-server/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259273990,"owners_count":22832445,"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":["android","apk","ios","ios-ipa","ipa","self-hosted"],"created_at":"2025-05-19T05:08:53.812Z","updated_at":"2025-06-11T13:32:10.970Z","avatar_url":"https://github.com/significa.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"# Simple iOS/Android App Distribution Server\n\nThis is a simple, self-hosted iOS/Android app distribution server (ipa and apk files).\n\n![Site and usage Preview](images/preview.png)\n\nThis server can be used for either Ad-hoc or Enterprise application distribution.\nDevelopers can perform internal builds on their computers (without using a service like Expo)\nand utilize this platform to easily distribute the build among other developers, testers,\nor clients.\n\nWe wrote a blog post about this project. It explains the 'Why' and provides a 'How-to' style\nwalkthrough on using and deploying it: [How to distribute iOS IPA builds][blog post].\n\nThe project provides a single endpoint for uploading an `.ipa` or `.apk` build. It returns a\npublicly accessible, minimalistic installation page with a QR code - that simple. It is designed\nfor easy deployment within your infrastructure via a Docker container. And the upload functionality\nis secured with a pre-shared authorization token (see \"Configuration\" below).\n\nTo maintain simplicity and focus, this project **does not** handle device ID registration or\napplication building, just sharing files with a simple, public install page.\n\n## Usage\n\nTo run with Docker:\n\n```sh\ndocker run \\\n  -p 8000:8000 \\\n  -v ./uploads:/uploads \\\n  ghcr.io/significa/app-distribution-server\n```\n\nTo upload your built iOS or Android app, just run:\n\n```\ncurl -X \"POST\" \\\n  \"http://localhost:8000/upload\" \\\n  -H \"Accept: application/json\" \\\n  -H \"X-Auth-Token: secret\" \\\n  -H \"Content-Type: multipart/form-data\" \\\n  -F \"app_file=@your-app-build.ipa\"\n```\n\nWhere `your-app-build.ipa` is your iOS IPA build or Android APK (ex: `your-app-build.apk`).\n\nThis will return a link to the installation page.\n\nMore documentation in the Swagger OpenAPI explorer available on `/docs`.\n\n## Upgrading / migration to v2\n\nThis project was previously called `ios-ipa-app-distribution-server`, from release 2 on it was\nrenamed to `app-distribution-server` - as it now supports both IPA and APK files.\n\nMigrating from version `1` to `2` should be straightforward:\n\n- Update the image to `ghcr.io/significa/app-distribution-server`.\n- The upload multipart form submission now accepts a field named `app_file` (instead of `ipa_file`).\n\nThe uploads directory is backwards compatible, meaning that previously uploaded files (from v1) will\ncontinue to work with the new version. In v2, we've introduced additional fields on the download\npage to provide more detailed information about each upload. For most of these fields, we can infer\nor migrate the missing data from the older uploads. However, one exception is the creation time,\nwhich was not stored in v1 uploads. As a result, the creation time will not be displayed for files\nuploaded prior to v2.\n\n## Configuration\n\n- `UPLOADS_SECRET_AUTH_TOKEN`: Token used to upload builds. **Don't forget to change it!**\n  Default: `secret`.\n\n- `APP_BASE_URL`: The front-facing app URL for link generation.\n  Defaults to `http://localhost:8000`.\n\n- `STORAGE_URL`: A [PyFilesystem2](https://github.com/PyFilesystem/pyfilesystem2) compatible URL.\n  Defaults to `osfs:///uploads` for Docker installations, and `osfs://./uploads` when running\n  directly with Python. This means `/uploads` and `./uploads` respectively.  \n\n  Compatible with many storage backends. Check out the possible configurations in the\n  [index of filesystems](https://www.pyfilesystem.org/page/index-of-filesystems/).\n  \n  AWS S3 Example: `s3://your-bucket-name` (and then provide the credentials via the usual\n  `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY`).\n\n- `LOGO_URL`: The logo URL - absolute URL or a relative path to a logo `src`. Defaults to\n  `/static/logo.svg` (Significa's logo). Disable the logo by setting it to `false`\n  (`LOGO_URL=false`).\n\n- `APP_TITLE`: Defaults to `iOS/Android app distribution server`, use it to customise your page\n  title.\n\n## Development\n\n**Requirements**:\n\n- Python 3.11\n- Make tools\n\n**Useful development commands**:\n\n- Setup a virtual environment (ex: `make setup-venv`).\n\n- Install the dependencies: `make install-deps`.\n\n- Start the development server: `make dev`.  \n  Open the interactive OpenAPI explorer (Swagger): http://localhost:3000/docs.\n\n- When changes to the dependencies are made, freeze them in the lockfile with: `make lock-deps`.\n\n## License\n\n[GNU GPLv3](./LICENSE)\n\n---\n\nBuilt by [Significa](https://significa.co)\n\n\n[Blog post]: https://significa.co/blog/how-to-distribute-ios-ipa-builds\n\n[![significa's banner](https://github.com/significa/.github/blob/main/assets/significa-github-banner-small.png)](https://significa.co/)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsignifica%2Fapp-distribution-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsignifica%2Fapp-distribution-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsignifica%2Fapp-distribution-server/lists"}