Ruby — یک زبان تفسیری پویا با نحوی زیبا، شناختهشده با فریمورک Ruby on Rails. در توسعه موبایل، Ruby در درجه اول از طریق Fastlane استفاده میشود — ابزار استاندارد برای خودکارسازی ساخت، تست و استقرار برنامههای iOS و Android. بنا بر مستندات رسمی Fastlane، این ابزار در بیش از ۱۰۰٬۰۰۰ پروژه در سراسر جهان استفاده میشود.
نکات کلیدی
Ruby — یک زبان تفسیری پویا با کد منبع باز که توسط یوکیهیرو ماتسوموتو در سال ۱۹۹۵ ایجاد شد. اصل اساسی Ruby — «سادگی بهینه» (اصل کمترین شگفتی). این زبان به خاطر بلوکها (closures)، رویکرد شیءگرای خالص (همه چیز شیء است، از جمله اعداد) و سیستم قدرتمند متاپروگرامینگ شناخته میشود.
Ruby روی مفسر YARV (Yet Another Ruby VM) با کامپایل JIT از نسخه ۳٫۱ کار میکند. نسخه فعلی Ruby ۳٫۴ (۲۰۲۵) شامل دکوراتورها، تجزیهگر بهبودیافته Prism و پشتیبانی آزمایشی انواع از طریق RBS است. RubyGems — مدیر بسته — بیش از ۲۰۰٬۰۰۰ گِم دارد.
Ruby on Rails — شناختهشدهترین فریمورک وب در Ruby، اما در توسعه موبایل Ruby به شکل دیگری استفاده میشود. حوزه اصلی — Fastlane: اکوسیستم اسکریپتها و گِمهای Ruby برای خودکارسازی تمام مراحل چرخه عمر برنامه موبایل: از امضای گواهیها تا انتشار در فروشگاهها.
برای کار با Fastlane درک پایهای Ruby کافی است: متدها، بلوکهای do-end، نمادها (:symbol) و نحوی هشها { key: value }. برخلاف Python، Ruby از end برای بستن بلوکها استفاده میکند، نه تورفتگی. متدها میتوانند بدون پرانتز فراخوانی شوند — این در DSL Fastlane به طور فعال استفاده میشود.
# نحو پایه Ruby مورد استفاده در Fastlane
def download_assets(version, platform: "ios")
paths = {
ios: "ios/Assets.car",
android: "android/app/src/main/assets"
}
url = "https://cdn.example.com/assets/#{version}/#{paths[platform.to_sym]}"
puts "Downloading from: #{url}"
unless File.exist?("temp/assets")
Dir.mkdir("temp/assets")
end
result = system("curl -o temp/assets.zip #{url}")
raise "Download failed" unless result
end
download_assets("1.2.3", platform: "android")در مثال، متد download_assets آرگومان version و پارامتر نامگذاری شده اختیاری platform (پیشفرض ios) را میپذیرد. درونیابی رشتهها از طریق #{} مقادیر را مستقیماً در رشتهها قرار میدهد. unless — نقطه مقابل if، کد را اجرا میکند اگر شرط نادرست باشد.
Fastlane — ابزاری با کد منبع باز که با Ruby نوشته شده است. نصب شده از طریق gem install fastlane، مجموعهای از دستورات را برای خودکارسازی معمولترین وظایف توسعهدهنده موبایل فراهم میکند: ایجاد اسکرینشاتها، امضای کد، انتشار در TestFlight و کنسول Google Play.
Fastlane از ابزارهایی (tools) تشکیل شده است: sigh (مدیریت گواهیها)، match (همگامسازی گواهیها در تیم)، gym (ساخت iOS)، gradle (ساخت Android)، deliver (انتشار iOS)، supply (انتشار Android)، snapshot (اسکرینشاتها)، scan (تست). همه ابزارها از یک Fastfile واحد قابل دسترسی هستند.
در پروژههای بزرگ، Fastlane تا ۵۰+ اکشن را در یک خط لوله پردازش میکند: افزایش نسخه، بارگیری داراییها از CDN، ساخت، امضا، بارگذاری در App Store Connect، ارسال اعلان به Slack. کل خط لوله با یک دستور اجرا میشود: fastlane release.
Fastfile — فایلی به زبان DSL شبیه Ruby که دنبالهای از اقدامات (lane) را توصیف میکند. هر lane یک وظیفه جداگانه است: beta (ساخت برای تست)، release (انتشار)، screenshots (تولید اسکرینشاتها). Laneها میتوانند laneهای دیگر را با پارامترهای ارسالی فراخوانی کنند.
# Fastfile — پیکربندی خط لوله ساخت برنامه iOS
fastlane_version "2.220.0"
default_platform :ios
platform :ios do
desc "ساخت و استقرار بیلد TestFlight"
lane :beta do |options|
increment_build_number(
build_number: options[:build]
)
match(type: :appstore)
gym(
scheme: "MyApp",
export_method: "app-store",
configuration: "Release"
)
upload_to_testflight(
app_identifier: "com.example.myapp"
)
slack(
message: "بیلد #{options[:build]} در TestFlight بارگذاری شد"
)
end
endLane beta به ترتیب اجرا میکند: افزایش شماره ساخت (increment_build_number)، همگامسازی گواهیها (match)، کامپایل بایگانی (gym)، بارگذاری در TestFlight (upload_to_testflight) و ارسال اعلان به Slack. پارامتر :build به عنوان آرگومان نامگذاری شده به lane ارسال میشود.
Fastlane از هر دو پلتفرم در یک Fastfile پشتیبانی میکند. برای Android از lane داخل platform :android با اکشنهای gradle، supply و google_play_track_version_codes استفاده میشود.
platform :android do
desc "ساخت APK و انتشار در Google Play Internal Testing"
lane :beta do
gradle(
task: "assemble",
build_type: "Release",
flavor: "Production"
)
supply(
track: "internal",
apk_paths: ["app/build/outputs/apk/release/app-release.apk"]
)
end
endFastlane شامل بیش از ۲۰۰ اکشن داخلی است. در زیر — مهمترینها برای توسعه موبایل، دستهبندی شده بر اساس گروه.
| اکشن | پلتفرم | کاربرد |
|---|---|---|
| match | iOS | همگامسازی گواهیها و پروفایلهای provisioning از طریق Git |
| gym | iOS | کامپایل بایگانی .app و .ipa |
| scan | iOS | اجرای تستهای UI روی شبیهساز |
| snapshot | iOS | تولید خودکار اسکرینشاتها روی دستگاههای مختلف |
| deliver | iOS | بارگذاری بیلد، اسکرینشاتها و فرادادهها در App Store Connect |
| pilot | iOS | مدیریت TestFlight: بارگذاری بیلد، افزودن تستکنندگان |
| gradle | Android | اجرای وظایف Gradle: assemble، test، bundle |
| supply | Android | بارگذاری APK/AAB و فرادادهها در Google Play Console |
| screengrab | Android | اسکرینشاتهای خودکار برای Google Play |
| firebase_app_distribution | هر دو | بارگذاری بیلد در Firebase App Distribution |
match — گِم Fastlane برای همگامسازی گواهیهای iOS و پروفایلهای provisioning بین توسعهدهندگان. همه اسرار در مخزن Git رمزگذاریشده یا S3 ذخیره میشوند. Match به طور خودکار گواهیها را در صورت عدم وجود ایجاد میکند و پس از انقضا آنها را بهروز میکند.
# راهاندازی match برای پروژه جدید
$ fastlane match init
# ایجاد و همگامسازی گواهیهای App Store
$ fastlane match appstore
# ایجاد گواهیهای Development برای تیم
$ fastlane match development
# بهروزرسانی همه گواهیها پس از انقضا
$ fastlane match --forceMatch کلیدهای خصوصی را با عبارتی رمز عبور که فقط توسعهدهندگان میدانند ذخیره میکند. هر توسعهدهنده مخزن گواهیها را کلون میکند و match را برای نصب پروفایلهای جاری اجرا میکند. مدت اعتبار گواهیهای Apple ۱ سال است، match به طور خودکار آنها را تمدید میکند.
Fastlane با هر پلتفرم CI/CD ادغام میشود: GitHub Actions، GitLab CI، CircleCI، Bitrise، Jenkins و Xcode Cloud (از طریق xcode-build). Fastlane روی CI از طریق fastlane <lane_name> اجرا میشود و در صورت شکست هر مرحله کد خطا برمیگرداند.
پیکربندی برای GitHub Actions شامل نصب Ruby، fastlane و اجرای lane از طریق bundle exec fastlane است. برای ساخت iOS به runner macOS نیاز است. برای Android میتوان از ubuntu-latest استفاده کرد که ارزانتر است.
# .github/workflows/deploy.yml — CI/CD با Fastlane
name: Deploy Mobile App
on:
push:
branches: [main]
jobs:
ios-deploy:
runs-on: macos-14
steps:
- uses: actions/checkout@v4
- uses: ruby/setup-ruby@v1
with:
ruby-version: "3.3"
- run: bundle install
- run: bundle exec fastlane beta
- env:
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}Workflow هنگام push به main اجرا میشود. runner macOS bundle exec fastlane beta را از Fastfile اجرا میکند. MATCH_PASSWORD از طریق GitHub Secrets برای رمزگشایی گواهیها ارسال میشود. پس از اتمام lane، اکشن Slack اعلان ارسال میکند.
RubyGems — مدیر بسته برای Ruby. Fastlane از طریق افزونهها گسترش مییابد — گِمهایی که اکشنهای جدید اضافه میکنند. افزونه fastlane-plugin-versioning نسخهها را مدیریت میکند، fastlane-plugin-firebase_app_distribution بیلدها را در Firebase بارگذاری میکند. در GitHub بیش از ۵۰۰ افزونه Fastlane وجود دارد.
Gemfile در ریشه پروژه نسخههای همه وابستگیها را برای تکرارپذیری ساختها تثبیت میکند. bundle install گِمها را مطابق Gemfile.lock نصب میکند. گِمهای اصلی برای توسعه موبایل: fastlane، cocoapods (وابستگیهای iOS)، xcodeproj (کار با .xcodeproj).
# Gemfile برای پروژه موبایل
source "https://rubygems.org"
gem "fastlane", "~> 2.220"
plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile')
eval_gemfile(plugins_path) if File.exist?(plugins_path)Fastlane — تنها ابزار خودکارسازی نیست. بیایید آن را با جایگزینهای اصلی بر اساس معیارهای مهم برای تیم موبایل مقایسه کنیم.
| معیار | Fastlane (Ruby) | Bitrise (وب) | Xcode Cloud (Apple) | GitHub Actions (YAML) |
|---|---|---|---|---|
| انعطافپذیری | حداکثر (کد) | متوسط (steps) | کم (محدود) | زیاد |
| iOS | پشتیبانی کامل | کامل | کامل (داخلی) | از طریق self-hosted macOS |
| Android | پشتیبانی کامل | کامل | ندارد | کامل |
| گواهیها (match) | داخلی | از طریق Code Signing | خودکار | از طریق fastlane |
| اجرای محلی | بله | خیر (فقط CI) | خیر | از طریق act |
| افزونهها | ۵۰۰+ | ۲۰۰+ ادغام | ندارد | ۲۰٬۰۰۰+ اکشن |
Fastlane همچنان انعطافپذیرترین ابزار برای خطوط لوله پیچیده باقی میماند. Bitrise برای تیمهای بدون توسعهدهنده Ruby مناسب است. Xcode Cloud — برای پروژههای ساده iOS. GitHub Actions — اگر تیم قبلاً از GitHub استفاده میکند.
سوالات متداول
Ruby برای نوشتن برنامههای موبایل استفاده نمیشود، بلکه برای خودکارسازی فرایندهای ساخت، تست و استقرار از طریق Fastlane استفاده میشود. Fastlane استاندارد دوفاکتو برای CI/CD در توسعه iOS و Android است.
Fastlane روی macOS، Linux و Windows کار میکند، اما برای ساخت iOS به Xcode و macOS نیاز است. ساختهای Android روی هر پلتفرمی انجام میشوند. توسعهدهندگان به صورت محلی از macOS استفاده میکنند، روی CI — macOS برای iOS و Linux برای Android.
درک پایهای Ruby برای کار با Fastlane کافی است. Fastlane از DSL شبیه Ruby در Fastfile استفاده میکند. برای وظایف معمولی، دانش گِمها، بلوکهای do-end و نحوی پایه کافی است. دانش عمیق Ruby لازم نیست.
جایگزینها: Gradle برای Android (داخلی)، Xcode Cloud (Apple)، Bitrise (رابط وب)، GitHub Actions (YAML). Fastlane به لطف اکوسیستم غنی اکشنها و افزونهها همچنان منعطفترین ابزار است.
بله، Fastlane توسط شرکتهای بزرگ استفاده میشود. همه اکشنها و فایلهای پیکربندی در مخزن نسخهبندی میشوند و match ذخیرهسازی امن گواهیها را در مخزن یا S3 فراهم میکند.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.