CI/CD XCode With Bamboo — Full Command Line

Yovi Eka Putra
3 min readJan 24, 2021

Halo, ini merupakan tulisan pertama saya di Medium, semoga kedepannya tetap konsiten untuk saling berbuat baik dan berbagi walaupun itu sekecil biji zarah. 😄

Postingan pertama ini saya akan berbagi mengenai bagaimana implementasi CI/CD XCode project dengan salah satu produk CI/CI Atlassian yaitu Bamboo. Kenapa bamboo? yah jawabannya karena fasilitas perusahaan saja. 😄

Pada dasarnya bamboo memiliki Add-on yang sudah support dengan build dan upload ke App Store Connect, namun tidak semua yang suka dengan fitur Add-on. Kenapa demikian? yaa kurang menantang aja kali yak ✌️.

Intinya begini, jika kita mengetahui konsep dan cara kerja dari Add-on baik build dan upload tersebut, maka untuk implementasi CI/CD dengan tools apapun itu lebih mudah, bahkan mungkin langsung dari XCode pribadi.

Oke, sekarang next to the point.

Jadi, step-step task untuk CI/CD XCode project di Bamboo adalah sebagai berikut, dengan task type semuanya adalah Script:
1. Checkout Repository
2. Setting Next Build Number
3. Build Archive Project
4. Export IPA File
5. Upload to App Store Connect

Baik mari kita bahas satu-persatu:

  • Checkout Repository
    Checkout repository tujuannya untuk mengambil source code yang akan di delivery. Task ini akan di eksekusi oleh Bamboo per-periodic/saat bamboo mendeteksi perubahan sourcecode di git server sesuai branch yang digunakan.
git clone URL.git
cd <project>
git checkout something_branch
  • Setting Next Build Number
    Setelah source code didapat dari git server, selanjutnya adalah melakukan setting next build number project agar saat upload ke App Store Connect tidak terjadi redundant pada binary build number. Untuk setting next build number ada beberapa cara, tapi disini kita bagi 2 cara yaitu:

Auto Generate
Increase dari current build number.

xcrun agvtool next-version -all

Noted: Secara otomatis akan increase build number sesuai dengan build number terakhir di source code.

Manual
Set secara manual build number.

xcrun agvtool new-version -all <buildNumber>

Noted: <buildNumber> sesuaikan dengan build number yang diinginkan.

Reference : https://developer.apple.com/library/archive/qa/qa1827/_index.html

  • Build Archive Project
    Setelah build number di set ke source code project, saatnya kita akan me-eksekusi build dan archive project.
xcodebuild -workspace <your_workspace_name>.xcworkspace -scheme <your_scheme> -sdk iphoneos archive -archivePath $PWD/build/<archive_name>.xcarchive

Noted: <tag> workspace dan scheme silahkan ganti sesuai kebutuhan, dan untuk archive name sesuai yang diinginkan.

  • Export IPA File
    Setelah build archive berhasil di eksekusi, selanjutnya generate IPA file dari archive file.
xcodebuild -exportArchive -archivePath $PWD/build/<your_archive_name>.xcarchive -exportOptionsPlist exportOptions.plist -exportPath $PWD/build

Noted: Archive name sesuaikan dengan step build archive project.

Sekarang, kita perlu membuat new file untuk exportOptions.plist, silahkan disimpan di path yang mudah diakses. Command line diatas, exportOptions.plist nya di simpan satu folder dengan XCode project.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>method</key>
<string>app-store</string>
<key>signingStyle</key>
<string>automatic</string>
<key>teamID</key>
<string>YourTeamID</string>
</dict>
</plist>

Noted: YourTeamID dapat copy dari App Store Connect atau di Provisioning Profile.

Reference:
https://gist.github.com/cocoaNib/502900f24846eb17bb29

  • Upload IPA File To App Store Connect
    Oke, sekarang di step terakhir yaitu upload IPA file yang sudah di generate sebelumnya ke App Store Connect. Sebelumnya pastikan pada App Store Connect sudah ada App Store untuk project yang akan di upload.
xcrun altool --upload-app --type ios --file <your_ipa_filename.ipa> --username <your_email> --password <your_password>

Noted: Username dan password merupakan akun App Store Connect, password yang digunakan disini dalah share password yang di generate dari sini (Security -> App-Specific Passwords -> Generate Password).

Semoga tulisan ini membantu bagi rekan-rekan yang membutuhkan build-archive-upload to app store connect dengan full command line. Ditunggu feedback-nya, thank you 😃

--

--