次の方法で共有


ステージ 3: iOS アプリへの SDK の統合をIntuneする

注:

このガイドは、いくつかの異なるステージに分かれています。 まず、「統合の 計画」を確認します。

ステージ Goals

  • Intune App SDK をダウンロードします。
  • Intune App SDK に含まれるファイルについて説明します。
  • アプリケーションで Intune App SDK を参照します。
  • Intune App SDK がビルドに適切に含まれていることを確認します。
  • MSAL で認証した後、MAM 管理用の新しいアカウントを登録します。
  • 企業データを削除するには、ログアウト時にアカウントの登録を解除します
  • (推奨)MAM ログをアプリに組み込みます。

前提条件

  • Xcode 14.0 以降がインストールされている macOS コンピューターが必要です。

  • アプリは iOS 14.0 以降を対象とする必要があります。

  • Intune App SDK for iOS ライセンス条項を確認します。 レコードのライセンス条項のコピーを印刷して保持します。 Intune App SDK for iOS をダウンロードして使用することにより、お客様はそのようなライセンス条項に同意するものとします。 同意しない場合は、ソフトウェアを使用しないでください。

  • GitHub で Intune App SDK for iOS 用のファイルをダウンロードします。

SDK リポジトリの内容

  • IntuneMAMSwift.xcframework: Intune App SDK 動的フレームワーク。 このフレームワークをアプリ/拡張機能にリンクして、Intuneクライアント アプリケーション管理を有効にすることをお勧めします。 ただし、一部の開発者は、静的フレームワーク (IntuneMAMStatic.xcframework) のパフォーマンス上の利点を好む場合があります。 以下を参照してください。

  • IntuneMAMStatic.xcframework: Intune App SDK 静的フレームワーク。 開発者は、動的フレームワークではなく静的フレームワークをリンクすることを選択できます。 静的フレームワークの実行可能コードはビルド時にアプリ/拡張機能バイナリに直接埋め込まれているため、静的ライブラリを使用すると起動時のパフォーマンス上の利点があります。 ただし、アプリに拡張機能が含まれている場合、静的フレームワークをアプリと拡張機能にリンクすると、実行可能コードが各アプリ/拡張機能バイナリに埋め込まれるので、アプリ バンドル サイズが大きくなります。 一方、動的フレームワークを使用する場合、アプリと拡張機能は SDK バイナリと同じIntune共有できるため、アプリのサイズが小さくなります。

  • IntuneMAMSwiftStub.xcframework: Intune App SDK Swift スタブ フレームワーク。 このフレームワークは、アプリ/拡張機能がリンクする必要がある IntuneMAMSwift.xcframework と IntuneMAMStatic.xcframework の両方の必須の依存関係です。

  • IntuneMAMConfigurator: アプリまたは拡張機能の Info.plist を、Intune管理に最低限必要な変更で構成するために使用されるツールです。 アプリまたは拡張機能の機能によっては、Info.plist をさらに手動で変更することが必要になる場合があります。

  • libIntuneMAMSwift.xcframework: Intune App SDK 静的ライブラリ。 Intune MAM iOS SDK のこのバリアントは非推奨となり、今後の更新で削除される予定です。 静的ライブラリをリンクせず、代わりにアプリ/拡張機能を動的フレームワーク (IntuneMAMSwift.xcframework) または静的フレームワーク (IntuneMAMStatic.xcframework) にリンクすることをお勧めします。

  • IntuneMAMResources.bundle: SDK が依存するリソースを含むリソース バンドル。 リソース バンドルは、非推奨の静的ライブラリ (libIntuneMAMSwift.xcframework) を統合するアプリにのみ必要であり、今後の更新で削除されます。

Intune App SDK のしくみ

Intune App SDK for iOS の目的は、最小限のコード変更で iOS アプリケーションに管理機能を追加することです。 コードの変更が少ないほど、市場投入までの時間は短くなりますが、モバイル アプリケーションの一貫性と安定性には影響しません。

プロセス フロー

次の図は、app SDK for iOS プロセス フロー Intuneを示しています。

Microsoft Intuneのアーキテクチャの概要図。

SDK をモバイル アプリにビルドする

重要

Intuneは、Intune App SDK の更新プログラムを定期的にリリースします。 更新プログラム用の Intune App SDK for iOS を定期的にチェックし、ソフトウェア開発リリース サイクルに組み込んで、アプリが最新の App Protection ポリシー設定を確実にサポートするようにします。

Intune App SDK を有効にするには、次の手順に従います。

  1. IntuneMAMSwift.xcframeworkまたはIntuneMAMStatic.xcframeworkをターゲットにリンクする: xcframework バンドルをプロジェクト ターゲットのフレームワーク、ライブラリ、埋め込みコンテンツの一覧にドラッグします。 IntuneMAMSwiftStub.xcframeworkに対してこれらの手順を繰り返します。 メイン アプリで、追加された xcframeworks の両方の [埋め込み] 列で [埋め込み & 記号] を選択します。 拡張機能の場合は、[埋め込み不可] を選択します。

    Intune App SDK iOS Framework: Xcode Framework、ライブラリ、埋め込みコンテンツのサンプル

  2. 次の 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
  3. 各プロジェクト ターゲットで [機能] を選択し、[キーチェーン共有] スイッチを有効にして、キーチェーン共有を有効にします (まだ有効になっていない場合)。 次の手順に進むには、キーチェーンの共有が必要です。

    注:

    プロビジョニング プロファイルでは、新しいキーチェーン共有値をサポートする必要があります。 キーチェーンアクセス グループでは、ワイルドカード文字をサポートする必要があります。 これをチェックするには、テキスト エディターで .mobileprovision ファイルを開き、キーチェーン アクセス グループを検索し、ワイルドカード文字があることを確認します。 以下に例を示します。

    <key>keychain-access-groups</key>
    <array>
    <string>YOURBUNDLESEEDID.*</string>
    </array>
    
  4. キーチェーン共有を有効にした後、手順に従って、Intune App SDK がそのデータを格納する別のアクセス グループを作成します。 UI またはエンタイトルメント ファイルを使用して、キーチェーン アクセス グループを作成できます。 UI を使用してキーチェーンアクセス グループを作成する場合は、次の手順に従ってください。

    1. モバイル アプリにキーチェーンアクセス グループが定義されていない場合は、アプリのバンドル ID を最初のグループとして追加します。

    2. 共有キーチェーン グループ com.microsoft.intune.mamを既存のアクセス グループに追加します。 Intune App SDK では、このアクセス グループを使用してデータを格納します。

    3. 既存のアクセス グループに com.microsoft.adalcache を追加します。

      Intune App SDK iOS: キーチェーン共有

    4. 上記の Xcode UI を使用してキーチェーンアクセス グループを作成するのではなく、エンタイトルメント ファイルを直接編集する場合は、キーチェーンアクセス グループの先頭に $(AppIdentifierPrefix) を付加します (Xcode はこれを自動的に処理します)。 例:

      • $(AppIdentifierPrefix)com.microsoft.intune.mam
      • $(AppIdentifierPrefix)com.microsoft.adalcache

      注:

      エンタイトルメント ファイルは、モバイル アプリケーションに固有の XML ファイルです。 これは、iOS アプリで特別なアクセス許可と機能を指定するために使用されます。 アプリに以前エンタイトルメント ファイルがなかった場合は、キーチェーン共有を有効にすると (手順 3)、Xcode によってアプリ用のファイルが生成されたはずです。 アプリのバンドル ID がリストの最初のエントリであることを確認します。

  5. アプリが UIApplication canOpenURL に渡す各プロトコルを、アプリの Info.plist ファイルの LSApplicationQueriesSchemes 配列に含めます。 この配列にリストされているプロトコルごとに、 -intunemam で追加されたプロトコルのコピーも配列に追加する必要があります。 さらに、 http-intunemamhttps-intunemammicrosoft-edge-http-intunemammicrosoft-edge-https-intunemamsmart-nszipslacoonsecuritywanderalookoutwork-aseskycurebetteractiveshieldsmsecmvisionmobilescmx、および 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];
        }];
    }
    
  6. アプリで FaceID がまだ使用されていない場合は、 NSFaceIDUsageDescription Info.plist キー が既定のメッセージで構成されていることを確認します。 この手順は、iOS がアプリで FaceID を使用する方法をユーザーに知らせるために必要です。 Intuneアプリ保護ポリシー設定を使用すると、IT 管理者によって構成されたときに、FaceID をアプリ アクセスの方法として使用できます。

  7. 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 を更新するときに、ツールの最新バージョンをダウンロードして実行する必要があります。

