Fastlane fixes working up to a full release #68
@ -5,7 +5,7 @@ on:
|
|||||||
paths:
|
paths:
|
||||||
- frontend/**
|
- frontend/**
|
||||||
|
|
||||||
name: Build and release release apps to production track
|
name: Build and release apps to beta track
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
get-version:
|
get-version:
|
||||||
@ -13,6 +13,7 @@ jobs:
|
|||||||
runs-on: macos
|
runs-on: macos
|
||||||
steps:
|
steps:
|
||||||
- uses: https://gitea.com/actions/checkout@v4
|
- uses: https://gitea.com/actions/checkout@v4
|
||||||
|
|
||||||
- name: Fetch tags from main branch
|
- 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
|
# since this workflow is triggered by a pull request, we want to match the latest tag of the main branch
|
||||||
id: version
|
id: version
|
||||||
@ -20,14 +21,21 @@ jobs:
|
|||||||
git fetch origin main --tags
|
git fetch origin main --tags
|
||||||
LATEST_TAG=$(git describe --tags $(git rev-list --tags --max-count=1))
|
LATEST_TAG=$(git describe --tags $(git rev-list --tags --max-count=1))
|
||||||
# remove the 'v' prefix from the tag name
|
# remove the 'v' prefix from the tag name
|
||||||
echo "BUILD_NAME=${LATEST_TAG//v}" >> $GITHUB_ENV
|
echo "BUILD_NAME=${LATEST_TAG//v}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Output the version that is being used
|
||||||
|
run: |
|
||||||
|
echo "Building for version ${{ steps.version.outputs.BUILD_NAME }}"
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
build_name: ${{ steps.version.outputs.BUILD_NAME }}
|
||||||
|
|
||||||
build-android:
|
build-android:
|
||||||
name: Build and upload android app
|
name: Build and upload android app
|
||||||
uses: ./.gitea/workflows/workflow_build-app-android.yaml
|
uses: ./.gitea/workflows/workflow_build-app-android.yaml
|
||||||
with:
|
with:
|
||||||
build_type: beta
|
build_type: beta
|
||||||
build_name: ${{ env.BUILD_NAME }}
|
build_name: ${{ needs.get-version.outputs.build_name }}
|
||||||
secrets:
|
secrets:
|
||||||
ANDROID_SECRET_PROPERTIES_BASE64: ${{ secrets.ANDROID_SECRET_PROPERTIES_BASE64 }}
|
ANDROID_SECRET_PROPERTIES_BASE64: ${{ secrets.ANDROID_SECRET_PROPERTIES_BASE64 }}
|
||||||
ANDROID_GOOGLE_PLAY_JSON_BASE64: ${{ secrets.ANDROID_GOOGLE_PLAY_JSON_BASE64 }}
|
ANDROID_GOOGLE_PLAY_JSON_BASE64: ${{ secrets.ANDROID_GOOGLE_PLAY_JSON_BASE64 }}
|
||||||
@ -40,7 +48,7 @@ jobs:
|
|||||||
uses: ./.gitea/workflows/workflow_build-app-ios.yaml
|
uses: ./.gitea/workflows/workflow_build-app-ios.yaml
|
||||||
with:
|
with:
|
||||||
build_type: beta
|
build_type: beta
|
||||||
build_name: ${{ env.BUILD_NAME }}
|
build_name: ${{ needs.get-version.outputs.build_name }}
|
||||||
secrets:
|
secrets:
|
||||||
IOS_ASC_KEY_ID: ${{ secrets.IOS_ASC_KEY_ID }}
|
IOS_ASC_KEY_ID: ${{ secrets.IOS_ASC_KEY_ID }}
|
||||||
IOS_ASC_ISSUER_ID: ${{ secrets.IOS_ASC_ISSUER_ID }}
|
IOS_ASC_ISSUER_ID: ${{ secrets.IOS_ASC_ISSUER_ID }}
|
||||||
@ -48,4 +56,4 @@ jobs:
|
|||||||
IOS_MATCH_REPO_SSH_KEY_BASE64: ${{ secrets.IOS_MATCH_REPO_SSH_KEY_BASE64 }}
|
IOS_MATCH_REPO_SSH_KEY_BASE64: ${{ secrets.IOS_MATCH_REPO_SSH_KEY_BASE64 }}
|
||||||
IOS_MATCH_PASSWORD: ${{ secrets.IOS_MATCH_PASSWORD }}
|
IOS_MATCH_PASSWORD: ${{ secrets.IOS_MATCH_PASSWORD }}
|
||||||
IOS_GOOGLE_MAPS_API_KEY: ${{ secrets.IOS_GOOGLE_MAPS_API_KEY }}
|
IOS_GOOGLE_MAPS_API_KEY: ${{ secrets.IOS_GOOGLE_MAPS_API_KEY }}
|
||||||
needs: get-version
|
needs: build-android # technically not needed, but this prevents the builds from running in parallel
|
||||||
|
@ -3,7 +3,7 @@ on:
|
|||||||
tags:
|
tags:
|
||||||
- v*
|
- v*
|
||||||
|
|
||||||
name: Build and release release apps to production track
|
name: Build and release apps to production track
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
get-version:
|
get-version:
|
||||||
@ -11,21 +11,28 @@ jobs:
|
|||||||
runs-on: macos
|
runs-on: macos
|
||||||
steps:
|
steps:
|
||||||
- uses: https://gitea.com/actions/checkout@v4
|
- uses: https://gitea.com/actions/checkout@v4
|
||||||
|
|
||||||
- name: Get version from git tag
|
- name: Get version from git tag
|
||||||
id: version
|
id: version
|
||||||
env:
|
env:
|
||||||
REF_NAME: ${{ gitea.ref_name }}
|
REF_NAME: ${{ gitea.ref_name }}
|
||||||
# remove the 'v' prefix from the tag name
|
# remove the 'v' prefix from the tag name
|
||||||
run: |
|
run: |
|
||||||
echo "BUILD_NAME=${REF_NAME//v}" >> $GITHUB_ENV
|
echo "BUILD_NAME=${REF_NAME//v}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Output the version that is being used
|
||||||
|
run: |
|
||||||
|
echo "Building for version ${{ steps.version.outputs.BUILD_NAME }}"
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
build_name: ${{ steps.version.outputs.BUILD_NAME }}
|
||||||
|
|
||||||
build-android:
|
build-android:
|
||||||
name: Build and upload android app
|
name: Build and upload android app
|
||||||
uses: ./.gitea/workflows/workflow_build-app-android.yaml
|
uses: ./.gitea/workflows/workflow_build-app-android.yaml
|
||||||
with:
|
with:
|
||||||
build_type: release
|
build_type: release
|
||||||
build_name: ${{ env.BUILD_NAME }}
|
build_name: ${{ needs.get-version.outputs.build_name }}
|
||||||
secrets:
|
secrets:
|
||||||
ANDROID_SECRET_PROPERTIES_BASE64: ${{ secrets.ANDROID_SECRET_PROPERTIES_BASE64 }}
|
ANDROID_SECRET_PROPERTIES_BASE64: ${{ secrets.ANDROID_SECRET_PROPERTIES_BASE64 }}
|
||||||
ANDROID_GOOGLE_PLAY_JSON_BASE64: ${{ secrets.ANDROID_GOOGLE_PLAY_JSON_BASE64 }}
|
ANDROID_GOOGLE_PLAY_JSON_BASE64: ${{ secrets.ANDROID_GOOGLE_PLAY_JSON_BASE64 }}
|
||||||
@ -38,12 +45,12 @@ jobs:
|
|||||||
uses: ./.gitea/workflows/workflow_build-app-ios.yaml
|
uses: ./.gitea/workflows/workflow_build-app-ios.yaml
|
||||||
with:
|
with:
|
||||||
build_type: release
|
build_type: release
|
||||||
build_name: ${{ env.BUILD_NAME }}
|
build_name: ${{ needs.get-version.outputs.build_name }}
|
||||||
secrets:
|
secrets:
|
||||||
IOS_ASC_KEY_ID: ${{ secrets.IOS_ASC_KEY_ID }}
|
IOS_ASC_KEY_ID: ${{ secrets.IOS_ASC_KEY_ID }}
|
||||||
IOS_ASC_ISSUER_ID: ${{ secrets.IOS_ASC_ISSUER_ID }}
|
IOS_ASC_ISSUER_ID: ${{ secrets.IOS_ASC_ISSUER_ID }}
|
||||||
IOS_ASC_KEY: ${{ secrets.IOS_ASC_KEY }}
|
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_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 }}
|
IOS_GOOGLE_MAPS_API_KEY: ${{ secrets.IOS_GOOGLE_MAPS_API_KEY }}
|
||||||
needs: get-version
|
needs: build-android # technically not needed, but this prevents the builds from running in parallel
|
||||||
|
@ -27,7 +27,7 @@ defaults:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: macos
|
runs-on: macos-14
|
||||||
env:
|
env:
|
||||||
# $BUNDLE_GEMFILE must be set at the job level, so it is set for all steps
|
# $BUNDLE_GEMFILE must be set at the job level, so it is set for all steps
|
||||||
BUNDLE_GEMFILE: ${{ gitea.workspace }}/frontend/android/Gemfile
|
BUNDLE_GEMFILE: ${{ gitea.workspace }}/frontend/android/Gemfile
|
||||||
|
@ -31,7 +31,7 @@ defaults:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: macos
|
runs-on: macos-14
|
||||||
env:
|
env:
|
||||||
# $BUNDLE_GEMFILE must be set at the job level, so it is set for all steps
|
# $BUNDLE_GEMFILE must be set at the job level, so it is set for all steps
|
||||||
BUNDLE_GEMFILE: ${{ gitea.workspace }}/frontend/ios/Gemfile
|
BUNDLE_GEMFILE: ${{ gitea.workspace }}/frontend/ios/Gemfile
|
||||||
@ -53,9 +53,13 @@ jobs:
|
|||||||
ruby-version: 3.3
|
ruby-version: 3.3
|
||||||
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
||||||
|
|
||||||
|
- uses: GuillaumeFalourd/setup-rsync@v1.2
|
||||||
|
# rsync is required by the google maps ios tools
|
||||||
|
|
||||||
- name: Install dependencies and clean up
|
- name: Install dependencies and clean up
|
||||||
run: |
|
run: |
|
||||||
flutter pub get
|
flutter pub get
|
||||||
|
flutter precache --ios
|
||||||
bundle exec pod install --allow-root
|
bundle exec pod install --allow-root
|
||||||
flutter clean
|
flutter clean
|
||||||
bundle exec pod cache clean --all --allow-root
|
bundle exec pod cache clean --all --allow-root
|
||||||
@ -69,6 +73,11 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
MATCH_REPO_SSH_KEY: ${{ secrets.IOS_MATCH_REPO_SSH_KEY_BASE64 }}
|
MATCH_REPO_SSH_KEY: ${{ secrets.IOS_MATCH_REPO_SSH_KEY_BASE64 }}
|
||||||
|
|
||||||
|
- name: Replace API Key from secret
|
||||||
|
# on a macOS runner, sed requires a replacement suffix after the -i flag
|
||||||
|
run: |
|
||||||
|
sed -i '' -e "s/IOS_GOOGLE_MAPS_API_KEY/${{ secrets.IOS_GOOGLE_MAPS_API_KEY }}/g" Runner/AppDelegate.swift
|
||||||
|
|
||||||
- name: Run fastlane lane
|
- name: Run fastlane lane
|
||||||
run: bundle exec fastlane deploy_${{ inputs.build_type }}
|
run: bundle exec fastlane deploy_${{ inputs.build_type }}
|
||||||
env:
|
env:
|
||||||
|
@ -1,59 +0,0 @@
|
|||||||
on:
|
|
||||||
push:
|
|
||||||
tags:
|
|
||||||
- 'v*'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: macos-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Set up ruby env
|
|
||||||
uses: ruby/setup-ruby@v1
|
|
||||||
with:
|
|
||||||
ruby-version: 3.2.1
|
|
||||||
bundler-cache: true
|
|
||||||
|
|
||||||
- name: Setup java for android build
|
|
||||||
uses: actions/setup-java@v4
|
|
||||||
with:
|
|
||||||
java-version: '17'
|
|
||||||
distribution: 'zulu'
|
|
||||||
|
|
||||||
- name: Setup android SDK
|
|
||||||
uses: android-actions/setup-android@v3
|
|
||||||
|
|
||||||
- name: Install Flutter
|
|
||||||
uses: subosito/flutter-action@v2
|
|
||||||
with:
|
|
||||||
channel: stable
|
|
||||||
flutter-version: 3.22.0
|
|
||||||
cache: true
|
|
||||||
|
|
||||||
- name: Infer version number from git tag
|
|
||||||
id: version
|
|
||||||
env:
|
|
||||||
REF_NAME: ${{ github.ref_name }}
|
|
||||||
run:
|
|
||||||
# remove the 'v' prefix from the tag name
|
|
||||||
echo "BUILD_NAME=${REF_NAME//v}" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Put selected secrets into files
|
|
||||||
run: |
|
|
||||||
echo "${{ secrets.ANDROID_SECRET_PROPERTIES_BASE64 }}" | base64 -d > secrets.properties
|
|
||||||
echo "${{ secrets.ANDROID_GOOGLE_PLAY_JSON_BASE64 }}" | base64 -d > google-key.json
|
|
||||||
echo "${{ secrets.ANDROID_KEYSTORE_BASE64 }}" | base64 -d > release.keystore
|
|
||||||
working-directory: android
|
|
||||||
|
|
||||||
- name: Install fastlane
|
|
||||||
run: bundle install
|
|
||||||
working-directory: android
|
|
||||||
|
|
||||||
- name: Run fastlane lane
|
|
||||||
run: bundle exec fastlane deploy_release
|
|
||||||
working-directory: android
|
|
||||||
env:
|
|
||||||
BUILD_NUMBER: ${{ github.run_number }}
|
|
||||||
# BUILD_NAME is implicitly available
|
|
||||||
GOOGLE_MAPS_API_KEY: ${{ secrets.GOOGLE_MAPS_API_KEY }}
|
|
64
frontend/.github/workflows/build_app_ios.yaml
vendored
@ -1,64 +0,0 @@
|
|||||||
on:
|
|
||||||
push:
|
|
||||||
tags:
|
|
||||||
- 'v*'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: macos-latest
|
|
||||||
env:
|
|
||||||
# $BUNDLE_GEMFILE must be set at the job level, so it is set for all steps
|
|
||||||
BUNDLE_GEMFILE: ${{ github.workspace }}/ios/Gemfile
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Set up ruby env
|
|
||||||
uses: ruby/setup-ruby@v1
|
|
||||||
with:
|
|
||||||
ruby-version: 3.3
|
|
||||||
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
|
||||||
|
|
||||||
- name: Install Flutter
|
|
||||||
uses: subosito/flutter-action@v2
|
|
||||||
with:
|
|
||||||
channel: stable
|
|
||||||
flutter-version: 3.22.0
|
|
||||||
cache: true
|
|
||||||
|
|
||||||
- name: Infer version number from git tag
|
|
||||||
id: version
|
|
||||||
env:
|
|
||||||
REF_NAME: ${{ github.ref_name }}
|
|
||||||
run:
|
|
||||||
# remove the 'v' prefix from the tag name
|
|
||||||
echo "BUILD_NAME=${REF_NAME//v}" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Setup SSH key for match git repo
|
|
||||||
# and mark the host as known
|
|
||||||
run: |
|
|
||||||
echo $MATCH_REPO_SSH_KEY | base64 --decode > ~/.ssh/id_rsa
|
|
||||||
chmod 600 ~/.ssh/id_rsa
|
|
||||||
ssh-keyscan -p 2222 git.kluster.moll.re > ~/.ssh/known_hosts
|
|
||||||
env:
|
|
||||||
MATCH_REPO_SSH_KEY: ${{ secrets.IOS_MATCH_REPO_SSH_KEY_BASE64 }}
|
|
||||||
|
|
||||||
- name: Install dependencies and clean up
|
|
||||||
run: |
|
|
||||||
flutter pub get
|
|
||||||
bundle exec pod install
|
|
||||||
flutter clean
|
|
||||||
bundle exec pod cache clean --all
|
|
||||||
working-directory: ios
|
|
||||||
|
|
||||||
- name: Run fastlane lane
|
|
||||||
run: bundle exec fastlane deploy_release --verbose
|
|
||||||
working-directory: ios
|
|
||||||
env:
|
|
||||||
BUILD_NUMBER: ${{ github.run_number }}
|
|
||||||
# BUILD_NAME is implicitly available
|
|
||||||
GOOGLE_MAPS_API_KEY: ${{ secrets.GOOGLE_MAPS_API_KEY }}
|
|
||||||
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 }}
|
|
||||||
MATCH_PASSWORD: ${{ secrets.IOS_MATCH_PASSWORD }}
|
|
||||||
IOS_GOOGLE_MAPS_API_KEY: ${{ secrets.IOS_GOOGLE_MAPS_API_KEY }}
|
|
@ -17,7 +17,7 @@ platform :android do
|
|||||||
)
|
)
|
||||||
|
|
||||||
upload_to_play_store(
|
upload_to_play_store(
|
||||||
track: 'alpha',
|
track: 'beta',
|
||||||
# upload aab files intstead
|
# upload aab files intstead
|
||||||
skip_upload_apk: true,
|
skip_upload_apk: true,
|
||||||
skip_upload_changelogs: true,
|
skip_upload_changelogs: true,
|
||||||
|
@ -1,7 +0,0 @@
|
|||||||
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 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.
|
|
@ -0,0 +1,7 @@
|
|||||||
|
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 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.
|
Before Width: | Height: | Size: 3.0 MiB After Width: | Height: | Size: 3.0 MiB |
Before Width: | Height: | Size: 4.1 MiB After Width: | Height: | Size: 4.1 MiB |
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 1.1 MiB |
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 1.1 MiB |
@ -1,4 +1,4 @@
|
|||||||
app_identifier("info.anydev.testing") # The bundle identifier of your app
|
app_identifier("info.anydev.anyway") # The bundle identifier of your app
|
||||||
apple_id("me@moll.re") # Your Apple Developer Portal username
|
apple_id("me@moll.re") # Your Apple Developer Portal username
|
||||||
|
|
||||||
itc_team_id("127439860") # App Store Connect Team ID
|
itc_team_id("127439860") # App Store Connect Team ID
|
||||||
|
@ -28,17 +28,6 @@ platform :ios do
|
|||||||
readonly: true,
|
readonly: true,
|
||||||
)
|
)
|
||||||
|
|
||||||
# replace secrets by real values, the stupid way
|
|
||||||
sh(
|
|
||||||
"sed",
|
|
||||||
"-i",
|
|
||||||
"",
|
|
||||||
"s/IOS_GOOGLE_MAPS_API_KEY/#{ENV["IOS_GOOGLE_MAPS_API_KEY"]}/g",
|
|
||||||
"../Runner/AppDelegate.swift"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
sh(
|
sh(
|
||||||
"flutter",
|
"flutter",
|
||||||
"build",
|
"build",
|
||||||
@ -74,15 +63,6 @@ platform :ios do
|
|||||||
readonly: true,
|
readonly: true,
|
||||||
)
|
)
|
||||||
|
|
||||||
# replace secrets by real values, the stupid way
|
|
||||||
sh(
|
|
||||||
"sed",
|
|
||||||
"-i",
|
|
||||||
"",
|
|
||||||
"s/IOS_GOOGLE_MAPS_API_KEY/#{ENV["IOS_GOOGLE_MAPS_API_KEY"]}/g",
|
|
||||||
"../Runner/AppDelegate.swift"
|
|
||||||
)
|
|
||||||
|
|
||||||
sh(
|
sh(
|
||||||
"flutter",
|
"flutter",
|
||||||
"build",
|
"build",
|
||||||
@ -101,9 +81,9 @@ platform :ios do
|
|||||||
upload_to_app_store(
|
upload_to_app_store(
|
||||||
overwrite_screenshots: true,
|
overwrite_screenshots: true,
|
||||||
metadata_path: "fastlane/metadata",
|
metadata_path: "fastlane/metadata",
|
||||||
screenshot_path: "fastlane/screenshots",
|
screenshots_path: "fastlane/screenshots",
|
||||||
precheck_include_in_app_purchases: false,
|
precheck_include_in_app_purchases: false,
|
||||||
|
force: true, # Skip HTMl report verification
|
||||||
submit_for_review: true,
|
submit_for_review: true,
|
||||||
automatic_release: true,
|
automatic_release: true,
|
||||||
# automatically release the app after review
|
# automatically release the app after review
|
||||||
|
@ -1 +1 @@
|
|||||||
|
2025 anydev
|
||||||
|
@ -1,7 +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 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 follows these core principles:
|
Anyway follows these core principles:
|
||||||
- **Personalization**: Trips should be match your interests - not just the most popular destinations.
|
- 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.
|
- 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.
|
- 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.
|
- Discoverability: Tourism means exploration. Anyway encourages you to take detours and make spontaneous decisions.
|
||||||
|
Before Width: | Height: | Size: 1.6 MiB |
Before Width: | Height: | Size: 2.2 MiB |
@ -1 +1 @@
|
|||||||
AnyWay
|
Any.Way
|
@ -1 +1 @@
|
|||||||
|
TRAVEL
|
||||||
|
@ -1 +1 @@
|
|||||||
|
anydev.anyway@gmail.com
|
||||||
|
@ -1 +1 @@
|
|||||||
|
Remy
|
||||||
|
@ -1 +1 @@
|
|||||||
|
Moll
|
||||||
|
@ -1 +1 @@
|
|||||||
|
+4915128785827
|
||||||
|
BIN
frontend/ios/fastlane/screenshots/en-US/iOS Phones 6.9-01.png
Normal file
After Width: | Height: | Size: 1.6 MiB |
Before Width: | Height: | Size: 2.1 MiB After Width: | Height: | Size: 2.1 MiB |
Before Width: | Height: | Size: 626 KiB After Width: | Height: | Size: 626 KiB |
Before Width: | Height: | Size: 758 KiB After Width: | Height: | Size: 758 KiB |
After Width: | Height: | Size: 2.2 MiB |
Before Width: | Height: | Size: 2.5 MiB After Width: | Height: | Size: 2.5 MiB |
Before Width: | Height: | Size: 574 KiB After Width: | Height: | Size: 574 KiB |
Before Width: | Height: | Size: 800 KiB After Width: | Height: | Size: 800 KiB |