App Center Distribute – Pembaruan iOS Dalam Aplikasi
Penting
Visual Studio App Center dijadwalkan untuk dihentikan pada 31 Maret 2025. Meskipun Anda dapat terus menggunakan Visual Studio App Center hingga sepenuhnya dihentikan, ada beberapa alternatif yang direkomendasikan yang dapat Anda pertimbangkan untuk bermigrasi.
Pelajari selengkapnya tentang garis waktu dukungan dan alternatif.
App Center Distribute akan memungkinkan pengguna Anda menginstal versi baru aplikasi saat Anda mendistribusikannya melalui App Center. Dengan versi baru aplikasi yang tersedia, SDK akan menyajikan dialog pembaruan kepada pengguna untuk mengunduh atau menunda versi baru. Setelah mereka memilih untuk memperbarui, SDK akan mulai memperbarui aplikasi Anda.
Catatan
Ada beberapa hal yang perlu dipertimbangkan saat menggunakan pembaruan dalam aplikasi:
- Jika Anda telah merilis aplikasi di App Store, pembaruan dalam aplikasi akan dinonaktifkan.
- Jika Anda menjalankan pengujian UI otomatis, pembaruan dalam aplikasi yang diaktifkan akan memblokir pengujian UI otomatis Anda karena mereka akan mencoba mengautentikasi terhadap backend App Center. Sebaiknya jangan aktifkan App Center Distribute untuk target pengujian UI Anda.
Catatan
4.0.0
Dalam versi perubahan pemecahan App Center diperkenalkan. Ikuti bagian Migrasi ke App Center SDK 4.0.0 dan yang lebih tinggi untuk memigrasikan App Center dari versi sebelumnya.
Penting
App Center SDK tidak mendukung beberapa aplikasi jendela yang diperkenalkan di iOS 13.
Ikuti bagian Memulai jika Anda belum mengonfigurasi SDK di aplikasi Anda.
App Center SDK dirancang dengan pendekatan modular – Anda hanya perlu mengintegrasikan modul layanan yang Anda minati.
Jika Anda mengintegrasikan App Center ke dalam aplikasi melalui Cocoapods, tambahkan dependensi berikut ke podfile Anda dan jalankan pod install
.
pod 'AppCenter/Distribute'
Tambahkan dependensi berikut ke Anda
Cartfile
untuk menyertakan Distribusi App Center.# Use the following line to get the latest version of App Center github "microsoft/appcenter-sdk-apple"
# Use the following line to get the specific version of App Center github "microsoft/appcenter-sdk-apple" ~> X.X.X
Jalankan
carthage update
.Buka tab Pengaturan umum target aplikasi Anda. Seret dan letakkan file AppCenterDistribute.framework dari folder Carthage/Build/iOS ke bagian Kerangka Kerja dan Pustaka Tertaut di XCode.
Seret dan letakkan AppCenterDistributeResources.bundle dari AppCenterDistribute.framework ke Project Navigator XCode.
Dialog akan muncul, pastikan target aplikasi Anda dicentang. Lalu klik Selesai.
- Dari menu Xcode klik File > Swift Packages > Add Package Dependency.
- Dalam dialog yang muncul, masukkan URL repositori:
https://github.com/microsoft/appcenter-sdk-apple.git
. - Di Versi, pilih Naik ke Utama Berikutnya dan ambil opsi default.
- Pilih AppCenterDistribute di kolom Produk Paket .
Jika Anda tidak ingin menggunakan Cocoapods, Anda dapat mengintegrasikan modul dengan menyalin biner ke dalam proyek Anda. Ikuti langkah berikut:
Catatan
App Center SDK mendukung penggunaan XCframework
. Jika Anda ingin mengintegrasikan XCframeworks ke dalam proyek Anda, unduh AppCenter-SDK-Apple-XCFramework.zip dari halaman rilis dan unzip. Konten folder yang dihasilkan tidak spesifik untuk platform, sebaliknya berisi XCframeworks untuk setiap modul. Mereka dapat diintegrasikan dengan cara yang sama seperti kerangka kerja biasa, seperti yang dijelaskan di bawah ini.
Unduh kerangka kerja App Center SDK yang disediakan sebagai file zip.
Buka zip file dan Anda akan melihat folder bernama AppCenter-SDK-Apple/iOS yang berisi kerangka kerja yang berbeda untuk setiap layanan App Center. Kerangka kerja yang disebut
AppCenter
diperlukan dalam proyek karena berisi kode yang dibagikan antara modul yang berbeda.[Opsional] Buat subdirektori untuk pustaka pihak ketiga.
- Sebagai praktik terbaik, pustaka pihak ketiga biasanya berada di dalam subdirektori, yang sering disebut Vendor. Jika proyek Anda tidak diatur dengan subdirektori untuk pustaka, buat subdirektori Vendor sekarang.
- Buat grup bernama Vendor di dalam proyek Xcode Anda untuk meniru struktur file pada disk.
Buka Finder dan salin folder AppCenter-SDK-Apple/iOS yang belum di-zip ke folder proyek anda di lokasi yang Anda inginkan.
Tambahkan kerangka kerja SDK ke proyek di Xcode:
- Pastikan Navigator Proyek terlihat (⌘+1).
- Sekarang seret dan letakkan AppCenter.framework, AppCenterDistribute.framework, dan AppCenterDistributeResources.bundle dari Finder (yang ada di dalam folder Vendor ) ke dalam Project Navigator Xcode. AppCenter.framework diperlukan untuk memulai SDK. Pastikan modul ditambahkan ke proyek Anda, jika tidak, modul lain tidak akan berfungsi, dan proyek Anda tidak akan berhasil dikompilasi.
- Dialog akan muncul, pastikan target aplikasi Anda dicentang. Lalu klik Selesai.
App Center hanya menggunakan modul tertentu yang Anda panggil di aplikasi Anda. Anda harus secara eksplisit memanggil masing-masing saat memulai SDK.
Buka file AppDelegate.m proyek di File Objective-C atau AppDelegate.swift di Swift dan tambahkan pernyataan impor berikut:
@import AppCenter;
@import AppCenterDistribute;
import AppCenter
import AppCenterDistribute
Tambahkan Distribute
ke metode Anda start:withServices:
untuk memulai layanan Distribusi App Center.
Sisipkan baris berikut untuk memulai SDK di kelas AppDelegate.m proyek untuk kelas Objective-C atau AppDelegate.swift untuk Swift dalam didFinishLaunchingWithOptions
metode .
[MSACAppCenter start:@"{Your App Secret}" withServices:@[[MSACDistribute class]]];
AppCenter.start(withAppSecret: "{Your App Secret}", services: [Distribute.self])
Pastikan Anda telah mengganti {Your App Secret}
dalam sampel kode di atas dengan Rahasia Aplikasi Anda. Lihat juga bagian Memulai jika Anda belum mengonfigurasi SDK di aplikasi Anda.
- Dalam file Info.plist proyek, tambahkan kunci baru untuk
URL types
dengan mengklik tombol '+' di samping "Daftar Properti Informasi" di bagian atas. Jika Xcode menampilkan Info.plist Anda sebagai kode sumber, lihat tip di bawah ini. - Ubah jenis kunci menjadi Array.
- Tambahkan entri baru ke array (
Item 0
) dan ubah jenisnya menjadi Kamus. - Di bawah
Item 0
, tambahkanURL Schemes
kunci dan ubah jenisnya menjadi Array. - Di bawah kunci Anda
URL Schemes
, tambahkan entri baru (Item 0
). - Di bawah
URL Schemes
>Item 0
, ubah nilai menjadiappcenter-{APP_SECRET}
dan ganti{APP_SECRET}
dengan Rahasia Aplikasi aplikasi Anda.
Tip
Jika Anda ingin memverifikasi bahwa Anda memodifikasi Info.plist dengan benar, buka sebagai kode sumber. Ini harus berisi entri berikut dengan Rahasia Aplikasi Anda alih-alih {APP_SECRET}
:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>appcenter-{APP_SECRET}</string>
</array>
</dict>
</array>
Secara default, Distribusikan menggunakan grup distribusi publik. Jika Anda ingin menggunakan grup distribusi privat, Anda harus mengaturnya secara eksplisit melalui updateTrack
properti .
MSACDistribute.updateTrack = MSACUpdateTrackPrivate;
Distribute.updateTrack = .private
Catatan
Nilai defaultnya adalah UpdateTrack.public
. Properti ini hanya dapat diperbarui sebelum AppCenter.start
panggilan metode. Perubahan pada trek pembaruan tidak dipertahankan ketika proses aplikasi dimulai ulang, sehingga jika properti tidak selalu diperbarui sebelum AppCenter.start
panggilan, itu akan ber publik, secara default.
Setelah panggilan ini, jendela browser akan terbuka untuk mengautentikasi pengguna. Semua pemeriksaan pembaruan berikutnya akan mendapatkan rilis terbaru di trek privat.
Jika pengguna berada di trek privat, artinya setelah autentikasi berhasil, mereka akan mendapatkan rilis terbaru dari grup distribusi privat tempat mereka menjadi anggotanya. Jika pengguna berada di trek publik, artinya mereka akan mendapatkan rilis terbaru dari grup distribusi publik apa pun.
Secara default, SDK secara otomatis memeriksa rilis baru:
- Ketika aplikasi dimulai.
- Ketika aplikasi masuk ke latar belakang kemudian di latar depan lagi.
- Saat mengaktifkan modul Distribusikan jika sebelumnya dinonaktifkan.
Jika Anda ingin memeriksa rilis baru secara manual, Anda dapat menonaktifkan pemeriksaan otomatis untuk pembaruan. Untuk melakukan ini, panggil metode berikut sebelum SDK dimulai:
[MSACDistribute disableAutomaticCheckForUpdate];
Distribute.disableAutomaticCheckForUpdate()
Catatan
Metode ini harus dipanggil sebelum AppCenter.start
panggilan metode.
Kemudian Anda dapat menggunakan checkForUpdate
API yang dijelaskan di bagian berikut.
[MSACDistribute checkForUpdate];
Distribute.checkForUpdate()
Ini mengirimkan permintaan ke App Center dan menampilkan dialog pembaruan jika ada rilis baru yang tersedia.
Catatan
Pemeriksaan manual untuk panggilan pembaruan berfungsi bahkan ketika pembaruan otomatis diaktifkan. Pemeriksaan manual untuk pembaruan diabaikan jika pemeriksaan lain sudah dilakukan. Pemeriksaan manual untuk pembaruan tidak akan diproses jika pengguna telah menunda pembaruan (kecuali versi terbaru adalah pembaruan wajib).
Anda dapat dengan mudah menyediakan string sumber daya Anda sendiri jika Anda ingin melokalisasi teks yang ditampilkan dalam dialog pembaruan. Lihatlah file string ini. Gunakan nama/kunci string yang sama dan tentukan nilai yang dilokalkan untuk direfleksikan dalam dialog dalam file string aplikasi Anda sendiri.
Anda dapat menyesuaikan tampilan dialog pembaruan default dengan menerapkan DistributeDelegate
protokol. Anda perlu mendaftarkan delegasi sebelum memulai SDK seperti yang ditunjukkan dalam contoh berikut:
[MSACDistribute setDelegate:self];
Distribute.delegate = self;
Berikut adalah contoh implementasi delegasi yang menggantikan dialog SDK dengan yang kustom:
- (BOOL)distribute:(MSACDistribute *)distribute releaseAvailableWithDetails:(MSACReleaseDetails *)details {
// Your code to present your UI to the user, e.g. an UIAlertController.
UIAlertController *alertController = [UIAlertController
alertControllerWithTitle:@"Update available."
message:@"Do you want to update?"
preferredStyle:UIAlertControllerStyleAlert];
[alertController
addAction:[UIAlertAction actionWithTitle:@"Update"
style:UIAlertActionStyleCancel
handler:^(UIAlertAction *action) {
[MSACDistribute notifyUpdateAction:MSACUpdateActionUpdate];
}]];
[alertController
addAction:[UIAlertAction actionWithTitle:@"Postpone"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction *action) {
[MSACDistribute notifyUpdateAction:MSACUpdateActionPostpone];
}]];
// Show the alert controller.
[self.window.rootViewController presentViewController:alertController animated:YES completion:nil];
return YES;
}
func distribute(_ distribute: Distribute, releaseAvailableWith details: ReleaseDetails) -> Bool {
// Your code to present your UI to the user, e.g. an UIAlertController.
let alertController = UIAlertController(title: "Update available.",
message: "Do you want to update?",
preferredStyle:.alert)
alertController.addAction(UIAlertAction(title: "Update", style: .cancel) {_ in
Distribute.notify(.update)
})
alertController.addAction(UIAlertAction(title: "Postpone", style: .default) {_ in
Distribute.notify(.postpone)
})
// Show the alert controller.
self.window?.rootViewController?.present(alertController, animated: true)
return true;
}
Jika Anda kembali YES
/true
dalam metode di atas, aplikasi Anda harus mendapatkan pilihan pengguna dan mengirim pesan kepada SDK dengan hasilnya menggunakan API berikut.
// Depending on the user's choice, call notifyUpdateAction: with the right value.
[MSACDistribute notifyUpdateAction:MSACUpdateActionUpdate];
[MSACDistribute notifyUpdateAction:MSACUpdateActionPostpone];
// Depending on the user's choice, call notify() with the right value.
Distribute.notify(.update);
Distribute.notify(.postpone);
Jika Anda tidak memanggil metode di atas, releaseAvailableWithDetails:
-method akan berulang setiap kali aplikasi Anda masuk ke latar depan.
Dalam kasus ketika SDK memeriksa pembaruan dan tidak menemukan pembaruan apa pun yang tersedia lebih baru dari yang saat ini digunakan, distributeNoReleaseAvailable:
panggilan balik dari MSACDistributeDelegate
delegasi dipanggil. Ini memungkinkan Anda untuk menjalankan kode kustom dalam skenario tersebut.
Berikut adalah contoh yang menunjukkan cara menampilkan UI pemberitahuan ketika tidak ada pembaruan yang ditemukan:
- (void)distributeNoReleaseAvailable:(MSACDistribute *)distribute {
UIAlertController *alert = [UIAlertController alertControllerWithTitle:nil
message:NSLocalizedString(@"No updates available", nil)
preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"OK", nil) style:UIAlertActionStyleDefault handler:nil]];
[self.window.rootViewController presentViewController:alert animated:YES completion:nil];
}
func distributeNoReleaseAvailable(_ distribute: Distribute) {
let alert = UIAlertController(title: nil, message: "No updates available", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
self.window?.rootViewController?.present(alert, animated: true)
}
Anda dapat mengaktifkan dan menonaktifkan App Center Distribute pada runtime. Jika Anda menonaktifkannya, SDK tidak akan menyediakan fungsionalitas pembaruan dalam aplikasi tetapi Anda masih dapat menggunakan layanan Distribusikan di portal App Center.
[MSACDistribute setEnabled:NO];
Distribute.enabled = false
Untuk mengaktifkan App Center Distribute lagi, gunakan API yang sama tetapi teruskan YES
/true
sebagai parameter.
[MSACDistribute setEnabled:YES];
Distribute.enabled = true
Status ini bertahan di penyimpanan perangkat di seluruh peluncuran aplikasi.
Catatan
Metode ini hanya boleh digunakan setelah Distribute
dimulai.
Anda juga dapat memeriksa apakah App Center Distribute diaktifkan atau tidak:
BOOL enabled = [MSACDistribute isEnabled];
var enabled = Distribute.enabled
Catatan
Metode ini hanya boleh digunakan setelah Distribute
dimulai, metode ini akan selalu kembali false
sebelum dimulai.
Jika dalam mode privat, App Center Distribute akan membuka UI/browsernya saat aplikasi dimulai. Meskipun ini adalah perilaku yang diharapkan untuk pengguna akhir Anda, itu bisa mengganggu bagi Anda selama tahap pengembangan aplikasi Anda. Kami tidak merekomendasikan inisialisasi Distribute
untuk konfigurasi Anda DEBUG
.
#if DEBUG
[MSACAppCenter start:@"{Your App Secret}" withServices:@[[MSACAnalytics class], [MSACCrashes class]]];
#else
[MSACAppCenter start:@"{Your App Secret}" withServices:@[[MSACAnalytics class], [MSACCrashes class], [MSACDistribute class]]];
#endif
#if DEBUG
AppCenter.start(withAppSecret: "{Your App Secret}", services: [Analytics.self, Crashes.self])
#else
AppCenter.start(withAppSecret: "{Your App Secret}", services: [Analytics.self, Crashes.self, Distribute.self])
#endif
Terapkan DistributeDelegate
protokol dan daftarkan delegasi seperti yang ditunjukkan dalam contoh berikut:
[MSACDistribute setDelegate:self];
Distribute.delegate = self;
Metode distributeWillExitApp:
delegasi akan dipanggil tepat sebelum aplikasi dihentikan untuk penginstalan pembaruan:
- (void)distributeWillExitApp:(MSACDistribute *)distribute {
// Perform the required clean up here.
}
func distributeWillExitApp(_ distribute: Distribute) {
// Perform the required clean up here.
}
Catatan
Agar pembaruan dalam aplikasi berfungsi, build aplikasi harus diunduh dari tautan. Ini tidak akan berfungsi jika diinstal dari IDE atau secara manual.
Fitur pembaruan dalam aplikasi berfungsi sebagai berikut:
Fitur ini HANYA akan berfungsi dengan build yang didistribusikan menggunakan layanan App Center Distribute . Ini tidak akan berfungsi saat debugger dilampirkan atau jika fitur Akses Terpandu iOS diaktifkan..
Setelah mengintegrasikan SDK, buat versi rilis aplikasi Anda dan unggah ke App Center, pengguna di grup distribusi tersebut akan diberi tahu untuk rilis baru melalui email.
Ketika setiap pengguna membuka tautan dalam email mereka, aplikasi akan diinstal di perangkat mereka. Penting bahwa mereka menggunakan tautan email untuk menginstal aplikasi - App Center Distribute tidak mendukung pembaruan dalam aplikasi untuk aplikasi yang telah diinstal dari sumber lain (misalnya mengunduh aplikasi dari lampiran email). Ketika aplikasi diunduh dari tautan, SDK menyimpan informasi penting dari cookie untuk memeriksa pembaruan nanti, jika tidak, SDK tidak memiliki informasi utama tersebut.
Jika aplikasi mengatur trek ke privat, browser akan terbuka untuk mengautentikasi pengguna dan mengaktifkan pembaruan dalam aplikasi. Browser tidak akan terbuka lagi selama informasi autentikasi tetap valid bahkan ketika beralih kembali ke trek publik dan kembali ke privat lagi nanti. Jika autentikasi browser berhasil, pengguna dialihkan kembali ke aplikasi secara otomatis. Jika trek bersifat publik (yang merupakan default), langkah berikutnya terjadi secara langsung.
- Di iOS 9 dan 10, instans
SFSafariViewController
akan terbuka dalam aplikasi untuk mengautentikasi pengguna. Ini akan menutup dirinya sendiri secara otomatis setelah autentikasi berhasil. - Di iOS 11, pengalaman pengguna mirip dengan iOS 9 dan 10 tetapi iOS 11 akan meminta izin kepada pengguna untuk mengakses informasi masuk. Ini adalah dialog tingkat sistem dan tidak dapat disesuaikan. Jika pengguna membatalkan dialog, mereka dapat terus menggunakan versi yang mereka uji, tetapi mereka tidak akan mendapatkan pembaruan dalam aplikasi. Mereka akan diminta untuk mengakses informasi masuk lagi saat meluncurkan aplikasi di lain waktu.
- Di iOS 9 dan 10, instans
Rilis baru aplikasi menunjukkan dialog pembaruan dalam aplikasi yang meminta pengguna untuk memperbarui aplikasi Anda jika:
- nilai
CFBundleShortVersionString
atau yang lebih tinggi - nilai
CFBundleShortVersionString
yang sama tetapi nilai yang lebih tinggi dariCFBundleVersion
. - versinya sama tetapi pengidentifikasi unik build berbeda.
- nilai
Tip
Jika Anda mengunggah ipa yang sama untuk kedua kalinya, dialog TIDAK akan muncul karena biner identik. Jika Anda mengunggah build baru dengan properti versi yang sama, build tersebut akan menampilkan dialog pembaruan. Alasan untuk ini adalah bahwa itu adalah biner yang berbeda .
Anda perlu mengunggah build rilis (yang menggunakan modul Distribusikan SDK App Center) ke Portal App Center untuk menguji pembaruan dalam aplikasi, meningkatkan nomor versi setiap saat.
- Buat aplikasi Anda di Portal App Center jika Anda belum melakukannya.
- Buat grup distribusi baru dan beri nama sehingga Anda dapat mengenalinya dimaksudkan untuk menguji fitur pembaruan dalam aplikasi.
- Tambahkan diri Anda sendiri (atau semua orang yang ingin Anda sertakan pada pengujian fitur pembaruan dalam aplikasi). Gunakan alamat email baru atau buang untuk ini, yang tidak digunakan untuk aplikasi tersebut di App Center. Ini memastikan bahwa pengalaman Anda dekat dengan pengalaman penguji nyata Anda.
- Buat build baru aplikasi Anda yang menyertakan Distribusi App Center dan berisi logika penyiapan seperti yang dijelaskan di bawah ini. Jika grup bersifat privat, jangan lupa untuk mengatur trek pembaruan dalam aplikasi privat sebelum mulai menggunakan properti updateTrack.
- Klik tombol Distribusikan rilis baru di portal dan unggah build aplikasi Anda.
- Setelah pengunggahan selesai, klik Berikutnya dan pilih Grup distribusi yang Anda buat sebagai Tujuan distribusi aplikasi tersebut.
- Tinjau Distribusi dan distribusikan build ke grup pengujian dalam aplikasi Anda.
- Orang dalam grup tersebut akan menerima undangan untuk menjadi penguji aplikasi. Setelah menerima undangan, mereka dapat mengunduh aplikasi dari Portal App Center dari perangkat seluler mereka. Setelah menginstal pembaruan dalam aplikasi, Anda siap untuk menguji pembaruan dalam aplikasi.
- Bump nama versi (
CFBundleShortVersionString
) aplikasi Anda. - Buat versi rilis aplikasi Anda dan unggah build baru aplikasi seperti yang Anda lakukan di langkah sebelumnya dan distribusikan ini ke Grup Distribusi yang Anda buat sebelumnya. Anggota Grup Distribusi akan dimintai versi baru saat aplikasi dimulai lagi.
Tip
Lihat informasi tentang cara menggunakan App Center Distribute untuk informasi lebih rinci tentang Grup Distribusi , dll. Meskipun dimungkinkan untuk menggunakan App Center Distribute untuk mendistribusikan versi baru aplikasi Anda tanpa menambahkan kode apa pun, menambahkan App Center Distribute ke kode aplikasi Anda akan menghasilkan pengalaman yang lebih mulus bagi penguji dan pengguna Anda saat mereka mendapatkan pengalaman pembaruan dalam aplikasi.
App Center SDK menggunakan swizzling untuk meningkatkan integrasinya dengan meneruskan sendiri beberapa panggilan metode delegasi aplikasi. Metode menggeliat adalah cara untuk mengubah implementasi metode pada runtime. Jika karena alasan apa pun Anda tidak ingin menggunakan denyut (misalnya karena kebijakan tertentu) maka Anda dapat menonaktifkan penerusan ini untuk semua layanan App Center dengan mengikuti langkah-langkah di bawah ini:
- Buka file Info.plist proyek.
- Tambahkan
AppCenterAppDelegateForwarderEnabled
kunci dan atur nilainya ke0
. Ini menonaktifkan penerusan delegasi aplikasi untuk semua layanan App Center. openURL
Tambahkan panggilan balik dalam file proyekAppDelegate
.
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
// Pass the url to MSACDistribute.
return [MSACDistribute openURL:url];
}
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
// Pass the URL to App Center Distribute.
return Distribute.open(url)
}