Lane — یہ کیا ہے، Fastlane میں تخلیق اور استعمال

مصنف: IT Sectr اشاعت: 2026-04-14 مطالعے کا وقت: 10 منٹ

Lane — Fastlane میں ایک نامی آٹومیشن سیناریو ہے جو موبائل ایپلیکیشن کی تعمیر، جانچ یا ترسیل کے لیے اعمال (actions) کی ترتیب کو یکجا کرتا ہے۔ ہر lane Ruby زبان میں Fastfile میں بیان کیا جاتا ہے اور ٹرمینل یا CI/CD سسٹم سے ایک کمانڈ سے چلایا جا سکتا ہے۔ Fastlane Docs, 2025 کے مطابق، 85% Fastfile CI/CD کے مختلف مراحل کے لیے تین سے زیادہ lanes پر مشتمل ہوتے ہیں۔ Lane پیرامیٹرز لے سکتا ہے، دوسرے lanes کو کال کر سکتا ہے اور رن ٹائم ایررز کو ہینڈل کر سکتا ہے۔

اہم نکات

  • Lane — Ruby زبان میں Fastfile میں نامی آٹومیشن سیناریو
  • پیرامیٹرز — fastlane lane_name key:value چلانے پر options hash کے ذریعے اقدار کی منتقلی
  • before_all/after_all — ہر lane سے پہلے اور بعد میں کوڈ چلانے کے بلاکس
  • Private lane — صرف دوسرے lanes سے کال کرنے کے لیے دستیاب سیناریو
  • ایرر ہینڈلنگ — ایررز کو ہینڈل کرنے اور اطلاع بھیجنے کے لیے error بلاک

Fastlane میں Lane کیا ہے

Lane — Fastlane کا بنیادی تعمیراتی بلاک ہے، جو ایک نامی آٹومیشن سیناریو کی وضاحت کرتا ہے۔ ہر lane ایک مخصوص مقصد حاصل کرنے کے لیے اعمال (actions) کی ترتیب بیان کرتا ہے: ایپلیکیشن بنانا، ٹیسٹ چلانا، اسٹور پر اپ لوڈ کرنا یا ماحول ترتیب دینا۔ Lane Fastfile میں اعلان کیا جاتا ہے اور پروجیکٹ کی جڑ سے fastlane [lane_name] کمانڈ سے چلایا جاتا ہے۔

Lane کا تصور Ruby DSL سے لیا گیا ہے اور سیناریوز کی پڑھنے کی اہلیت کو یقینی بناتا ہے۔ ڈیولپر پورے CI/CD عمل کو سمجھنے والے ناموں اور پیرامیٹرز کے ساتھ actions کالز کی ترتیب کے طور پر دیکھتا ہے۔ Lane سادہ (ایک کمانڈ) یا پیچیدہ (برانچنگ، لوپس، دوسرے lanes کو کال کرنا) ہو سکتا ہے۔

ہر lane چلانے کے بعد ایک نتیجہ لوٹاتا ہے — ایک آبجیکٹ جس میں عملدرآمد کی حالت اور actions سے ڈیٹا ہوتا ہے۔ نتیجہ دوسرے lanes میں استعمال کیا جا سکتا ہے یا فیصلہ لینے کے لیے CI/CD سسٹم کو بھیجا جا سکتا ہے۔ اگر lane میں کوئی بھی action ایرر کے ساتھ ختم ہوتا ہے تو lane کا عملدرآمد رک جاتا ہے اور error بلاک کو کال کیا جاتا ہے۔

Lane نحو: اعلان اور چلانا

Lane کے اعلان کا نحو Ruby DSL کے سادہ نمونے کی پیروی کرتا ہے: lane کلیدی لفظ، Ruby علامت (symbol) کے طور پر سیناریو کا نام، do ... end بلاک جس میں سیناریو کا باڈی ہوتا ہے۔ Lane کا نام پلیٹ فارم کے اندر منفرد ہونا چاہیے اور حروف، اعداد اور زیریں خطوط پر مشتمل ہونا چاہیے۔

Lane کا چلانا کمانڈ لائن کے ذریعے کیا جاتا ہے: fastlane build (:build نامی lane کے لیے) یا bundle exec fastlane build (اگر Fastlane Bundler کے ذریعے انسٹال کیا گیا ہو)۔ پلیٹ فارم lanes کے لیے fastlane ios build یا fastlane android build استعمال کریں۔

ruby
# ایک سادہ lane کا اعلان
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

# چلانا: fastlane build_and_deploy

Lane پیرامیٹرز یا ماحولیاتی متغیرات پر مبنی مشروط منطق پر مشتمل ہو سکتا ہے۔ مخصوص شرائط میں مراحل کو چھوڑنے کے لیے if/unless استعمال کریں۔ arrays کو پروسیس کرنے کے لیے each لوپس بھی دستیاب ہیں، جو ایک ہی lane میں متعدد اہداف یا ایپلیکیشن اسکیمز بنانے کے لیے مفید ہے۔

Lane سے قدر لوٹانا

Lane ایک قدر لوٹا سکتا ہے جو کال کرنے والے کوڈ کے لیے قابل رسائی ہوگی۔ قدر لوٹانے کے لیے عام Ruby return یا lane بلاک میں آخری اظہار استعمال کریں۔ لوٹائی گئی قدر ایک سٹرنگ، نمبر، hash یا action کا نتیجہ ہو سکتی ہے۔ یہ ایک lane کے نتیجے کو فیصلہ لینے کے لیے دوسرے lane میں استعمال کرنے کی اجازت دیتا ہے۔

مثال کے طور پر، :get_version lane Info.plist سے ایپلیکیشن کا موجودہ ورژن لوٹا سکتا ہے، اور :deploy lane اسے Slack میں پیغام فارمیٹ کرنے کے لیے استعمال کر سکتا ہے۔ لوٹائی گئی قدریں خاص طور پر private lanes میں مفید ہیں، جہاں نتیجہ کال کرنے والے lane میں مزید پروسیسنگ کے لیے درکار ہوتا ہے۔

Lane پیرامیٹرز: منتقلی اور پروسیسنگ

Lane پیرامیٹرز سیناریوز کو لچکدار اور دوبارہ استعمال کے قابل بناتے ہیں۔ Lane کمانڈ لائن سے چلاتے وقت options hash کے ذریعے پیرامیٹرز قبول کرتا ہے: fastlane deploy scheme:AppStore version:2.1.0۔ Lane کے اندر، پیرامیٹرز options[:scheme] اور options[:version] کے طور پر قابل رسائی ہیں۔

لازمی پیرامیٹرز کے لیے، lane کے شروع میں قدر کی موجودگی چیک کریں اور واضح پیغام کے ساتھ UI.user_error! کال کریں۔ اختیاری پیرامیٹرز کے لیے || آپریٹر کے ذریعے ڈیفالٹ اقدار مقرر کریں۔ Fastlane قسم، ڈیفالٹ ویلیو اور تفصیل کی وضاحت کے ساتھ options طریقہ کے ذریعے ٹائپ شدہ پیرامیٹرز کو بھی سپورٹ کرتا ہے۔

ruby
# پیرامیٹر پروسیسنگ کے ساتھ Lane
lane :deploy do |options|
  scheme = options[:scheme]
  version = options[:version] || '1.0.0'
  beta = options[:beta] || false

  UI.user_error!("Scheme متعین نہیں") 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

# چلانا: fastlane deploy scheme:MyApp beta:true version:2.1.0

Lane کے اندر ماحولیاتی متغیرات کے ساتھ کام کرنے کے لیے ENV['VARIABLE_NAME'] استعمال کریں۔ Fastlane خود بخود fastlane ڈائریکٹری سے .env فائلیں لوڈ کرتا ہے۔ یہ حساس ڈیٹا — API کیز، پاس ورڈز اور ٹوکن — کو Fastfile میں محفوظ کیے بغیر CI/CD ماحول میں منتقل کرنے کا معیاری طریقہ ہے۔

پیرامیٹر کی توثیق

مستحکم lane آپریشن کے لیے ان پٹ پیرامیٹرز کی توثیق ضروری ہے۔ اگر لازمی پیرامیٹر غائب ہے یا غلط قسم کا ہے تو مسئلہ کی وضاحت کے ساتھ UI.user_error! استعمال کریں۔ Fastlane options طریقہ فراہم کرتا ہے، جو ہر پیرامیٹر کے لیے قسم (String, Boolean, Integer, Array)، ڈیفالٹ ویلیو اور تفصیل مقرر کرنے کی اجازت دیتا ہے — توثیق lane شروع ہونے پر خود بخود ہو جاتی ہے۔

