Lane — Fastlane-də mobil tətbiqin qurulması, test edilməsi və ya çatdırılması üçün hərəkətlər (actions) ardıcıllığını birləşdirən adlandırılmış avtomatlaşdırma ssenarisidir. Hər lane Ruby dilində Fastfile-də təyin edilir və terminaldan və ya CI/CD sistemindən bir əmrlə işə salına bilər. Fastlane Docs, 2025-ə görə, Fastfile-lərin 85%-i CI/CD-nin müxtəlif mərhələləri üçün üçdən çox lane ehtiva edir. Lane parametrlər qəbul edə, digər lanes-ləri çağıra və icra xətalarını idarə edə bilər.
Əsas məqamlar
Lane — Fastlane-in əsas tikinti bloku olub, adlandırılmış avtomatlaşdırma ssenarisini təyin edir. Hər lane müəyyən bir məqsədə çatmaq üçün yerinə yetirilən hərəkətlər (actions) ardıcıllığını təsvir edir: tətbiqi qurmaq, testləri işə salmaq, build-i mağazaya yükləmək və ya mühiti konfiqurasiya etmək. Lane Fastfile-də bəyan edilir və layihənin kök kataloqundan fastlane [lane_adı] əmri ilə işə salınır.
Lane konsepsiyası Ruby DSL-dən götürülmüşdür və ssenarilərin oxunaqlılığını təmin edir. Tərtibatçı bütün CI/CD prosesini başa düşülən adlar və parametrlərlə actions çağırışları ardıcıllığı kimi görür. Lane sadə (bir əmr) və ya mürəkkəb (şaxələnmə, dövrlər, digər lanes-lərin çağırışı) ola bilər.
Hər lane icradan sonra nəticə qaytarır — icra statusu və actions-dan məlumatları ehtiva edən obyekt. Nəticə digər lanes-lərdə istifadə oluna və ya qərarlar qəbul etmək üçün CI/CD sisteminə ötürülə bilər. Lane-də hər hansı action xəta ilə başa çatarsa, lane-in icrası dayandırılır və error bloku çağırılır.
Lane bəyan edilməsi sintaksisi sadə Ruby DSL nümunəsinə əsaslanır: lane açar sözü, Ruby simvolu (symbol) şəklində ssenari adı, do ... end bloku ssenari gövdəsi ilə. Lane adı platforma daxilində unikal olmalı və hərflər, rəqəmlər və alt xətlərdən ibarət olmalıdır.
Lane-in işə salınması əmr sətri vasitəsilə həyata keçirilir: fastlane build (:build adlı lane üçün) və ya bundle exec fastlane build (Fastlane Bundler vasitəsilə quraşdırılıbsa). Platforma lanes-ləri üçün fastlane ios build və ya fastlane android build istifadə edin.
# Sadə lane-in bəyan edilməsi
lane :test do
scan(scheme: 'App', devices: ['iPhone 15'])
end
lane :build_and_deploy do
cocoapods
test
gym(scheme: 'App', export_method: 'app-store')
pilot(skip_waiting_for_build_processing: true)
end
# Başlatma: fastlane build_and_deploy
Lane parametrlər və ya mühit dəyişənlərinə əsaslanan şərti məntiq ehtiva edə bilər. Müəyyən şərtlərdə addımları atlamaq üçün if/unless istifadə edin. Bir lane-də çoxlu target və ya tətbiq sxemlərini qurmaq üçün əlverişli olan massivləri emal etmək üçün each dövrləri də mövcuddur.
Lane çağıran koda əlçatan olacaq dəyər qaytara bilər. Qaytarmaq üçün adi Ruby return və ya lane blokundakı son ifadə istifadə olunur. Qaytarılan dəyər sətir, rəqəm, hash və ya action nəticəsi ola bilər. Bu, bir lane-in nəticəsini qərarlar qəbul etmək üçün digər lane-də istifadə etməyə imkan verir.
Məsələn, :get_version lane-i Info.plist-dən tətbiqin cari versiyasını qaytara bilər, :deploy lane-i isə Slack-də mesaj yaratmaq üçün ondan istifadə edə bilər. Qaytarılan dəyərlər xüsusilə private lanes-lərdə faydalıdır, burada nəticə çağıran lane-də sonrakı emal üçün lazımdır.
Lane parametrləri ssenariləri çevik və təkrar istifadə olunan edir. Lane əmr sətrindən işə salınarkən ötürülən options hash vasitəsilə parametrlər qəbul edir: fastlane deploy scheme:AppStore version:2.1.0. Lane daxilində parametrlər options[:scheme] və options[:version] kimi əlçatandır.
Məcburi parametrlər üçün lane-in əvvəlində dəyərin mövcudluğunu yoxlayın və aydın mesajla UI.user_error! çağırın. İstəyə bağlı parametrlər üçün || operatoru vasitəsilə standart dəyərlər təyin edin. Fastlane həmçinin options metodu vasitəsilə tipi, standart dəyəri və təsviri göstərməklə tipli parametrləri dəstəkləyir.
# Parametrlərin idarəsi ilə Lane
lane :deploy do |options|
scheme = options[:scheme]
version = options[:version] || '1.0.0'
beta = options[:beta] || false
UI.user_error!("Scheme göstərilməyib") unless scheme
match(type: beta ? 'adhoc' : 'appstore')
gym(scheme: scheme, export_method: beta ? 'ad-hoc' : 'app-store')
if beta
pilot(distribute_external: true)
else
deliver(submit_for_review: true)
end
end
# Başlatma: fastlane deploy scheme:MyApp beta:true version:2.1.0
Lane daxilində mühit dəyişənləri ilə işləmək üçün ENV['VARIABLE_NAME'] istifadə edin. Fastlane avtomatik olaraq fastlane kataloqundan .env fayllarını yükləyir. Bu, həssas məlumatları — API açarları, şifrələr və tokenlər — Fastfile-də saxlamadan CI/CD mühitində ötürmək üçün standart üsuldur.
Lane-in etibarlı işləməsi üçün girişdə parametrlərin validasiyası zəruridir. Tələb olunan parametr yoxdursa və ya yanlış tipdədirsə, problemin təsviri ilə UI.user_error! istifadə edin. Fastlane hər bir parametr üçün tip (String, Boolean, Integer, Array), standart dəyər və təsvir təyin etməyə imkan verən options metodunu təqdim edir — validasiya lane işə salındıqda avtomatik yerinə yetirilir.
Əlavə olaraq, mətn parametrləri üçün verify bloku vasitəsilə yoxlamalardan istifadə edilə bilər: verify do |value| value.length > 0 end. Yanlış formatda Fastlane gözlənilən formatı və ötürülən dəyəri göstərən oxunaqlı mesaj çıxarır ki, bu da CI/CD mühitində debug prosesini asanlaşdırır.
Fastlane hər lane-dən əvvəl və sonra kodu icra etmək üçün həyat dövrü hook-ları təqdim edir. before_all bloku müəyyən platformada və ya qlobal olaraq hər lane-dən əvvəl icra olunur. after_all bloku lane uğurla başa çatdıqdan sonra icra olunur. error bloku lane daxilində hər hansı xəta zamanı icra olunur.
Hook-lar təkrarlanan məntiqi mərkəzləşdirməyə imkan verir: before_all-də asılılıqların quraşdırılması, after_all-də bildirişlərin göndərilməsi, error blokunda müvəqqəti faylların təmizlənməsi və xəta barədə xəbərdarlıq. Bu, kod təkrarlanmasını azaldır və lanes-ləri daha təmiz edir.
# Lanes həyat dövrü hookları
default_platform(:ios)
before_all do
cocoapods(try_repo_update_on_error: true)
ensure_git_status_clean
end
after_all do |lane|
slack(message: "Lane #{lane} uğurla tamamlandı")
end
error do |lane, exception|
slack(
message: "Lane #{lane} xəta ilə uğursuz oldu: #{exception}",
success: false
)
end
lane :deploy do
match(type: 'appstore')
gym(export_method: 'app-store')
deliver
end
Error bloku iki arqument qəbul edir: lane adı (symbol) və istisna obyekti. Blok daxilində Slack-ə bildiriş göndərə, fayla log yaza və ya alternativ bərpa ssenarisi işə sala bilərsiniz. Error bloku uğurla başa çatarsa, Fastlane qurmanı CI/CD səviyyəsində uğursuz hesab etmir.
Private lane — lane əvəzinə private_lane vasitəsilə bəyan edilmiş, mövcud əmrlər siyahısında göstərilməyən və birbaşa terminaldan işə salına bilməyən lane-dir. Private lanes bir neçə public lanes-dən çağırılan təkrarlanan addımları inkapsulyasiya etmək üçün nəzərdə tutulub.
Private lanes xüsusilə ciddi müəyyən edilmiş ardıcıllıqla yerinə yetirilməli olan mürəkkəb ardıcıllıqlar üçün faydalıdır. Məsələn, private lane :setup_signing :build_dev, :build_staging və :build_production lanes-lərindən müxtəlif parametrlərlə çağırıla bilər, lakin özlüyündə ayrıca əmr kimi məna kəsb etmir.
# Təkrar istifadə üçün Private lanes
private_lane :setup_environment do |options|
cocoapods(try_repo_update_on_error: true)
match(type: options[:type], readonly: true)
increment_build_number
end
lane :dev_build do
setup_environment(type: 'development')
gym(export_method: 'development')
end
lane :appstore_build do
setup_environment(type: 'appstore')
gym(export_method: 'app-store')
deliver
end
Private lanes digər private lanes-ləri çağıraraq abstraksiya iyerarxiyası yarada bilər. Fastfile-in oxunaqlılığını qorumaq üçün iç-içəlik dərinliyini 2–3 səviyyə ilə məhdudlaşdırmaq tövsiyə olunur. Hər private lane-i təyinatını və gözlənilən parametrlərini təsvir edən şərhlə sənədləşdirin.
iOS və Android layihələri üçün praktik nümunələri nəzərdən keçirək. iOS lanes adətən testlər üçün scan, sertifikatlar üçün match, qurma üçün gym və çatdırılma üçün pilot və ya deliver istifadə edir. Android lanes qurma üçün gradle, nəşr üçün supply və bulud testi üçün firebase_test_lab istifadə edir.
// iOS tətbiqi üçün tam CI/CD Lane
lane :ci_full_ios do
scan(scheme: 'App', code_coverage: true)
gym(scheme: 'App', export_method: 'app-store')
pilot(distribute_external: true)
slack(message: 'iOS CI/CD uğurla başa çatdı')
end
/* Android tətbiqi üçün tam CI/CD Lane */
lane :ci_full_android do
gradle(task: 'testReleaseUnitTest')
gradle(task: 'bundleRelease')
supply(track: 'internal')
end
iOS və Android üçün lanes-ləri birləşdirərək çarpaz platformalı tətbiq üçün vahid CI/CD prosesi yarada bilərsiniz. Platforma-spesifik lanes-ləri qruplaşdırmaq üçün platform :ios və platform :android platforma bloklarından istifadə edin və onları icra sırasını idarə edən ümumi orchestrator lane-dən çağırın.
Lanes yazarkən ssenarilərin oxunaqlılığını, davamlılığını və etibarlılığını təmin edən bir sıra təcrübələrə riayət etmək tövsiyə olunur. Birinci qayda — hər lane bir tapşırığı yerinə yetirməlidir. Lane çox şey edirsə, onu bir neçə lane və private lanes-ə bölün.
İkinci qayda — lanes-in adlandırılması fel və ya fel ifadəsi olmalıdır: build, deploy, test, upload_screenshots. process və ya do_all kimi abstrakt adlardan çəkinin. Lane adında sözləri ayırmaq üçün alt xətlərdən istifadə edin.
Üçüncü qayda — xətaları açıq şəkildə idarə edin. Problemlər haqqında aydın mesajlar üçün UI.user_error! istifadə edin. Fastlane-in standart xəta mesajlarına etibar etməyin — tərtibatçıya kontekst verin: “GoogleService-Info.plist faylı tapılmadı — onu layihəyə əlavə edin” “File not found” əvəzinə.
| Təcrübə | Təsvir | Nümunə |
|---|---|---|
| Bir tapşırıq | Lane bir məntiqi əməliyyat yerinə yetirir | lane :run_tests, lane :build_ipa |
| Parametrlər | Bütün parametrlər options və ya ENV vasitəsilə | options[:scheme] || default |
| Hook-lar | before_all/after_all ümumi kod üçün | before_all-də cocoapods |
| Şərhlər | Mürəkkəb hissələri sənədləşdirin | # Bitcode ilə qurma |
| Xətalar | Anlaşılan xəta mesajları | UI.user_error!("...") |
Dördüncü qayda — lanes-ləri CI/CD-də işə salmazdan əvvəl lokal olaraq test edin. Fastlane --dry-run flagı vasitəsilə dry-run rejimini dəstəkləyir, hansı ki, actions-lərin faktiki icra olunmadan hansıların yerinə yetiriləcəyini göstərir. İnteqrasiyadan əvvəl ayrı-ayrı lanes-ləri izolə edilmiş şəkildə test etmək üçün fastlane run_test istifadə edin.
Hər lane-in sənədləşdirilməsi komanda işi üçün vacib təcrübədir. Fastlane lane bəyan etməzdən əvvəl yerləşdirilən desc blokundan avtomatik sənəd generasiyasını dəstəkləyir. Desc mətni fastlane lanes və fastlane list işə salındıqda göstərilir, tərtibatçılara Fastfile mənbə kodunu oxumadan hər ssenarinin təyinatını anlamağa kömək edir.
Parametrləri sənədləşdirmək üçün gözlənilən dəyərlərin təsviri ilə Ruby şərhlərindən istifadə edin. Fastlane fastlane generate_docs əmri ilə lanes-lərin tam siyahısı və təsviri ilə README.md faylı yarada bilər ki, bu da yeni komanda üzvlərinin layihənin CI/CD proseslərinə adaptasiyası üçün əlverişlidir.
Tez-tez verilən suallar
Lane — Fastlane-də Ruby-də Fastfile-də bəyan edilən adlandırılmış avtomatlaşdırma ssenarisidir. Lane konkret tapşırığı yerinə yetirmək üçün actions ardıcıllığını birləşdirir: tətbiqin qurulması, testlərin işə salınması və ya yerləşdirilməsi. Terminaldan və ya CI/CD sistemindən fastlane [lane_adı] vasitəsilə işə salınır.
Fastfile-də lane :name do ... end konstruksiyasından istifadə edin. Blok daxilində parametrlərlə actions çağırışlarını əlavə edin. Lane digər lanes-ləri adla çağıra bilər. İşə salmaq üçün Fastfile olan fastlane kataloqunun yerləşdiyi layihənin kökündə terminalda fastlane name icra edin.
Parametrlər əmr sətri vasitəsilə ötürülür: fastlane build scheme:App version:2.0. Lane daxilində parametrlər options[:scheme] və options[:version] vasitəsilə əlçatandır. Məcburi parametrlər üçün lane-in əvvəlində dəyərin mövcudluğunu yoxlayın, istəyə bağlı olanlar üçün standart dəyərlər təyin edin.
Private lane — lane əvəzinə private_lane vasitəsilə bəyan edilmiş lane. Birbaşa əmr sətrindən işə salına bilməz və digər lanes-lərdən çağırılan təkrarlanan addımları inkapsulyasiya etmək üçün xidmət edir. Bu, kod təkrarlanmasını azaldır və Fastfile-in saxlanmasını asanlaşdırır.
İstisnaları tutmaq üçün qlobal olaraq və ya konkret lane daxilində error blokundan istifadə edin. Fastlane bloka lane adını və exception obyektini ötürür. Blok daxilində bildiriş göndərə, log yaza və ya təmizləmə icra edə bilərsiniz. Anlaşılan xəta mesajları yaratmaq üçün UI.user_error! istifadə edin.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun