Membangun, menguji, dan menyebarkan aplikasi Xcode

Layanan Azure DevOps | Azure DevOps Server | Azure DevOps Server 2022

Artikel ini memperlihatkan kepada Anda cara membangun dan menyebarkan proyek Xcode dengan alur YAML di Azure Pipelines.

Prasyarat

  • Organisasi dan proyek Azure DevOps tempat Anda memiliki izin untuk membuat alur dan menyebarkan aplikasi.
  • Proyek dan aplikasi Xcode 9+ di repositori GitHub. Untuk informasi selengkapnya, lihat Membuat Proyek Xcode untuk Aplikasi.

Membuat alur kerja

Penting

Selama prosedur GitHub, Anda mungkin diminta untuk membuat koneksi layanan GitHub atau dialihkan ke GitHub untuk masuk, menginstal Azure Pipelines, atau mengotorisasi Azure Pipelines. Ikuti instruksi di layar untuk menyelesaikan proses. Untuk informasi selengkapnya, lihat Akses ke repositori GitHub.

  1. Dalam proyek Azure DevOps Anda, pilih Pipeline>Pipeline baru, atau Buat pipeline jika pipeline ini adalah yang pertama dalam proyek.
  2. Pilih GitHub sebagai lokasi kode sumber Anda.
  3. Pada layar Pilih repositori, pilih repositori untuk proyek Xcode Anda.
  4. Pada layar Konfigurasikan alur Anda, pilih Xcode.

Azure Pipelines menyediakan alur kerja pemula berdasarkan templat Xcode. Tinjau kode di azure-pipelines.yml.

Membangun lingkungan

Xcode telah diinstal sebelumnya pada agen macOS yang dihosting Microsoft di Azure Pipelines, sehingga Anda tidak perlu menyiapkan infrastruktur apa pun. Untuk versi tepat dari Xcode yang telah diinstal sebelumnya, lihat perangkat lunak agen yang dihosting oleh Microsoft.

Simpul pool di bagian atas file azure-pipelines.yml Anda memilih kumpulan agen yang sesuai.

pool:
  vmImage: 'macOS-latest'

Tugas Penyusunan Xcode

Tugas Xcode membangun, menguji, atau mengarsipkan ruang kerja Xcode di macOS, dan dapat secara opsional mengemas aplikasi. Langkah Xcode dalam file azure-pipelines.yml starter membangun proyek iOS dengan menggunakan skema defaultnya, untuk Simulator, dan tanpa kemasan. Anda dapat mengubah nilai dan menambahkan parameter agar sesuai dengan konfigurasi proyek Anda.

Build pengembangan:

steps:
- task: Xcode@5
  inputs:
    actions: 'build'
    scheme: ''
    sdk: 'iphonesimulator'
    configuration: 'Debug'
    xcWorkspacePath: '**/*.xcodeproj/project.xcworkspace'
    xcodeVersion: 'default' # Options: 10, 11, 12, 13, 14, default, specifyPath

Build untuk rilis di App Store:

Untuk rilis produksi, tentukan versi Xcode eksplisit, skema aplikasi Anda, dan konfigurasi Rilis:

steps:
- task: Xcode@5
  inputs:
    actions: 'build'
    scheme: 'YourAppScheme'
    sdk: 'iphoneos'
    configuration: 'Release'
    xcWorkspacePath: '**/*.xcodeproj/project.xcworkspace'
    xcodeVersion: '14'
    packageApp: true
    exportPath: '$(build.artifactStagingDirectory)'
    exportOptions: 'automatic'

Perbedaan utama untuk produksi:

  • xcodeVersion: Tentukan versi tetap (misalnya, '14') alih-alih 'default' untuk build yang konsisten dan dapat direproduksi.
  • skema: Ganti string kosong dengan nama skema aplikasi Anda yang sebenarnya.
  • sdk: Gunakan 'iphoneos' untuk build perangkat; gunakan 'iphonesimulator' untuk build simulator.
  • konfigurasi: Gunakan 'Release' untuk produksi; gunakan 'Debug' untuk pengembangan.
  • packageApp: Atur ke true untuk menghasilkan .ipa file untuk distribusi.
  • exportPath: Mengarahkan output paket ke direktori penahapan build untuk penerbitan artefak.

