Metadata for app store releases #44
							
								
								
									
										51
									
								
								.gitea/workflows/frontend_deploy-beta.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,51 @@ | ||||
| on: | ||||
|   pull_request: | ||||
|     branches: | ||||
|       - main | ||||
|     paths: | ||||
|       - frontend/** | ||||
|  | ||||
| name: Build and release release apps to production track | ||||
|  | ||||
| jobs: | ||||
|   get-version: | ||||
|     name: Get version | ||||
|     runs-on: macos | ||||
|     steps: | ||||
|       - uses: https://gitea.com/actions/checkout@v4 | ||||
|       - name: Fetch tags from main branch | ||||
|         # since this workflow is triggered by a pull request, we want to match the latest tag of the main branch | ||||
|         id: version | ||||
|         run: | | ||||
|           git fetch origin main --tags | ||||
|           LATEST_TAG=$(git describe --tags $(git rev-list --tags --max-count=1)) | ||||
|           # remove the 'v' prefix from the tag name | ||||
|           echo "BUILD_NAME=${LATEST_TAG//v}" >> $GITHUB_ENV | ||||
|  | ||||
|   build-android: | ||||
|     name: Build and upload android app | ||||
|     uses: ./.gitea/workflows/workflow_build-app-android.yaml | ||||
|     with: | ||||
|       build_type: beta | ||||
|       build_name: ${{ env.BUILD_NAME }} | ||||
|     secrets: | ||||
|       ANDROID_SECRET_PROPERTIES_BASE64: ${{ secrets.ANDROID_SECRET_PROPERTIES_BASE64 }} | ||||
|       ANDROID_GOOGLE_PLAY_JSON_BASE64: ${{ secrets.ANDROID_GOOGLE_PLAY_JSON_BASE64 }} | ||||
|       ANDROID_KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }} | ||||
|       ANDROID_GOOGLE_MAPS_API_KEY: ${{ secrets.ANDROID_GOOGLE_MAPS_API_KEY }} | ||||
|     needs: get-version | ||||
|  | ||||
|   build-ios: | ||||
|     name: Build and upload ios app | ||||
|     uses: ./.gitea/workflows/workflow_build-app-ios.yaml | ||||
|     with: | ||||
|       build_type: beta | ||||
|       build_name: ${{ env.BUILD_NAME }} | ||||
|     secrets: | ||||
|       IOS_ASC_KEY_ID: ${{ secrets.IOS_ASC_KEY_ID }} | ||||
|       IOS_ASC_ISSUER_ID: ${{ secrets.IOS_ASC_ISSUER_ID }} | ||||
|       IOS_ASC_KEY: ${{ secrets.IOS_ASC_KEY }} | ||||
|       IOS_MATCH_REPO_SSH_KEY_BASE64: ${{ secrets.IOS_MATCH_REPO_SSH_KEY_BASE64 }} | ||||
|       IOS_MATCH_PASSWORD: ${{ secrets.IOS_MATCH_PASSWORD }} | ||||
|       IOS_GOOGLE_MAPS_API_KEY: ${{ secrets.IOS_GOOGLE_MAPS_API_KEY }} | ||||
|     needs: get-version | ||||
							
								
								
									
										49
									
								
								.gitea/workflows/frontend_deploy-release.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,49 @@ | ||||
| on: | ||||
|   push: | ||||
|     tags: | ||||
|       - v* | ||||
|  | ||||
| name: Build and release release apps to production track | ||||
|  | ||||
| jobs: | ||||
|   get-version: | ||||
|     name: Get version | ||||
|     runs-on: macos | ||||
|     steps: | ||||
|       - uses: https://gitea.com/actions/checkout@v4 | ||||
|       - name: Get version from git tag | ||||
|         id: version | ||||
|         env:  | ||||
|           REF_NAME: ${{ gitea.ref_name }} | ||||
|         # remove the 'v' prefix from the tag name | ||||
|         run: | | ||||
|           echo "BUILD_NAME=${REF_NAME//v}" >> $GITHUB_ENV | ||||
|  | ||||
|  | ||||
|   build-android: | ||||
|     name: Build and upload android app | ||||
|     uses: ./.gitea/workflows/workflow_build-app-android.yaml | ||||
|     with: | ||||
|       build_type: release | ||||
|       build_name: ${{ env.BUILD_NAME }} | ||||
|     secrets: | ||||
|       ANDROID_SECRET_PROPERTIES_BASE64: ${{ secrets.ANDROID_SECRET_PROPERTIES_BASE64 }} | ||||
|       ANDROID_GOOGLE_PLAY_JSON_BASE64: ${{ secrets.ANDROID_GOOGLE_PLAY_JSON_BASE64 }} | ||||
|       ANDROID_KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }} | ||||
|       ANDROID_GOOGLE_MAPS_API_KEY: ${{ secrets.ANDROID_GOOGLE_MAPS_API_KEY }} | ||||
|     needs: get-version | ||||
|  | ||||
|   build-ios: | ||||
|     name: Build and upload ios app | ||||
|     uses: ./.gitea/workflows/workflow_build-app-ios.yaml | ||||
|     with: | ||||
|       build_type: release | ||||
|       build_name: ${{ env.BUILD_NAME }} | ||||
|     secrets: | ||||
|       IOS_ASC_KEY_ID: ${{ secrets.IOS_ASC_KEY_ID }} | ||||
|       IOS_ASC_ISSUER_ID: ${{ secrets.IOS_ASC_ISSUER_ID }} | ||||
|       IOS_ASC_KEY: ${{ secrets.IOS_ASC_KEY }} | ||||
|       IOS_MATCH_PASSWORD: ${{ secrets.IOS_MATCH_PASSWORD }} | ||||
|       IOS_MATCH_REPO_SSH_KEY_BASE64: ${{ secrets.IOS_MATCH_REPO_SSH_KEY_BASE64 }} | ||||
|       IOS_GOOGLE_MAPS_API_KEY: ${{ secrets.IOS_GOOGLE_MAPS_API_KEY }} | ||||
|     needs: get-version | ||||
| @@ -1,18 +1,30 @@ | ||||
| on: | ||||
|   pull_request: | ||||
|     branches: | ||||
|       - main | ||||
|     paths: | ||||
|       - frontend/** | ||||
|   workflow_call: | ||||
|     inputs: | ||||
|       build_type: | ||||
|         description: 'Release type (release, beta)' | ||||
|         required: true | ||||
|         type: string | ||||
|       build_name: | ||||
|         description: 'Build name' | ||||
|         required: true | ||||
|         type: string | ||||
|     secrets: | ||||
|       ANDROID_SECRET_PROPERTIES_BASE64: | ||||
|         required: true | ||||
|       ANDROID_GOOGLE_PLAY_JSON_BASE64: | ||||
|         required: true | ||||
|       ANDROID_KEYSTORE_BASE64: | ||||
|         required: true | ||||
|       ANDROID_GOOGLE_MAPS_API_KEY: | ||||
|         required: true | ||||
| 
 | ||||
| 
 | ||||
| name: Build and release debug APK | ||||
| name: Build and release android appbundle to specfied track | ||||
| 
 | ||||
| defaults: | ||||
|   run: | ||||
|     working-directory: frontend/android | ||||
| 
 | ||||
| 
 | ||||
| jobs: | ||||
|   build: | ||||
|     runs-on: macos | ||||
| @@ -52,14 +64,6 @@ jobs: | ||||
|         ruby-version: 3.3 | ||||
|         bundler-cache: true # runs 'bundle install' and caches installed gems automatically | ||||
| 
 | ||||
|     - name: Infer version number from git tag | ||||
|       id: version | ||||
|       env:  | ||||
|         REF_NAME: ${{ gitea.ref_name }} | ||||
|       run: | ||||
|         # remove the 'v' prefix from the tag name | ||||
|         echo "BUILD_NAME=${REF_NAME//v}" >> $GITHUB_ENV | ||||
| 
 | ||||
|     - name: Add required secret files | ||||
|       run: | | ||||
|         echo "${{ secrets.ANDROID_SECRET_PROPERTIES_BASE64 }}" | base64 -d > secrets.properties | ||||
| @@ -67,8 +71,8 @@ jobs: | ||||
|         echo "${{ secrets.ANDROID_KEYSTORE_BASE64 }}" | base64 -d > release.keystore | ||||
| 
 | ||||
|     - name: Run fastlane lane | ||||
|       run: bundle exec fastlane deploy_beta | ||||
|       run: bundle exec fastlane deploy_${{ inputs.build_type }} | ||||
|       env: | ||||
|         BUILD_NUMBER: ${{ gitea.run_number }} | ||||
|         # BUILD_NAME is implicitly available | ||||
|         BUILD_NAME: ${{ inputs.build_name }} | ||||
|         ANDROID_GOOGLE_MAPS_API_KEY: ${{ secrets.ANDROID_GOOGLE_MAPS_API_KEY }} | ||||
| @@ -1,11 +1,29 @@ | ||||
| on: | ||||
|   pull_request: | ||||
|     branches: | ||||
|       - main | ||||
|     paths: | ||||
|       - frontend/** | ||||
|   workflow_call: | ||||
|     inputs: | ||||
|       build_type: | ||||
|         description: 'Release type (release, beta)' | ||||
|         required: true | ||||
|         type: string | ||||
|       build_name: | ||||
|         description: 'Build name' | ||||
|         required: true | ||||
|         type: string | ||||
|     secrets: | ||||
|       IOS_ASC_KEY_ID: | ||||
|         required: true | ||||
|       IOS_ASC_ISSUER_ID: | ||||
|         required: true | ||||
|       IOS_ASC_KEY: | ||||
|         required: true | ||||
|       IOS_MATCH_REPO_SSH_KEY_BASE64: | ||||
|         required: true | ||||
|       IOS_MATCH_PASSWORD: | ||||
|         required: true | ||||
|       IOS_GOOGLE_MAPS_API_KEY: | ||||
|         required: true | ||||
| 
 | ||||
| name: Build and release debugging app to ios testflight | ||||
| name: Build and release ipa to specified track | ||||
| 
 | ||||
| defaults: | ||||
|   run: | ||||
| @@ -29,26 +47,18 @@ jobs: | ||||
|           architecture: x64 | ||||
|           cache: true | ||||
| 
 | ||||
|       - name: Install dependencies and clean up | ||||
|         run: | | ||||
|           flutter pub get | ||||
|           bundle exec pod install | ||||
|           flutter clean | ||||
|           bundle exec pod cache clean --all | ||||
| 
 | ||||
|       - name: Set up ruby env | ||||
|         uses: https://github.com/ruby/setup-ruby@v1 | ||||
|         with: | ||||
|           ruby-version: 3.3 | ||||
|           bundler-cache: true # runs 'bundle install' and caches installed gems automatically | ||||
| 
 | ||||
|       - name: Infer version number from git tag | ||||
|         id: version | ||||
|         env:  | ||||
|           REF_NAME: ${{ gitea.ref_name }} | ||||
|         run: | ||||
|           # remove the 'v' prefix from the tag name | ||||
|           echo "BUILD_NAME=${REF_NAME//v}" >> $GITHUB_ENV | ||||
|       - name: Install dependencies and clean up | ||||
|         run: | | ||||
|           flutter pub get | ||||
|           bundle exec pod install --allow-root | ||||
|           flutter clean | ||||
|           bundle exec pod cache clean --all --allow-root | ||||
| 
 | ||||
|       - name: Setup SSH key for match git repo | ||||
|         # and mark the host as known | ||||
| @@ -60,11 +70,10 @@ jobs: | ||||
|           MATCH_REPO_SSH_KEY: ${{ secrets.IOS_MATCH_REPO_SSH_KEY_BASE64 }} | ||||
| 
 | ||||
|       - name: Run fastlane lane | ||||
|         run: bundle exec fastlane deploy_beta | ||||
|         run: bundle exec fastlane deploy_${{ inputs.build_type }} | ||||
|         env: | ||||
|           BUILD_NUMBER: ${{ gitea.run_number }} | ||||
|           # BUILD_NAME is implicitly available | ||||
|           GOOGLE_MAPS_API_KEY: ${{ secrets.GOOGLE_MAPS_API_KEY }} | ||||
|           BUILD_NAME: ${{ inputs.build_name }} | ||||
|           IOS_ASC_KEY_ID: ${{ secrets.IOS_ASC_KEY_ID }} | ||||
|           IOS_ASC_ISSUER_ID: ${{ secrets.IOS_ASC_ISSUER_ID }} | ||||
|           IOS_ASC_KEY: ${{ secrets.IOS_ASC_KEY }} | ||||
| @@ -17,15 +17,9 @@ flutter pub get | ||||
| ``` | ||||
|  | ||||
| ## Development | ||||
| ### ... | ||||
| ### 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 | ||||
| ``` | ||||
| ### TODO | ||||
|  | ||||
| ## Deployment and metadata | ||||
| ### 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 | ||||
| ```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.  | ||||
|  | ||||
| ### 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 | ||||
| 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,17 @@ bundle exec fastlane <lane> | ||||
| ``` | ||||
| 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 | ||||
| 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 used by the CI/CD pipeline to deploy the application. | ||||
|  | ||||
| **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_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_...` | ||||
| - `IOS_GOOGLE_...` | ||||
| - `IOS_GOOGLE_...` | ||||
| - `IOS_ASC_ISSUER_ID` is used to authenticate with the App Store Connect API | ||||
| - `IOS_ASC_KEY` as well | ||||
| - `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 | ||||
|   | ||||
| @@ -48,6 +48,7 @@ platform :android do | ||||
|       skip_upload_apk: true, | ||||
|       skip_upload_changelogs: true, | ||||
|       aab: "../build/app/outputs/bundle/release/app-release.aab", | ||||
|       metadata_path: "fastlane/metadata", | ||||
|       ) | ||||
|   end | ||||
| end | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| AnyWay - plan city trips your way | ||||
| AnyWay is an application that helps you plan truly unique city trips. When planning a new trip, you can specify <your> preferences and constraints and anyway generates a personalized itinerary just for you.  | ||||
|  | ||||
| AnyWay is a mobile application that helps users plan city trips. The app allows users to specify their preferences and constraints, and then generates a personalized itinerary for them. The planning follows some guiding principles: | ||||
| - **Personalization**:The user's preferences should be reflected in the choice of destinations. | ||||
| - **Efficiency**:The itinerary should be optimized for the user's constraints. | ||||
| - **Flexibility**: We aknowledge that tourism is a dynamic activity, and that users may want to change their plans on the go. | ||||
| - **Discoverability**: Tourism is an inherently exploratory activity. Once a rough itinerary is generated, detours and spontaneous decisions should be encouraged. | ||||
| Anyway follows these core principles: | ||||
| - **Personalization**: Trips should be match your interests - not just the most popular destinations. | ||||
| - **Efficiency**: Don't just walk in circles! Anyway creates the most efficient route for you. | ||||
| - **Flexibility**: Vacations are the time to be spontaneous. Anyway lets you update your plans on the go. | ||||
| - **Discoverability**: Tourism means exploration. Anyway encourages you to take detours and make spontaneous decisions. | ||||
|   | ||||
| After Width: | Height: | Size: 3.0 MiB | 
| After Width: | Height: | Size: 4.1 MiB | 
| After Width: | Height: | Size: 1.1 MiB | 
| After Width: | Height: | Size: 1.1 MiB | 
| Before Width: | Height: | Size: 106 KiB | 
| Before Width: | Height: | Size: 1.3 MiB | 
| Before Width: | Height: | Size: 637 KiB | 
| Before Width: | Height: | Size: 573 KiB | 
| Before Width: | Height: | Size: 175 KiB | 
| Before Width: | Height: | Size: 360 KiB | 
							
								
								
									
										3
									
								
								frontend/ios/fastlane/Deliverfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,3 @@ | ||||
| # The Deliverfile allows you to store various App Store Connect metadata | ||||
| # For more information, check out the docs | ||||
| # https://docs.fastlane.tools/actions/deliver/ | ||||
| @@ -99,8 +99,9 @@ platform :ios do | ||||
|     ) | ||||
|  | ||||
|     upload_to_app_store( | ||||
|       skip_screenshots: true, | ||||
|       skip_metadata: true, | ||||
|       overwrite_screenshots: true, | ||||
|       metadata_path: "fastlane/metadata", | ||||
|       screenshot_path: "fastlane/screenshots", | ||||
|       precheck_include_in_app_purchases: false, | ||||
|  | ||||
|       submit_for_review: true, | ||||
|   | ||||
							
								
								
									
										1
									
								
								frontend/ios/fastlane/metadata/copyright.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | ||||
|  | ||||
| @@ -0,0 +1 @@ | ||||
|  | ||||
							
								
								
									
										7
									
								
								frontend/ios/fastlane/metadata/en-US/description.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,7 @@ | ||||
| AnyWay is an application that helps you plan truly unique city trips. When planning a new trip, you can specify <our> preferences and constraints and anyway generates a personalized itinerary just for you.  | ||||
|  | ||||
| Anyway follows these core principles: | ||||
| - **Personalization**: Trips should be match your interests - not just the most popular destinations. | ||||
| - **Efficiency**: Don't just walk in circles! Anyway creates the most efficient route for you. | ||||
| - **Flexibility**: Vacations are the time to be spontaneous. Anyway lets you update your plans on the go. | ||||
| - **Discoverability**: Tourism means exploration. Anyway encourages you to take detours and make spontaneous decisions. | ||||
							
								
								
									
										
											BIN
										
									
								
								frontend/ios/fastlane/metadata/en-US/iOS Phones  6.9-01.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.6 MiB | 
							
								
								
									
										
											BIN
										
									
								
								frontend/ios/fastlane/metadata/en-US/iOS Phones  6.9-02.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 2.1 MiB | 
							
								
								
									
										
											BIN
										
									
								
								frontend/ios/fastlane/metadata/en-US/iOS Phones  6.9-03.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 626 KiB | 
							
								
								
									
										
											BIN
										
									
								
								frontend/ios/fastlane/metadata/en-US/iOS Phones  6.9-04.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 758 KiB | 
| After Width: | Height: | Size: 2.2 MiB | 
| After Width: | Height: | Size: 2.5 MiB | 
| After Width: | Height: | Size: 574 KiB | 
| After Width: | Height: | Size: 800 KiB | 
							
								
								
									
										1
									
								
								frontend/ios/fastlane/metadata/en-US/keywords.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | ||||
| tourism, cities, travel, guide | ||||
							
								
								
									
										1
									
								
								frontend/ios/fastlane/metadata/en-US/marketing_url.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | ||||
| https://anydev.info | ||||
							
								
								
									
										1
									
								
								frontend/ios/fastlane/metadata/en-US/name.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | ||||
| AnyWay | ||||
							
								
								
									
										1
									
								
								frontend/ios/fastlane/metadata/en-US/privacy_url.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | ||||
| https://anydev.info/privacy | ||||
| @@ -0,0 +1 @@ | ||||
| AnyWay - plan city trips your way! | ||||
							
								
								
									
										1
									
								
								frontend/ios/fastlane/metadata/en-US/release_notes.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | ||||
|  | ||||
							
								
								
									
										1
									
								
								frontend/ios/fastlane/metadata/en-US/subtitle.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | ||||
| Plan city trips your way! | ||||
							
								
								
									
										1
									
								
								frontend/ios/fastlane/metadata/en-US/support_url.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | ||||
|  | ||||
							
								
								
									
										1
									
								
								frontend/ios/fastlane/metadata/primary_category.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | ||||
|  | ||||
| @@ -0,0 +1 @@ | ||||
|  | ||||
| @@ -0,0 +1 @@ | ||||
|  | ||||
| @@ -0,0 +1 @@ | ||||
|  | ||||
| @@ -0,0 +1 @@ | ||||
|  | ||||
| @@ -0,0 +1 @@ | ||||
|  | ||||
| @@ -0,0 +1 @@ | ||||
|  | ||||
| @@ -0,0 +1 @@ | ||||
|  | ||||
| @@ -0,0 +1 @@ | ||||
|  | ||||
| @@ -0,0 +1 @@ | ||||
|  | ||||
							
								
								
									
										1
									
								
								frontend/ios/fastlane/metadata/secondary_category.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | ||||
|  | ||||
| @@ -0,0 +1 @@ | ||||
|  | ||||
| @@ -0,0 +1 @@ | ||||
|  | ||||
							
								
								
									
										30
									
								
								frontend/ios/fastlane/screenshots/README.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,30 @@ | ||||
| ## Screenshots Naming Rules | ||||
|  | ||||
| Put all screenshots you want to use inside the folder of its language (e.g. `en-US`). | ||||
| The device type will automatically be recognized using the image resolution. | ||||
|  | ||||
| The screenshots can be named whatever you want, but keep in mind they are sorted | ||||
| alphabetically, in a human-friendly way. See https://github.com/fastlane/fastlane/pull/18200 for more details. | ||||
|  | ||||
| ### Exceptions | ||||
|  | ||||
| #### iPad Pro (3rd Gen) 12.9" | ||||
|  | ||||
| Since iPad Pro (3rd Gen) 12.9" and iPad Pro (2nd Gen) 12.9" have the same image | ||||
| resolution, screenshots of the iPad Pro (3rd gen) 12.9" must contain either the | ||||
| string `iPad Pro (12.9-inch) (3rd generation)`, `IPAD_PRO_3GEN_129`, or `ipadPro129` | ||||
| (App Store Connect's internal naming of the display family for the 3rd generation iPad Pro) | ||||
| in its filename to be assigned the correct display family and to be uploaded to | ||||
| the correct screenshot slot in your app's metadata. | ||||
|  | ||||
| ### Other Platforms | ||||
|  | ||||
| #### Apple TV | ||||
|  | ||||
| Apple TV screenshots should be stored in a subdirectory named `appleTV` with language | ||||
| folders inside of it. | ||||
|  | ||||
| #### iMessage | ||||
|  | ||||
| iMessage screenshots, like the Apple TV ones, should also be stored in a subdirectory | ||||
| named `iMessage`, with language folders inside of it. | ||||
							
								
								
									
										48
									
								
								status
									
									
									
									
									
								
							
							
						
						| @@ -1,48 +0,0 @@ | ||||
| error: wrong number of arguments, should be from 1 to 2 | ||||
| usage: git config [<options>] | ||||
|  | ||||
| Config file location | ||||
|     --[no-]global         use global config file | ||||
|     --[no-]system         use system config file | ||||
|     --[no-]local          use repository config file | ||||
|     --[no-]worktree       use per-worktree config file | ||||
|     -f, --[no-]file <file> | ||||
|                           use given config file | ||||
|     --[no-]blob <blob-id> read config from given blob object | ||||
|  | ||||
| Action | ||||
|     --[no-]get            get value: name [value-pattern] | ||||
|     --[no-]get-all        get all values: key [value-pattern] | ||||
|     --[no-]get-regexp     get values for regexp: name-regex [value-pattern] | ||||
|     --[no-]get-urlmatch   get value specific for the URL: section[.var] URL | ||||
|     --[no-]replace-all    replace all matching variables: name value [value-pattern] | ||||
|     --[no-]add            add a new variable: name value | ||||
|     --[no-]unset          remove a variable: name [value-pattern] | ||||
|     --[no-]unset-all      remove all matches: name [value-pattern] | ||||
|     --[no-]rename-section rename section: old-name new-name | ||||
|     --[no-]remove-section remove a section: name | ||||
|     -l, --[no-]list       list all | ||||
|     --[no-]fixed-value    use string equality when comparing values to 'value-pattern' | ||||
|     -e, --[no-]edit       open an editor | ||||
|     --[no-]get-color      find the color configured: slot [default] | ||||
|     --[no-]get-colorbool  find the color setting: slot [stdout-is-tty] | ||||
|  | ||||
| Type | ||||
|     -t, --[no-]type <type> | ||||
|                           value is given this type | ||||
|     --bool                value is "true" or "false" | ||||
|     --int                 value is decimal number | ||||
|     --bool-or-int         value is --bool or --int | ||||
|     --bool-or-str         value is --bool or string | ||||
|     --path                value is a path (file or directory name) | ||||
|     --expiry-date         value is an expiry date | ||||
|  | ||||
| Other | ||||
|     -z, --[no-]null       terminate values with NUL byte | ||||
|     --[no-]name-only      show variable names only | ||||
|     --[no-]includes       respect include directives on lookup | ||||
|     --[no-]show-origin    show origin of config (file, standard input, blob, command line) | ||||
|     --[no-]show-scope     show scope of config (worktree, local, global, system, command) | ||||
|     --[no-]default <value> | ||||
|                           with --get, use default value when missing entry | ||||
|  | ||||