مزید برآں، سٹرنگ پیرامیٹرز کے لیے verify بلاک کے ذریعے چیک استعمال کیے جا سکتے ہیں: verify do |value| value.length > 0 end۔ غلط فارمیٹ پر Fastlane متوقع فارمیٹ اور فراہم کردہ قدر بتاتے ہوئے واضح پیغام دکھاتا ہے، جو CI/CD ماحول میں ڈیبگنگ کو آسان بناتا ہے۔

Lanes کو جوڑنا: before_all, after_all اور ایرر ہینڈلنگ

Fastlane ہر lane سے پہلے اور بعد میں کوڈ چلانے کے لیے لائف سائیکل ہکس فراہم کرتا ہے۔ before_all بلاک کسی مخصوص پلیٹ فارم پر یا عالمی طور پر ہر lane سے پہلے چلتا ہے۔ after_all بلاک lane کے کامیاب اختتام کے بعد چلتا ہے۔ error بلاک lane کے اندر کسی بھی ایرر پر چلتا ہے۔

ہکس تکراری منطق کو مرکزی بنانے کی اجازت دیتے ہیں: before_all میں ڈیپنڈنسی انسٹالیشن، after_all میں اطلاع بھیجنا، error بلاک میں عارضی فائلوں کی صفائی اور ایرر نوٹیفکیشن۔ یہ کوڈ ڈپلیکیشن کو کم کرتا ہے اور lanes کو صاف ستھرا بناتا ہے۔

ruby
# Lanes کے لائف سائیکل ہکس
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} کامیابی سے مکمل ہوا")
end

error do |lane, exception|
  slack(
    message: "Lane #{lane} خرابی کے ساتھ ناکام ہوا: #{exception}",
    success: false
  )
end

lane :deploy do
  match(type: 'appstore')
  gym(export_method: 'app-store')
  deliver
end

error بلاک دو آرگیومینٹ لیتا ہے: lane کا نام (symbol) اور exception آبجیکٹ۔ بلاک کے اندر، آپ Slack میں اطلاع بھیج سکتے ہیں، فائل میں لاگ لکھ سکتے ہیں یا متبادل ریکوری سیناریو شروع کر سکتے ہیں۔ اگر error بلاک کامیابی سے ختم ہوتا ہے تو Fastlane بلڈ کو CI/CD سطح پر ناکام نہیں مانتا۔

Private lanes اور دوبارہ استعمال

Private lane — ایک lane ہے جو lane کے بجائے private_lane کے ذریعے اعلان کیا جاتا ہے، جو دستیاب کمانڈز کی فہرست میں ظاہر نہیں ہوتا اور براہ راست ٹرمینل سے نہیں چلایا جا سکتا۔ Private lanes متعدد عوامی lanes سے کال کیے جانے والے تکراری اقدامات کو انکیپسولیٹ کرنے کے لیے ڈیزائن کیے گئے ہیں۔

Private lanes خاص طور پر پیچیدہ ترتیبوں کے لیے مفید ہیں جنہیں سختی سے متعین ترتیب میں انجام دیا جانا چاہیے۔ مثال کے طور پر، :setup_signing private lane مختلف پیرامیٹرز کے ساتھ :build_dev، :build_staging اور :build_production lanes سے کال کیا جا سکتا ہے، لیکن بذات خود ایک علیحدہ کمانڈ کے طور پر معنی نہیں رکھتا۔

ruby
# دوبارہ استعمال کے لیے 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 دوسرے private lanes کو کال کر سکتے ہیں، ایک تجرید کا درجہ بندی تشکیل دیتے ہوئے۔ Fastfile کی پڑھنے کی اہلیت برقرار رکھنے کے لیے nesting کی گہرائی کو 2–3 سطحوں تک محدود رکھنے کی سفارش کی جاتی ہے۔ ہر private lane کو اس کے مقصد اور متوقع پیرامیٹرز کی تفصیل والے کمنٹ کے ساتھ دستاویز کریں۔

iOS اور Android کے لیے lanes کی مثالیں

iOS اور Android پروجیکٹس کے لیے عملی مثالیں دیکھتے ہیں۔ iOS lanes عام طور پر ٹیسٹ کے لیے scan، سرٹیفکیٹس کے لیے match، بلڈ کے لیے gym اور ڈیلیوری کے لیے pilot یا deliver استعمال کرتے ہیں۔ Android lanes بلڈ کے لیے gradle، پبلیکیشن کے لیے supply اور کلاؤڈ ٹیسٹنگ کے لیے firebase_test_lab استعمال کرتے ہیں۔