Simpan dan jalankan pipeline

Saat Anda selesai meninjau kode di azure-pipelines.yml, pilih Simpan dan jalankan.

Cuplikan layar tombol Simpan dan jalankan di alur YAML baru.

Secara opsional, edit pesan Commit dan berikan deskripsi. Lalu pilih Simpan dan jalankan lagi untuk menerapkan file azure-pipelines.yml ke repositori Anda dan memulai build.

Halaman jalur build menunjukkan detail dan progres build. Jika Anda ingin menonton pipeline Anda beraksi, pilih Tugas di bagian bawah halaman.

Anda sekarang memiliki alur YAML yang berfungsi, azure-pipelines.yml, di repositori Anda yang siap untuk disesuaikan.

Personalisasikan alur Anda

Untuk membuat perubahan pada alur Anda, pilih Edit di halaman alur. Bagian berikut menjelaskan beberapa cara umum untuk menyesuaikan alur Xcode Anda berdasarkan kebutuhan spesifik Anda:

  • Penandatanganan dan provisi: Diperlukan untuk menyebarkan ke perangkat fisik atau App Store.
  • Manajemen dependensi: Konfigurasikan autentikasi untuk repositori privat.
  • Manajemen artefak: Simpan output build untuk pengujian dan penyebaran.
  • Distribusi: Mengotomatiskan rilis ke TestFlight atau App Store.

Menambahkan tugas penandatanganan dan penyediaan

Untuk menjalankan aplikasi Xcode di perangkat fisik atau menerbitkannya ke App Store, Anda perlu menandatangani dan memprovisikan aplikasi. Proses ini melibatkan penggunaan sertifikat penandatanganan P12 (kredensial keamanan yang memverifikasi identitas aplikasi Anda) dan profil provisi (yang mengotorisasi aplikasi Anda untuk perangkat atau distribusi tertentu). Untuk informasi selengkapnya, lihat Menandatangani aplikasi seluler Anda.

Untuk membuat sertifikat dan profil tersedia untuk Xcode selama proses build, tambahkan tugas Instal Sertifikat Apple dan tugas Instal Profil Provisi Apple ke alur Anda.

Mengelola dependensi

Proyek Xcode Anda mungkin menggunakan manajer dependensi untuk menangani pustaka dan kerangka kerja pihak ketiga. Bagian berikut menjelaskan cara mengonfigurasi autentikasi untuk repositori privat dengan manajer dependensi yang berbeda.

Pengelola Paket Swift

Swift Package Manager (SPM) adalah manajer dependensi asli Apple dan diintegrasikan langsung ke dalam Xcode. Untuk proyek yang menggunakan SPM dengan paket privat, Anda perlu mengonfigurasi autentikasi Git.

Jika paket Swift privat Anda dihosting di GitHub, siapkan autentikasi dengan menggunakan variabel lingkungan bernama GITHUB_ACCESS_TOKEN dengan nilai token akses pribadi yang memiliki akses ke repositori.

Jangan tambahkan token rahasia langsung ke YAML alur Anda, karena tindakan ini mengeksposnya dalam kode sumber Anda. Untuk informasi selengkapnya, lihat Mengatur variabel rahasia.

Kode alur berikut menggunakan variabel rahasia bernama myGitHubAccessToken untuk autentikasi saat menyelesaikan dependensi Paket Swift:

- task: Xcode@5
  inputs:
    actions: 'build'
    scheme: ''
    sdk: 'iphoneos'
    configuration: 'Release'
    xcWorkspacePath: '**/*.xcodeproj/project.xcworkspace'
  env:
    GITHUB_ACCESS_TOKEN: $(myGitHubAccessToken)

Untuk paket privat yang dihosting di Azure Repos atau penyedia Git lainnya, konfigurasikan kredensial Git yang sesuai sebelum langkah build.

CocoaPods