Xcode ビルド設定

アプリには、"Strip Swift Symbols"(STRIP_SWIFT_SYMBOLS) と "Enable Bitcode"(ENABLE_BITCODE) の両方が NO に設定されている必要があります。

ファイル プロバイダー拡張子の統合

ファイル プロバイダー拡張機能には、完全な SDK の統合を困難にする可能性がある特定のメモリ要件があります。 簡単にするために、静的ライブラリ libIntuneMAMSwiftFileProvider.xcframework があります。これは、ファイル プロバイダー拡張機能専用の SDK の削除されたバージョンです。 これは、FileProvider 拡張機能の UI 以外の部分に対するであることに注意してください。 完全な SDK をファイル プロバイダー UI 拡張機能に統合する必要があります。

これらのライブラリの 1 つをファイル プロバイダー拡張機能と統合するには、上記のように SDK を静的ライブラリとして統合する手順に従います。 ContainingAppBundleId設定を必ず含めます。

レプリケートされていないファイル プロバイダー拡張子の統合

アプリが NSFileProviderExtension プロトコルを実装している場合、アプリはレプリケートされていないファイル プロバイダーを使用しています。 iOS 16.0 より前に作成されたすべてのファイル プロバイダーはレプリケートされません。

で - startProvidingItemAtURL:completionHandler: [[IntuneMAMPolicy instance]shouldFileProviderEncryptFiles]を使用してファイルを暗号化する必要がある場合は、チェック。 実際のファイル暗号化には、IntuneMAMFileProtectionManager で encryptFile:forAccountId: API を使用します。 また、暗号化が必要な場合は、暗号化されたファイルのコピーをクラウド ストレージに格納したくないので、ファイルのコピーを共有します。

In - importDocumentAtURL:toParentItemIdentifier:completionHandler: isFileEncrytped: IntuneMAMFileProtectionManager の API を使用してファイルが暗号化されているかどうかをチェックします。 その後、decryptFile:toCopyPath: IntuneMAMFileProtectionManager の API を使用して暗号化を解除します。 マルチ ID アプリでは、宛先所有者の IntuneMAMPolicy の canReceiveSharedFile: API に対してチェックして、所有者がファイルを受信できるかどうかを確認します。

レプリケートされたファイル プロバイダー拡張機能の統合

アプリが NSFileProviderReplicatedExtension プロトコル (iOS 16.0 で追加) を実装している場合、アプリはレプリケートされたファイル プロバイダーを使用しています。

で - fetchContentsForItemWithIdentifier:version:request:completionHandler: [[IntuneMAMPolicy instance]shouldFileProviderEncryptFiles]を使用してファイルを暗号化する必要がある場合は、チェック。 実際のファイル暗号化には、IntuneMAMFileProtectionManager で encryptFile:forAccountId: API を使用します。 また、暗号化が必要な場合は、暗号化されたファイルのコピーをクラウド ストレージに格納したくないので、ファイルのコピーを共有します。

で - createItemBasedOnTemplate:fields:contents:options:request:completionHandler: isFileEncrypted: IntuneMAMFileProtectionManager の API を使用してファイルが暗号化されているかどうかをチェックします。 その後、decryptFile:toCopyPath: IntuneMAMFileProtectionManager の API を使用して暗号化を解除します。 マルチ ID アプリでは、宛先所有者の IntuneMAMPolicy の canReceiveSharedFile: API に対してチェックして、所有者がファイルを受信できるかどうかを確認します。

レプリケートされたファイル プロバイダーが NSFileProviderItem を作成してシステムに渡す任意の場所で、アイテムの所有者 ID を使用して IntuneMAMFileProtectionManager の protectFileProviderItem:forAccountId: API を呼び出します。 NSFileProviderItem オブジェクトが拡張機能内で作成および永続化される場所によっては、NSFileProviderReplicatedExtension の各プロトコル メソッドでこれを行う必要がある場合があります。

Intune App SDK の設定を構成する

アプリケーションの Info.plist ファイルの IntuneMAMSettings ディクショナリを使用して、Intune App SDK を設定および構成できます。 IntuneMAMSettings ディクショナリが Info.plist ファイルに表示されない場合は、作成する必要があります。

IntuneMAMSettings ディクショナリの下で、次のサポートされている設定を定義して、Intune App SDK を構成できます。

これらの設定の一部は前のセクションで取り上げられていた可能性があり、一部の設定はすべてのアプリに適用されない場合があります。

設定 種類 定義 必須
ADALClientId String アプリのMicrosoft Entraクライアント識別子。 すべてのアプリに必要です。
ADALAuthority String 使用中のアプリのMicrosoft Entra機関。 Microsoft Entraアカウントが構成されている独自の環境を使用する必要があります。 詳細については、「 アプリケーション構成オプション」を参照してください。 アプリが単一のorganization/Microsoft Entra テナント内で使用するために構築されたカスタム基幹業務アプリケーションである場合に必要です。 この値がない場合は、共通のMicrosoft Entra権限が使用されます (これはマルチテナント アプリケーションでのみサポートされます)。
ADALRedirectUri String アプリのMicrosoft Entraリダイレクト URI。 すべてのアプリには ADALRedirectUri または ADALRedirectScheme が必要です。
ADALRedirectScheme String アプリのMicrosoft Entra ID リダイレクト スキーム。 これは、アプリケーションのリダイレクト URI が scheme://bundle_id 形式の場合、ADALRedirectUri の代わりに使用できます。 すべてのアプリには ADALRedirectUri または ADALRedirectScheme が必要です。
ADALLogOverrideDisabled ブール型 SDK がすべての MSAL ログ (アプリからの MSAL 呼び出しがある場合は MSAL 呼び出しを含む) を独自のログ ファイルにルーティングするかどうかを指定します。 既定値は NO です。 アプリが独自の MSAL ログ コールバックを設定する場合は、YES に設定します。 省略可能。
ADALCacheKeychainGroupOverride String "com.microsoft.adalcache" ではなく、MSAL キャッシュに使用するキーチェーン グループを指定します。 これにはアプリ ID プレフィックスは含まれていないことに注意してください。 これは、実行時に指定された文字列のプレフィックスになります。 省略可能。
AppGroupIdentifiers 文字列の配列 アプリのエンタイトルメント com.apple.security.application-groups セクションからのアプリ グループの配列。 アプリでアプリケーション グループを使用する場合は必須です。
ContainingAppBundleId String 拡張機能の包含アプリケーションのバンドル ID を指定します。 iOS 拡張機能に必要です。
AutoEnrollOnLaunch ブール型 既存のマネージド ID が検出され、まだ登録されていない場合に、アプリが起動時に自動的に登録を試みるかどうかを指定します。 既定値は NO です。

注: マネージド ID が見つからない場合、または MSAL キャッシュで ID の有効なトークンが使用できない場合、アプリで MAMPolicyRequired も YES に設定されていない限り、資格情報の入力を求めずに登録試行はサイレントで失敗します。
省略可能。 既定値は no です。
MAMPolicyRequired ブール型 アプリにIntuneアプリ保護ポリシーがない場合に、アプリの起動をブロックするかどうかを指定します。 既定値は NO です。

注: MAMPolicyRequired を YES に設定して、アプリをApp Storeに送信することはできません。 MAMPolicyRequired を YES に設定する場合、AutoEnrollOnLaunch も YES に設定する必要があります。
省略可能。 既定値は no です。
MAMPolicyWarnAbsent ブール型 アプリにIntuneアプリ保護ポリシーがない場合に、起動時にアプリがユーザーに警告するかどうかを指定します。

注: ユーザーは、警告を無視した後もポリシーなしでアプリを使用できます。
省略可能。 既定値は no です。
MultiIdentity ブール型 アプリがマルチ ID 対応かどうかを指定します。 省略可能。 既定値は no です。
SafariViewControllerBlockedOverride ブール型 SFSafariViewController、SFAuthSession、または ASWebAuthSession を使用して MSAL 認証を有効にするには、Intuneの SafariViewController フックを無効にします。

