Menjalankan pipeline CI/CD iOS di mesin Anda sendiri
Kebanyakan saran CI iOS mengoptimalkan hal yang salah. Langkah build jarang menjadi tempat menit-menit itu habis. Berikut apa yang benar-benar berpengaruh di pipeline nyata, dan bagaimana hardware khusus mengubah hitungannya.
Ke mana sebenarnya menit itu habis
Di runner hosted, job iOS biasa menghabiskan banyak waktu sebelum mengompilasi satu baris kode Anda. Ia me-resolve dan mengunduh dependensi, mengisi folder DerivedData yang kosong, memasang tooling, dan menyalakan simulator. Pekerjaan itu terulang di setiap run karena mesinnya dihancurkan sesudahnya.
Di mesin khusus, sebagian besar pekerjaan itu sudah selesai. Dalam benchmark kami dengan aplikasi iOS Wikipedia, clean build di M6 mini 53 persen lebih cepat daripada di runner standar GitHub. Job CI biasa turun dari 269 detik menjadi 27 detik. Penyebabnya, Mac khusus menyimpan folder build-nya dan hanya membangun ulang yang berubah.
Pipeline yang layak ditiru
- Bagi pekerjaannya. Lint, test untuk Swift package bersama, dan otomatisasi rilis bisa berjalan di Linux. Taruh hanya pekerjaan simulator dan perangkat di Mac.
- Cache path yang tepat. DerivedData, SwiftPM, CocoaPods dan Gems. Di mesin khusus, semuanya tersimpan tanpa biaya tambahan.
- Pakai fastlane untuk bagian yang membosankan. Lane untuk build, test, screenshot, dan upload memberi Anda perintah yang sama di lokal dan di CI.
- Jaga signing tetap bisa ditebak. fastlane match dengan repository sertifikat privat masih menjadi cara paling andal. MacRun tidak mengurus signing untuk Anda, jadi tidak ada kejutan juga.
- Pangkas matrix. Matrix perangkat dan OS lengkap cukup di main dan run malam hari, bukan di setiap pull request.
Contoh workflow
name: iOS
on: [pull_request]
jobs:
test:
runs-on: [self-hosted, macOS, macrun-unit-01]
steps:
- uses: actions/checkout@v4
- run: sudo xcodes select 26.6
- run: bundle install
- run: bundle exec fastlane testKarena runner-nya khusus, tidak ada step pemulihan cache di sini. Dependensi dan DerivedData dari run sebelumnya sudah ada di disk.
Yang tidak terselesaikan dengan ini
Hardware khusus tidak memperbaiki test suite yang lambat, grafik modul yang memaksa rebuild penuh, atau test simulator yang tidak stabil. Ia menghapus beban setup yang berulang dan argometer per menit. Sisanya tetap pekerjaan engineering di pihak Anda.
Pertanyaan yang sering diajukan
Bagaimana cara mempercepat build iOS di GitHub Actions?
+
Kurangi setup yang berulang sebelum mengoptimalkan kompilasi. Simpan cache DerivedData, SwiftPM dan CocoaPods, pindahkan pekerjaan non-Mac ke runner Linux, pangkas matrix perangkat di pull request, dan kunci satu versi Xcode. Di hardware khusus, cache tersimpan otomatis di antara run.
Bisakah saya memakai fastlane di runner macOS self-hosted?
+
Bisa. fastlane, CocoaPods, Ruby dan Node sudah terpasang di mesin MacRun, dan Anda menjalankannya persis seperti di lokal. Signing dengan fastlane match bekerja sama seperti di Mac mana pun.
Apakah MacRun mengurus code signing untuk saya?
+
Tidak, dan itu disengaja. Anda tetap memegang kendali atas sertifikat dan provisioning profile, biasanya dengan fastlane match ke repository privat milik Anda. Kami menyediakan mesin, bukan layanan signing terkelola.
Bisakah saya menjalankan UI test iOS di runner khusus?
+
Bisa. Simulator berjalan normal. Karena mesin tidak didaur ulang, status boot simulator dan derived data tetap hangat di antara run. Biasanya ini memangkas beberapa menit dari job UI test.