Создание приложений с помощью Fastlane и Phonegap

Какой самый простой способ интеграции Fastlane со сборками приложений phonegap? В течение последних двух лет мы использовали только телефонный разрыв для создания наших приложений вручную, что может быть утомительным процессом. Теперь, когда мы растем и должны начать перевыпускать приложения, мы ищем быстрое / простое решение, которое может упростить весь этот процесс. Я искал в сети и Fastlane репозиторий, и я не вижу много об интеграции с PhoneGap. Любая информация или ресурсы будут высоко ценится.

1 ответ

Мы использовали fastlane с момента его создания (мигрировал из shezhen и т. Д.) С Cordova (не совсем так же, как Phonegap, но достаточно близко), и обнаружили, что он чрезвычайно экономит время. Основное отличие, которое я считаю, заключается в использовании службы сборки phonegap, которую вы можете теоретически вызвать, хотя fastlane, используя команду shell, хотя я рекомендую собирать локально.

Я также рекомендую установить Fastlane вместе с пакетом brew. (при условии, что вы находитесь на Mac)

brew cask install fastlane

Запустите в корне вашего проекта:

fastlane init

Это создаст основной каталог fastlane, где вы будете управлять как Android, так и iOS.

Наша структура каталогов выглядит следующим образом:

── fastlane │   ├── Appfile │   ├── Deliverfile │   ├── Fastfile │   ├── Gymfile │   ├── Matchfile │   ├── Supplyfile │   └── metadata

и наш fastfile выглядит примерно так:

fastlane_version "2.1.1"

default_platform :ios

app_name = "REDACTED"
app_identifier = CredentialsManager::AppfileConfig.try_fetch_value(:app_identifier)

platform :ios do

  lane :development_profiles do
    match(type: 'development', app_identifier: "#{app_identifier}")
    match(type: 'development', app_identifier: "#{app_identifier}.MessagesExtension")
  end

  lane :appstore_profiles do
    match(type: 'appstore', app_identifier: "#{app_identifier}")
    match(type: 'appstore', app_identifier: "#{app_identifier}.MessagesExtension")
  end

  lane :profiles do
    development_profiles
    appstore_profiles
  end

  lane :build_development do
    development_profiles
    gym(
      configuration: "Debug",
      output_name: "#{app_name}-development.ipa"
    )
  end

  lane :build_release do
    appstore_profiles
    gym(
      configuration: "Release",
      output_name: "#{app_name}-release.ipa"
    )
  end

  lane :hockeyapp do |options|
    hockey(
      ipa: "REDACTED",
      dsym: "REDACTED",
      api_token: "REDACTED",
      notes: "Build " + (ENV["BUILD_NUMBER"] ? ENV["BUILD_NUMBER"] + " " : "") + "From " + git_branch + " branch on " + Time.now.strftime('%F') + " at " + Time.now.strftime('%T'),
      notify: "0"
    )
  end

  lane :ci do
    build_development
    hockeyapp
  end

  lane :beta do
    build_release
    pilot
  end

  lane :release do
    deliver(
      ipa: "REDACTED",
      force: true,
      skip_metadata: true,
      skip_screenshots: true
    )
  end

  lane :screenshots do
    deliver(
      skip_binary_upload: true
    )
  end

  after_all do |lane|
  end

  error do |lane, exception|
  end
end

platform :android do

  lane :build_development do
    Dir.chdir ".." do
      sh("platforms/android/cordova/clean")
    end
    gradle(
      task: "cdvBuildDebug",
      project_dir: "platforms/android/",
      properties: {
        'android.useDeprecatedNdk' => true
      }
    )
    Dir.chdir ".." do
      sh("mkdir -p REDACTED/")
      sh("cp -f platforms/android/build/outputs/apk/android-armv7-debug.apk REDACTED/")
      sh("cp -f platforms/android/build/outputs/apk/android-x86-debug.apk REDACTED/")
    end
  end

  lane :build_release do
    Dir.chdir ".." do
      sh("platforms/android/cordova/clean")
    end
    gradle(
      task: "cdvBuildRelease",
      project_dir: "platforms/android/",
      properties: {
        'android.useDeprecatedNdk' => true
      }
    )
    Dir.chdir ".." do
      sh("mkdir -p REDACTED/")
      sh("cp -f platforms/android/build/outputs/apk/android-armv7-release.apk REDACTED/")
      sh("cp -f platforms/android/build/outputs/apk/android-x86-release.apk REDACTED/")
    end
  end

  lane :hockeyapp do |options|
    hockey(
      apk: "REDACTED",
      notes: "Build " + (ENV["BUILD_NUMBER"] ? ENV["BUILD_NUMBER"] + " " : "") + "From " + git_branch + " branch on " + Time.now.strftime('%F') + " at " + Time.now.strftime('%T'),
      notify: "0"
    )
  end

  lane :release do |options|
    supply(
      track: options[:track],
      apk_paths: ["REDACTED", "REDACTED"],
      skip_upload_metadata: true,
      skip_upload_images: true,
      skip_upload_screenshots: true
    )
  end

  lane :ci do
    build_development
    hockeyapp
  end

  after_all do |lane|
  end

  error do |lane, exception|
  end
end

Суть в том, что вы относитесь к своему проекту как к обычному нативному проекту и строите его таким образом. Работает довольно хорошо.

Другие вопросы по тегам