跳转到内容
Skip
3.2k

部署

Skip 应用项目会通过将 gradle 进程作为 Xcode 构建过程中 Run Scripts 阶段的一部分来启动,从而构建并运行应用的 Android 版本。这种机制使开发者能够通过在 iOS 模拟器和 Android 模拟器中同时运行 iOS 和 Android 版本来快速迭代应用。同样,Skip 框架测试会通过在转译后的模块上运行 gradle test 来执行转译后的 Kotlin 测试用例。

在项目目录中从终端运行 skip export 命令将构建你的 Skip 框架或应用,并将所有二进制产物导出到 -d 参数指定的文件夹中。这包括当前项目中每个目标的 .aar 库归档文件,以及所有依赖的归档文件。这些二进制产物可用于任何 Kotlin 或 Java 构建流程或 IDE。例如,Kotlin 开发团队可以手动将它们添加到 Android Studio 项目中,以便使用 Skip 创建的共享数据模型。

Framework Export Screenshot

对于应用项目,skip export 命令还会额外导出应用的 .apk.aab 归档文件,可以直接安装到 Android 设备上或上传到 Android 应用商店(如 Google Play 商店)。

Framework Export Screenshot

调试 APK(.build/skip-export/AppName-debug.apk)使用临时密钥签名。你可以将其安装到模拟器或设备上进行测试,但在安装更新版本之前需要先卸载它(与可以就地升级的生产应用不同)。

发布 APK(.build/skip-export/AppName.apk)默认未签名。你必须在通过 Play 商店分发或安装到设备之前对其进行签名。你可以将签名集成到 CI 工作流中,也可以使用项目 Android/app/build.gradle.kts 中的内置支持,它会在 Android/app/ 文件夹中查找 keystore.propertieskeystore.jks 文件。

有关创建和管理 Android 签名密钥的完整信息,请参阅签署你的应用文档。但为了快速上手,你可以通过从项目根目录运行以下命令并按照提示操作来创建 Android/app/keystore.jks 文件:

Terminal window
keytool -genkeypair -v -keystore Android/app/keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias app

记住你为密钥库和密钥本身设置的密码,然后创建一个新的 Android/app/keystore.properties 文件,内容如下:

keyAlias=app
storeFile=keystore.jks
storePassword=PASSWORD
keyPassword=PASSWORD

这些文件就位后,运行 skip export 将自动签名发布版 .apk 文件,使你能够直接分发和运行应用的发布版本,而无需通过 Google Play 商店。

