Создание приложений с помощью 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
Суть в том, что вы относитесь к своему проекту как к обычному нативному проекту и строите его таким образом. Работает довольно хорошо.