トレーニング
ラーニング パス
FastTrack サービス、データ管理などを使用して、財務と運用アプリの実装を成功させるためのプロジェクト方法論を計画および設計します。
このブラウザーはサポートされなくなりました。
Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。
重要
Visual Studio App Center は、2025 年 3 月 31 日に廃止される予定です。 完全に廃止されるまで Visual Studio App Center を引き続き使用できますが、移行を検討できる推奨される代替手段がいくつかあります。
App Center 配布を使用すると、App Center 経由で配布するときに、ユーザーは新しいバージョンのアプリをインストールできます。 利用可能な新しいバージョンのアプリでは、SDK によって、新しいバージョンをダウンロードまたは延期するための更新ダイアログがユーザーに表示されます。 更新を選択すると、SDK によってアプリケーションの更新が開始されます。
注意
アプリ内更新プログラムを使用する場合は、いくつかの点を考慮する必要があります。
注意
App Center のバージョンでは、 4.0.0
破壊的変更が導入されました。 App Center SDK 4.0.0 以降への移行に関するセクションに従って、以前のバージョンから App Center を移行します。
重要
App Center SDK では、iOS 13 で導入された複数のウィンドウ アプリはサポートされていません。
アプリケーションで SDK を構成していない場合は、「 はじめ に」セクションに従います。
App Center SDK はモジュール形式のアプローチで設計されています。必要なのは、関心のあるサービスのモジュールを統合することだけです。
Cocoapods を使用して App Center をアプリに統合する場合は、次の依存関係を podfile に追加し、 を実行 pod install
します。
pod 'AppCenter/Distribute'
次の依存関係を に Cartfile
追加して、App Center Distribute を含めます。
# 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
carthage update
を実行します。
アプリケーション ターゲットの [全般設定] タブ を 開きます。 AppCenterDistribute.framework ファイルを Carthage/Build/iOS フォルダーから XCode の [リンクされたフレームワークとライブラリ ] セクションにドラッグ アンド ドロップします。
AppCenterDistributeResources.bundleを AppCenterDistribute.framework から XCode のプロジェクト ナビゲーターにドラッグ アンド ドロップします。
ダイアログが表示され、アプリ ターゲットがオンになっていることを確認します。 [完了] をクリックします。
https://github.com/microsoft/appcenter-sdk-apple.git
Cocoapods を使用しない場合は、バイナリをプロジェクトにコピーしてモジュールを統合できます。 次の手順に従います。
注意
App Center SDK では、 の使用 XCframework
がサポートされています。 XCframeworks をプロジェクトに統合する場合は、リリース ページから AppCenter-SDK-Apple-XCFramework.zip をダウンロードして解凍します。 結果として得られるフォルダーの内容はプラットフォーム固有ではなく、モジュールごとに XCframeworks が含まれます。 これらは、次に説明するように、通常のフレームワークと同じ方法で統合できます。
zip ファイルとして提供されている App Center SDK フレームワークをダウンロードします。
ファイルを解凍すると、App Center サービスごとに異なるフレームワークを含む AppCenter-SDK-Apple/iOS というフォルダーが表示されます。 呼び出される AppCenter
フレームワークは、異なるモジュール間で共有されるコードを含んでいるため、プロジェクトで必要です。
[省略可能]サード パーティ製ライブラリのサブディレクトリを作成します。
Finder を開き、解凍した AppCenter-SDK-Apple/iOS フォルダーを、目的の場所にあるプロジェクトのフォルダーにコピーします。
Xcode のプロジェクトに SDK フレームワークを追加します。
App Center では、アプリケーションで呼び出す特定のモジュールのみが使用されます。 SDK を起動するときは、それぞれを明示的に呼び出す必要があります。
Objective-C でプロジェクトの AppDelegate.m ファイルを開くか、Swift の AppDelegate.swift ファイルを開き、次の import ステートメントを追加します。
@import AppCenter;
@import AppCenterDistribute;
import AppCenter
import AppCenterDistribute
メソッドstart:withServices:
に を追加Distribute
して、App Center Distribute サービスを開始します。
次の行を挿入して、Objective-C の場合はプロジェクトの AppDelegate.m クラス、メソッドでは Swift の AppDelegate.swift クラスで SDK を didFinishLaunchingWithOptions
開始します。
[MSACAppCenter start:@"{Your App Secret}" withServices:@[[MSACDistribute class]]];
AppCenter.start(withAppSecret: "{Your App Secret}", services: [Distribute.self])
上記のコード サンプルで、アプリ シークレットに置き換えてください {Your App Secret}
。 また、アプリケーションで SDK を構成していない場合は、「はじめに」セクションをチェックします。
URL types
を追加します。 Xcode に Info.plist がソース コードとして表示される場合は、以下のヒントを参照してください。Item 0
) に新しいエントリを追加し、型を Dictionary に変更します。Item 0
にキーを URL Schemes
追加し、型を Array に変更します。URL Schemes
新しいエントリ (Item 0
) を追加します。URL Schemes
>Item 0
を にappcenter-{APP_SECRET}
変更し、アプリのアプリ シークレットに置き換えます。{APP_SECRET}
ヒント
Info.plist を正しく変更したことを確認する場合は、ソース コードとして開きます。 これには、 ではなく、アプリ シークレットを含む次の {APP_SECRET}
エントリが含まれている必要があります。
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>appcenter-{APP_SECRET}</string>
</array>
</dict>
</array>
既定では、配布ではパブリック配布グループが使用されます。 プライベート配布グループを使用する場合は、プロパティを使用して updateTrack
明示的に設定する必要があります。
MSACDistribute.updateTrack = MSACUpdateTrackPrivate;
Distribute.updateTrack = .private
注意
既定値は UpdateTrack.public
です。 このプロパティは、メソッド呼び出しの AppCenter.start
前にのみ更新できます。 更新トラックの変更は、アプリケーション プロセスの再起動時に保持されないため、呼び出しの前に プロパティが常に AppCenter.start
更新されない場合は、既定でパブリックになります。
この呼び出しの後、ブラウザー ウィンドウが開き、ユーザーを認証します。 以降のすべての更新チェックでは、プライベート トラックの最新リリースが取得されます。
ユーザーが プライベート トラックにいる場合は、認証が成功した後、メンバーになっているすべてのプライベート配布グループから最新のリリースが取得されることを意味します。 ユーザーが パブリック トラックにいる場合は、すべてのパブリック配布グループから最新のリリースを取得することを意味します。
既定では、SDK は新しいリリースを自動的にチェックします。
新しいリリースを手動でチェックする場合は、更新プログラムの自動チェックを無効にすることができます。 これを行うには、SDK の開始前に次のメソッドを呼び出します。
[MSACDistribute disableAutomaticCheckForUpdate];
Distribute.disableAutomaticCheckForUpdate()
注意
このメソッドは、メソッド呼び出しの前に呼び出す AppCenter.start
必要があります。
その後、次の checkForUpdate
セクションで説明する API を使用できます。
[MSACDistribute checkForUpdate];
Distribute.checkForUpdate()
これにより、App Center に要求が送信され、新しいリリースが利用可能な場合に備えて更新ダイアログが表示されます。
注意
自動更新が有効になっている場合でも、更新呼び出しの手動チェックが機能します。 別のチェックが既に実行されている場合、更新の手動チェックは無視されます。 更新プログラムの手動チェックは、ユーザーが更新プログラムを延期した場合は処理されません (最新バージョンが必須の更新プログラムでない限り)。
更新ダイアログに表示されるテキストをローカライズする場合は、独自のリソース文字列を簡単に指定できます。 この文字列ファイルを見てください。 同じ文字列名/キーを使用し、独自のアプリ文字列ファイルのダイアログに反映されるローカライズされた値を指定します。
プロトコルを実装することで、既定の更新ダイアログの外観を DistributeDelegate
カスタマイズできます。 次の例に示すように、SDK を開始する前にデリゲートを登録する必要があります。
[MSACDistribute setDelegate:self];
Distribute.delegate = self;
SDK ダイアログをカスタムのダイアログに置き換えるデリゲート実装の例を次に示します。
- (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;
}
上記のメソッドで を返した YES
/true
場合、アプリはユーザーの選択を取得し、次の API を使用して結果を SDK にメッセージする必要があります。
// 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);
上記のメソッドを呼び出さない場合、アプリがフォアグラウンドに releaseAvailableWithDetails:
入るたびに -method が繰り返されます。
SDK が更新プログラムを確認し、現在使用されている更新プログラムよりも新しい更新プログラムが見つからない場合は、 distributeNoReleaseAvailable:
デリゲートコールバックから MSACDistributeDelegate
が呼び出されます。 これにより、このようなシナリオでカスタム コードを実行できます。
更新プログラムが見つからないときにアラート UI を表示する方法を示す例を次に示します。
- (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 の配布を有効または無効にすることができます。 無効にした場合、SDK はアプリ内更新機能を提供しませんが、App Center ポータルで引き続き配布サービスを使用できます。
[MSACDistribute setEnabled:NO];
Distribute.enabled = false
App Center Distribute を再度有効にするには、同じ API を使用しますが、パラメーターとして を渡します YES
/true
。
[MSACDistribute setEnabled:YES];
Distribute.enabled = true
状態は、アプリケーションの起動間でデバイスのストレージに保持されます。
注意
このメソッドは、開始後 Distribute
にのみ使用する必要があります。
App Center の配布が有効になっているかどうかをチェックすることもできます。
BOOL enabled = [MSACDistribute isEnabled];
var enabled = Distribute.enabled
注意
このメソッドは、開始後 Distribute
にのみ使用する必要があり、常に開始前に戻ります false
。
プライベート モードの場合、アプリケーションの開始時に App Center Distribute によって UI/ブラウザーが開きます。 これはエンド ユーザーにとって想定される動作ですが、アプリケーションの開発段階では混乱を招く可能性があります。 構成の初期化Distribute
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
実装し、次の例に示すようにデリゲートを登録します。
[MSACDistribute setDelegate:self];
Distribute.delegate = self;
distributeWillExitApp:
デリゲート メソッドは、更新プログラムのインストールでアプリが終了する直前に呼び出されます。
- (void)distributeWillExitApp:(MSACDistribute *)distribute {
// Perform the required clean up here.
}
func distributeWillExitApp(_ distribute: Distribute) {
// Perform the required clean up here.
}
注意
アプリ内の更新プログラムを機能させるには、アプリ ビルドをリンクからダウンロードする必要があります。 IDE からインストールされている場合、または手動でインストールされている場合は機能しません。
アプリ内更新機能は次のように機能します。
この機能は、 App Center Distribute サービスを使用して配布されるビルドでのみ機能します。 デバッガーがアタッチされている場合、または iOS ガイド付きアクセス機能が有効になっている場合は機能しません。
SDK を統合し、アプリのリリース バージョンをビルドして App Center にアップロードすると、その配布グループ内のユーザーにメールで新しいリリースの通知が送信されます。
各ユーザーがメールでリンクを開くと、アプリケーションがデバイスにインストールされます。 電子メール リンクを使用してアプリをインストールすることが重要です。App Center Distribute では、他のソースからインストールされたアプリのアプリ内更新プログラム (電子メールの添付ファイルからアプリをダウンロードするなど) はサポートされていません。 アプリケーションがリンクからダウンロードされると、SDK は Cookie から更新のために重要な情報をチェックに保存します。それ以外の場合、SDK にはそのキー情報がありません。
アプリケーションによってトラックがプライベートに設定されている場合、ブラウザーが開き、ユーザーを認証し、アプリ内更新を有効にします。 パブリック トラックに切り替えても認証情報が有効なままで、後でもう一度プライベートに戻る場合でも、ブラウザーは再び開きません。 ブラウザー認証が成功すると、ユーザーは自動的にアプリケーションにリダイレクトされます。 トラックがパブリック (既定値) の場合は、次の手順が直接実行されます。
SFSafariViewController
インスタンスがアプリ内で開き、ユーザーを認証します。 認証が成功すると、自動的に閉じます。アプリの新しいリリースでは、アプリ内更新ダイアログが表示され、次の場合にアプリケーションを更新するようユーザーに求められます。
CFBundleShortVersionString
大きいCFBundleShortVersionString
が 等しいが、 の CFBundleVersion
値が大きい。ヒント
同じ ipa を 2 回目にアップロードした場合、バイナリが同一の場合、ダイアログは表示 されません 。 同じバージョン プロパティを持つ 新しい ビルドをアップロードすると、更新ダイアログが表示されます。 その理由は、 別 のバイナリであるためです。
リリース ビルド (App Center SDK の配布モジュールを使用) を App Center Portal にアップロードしてアプリ内更新プログラムをテストし、毎回バージョン番号を増やす必要があります。
CFBundleShortVersionString
) を更新します。ヒント
配布グループなどに関する詳細な情報については、App Center の配布を利用する方法に関する情報をご覧ください。App Center Distribute を使用して、コードを追加せずに新しいバージョンのアプリを配布することは可能ですが、アプリのコードに App Center Distribute を追加すると、テスト担当者とユーザーがアプリ内更新エクスペリエンスを取得する際によりシームレスなエクスペリエンスが得られます。
App Center SDK では、swizzling を使用して、アプリケーション デリゲートのメソッド呼び出しの一部を転送することで統合を改善します。 メソッド のスウィズリングは、実行時にメソッドの実装を変更する方法です。 何らかの理由で (たとえば、特定のポリシーのために) スウィズリングを使用しない場合は、次の手順に従って、すべての App Center サービスに対してこの転送を無効にすることができます。
AppCenterAppDelegateForwarderEnabled
し、値を に 0
設定します。 これにより、すべての App Center サービスのアプリケーション デリゲート転送が無効になります。AppDelegate
のopenURL
ファイルにコールバックを追加します。- (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)
}
トレーニング
ラーニング パス
FastTrack サービス、データ管理などを使用して、財務と運用アプリの実装を成功させるためのプロジェクト方法論を計画および設計します。