注: SFSafariViewControllerConfiguration アクティビティ ボタン プロパティは、Intuneのマネージド Safari ビュー コントローラーではサポートされていません。 構成された アクティビティ ボタン は、ビューがアンマネージドであり、SafariViewControllerBlockedOverride が yes に設定されている場合にのみ SafariViewController に表示されます。
省略可能。 既定値は no です。 警告: 不適切に使用すると、データが漏洩する可能性があります。 絶対に必要な場合にのみ有効にします。 詳細については、「 アプリによって開始される認証に MSAL を使用するときの特別な考慮事項」を参照してください。
SplashIconFile
SplashIconFile~ipad
String Intune スプラッシュ (スタートアップ) アイコン ファイルを指定します。 省略可能。
SplashDuration 番号 アプリケーションの起動時にIntuneの起動画面が表示される最小時間 (秒単位)。 既定値は 1.5 です。 省略可能。
BackgroundColor String Intune SDK の UI コンポーネントの背景色を指定します。 16 進数の RGB 文字列を #XXXXXX 形式で受け入れます。X の範囲は 0 から 9 または A から F です。 ポンド記号は省略される場合があります。 省略可能。 既定値はシステムの背景色で、iOS のバージョンや iOS ダーク モードの設定によって異なる場合があります。
ForegroundColor String テキストの色など、Intune SDK の UI コンポーネントの前景色を指定します。 16 進数の RGB 文字列を #XXXXXX 形式で受け入れます。X の範囲は 0 から 9 または A から F です。 ポンド記号は省略される場合があります。 省略可能。 既定値はシステム ラベルの色で、iOS のバージョンと iOS ダーク モードの設定によって異なる場合があります。
AccentColor String ボタン テキストの色や PIN ボックスの強調表示色など、Intune SDK の UI コンポーネントのアクセントカラーを指定します。 16 進数の RGB 文字列を #XXXXXX 形式で受け入れます。X の範囲は 0 から 9 または A から F です。 ポンド記号は省略される場合があります。 省略可能。 既定値はシステム ブルーです。
SecondaryBackgroundColor String MTD 画面のセカンダリ背景色を指定します。 16 進数の RGB 文字列を #XXXXXX 形式で受け入れます。X の範囲は 0 から 9 または A から F です。 ポンド記号は省略される場合があります。 省略可能。 既定値は white です。
SecondaryForegroundColor String 脚注の色など、MTD 画面の 2 番目の前景色を指定します。 16 進数の RGB 文字列を #XXXXXX 形式で受け入れます。X の範囲は 0 から 9 または A から F です。 ポンド記号は省略される場合があります。 省略可能。 既定値は灰色です。
SupportsDarkMode ブール型 BackgroundColor/ForegroundColor/AccentColor に明示的な値が設定されていない場合に、Intune SDK の UI 配色でシステムダーク モードの設定を確認するかどうかを指定します 省略可能。 既定値は [はい] です。
MAMTelemetryDisabled ブール型 SDK がテレメトリ データをバックエンドに送信しないかどうかを指定します。 省略可能。 既定値は no です。
MAMTelemetryUsePPE ブール型 MAM SDK が PPE テレメトリ バックエンドにデータを送信するかどうかを指定します。 これは、テスト テレメトリ データが顧客データと混在しないように、Intune ポリシーを使用してアプリをテストするときに使用します。 省略可能。 既定値は no です。
MaxFileProtectionLevel String アプリがサポートできる最大 NSFileProtectionType を指定できるようにします。 レベルがアプリケーションでサポートできるレベルより高い場合、この値はサービスによって送信されるポリシーをオーバーライドします。 使用可能な値: NSFileProtectionCompleteNSFileProtectionCompleteUnlessOpenNSFileProtectionCompleteUntilFirstUserAuthenticationNSFileProtectionNone。 注意: 最高レベルのファイル保護レベル (NSFileProtectionComplete) では、保護されたファイルにアクセスできるのは、デバイスのロックが解除されている間だけです。 デバイスがロックされてから 10 秒後に、アプリは保護されたファイルへのアクセスを失います。 場合によっては、内部コンポーネント (MySQL データベースなど) へのアクセスが失われる可能性があり、予期しない動作が発生する可能性があります。 ロック画面 UI 要素を表示するアプリケーションでは、この値を NSFileProtectionCompleteUntilFirstUserAuthenticationに設定することをお勧めします。 省略可能。 既定値は NSFileProtectionComplete です。
OpenInActionExtension ブール型 [アクション拡張機能で開く] で [はい] に設定します。 詳細については、「 UIActivityViewController を使用したデータの共有 」セクションを参照してください。
WebViewHandledURLSchemes 文字列 (String) の配列 アプリの WebView が処理する URL スキームを指定します。 リンクや JavaScript を介して URL を処理する WebView をアプリで使用する場合は必須です。
DocumentBrowserFileCachePath String アプリで UIDocumentBrowserViewController を使用してさまざまなファイル プロバイダー内のファイルを参照する場合は、アプリケーション サンドボックス内のホーム ディレクトリを基準としてこのパスを設定して、Intune SDK がそのフォルダーに暗号化解除されたマネージド ファイルをドロップできるようにします。 省略可能。 既定値は /Documents/ ディレクトリです。
VerboseLoggingEnabled ブール型 [はい] に設定すると、Intuneは詳細モードでログに記録されます。 省略可能。 既定値は NO
FinishLaunchingAtStartup ブール型 アプリで [BGTaskScheduler registerForTaskWithIdentifier:] を使用している場合は、この設定を YES に設定する必要があります。 省略可能。 既定値は NO
ValuesToScrubFromLogging 文字列 (String) の配列 ログからスクラブする必要があるアプリケーション構成の値を指定します。 または、IntuneMAMSettings クラスの valuesToScrubFromLogging プロパティに、同じ動作の文字列の配列を指定することもできます。 省略可能。

アプリ保護ポリシーを受け取る

概要

アプリ保護ポリシー Intune受信するには、アプリがIntune MAM サービスで登録要求を開始する必要があります。 アプリは、デバイス登録の有無にかかわらずアプリ保護ポリシーを受け取るために、Intune管理センターで構成できます。 Mobile Application Management (MAM) を使用すると、デバイスをモバイル デバイス管理 (MDM) に登録する必要なく、IntuneでアプリIntune管理できます。 どちらの場合も、ポリシーを受信するには、Intune MAM サービスに登録する必要があります。

重要

Intune App SDK for iOS では、App Protection ポリシーによって暗号化が有効になっている場合、256 ビット暗号化キーが使用されます。 保護されたデータ共有を許可するには、すべてのアプリに現在の SDK バージョンが必要です。

ADAL または MSAL を既に使用しているアプリ

注:

Azure AD Authentication ライブラリ (ADAL) と Azure AD Graph APIは非推奨になります。 詳細については、「Microsoft Authentication Library (MSAL) と Microsoft Graph API を使用するようにアプリケーションを更新する」を参照してください。

MSAL を既に使用しているアプリでは、ユーザーが正常に認証された後、IntuneMAMEnrollmentManager インスタンスで registerAndEnrollAccountId メソッドを呼び出す必要があります。

/*
 *  This method will add the account to the list of registered accounts.
 *  An enrollment request will immediately be started.
 *  @param accountId The Entra object ID of the account to be registered with the SDK
 */

(void)registerAndEnrollAccountId:(NSString *_Nonnull)accountId;

サインインに成功すると、MSALResult オブジェクトに結果が送信されます。 上記の API の accountId パラメーターとして、MSALResult 内で tenantProfile.identifier を使用します。

registerAndEnrollAccountId メソッドを呼び出すと、SDK によってユーザー アカウントが登録され、このアカウントに代わってアプリの登録が試行されます。 何らかの理由で登録が失敗した場合、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 is started immediately.
 *  If no token can be retrieved for the identity, the user will be prompted
 *  to enter their credentials, after which enrollment will be 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 はアプリの再起動が必要であることをユーザーに通知します。 アプリを管理したら、IntuneMAMEnrollmentManagerenrolledAccountIdを使用して Entra オブジェクト ID の値を照会する必要があります。 これは、アプリがこの登録済みアカウントに使用するすべての MAM SDK API に対して使用します。

例:

[[IntuneMAMEnrollmentManager instance] loginAndEnrollAccount:@"user@foo.com"];

起動時Intune認証と登録を処理できるようにする

アプリの起動が完了する前に、Intune SDK で ADAL/MSAL と登録を使用するすべての認証を処理し、アプリで常に APP ポリシーが必要な場合は、loginAndEnrollAccount API を使用する必要はありません。 アプリの Info.plist の IntuneMAMSettings ディクショナリで、以下の 2 つの設定を YES に設定するだけです。