ruby
// iOS ایپلیکیشن کے لیے مکمل 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 کامیابی سے مکمل ہوا')
end

/* Android ایپلیکیشن کے لیے مکمل CI/CD Lane */
lane :ci_full_android do
  gradle(task: 'testReleaseUnitTest')
  gradle(task: 'bundleRelease')
  supply(track: 'internal')
end

iOS اور Android کے لیے lanes کو ملا کر، آپ کراس پلیٹ فارم ایپلیکیشن کے لیے ایک متحد CI/CD عمل بنا سکتے ہیں۔ پلیٹ فارم کے مخصوص lanes کو گروپ کرنے کے لیے platform :ios اور platform :android پلیٹ فارم بلاکس استعمال کریں، اور انہیں مشترکہ آرکیسٹریٹر lane سے کال کریں جو عملدرآمد کی ترتیب کا انتظام کرتا ہے۔

Lanes لکھنے کے بہترین طریقے

Lanes لکھتے وقت، طریقوں کے ایک سیٹ پر عمل کرنے کی سفارش کی جاتی ہے جو سیناریوز کی پڑھنے کی اہلیت، برقرار رکھنے کی صلاحیت اور بھروسے کو یقینی بناتے ہیں۔ پہلا اصول — ہر lane کو ایک ہی کام انجام دینا چاہیے۔ اگر lane بہت زیادہ کام کرتا ہے تو اسے متعدد lanes اور private lanes میں تقسیم کریں۔

دوسرا اصول — lane کا نام ایک فعل یا فعلی جملہ ہونا چاہیے: build, deploy, test, upload_screenshots۔ process یا do_all جیسے تجریدی ناموں سے پرہیز کریں۔ Lane کے نام میں الفاظ کو الگ کرنے کے لیے زیریں خط استعمال کریں۔

تیسرا اصول — ایررز کو واضح طور پر ہینڈل کریں۔ مسائل کے بارے میں قابل فہم پیغامات کے لیے UI.user_error! استعمال کریں۔ Fastlane کے ڈیفالٹ ایرر میسیجز پر بھروسہ نہ کریں — ڈیولپر کو سیاق و سباق فراہم کریں: «GoogleService-Info.plist فائل نہیں ملی — اسے پروجیکٹ میں شامل کریں» بجائے «فائل نہیں ملی»۔

طریقہتفصیلمثال
ایک کامLane ایک ہی منطقی آپریشن انجام دیتا ہےlane :run_tests, lane :build_ipa
پیرامیٹرزتمام سیٹنگز options یا ENV کے ذریعےoptions[:scheme] || default
ہکسمشترکہ کوڈ کے لیے before_all/after_allbefore_all میں cocoapods
تبصرےپیچیدہ حصوں کو دستاویز کریں# Bitcode کے ساتھ بلڈ
ایررزقابل فہم ایرر پیغاماتUI.user_error!(«...»)

چوتھا اصول — CI/CD پر چلانے سے پہلے lanes کو مقامی طور پر ٹیسٹ کریں۔ Fastlane --dry-run پرچم کے ذریعے dry-run موڈ کو سپورٹ کرتا ہے، جو دکھاتا ہے کہ کون سے actions انجام دیے جائیں گے بغیر حقیقت میں چلائے۔ انٹیگریشن سے پہلے انفرادی lanes کو الگ تھلگ جانچنے کے لیے fastlane run_test استعمال کریں۔

Lanes کی دستاویزات

ہر lane کی دستاویز کرنا ٹیم ڈیولپمنٹ کے لیے ایک اہم عمل ہے۔ Fastlane lane کے اعلان سے پہلے رکھے گئے desc بلاک سے خودکار دستاویزات کی تخلیق کو سپورٹ کرتا ہے۔ desc کا متن fastlane lanes اور fastlane list چلانے پر ظاہر ہوتا ہے، جو ڈیولپرز کو Fastfile کا سورس کوڈ پڑھے بغیر ہر سیناریو کے مقصد کو سمجھنے میں مدد کرتا ہے۔

