注:
このガイドは、いくつかの異なる段階に分かれています。 まず、「 統合の計画」を確認します。
ステージ目標
- Intune アプリ SDK をダウンロードします。
- Intune App SDK に含まれるファイルについて説明します。
- アプリケーションで Intune アプリ SDK を参照します。
- Intune アプリ SDK がビルドに正しく含まれていることを確認します。
- MSAL で認証した後、MAM 管理用の新しいアカウントを登録します。
- 企業データを削除するには、サインアウト時にアカウントの登録を解除します
- (推奨)MAM ログをアプリに組み込みます。
前提条件
Xcode 16.0 以降がインストールされている macOS コンピューターが必要です。
アプリは iOS 16.0 以降をターゲットにする必要があります。
iOS 用 Intune アプリ SDK ライセンス条項を確認します。 ライセンス条項のコピーを印刷し、記録用に保管します。 iOS 用 Intune アプリ SDK をダウンロードして使用することにより、お客様はかかるライセンス条項に同意したものと見なされます。 同意しない場合は、本ソフトウェアを使用しないでください。
GitHub で iOS 用 Intune アプリ SDK のファイルをダウンロードします。
SDK リポジトリの内容
IntuneMAMSwift.xcframework: Intune アプリ SDK 動的フレームワーク。 このフレームワークをアプリ/拡張機能にリンクして、Intune クライアント アプリケーション管理を有効にすることをお勧めします。 ただし、一部の開発者は、静的フレームワーク (IntuneMAMStatic.xcframework) のパフォーマンス上の利点を好む場合があります。
IntuneMAMStatic.xcframework: Intune アプリ SDK の静的フレームワーク。 開発者は、動的フレームワークではなく静的フレームワークをリンクすることを選択する場合があります。 静的フレームワークの実行可能コードはビルド時にアプリ/拡張機能バイナリに直接埋め込まれるため、静的ライブラリを使用すると起動時のパフォーマンス上の利点がいくつかあります。 ただし、アプリに拡張機能が含まれる場合は、静的フレームワークをアプリと拡張機能にリンクすると、アプリ バンドルのサイズが大きくなります。 実行可能コードは各アプリ/拡張機能バイナリに埋め込まれています。 これに対し、動的フレームワークを使用する場合、アプリと拡張機能は同じ Intune SDK バイナリを共有することができるため、アプリのサイズが小さくなります。
IntuneMAMSwiftStub.xcframework: Intune アプリ SDK Swift Stub フレームワーク。 このフレームワークは、IntuneMAMSwift.xcframework と IntuneMAMStatic.xcframework の両方の必須の依存関係であり、アプリ/拡張機能がリンクする必要があります。
IntuneMAMConfigurator: Intune 管理に必要な最小限の変更でアプリまたは拡張機能の Info.plist を構成するために使用されるツール。 アプリまたは拡張機能の機能によっては、Info.plist にさらに手動で変更を加える必要がある場合があります。
libIntuneMAMSwift.xcframework: Intune アプリ SDK スタティック ライブラリ。 Intune MAM iOS SDK のこのバリアントは非推奨となり、今後の更新プログラムで削除されます。 静的ライブラリをリンクせず、アプリ/拡張機能を前述の動的フレームワーク (IntuneMAMSwift.xcframework) または静的フレームワーク (IntuneMAMStatic.xcframework) のいずれかにリンクすることをお勧めします。
IntuneMAMResources.bundle: SDK が依存するリソースを含むリソース バンドル。 リソース バンドルは、非推奨のスタティック ライブラリ (libIntuneMAMSwift.xcframework) を統合し、将来の更新で削除するアプリにのみ必要です。
Intune アプリ SDK のしくみ
Intune App SDK for iOS の目的は、最小限のコード変更で iOS アプリケーションに管理機能を追加することです。 コードの変更が少なければ少ないほど、市場投入までの時間は短縮されますが、モバイル アプリケーションの一貫性と安定性には影響しません。
プロセス フロー
次の図は、iOS 用 Intune アプリ SDK のプロセス フローを示しています。
SDK をモバイル アプリにビルドする
重要
Intune は、Intune アプリ SDK の更新プログラムを定期的にリリースしています。 iOS 用 Intune アプリ SDK で更新プログラムを定期的にチェックし、ソフトウェア開発のリリース サイクルに組み込んで、アプリで最新のアプリ保護ポリシー設定がサポートされていることを確認してください。
Intune アプリ SDK を有効にするには、次の手順に従います。
IntuneMAMSwift.xcframeworkまたはIntuneMAMStatic.xcframeworkをターゲットにリンクする: プロジェクト ターゲットの [Frameworks, Libraries, and Embedded Content] リストに xcframework バンドルをドラッグします。IntuneMAMSwiftStub.xcframeworkに対してこれらの手順を繰り返します。 メイン アプリの場合は、追加された両方の xcframeworks の [Embed] 列で [Embed & Sign] を選択します。 拡張機能がある場合は、[埋め込まない] を選択します。
次の iOS フレームワークをプロジェクトに追加します。
- MessageUI.framework
- Security.framework
- CoreServices.framework
- SystemConfiguration.framework
- libsqlite3.tbd
- libc++.tbd
- ImageIO.framework
- LocalAuthentication.framework
- AudioToolbox.framework
- QuartzCore.framework
- WebKit.framework
- MetricKit.framework
各プロジェクト ターゲットで [機能 ] を選択し、[ キーチェーン 共有] スイッチを有効にすることで、キーチェーン共有を有効にします (まだ有効になっていない場合)。 次の手順に進むには、キーチェーンの共有が必要です。
注:
プロビジョニング プロファイルは、新しいキーチェーン共有値をサポートする必要があります。 キーチェーン アクセス グループではワイルドカード文字がサポートされている必要があります。 これチェックするには、テキスト エディターで .mobileprovision ファイルを開き、keychain-access-groups を検索し、ワイルドカード文字があることを確認します。 例:
<key>keychain-access-groups</key> <array> <string>YOURBUNDLESEEDID.*</string> </array>キーチェーン共有を有効にしたら、手順に従って、Intune App SDK がそのデータを格納する別のアクセス グループを作成します。 UI を使用するか、資格ファイルを使用して、キーチェーン アクセス グループを作成できます。 UI を使用してキーチェーン アクセス グループを作成する場合は、必ず次の手順に従ってください。
モバイル アプリでキーチェーン アクセス グループが定義されていない場合は、アプリのバンドル ID を 最初の グループとして追加します。
共有キーチェーン グループ
com.microsoft.intune.mamを既存のアクセス グループに追加します。 Intune アプリ SDK は、このアクセス グループを使用してデータを格納します。既存のアクセス グループに
com.microsoft.adalcacheを追加します。
注:
既定の
com.microsoft.adalcacheではなくカスタム キーチェーン アクセス グループを使用するように MSAL を構成した場合、ここでこのキーチェーン アクセス グループを指定する必要はありません。 代わりに、カスタム キーチェーン グループを指定します。 また、IntuneMAMSettings Info.plist ディクショナリ内の ADALCacheKeychainGroupOverride 設定を使用して、同じカスタム アクセス グループを使用するように Intune を構成する必要があります。Xcode UI を使用してキーチェーン アクセス グループを作成するのではなく、エンタイトルメント ファイルを直接編集する場合は、キーチェーン アクセス グループの先頭に
$(AppIdentifierPrefix)を追加します (Xcode によって自動的に処理されます)。 例:$(AppIdentifierPrefix)com.microsoft.intune.mam$(AppIdentifierPrefix)com.microsoft.adalcache
注:
エンタイトルメント ファイルは、モバイル アプリケーションに固有の XML ファイルです。 iOS アプリで特別なアクセス許可と機能を指定するために使用されます。 アプリに以前にエンタイトルメント ファイルがなかった場合、キーチェーン共有を有効にすると (手順 3)、Xcode によってアプリ用にファイルが生成されます。 アプリのバンドル ID がリストの最初のエントリであることを確認します。
アプリの Info.plist ファイルの
LSApplicationQueriesSchemes配列に、アプリがUIApplication canOpenURLに渡す各プロトコルを含めます。 この配列に一覧表示されているプロトコルごとに、-intunemamを付加したプロトコルのコピーを配列に追加します。 さらに、配列にhttp-intunemam、https-intunemam、microsoft-edge-http-intunemam、microsoft-edge-https-intunemam、smart-ns、zips、lacoonsecurity、wandera、lookoutwork-ase、skycure、betteractiveshield、smsec、mvisionmobile、scmx、intunemam-mtdの値を追加します。 アプリで mailto: プロトコルを使用している場合は、配列にもms-outlook-intunemamを追加します。 次の手順に進む前に、変更を保存します。アプリの LSApplicationQueriesSchemes 一覧の領域が不足した場合は、Intune MAM SDK も実装することがわかっているアプリの "-intunemam" スキームを削除できます。 アプリが LSApplicationQueriesSchemes リストから "scheme-intunemam" を削除すると、
canOpenURL()はそれらのスキームに対して正しくない応答を返す可能性があります。 この問題を解決するには、代わりにそのスキームの[IntuneMAMPolicy isURLAllowed:url isKnownManagedAppScheme:YES]を呼び出します。 ポリシーによって URL が開かれないようにブロックされている場合、この呼び出しはNOを返します。 true を返す場合、アプリは空の ID でcanOpenURL()を呼び出して、URL を開くことができるかどうかを判定できます。 例:BOOL __block canOpen = NO; if([policy isURLAllowed:urlForKnownManagedApp isKnownManagedAppScheme:YES]) { [[IntuneMAMPolicyManager instance] setCurrentThreadAccountId:"" forScope:^{ canOpen = [[UIApplication sharedApplication] canOpenURL:urlForKnownManagedApp]; }]; }アプリで FaceID をまだ使用していない場合は、 NSFaceIDUsageDescription Info.plist キー が既定のメッセージで構成されていることを確認します。 この手順は、アプリが FaceID をどのように使用するかを iOS がユーザーに知らせるために必要です。 Intune アプリ保護ポリシー設定では、IT 管理者が構成したときにアプリへのアクセス方法として FaceID を使用できます。
SDK リポジトリに含まれている IntuneMAMConfigurator ツールを使用して、アプリの Info.plist の構成を完了します。 このツールには、次の 3 つのパラメーターがあります:
プロパティ 使用方法 - 私は <Path to the input plist>- e <Path to the entitlements file>- o (オプション) <Path to the output plist>'-o' パラメーターが指定されていない場合、入力ファイルはインプレースで変更されます。 このツールはべき等であり、アプリの Info.plist または資格を変更するたびに再実行する必要があります。 また、最新リリースで Info.plist 構成要件が変更された場合は、Intune SDK を更新するときに最新バージョンのツールをダウンロードして実行する必要があります。
注:
SwiftUI アプリを使用している場合は、Info.pist ファイルのUIApplicationSceneManifest内の辞書UISceneConfigurations見つからないか空になっていないことを確認します。 この設定を構成しないと、アプリの保護ポリシーが正常に適用されていても、Intune SDK でアプリを保護できなくなる可能性があります。
UISceneConfigurationsに特定の値が設定されていない場合は、次の既定の構成を使用できます。
<key>UISceneConfigurations</key>
<dict>
<key>UIWindowSceneSessionRoleApplication</key>
<array>
<dict>
<key>UISceneConfigurationName</key>
<string>Default Configuration</string>
<key>UISceneDelegateClassName</key>
<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
</dict>
</array>
</dict>
Xcode ビルド設定と機能
アプリでは、Xcode ビルド設定で "Strip Swift Symbols"(STRIP_SWIFT_SYMBOLS) と "Enable Bitcode"(ENABLE_BITCODE) の両方を [NO] に設定する必要があります。 アプリケーションに Xcode 26+ で利用可能な "セキュリティ強化" 機能が含まれている場合は、[ポインターの認証] オプションと [読み取り専用プラットフォーム メモリを有効にする] オプションを無効にしなければなりません。
ファイル プロバイダー拡張機能の統合
ファイル プロバイダー拡張機能には特定のメモリ要件があるため、完全な SDK の統合が困難になる場合があります。 これを簡単にするために、静的ライブラリ libIntuneMAMSwiftFileProvider.xcframeworkがあります。これは、ファイル プロバイダー拡張機能専用の SDK の一部です。 このライブラリは、FileProvider 拡張機能の非 UI 部分用であることに注意してください。 完全な SDK をファイル プロバイダー UI 拡張機能に統合する必要があります。
これらのライブラリのいずれかをファイル プロバイダー拡張機能と統合するには、SDK を静的ライブラリとして統合する手順に従います。 必ず ContainingAppBundleId 設定を含めてください。
レプリケートされていないファイル プロバイダー拡張機能の統合
アプリが NSFileProviderExtension プロトコルを実装している場合、アプリは非レプリケート ファイル プロバイダーを使用しています。 iOS 16.0 より前に作成されたすべてのファイル プロバイダーは複製されません。
In - startProvidingItemAtURL:completionHandler: [[IntuneMAMPolicy instance]shouldFileProviderEncryptFiles] を使用してファイルを暗号化する必要があるかどうかチェックします。 実際のファイルの暗号化には、IntuneMAMFileProtectionManager の encryptFile:forAccountId: API を使用します。 また、ファイルの暗号化されたコピーをクラウド ストレージに保存したくないため、暗号化が必要な場合はファイルのコピーを共有します。
In - importDocumentAtURL:toParentItemIdentifier:completionHandler: IntuneMAMFileProtectionManager の isFileEncrytped: API を使用してファイルが暗号化されているかどうかをチェックします。 その場合は、IntuneMAMFileProtectionManager の decryptFile:toCopyPath: API を使用して復号化します。 マルチ ID アプリでは、宛先所有者の IntuneMAMPolicy の canReceiveSharedFile: API をチェックして、所有者がファイルを受信できるかどうかを確認します。
レプリケートされたファイル プロバイダー拡張機能の統合
NSFileProviderReplicatedExtension プロトコル (iOS 16.0 で追加) が実装されている場合、アプリはレプリケートされたファイル プロバイダーを使用しています。
In - fetchContentsForItemWithIdentifier:version:request:completionHandler: [[IntuneMAMPolicy instance]shouldFileProviderEncryptFiles] を使用してファイルを暗号化する必要があるかどうかチェックします。 実際のファイルの暗号化には、IntuneMAMFileProtectionManager の encryptFile:forAccountId: API を使用します。 ファイルの暗号化されたコピーをクラウド ストレージに保存したくないため、暗号化が必要な場合はファイルのコピーを共有します。
In - createItemBasedOnTemplate:fields:contents:options:request:completionHandler: IntuneMAMFileProtectionManager の isFileEncrypted: API を使用してファイルが暗号化されているかどうかをチェックします。 その場合は、IntuneMAMFileProtectionManager の decryptFile:toCopyPath: API を使用して復号化します。 マルチ ID アプリでは、宛先所有者の IntuneMAMPolicy の canReceiveSharedFile: API をチェックして、所有者がファイルを受信できるかどうかを確認します。
レプリケートされたファイル プロバイダーが NSFileProviderItem を作成してシステムに渡す場所では、項目の所有者 ID を使用して IntuneMAMFileProtectionManager の protectFileProviderItem:forAccountId: API を呼び出します。 NSFileProviderItem オブジェクトが作成されて拡張機能内で保持される場所に応じて、各 NSFileProviderReplicatedExtension のプロトコル メソッドでこれを行う必要がある場合があります。
Intune アプリ SDK の設定を構成する
アプリケーションの Info.plist ファイルの IntuneMAMSettings ディクショナリを使用して、Intune アプリ SDK をセットアップおよび構成できます。 IntuneMAMSettings ディクショナリが Info.plist ファイルに表示されない場合は、作成する必要があります。
IntuneMAMSettings ディクショナリの下で、次のサポートされている設定を定義して Intune アプリ SDK を構成できます。
これらの設定の一部を前のセクションで説明しますが、一部の設定はすべてのアプリに適用されません。
| Setting | 種類 | 定義 | 必須 |
|---|---|---|---|
| ADALClientId | 文字列 | アプリの Microsoft Entra クライアント識別子。 | すべてのアプリで必須です。 |
| ADALAuthority | 文字列 | 使用中のアプリの Microsoft Entra 機関。 Microsoft Entra アカウントが構成されている独自の環境を使用する必要があります。 詳細については、「 アプリケーション構成オプション」を参照してください。 | アプリが単一の organization/Microsoft Entra テナント内で使用するために構築されたカスタム基幹業務アプリケーションである場合は必要です。 この値が指定されていない場合は、共通の Microsoft Entra 機関が使用されます (マルチテナント アプリでのみサポートされます)。 |
| ADALRedirectUri | 文字列 | アプリの Microsoft Entra リダイレクト URI。 | ADALRedirectUri または ADALRedirectScheme は、すべてのアプリに必要です。 |
| ADALRedirectScheme | 文字列 | アプリの Microsoft Entra ID リダイレクト スキーム。 アプリケーションのリダイレクト URI が scheme://bundle_id の形式の場合、ADALRedirectUri の代わりに使用できます。 |
ADALRedirectUri または ADALRedirectScheme は、すべてのアプリに必要です。 |
| ADALLogOverrideDisabled | ブール型 | SDK がすべての MSAL ログ (アプリからの MSAL 呼び出し (存在する場合) を含む) を独自のログ ファイルにルーティングするかどうかを指定します。 既定値は [いいえ] です。 アプリが独自の MSAL ログ コールバックを設定する場合は、YES に設定します。 | 省略可能。 |
| ADALCacheKeychainGroupOverride | 文字列 |
"com.microsoft.adalcache" の代わりに MSAL キャッシュに使用するキーチェーン グループを指定します。 システムは実行時に自動的にこのプレフィックスを付けます。 |
省略可能。 |
| AppGroupIdentifiers | 文字列の配列 | アプリの [資格] セクションからのアプリ グループの配列 com.apple.security.application-groups 。 |
アプリでアプリケーション グループを使用する場合は必須です。 |
| ContainingAppBundleId | 文字列 | 拡張機能に含まれるアプリケーションのバンドル ID を指定します。 | iOS 拡張機能に必要です。 |
| AutoEnrollOnLaunch | ブール型 | 既存のマネージド ID が検出され、まだ登録していない場合に、アプリが起動時に自動的に登録を試みるかどうかを指定します。 既定値は [いいえ] です。 メモ: マネージド ID が見つからない場合、または有効なトークンが MSAL キャッシュで使用できない場合、 MAMPolicyRequired が YES でない限り、登録はサイレントに失敗します。 |
省略可能。 既定値は [いいえ] です。 |
| MAMPolicyRequired | ブール型 | Intune アプリ保護ポリシーがない場合にアプリの起動をブロックするかどうかを指定します。 既定値は [いいえ] です。 メモ:この設定を [はい] に設定すると、アプリを App Store に提出することはできません。 YES に設定する場合は、 AutoEnrollOnLaunch も YES にする必要があります。 |
省略可能。 既定値は [いいえ] です。 |
| MAMPolicyWarnAbsent | ブール型 | Intune アプリ保護ポリシーが存在しない場合に、アプリの起動時にユーザーに警告するかどうかを指定します。 メモ: 警告を閉じた後も、ユーザーは続行できます。 |
省略可能。 既定値は [いいえ] です。 |
| MultiIdentity | ブール型 | アプリがマルチ ID に対応しているかどうかを指定します。 詳細については、 マルチ ID のドキュメントを参照してください。 | 省略可能。 既定値は [いいえ] です。 |
| MultiIdentityCancelDisabled | ブール型 | マルチ ID アプリケーションの Intune 条件付き起動 UI 画面のキャンセル ボタンを無効にします。 これが YES に設定されていない場合、アプリは IntuneMAMSwitchIdentityResultCanceled エラー コードを処理する必要があります。 「 ID の切り替え」を参照してください。 |
省略可能。 既定値は [いいえ] です。 |
| SafariViewControllerBlockedOverride | ブール型 | Intune の SafariViewController フックを無効にして、SFSafariViewController、SFAuthSession、または ASWebAuthSession を通じて MSAL 認証を有効にします。 メモ: [構成済みアクティビティ] ボタンは、ビューが管理されていない場合にのみ表示され、これが [はい] に設定されています。 |
省略可能。 既定値は [いいえ] です。 警告: 使い方を誤るとデータ漏洩の原因となります。 |
| SplashIconFile SplashIconFile~ipad |
文字列 | Intune スプラッシュ (スタートアップ) アイコン ファイルを指定します。 | 省略可能。 |
| SplashDuration | 番号 | Intune のスタートアップ画面が表示される最小時間 (秒単位)。 既定値は 1.5 です。 | 省略可能。 |
| BackgroundColor | 文字列 | Intune SDK UI コンポーネントの背景色を指定します。
#XXXXXX または 16 進数値に、ポンド記号は含まれません。 |
省略可能。 既定値はシステムの背景色です。 |
| ForegroundColor | 文字列 | UI コンポーネントの前景色/テキスト色を指定します。 シャープ記号なしの #XXXXXX または 16 進数を受け付けます。 |
省略可能。 既定値は、システム ラベルの色です。 |
| AccentColor | 文字列 | UI コンポーネント (ボタン、PIN ボックスの強調表示) のアクセント カラーを指定します。 シャープ記号なしの #XXXXXX または 16 進数を受け付けます。 |
省略可能。 既定値はシステム ブルーです。 |
| SecondaryBackgroundColor | 文字列 | MTD 画面の第 2 の背景色を指定します。 シャープ記号なしの #XXXXXX または 16 進数を受け付けます。 |
省略可能。 既定値は白です。 |
| SecondaryForegroundColor | 文字列 | MTD 画面の第 2 の前景色を指定します。 シャープ記号なしの #XXXXXX または 16 進数を受け付けます。 |
省略可能。 既定値は灰色です。 |
| ダークモードをサポートする | ブール型 | 明示的な色が設定されていない場合に、UI の色がシステムのダーク モードに従うかどうかを指定します。 | 省略可能。 既定値は YES です。 |
| MAMTelemetryDisabled | ブール型 | テレメトリをバックエンドに送信するかどうかを指定します。 | 省略可能。 既定値は [いいえ] です。 |
| MAMTelemetryUsePPE | ブール型 | PPE バックエンドにテレメトリを送信します。 アプリのテストで、データが顧客データと混ざり合わないようにするのに役立ちます。 | 省略可能。 既定値は [いいえ] です。 |
| MaxFileProtectionLevel | 文字列 | アプリがサポートする最大 NSFileProtectionType を指定します。 サービスが上位レベルを送信する場合はポリシーを上書きします。指定可能な値: NSFileProtectionComplete、 NSFileProtectionCompleteUnlessOpen、 NSFileProtectionCompleteUntilFirstUserAuthentication、 NSFileProtectionNone。通知: NSFileProtectionComplete を使用すると、アプリはデバイスがロックされてから ~10 秒後に保護されたファイルにアクセスできなくなり、ローカル データベースなどのコンポーネントが破損する可能性があります。 ロック画面 UI を持つアプリでは、 NSFileProtectionCompleteUntilFirstUserAuthenticationを使用する必要があります。 |
省略可能。 既定値は NSFileProtectionComplete です。 |
| OpenInActionExtension | ブール型 | Open in Action 拡張機能の場合は [はい] に設定します。 UIActivityViewController を介したデータの共有を参照してください。 | 省略可能。 |
| TreatAllWebViewsAsUnmanaged | ブール型 | 切り取り/コピー/貼り付けの適用のために、すべての WebView をアンマネージドとして扱います。 Web コンテンツの表示を参照してください。 | 省略可能。 既定値は [いいえ] です。 |
| WebViewHandledURLSchemes | 文字列の配列 | アプリの WebView によって処理される URL スキーム。 | WebView がリンクまたは JavaScript ナビゲーションを処理する場合は必須です。 |
| DocumentBrowserFileCachePath | 文字列 |
UIDocumentBrowserViewController を使用している場合は、復号化された管理ファイルのパス (アプリのホーム ディレクトリを基準にして) を設定します。 |
省略可能。 既定値は /Documents/ です。 |
| VerboseLoggingEnabled | ブール型 | 詳細ログを有効にします。 | 省略可能。 既定値は [いいえ] です。 |
| FinishLaunchingAtStartup | ブール型 |
[BGTaskScheduler registerForTaskWithIdentifier:] を使用する場合は必須ですが、YES にする必要があります。 |
省略可能。 既定値は [いいえ] です。 |
| ValuesToScrubFromLogging | 文字列の配列 | ログから削除する必要があるアプリケーション構成の値。
IntuneMAMSettings の valuesToScrubFromLogging でも設定できます。 |
省略可能。 |
アプリ保護ポリシーを受け取る
概要
Intune アプリ保護ポリシーを受け取るには、アプリは Intune MAM サービスで登録要求を開始する必要があります。 アプリは、Intune 管理センターで構成して、デバイス登録の有無にかかわらずアプリ保護ポリシーを受け取ることができます。 モバイル アプリケーション管理 (MAM) を使用すると、デバイスを Intune モバイル デバイス管理 (MDM) に登録することなく、Intune でアプリを管理できます。 どちらの場合も、ポリシーを受け取るには、Intune MAM サービスに登録する必要があります。
重要
iOS 用 Intune アプリ SDK アプリ保護ポリシーによって暗号化が有効になっている場合、256 ビットの暗号化キーが使用されます。 保護されたデータ共有を許可するには、すべてのアプリに最新の SDK バージョンが必要です。
ADAL または MSAL を既に使用しているアプリ
注:
Azure AD Authentication Library (ADAL) と Azure AD Graph API は非推奨です。 詳細については、「Microsoft Authentication Library (MSAL) と Microsoft Graph API を使用するようにアプリケーションを更新する」を参照してください。
既に MSAL を使用しているアプリは、ユーザーが正常に認証された後に、IntuneMAMEnrollmentManager インスタンスで registerAndEnrollAccountId メソッドを呼び出す必要があります。
/*
* This method adds the account to the list of registered accounts.
* An enrollment request starts immediately.
* @param accountId The Entra object ID of the account to be registered with the SDK
*/
(void)registerAndEnrollAccountId:(NSString *_Nonnull)accountId;
サインインが成功した場合、MSAL は MSALResult オブジェクトの結果を送り返します。 API の accountId パラメーターとして MSALResult 内の tenantProfile.identifier を使用します。
SDK は、 registerAndEnrollAccountId メソッドを呼び出すことでユーザー アカウントを登録し、このアカウントの代わりにアプリを登録しようとします。 何らかの理由で登録が失敗した場合、SDK は 24 時間後に自動的に登録を再試行します。 デバッグ目的で、アプリは、デリゲートを介して、登録要求の結果に関する 通知を受け取ることができます。
この API が呼び出された後、アプリは通常どおりに引き続き機能します。 登録が成功すると、SDK はアプリの再起動が必要であることをユーザーに通知します。 その時点で、ユーザーはすぐにアプリを再起動できます。
[[IntuneMAMEnrollmentManager instance] registerAndEnrollAccountId:@"3ec2c00f-b125-4519-acf0-302ac3761822"];
ADAL または MSAL を使用しないアプリ
ADAL または MSAL を使用してユーザーにサインインしないアプリは、API を呼び出して SDK にその認証を処理させることによって、Intune MAM サービスからアプリ保護ポリシーを受け取ることができます。 アプリは、Microsoft Entra ID でユーザーを認証していないが、データを保護するためにアプリ保護ポリシーを取得する必要がある場合に、この手法を使用する必要があります。 例としては、アプリのサインインに別の認証サービスが使用されている場合や、アプリでサインインがまったくサポートされていない場合が挙げられます。 これを行うには、アプリケーションで IntuneMAMEnrollmentManager インスタンスで loginAndEnrollAccount メソッドを呼び出します。
/**
* Creates an enrollment request, which starts immediately.
* If no token can be retrieved for the identity, the user is prompted
* to enter their credentials, after which enrollment is retried.
* @param identity The UPN of the account to be logged in and enrolled.
*/
(void)loginAndEnrollAccount: (NSString *)identity;
既存のトークンが見つからない場合、SDK はこのメソッドを呼び出すことでユーザーに資格情報の入力を求めます。 その後、SDK は、指定されたユーザー アカウントに代わって、アプリを Intune MAM サービスに登録しようとします。 メソッドは、ID を "nil" として呼び出すことができます。 その場合、SDK はデバイス上の既存の管理対象ユーザーに登録するか (MDM の場合)、既存のユーザーが見つからない場合はユーザーにユーザー名の入力を求められます。
登録が失敗した場合、アプリでは、エラーの詳細に応じて、後でこの API をもう一度呼び出すことを検討する必要があります。 アプリは、デリゲートを介して、登録要求の結果に関する 通知を受け取ることができます。
この API が呼び出された後、アプリは通常どおりに動作し続けることができます。 登録が成功すると、SDK はアプリの再起動が必要であることをユーザーに通知します。
アプリが管理されたら、IntuneMAMEnrollmentManagerで enrolledAccountId を使用してMicrosoft Entraオブジェクト ID の値を照会する必要があります。 この値は、アプリがこの登録済みアカウントに使用するすべての MAM SDK API に使用します。
例:
[[IntuneMAMEnrollmentManager instance] loginAndEnrollAccount:@"user@foo.com"];
起動時に Intune に認証と登録を処理させる
アプリの起動が終了する前に Intune SDK で ADAL/MSAL と登録のすべての認証を処理し、アプリに常にアプリ保護ポリシーが必要な場合は、loginAndEnrollAccount API を使用する必要はありません。 アプリの Info.plist の IntuneMAMSettings ディクショナリで、次の設定を [はい] に設定できます。
| Setting | 種類 | 定義 |
|---|---|---|
| AutoEnrollOnLaunch | ブール型 | 既存のマネージド ID が検出され、まだ登録していない場合に、アプリが起動時に自動的に登録を試みるかどうかを指定します。 既定値は NO です。 メモ:マネージド ID が見つからない場合、または ID の有効なトークンが ADAL/MSAL キャッシュで使用できない場合、アプリも YES に設定しない限り、登録試行は資格情報の入力を要求することなくサイレント MAMPolicyRequired失敗します。 |
| MAMPolicyRequired | ブール型 | アプリに Intune アプリの保護ポリシーがない場合にアプリの起動をブロックするかどうかを指定します。 既定値は NO です。 メモ: MAMPolicyRequired が [はい] に設定されたアプリを App Store に送信することはできません。
MAMPolicyRequired を YES に設定する場合は、AutoEnrollOnLaunch も YES に設定する必要があります。 |
アプリに対してこのオプションを選択した場合、登録後にアプリの再起動を処理する必要はありません。
ユーザー アカウントの登録解除
ユーザーがアプリからサインアウトする前に、アプリはユーザーを SDK から登録解除する必要があります。 このプロセスにより、次のことを確認できます。
ユーザーのアカウントでは、登録の再試行は行われなくなります。
アプリ保護ポリシーが削除されます。
アプリが選択的ワイプ (省略可能) を開始すると、企業データは削除されます。
ユーザーがサインアウトする前に、アプリは IntuneMAMEnrollmentManager インスタンスで次のメソッドを呼び出す必要があります。
/*
* This method removes the provided account from the list of
* registered accounts. Once removed, if the account enrolled
* the application, the account is un-enrolled.
* @note In the case where an un-enroll is required, this method blocks
* until the Intune APP AAD token is acquired, then returns. This method must be called before
* the user is removed from the application (so that required AAD tokens are not purged
* before this method is called).
* @param accountId The object ID of the account to be removed.
* @param doWipe If YES, a selective wipe if the account is un-enrolled
*/
(void)deRegisterAndUnenrollAccountId:(NSString *)accountId withWipe:(BOOL)doWipe;
このメソッドは、ユーザー アカウントの Microsoft Entra トークンが削除される前に呼び出す必要があります。 SDK では、ユーザーに代わって Intune MAM サービスに対して特定の要求を行うには、ユーザー アカウントの Microsoft Entra トークンが必要です。
アプリのユーザー企業データ自体を削除する場合は、 doWipe フラグを false に設定できます。 それ以外の場合、アプリは SDK に選択的ワイプを開始させることができます。 この操作の結果、アプリの選択的なワイプ デリゲートが呼び出されます。
例:
[[IntuneMAMEnrollmentManager instance] deRegisterAndUnenrollAccountId:@"3ec2c00f-b125-4519-acf0-302ac3761822" withWipe:YES];
状態、結果、デバッグの通知
アプリは、Intune MAM サービスに対する次の要求に関する状態、結果、およびデバッグの通知を受け取ることができます。
- 登録要求
- ポリシー更新の要求
- 登録解除要求
通知は、 IntuneMAMEnrollmentDelegate.h のデリゲート メソッドを介して表示されます。
/**
* Called when an enrollment request operation is completed.
* @param status status object containing debug information
*/
(void)enrollmentRequestWithStatus:(IntuneMAMEnrollmentStatus *)status;
/**
* Called when a MAM policy request operation is completed.
* @param status status object containing debug information
*/
(void)policyRequestWithStatus:(IntuneMAMEnrollmentStatus *)status;
/**
* Called when a un-enroll request operation is completed.
* @Note: when a user is un-enrolled, the user is also de-registered with the SDK
* @param status status object containing debug information
*/
(void)unenrollRequestWithStatus:(IntuneMAMEnrollmentStatus *)status;
これらのデリゲート メソッドは、次の情報を含む IntuneMAMEnrollmentStatus オブジェクトを返します。
- 要求に関連付けられているアカウントの accountId (オブジェクト ID)
- 要求に関連付けられているアカウントの ID (UPN)
- 要求の結果を示す状態コード
- 状態コードの説明を含むエラー文字列
-
NSErrorオブジェクト。 このオブジェクトは、返されることのある特定の状態コードと共にIntuneMAMEnrollmentStatus.hで定義されます。
サンプル コード
以下に、デリゲート メソッドの実装例を示します。
- (void)enrollmentRequestWithStatus:(IntuneMAMEnrollmentStatus*)status
{
NSLog(@"enrollment result for identity %@ with status code %ld", status.accountId, (unsigned long)status.statusCode);
NSLog(@"Debug Message: %@", status.errorString);
}
- (void)policyRequestWithStatus:(IntuneMAMEnrollmentStatus*)status
{
NSLog(@"policy check-in result for identity %@ with status code %ld", status.accountId, (unsigned long)status.statusCode);
NSLog(@"Debug Message: %@", status.errorString);
}
- (void)unenrollRequestWithStatus:(IntuneMAMEnrollmentStatus*)status
{
NSLog(@"un-enroll result for identity %@ with status code %ld", status.accountId, (unsigned long)status.statusCode);
NSLog(@"Debug Message: %@", status.errorString);
}
アプリケーションの再起動
アプリが初めて MAM ポリシーを受け取るときは、再起動して必要なフックを適用する必要があります。 再起動が必要であることをアプリに通知するために、SDK は IntuneMAMPolicyDelegate.h でデリゲート メソッドを提供します。
- (BOOL) restartApplication
このメソッドの戻り値は、アプリケーションが必要な再起動を処理する必要があるかどうかを SDK に伝えます。
true が返された場合、アプリケーションは再起動を処理する必要があります。
false が返された場合、このメソッドが返された後で SDK がアプリケーションを再起動します。 SDK は、アプリケーションを再起動するようにユーザーに指示するダイアログ ボックスをすぐに表示します。
注:
.NET MAUI アプリでは、再起動の必要はありません。
終了条件
ビルド プラグインを構成したり、コマンド ライン ツールをビルド プロセスに統合したりしたら、正常に実行されていることを確認します。
- ビルドが正常にコンパイルされ、ビルドされることを確認します。
- コンパイルしたアプリを起動し、アプリ保護ポリシーの対象になっていない Microsoft Entra ユーザーでサインインし、アプリが期待どおりに機能することを確認します。
- サインアウトし、アプリ保護ポリシーの対象となる Microsoft Entra ユーザーでこのテストを繰り返し、アプリが Intune によって管理され、再起動されていることを確認します。
統合のこの時点で、アプリはアプリ保護ポリシーを受け取り、適用できます。 次のテストを実行して、統合を検証します。
最初のポリシー アプリケーション テスト
最初に次のテストを実行して、アプリ内のポリシー アプリケーションの完全なエンド ユーザー エクスペリエンスを理解します。
- Microsoft Intune 管理センターで iOS アプリ保護ポリシーを作成します。 このテストでは、ポリシーを構成します:
- [アクセス要件] で、既定の設定のままにします。 特に、"アクセス用 PIN" は "必須" である必要があります。
- アプリ保護ポリシーがアプリケーションを対象としていることを確認します。 ポリシー作成ウィザードでアプリケーションのバンドル ID を手動で追加する必要がある場合があります。
- テスト アカウントを含むユーザー グループにアプリ保護ポリシーを割り当てます。
- アプリケーションをインストールします。
- アプリ保護ポリシーの対象となるテスト アカウントを使用してアプリケーションにサインインします。
- Intune の管理画面が表示されたことを確認し、そのプロンプトによりアプリが再起動します。 この画面は、SDK がこのアカウントのポリシーを正常に取得したことを示します。
- アプリ PIN の設定を求められたら、PIN を作成します。
- 管理対象アカウントをアプリケーションからログアウトします。
- 可能であれば、ログインせずにアプリケーション内を移動し、アプリが期待どおりに動作することを確認します。
この手順のリストは、アプリがアカウントを適切に登録し、認証コールバックを登録し、アカウントの登録解除を行うことを確認するための *最小限のテストです。 次のテストを実行して、他のアプリ保護ポリシー設定によってアプリケーションの動作がどのように変更されるかをより徹底的に検証します。
次の手順
すべての 終了基準を完了したら、「 ステージ 4: アプリ参加機能」に進みます。