Fastlane — ابزاری برای خودکارسازی buildها و انتشار برنامههای موبایل برای iOS و Android است. Fastlane امضای کد، build، اجرای تستها، ایجاد اسکرینشات و بارگذاری در App Store Connect و Google Play Console را مدیریت میکند. این استاندارد دوفاکتو برای CI/CD در توسعه موبایل است.
نتیجهگیری اصلی
Fastlane — یک ابزار متنباز است که وظایف روزمره توسعه موبایل را خودکار میکند: build برنامه، اجرای تستها، ایجاد اسکرینشات، مدیریت گواهیها، بارگذاری buildها در TestFlight، App Store و Google Play. Fastlane به زبان Ruby نوشته شده و از طریق RubyGems با دستور gem install fastlane توزیع میشود.
Fastlane در سال 2015 به عنوان یک ابزار iOS ظاهر شد، اما به سرعت به Android گسترش یافت. امروزه این یک اکوسیستم از دهها action است — دستورات داخلی که میتوانند در سناریوهایی به نام lane ترکیب شوند. هر lane یک وظیفه خاص را انجام میدهد: مثلاً build_release نسخه release را میسازد و deploy_beta build را به TestFlight بارگذاری میکند.
Fastlane توسط شرکتهایی مانند Uber، Airbnb، Snapchat، Twitter و Shopify استفاده میشود. طبق نظرسنجی 2024، بیش از 60% توسعهدهندگان iOS از Fastlane در پروژههای خود استفاده میکنند. این ابزار هم اجرای محلی و هم ادغام با سیستمهای CI ابری را پشتیبانی میکند که آن را به استاندارد دوفاکتو برای CI/CD موبایل تبدیل میکند.
# نصب Fastlane
sudo gem install fastlane -NV
# مقداردهی اولیه در پروژه
fastlane init
پس از مقداردهی اولیه، Fastlane دایرکتوری fastlane/ را با سه فایل ایجاد میکند: Fastfile (سناریوها)، Appfile (تنظیمات برنامه) و Matchfile (تنظیمات گواهی). این ساختار برای هر دو پلتفرم — iOS و Android — یکسان باقی میماند.
فایل پیکربندی اصلی Fastlane — Fastfile است.它在 ریشه پروژه در دایرکتوری fastlane/ قرار دارد. Fastfile به زبان Ruby نوشته میشود: هر lane یک بلوک نامگذاری شده با دنبالهای از actionها است. Lane میتواند پارامترها را بپذیرد، laneهای دیگر را فراخوانی کند و مقادیر را برگرداند.
# fastlane/Fastfile — نمونه برای iOS
default_platform(:ios)
platform :ios do
desc "Build and upload to TestFlight"
lane :beta do
match(type: "appstore")
gym(scheme: "MyApp", configuration: "Release")
pilot(skip_waiting_for_build: true)
end
desc "Deploy to App Store"
lane :release do
ensure_git_status_clean
match(type: "appstore")
gym(scheme: "MyApp")
deliver(
skip_metadata: true,
skip_screenshots: true
)
push_to_git_remote(tags: true)
end
end
هر lane با دستور fastlane ios beta یا fastlane ios release اجرا میشود. Fastfile از متغیرها، شرایط، حلقهها و فراخوانی اسکریپتهای خارجی پشتیبانی میکند — این یک فایل Ruby کامل است. توسعهدهندگان میتوانند کد را از طریق private_lane (روشهای محلی) و import از Fastfileهای دیگر استفاده مجدد کنند.
Fastlane بیش از 200 action داخلی برای اکثر وظایف ارائه میدهد. اگر action مورد نیاز وجود نداشته باشد، میتوانید action خود را به زبان Ruby بنویسید یا یک دستور shell را از طریق sh("...") فراخوانی کنید. Actionها میتوانند پارامترها را بپذیرند — تنظیمات build، مسیرها، توکنهای دسترسی — و نتیجه را برای استفاده در مراحل بعدی برگردانند.
Fastlane برای iOS سه مشکل کلیدی را حل میکند: مدیریت گواهیها و provisioning profiles، build IPA از طریق Xcode و انتشار در App Store Connect و TestFlight. هر یک از این وظایف توسط یک action جداگانه پوشش داده میشود.
match — action برای مدیریت گواهیها. تمام گواهیها و provisioning profiles را در یک مخزن Git رمزگذاری شده ذخیره میکند. هر توسعهدهنده و سرور CI از همان مجموعه فایلها استفاده میکنند که تضادها و مشکلات گواهیهای منقضی شده را از بین میبرد. Match هنگام افزودن دستگاههای جدید، پروفایلها را به طور خودکار بهروز میکند.
sigh — از طریق Apple Developer Portal یک provisioning profile ایجاد و دانلود میکند. زمانی استفاده میشود که نیاز به دریافت سریع پروفایل برای نوع خاصی دارید: development، ad-hoc یا appstore.
gym — build IPA. Gym xcodebuild را با پارامترهای بهینه میپوشاند، به طور خودکار scheme، configuration، export options را انتخاب میکند و یک IPA امضا شده ایجاد میکند. مثال: gym(scheme: "MyApp", export_method: "app-store").
pilot — مدیریت TestFlight. Build را بارگذاری میکند، تسترها را اضافه میکند، وضعیت بررسی را دنبال میکند. deliver — انتشار کامل در App Store، شامل فراداده، اسکرینشاتها، قیمت و نسخهها.
# build و انتشار برنامه iOS
lane :deploy_ios do
cocoapods
match(type: "appstore", readonly: true)
gym(scheme: "MyApp", export_method: "app-store")
pilot(changelog: "Bug fixes and performance improvements")
end
برای کار با App Store Connect نیاز به توکنهای دسترسی است. Fastlane دو روش احراز هویت را پشتیبانی میکند: کلید API App Store Connect (توصیه شده) و Apple ID با احراز هویت دو عاملی. کلیدهای API برای CI/CD راحتتر هستند زیرا نیازی به وارد کردن تعاملی رمز عبور ندارند.
| Action | هدف | معادل دستی |
|---|---|---|
match | مدیریت گواهیها و پروفایلها | Apple Developer Portal |
sigh | ایجاد provisioning profile | Xcode + Developer Portal |
gym | build IPA | xcodebuild + xcrun |
pilot | بارگذاری در TestFlight | Xcode Organizer |
deliver | انتشار در App Store | App Store Connect Web |
scan | اجرای تستهای UI | xcodebuild test |
در Android، Fastlane build از طریق Gradle، امضای APK و AAB، بارگذاری در Google Play Console و Firebase App Distribution را خودکار میکند.
gradle — action اصلی برای build Android. Gradle wrapper را با وظایف مورد نیاز فراخوانی میکند: gradle(task: "assembleRelease") یا برای AAB gradle(task: "bundleRelease"). میتوان پرچمها، متغیرهای محیطی و مسیر gradle.properties را ارسال کرد.
supply — بارگذاری APK یا AAB در Google Play Console. Supply نسخهها، مسیرها (internal، alpha، beta، production)، یادداشتهای انتشار، قیمت و کشور توزیع را مدیریت میکند. مثال: supply(track: "beta", release_status: "completed").
screengrab — ایجاد اسکرینشات برای Google Play. تستهای instrumentation را اجرا میکند که از صفحههای برنامه در دستگاهها و زبانهای مختلف اسکرینشات میگیرند. اسکرینشاتهای به دست آمده از طریق supply بارگذاری میشوند.
# build و انتشار برنامه Android
lane :deploy_android do
gradle(task: "clean bundleRelease")
supply(
track: "beta",
release_status: "completed",
version_code: 42
)
end
| Action | هدف | معادل دستی |
|---|---|---|
gradle | build از طریق Gradle | ./gradlew assembleRelease |
supply | بارگذاری در Google Play | Google Play Console Web |
screengrab | ایجاد اسکرینشات | اسکرینشات دستی + ImageMagick |
firebase_app_distribution | توزیع از طریق Firebase | Firebase Console Upload |
Fastlane برای کار در pipelineهای CI/CD طراحی شده است. آن حالت غیرتعاملی، متغیرهای محیطی و مصنوعات build را به درستی پردازش میکند. در زیر نمونههایی از ادغام با سیستمهای CI محبوب آورده شده است.
در GitHub Actions، Fastlane به عنوان یک اسکریپت Ruby اجرا میشود. workflow معمولی: نصب Ruby و Fastlane، تنظیم کلیدها (گواهیها، توکنهای API از طریق secrets)، اجرای lane. برای iOS به runner مکاواس نیاز است؛ Android روی ubuntu-latest کار میکند.
در GitLab CI، Fastlane در .gitlab-ci.yml با طرح مشابه استفاده میشود: نصب وابستگیها، اجرای fastlane، انتقال مصنوعات. GitLab CI از runnerهای macOS و Linux پشتیبانی میکند.
Bitrise — CI/CD تخصصی برای برنامههای موبایل — پشتیبانی داخلی از Fastlane دارد. Bitrise Workflow میتواند Fastlane Step را فراخوانی کند یا اسکریپتهای دلخواه را با fastlane اجرا کند. Bitrise گواهیها را از طریق مدیر Code Signing خود مدیریت میکند.
# Fastfile برای CI/CD با اجرای شرطی تستها
lane :ci_test do
scan(scheme: "MyApp", code_coverage: true)
end
lane :ci_beta do
ensure_git_status_clean
version_bump_podspec(path: "MyApp.podspec")
match(type: "appstore", readonly: true)
gym(scheme: "MyApp", export_method: "app-store")
pilot(distribute_external: true)
end
یک جنبه مهم ادغام CI/CD — ذخیره اسرار است. Fastlane از فایل .env از طریق dotenv و متغیرهای محیطی استفاده میکند. برای iOS متغیرهای حیاتی: MATCH_PASSWORD، FASTLANE_APPLE_API_KEY، FASTLANE_APPLE_API_KEY_ID. برای Android: SUPPLY_JSON_KEY_DATA — محتوای حساب سرویس Google Play.
Fastlane شامل بیش از 200 action داخلی است. در زیر مروری بر محبوبترینها به همراه پلتفرم و هدف آورده شده است.
| Action | پلتفرم | توضیحات |
|---|---|---|
gym | iOS | build IPA با پارامترهای بهینه شده xcodebuild |
match | iOS | همگامسازی گواهیها و provisioning profiles از طریق Git |
pilot | iOS | بارگذاری build در TestFlight و مدیریت تسترها |
deliver | iOS | انتشار برنامه در App Store با فراداده |
scan | iOS | اجرای تستهای unit و UI با تولید گزارش |
gradle | Android | اجرای وظایف Gradle: assemble، bundle، test |
supply | Android | بارگذاری APK و AAB در Google Play Console |
screengrab | Android | اسکرینشاتهای خودکار برای Google Play |
firebase_app_distribution | Android | توزیع buildها از طریق Firebase |
snapshot | iOS | اسکرینشاتهای خودکار روی شبیهسازها برای App Store |
increment_build_number | iOS | افزایش خودکار شماره build در پروژه Xcode |
appcenter_upload | هر دو | بارگذاری build در App Center |
برای جستجوی action مورد نیاز از دستور fastlane action [نام] استفاده میشود که مستندات، پارامترها و مثالها را نمایش میدهد. لیست کامل به صورت محلی در دسترس است: fastlane actions.
Fastlane همچنین از plugins — افزونههای جامعه که actionهای جدید اضافه میکنند — پشتیبانی میکند. پلاگینها از طریق fastlane add_plugin [نام] نصب میشوند و در مخزن RubyGems در دسترس هستند. نمونههایی از پلاگینهای محبوب: fastlane-plugin-versioning (مدیریت نسخهها)، fastlane-plugin-sentry (بارگذاری debug symbols در Sentry)، fastlane-plugin-teams (اعلانها در Microsoft Teams).
Frequently Asked Questions
Fastlane — ابزاری برای خودکارسازی buildها و انتشار برنامههای موبایل است. برای جایگزینی عملیات دستی — build، امضا، بارگذاری در فروشگاهها — با یک دستور استفاده میشود. Fastlane زمان انتشار را از ساعتها به دقیقه کاهش میدهد و خطاهای انسانی در انتشار را از بین میبرد.
بله. Fastlane از هر دو پلتفرم به طور مستقل پشتیبانی میکند. برای iOS به macOS نیاز است، برای Android کافی است Linux. در یک Fastfile میتوان lanes را بر اساس پلتفرم تقسیم کرد: platform :ios do ... end و platform :android do ... end.
از طریق action match. گواهیهای رمزگذاری شده و provisioning profiles را در مخزن Git ذخیره میکند. هر توسعهدهنده مخزن را کلون میکند، match فایلها را با رمز عبور از متغیر MATCH_PASSWORD رمزگشایی میکند و آنها را در keychain نصب میکند. این مشکل "روی ماشین من build میشود" را حل میکند.
بله. Fastlane دارای action داخلی firebase_app_distribution برای بارگذاری APK و IPA در Firebase App Distribution است. همچنین firebase_app_distribution_add_testers برای اضافه کردن تسترها در دسترس است. جایگزین — action appcenter_upload برای App Center.
Fastlane از طریق RubyGems نصب میشود: gem install fastlane -NV. برای iOS به macOS با Xcode نیاز است؛ برای Android — Linux یا macOS با JDK و Android SDK. در GitHub Actions یک action آماده ruby/setup-ruby برای نصب Ruby و Fastlane وجود دارد. متغیرهای محیطی از طریق secrets سیستم CI منتقل میشوند.
Fastlane — یک کتابخانه و CLI برای خودکارسازی وظایف build و انتشار است. Bitrise و Jenkins — پلتفرمهای کامل CI/CD هستند. Fastlane درون آنها کار میکند: Jenkins Fastlane را به عنوان یک مرحله pipeline اجرا میکند، Bitrise Fastlane را از طریق یک Step ویژه فراخوانی میکند. Fastlane جایگزین سیستم CI نمیشود، بلکه آن را با ویژگیهای خاص موبایل تکمیل میکند.
Summary
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.