پیرامیٹرز کو دستاویز کرنے کے لیے، متوقع اقدار کی تفصیل کے ساتھ Ruby تبصرے استعمال کریں۔ Fastlane fastlane generate_docs کمانڈ کے ذریعے lanes کی مکمل فہرست اور ان کی تفصیل کے ساتھ README.md بنا سکتا ہے، جو ٹیم کے نئے اراکین کو پروجیکٹ کے CI/CD عمل سے ہم آہنگ ہونے میں سہولت فراہم کرتا ہے۔

اکثر پوچھے گئے سوالات

Fastlane میں Lane کیا ہے؟

Lane — Fastlane میں Ruby کے ساتھ Fastfile میں اعلان کردہ ایک نامی آٹومیشن سیناریو ہے۔ Lane ایک مخصوص کام انجام دینے کے لیے actions کی ایک ترتیب کو یکجا کرتا ہے: ایپلیکیشن بنانا، ٹیسٹ چلانا یا ڈیپلائے کرنا۔ اسے ٹرمینل یا CI/CD سسٹم سے fastlane [lane_name] کے ذریعے چلایا جاتا ہے۔

Fastfile میں Lane کیسے بنایا جائے؟

Fastfile میں lane :name do ... end کا ڈھانچہ استعمال کریں۔ بلاک کے اندر، پیرامیٹرز کے ساتھ actions کالز شامل کریں۔ Lane دوسرے lanes کو نام سے کال کر سکتا ہے۔ چلانے کے لیے، پروجیکٹ کی جڑ سے ٹرمینل میں fastlane name چلائیں، جہاں Fastfile پر مشتمل fastlane ڈائریکٹری موجود ہے۔

Lane میں پیرامیٹرز کیسے منتقل کریں؟

پیرامیٹرز کمانڈ لائن کے ذریعے منتقل کیے جاتے ہیں: fastlane build scheme:App version:2.0۔ Lane کے اندر، پیرامیٹرز options[:scheme] اور options[:version] کے ذریعے قابل رسائی ہیں۔ لازمی پیرامیٹرز کے لیے lane کے شروع میں قدر کی موجودگی چیک کریں، اختیاری پیرامیٹرز کے لیے ڈیفالٹ اقدار مقرر کریں۔

Fastlane میں private lane کیا ہے؟

Private lane — lane کے بجائے private_lane کے ذریعے اعلان کردہ lane۔ اسے براہ راست کمانڈ لائن سے نہیں چلایا جا سکتا اور یہ دوسرے lanes سے کال کیے جانے والے تکراری اقدامات کو انکیپسولیٹ کرنے کے لیے استعمال ہوتا ہے۔ یہ کوڈ ڈپلیکیشن کو کم کرتا ہے اور Fastfile کی دیکھ بھال کو آسان بناتا ہے۔

Lane میں ایررز کیسے ہینڈل کی جائیں؟

استثنیات کو پکڑنے کے لیے عالمی طور پر یا کسی مخصوص lane کے اندر error بلاک استعمال کریں۔ Fastlane بلاک کو lane کا نام اور exception آبجیکٹ بھیجتا ہے۔ بلاک کے اندر، آپ اطلاع بھیج سکتے ہیں، لاگ لکھ سکتے ہیں یا صفائی کر سکتے ہیں۔ قابل فہم ایرر پیغامات بنانے کے لیے UI.user_error! استعمال کریں۔

خلاصہ

  • Lane — Fastlane میں Ruby کے ساتھ CI/CD کاموں کے لیے actions کو یکجا کرنے والا نامی آٹومیشن سیناریو
  • نحو — options hash اور ماحولیاتی متغیرات کے ذریعے پیرامیٹر سپورٹ کے ساتھ lane :name do ... end
  • ہکس — lane لائف سائیکل کے مرکزی انتظام کے لیے before_all, after_all اور error بلاکس
  • Private lane — براہ راست چلائے بغیر تکراری منطق کو انکیپسولیٹ کرنے کے لیے نجی سیناریو
  • iOS lanes ٹیسٹ، بلڈ اور ڈیلیوری کے لیے scan, gym, match, pilot استعمال کرتے ہیں
  • Android lanes Gradle کے ذریعے بلڈ اور Google Play پر پبلیکیشن کے لیے gradle اور supply استعمال کرتے ہیں
  • بہترین طریقے: ایک lane — ایک کام، واضح پیرامیٹرز، قابل فہم ایررز، dry-run کے ذریعے ٹیسٹ

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں