App Center – Distribuce – aktualizace v aplikaci pro iOS
Důležité
31. března 2025 je naplánované vyřazení z provozu. I když můžete dál používat Visual Studio App Center, dokud ho úplně vyřadíte, existuje několik doporučených alternativ, na které můžete zvážit migraci.
Přečtěte si další informace o časových osách a alternativách podpory.
App Center Distribuovat umožní uživatelům nainstalovat novou verzi aplikace, když ji distribuujete přes App Center. Když je k dispozici nová verze aplikace, sada SDK zobrazí uživatelům dialogové okno aktualizace, aby si mohli novou verzi stáhnout nebo odložit. Jakmile se sada SDK rozhodne aktualizovat, začne aktualizovat vaši aplikaci.
Poznámka
Při používání aktualizací v aplikaci je potřeba zvážit několik věcí:
- Pokud jste aplikaci vydali v App Store, budou aktualizace v aplikaci zakázané.
- Pokud spouštíte automatizované testy uživatelského rozhraní, povolené aktualizace v aplikaci zablokují vaše automatizované testy uživatelského rozhraní, protože se pokusí ověřit v back-endu App Center. Doporučujeme nepovolovat distribuci App Center pro cíl testu uživatelského rozhraní.
Poznámka
4.0.0
Ve verzi App Center byly zavedeny zásadní změny. Pokud chcete migrovat App Center z předchozích verzí, postupujte podle části Migrace na sadu App Center SDK 4.0.0 a vyšší .
Důležité
Sada App Center SDK nepodporuje více aplikací s okny, které byly zavedeny v iOSu 13.
Pokud jste v aplikaci nenakonfigurovali sadu SDK, postupujte podle části Začínáme .
Sada App Center SDK je navržená s modulárním přístupem – stačí integrovat jenom moduly služeb, které vás zajímají.
Pokud do aplikace integrujete App Center prostřednictvím Cocoapods, přidejte do souboru podfile následující závislost a spusťte pod install
příkaz .
pod 'AppCenter/Distribute'
Přidejte do svého
Cartfile
počítače následující závislost, která zahrne distribuci 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
Spusťte
carthage update
.Otevřete kartu Obecné nastavení cíle aplikace. Přetáhněte soubor AppCenterDistribute.framework ze složky Carthage/Build/iOS do části Propojené architektury a knihovny v XCode.
Přetáhněte AppCenterDistributeResources.bundle z AppCenterDistribute.framework do XCode Project Navigator.
Zobrazí se dialogové okno a zkontrolujte, jestli je zaškrtnutý cíl aplikace. Klikněte na Dokončit.
- V nabídce Xcode klikněte na File Swift Packages Add Packages > Add Package Dependency(Přidat závislost balíčku).>
- V dialogovém okně, které se zobrazí, zadejte adresu URL úložiště:
https://github.com/microsoft/appcenter-sdk-apple.git
. - V části Verze vyberte Až další hlavní a použijte výchozí možnost.
- Ve sloupci Balíček produktu zvolte AppCenterDistribute.
Pokud cocoapods nechcete používat, můžete moduly integrovat zkopírováním binárních souborů do projektu. Postupujte následovně:
Poznámka
Sada App Center SDK podporuje použití nástroje XCframework
. Pokud chcete do projektu integrovat XCframeworks, stáhněte siAppCenter-SDK-Apple-XCFramework.zip ze stránky vydaných verzí a rozbalte ho. Výsledný obsah složky není specifický pro platformu, ale obsahuje XCframeworks pro každý modul. Dají se integrovat stejným způsobem jako obvyklé architektury, jak je popsáno níže.
Stáhněte si architektury sady App Center SDK poskytované jako soubor ZIP.
Rozbalte soubor a uvidíte složku s názvem AppCenter-SDK-Apple/iOS , která obsahuje různé architektury pro každou službu App Center. V projektu se vyžaduje architektura s názvem
AppCenter
, protože obsahuje kód, který se sdílí mezi různými moduly.[Volitelné] Vytvořte podadresář pro knihovny třetích stran.
- Osvědčeným postupem je, že knihovny třetích stran jsou obvykle uvnitř podadresáře, který se často nazývá Dodavatel. Pokud váš projekt není uspořádaný s podadresářem knihoven, vytvořte teď podadresář Vendor .
- Vytvořte v projektu Xcode skupinu s názvem Vendor , která bude napodobovat strukturu souborů na disku.
Otevřete Finder a zkopírujte rozbalenou složku AppCenter-SDK-Apple/iOS do složky projektu v požadovaném umístění.
Přidejte do projektu v Xcode architekturu sady SDK:
- Ujistěte se, že je viditelný Navigátor projektu (⌘+1).
- Teď přetáhněte AppCenter.framework, AppCenterDistribute.framework a AppCenterDistributeResources.bundle z Finderu (ty ve složce Vendor ) do Navigátoru projektu Xcode. Ke spuštění sady SDK se vyžaduje AppCenter.framework. Ujistěte se, že je přidaná do projektu, jinak ostatní moduly nebudou fungovat a projekt se nebude úspěšně zkompilovat.
- Zobrazí se dialogové okno a zkontrolujte, jestli je zaškrtnutý cíl aplikace. Klikněte na Dokončit.
App Center používá jenom konkrétní moduly, které vyvoláte ve své aplikaci. Při spuštění sady SDK je nutné explicitně volat každou z nich.
Otevřete soubor AppDelegate.m projektu v souboru Objective-C nebo AppDelegate.swift ve Swiftu a přidejte následující příkazy importu:
@import AppCenter;
@import AppCenterDistribute;
import AppCenter
import AppCenterDistribute
Přidáním Distribute
do metody spusťte start:withServices:
službu App Center Distribute.
Vložte následující řádek, který spustí sadu SDK ve třídě AppDelegate.m projektu pro Objective-C nebo Třídu AppDelegate.swift pro Swift v didFinishLaunchingWithOptions
metodě.
[MSACAppCenter start:@"{Your App Secret}" withServices:@[[MSACDistribute class]]];
AppCenter.start(withAppSecret: "{Your App Secret}", services: [Distribute.self])
Ujistěte se, že jste ve výše uvedené ukázce kódu nahradili {Your App Secret}
tajným kódem aplikace. Pokud jste ve své aplikaci nenakonfigurovali sadu SDK, podívejte se také do části Začínáme .
- V souboru Info.plist projektu přidejte nový klíč pro
URL types
kliknutím na tlačítko +vedle seznamu vlastností informací v horní části. Pokud Xcode zobrazí soubor Info.plist jako zdrojový kód, projděte si následující tip. - Změňte typ klíče na Pole.
- Přidejte novou položku do pole (
Item 0
) a změňte typ na Slovník. - V části
Item 0
přidejteURL Schemes
klíč a změňte typ na Pole. - Pod klíč
URL Schemes
přidejte novou položku (Item 0
). - V části
URL Schemes
>Item 0
změňte hodnotu naappcenter-{APP_SECRET}
a nahraďte{APP_SECRET}
tajným kódem aplikace vaší aplikace.
Tip
Pokud chcete ověřit, že jste soubor Info.plist správně upravili, otevřete ho jako zdrojový kód. Měl by obsahovat následující záznam s tajným kódem {APP_SECRET}
aplikace místo :
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>appcenter-{APP_SECRET}</string>
</array>
</dict>
</array>
Distribuce ve výchozím nastavení používá veřejnou distribuční skupinu. Pokud chcete použít privátní distribuční skupinu, budete ji muset explicitně nastavit prostřednictvím updateTrack
vlastnosti.
MSACDistribute.updateTrack = MSACUpdateTrackPrivate;
Distribute.updateTrack = .private
Poznámka
Výchozí hodnota je UpdateTrack.public
. Tuto vlastnost lze aktualizovat pouze před voláním AppCenter.start
metody. Změny ve sledování aktualizací se při restartování procesu aplikace neuchovávají, takže pokud se vlastnost před AppCenter.start
voláním neaktualizuje, bude ve výchozím nastavení veřejná.
Po tomto volání se otevře okno prohlížeče pro ověření uživatele. Všechny následné kontroly aktualizací budou mít nejnovější verzi na privátním okruhu.
Pokud je uživatel na privátním okruhu, znamená to, že po úspěšném ověření získá nejnovější verzi ze všech privátních distribučních skupin, kterých je členem. Pokud je uživatel na veřejné cestě, znamená to, že získá nejnovější verzi z jakékoli veřejné distribuční skupiny.
Ve výchozím nastavení sada SDK automaticky kontroluje nové verze:
- Při spuštění aplikace.
- Když aplikace přejde na pozadí, pak znovu v popředí.
- Při povolování modulu Distribuovat, pokud byl dříve zakázán.
Pokud chcete vyhledat nové verze ručně, můžete zakázat automatickou kontrolu aktualizací. Provedete to tak, že před spuštěním sady SDK zavoláte následující metodu:
[MSACDistribute disableAutomaticCheckForUpdate];
Distribute.disableAutomaticCheckForUpdate()
Poznámka
Tato metoda musí být volána před voláním AppCenter.start
metody.
Pak můžete použít checkForUpdate
rozhraní API, které je popsáno v následující části.
[MSACDistribute checkForUpdate];
Distribute.checkForUpdate()
Tím se odešle žádost do App Center a zobrazí se dialogové okno aktualizace pro případ, že je k dispozici nová verze.
Poznámka
Ruční kontrola volání aktualizací funguje i v případě, že jsou povolené automatické aktualizace. Ruční kontrola aktualizace se ignoruje, pokud se už provádí jiná kontrola. Ruční kontrola aktualizací se nezpracuje, pokud uživatel aktualizace odložil (pokud nejnovější verze není povinná aktualizace).
Pokud chcete lokalizovat text zobrazený v dialogovém okně aktualizace, můžete snadno zadat vlastní řetězce prostředků. Podívejte se na tento soubor řetězců. Použijte stejný název nebo klíč řetězce a zadejte lokalizovanou hodnotu, která se má v dialogovém okně projevit ve vlastních souborech řetězců aplikace.
Vzhled výchozího dialogového okna aktualizace můžete přizpůsobit implementací DistributeDelegate
protokolu. Před spuštěním sady SDK musíte zaregistrovat delegáta, jak je znázorněno v následujícím příkladu:
[MSACDistribute setDelegate:self];
Distribute.delegate = self;
Tady je příklad implementace delegáta, která nahradí dialogové okno sady SDK vlastním dialogem:
- (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;
}
V případě, že se vrátíte YES
/true
výše uvedenou metodou, měla by vaše aplikace získat volbu uživatele a poslat sadě SDK zprávu s výsledkem pomocí následujícího rozhraní API.
// 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);
Pokud nevoláte výše uvedenou metodu releaseAvailableWithDetails:
, bude se metoda -opakovat při každém vstupu aplikace do popředí.
V případech, kdy sada SDK vyhledá aktualizace a nenajde žádné aktualizace, které jsou novější, než je aktuálně použitá, se vyvolá zpětné volání delegáta distributeNoReleaseAvailable:
z MSACDistributeDelegate
. To vám umožní spouštět vlastní kód v takových scénářích.
Tady jsou příklady, které ukazují, jak zobrazit uživatelské rozhraní upozornění, když nejsou nalezeny žádné aktualizace:
- (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)
}
App Center můžete povolit a zakázat distribuci za běhu. Pokud ho zakážete, sada SDK nebude poskytovat žádné funkce aktualizace v aplikaci, ale přesto můžete použít službu Distribuovat na portálu App Center.
[MSACDistribute setEnabled:NO];
Distribute.enabled = false
Pokud chcete app Center distribuovat znovu, použijte stejné rozhraní API, ale předejte YES
/true
ho jako parametr.
[MSACDistribute setEnabled:YES];
Distribute.enabled = true
Stav se v úložišti zařízení během spouštění aplikací udržuje.
Poznámka
Tuto metodu je možné použít pouze po Distribute
spuštění.
Můžete také zkontrolovat, jestli je distribuce App Center povolená nebo ne:
BOOL enabled = [MSACDistribute isEnabled];
var enabled = Distribute.enabled
Poznámka
Tuto metodu je možné použít pouze po Distribute
spuštění, vždy se vrátí false
před spuštěním.
Pokud je v privátním režimu, App Center Distribute při spuštění aplikace otevře své uživatelské rozhraní nebo prohlížeč. I když se jedná o očekávané chování pro koncové uživatele, může být pro vás během fáze vývoje aplikace rušivé. Nedoporučujeme inicializovat Distribute
konfiguraci 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
DistributeDelegate
Implementujte protokol a zaregistrujte delegáta, jak je znázorněno v následujícím příkladu:
[MSACDistribute setDelegate:self];
Distribute.delegate = self;
Metoda delegáta distributeWillExitApp:
se zavolá těsně před ukončením aplikace pro instalaci aktualizace:
- (void)distributeWillExitApp:(MSACDistribute *)distribute {
// Perform the required clean up here.
}
func distributeWillExitApp(_ distribute: Distribute) {
// Perform the required clean up here.
}
Poznámka
Aby aktualizace v aplikaci fungovaly, je potřeba stáhnout build aplikace z odkazu. Nebude fungovat, pokud se nainstaluje z integrovaného vývojového prostředí (IDE) nebo ručně.
Funkce aktualizací v aplikaci funguje takto:
Tato funkce bude fungovat POUZE se sestaveními distribuovanými pomocí služby App Center Distribute . Nebude fungovat, když je připojený ladicí program nebo pokud je zapnutá funkce iOS s asistencí přístupu.
Jakmile sadu SDK integrujete, vytvoříte vydanou verzi aplikace a nahrajete ji do App Centeru, uživatelé v této distribuční skupině dostanou e-mailem oznámení o nové verzi.
Když každý uživatel otevře odkaz ve svém e-mailu, aplikace se nainstaluje na jeho zařízení. Je důležité, aby k instalaci aplikace použili e-mailový odkaz – App Center Distribute nepodporuje aktualizace v aplikaci, které byly nainstalovány z jiných zdrojů (např. stažení aplikace z přílohy e-mailu). Když se aplikace stáhne z odkazu, sada SDK uloží důležité informace ze souborů cookie, aby později zkontrolovala aktualizace, jinak sada SDK tyto klíčové informace neobsahuje.
Pokud aplikace nastaví trasu na privátní, otevře se prohlížeč pro ověření uživatele a povolení aktualizací v aplikaci. Prohlížeč se znovu neotevře, dokud ověřovací informace zůstanou platné, i když se později znovu přepnete na veřejnou trasu a znovu na privátní. Pokud je ověření prohlížeče úspěšné, uživatel se automaticky přesměruje zpět do aplikace. Pokud je trasa veřejná (což je výchozí), provede se další krok přímo.
- V iOSu 9 a 10 se v aplikaci otevře instance nástroje
SFSafariViewController
, aby se uživatel ověřil. Po úspěšném ověření se automaticky zavře. - V systému iOS 11 se uživatelské prostředí podobá iOS 9 a 10, ale iOS 11 požádá uživatele o oprávnění k přístupu k přihlašovacím údajům. Toto je dialogové okno na úrovni systému a nedá se přizpůsobit. Pokud uživatel dialogové okno zruší, může dál používat verzi, kterou testuje, ale nebude dostávat aktualizace v aplikaci. Při příštím spuštění aplikace se jim znovu zobrazí výzva k přístupu k přihlašovacím údajům.
- V iOSu 9 a 10 se v aplikaci otevře instance nástroje
V nové verzi aplikace se zobrazí dialogové okno aktualizace v aplikaci s výzvou uživatelům, aby aplikaci aktualizovali, pokud je to:
- vyšší hodnotu
CFBundleShortVersionString
nebo - stejnou hodnotu,
CFBundleShortVersionString
ale vyšší hodnotuCFBundleVersion
. - verze jsou stejné, ale jedinečný identifikátor sestavení se liší.
- vyšší hodnotu
Tip
Pokud nahrajete stejnou ipu podruhé, dialogové okno se nezobrazí , protože binární soubory jsou identické. Pokud nahrajete nový build se stejnými vlastnostmi verze, zobrazí se dialogové okno aktualizace. Důvodem je, že se jedná o jiný binární soubor.
Abyste mohli otestovat aktualizace v aplikaci, musíte nahrát buildy vydaných verzí (které používají modul Distribuovat v sadě App Center SDK) na portál App Center a pokaždé zvýšit počet verzí.
- Pokud jste to ještě neudělali, vytvořte aplikaci na portálu App Center.
- Vytvořte novou distribuční skupinu a pojmenujte ji, abyste poznali, že je určená k testování funkce aktualizace v aplikaci.
- Přidejte sebe (nebo všechny lidi, které chcete zahrnout do testu funkce aktualizace v aplikaci). Použijte k tomu novou nebo vyhozenou e-mailovou adresu, která se pro danou aplikaci v App Center nepoužila. Tím zajistíte, že se vaše prostředí bude blížit zkušenostem skutečných testerů.
- Vytvořte nový build aplikace, který bude obsahovat App Center Distribute a obsahuje logiku nastavení, jak je popsáno níže. Pokud je skupina soukromá, nezapomeňte nastavit privátní trasu aktualizace v aplikaci, než začnete používat vlastnost updateTrack.
- Na portálu klikněte na tlačítko Distribuovat novou verzi a nahrajte svůj build aplikace.
- Po dokončení nahrávání klikněte na Další a vyberte distribuční skupinu , kterou jste vytvořili jako cíl dané distribuce aplikace.
- Projděte si téma Distribuce a distribuujte sestavení do testovací skupiny v aplikaci.
- Lidé v této skupině obdrží pozvánku k testování aplikace. Jakmile pozvánku přijme, může si aplikaci stáhnout z portálu App Center ze svého mobilního zařízení. Jakmile budou mít nainstalované aktualizace v aplikaci, můžete je otestovat.
- Vyrovnejte název verze (
CFBundleShortVersionString
) vaší aplikace. - Sestavte vydanou verzi aplikace a nahrajte nový build aplikace, jako jste to udělali v předchozím kroku, a distribuujte ho do distribuční skupiny , kterou jste vytvořili dříve. Při příštím spuštění aplikace se členům distribuční skupiny zobrazí výzva k zadání nové verze.
Tip
Podrobnější informace o distribučních skupinách atd. najdete v tématu Věnovaném využití distribuce app center. I když je možné distribuovat novou verzi aplikace pomocí App Center Distribuovat bez přidání kódu, přidáním app Center Distribuovat do kódu aplikace zajistíte pro testery a uživatele plynulejší prostředí, jakmile získají prostředí aktualizace v aplikaci.
Sada App Center SDK používá funkci swizzling ke zlepšení integrace tím, že sama přesměruje volání některých metod delegáta aplikace. Swizzling metody je způsob, jak změnit implementaci metod za běhu. Pokud z nějakého důvodu nechcete používat swizzling (například kvůli určité zásadě), můžete toto přesměrování zakázat pro všechny služby App Center pomocí následujícího postupu:
- Otevřete soubor Info.plist projektu.
- Přidejte
AppCenterAppDelegateForwarderEnabled
klíč a nastavte hodnotu na0
. Tím zakážete přeposílání delegáta aplikace pro všechny služby App Center. openURL
Přidejte zpětné volání do souboru projektuAppDelegate
.
- (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)
}