The project is in a healthy, maintained state
Upload IPA/APK/dSYM/Proguard files to Zealot which it provides a self-host Over The Air Server for deployment of Android and iOS apps.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
 Dependencies

Development

Runtime

 Project Readme

fastlane-plugin-zealot

fastlane Plugin Badge

上传移动应用(iPhone、Android)到 Zealot 自建 App 分发系统。

Zealot 是一个开源自部署移动应用分发平台,提供 iOS、Android SDK、fastlane 等丰富组件库,打包分发流程、上传应用竟然如此简单、解决开发人员频繁打包的烦恼 🖖

快速上手

这是一个 fastlane 插件。如果要使用 fastlane-plugin-zealot 可通过下面方法添加到 fastlane 体系中:

$ fastlane add_plugin zealot

功能列表

插件包含多个 actions 提供大家使用:

zealot

上传 iOS (app/ipa)、Android (apk/abb) App 至 Zealot 系统,插件会通过参数和 CI 系统自动获取很多辅助信息。包括但不仅限于:

  • 使用 gym 或 gradle 打包生成的 app 文件路径
  • 解析应用获取的应用名称、打包类型
  • Git 提交日志
  • Git 分支名
  • Git 最后一次提交的 Commit Hash
  • CI 系统的名称
  • CI 系统本次构建的 URL

参数和返回值

+-----------------+-----------------------------------+------------------------+----------+
|                                     zealot Options                                      |
+-----------------+-----------------------------------+------------------------+----------+
| Key             | Description                       | Env Var                | Default  |
+-----------------+-----------------------------------+------------------------+----------+
| endpoint        | The endpoint of zealot            | ZEALOT_ENDPOINT        |          |
| token           | The token of user                 | ZEALOT_TOKEN           |          |
| channel_key     | The key of app's channel          | ZEALOT_CHANNEL_KEY     |          |
| file            | The path of app file. Optional    | ZEALOT_FILE            |          |
|                 | if you use the `gym`, `ipa`,      |                        |          |
|                 | `xcodebuild` or `gradle` action.  |                        |          |
| name            | The name of app to display on     | ZEALOT_NAME            |          |
|                 | zealot                            |                        |          |
| changelog       | The changelog of app              | ZEALOT_CHANGELOG       |          |
| slug            | The slug of app                   | ZEALOT_SLUG            |          |
| release_type    | The release type of app           | ZEALOT_RELEASE_TYPE    |          |
| branch          | The name of git branch            | ZEALOT_BRANCH          |          |
| git_commit      | The hash of git commit            | ZEALOT_GIT_COMMIT      |          |
| custom_fields   | The key-value hash of custom      | ZEALOT_CUSTOM_FIELDS   |          |
|                 | fields                            |                        |          |
| password        | The password of app to download   | ZEALOT_PASSWORD        |          |
| source          | The name of upload source         | ZEALOT_SOURCE          | fastlane |
| ci_url          | The name of upload source         | ZEALOT_CI_CURL         |          |
| timeout         | Request timeout in seconds        | ZEALOT_TIMEOUT         |          |
| hide_user_token | replase user token to *** to      | ZEALOT_HIDE_USER_TOKEN | true     |
|                 | keep secret                       |                        |          |
| verify_ssl      | Should verify SSL of zealot       | ZEALOT_VERIFY_SSL      | true     |
|                 | service                           |                        |          |
| fail_on_error   | Should an error uploading app     | ZEALOT_FAIL_ON_ERROR   | false    |
|                 | cause a failure                   |                        |          |
+-----------------+-----------------------------------+------------------------+----------+
* = default value is dependent on the user's system

+-----------------------+---------------------------------------------+
|                       zealot Output Variables                       |
+-----------------------+---------------------------------------------+
| Key                   | Description                                 |
+-----------------------+---------------------------------------------+
| ZEALOT_APP_ID         | The id of app                               |
| ZEALOT_RELEASE_ID     | The id of app's release                     |
| ZEALOT_RELEASE_URL    | The release URL of the newly uploaded build |
| ZEALOT_INSTALL_URL    | The install URL of the newly uploaded build |
| ZEALOT_QRCODE_URL     | The QRCode URL of the newly uploaded build  |
| ZEAALOT_ERROR_MESSAGE | The error message during upload process     |
+-----------------------+---------------------------------------------+

样例