設定 種類 定義
AutoEnrollOnLaunch ブール型 既存のマネージド ID が検出され、まだ登録されていない場合に、アプリが起動時に自動的に登録を試みるかどうかを指定します。 既定値は NO です。

注: マネージド ID が見つからない場合、または ADAL/MSAL キャッシュで ID の有効なトークンが使用できない場合、アプリで MAMPolicyRequired も YES に設定されていない限り、登録の試行は資格情報の入力を求めずに自動的に失敗します。
MAMPolicyRequired ブール型 アプリにIntuneアプリ保護ポリシーがない場合に、アプリの起動をブロックするかどうかを指定します。 既定値は NO です。

注: MAMPolicyRequired を YES に設定して、アプリをApp Storeに送信することはできません。 MAMPolicyRequired を YES に設定する場合、AutoEnrollOnLaunch も YES に設定する必要があります。

アプリに対してこのオプションを選択した場合、登録後にアプリの再起動を処理する必要はありません。

ユーザー アカウントの登録解除

ユーザーがアプリからサインアウトされる前に、アプリは SDK からユーザーの登録を解除する必要があります。 これにより、次が保証されます。

  1. 登録の再試行は、ユーザーのアカウントに対して行われなくなります。

  2. ポリシーアプリ保護削除されます。

  3. アプリが選択的ワイプを開始すると、企業データは削除されます (省略可能)。

ユーザーがサインアウトする前に、アプリは IntuneMAMEnrollmentManager インスタンスで次のメソッドを呼び出す必要があります。

/*
 *  This method will remove the provided account from the list of
 *  registered accounts.  Once removed, if the account has enrolled
 *  the application, the account will be un-enrolled.
 *  @note In the case where an un-enroll is required, this method will block
 *  until the Intune APP AAD token is acquired, then return.  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 アプリは再起動を必要としません。

終了条件

ビルド プラグインを構成するか、コマンド ライン ツールをビルド プロセスに統合した後、正常に実行されていることを検証します。

  • ビルドが正常にコンパイルされ、ビルドされていることを確認します。
  • コンパイル済みアプリを起動し、App Protection Policy の対象になっていないMicrosoft Entra ユーザーとログインし、アプリが期待どおりに機能することを確認します。
  • App Protection Policy を対象とするMicrosoft Entra ユーザーと一緒にログアウトしてこのテストを繰り返し、アプリがIntuneによって管理され、再起動されたことを確認します。

統合のこの時点で、アプリは App Protection ポリシーを受け取って適用できるようになりました。 次のテストを実行して、統合を検証します。

最初のポリシー アプリケーション テスト

最初に次のテストを実行して、アプリ内のポリシー アプリケーションの完全なエンド ユーザー エクスペリエンスを理解します。

  1. Microsoft Intune管理センターで iOS App Protection ポリシーを作成します。 このテストでは、ポリシーを構成します。
    • [アクセス要件] で、既定の設定のままにします。 特に、"アクセス用の PIN" は "必須" である必要があります。
  2. アプリ保護ポリシーがアプリケーションを対象にしていることを確認します。 ポリシー作成ウィザードで、アプリケーションのバンドル ID を手動で追加することが必要になる場合があります。
  3. テスト アカウントを含むユーザー グループに App Protection ポリシーを割り当てます。
  4. アプリケーションをインストールします。
  5. App Protection Policy を対象とするテスト アカウントを使用して、アプリケーションにログインします。
  6. Intune管理画面でメッセージが表示されることを確認し、プロンプトがアプリを再起動することを確認します。 この画面は、SDK がこのアカウントのポリシーを正常に取得したことを示します。
  7. アプリの PIN を設定するように求められたら、PIN を作成します。
  8. マネージド アカウントをアプリケーションからログアウトします。
  9. アプリケーションの周りを移動し、ログインせずに可能な限りアプリが期待どおりに動作することを確認します。

この手順の一覧は、アプリがアカウントを適切に登録し、認証コールバックを登録し、アカウントの登録を解除することを確認するための *最低限のテストです。 次のテストを実行して、他の App Protection Policy 設定によってアプリケーションの動作がどのように変更されるかをより徹底的に検証します。

次の手順

すべての 終了条件を完了したら、 ステージ 4: アプリ参加機能に進みます。