Jika proyek Anda menggunakan CocoaPods, gunakan tugas CocoaPods untuk menginstal dependensi.

- task: CocoaPods@0
  inputs:
    workingDirectory: '$(System.DefaultWorkingDirectory)'
    forceRepo: false

Carthage

Jika proyek Anda menggunakan Carthage (manajer dependensi untuk proyek iOS/macOS) dengan repositori Carthage privat, siapkan autentikasi dengan menggunakan variabel lingkungan bernama GITHUB_ACCESS_TOKEN dengan nilai token yang memiliki akses ke repositori. Carthage secara otomatis mendeteksi dan menggunakan variabel lingkungan ini.

Jangan tambahkan token rahasia langsung ke YAML alur Anda, karena tindakan ini mengeksposnya dalam kode sumber Anda. Untuk informasi selengkapnya, lihat Mengatur variabel rahasia.

Kode alur berikut menggunakan variabel rahasia bernama myGitHubAccessToken untuk nilai GITHUB_ACCESS_TOKEN variabel lingkungan.

- script: carthage update --platform iOS
  displayName: 'Update Carthage dependencies'
  env:
    GITHUB_ACCESS_TOKEN: $(myGitHubAccessToken)

Uji di perangkat yang dihosting Azure

Visual Studio App Center dihentikan pada 31 Maret 2025. Pelajari tentang alternatif yang direkomendasikan.

Simpan artefak dengan catatan build

Untuk menyimpan file Paket AppStore (IPA) iOS Anda bersama catatan build atau untuk uji coba dan menerapkannya di pipeline berikutnya, tambahkan tugas Salin File dan Terbitkan Artefak Pipeline ke pipeline Anda.

- task: CopyFiles@2
  inputs:
    contents: '**/*.ipa'
    targetFolder: '$(build.artifactStagingDirectory)'
- task: PublishPipelineArtifact@1
  inputs:
    targetPath: '$(build.artifactStagingDirectory)'
    artifact: 'drop'

Menyebarkan ke Apple App Store atau TestFlight

Untuk mendistribusikan aplikasi kepada penguji atau pengguna beta, gunakan TestFlight Apple atau sebarkan langsung ke App Store. Lihat bagian di bawah ini untuk distribusi Apple App Store.

Untuk pengujian beta dan umpan balik pengguna, pertimbangkan untuk menggunakan:

Instal ekstensi Apple App Store dan sebarkan ke Apple App Store

Untuk mengotomatiskan interaksi dengan Apple App Store, instal ekstensi Apple App Store, lalu gunakan tugas berikut di alur Anda. Secara default, tugas-tugas ini mengautentikasi ke Apple dengan menggunakan koneksi layanan yang harus Anda konfigurasi.

Untuk mengotomatiskan rilis pembaruan ke aplikasi beta TestFlight iOS atau aplikasi produksi yang ada di App Store, tambahkan tugas Rilis App Store.

Ada batasan saat menggunakan tugas ini dengan autentikasi dua faktor Apple. Autentikasi Apple khusus wilayah, dan token sesi fastlane (kredensial sementara yang digunakan untuk mengautentikasi dengan Apple) kedaluwarsa dengan cepat dan harus dibuat ulang dan dikonfigurasi ulang secara berkala.

- task: AppStoreRelease@1
  displayName: 'Publish to the App Store TestFlight track'
  inputs:
    serviceEndpoint: 'My Apple App Store service connection' 
    appIdentifier: com.yourorganization.testapplication.etc
    ipaPath: '$(build.artifactstagingdirectory)/**/*.ipa'
    shouldSkipWaitingForProcessing: true
    shouldSkipSubmission: true

Untuk mengotomatiskan promosi aplikasi yang dikirim sebelumnya dari iTunes Connect ke App Store, tambahkan Tugas Promosi App Store.

- task: AppStorePromote@1
  displayName: 'Submit to the App Store for review'
  inputs:
    serviceEndpoint: 'My Apple App Store service connection'
    appIdentifier: com.yourorganization.testapplication.etc
    shouldAutoRelease: false