# 自动根据上面结果来获取信息上传
lane :automatic_upload do
  # iOS
  gym

  # Android
  gradle

  # 根据 CI 系统自动获取提交日志
  ci_changelog

  zealot(
    endpoint: 'http://localhost:3000',
    token: '...',
    channel_key: '...'
  )

  # 或者通过环境变量配置参数
  ENV['ZEALOT_ENDPOINT'] = 'http://localhost:3000'
  ENV['ZEALOT_TOKEN'] = '...'
  ENV['ZEALOT_CHANNEL_KEY'] = '...'

  # 这里就无需再配置参数
  zealot
end

# 上传指定文件
lane :upload_file do
  zealot(
    endpoint: 'http://localhost:3000',
    token: '...',
    channel_key: '...',
    file: '.ipa_or_apk',
    custom_fields: {
      api_env: '测试环境'
    }
  )
end

zealot_debug_file

上传 iOS 的 dSYM 或 Android 的 Proguard 调试文件到 Zealot

参数和返回值

+--------------------+-----------------------------------+---------------------------+---------+
|                                  zealot_debug_file Options                                   |
+--------------------+-----------------------------------+---------------------------+---------+
| Key                | Description                       | Env Var                   | Default |
+--------------------+-----------------------------------+---------------------------+---------+
| endpoint           | The endpoint of zealot            | ZEALOT_ENDPOINT           |         |
| token              | The token of user                 | ZEALOT_TOKEN              |         |
| channel_key        | Any channel key of app            | ZEALOT_CHANNEL_KEY        |         |
| zip_file           | Using given the path of zip file  | DF_DSYM_ZIP_FILE          |         |
|                    | to direct upload                  |                           |         |
| platform           | The name of platfrom, avaiable    | ZEALOT_PLATFORM           |         |
|                    | value are                         |                           |         |
|                    | ios,mac,macos,osx,android         |                           |         |
| path               | The path of debug file            | ZEALOT_PATH               |         |
|                    | (iOS/macOS is archive path for    |                           |         |
|                    | Xcode, Android is path for app    |                           |         |
|                    | project)                          |                           |         |
| xcode_scheme       | The scheme name of app            | ZEALOT_XCODE_SCHEME       |         |
| android_build_type | The build type of app             | ZEALOT_ANDROID_BUILD_TYPE | release |
| android_flavor     | The product flavor of app         | ZEALOT_ANDROID_FLAVOR     |         |
| extra_files        | A set file names                  | ZEALOT_EXTRA_FILES        | []      |
| output_path        | The output path of compressed     | DF_DSYM_OUTPUT_PATH       | .       |
|                    | dSYM file                         |                           |         |
| release_version    | The release version of app        | ZEALOT_RELEASE_VERSION    |         |
|                    | (Android needs)                   |                           |         |
| build_version      | The build version of app          | ZEALOT_BUILD_VERSION      |         |
|                    | (Android needs)                   |                           |         |
| overwrite          | Overwrite output compressed file  | DF_DSYM_OVERWRITE         | false   |
|                    | if it existed                     |                           |         |
| timeout            | Request timeout in seconds        | ZEALOT_TIMEOUT            |         |
| verify_ssl         | Should verify SSL of zealot       | ZEALOT_VERIFY_SSL         | true    |
|                    | service                           |                           |         |
| fail_on_error      | Should an error uploading app     | ZEALOT_FAIL_ON_ERROR      | false   |
|                    | cause a failure? (true/false)     |                           |         |
+--------------------+-----------------------------------+---------------------------+---------+
* = default value is dependent on the user's system

+-----------------------+-----------------------------------------+
|               zealot_debug_file Output Variables                |
+-----------------------+-----------------------------------------+
| Key                   | Description                             |
+-----------------------+-----------------------------------------+
| ZEAALOT_ERROR_MESSAGE | The error message during upload process |
+-----------------------+-----------------------------------------+

样例

# 自动根据上面结果来获取信息上传
lane :automatic_upload do
  # iOS
  gym

  # Android
  gradle

  # 根据 CI 系统自动获取提交日志
  ci_changelog

  ENV['ZEALOT_ENDPOINT'] = 'http://localhost:3000'
  ENV['ZEALOT_TOKEN'] = '...'
  ENV['ZEALOT_CHANNEL_KEY'] = '...'

  # 自动上传 App 和调试文件
  zealot
  zealot_debug_file
end

zealot_sync_device

同步指定 Apple 开发者账号的设备列表信息到 Zealot,主要是为了让使用者更清晰看到每个设备 udid 记录的名称,提供两种授权方式:

参数和返回值

