Číst v angličtině

Sdílet prostřednictvím


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í:

  1. Pokud jste aplikaci vydali v App Store, budou aktualizace v aplikaci zakázané.
  2. 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.

Přidání aktualizací v aplikaci do aplikace

Pokud jste v aplikaci nenakonfigurovali sadu SDK, postupujte podle části Začínáme .

1. Přidání modulu App Center Distribute

Sada App Center SDK je navržená s modulárním přístupem – stačí integrovat jenom moduly služeb, které vás zajímají.

Integrace přes Cocoapods

Pokud do aplikace integrujete App Center prostřednictvím Cocoapods, přidejte do souboru podfile následující závislost a spusťte pod installpříkaz .

pod 'AppCenter/Distribute'

Integrace přes Kartáž

  1. 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
    
  2. Spusťte carthage update.

  3. 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.

  4. Přetáhněte AppCenterDistributeResources.bundle z AppCenterDistribute.framework do XCode Project Navigator.

  5. Zobrazí se dialogové okno a zkontrolujte, jestli je zaškrtnutý cíl aplikace. Klikněte na Dokončit.

Integrace přes Swift Package Manager

  1. V nabídce Xcode klikněte na File Swift Packages Add Packages > Add Package Dependency(Přidat závislost balíčku).>
  2. V dialogovém okně, které se zobrazí, zadejte adresu URL úložiště: https://github.com/microsoft/appcenter-sdk-apple.git.
  3. V části Verze vyberte Až další hlavní a použijte výchozí možnost.
  4. Ve sloupci Balíček produktu zvolte AppCenterDistribute.

Integrace zkopírováním binárních souborů do projektu

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.

  1. Stáhněte si architektury sady App Center SDK poskytované jako soubor ZIP.

  2. 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.

  3. [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.
  4. Otevřete Finder a zkopírujte rozbalenou složku AppCenter-SDK-Apple/iOS do složky projektu v požadovaném umístění.

  5. 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.

2. Spusťte distribuci App Center

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.

2.1 Přidání importu pro App Center Distribute

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

2.2 Přidání start:withServices: metody

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 .

2.3 Úprava info.plist projektu

  1. 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.
  2. Změňte typ klíče na Pole.
  3. Přidejte novou položku do pole (Item 0) a změňte typ na Slovník.
  4. V části Item 0přidejte URL Schemes klíč a změňte typ na Pole.
  5. Pod klíč URL Schemes přidejte novou položku (Item 0).
  6. V části URL Schemes>Item 0změňte hodnotu na appcenter-{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>

Použití privátní distribuční skupiny

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.

Zakázat automatickou kontrolu aktualizací

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.

Ruční kontrola aktualizace

[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).

Přizpůsobení nebo lokalizace dialogového okna aktualizace v aplikaci

1. Přizpůsobení nebo lokalizace textu

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.

2. Přizpůsobení dialogového okna aktualizace

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í.

3. Spuštění kódu, pokud nejsou nalezeny žádné aktualizace

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)
  }

Povolení nebo zakázání distribuce app Center za běhu

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í.

Kontrola, jestli je povolená distribuce v App Centeru

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.

Neicializovat distribuci app Center během vývoje

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

Proveďte vyčištění těsně před zavření aplikace pro aktualizaci.

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.
}

Jak fungují aktualizace v aplikaci?

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:

  1. 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.

  2. 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.

  3. 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.

  4. 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.
  5. 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šší hodnotu CFBundleVersion.
    • verze jsou stejné, ale jedinečný identifikátor sestavení se liší.

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.

Návody testovat aktualizace v aplikaci?

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í.

  1. Pokud jste to ještě neudělali, vytvořte aplikaci na portálu App Center.
  2. Vytvořte novou distribuční skupinu a pojmenujte ji, abyste poznali, že je určená k testování funkce aktualizace v aplikaci.
  3. 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ů.
  4. 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.
  5. Na portálu klikněte na tlačítko Distribuovat novou verzi a nahrajte svůj build aplikace.
  6. 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.
  7. Projděte si téma Distribuce a distribuujte sestavení do testovací skupiny v aplikaci.
  8. 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.
  9. Vyrovnejte název verze (CFBundleShortVersionString) vaší aplikace.
  10. 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.

Zakázání přesměrování volání metod delegáta aplikace do služeb App Center

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:

  1. Otevřete soubor Info.plist projektu.
  2. Přidejte AppCenterAppDelegateForwarderEnabled klíč a nastavte hodnotu na 0. Tím zakážete přeposílání delegáta aplikace pro všechny služby App Center.
  3. 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)
}