Skip to content

Commit

Permalink
feat: iOS Signing and deployment (#152)
Browse files Browse the repository at this point in the history
Co-authored-by: u221711 <thomas.bomatter@sbb.ch>
  • Loading branch information
Grodien and Grodien authored Aug 6, 2024
1 parent afb2468 commit 141463f
Show file tree
Hide file tree
Showing 215 changed files with 1,296 additions and 226 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,16 @@
# separate terms of service, privacy policy, and support
# documentation.

name: Flutter Build
name: Flutter Android Build

defaults:
run:
working-directory: das_client


concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true

on:
push:
paths:
Expand Down Expand Up @@ -53,4 +57,12 @@ jobs:
- run: flutter build appbundle --flavor dev -t lib/main_dev.dart
- run: flutter build appbundle --flavor inte -t lib/main_inte.dart
- run: flutter build appbundle --flavor prod -t lib/main_prod.dart
- run: flutter build ios --flavor dev -t lib/main_dev.dart --release --no-codesign
- name: Archive Apps
uses: actions/upload-artifact@v4
with:
name: Build
path: |
das_client/build/app/outputs/bundle/devRelease/**
das_client/build/app/outputs/bundle/inteRelease/**
das_client/build/app/outputs/bundle/prodRelease/**
retention-days: 1
6 changes: 5 additions & 1 deletion .github/workflows/flutter_browserstack_android.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,11 @@ name: Flutter Browserstack Android Build
defaults:
run:
working-directory: das_client


concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true

on:
push:
paths:
Expand Down
12 changes: 8 additions & 4 deletions .github/workflows/flutter_browserstack_ios.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,11 @@ name: Flutter Browserstack iOS Build
defaults:
run:
working-directory: das_client


concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true

on:
push:
paths:
Expand Down Expand Up @@ -41,12 +45,12 @@ jobs:
MQTT_USERNAME: ${{ secrets.MQTT_USERNAME }}
MQTT_PASSWORD: ${{ secrets.MQTT_PASSWORD }}
run: |
flutter build ios --release --no-codesign -t integration_test/app_test.dart --no-tree-shake-icons --dart-define=MQTT_USERNAME=$MQTT_USERNAME --dart-define=MQTT_PASSWORD=$MQTT_PASSWORD
flutter build ios --flavor dev --release --no-codesign -t integration_test/app_test.dart --no-tree-shake-icons --dart-define=MQTT_USERNAME=$MQTT_USERNAME --dart-define=MQTT_PASSWORD=$MQTT_PASSWORD
pushd ios
xcodebuild -workspace Runner.xcworkspace -scheme Runner -config Flutter/Release.xcconfig -derivedDataPath ../build/ios_integration -sdk iphoneos build-for-testing CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO
xcodebuild -workspace Runner.xcworkspace -scheme dev -config Flutter/Release.xcconfig -derivedDataPath ../build/ios_integration -sdk iphoneos build-for-testing CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO
popd
pushd build/ios_integration/Build/Products
zip -r app-integrationtest-release.zip Release-iphoneos Runner_iphoneos*-arm64.xctestrun
zip -r app-integrationtest-release.zip Release-iphoneos dev_dev_iphoneos*-arm64.xctestrun
popd
- name: Upload and Run on Browserstack
uses: Grodien/browserstack-flutter-action@v1.4
Expand Down
65 changes: 47 additions & 18 deletions .github/workflows/flutter_ios_build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,24 @@
# separate terms of service, privacy policy, and support
# documentation.

name: Flutter Build
name: Flutter iOS Build

defaults:
run:
working-directory: das_client


concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true

on:
push:
paths:
- 'das_client/**'
branches: [ "feature/ios-signing" ]
pull_request:
paths:
- 'das_client/**'
branches: [ "main" ]

jobs:
build:
Expand All @@ -30,34 +37,56 @@ jobs:
- uses: subosito/flutter-action@v2
with:
flutter-version: '3.22.2'
- name: Install the Apple certificate and provisioning profile
- name: Install the Apple signing certificate
env:
BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }}
P12_PASSWORD: ${{ secrets.P12_PASSWORD }}
BUILD_PROVISION_PROFILE_BASE64: ${{ secrets.BUILD_PROVISION_PROFILE_BASE64 }}
SBB_APPSTORE_BASE64: ${{ secrets.SBB_APPSTORE_BASE64 }}
SBB_APPSTORE_P12_PASSWORD: ${{ secrets.SBB_APPSTORE_P12_PASSWORD }}
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
run: |
# create variables
CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12
PP_PATH=$RUNNER_TEMP/build_pp.mobileprovision
SBB_CERTIFICATE_PATH=$RUNNER_TEMP/sbb_appstore.p12
KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db
# import certificate and provisioning profile from secrets
echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode -o $CERTIFICATE_PATH
echo -n "$BUILD_PROVISION_PROFILE_BASE64" | base64 --decode -o $PP_PATH
# import certificate from secrets
echo -n "$SBB_APPSTORE_BASE64" | base64 --decode -o $SBB_CERTIFICATE_PATH
# create temporary keychain
security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
# import certificate to keychain
security import $CERTIFICATE_PATH -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
security import $SBB_CERTIFICATE_PATH -P "$SBB_APPSTORE_P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
security set-key-partition-list -S apple-tool:,apple: -k "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
security list-keychain -d user -s $KEYCHAIN_PATH
# apply provisioning profile
mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles
cp $PP_PATH ~/Library/MobileDevice/Provisioning\ Profiles
- name: 'Download Provisioning Profiles DEV'
uses: apple-actions/download-provisioning-profiles@v3
with:
bundle-id: 'ch.sbb.das.dev'
issuer-id: ${{ secrets.APPSTORE_CONNECT_ISSUER_ID }}
api-key-id: ${{ secrets.APPSTORE_CONNECT_KEY_ID }}
api-private-key: ${{ secrets.APPSTORE_CONNECT_PRIVATE_KEY }}
- name: 'Download Provisioning Profiles INTE'
uses: apple-actions/download-provisioning-profiles@v3
with:
bundle-id: 'ch.sbb.das.inte'
issuer-id: ${{ secrets.APPSTORE_CONNECT_ISSUER_ID }}
api-key-id: ${{ secrets.APPSTORE_CONNECT_KEY_ID }}
api-private-key: ${{ secrets.APPSTORE_CONNECT_PRIVATE_KEY }}
- name: 'Download Provisioning Profiles PROD'
uses: apple-actions/download-provisioning-profiles@v3
with:
bundle-id: 'ch.sbb.das'
issuer-id: ${{ secrets.APPSTORE_CONNECT_ISSUER_ID }}
api-key-id: ${{ secrets.APPSTORE_CONNECT_KEY_ID }}
api-private-key: ${{ secrets.APPSTORE_CONNECT_PRIVATE_KEY }}
- run: |
flutter pub get
flutter pub run build_runner build --delete-conflicting-outputs
- run: flutter test
- run: flutter build ios --flavor dev -t lib/main_dev.dart --release
- name: Build iOS App DEV
run: flutter build ios --flavor dev -t lib/main_dev.dart --release
- name: Build iOS App INTE
run: flutter build ios --flavor inte -t lib/main_inte.dart --release
- name: Build iOS App PROD
run: flutter build ios --flavor prod -t lib/main_prod.dart --release
80 changes: 72 additions & 8 deletions .github/workflows/release-please.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,17 +41,81 @@ jobs:
- uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '11'
java-version: '17'
- uses: subosito/flutter-action@v2
with:
flutter-version: '3.19.2'
- run: flutter pub get
- run: flutter test
- run: flutter build appbundle
- name: Upload Release Artifact
flutter-version: '3.22.2'
- name: Install the Apple signing certificate and appstore connect key
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: gh release upload ${{ needs.release-please.outputs.das_client--tag_name }} build/app/outputs/bundle/release/app-release.aab
SBB_APPSTORE_BASE64: ${{ secrets.SBB_APPSTORE_BASE64 }}
SBB_APPSTORE_P12_PASSWORD: ${{ secrets.SBB_APPSTORE_P12_PASSWORD }}
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
APPSTORE_CONNECT_PRIVATE_KEY_BASE64: ${{ secrets.APPSTORE_CONNECT_PRIVATE_KEY_BASE64 }}
run: |
# create variables
SBB_CERTIFICATE_PATH=$RUNNER_TEMP/sbb_appstore.p12
KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db
APPSTORE_CONNECT_PRIVATE_KEY_PATH=~/AuthKey.p8
# import certificate and private key from secrets
echo -n "$SBB_APPSTORE_BASE64" | base64 --decode -o $SBB_CERTIFICATE_PATH
echo -n "$APPSTORE_CONNECT_PRIVATE_KEY_BASE64" | base64 --decode -o $APPSTORE_CONNECT_PRIVATE_KEY_PATH
# create temporary keychain
security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
# import certificate to keychain
security import $SBB_CERTIFICATE_PATH -P "$SBB_APPSTORE_P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
security set-key-partition-list -S apple-tool:,apple: -k "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
security list-keychain -d user -s $KEYCHAIN_PATH
- name: 'Download Provisioning Profiles DEV'
uses: apple-actions/download-provisioning-profiles@v3
with:
bundle-id: 'ch.sbb.das.dev'
issuer-id: ${{ secrets.APPSTORE_CONNECT_ISSUER_ID }}
api-key-id: ${{ secrets.APPSTORE_CONNECT_KEY_ID }}
api-private-key: ${{ secrets.APPSTORE_CONNECT_PRIVATE_KEY }}
- name: 'Download Provisioning Profiles INTE'
uses: apple-actions/download-provisioning-profiles@v3
with:
bundle-id: 'ch.sbb.das.inte'
issuer-id: ${{ secrets.APPSTORE_CONNECT_ISSUER_ID }}
api-key-id: ${{ secrets.APPSTORE_CONNECT_KEY_ID }}
api-private-key: ${{ secrets.APPSTORE_CONNECT_PRIVATE_KEY }}
- name: 'Download Provisioning Profiles PROD'
uses: apple-actions/download-provisioning-profiles@v3
with:
bundle-id: 'ch.sbb.das'
issuer-id: ${{ secrets.APPSTORE_CONNECT_ISSUER_ID }}
api-key-id: ${{ secrets.APPSTORE_CONNECT_KEY_ID }}
api-private-key: ${{ secrets.APPSTORE_CONNECT_PRIVATE_KEY }}
- run: |
flutter pub get
flutter pub run build_runner build --delete-conflicting-outputs
- name: Build and Deploy iOS App DEV
env:
APPSTORE_CONNECT_KEY_ID: ${{ secrets.APPSTORE_CONNECT_KEY_ID }}
APPSTORE_CONNECT_ISSUER_ID: ${{ secrets.APPSTORE_CONNECT_ISSUER_ID }}
run: |
flutter build ipa --flavor dev -t lib/main_dev.dart --release
xcodebuild -exportArchive -archivePath "build/ios/archive/DAS Dev.xcarchive" -exportOptionsPlist ios/exportOptionsRelease.plist -authenticationKeyIssuerID "$APPSTORE_CONNECT_ISSUER_ID" -authenticationKeyID "$APPSTORE_CONNECT_KEY_ID" -authenticationKeyPath ~/AuthKey.p8
- name: Build and Deploy iOS App INTE
env:
APPSTORE_CONNECT_KEY_ID: ${{ secrets.APPSTORE_CONNECT_KEY_ID }}
APPSTORE_CONNECT_ISSUER_ID: ${{ secrets.APPSTORE_CONNECT_ISSUER_ID }}
run: |
flutter build ipa --flavor inte -t lib/main_inte.dart --release
xcodebuild -exportArchive -archivePath "build/ios/archive/DAS Inte.xcarchive" -exportOptionsPlist ios/exportOptionsRelease.plist -authenticationKeyIssuerID "$APPSTORE_CONNECT_ISSUER_ID" -authenticationKeyID "$APPSTORE_CONNECT_KEY_ID" -authenticationKeyPath ~/AuthKey.p8
- name: Build and Deploy iOS App PROD
env:
APPSTORE_CONNECT_KEY_ID: ${{ secrets.APPSTORE_CONNECT_KEY_ID }}
APPSTORE_CONNECT_ISSUER_ID: ${{ secrets.APPSTORE_CONNECT_ISSUER_ID }}
run: |
flutter build ipa --flavor prod -t lib/main_prod.dart --release
xcodebuild -exportArchive -archivePath "build/ios/archive/DAS.xcarchive" -exportOptionsPlist ios/exportOptionsRelease.plist -authenticationKeyIssuerID "$APPSTORE_CONNECT_ISSUER_ID" -authenticationKeyID "$APPSTORE_CONNECT_KEY_ID" -authenticationKeyPath ~/AuthKey.p8
backend-release:
needs: release-please
if: needs.release-please.outputs.playground-backend--release_created
Expand Down
9 changes: 5 additions & 4 deletions das_client/android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ android {
}
inte {
dimension 'env'
applicationIdSuffix '.inte'
manifestPlaceholders += [
'appAuthRedirectScheme': 'ch.sbb.das'
]
Expand All @@ -78,10 +79,10 @@ android {

signingConfigs {
release {
storeFile = file(System.getenv("ANDROID_KEYSTORE"))
storePassword System.getenv("ANDROID_KEYSTORE_PASSWORD")
keyAlias System.getenv("ANDROID_KEY_ALIAS")
keyPassword System.getenv("ANDROID_KEY_PASSWORD")
storeFile = file(System.getenv("ANDROID_KEYSTORE") ?: ANDROID_KEYSTORE)
storePassword System.getenv("ANDROID_KEYSTORE_PASSWORD") ?: ANDROID_KEYSTORE_PASSWORD
keyAlias System.getenv("ANDROID_KEY_ALIAS") ?: ANDROID_KEY_ALIAS
keyPassword System.getenv("ANDROID_KEY_PASSWORD") ?: ANDROID_KEY_PASSWORD
}
}

Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:pathData="M57.17,54.5L54.5,52H56.5L59.83,55.33L56.5,58.67H54.5L57.17,56.17H54V58.67H52.33V56.17H49.17L51.83,58.67H49.83L46.5,55.33L49.83,52H51.83L49.17,54.5H52.33V52H54V54.5H57.17Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M64,57.83V47.83C64,47.35 63.71,47.03 63.49,46.85C63.26,46.67 62.98,46.52 62.69,46.41C62.1,46.18 61.3,45.99 60.37,45.83C58.51,45.52 55.96,45.33 53.17,45.33C50.37,45.33 47.83,45.52 45.96,45.83C45.03,45.99 44.23,46.18 43.65,46.41C43.36,46.52 43.07,46.67 42.84,46.85C42.63,47.03 42.33,47.35 42.33,47.83V57.83C42.33,58.66 42.84,59.31 43.44,59.79C43.89,60.14 44.45,60.45 45.1,60.71C45.56,61.85 46.61,62.76 47.87,63.38C49.31,64.09 51.16,64.5 53.17,64.5C55.17,64.5 57.02,64.09 58.46,63.38C59.73,62.76 60.78,61.85 61.23,60.71C61.88,60.45 62.45,60.14 62.9,59.79C63.5,59.31 64,58.66 64,57.83ZM46.23,48.19C45.57,48.08 45.03,47.96 44.63,47.83C45.03,47.71 45.57,47.59 46.23,47.48C47.99,47.18 50.44,47 53.17,47C55.9,47 58.35,47.18 60.1,47.48C60.76,47.59 61.3,47.71 61.71,47.83C61.3,47.96 60.76,48.08 60.1,48.19C58.35,48.48 55.9,48.67 53.17,48.67C50.44,48.67 47.99,48.48 46.23,48.19ZM60.37,49.83C61.13,49.71 61.79,49.56 62.33,49.38V57.83C62.33,57.93 62.28,58.15 61.86,58.48C61.46,58.79 60.83,59.11 59.97,59.4C58.27,59.97 55.86,60.33 53.17,60.33C50.47,60.33 48.06,59.97 46.36,59.4C45.5,59.11 44.87,58.79 44.47,58.48C44.06,58.15 44,57.93 44,57.83V49.38C44.54,49.56 45.21,49.71 45.96,49.83C47.83,50.15 50.37,50.33 53.17,50.33C55.96,50.33 58.51,50.15 60.37,49.83ZM48.6,61.88C48.38,61.77 48.17,61.65 47.98,61.53C49.52,61.83 51.29,62 53.17,62C55.04,62 56.81,61.83 58.35,61.53C58.16,61.65 57.95,61.77 57.73,61.88C56.55,62.46 54.95,62.83 53.17,62.83C51.38,62.83 49.79,62.46 48.6,61.88ZM62.45,47.51L62.44,47.52C62.44,47.52 62.45,47.52 62.45,47.52C62.45,47.52 62.45,47.51 62.45,47.51ZM43.89,47.52C43.89,47.52 43.89,47.51 43.89,47.51L43.89,47.52Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
<path
android:pathData="M43.16,68.77L43.99,68.67C43.16,68.77 43.16,68.77 43.16,68.77L43.17,68.77L43.17,68.78L43.17,68.79L43.17,68.83C43.18,68.86 43.18,68.9 43.19,68.96C43.21,69.08 43.24,69.25 43.28,69.45C43.36,69.85 43.49,70.42 43.69,71.04C44.08,72.26 44.77,73.84 45.96,74.92C48.26,77.01 50.27,78.61 53.17,78.61C56.07,78.61 58.08,77.01 60.38,74.92C61.57,73.84 62.25,72.26 62.64,71.04C62.84,70.42 62.97,69.85 63.05,69.45C63.09,69.25 63.12,69.08 63.14,68.96C63.15,68.9 63.16,68.86 63.16,68.83L63.17,68.79L63.17,68.78L63.17,68.77L63.17,68.77C63.17,68.77 63.17,68.77 62.35,68.67L63.17,68.77L63.17,68.76L64,61.17L62.34,60.99L61.51,68.57L61.51,68.59C61.51,68.62 61.5,68.65 61.49,68.7C61.48,68.8 61.45,68.94 61.42,69.12C61.35,69.48 61.23,69.98 61.05,70.53C60.69,71.67 60.12,72.9 59.26,73.68C56.94,75.79 55.36,76.94 53.17,76.94C50.97,76.94 49.4,75.79 47.07,73.68C46.21,72.9 45.64,71.67 45.28,70.53C45.1,69.98 44.99,69.48 44.91,69.12C44.88,68.94 44.85,68.8 44.84,68.7C44.83,68.65 44.83,68.62 44.82,68.59L44.82,68.57L44,60.99L42.34,61.17L43.16,68.76L43.16,68.77Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M53.17,72C52.17,72 51.27,71.65 50.6,71.27C50.27,71.09 50,70.9 49.82,70.76C49.73,70.7 49.67,70.64 49.62,70.6C49.6,70.59 49.59,70.57 49.58,70.56L49.57,70.56C49.57,70.56 49.57,70.56 49,71.17C48.43,71.78 48.43,71.78 48.43,71.78L48.43,71.78L48.44,71.78L48.44,71.79L48.47,71.81C48.48,71.82 48.51,71.84 48.54,71.87C48.6,71.93 48.69,72 48.81,72.09C49.04,72.26 49.37,72.5 49.78,72.73C50.6,73.18 51.78,73.67 53.17,73.67C54.55,73.67 55.73,73.18 56.55,72.73C56.96,72.5 57.29,72.26 57.52,72.09C57.64,72 57.73,71.93 57.79,71.87C57.82,71.84 57.85,71.82 57.87,71.81L57.89,71.79L57.9,71.78L57.9,71.78L57.9,71.78C57.9,71.78 57.9,71.78 57.33,71.17C56.76,70.56 56.76,70.56 56.76,70.56L56.76,70.56C56.75,70.57 56.73,70.59 56.71,70.6C56.67,70.64 56.6,70.7 56.51,70.76C56.33,70.9 56.07,71.09 55.74,71.27C55.07,71.65 54.17,72 53.17,72Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M51,67.33C51,66.67 50.5,66 49.67,66C48.83,66 48.33,66.5 48.33,67.33C48.33,68 48.83,68.67 49.67,68.67C50.5,68.67 51,68.17 51,67.33Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M57.67,67.33C57.67,66.67 57.17,66 56.33,66C55.5,66 55,66.5 55,67.33C55,68 55.5,68.67 56.33,68.67C57.17,68.67 57.67,68.17 57.67,67.33Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M0,0h108v40h-108z"
android:fillColor="#EB0000"/>
<path
android:pathData="M47.99,35.46H51.49L46.78,30.67H52.62V35.46H55.38V30.67H61.22L56.51,35.46H60.01L66,29.24L60.01,23H56.51L61.22,27.81H55.38V23H52.62V27.81H46.78L51.49,23H47.99L42,29.24L47.99,35.46Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
<path
android:pathData="M0,0L67,0L0,67L0,0Z"
android:fillColor="#FCBB00"
android:fillType="evenOdd"/>
<path
android:pathData="M23.57,28.47L29.12,34.02L28.5,34.64L27.87,34.02C27.99,34.38 28.01,34.74 27.91,35.1C27.81,35.45 27.61,35.78 27.3,36.09C26.75,36.64 26.11,36.89 25.39,36.85C24.64,36.8 23.92,36.43 23.23,35.74C22.55,35.06 22.19,34.37 22.13,33.65C22.08,32.91 22.32,32.27 22.85,31.74C23.16,31.43 23.49,31.22 23.84,31.11C24.19,31.01 24.54,31.01 24.9,31.12L22.91,29.13L23.57,28.47ZM23.51,32.24C23.16,32.59 23.01,33.01 23.05,33.5C23.1,34.02 23.38,34.54 23.89,35.05C24.39,35.55 24.91,35.83 25.45,35.91C25.96,35.97 26.4,35.82 26.78,35.44C27.16,35.06 27.32,34.61 27.25,34.1C27.19,33.6 26.91,33.1 26.41,32.6C25.85,32.04 25.31,31.75 24.79,31.73C24.3,31.71 23.88,31.88 23.51,32.24Z"
android:fillColor="#000000"/>
<path
android:pathData="M32.26,28.23C33.02,29.4 32.91,30.47 31.95,31.44C31.3,32.09 30.58,32.35 29.79,32.23C29.12,32.13 28.48,31.78 27.88,31.17C27.23,30.53 26.87,29.82 26.81,29.06C26.74,28.28 26.99,27.62 27.53,27.07C27.99,26.62 28.52,26.37 29.13,26.33C29.57,26.3 30,26.39 30.41,26.59C30.82,26.79 31.26,27.13 31.74,27.61L28.71,30.65C29.7,31.57 30.6,31.63 31.41,30.81C31.69,30.53 31.85,30.24 31.88,29.94C31.91,29.63 31.82,29.28 31.61,28.88L32.26,28.23ZM30.49,27.73C30.18,27.47 29.88,27.31 29.58,27.24C29.02,27.1 28.52,27.25 28.1,27.67C27.77,28 27.6,28.37 27.61,28.78C27.62,29.19 27.8,29.62 28.15,30.07L30.49,27.73Z"
android:fillColor="#000000"/>
<path
android:pathData="M33.33,21.52L36,27.14L35.29,27.85L29.65,25.2L30.38,24.47L34.86,26.64L32.64,22.21L33.33,21.52Z"
android:fillColor="#000000"/>
</vector>
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
</adaptive-icon>
Loading

0 comments on commit 141463f

Please sign in to comment.