Fastlane یک ابزار متنباز برای خودکارسازی ساخت، تست و انتشار اپلیکیشنهای iOS و Android است. به جای اجرای دستی دهها دستور برای امضا، ساخت و آپلود در فروشگاه، توسعهدهنده کل فرآیند را در Fastfile توصیف کرده و با یک دستور اجرا میکند. طبق Fastlane Docs, 2025، این ابزار در بیش از ۱٫۵ میلیون پروژه در سراسر جهان استفاده میشود. Fastlane ابزارهای کار با App Store Connect، Google Play Console و سیستمهای امضای کد را ترکیب میکند.
نکات اصلی
Fastlane یک ابزار خودکارسازی ساخت موبایل است که به زبان Ruby نوشته شده و تحت مجوز MIT منتشر میشود. این ابزار وظایف روزمره توسعهدهنده موبایل را خودکار میکند: ساخت اپلیکیشن، اجرای تستها، ایجاد اسکرینشاتها، امضای کد و آپلود فایلهای باینری در App Store یا Google Play. به جای ۱۵–۲۰ دستور دستی، توسعهدهنده یک دستور fastlane با نام سناریو اجرا میکند.
Fastlane به عنوان یک لایه پوششی روی ابزارهای Xcode (xcodebuild, xcrun) و Android SDK (gradlew, apksigner, bundletool) کار میکند و یک رابط یکپارچه برای هر دو پلتفرم فراهم میکند. این امر به ویژه برای تیمهایی که نسخههای iOS و Android یک اپلیکیشن را پشتیبانی میکنند ارزشمند است — فایلهای Fastfile یکسان میتوانند ساخت را برای هر دو پلتفرم با حداقل تفاوت در پارامترها توصیف کنند.
طبق دادههای GitHub، Fastlane بیش از ۳۹ هزار ستاره دارد و استاندارد خودکارسازی در توسعه موبایل است. این ابزار توسط جامعه و شرکت Google پشتیبانی میشود — Fastlane در Firebase به عنوان روش توصیهشده برای تحویل اپلیکیشنهای Android به Google Play Console ادغام شده است.
معماری Fastlane بر سه سطح بنا شده است: actions (دستورات پایه)، lanes (سناریوها) و ابزارها (ابزارهای تخصصی). Actions توابع جداگانه Fastlane هستند که هر کدام یک عمل خاص را انجام میدهند: ایجاد اسکرینشات، ساخت IPA، آپلود به TestFlight. Lanes چندین action را در یک سناریوی متوالی که در Fastfile توصیف شده است ترکیب میکنند.
Actions بلوکهای ساختمانی Fastlane هستند. هر action پارامترهایی دریافت میکند و یک وظیفه را انجام میدهد. برای مثال، action gym اپلیکیشن iOS را میسازد، scan تستها را اجرا میکند، pilot بیلد را به TestFlight آپلود میکند. در Fastlane بیش از ۲۰۰ action داخلی وجود دارد، مستندات هر کدام از طریق دستور fastlane action [نام] قابل دسترسی است.
اگر actions داخلی کافی نباشد، توسعهدهنده میتواند یک custom action به زبان Ruby ایجاد کرده و آن را در Fastfile متصل کند. Custom actions از طریق پلاگینهای Fastlane که در Rubygems منتشر میشوند و از طریق فایل FastfilePlugin در ریشه پروژه نصب میشوند، توزیع میگردند.
Lane یک سناریوی خودکارسازی نامگذاری شده است که چندین action را در یک توالی منطقی ترکیب میکند. Lane میتواند lanes دیگر را فراخوانی کند (private lanes)، پارامترها را منتقل کرده و خطاها را مدیریت کند. این امکان ساخت سلسلهمراتب سناریوها را فراهم میکند: lane پایه ساخت، lane استقرار، lane چرخه کامل CI/CD.
Fastlane شامل مجموعهای از ابزارهای تخصصی است که هر کدام یک وظیفه خاص خودکارسازی موبایل را حل میکنند. ابزارها به عنوان actions در داخل lanes یا مستقیماً از خط فرمان اجرا میشوند. بیایید چهار ابزار کلیدی را بررسی کنیم که نیازهای اصلی CI/CD برای iOS و Android را پوشش میدهند.
| ابزار | کاربرد | دستور |
|---|---|---|
| scan | اجرای تستهای Unit و UI روی شبیهساز iOS | fastlane scan |
| gym | ساخت فایل IPA یا APP برای iOS | fastlane gym |
| match | همگامسازی گواهیها و provisioning profiles از طریق Git | fastlane match |
| deliver | آپلود فایل باینری و متادیتا به App Store Connect | fastlane deliver |
| snapshot | تولید خودکار اسکرینشاتها روی دستگاههای مختلف | fastlane snapshot |
Scan اجرای تستهای Xcode را ساده میکند، به طور خودکار شبیهساز مناسب را انتخاب کرده و گزارش را قالببندی میکند. Gym اپلیکیشن را با پرچمهای بهینه کامپایل ساخته و exportOptions.plist را برای انواع مختلف ساخت (development, adhoc, appstore) پشتیبانی میکند. Deliver امکان آپلود نه فقط فایل باینری، بلکه اسکرینشاتها، توضیحات، نسخهها و قیمتها را از طریق یک فایل متادیتای واحد فراهم میکند.
ابزار Match شایسته توجه ویژه است — مشکل ذخیرهسازی و همگامسازی گواهیهای iOS در تیم را حل میکند. Match گواهیها و provisioning profiles را رمزگذاری کرده و در مخزن Git ذخیره میکند، و توسعهدهندگان با اجرای fastlane match به طور خودکار آنها را دریافت میکنند. این کار تنظیمات دستی هر ایستگاه کاری را حذف میکند.
Snapshot ابزاری برای ایجاد خودکار اسکرینشاتهای اپلیکیشن موبایل روی دستگاهها و زبانهای مختلف است. Snapshot تستهای UI را روی شبیهسازهای iOS اجرا کرده و در هر مرحله از تست از صفحه عکس میگیرد. نتایج در دایرکتوری fastlane/screenshots ذخیره شده و میتوانند از طریق deliver به App Store Connect آپلود شوند.
برای Android، screengrab عملکرد مشابهی را روی شبیهسازهای Android انجام میدهد. هر دو ابزار از بومیسازی پشتیبانی میکنند — اسکرینشاتها برای هر زبان ایجاد میشوند که تهیه مواد برای انتشار در فروشگاههای اپلیکیشن چندزبانه را ساده میکند.
برای پروژههای iOS، Fastlane از طریق Gemfile (نصب gem fastlane) و Fastfile در دایرکتوری fastlane پیکربندی میشود. تنظیم اولیه با دستور fastlane init انجام میشود که ساختار دایرکتوری پایه را ایجاد میکند، اطلاعات App Store Connect را میپرسد و قالب Fastfile با lanes اصلی را تولید میکند.
دستور کلیدی برای iOS fastlane match است که باید ابتدا برای دریافت گواهیها و provisioning profiles اجرا شود. پس از امضای موفق، Fastlane میتواند اپلیکیشن را بسازد (gym)، تستها را اجرا کند (scan) و فایل باینری را آپلود کند (pilot یا deliver).
# Fastfile برای اپلیکیشن iOS
default_platform(:ios)
lane :build do
cocoapods
scan(scheme: 'App', devices: ['iPhone 15'])
gym(scheme: 'App', export_method: 'app-store')
end
lane :deploy do
match(type: 'appstore')
build
pilot(skip_waiting_for_build_processing: true)
slack(message: 'نسخه جدید به TestFlight آپلود شد')
end
برای کار با TestFlight از pilot action استفاده کنید — آن IPA را آپلود کرده و تستکنندگان را مدیریت میکند. Fastlane از upload_to_testflight (مترادف pilot) پشتیبانی کرده و به طور خودکار انتظار برای پردازش بیلد توسط Apple را مدیریت میکند که ممکن است ۵ تا ۳۰ دقیقه طول بکشد.
برای پروژههای Android، Fastlane به طور مشابه پیکربندی میشود، اما به جای ابزارهای Xcode از Gradle و Android SDK استفاده میکند. Fastlane برای Android از ساخت APK و AAB، امضا از طریق apksigner یا jarsigner، اجرای تستهای ابزاری و آپلود به Google Play Console از طریق Supply action پشتیبانی میکند.
تفاوت کلیدی — ساخت Android نیاز به مدیریت گواهیها از طریق match ندارد (امضای Android از طریق Keystore که جداگانه ذخیره میشود مدیریت میشود). Fastlane برای Android از action gradle برای اجرای هر وظیفه Gradle و action supply برای کار با Google Play استفاده میکند.
# Fastfile برای اپلیکیشن Android
default_platform(:android)
lane :build do
gradle(task: 'clean assembleRelease')
gradle(task: 'testReleaseUnitTest')
end
lane :deploy do
build
supply(
track: 'internal',
aab: 'app/build/outputs/bundle/release/app-release.aab'
)
end
برای کار با Google Play Console یک حساب سرویس Google Cloud با دسترسی به API Google Play لازم است. Fastlane کلید JSON حساب سرویس را از طریق متغیر محیطی SUPPLY_JSON_KEY یا پارامتر json_key در action supply دریافت میکند. ترک انتشار میتواند internal، alpha، beta یا production باشد.
Fastlane با هر سیستم CI/CD که میتواند اسکریپتهای Ruby را اجرا کند ادغام میشود: Jenkins، Travis CI، GitHub Actions، GitLab CI، Bitrise و CircleCI. ادغام شامل نصب gem fastlane و اجرای دستور fastlane [lane_name] در مرحله script پایپلاین است.
برای CI/CD پیکربندی متغیرهای محیطی برای ذخیره دادههای حساس مهم است: MATCH_PASSWORD (رمز رمزگذاری گواهیها)، FASTLANE_USER (Apple ID)، FASTLANE_PASSWORD (رمز Apple ID). در Travis CI متغیرها از طریق travis encrypt رمزگذاری میشوند، در GitHub Actions — از طریق Secrets repository.
روش توصیهشده — استفاده از fastlane match در CI/CD با پرچم readonly برای جلوگیری از تغییرات تصادفی در مخزن گواهیها. برای Android از Keystore کدگذاری شده در Base64 و ذخیره شده در متغیر محیطی استفاده کنید که رمزگشایی شده و در مرحله before_install در یک فایل موقت ذخیره میشود.
Fastlane Match ابزاری برای خودکارسازی مدیریت گواهیهای iOS و provisioning profiles است، یکی از ارزشمندترین قابلیتهای Fastlane برای تیمها. Match یک مخزن Git رمزگذاری شده ایجاد میکند (یا از مخزن موجود استفاده میکند) که در آن همه گواهیها و پروفایلها را ذخیره کرده و آنها را بین توسعهدهندگان و سرورهای CI/CD همگامسازی میکند.
Match از پنج نوع پروفایل پشتیبانی میکند: development، adhoc، appstore، enterprise و developer_id. هر نوع در یک دایرکتوری جداگانه در داخل مخزن ذخیره میشود. دستور fastlane match development گواهیهای development را روی ماشین محلی نصب میکند، و fastlane match appstore — پروفایلهای App Store را برای ساخت روی CI نصب میکند.
# استفاده از Match در Fastfile
lane :setup_signing do
match(
type: 'appstore',
readonly: true,
git_branch: 'main'
)
end
lane :update_profiles do
match(
type: 'development',
force: true,
app_identifier: ['com.example.app', 'com.example.app.watchkitapp']
)
end
امنیت Match با رمزگذاری همه فایلها قبل از commit به Git تضمین میشود. رمز عبور رمزگذاری از طریق متغیر محیطی MATCH_PASSWORD تنظیم میشود و باید برای همه اعضای تیم یکسان باشد. Match از OpenSSL برای رمزگذاری استفاده میکند و رمز عبور را به صورت آشکار در مخزن ذخیره نمیکند.
سوالات متداول
Fastlane یک ابزار خودکارسازی متنباز برای اپلیکیشنهای iOS و Android است. ساخت، تست، امضای کد و تحویل به App Store و Google Play را از طریق یک فایل پیکربندی واحد Fastfile و مجموعهای از ابزارهای داخلی خودکار میکند.
ابزارهای اصلی Fastlane: scan (تستها)، gym (ساخت iOS)، match (گواهیها)، deliver (App Store)، pilot (TestFlight)، snapshot (اسکرینشاتها)، supply (Google Play) و frameit (قاب برای اسکرینشاتها). هر ابزار به عنوان action در داخل lane یا از خط فرمان قابل دسترسی است.
gem fastlane را نصب کنید، fastlane init را در ریشه پروژه اجرا کنید. Fastfile را با lanes برای ساخت (gym) و تستها (scan) پیکربندی کنید. Match را برای مدیریت گواهیها از طریق مخزن Git تنظیم کنید. یک lane استقرار با pilot یا deliver برای آپلود به App Store Connect اضافه کنید.
fastlane init را با ذکر package name اجرا کنید. از gradle action برای اجرای وظایف Gradle (assembleRelease، testReleaseUnitTest) استفاده کنید. Keystore را از طریق متغیرهای محیطی پیکربندی کنید. از supply action برای آپلود AAB یا APK در Google Play Console به ترک مورد نظر استفاده کنید.
gem fastlane را روی سرور CI/CD نصب کنید و دستور fastlane [lane_name] را در مرحله script پایپلاین اضافه کنید. متغیرهای محیطی FASTLANE_USER، FASTLANE_PASSWORD و MATCH_PASSWORD را در متغیرهای مخفی CI/CD پیکربندی کنید. از match readonly برای CI استفاده کنید تا از تغییرات تصادفی گواهیها جلوگیری شود.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید