首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Fastlane中从通用平台导入和调用平台专用车道

在Fastlane中从通用平台导入和调用平台专用车道
EN

Stack Overflow用户
提问于 2016-06-29 04:13:08
回答 2查看 1.8K关注 0票数 7

我有一个react-native应用程序,两者都有iosandroid公共目录中的目录。我希望能够独立发布(执行一个车道) iOS或Android,所以我设置了fastlane init在每个平台目录中(创建了两个fastlane/Fastfile在每个平台目录中)。安卓Fastfile大致包含:

代码语言:javascript
复制
platform :android do
  lane: release_android do
    ...
  end

和iOS:

代码语言:javascript
复制
platform :ios do
  lane: release_ios do
    ...
  end

现在,我还手动创建了一个fastlane/Fastfile公共包含目录中的文件,如下所示:

代码语言:javascript
复制
import '../ios/fastlane/Fastfile'
import '../android/fastlane/Fastfile'

lane :release_all do
  release_android
  release_ios
end

但是,当我运行fastlane release_all在主目录中,它与Could not find action or lane 'release_android'..。

你知道我哪里做错了吗?从普通通道调用特定于平台的通道是不可能的吗?

环境

快车道1.96.0

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-18 05:22:59

这不是理想的解决方案,因为它最终会将您的通道执行包装在另一个通道中,但我们在您的等效release_all然而,我想知道它是否允许并行运行这些:

代码语言:javascript
复制
sh "fastlane ios beta"
sh "fastlane android beta"
票数 3
EN

Stack Overflow用户

发布于 2021-02-27 11:46:31

如下所示:

代码语言:javascript
复制
package.json

packages/fastlane/
  Fastfile
  config.yml

apps/someapp/
  package.json
  ios/
  android/
  app/
    App.tsx
    App.test.tsx
  fastlane/
    Fastfile
    config.yml

package.json

代码语言:javascript
复制
{
  "name": "yourmonorepo",
  "version": "0.0.1",
  "workspaces": [
    "apps/*",
    "packages/*"
  ],
  "scripts": {
    "app:someapp": "yarn workspace @you/someapp",
    ...
  }
}

packages/fastlane/config.yml

代码语言:javascript
复制
codesigning:
  git_url: git+ssh://git@your.vcs/reponame.git
  branch: master

packages/fastlane/Fastfile

代码语言:javascript
复制
fastlane_require 'config'

# this ends up always being `packages/fastlane`
HERE_DIR = File.expand_path(__dir__)
# different per app, but in the case of `someapp` it'll be `apps/someapp`
APP_ROOT = File.expand_path(File.dirname(Dir.pwd))
# the root of the repo, where your root package.json is
REPO_ROOT = File.expand_path('../..', __dir__)
STAGE_DEV = "development"
STAGE_PROD = "production"

Config.setup do |config|
    config.use_env = true
    config.env_prefix = 'YOU_FASTLANE'
    config.env_separator = '__'
    config.env_converter = :downcase
    config.env_parse_values = true
end

Settings = Config.load_files(
    "#{__dir__}/config.yml",
    "#{Dir.pwd}/config.yml"
)

APPLICATION_ID = Settings.application.id
CRYPTEX_GITURL = Settings.codesigning.git_url
CRYPTEX_BRANCH = Settings.codesigning.branch

lane :setup do
  Fastlane::LaneManager.cruise_lane(
    'ios',
    'keyfile_get',
    {
      'stage' => STAGE_DEV
    }
  )
  Fastlane::LaneManager.cruise_lane(
    'ios',
    'keystore_get',
    {
      'stage' => STAGE_DEV
    }
  )
  Fastlane::LaneManager.cruise_lane(
    'android',
    'keyfile_get',
    {
      'stage' => STAGE_DEV
    }
  )
  Fastlane::LaneManager.cruise_lane(
    'android',
    'keystore_get',
    {
      'stage' => STAGE_DEV
    }
  )
end

platform :android do
  lane :keystore_get do |options|
    stage = options[:stage] || STAGE_DEV
    UI.message("Fetched android #{stage} keystore from codesigning repo #{CRYPTEX_REPO}")
  end

  lane :keyfile_get do |options|
    stage = options[:stage] || STAGE_DEV
    UI.message("Fetched android #{stage} keyfile from codesigning repo #{CRYPTEX_REPO}")
  end

  lane :release_prod do
    # do magic here
  end
end

platform :ios do
  lane :keystore_get do |options|
    stage = options[:stage] || STAGE_DEV
    UI.message("Fetched ios #{stage} keystore from codesigning repo #{CRYPTEX_REPO}")
  end

  lane :keyfile_get do |options|
    stage = options[:stage] || STAGE_DEV
    UI.message("Fetched ios #{stage} keyfile from codesigning repo #{CRYPTEX_REPO}")
  end

  lane :release_prod do
    # do magic here
  end
end

apps/someapp/package.json

代码语言:javascript
复制
{
  "name": "@you/someapp",
  "version": "0.0.1",
  "scripts": {
    "fastlane": "fastlane"
  }
}

apps/someapp/fastlane/config.yml

代码语言:javascript
复制
application:
  id: com.you.someapp

apps/someapp/fastlane/Fastfile

代码语言:javascript
复制
$VERBOSE = nil

import '../../../packages/fastlane/Fastfile'

现在您可以运行:

代码语言:javascript
复制
yarn app:someapp fastlane setup

或者

代码语言:javascript
复制
yarn app:someapp fastlane ios keystore_get stage:'development'
yarn app:someapp fastlane android keystore_get stage:'development'

您甚至可以在CI中执行以下操作:

代码语言:javascript
复制
YOU_FASTLANE__CODESIGNING__GIT_URL=https://github.com/your/repo.git \
  yarn app:someapp fastlane ios release_prod
YOU_FASTLANE__CODESIGNING__GIT_URL=https://github.com/your/repo.git \
  yarn app:someapp fastlane android release_prod

这里有一些额外的内容:

纱线工作区,便于单次使用

the ruby config gem为了促进比dotenv更好的事情

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38085448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档