|
|
@ -17,15 +17,9 @@ flutter pub get
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## Development
|
|
|
|
## Development
|
|
|
|
### ...
|
|
|
|
### TODO
|
|
|
|
### Icons and logos
|
|
|
|
|
|
|
|
The application uses a custom launcher icon and splash screen. These are managed platform-independently using the `flutter_launcher_icons` package.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
To update the icons, change the `flutter_launcher_icons.yaml` configuration file. Especially the `image_path` is relevant. Then run
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
|
|
dart run flutter_launcher_icons
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Deployment and metadata
|
|
|
|
### Deploying a new version
|
|
|
|
### Deploying a new version
|
|
|
|
To truly deploy a new version of the application, i.e. to the official app stores, a special CI step is required. This listens for new tags. To create a new tag position yourself on the main branch and run
|
|
|
|
To truly deploy a new version of the application, i.e. to the official app stores, a special CI step is required. This listens for new tags. To create a new tag position yourself on the main branch and run
|
|
|
|
```bash
|
|
|
|
```bash
|
|
|
@ -34,6 +28,18 @@ git push origin v<name>
|
|
|
|
```
|
|
|
|
```
|
|
|
|
We adhere to the [Semantic Versioning](https://semver.org/) standard, so the tag should be of the form `v0.1.8` for example.
|
|
|
|
We adhere to the [Semantic Versioning](https://semver.org/) standard, so the tag should be of the form `v0.1.8` for example.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Icons and logos
|
|
|
|
|
|
|
|
The application uses a custom launcher icon and splash screen. These are managed platform-independently using the `flutter_launcher_icons` package.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
To update the icons, change the `flutter_launcher_icons.yaml` configuration file. Especially the `image_path` is relevant. Then run
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
|
|
dart run flutter_launcher_icons
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
### Other metadata
|
|
|
|
|
|
|
|
Fastlane provides mechanisms to update the metadata of the application. This includes the name, description, screenshots, etc. The metadata is stored in the `fastlane/metadata` directory of both the `android`and the `ios` version of the application. Both versions have different structures but **they should be kept in sync**. For more information see the [fastlane documentation](https://docs.fastlane.tools/):
|
|
|
|
|
|
|
|
- https://docs.fastlane.tools/actions/deliver/
|
|
|
|
|
|
|
|
- https://docs.fastlane.tools/actions/supply/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Fastlane - in depth
|
|
|
|
## Fastlane - in depth
|
|
|
|
The application is deployed to the Google Play Store and the Apple App Store using fastlane: [https://docs.fastlane.tools/](https://docs.fastlane.tools/)
|
|
|
|
The application is deployed to the Google Play Store and the Apple App Store using fastlane: [https://docs.fastlane.tools/](https://docs.fastlane.tools/)
|
|
|
@ -46,16 +52,18 @@ bundle exec fastlane <lane>
|
|
|
|
```
|
|
|
|
```
|
|
|
|
This is reused in the CI/CD pipeline to automate the deployment process.
|
|
|
|
This is reused in the CI/CD pipeline to automate the deployment process.
|
|
|
|
|
|
|
|
|
|
|
|
Secrets used by fastlane are stored on hashicorp vault and are fetched by the CI/CD pipeline. See below.
|
|
|
|
Secrets used by fastlane are stored as repository.
|
|
|
|
|
|
|
|
|
|
|
|
## Secrets
|
|
|
|
## Secrets
|
|
|
|
These are mostly used by the CI/CD pipeline to deploy the application. The main usage for github actions is documented under [https://github.com/hashicorp/vault-action](https://github.com/hashicorp/vault-action).
|
|
|
|
These are mostly used by the CI/CD pipeline to deploy the application. The main usage for github actions is documented under [https://github.com/hashicorp/vault-action](https://github.com/hashicorp/vault-action).
|
|
|
|
|
|
|
|
|
|
|
|
**Platform-specific secrets** are used by the CI/CD pipeline to deploy to the respective app stores.
|
|
|
|
**Platform-specific secrets** are used by the CI/CD pipeline to deploy to the respective app stores.
|
|
|
|
- `GOOGLE_MAPS_API_KEY` is used to authenticate with the Google Maps API and is scoped to the android platform
|
|
|
|
- `ANDROID_GOOGLE_MAPS_API_KEY` is used to authenticate with the Google Maps API and is scoped to the android platform
|
|
|
|
- `ANDROID_KEYSTORE` is used to sign the android apk
|
|
|
|
- `ANDROID_KEYSTORE` is used to sign the android apk
|
|
|
|
- `ANDROID_GOOGLE_KEY` is used to authenticate with the Google Play Store api
|
|
|
|
- `ANDROID_GOOGLE_KEY` is used to authenticate with the Google Play Store api
|
|
|
|
- `IOS_GOOGLE_MAPS_API_KEY` is used to authenticate with the Google Maps API and is scoped to the ios platform
|
|
|
|
- `IOS_GOOGLE_MAPS_API_KEY` is used to authenticate with the Google Maps API and is scoped to the ios platform
|
|
|
|
- `IOS_GOOGLE_...`
|
|
|
|
- `IOS_ASC_ISSUER_ID` is used to authenticate with the App Store Connect API
|
|
|
|
- `IOS_GOOGLE_...`
|
|
|
|
- `IOS_ASC_KEY` as well
|
|
|
|
- `IOS_GOOGLE_...`
|
|
|
|
- `IOS_ASC_KEY_ID` as well
|
|
|
|
|
|
|
|
- `IOS_MATCH_PASSWORD` is used by fastlane match to download the certificates
|
|
|
|
|
|
|
|
- `IOS_MATCH_REPO_SSH_KEY_BASE64` is used to authenticate with the git repository where the certificates are stored
|
|
|
|