apksigner 命令行工具(位于 ~/Library/Android/sdk/build-tools/*/apksigner)可用于验证 .apk 文件的签名。

有关该命令的详细信息,请参阅skip export CLI 参考


除了 skip export,Skip 应用项目在 Android/ 文件夹中还包含一个 gradle 项目,可以直接使用 gradle 命令运行。这对于手动执行 gradle 任务很有用,例如使用 launchDebug 任务在模拟器或已配置的设备上启动应用:

skipapp-showcase % gradle -p Android launchDebug

要发布 Android 应用,你可能需要自己执行构建,可以手动操作或作为持续集成(CI)流程的一部分。要从终端构建应用的发布版本,可以运行:

Terminal window
gradle -p Android/ assemble

这将运行 Android/gradle.settings.kts 文件中指定的 Gradle 项目(Showcase 源代码),它会调用 Swift Package Manager 来为 Android 构建项目。构建产物可以在 .build/Android/ 文件夹中找到,如下所示:

skiptools/skipapp-showcase % ls -lah .build/Android/app/outputs/apk/*/*.apk
73M .build/Android/app/outputs/apk/debug/app-debug.apk
11M .build/Android/app/outputs/apk/release/app-release.apk

如果你需要一个用于提交到应用商店的 Android Bundle,可以使用以下命令构建:

skiptools/skipapp-showcase % gradle -p Android/ bundle
skiptools/skipapp-showcase % ls -lah .build/Android/app/outputs/bundle/*/*
19M .build/Android/app/outputs/bundle/debug/app-debug.aab
5.6M .build/Android/app/outputs/bundle/release/app-release.aab

有关 Skip gradle 项目结构的更多信息,请参阅 Gradle 项目参考。有关使用 gradle CLI 构建 Android 应用的更多信息,可以在 https://developer.android.com/build/building-cmdline 找到。

Fastlane 是一个可以自动将应用发布到 Apple App Store 和 Google Play Store 的工具。它替代了通过各商店网站手动创建和上传应用发布版本所需的步骤。

fastlane 命令行工具可以通过终端使用 Homebrew 安装:

brew install fastlane

fastlane 的完整文档可以在 https://docs.fastlane.tools 找到。

当你使用以下命令初始化一个新的 Skip 应用时:

Terminal window
skip init --fastlane --appid=app.bundle.id package-name AppName

Darwin/Android/ 文件夹中将各自包含一个 fastlane 项目模板,其中包含可以编辑的元数据文件,用于填写应用标题、描述、内容分级和截图等信息。这些文件可以为你的应用支持的每种语言进行本地化。

各平台的元数据结构不同。对于 iOS 和其他 Apple 平台,Darwin/ 文件夹的结构如下:

  • 文件夹Darwin/fastlane
    • AppStore.xcconfig
    • Appfile
    • Deliverfile
    • Fastfile
    • README.md
    • apikey.json*
    • 文件夹metadata
      • 文件夹en-US
        • description.txt
        • keywords.txt
        • release_notes.txt
        • subtitle.txt
    • 文件夹screenshots
      • 文件夹en-US
        • 0_APP_IPHONE_55_0.png
        • 0_APP_IPHONE_65_0.png
        • 1_APP_IPHONE_65_1.png
        • 2_APP_IPHONE_65_2.png
        • 3_APP_IPHONE_65_3.png
        • 4_APP_IPHONE_65_4.png
        • 5_APP_IPHONE_65_5.png

Android/ 文件夹的结构如下:

  • 文件夹Android/fastlane
    • Appfile
    • Fastfile
    • README.md
    • apikey.json*
    • 文件夹metadata
      • 文件夹android
        • 文件夹en-US
          • full_description.txt
          • 文件夹images
            • featureGraphic.png
            • icon.png
            • 文件夹phoneScreenshots
              • 1_en-US.png
              • 2_en-US.png
              • 3_en-US.png
              • 4_en-US.png
          • short_description.txt
          • title.txt
          • video.txt

每个平台的 fastlane FastfileAppfileDeliverfile 可以配置为自动提交发布版本进行审核,或将其发布到商店的测试服务。详情请参阅 fastlane 文档

每个 fastlane/ 文件夹中的 apikey.json 文件(不是由 skip init 创建的)必须分别从 App Store Connect 服务和 Google Play Console 服务下载。这些文件包含上传发布版本到相应商店所需的认证信息。 对于 Apple App Store,请按照使用 fastlane API Key JSON 文件的说明操作。对于 Google Play 商店,请按照上传到 Play 商店设置的说明操作。

除了 API 密钥,你还必须遵循各平台的应用签名流程。对于 Darwin 平台,这意味着需要从 https://developer.apple.com 下载并安装已注册应用 ID 的证书和配置文件。对于 Android,Android/app/ 文件夹应包含 keystore.jkskeystore.properties 文件,默认的 Android/app/build.gradle.kts 会在这些文件存在时使用它们来签名发布产物。

当你准备好创建应用的新发布版本时,可以在 Android/Darwin/ 文件夹中分别运行 fastlane release 命令来构建应用(对于 Android,首先使用 Skip 进行转译),将其打包为 .apk.ipa,并上传到相应的商店。

发布 iOS 应用的示例会话如下:

zap skipapp-showcase/Darwin % fastlane release
[✔] 🚀
[10:59:50]: ------------------------------
[10:59:50]: --- Step: default_platform ---
[10:59:50]: ------------------------------
[10:59:50]: Driving the lane 'release' 🚀
[10:59:50]: -------------------------------------
[10:59:50]: --- Step: Switch to assemble lane ---
[10:59:50]: -------------------------------------
[10:59:50]: Cruising over to lane 'assemble' 🚖
[10:59:50]: -----------------------
[10:59:50]: --- Step: build_app ---
[10:59:50]: -----------------------
[10:59:50]: Resolving Swift Package Manager dependencies...
[10:59:50]: $ xcodebuild -resolvePackageDependencies -scheme Showcase -project ./Showcase.xcodeproj -derivedDataPath ../.build/Darwin/DerivedData -xcconfig fastlane/AppStore.xcconfig
[10:59:51]: ▸ Command line invocation:
[10:59:51]: ▸ /Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild -resolvePackageDependencies -scheme Showcase -project ./Showcase.xcodeproj -derivedDataPath ../.build/Darwin/DerivedData -xcconfig fastlane/AppStore.xcconfig
[10:59:51]: ▸ Build settings from configuration file 'fastlane/AppStore.xcconfig':
[10:59:51]: ▸ Resolve Package Graph
202 collapsed lines
[10:59:53]: ▸ dependency 'skip-ui' is not used by any targetdependency 'skip-av' is not used by any target
[10:59:53]: ▸ Resolved source packages:
[10:59:53]: ▸ skipapp-showcase: /srcroot/skipapp-showcase
[10:59:53]: ▸ skip-model: https://github.com/skiptools/skip-model.git @ 0.7.0
[10:59:53]: ▸ skip-av: https://github.com/skiptools/skip-av.git @ 0.0.2
[10:59:53]: ▸ skip-unit: https://github.com/skiptools/skip-unit.git @ 0.7.2
[10:59:53]: ▸ skip: https://github.com/skiptools/skip.git @ 0.8.46
[10:59:53]: ▸ skip-ui: https://github.com/skiptools/skip-ui.git @ 0.9.6
[10:59:53]: ▸ skip-foundation: https://github.com/skiptools/skip-foundation.git @ 0.6.11
[10:59:53]: ▸ skip-lib: https://github.com/skiptools/skip-lib.git @ 0.7.13
[10:59:53]: ▸ resolved source packages: skipapp-showcase, skip-model, skip-av, skip-unit, skip, skip-ui, skip-foundation, skip-lib
[10:59:53]: $ xcodebuild -showBuildSettings -scheme Showcase -project ./Showcase.xcodeproj -derivedDataPath ../.build/Darwin/DerivedData -xcconfig fastlane/AppStore.xcconfig 2>&1
+-----------------------------------------------------------------------------+
| Summary for gym 2.220.0 |
+--------------------------------------+--------------------------------------+
| sdk | iphoneos |
| xcconfig | fastlane/AppStore.xcconfig |
| derived_data_path | ../.build/Darwin/DerivedData |
| output_directory | ../.build/fastlane/Darwin |
| skip_archive | false |
| skip_codesigning | false |
| project | ./Showcase.xcodeproj |
| scheme | Showcase |
| clean | false |
| output_name | Showcase |
| silent | false |
| skip_package_ipa | false |
| skip_package_pkg | false |
| result_bundle | false |
| buildlog_path | ~/Library/Logs/gym |
| destination | generic/platform=iOS |
| xcodebuild_formatter | xcpretty |
| build_timing_summary | false |
| skip_profile_detection | false |
| xcodebuild_command | xcodebuild |
| skip_package_dependencies_resolutio | false |
| n | |
| disable_package_automatic_updates | false |
| use_system_scm | false |
| xcode_path | /Applications/Xcode.app |
+--------------------------------------+--------------------------------------+
[10:59:56]: $ set -o pipefail && xcodebuild -scheme Showcase -project ./Showcase.xcodeproj -derivedDataPath ../.build/Darwin/DerivedData -xcconfig fastlane/AppStore.xcconfig -sdk 'iphoneos' -destination 'generic/platform=iOS' -archivePath ~/Library/Developer/Xcode/Archives/App.xcarchive -skipPackagePluginValidation -skipMacroValidation archive | tee ~/Library/Logs/gym/Showcase-Showcase.log | xcpretty
[11:00:40]: ▸ Touching skipapp-showcase_Showcase.bundle (in target 'skipapp-showcase_Showcase' from project 'skipapp-showcase')
[11:00:40]: ▸ Linking Showcase.o
[11:00:40]: ▸ Processing empty-ShowcaseApp.plist
[11:00:40]: ▸ Linking ShowcaseApp
[11:00:40]: ▸ Generating 'ShowcaseApp.framework.dSYM'
[11:00:40]: ▸ Touching ShowcaseApp.framework (in target 'ShowcaseApp' from project 'skipapp-showcase')
[11:00:40]: ▸ Copying /srcroot/skipapp-showcase/.build/Darwin/DerivedData/Build/Intermediates.noindex/ArchiveIntermediates/Showcase/InstallationBuildProductsLocation/Applications/Showcase.app/protest_guerrilla.ttf
[11:00:40]: ▸ Linking Showcase
[11:00:41]: ▸ Running script 'Run skip gradle'
[11:00:41]: ▸ Processing Info.plist
[11:00:41]: ▸ Touching Showcase.app (in target 'Showcase' from project 'Showcase')
[11:00:41]: ▸ Archive Succeeded
[11:00:41]: Generated plist file with the following values:
[11:00:41]: ▸ -----------------------------------------
[11:00:41]: ▸
[11:00:41]: ▸ "method": "app-store"
[11:00:41]: ▸
[11:00:41]: ▸ -----------------------------------------
[11:00:41]: $ /usr/bin/xcrun /opt/homebrew/Cellar/fastlane/2.220.0/libexec/gems/fastlane-2.220.0/gym/lib/assets/wrap_xcodebuild/xcbuild-safe.sh -exportArchive -exportOptionsPlist '/var/folders/zl/wkdjv4s1271fbm6w0plzknkh0000gn/T/gym_config20240612-40159-xgzrb9.plist' -archivePath ~/Library/Developer/Xcode/Archives/2024-06-12/Showcase\ 2024-06-12\ 10.59.56.xcarchive -exportPath '/var/folders/zl/wkdjv4s1271fbm6w0plzknkh0000gn/T/gym_output20240612-40159-udedtq' -skipPackagePluginValidation -skipMacroValidation
[11:00:55]: Successfully exported and signed the ipa file:
[11:00:55]: /srcroot/skipapp-showcase/.build/fastlane/Darwin/Showcase.ipa
[11:00:55]: Cruising back to lane 'release' 🚘
[11:00:56]: ---------------------------------
[11:00:56]: --- Step: upload_to_app_store ---
[11:00:56]: ---------------------------------
[11:00:56]: Successfully loaded '/srcroot/skipapp-showcase/Darwin/fastlane/Deliverfile' 📄
+--------------------------------------------------------------------------+
| Detected Values from './fastlane/Deliverfile' |
+-----------------------------------+--------------------------------------+
| copyright | 2024 |
| force | true |
| automatic_release | true |
| skip_screenshots | false |
| precheck_include_in_app_purchases | false |
| submit_for_review | true |
+-----------------------------------+--------------------------------------+
[11:00:56]: Creating authorization token for App Store Connect API
+-----------------------------------------------------------------------------+
| deliver 2.220.0 Summary |
+--------------------------------------+--------------------------------------+
| api_key_path | fastlane/apikey.json |
| app_rating_config_path | fastlane/metadata/rating.json |
| screenshots_path | ./fastlane/screenshots |
| metadata_path | ./fastlane/metadata |
| app_version | 1.0.3 |
| username | appfair@appfair.org |
| app_identifier | org.appfair.app.Showcase |
| platform | ios |
| edit_live | false |
| use_live_version | false |
| skip_binary_upload | false |
| skip_screenshots | false |
| skip_metadata | false |
| skip_app_version_update | false |
| force | true |
| overwrite_screenshots | false |
| screenshot_processing_timeout | 3600 |
| sync_screenshots | false |
| submit_for_review | true |
| verify_only | false |
| reject_if_possible | false |
| version_check_wait_retry_limit | 7 |
| automatic_release | true |
| phased_release | false |
| reset_ratings | false |
| run_precheck_before_submit | true |
| precheck_default_rule_level | warn |
| copyright | 2024 |
| ignore_language_directory_validation | false |
| precheck_include_in_app_purchases | false |
+--------------------------------------+--------------------------------------+
[11:00:56]: Making sure the latest version on App Store Connect matches '1.0.3'...
[11:00:59]: Successfully set the version to '1.0.3'
[11:00:59]: Loading './fastlane/metadata/en-US/description.txt'...
[11:00:59]: Loading './fastlane/metadata/en-US/keywords.txt'...
[11:00:59]: Loading './fastlane/metadata/en-US/release_notes.txt'...
[11:00:59]: Loading './fastlane/metadata/en-US/support_url.txt'...
[11:00:59]: Loading './fastlane/metadata/en-US/subtitle.txt'...
[11:00:59]: Loading './fastlane/metadata/en-US/privacy_url.txt'...
[11:01:02]: No changes to localized App Info detected. Skipping upload.
[11:01:02]: Will begin uploading metadata for '1.0.3' on App Store Connect
[11:01:02]: Uploading metadata to App Store Connect for version
[11:01:06]: Uploading metadata to App Store Connect for localized version 'en-US'
[11:01:08]: Setting the app's age rating...
[11:01:09]: Will begin uploading snapshots for '1.0.3' on App Store Connect
[11:01:09]: Starting with the upload of screenshots...
[✔] Waiting for all the screenshots to finish being processed...
[11:01:09]: Successfully uploaded all screenshots
[✔] Sorting screenshots uploaded...
[11:01:10]: Successfully uploaded screenshots to App Store Connect
[11:01:10]: Uploading binary to App Store Connect
[11:01:10]: Going to upload updated app to App Store Connect
[11:01:10]: This might take a few minutes. Please don't interrupt the script.
[11:01:47]: --------------------------------------------------------------------
[11:01:47]: Successfully uploaded package to App Store Connect. It might take a few minutes until it's visible online.
[11:01:47]: --------------------------------------------------------------------
[11:01:47]: Finished the upload to App Store Connect
[11:01:47]: Running precheck before submitting to review, if you'd like to disable this check you can set run_precheck_before_submit to false
[11:01:47]: Making sure we pass precheck 👮‍♀️ 👮 before we submit 🛫
+-----------------------------------------------------+
| Summary for precheck 2.220.0 |
+--------------------------+--------------------------+
| default_rule_level | warn |
| include_in_app_purchases | false |
| app_identifier | org.appfair.app.Showcase |
| api_key_path | fastlane/apikey.json |
| username | appfair@appfair.org |
| platform | ios |
| use_live | false |
+--------------------------+--------------------------+
[11:01:47]: Creating authorization token for App Store Connect API
[11:01:47]: Checking app for precheck rule violations
[11:01:51]: ✅ Passed: No negative  sentiment
[11:01:51]: ✅ Passed: No placeholder text
[11:01:51]: ✅ Passed: No mentioning  competitors
[11:01:51]: ✅ Passed: No future functionality promises
[11:01:51]: ✅ Passed: No words indicating test content
[11:01:51]: ✅ Passed: No curse words
[11:01:51]: ✅ Passed: No words indicating your IAP is free
[11:01:51]: ✅ Passed: Incorrect, or missing copyright date
[11:01:51]: ✅ Passed: No broken urls
[11:01:51]: precheck 👮‍♀️ 👮 finished without detecting any potential problems 🛫
[11:01:51]: Selecting the latest build...
[11:01:51]: Waiting for processing on... app_id: 6474885022, app_version: 1.0.3, build_version: 103, platform: IOS
[11:01:52]: Read more information on why this build isn't showing up yet - https://github.com/fastlane/fastlane/issues/14997
[11:01:52]: Waiting for the build to show up in the build list - this may take a few minutes (check your email for processing issues if this continues)
[11:02:07]: Waiting for the build to show up in the build list - this may take a few minutes (check your email for processing issues if this continues)
[11:02:22]: Waiting for the build to show up in the build list - this may take a few minutes (check your email for processing issues if this continues)
[11:02:37]: Waiting for the build to show up in the build list - this may take a few minutes (check your email for processing issues if this continues)
[11:02:54]: Waiting for App Store Connect to finish processing the new build (1.0.3 - 103) for IOS
[11:03:10]: Waiting for App Store Connect to finish processing the new build (1.0.3 - 103) for IOS
[11:03:26]: Waiting for App Store Connect to finish processing the new build (1.0.3 - 103) for IOS
[11:03:42]: Successfully finished processing the build 1.0.3 - 103 for IOS
[11:03:42]: Selecting build 1.0.3 (103)...
[11:03:44]: Successfully selected build
[11:03:45]: Successfully updated IDFA declarations on App Store Connect
[11:03:46]: Successfully updated contents rights declaration on App Store Connect
[11:04:01]: Successfully submitted the app for review!
+------------------------------------------+
| fastlane summary |
+------+---------------------+-------------+
| Step | Action | Time (in s) |
+------+---------------------+-------------+
| 1 | default_platform | 0 |
| 2 | Switch to assemble | 0 |
| | lane | |
| 3 | build_app | 65 |
| 4 | upload_to_app_store | 185 |
+------+---------------------+-------------+
[11:04:01]: fastlane.tools finished successfully 🎉

Android 的示例会话如下:

zap skipapp-showcase/Android % fastlane release
[✔] 🚀
[15:29:48]: ------------------------------
[15:29:48]: --- Step: default_platform ---
[15:29:48]: ------------------------------
[15:29:48]: ------------------------------
[15:29:48]: --- Step: default_platform ---
[15:29:48]: ------------------------------
[15:29:48]: Driving the lane 'release' 🚀
[15:29:48]: -------------------------------------
[15:29:48]: --- Step: Switch to assemble lane ---
[15:29:48]: -------------------------------------
[15:29:48]: Cruising over to lane 'assemble' 🚖
[15:29:48]: ---------------------------
[15:29:48]: --- Step: bundleRelease ---
[15:29:48]: ---------------------------
[15:29:48]: $ /opt/homebrew/bin/gradle bundleRelease -p .
[15:29:53]: ▸ [0/1] Planning build
[15:29:53]: ▸ [1/1] Compiling plugin Create SkipLink
107 collapsed lines
[15:29:53]: ▸ [2/2] Compiling plugin skipstone
[15:29:53]: ▸ Building for debugging...
[15:29:53]: ▸ [2/8] Write sources
[15:29:53]: ▸ [3/13] Write swift-version--58304C5D6DBC2206.txt
[15:29:53]: ▸ note: Skip 0.8.46: transpile plugin to: /srcroot/skipapp-showcase/.build/plugins/outputs/skip-unit/SkipUnit/skipstone/SkipUnit/src/main at 15:29:53
[15:30:13]: ▸ > Task :app:processReleaseManifest
[15:30:13]: ▸ > Task :app:mergeReleaseArtProfile UP-TO-DATE
[15:30:13]: ▸ > Task :app:processApplicationManifestReleaseForBundle
[15:30:13]: ▸ > Task :app:mergeReleaseAssets UP-TO-DATE
[15:30:13]: ▸ > Task :app:mergeReleaseNativeLibs NO-SOURCE
[15:30:13]: ▸ > Task :app:stripReleaseDebugSymbols NO-SOURCE
[15:30:13]: ▸ > Task :app:extractReleaseNativeSymbolTables NO-SOURCE
[15:30:13]: ▸ > Task :app:processReleaseManifestForPackage
[15:30:13]: ▸ > Task :app:processReleaseResources
[15:30:14]: ▸ > Task :app:bundleReleaseResources
[15:30:14]: ▸ > Task :skipstone:Showcase:compileReleaseKotlin
[15:30:14]: ▸ > Task :skipstone:Showcase:compileReleaseJavaWithJavac NO-SOURCE
[15:30:14]: ▸ > Task :skipstone:Showcase:mergeReleaseGeneratedProguardFiles UP-TO-DATE
[15:30:14]: ▸ > Task :skipstone:Showcase:exportReleaseConsumerProguardFiles UP-TO-DATE
[15:30:14]: ▸ > Task :skipstone:Showcase:processReleaseJavaRes UP-TO-DATE
[15:30:14]: ▸ > Task :skipstone:Showcase:bundleLibRuntimeToJarRelease
[15:30:14]: ▸ > Task :skipstone:Showcase:bundleLibCompileToJarRelease
[15:30:15]: ▸ > Task :app:compileReleaseKotlin
[15:30:15]: ▸ > Task :app:compileReleaseJavaWithJavac
[15:30:15]: ▸ > Task :app:mergeReleaseGeneratedProguardFiles UP-TO-DATE
[15:30:15]: ▸ > Task :app:processReleaseJavaRes UP-TO-DATE
[15:30:15]: ▸ > Task :app:mergeReleaseJavaResource UP-TO-DATE
[15:30:15]: ▸ > Task :app:expandReleaseArtProfileWildcards
[15:30:45]: ▸ > Task :app:minifyReleaseWithR8
[15:31:05]: ▸ > Task :app:buildReleasePreBundle
[15:31:06]: ▸ > Task :app:compileReleaseArtProfile
[15:31:06]: ▸ > Task :app:packageReleaseBundle
[15:31:08]: ▸ > Task :app:shrinkBundleReleaseResources
[15:31:10]: ▸ > Task :app:signReleaseBundle
[15:31:10]: ▸ > Task :app:produceReleaseBundleIdeListingFile
[15:31:10]: ▸ > Task :app:createReleaseBundleListingFileRedirect UP-TO-DATE
[15:31:10]: ▸ > Task :app:bundleRelease
[15:31:10]: ▸ BUILD SUCCESSFUL in 1m 21s
[15:31:10]: ▸ 169 actionable tasks: 30 executed, 139 up-to-date
[15:31:10]: Cruising back to lane 'release' 🚘
[15:31:10]: ----------------------------------
[15:31:10]: --- Step: upload_to_play_store ---
[15:31:10]: ----------------------------------
+---------------------------------------------------------------------------+
| Summary for supply 2.220.0 |
+------------------------------------+--------------------------------------+
| aab | ../.build/Android/app/outputs/bundl |
| | e/release/app-release.aab |
| package_name | org.appfair.app.Showcase |
| release_status | completed |
| track | production |
| metadata_path | ./fastlane/metadata/android |
| json_key | fastlane/apikey.json |
| skip_upload_apk | false |
| skip_upload_aab | false |
| skip_upload_metadata | false |
| skip_upload_changelogs | false |
| skip_upload_images | false |
| skip_upload_screenshots | false |
| sync_image_upload | false |
| track_promote_release_status | completed |
| validate_only | false |
| check_superseded_tracks | false |
| timeout | 300 |
| deactivate_on_promote | true |
| changes_not_sent_for_review | false |
| rescue_changes_not_sent_for_review | true |
| ack_bundle_installation_warning | false |
+------------------------------------+--------------------------------------+
[15:31:11]: Preparing aab at path '../.build/Android/app/outputs/bundle/release/app-release.aab' for upload...
[15:31:28]: Updating track 'production'...
[15:31:29]: Preparing uploads for language 'en-US'...
[15:31:30]: ⬆️ Uploading image file ./fastlane/metadata/android/en-US/images/featureGraphic.png...
[15:31:32]: ⬆️ Uploading image file ./fastlane/metadata/android/en-US/images/icon.png...
[15:31:34]: ⬆️ Uploading screenshot ./fastlane/metadata/android/en-US/images/phoneScreenshots/1_en-US.png...
[15:31:37]: ⬆️ Uploading screenshot ./fastlane/metadata/android/en-US/images/phoneScreenshots/2_en-US.png...
[15:31:40]: ⬆️ Uploading screenshot ./fastlane/metadata/android/en-US/images/phoneScreenshots/3_en-US.png...
[15:31:42]: ⬆️ Uploading screenshot ./fastlane/metadata/android/en-US/images/phoneScreenshots/4_en-US.png...
[15:31:45]: ⬆️ Uploading screenshot ./fastlane/metadata/android/en-US/images/sevenInchScreenshots/1_en-US.png...
[15:31:48]: ⬆️ Uploading screenshot ./fastlane/metadata/android/en-US/images/sevenInchScreenshots/2_en-US.png...
[15:31:50]: ⬆️ Uploading screenshot ./fastlane/metadata/android/en-US/images/sevenInchScreenshots/3_en-US.png...
[15:31:53]: ⬆️ Uploading screenshot ./fastlane/metadata/android/en-US/images/sevenInchScreenshots/4_en-US.png...
[15:31:56]: ⬆️ Uploading screenshot ./fastlane/metadata/android/en-US/images/tenInchScreenshots/1_en-US.png...
[15:31:58]: ⬆️ Uploading screenshot ./fastlane/metadata/android/en-US/images/tenInchScreenshots/2_en-US.png...
[15:32:01]: ⬆️ Uploading screenshot ./fastlane/metadata/android/en-US/images/tenInchScreenshots/3_en-US.png...
[15:32:04]: ⬆️ Uploading screenshot ./fastlane/metadata/android/en-US/images/tenInchScreenshots/4_en-US.png...
[15:32:07]: Uploaded all items for language 'en-US'... (37.582534 secs)
[15:32:07]: Uploading all changes to Google Play...
[15:32:10]: Successfully finished the upload to Google Play
+-------------------------------------------+
| fastlane summary |
+------+----------------------+-------------+
| Step | Action | Time (in s) |
+------+----------------------+-------------+
| 1 | default_platform | 0 |
| 2 | default_platform | 0 |
| 3 | Switch to assemble | 0 |
| | lane | |
| 4 | bundleRelease | 81 |
| 5 | upload_to_play_store | 59 |
+------+----------------------+-------------+
[15:32:10]: fastlane.tools finished successfully 🎉