+---------------+-----------------------------------------------------------------------------+------------------------+---------+
|                                                  zealot_sync_devices Options                                                   |
+---------------+-----------------------------------------------------------------------------+------------------------+---------+
| Key           | Description                                                                 | Env Var(s)             | Default |
+---------------+-----------------------------------------------------------------------------+------------------------+---------+
| endpoint      | The endpoint of zealot                                                      | ZEALOT_ENDPOINT        |         |
| token         | The token of user                                                           | ZEALOT_TOKEN           |         |
| username      | The apple id (username) of Apple Developer Portal                           | ZEALOT_USERNAME        | *       |
| api_key_path  | Path to your App Store Connect API Key JSON file                            | ZEALOT_API_PATH        |         |
|               | (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key  |                        |         |
|               | -json-file)                                                                 |                        |         |
| api_key       | Your App Store Connect API Key information                                  | ZEALOT_API_KEY         | *       |
|               | (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key  |                        |         |
|               | -hash-option)                                                               |                        |         |
| team_id       | The ID of your Developer Portal team if you're in multiple teams            | ZEALOT_APPLE_TEAM_ID   | *       |
| team_name     | The name of your Developer Portal team if you're in multiple teams          | ZEALOT_APPLE_TEAM_NAME | *       |
| platform      | The platform to use (optional)                                              | ZEALOT_APPLE_PLATFORM  | ios     |
| verify_ssl    | Should verify SSL of zealot service                                         | ZEALOT_VERIFY_SSL      | true    |
| timeout       | Request timeout in seconds                                                  | ZEALOT_TIMEOUT         |         |
| fail_on_error | Should an error http request cause a failure? (true/false)                  | ZEALOT_FAIL_ON_ERROR   | false   |
+---------------+-----------------------------------------------------------------------------+------------------------+---------+

样例

lane :sync do
  # 使用 Apple API Key 方式授权,无需密码和二次验证
  zealot_sync_devices(
    endpoint: "...",
    token: "...",
    api_key_path: "/path/to/your/api_key_json_file",
    team_id: "..."
  )

  # 使用传统的密码授权
  zealot_sync_devices(
    endpoint: "...",
    token: "...",
    username: "...",
    team_id: "..."
  )
end

zealot_version_check

检查应用版本是否已经上传,避免重复打包、上传已经上传的应用,目前支持两种方式检查:

  • bundle_id + git commit
  • bundle_id+ release_version + build_version

参数和各平台实际值对应关系

参数 iOS Android
bundle_id bundle_id package_name
release_version CFBundleShortVersionString versionName
build_version CFBundleVersion versionCode

参数和返回值

+-----------------+---------------------------------+------------------------+---------+
|                             zealot_version_check Options                             |
+-----------------+---------------------------------+------------------------+---------+
| Key             | Description                     | Env Var                | Default |
+-----------------+---------------------------------+------------------------+---------+
| endpoint        | The endpoint of zealot          | ZEALOT_ENDPOINT        |         |
| token           | The token of user               | ZEALOT_TOKEN           |         |
| channel_key     | The key of app's channel        | ZEALOT_CHANNEL_KEY     |         |
| bundle_id       | The bundle id(package name) of  | ZEALOT_BUNDLE_ID       |         |
|                 | app                             |                        |         |
| release_version | The release version of app      | ZEALOT_RELEASE_VERSION |         |
| build_version   | The build version of app        | ZEALOT_BUILD_VERSION   |         |
| git_commit      | The latest git commit of app    | ZEALOT_GIT_COMMIT      |         |
| verify_ssl      | Should verify SSL of zealot     | ZEALOT_VERIFY_SSL      | true    |
|                 | service                         |                        |         |
| hide_user_token | replase user token to *** to    | ZEALOT_HIDE_USER_TOKEN | true    |
|                 | keep secret                     |                        |         |
| fail_on_error   | Should an error http request    | ZEALOT_FAIL_ON_ERROR   | false   |
|                 | cause a failure? (true/false)   |                        |         |
+-----------------+---------------------------------+------------------------+---------+
* = default value is dependent on the user's system

+------------------------+---------------------------------------------+
|                zealot_version_check Output Variables                 |
+------------------------+---------------------------------------------+
| Key                    | Description                                 |
+------------------------+---------------------------------------------+
| ZEALOT_VERSION_EXISTED | The result of app verison existed (Boolean) |
| ZEAALOT_ERROR_MESSAGE  | The error message during upload process     |
+------------------------+---------------------------------------------+
Access the output values using `lane_context[SharedValues::VARIABLE_NAME]`

+-----------------------------------+
| zealot_version_check Return Value |
+-----------------------------------+
| Fastlane::Boolean                 |

更多例子

检查范例 Fastfile 文件 来看看如何使用插件吧

问题和反馈

使用本插件过程中遇到的任何问题和反馈请提交问题。

疑惑解答

如果你对 fastlane 不了解建议现看看本教程,再看看使用插件的疑惑解答