3단계: iOS 앱에 Intune SDK 통합

참고

이 가이드는 여러 단계로 나뉩니다. 먼저 통합 계획을 검토합니다.

스테이지 목표

  • Intune 앱 SDK를 다운로드합니다.
  • Intune 앱 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 작동 방식

iOS용 Intune 앱 SDK의 목적은 최소한의 코드 변경으로 iOS 애플리케이션에 관리 기능을 추가하는 것입니다. 변경되는 코드가 적을수록 출시 시간은 짧아지지만 모바일 애플리케이션의 일관성과 안정성에는 영향을 주지 않습니다.

프로세스 흐름

다음 다이어그램은 iOS용 Intune 앱 SDK 프로세스 흐름을 제공합니다.

Microsoft Intune의 개략적인 아키텍처 다이어그램입니다.

모바일 앱에 SDK 빌드

중요

Intune은 Intune 앱 SDK에 대한 업데이트를 정기적으로 릴리스합니다. iOS용 Intune 앱 SDK에서 업데이트를 정기적으로 검사하고 소프트웨어 개발 릴리스 주기에 통합하여 앱이 최신 앱 보호 정책 설정을 지원하는지 확인합니다.

Intune 앱 SDK를 사용하도록 설정하려면 다음 단계를 수행합니다.

  1. 대상 중 하나 IntuneMAMSwift.xcframework 또는 IntuneMAMStatic.xcframework 대상에 연결: xcframework 번들을 프로젝트 대상의 프레임워크, 라이브러리 및 포함된 콘텐츠 목록으로 끌어옵니다. 에 대해 이 단계를 반복합니다.IntuneMAMSwiftStub.xcframework 기본 앱의 경우 추가된 두 xcframeworks에 대해 "포함" 열에서 "Embed & Sign"을 선택합니다. 확장의 경우 "포함 안 함"을 선택합니다.

    Intune 앱 SDK iOS 프레임워크: Xcode 프레임워크, 라이브러리 및 포함된 콘텐츠 샘플

  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 파일을 열고, keychain-access-groups를 검색하고, 와일드카드 문자가 있는지 확인하여 이를 검사할 수 있습니다. 예시:

    <key>keychain-access-groups</key>
    <array>
    <string>YOURBUNDLESEEDID.*</string>
    </array>
    
  4. 키체인 공유를 사용하도록 설정한 후 단계에 따라 Intune 앱 SDK가 해당 데이터를 저장하는 별도의 액세스 그룹을 만듭니다. UI 또는 자격 파일을 사용하여 키체인 액세스 그룹을 만들 수 있습니다. UI를 사용하여 키체인 액세스 그룹을 만드는 경우 다음 단계를 수행해야 합니다.

    1. 모바일 앱에 정의된 키체인 액세스 그룹이 없는 경우 앱의 번들 ID를 첫 번째 그룹으로 추가합니다.

    2. 기존 액세스 그룹에 공유 키체인 그룹을 com.microsoft.intune.mam 추가합니다. Intune 앱 SDK는 이 액세스 그룹을 사용하여 데이터를 저장합니다.

    3. 기존 액세스 그룹에 추가합니다 com.microsoft.adalcache .

      Intune 앱 SDK iOS: 키체인 공유

      참고

      기본값 com.microsoft.adalcache이 아닌 사용자 지정 키체인 액세스 그룹을 사용하도록 MSAL을 구성한 경우 여기에서 이 키체인 액세스 그룹을 지정할 필요가 없습니다. 대신 사용자 지정 키체인 그룹을 지정하세요. 또한 IntuneMAMSettings Info.plist 사전의 ADALCacheKeychainGroupOverride 설정을 통해 동일한 사용자 지정 액세스 그룹을 사용하도록 Intune 구성해야 합니다.

    4. Xcode UI를 사용하여 키 집합 액세스 그룹을 만드는 대신 자격 파일을 직접 편집하는 경우 키 집합 액세스 그룹 앞에 다음을 추가합니다( $(AppIdentifierPrefix) Xcode에서 이를 자동으로 처리합니다). 예시:

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

      참고

      자격 파일은 모바일 응용 프로그램에 고유한 XML 파일입니다. iOS 앱에서 특수 권한 및 기능을 지정하는 데 사용됩니다. 앱에 이전에 자격 파일이 없었다면 키 집합 공유를 활성화하면(3단계) Xcode에서 앱에 대한 파일을 생성해야 합니다. 앱의 번들 ID가 목록의 첫 번째 항목인지 확인합니다.

  5. 앱의 Info.plist 파일 배열에 LSApplicationQueriesSchemes 앱이 전달 UIApplication canOpenURL 하는 각 프로토콜을 포함합니다. 이 배열에 나열된 각 프로토콜에 대해 배열 -intunemam 에 추가된 프로토콜의 복사본을 추가합니다. 또한 배열에 http-intunemam다음 scmxskycurelookoutwork-asebetteractiveshieldwanderasmsecmvisionmobilehttps-intunemammicrosoft-edge-https-intunemamintunemam-mtdmicrosoft-edge-http-intunemamsmart-nszipslacoonsecurity값을 추가합니다. , 및 . 앱에서 mailto: 프로토콜을 사용하는 경우 배열에도 추가합니다 ms-outlook-intunemam . 다음 단계로 진행하기 전에 변경 내용을 저장합니다.

    앱의 LSApplicationQueriesSchemes 목록에 공간이 부족하면 Intune MAM SDK를 구현하는 것으로 알려진 앱의 "-intunemam" 체계를 제거할 수 있습니다. 앱이 LSApplicationQueriesSchemes 목록에서 canOpenURL() "scheme-intunemam"을 제거하면 해당 구성표에 대해 잘못된 응답을 반환할 수 있습니다. 이 문제를 해결하려면 대신 해당 구성표를 호출 [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 구성을 완료합니다. 이 도구에는 세 가지 매개 변수가 있습니다.

    속성 사용 방법
    - 나 <Path to the input plist>
    - 이 <Path to the entitlements file>
    - O (선택 사항) <Path to the output plist>

    '-o' 매개 변수를 지정하지 않으면 입력 파일이 현재 위치에서 수정됩니다. 이 도구는 idempotent이며 앱의 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를 통합하기 어렵게 만들 수 있는 특정 메모리 요구 사항이 있습니다. 더 쉽게 하기 위해 파일 공급자 확장을 위해 특별히 SDK의 제거된 버전인 정적 라이브러리 libIntuneMAMSwiftFileProvider.xcframework가 있습니다. 이 라이브러리는 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를 구성할 수 있습니다.

이전 섹션에서는 이러한 설정 중 일부를 다루었으며 일부는 모든 앱에 적용되지 않습니다.

설정 유형 정의 필수 여부
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가 형식인 경우 ADALRedirectUri 대신 사용할 수 있습니다.scheme://bundle_id 모든 앱에 ADALRedirectUri 또는 ADALRedirectScheme이 필요합니다.
ADALLogOverrideDisabled 부울 SDK가 모든 MSAL 로그(앱의 MSAL 호출 포함(있는 경우))를 자체 로그 파일로 라우팅할지 여부를 지정합니다. 기본값은 아니요입니다. 앱에서 자체 MSAL 로그 콜백을 설정하는 경우 예로 설정합니다. 선택 사항.
ADALCacheKeychainGroupOverride String MSAL 캐시 "com.microsoft.adalcache"에 사용할 키체인 그룹을 지정합니다. 시스템은 런타임에 자동으로 접두사를 추가합니다. 선택 사항.
AppGroupIdentifiers 문자열 배열 앱의 자격 섹션에 있는 앱 그룹의 배열입니다.com.apple.security.application-groups 앱에서 애플리케이션 그룹을 사용하는 경우 필요합니다.
ContainingAppBundleId String 확장에 포함된 애플리케이션의 번들 ID를 지정합니다. iOS 확장에 필요합니다.
AutoEnrollOnLaunch 부울 기존 관리 ID가 검색되었지만 아직 등록하지 않은 경우 앱이 시작할 때 자동으로 등록을 시도할지 여부를 지정합니다. 기본값은 아니요입니다.

참고: 관리 ID를 찾을 수 없거나 MSAL 캐시에서 유효한 토큰을 사용할 수 없는 경우 예(예)가 아닌 한 MAMPolicyRequired 등록이 자동으로 실패합니다.
선택 사항. 기본값은 아니요입니다.
MAMPolicyRequired 부울 Intune 앱 보호 정책이 없는 경우 앱의 시작을 차단할지 여부를 지정합니다. 기본값은 아니요입니다.

참고: 이 항목을 예로 설정한 상태에서는 앱을 App Store에 제출할 수 없습니다. YES AutoEnrollOnLaunch 로 설정할 때 YES여야 합니다.
선택 사항. 기본값은 아니요입니다.
MAMPolicyWarnAbsent 부울 Intune 앱 보호 정책이 없는 경우 앱을 시작하는 동안 사용자에게 경고할지 여부를 지정합니다.

참고: 사용자는 경고를 해제한 후에도 계속할 수 있습니다.
선택 사항. 기본값은 아니요입니다.
다중 ID 부울 앱이 다중 ID를 인식하는지 여부를 지정합니다. 자세한 내용은 다중 ID 설명서를 참조하세요. 선택 사항. 기본값은 아니요입니다.
MultiIdentityCancelDisabled 부울 다중 ID 애플리케이션의 Intune 조건부 시작 UI 화면에서 취소 단추를 사용하지 않도록 설정합니다. 이 옵션이 예로 설정되지 않은 경우 앱에서 오류 코드를 처리 IntuneMAMSwitchIdentityResultCanceled 해야 합니다. ID 전환을 참조하세요. 선택 사항. 기본값은 아니요입니다.
SafariViewControllerBlockedOverride 부울 Intune의 SafariViewController 후크를 사용하지 않도록 설정하여 SFSafariViewController, SFAuthSession 또는 ASWebAuthSession을 통해 MSAL 인증을 사용하도록 설정합니다.

참고: 구성된 활동 단추가 보기를 관리되지 않고 예로 설정한 경우에만 나타납니다.
선택 사항. 기본값은 아니요입니다.

경고: 잘못 사용하면 데이터 유출이 발생할 수 있습니다.
SplashIconFile
SplashIconFile~ipad
String Intune 시작 (시작) 아이콘 파일을 지정합니다. 선택 사항.
SplashDuration 숫자 Intune 시작 화면이 표시되는 최소 시간(초)입니다. 기본값은 1.5입니다. 선택 사항.
배경색 String Intune SDK UI 구성 요소의 배경색을 지정합니다. 파운드 기호 없이 16진수 값을 수락 #XXXXXX 합니다. 선택 사항. 기본값은 시스템 배경색입니다.
ForegroundColor String UI 구성 요소의 전경색/텍스트 색을 지정합니다. 파운드 기호 없이 수락 #XXXXXX 또는 16진수입니다. 선택 사항. 기본값은 시스템 레이블 색입니다.
AccentColor String UI 구성 요소(단추, PIN 상자 강조)에 대한 강조색을 지정합니다. 파운드 기호 없이 수락 #XXXXXX 또는 16진수입니다. 선택 사항. 기본값은 시스템 파란색입니다.
SecondaryBackgroundColor String MTD 화면의 보조 배경색을 지정합니다. 파운드 기호 없이 수락 #XXXXXX 또는 16진수입니다. 선택 사항. 기본값은 흰색입니다.
SecondaryForegroundColor String MTD 화면의 보조 전경색을 지정합니다. 파운드 기호 없이 수락 #XXXXXX 또는 16진수입니다. 선택 사항. 기본값은 회색입니다.
SupportsDarkMode 부울 명시적 색이 설정되지 않은 경우 UI 색이 시스템 어두운 모드를 따르는지 여부를 지정합니다. 선택 사항. 기본값은 예입니다.
MAMTelemetryDisabled 부울 원격 분석이 백 엔드로 전송되는지 여부를 지정합니다. 선택 사항. 기본값은 아니요입니다.
MAMTelemetryUsePPE 부울 PPE 백 엔드로 원격 분석을 보냅니다. 데이터가 고객 데이터와 혼합되지 않도록 앱을 테스트하는 데 유용합니다. 선택 사항. 기본값은 아니요입니다.
MaxFileProtectionLevel String 앱이 지원하는 최대 값을 NSFileProtectionType 지정합니다. 서비스가 더 높은 수준을 보내는 경우 정책을 재정의합니다.

가능한 값: NSFileProtectionComplete, NSFileProtectionCompleteUnlessOpen, NSFileProtectionCompleteUntilFirstUserAuthentication, NSFileProtectionNone.

알아채다: 를 사용하면 NSFileProtectionComplete디바이스가 잠긴 후 ~10초 후에 앱이 보호된 파일에 액세스할 수 없어지며, 이로 인해 로컬 데이터베이스와 같은 구성 요소가 손상될 수 있습니다. 잠금 화면 UI NSFileProtectionCompleteUntilFirstUserAuthentication가 있는 앱은 .
선택 사항. 기본값은 NSFileProtectionComplete.
OpenInActionExtension 부울 Open in Action 확장의 경우 예로 설정합니다. UIActivityViewController를 통한 데이터 공유를 참조하세요. 선택 사항.
TreatAllWebViewsAsUnmanaged 부울 잘라내기/복사/붙여넣기 적용에 대해 모든 WebView를 관리되지 않는 것으로 처리합니다. 웹 컨텐츠 표시를 참조하십시오. 선택 사항. 기본값은 아니요입니다.
WebViewHandledURLSchemes 문자열 배열 앱의 WebView에서 처리하는 URL 구성표입니다. WebView가 링크 또는 JavaScript 탐색을 처리하는 경우 필요합니다.
DocumentBrowserFileCachePath String 를 사용하는 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을 사용하는 앱

참고

ADAL(Azure AD 인증 라이브러리) 및 Azure AD Graph API는 더 이상 사용되지 않습니다. 자세한 내용은 MSAL(Microsoft 인증 라이브러리) 및 Microsoft Graph API를 사용하도록 애플리케이션 업데이트를 참조하세요..

이미 MSAL을 사용하는 앱은 사용자가 성공적으로 인증된 후 instance에서 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 개체로 다시 보냅니다. MSALResult 내에서 tenantProfile.identifier를 API의 accountId 매개 변수로 사용합니다.

메서드를 registerAndEnrollAccountId 호출하여 SDK는 사용자 계정을 등록하고 이 계정을 대신하여 앱 등록을 시도합니다. 어떤 이유로든 등록에 실패하면 SDK는 24시간 후에 자동으로 등록을 다시 시도합니다. 디버깅을 위해 앱은 대리인을 통해 등록 요청 결과에 대한 알림을 받을 수 있습니다.

이 API가 호출된 후에도 앱이 계속 정상적으로 작동할 수 있습니다. 등록에 성공하면 SDK는 사용자에게 앱을 다시 시작해야 한다고 알립니다. 이때 사용자는 앱을 즉시 다시 시작할 수 있습니다.

[[IntuneMAMEnrollmentManager instance] registerAndEnrollAccountId:@"3ec2c00f-b125-4519-acf0-302ac3761822"];

ADAL 또는 MSAL을 사용하지 않는 앱

ADAL 또는 MSAL을 사용하여 사용자를 로그인하지 않는 앱은 SDK가 해당 인증을 처리하도록 API를 호출하여 Intune MAM 서비스에서 앱 보호 정책을 계속 받을 수 있습니다. 앱은 Microsoft Entra ID로 사용자를 인증하지 않았지만 데이터를 보호하기 위해 앱 보호 정책을 검색해야 하는 경우 이 기술을 사용해야 합니다. 다른 인증 서비스가 앱 로그인에 사용되고 있거나 앱이 로그인을 전혀 지원하지 않는 경우를 예로 들 수 있습니다. 이를 위해 애플리케이션은 instance에서 메서드를 loginAndEnrollAccount 호출할 수 있습니다.IntuneMAMEnrollmentManager

/**
 *  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는 사용자에게 앱을 다시 시작해야 한다고 알립니다. 앱을 관리한 후에는 을(를) 사용하여 enrolledAccountId Microsoft Entra 개체 ID 값을 쿼리해야 합니다.IntuneMAMEnrollmentManager 앱이 이 등록된 계정에 사용하는 모든 MAM SDK API에 이를 사용합니다.

예:

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

시작 시 Intune에서 인증 및 등록을 처리하도록 합니다.

앱 시작이 완료되기 전에 Intune SDK에서 ADAL/MSAL 및 등록을 통한 모든 인증을 처리하도록 하고 앱에 항상 앱 보호 정책이 필요한 경우 API를 사용할 loginAndEnrollAccount 필요가 없습니다. 앱의 Info.plist에 있는 IntuneMAMSettings 사전에서 다음 설정을 예로 설정할 수 있습니다.

설정 유형 정의
AutoEnrollOnLaunch 부울 기존 관리 ID가 검색되었지만 아직 등록하지 않은 경우 앱이 시작할 때 자동으로 등록을 시도할지 여부를 지정합니다. 기본값은 NO입니다.

참고: 관리 ID를 찾을 수 없거나 ADAL/MSAL 캐시에서 ID에 유효한 토큰을 사용할 수 없는 경우 앱이 로 설정 MAMPolicyRequired 되지 않는 한 자격 증명을 묻는 메시지를 표시하지 않고 등록 시도가 자동으로 실패합니다.
MAMPolicyRequired 부울 앱에 Intune 앱 보호 정책이 없는 경우 앱의 시작이 차단되는지 여부를 지정합니다. 기본값은 NO입니다.

참고: 앱을 예로 설정한 상태에서는 MAMPolicyRequired App Store에 제출할 수 없습니다. YESAutoEnrollOnLaunch로 설정할 MAMPolicyRequiredYES로도 설정해야 합니다.

앱에 대해 이 옵션을 선택하면 등록 후 앱 다시 시작을 처리할 필요가 없습니다.

사용자 계정 등록 취소

사용자가 앱에서 로그아웃되기 전에 앱은 SDK에서 사용자 등록을 취소해야 합니다. 이 프로세스를 통해 다음이 보장됩니다.

  1. 사용자 계정에 대해 등록 재시도가 더 이상 발생하지 않습니다.

  2. 앱 보호 정책이 제거됩니다.

  3. 앱에서 선택적 지우기를 시작하면 회사 데이터가 삭제됩니다(선택 사항).

사용자가 로그아웃되기 전에 앱은 instance에서 다음 메서드를 호출해야 합니다.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에 의해 관리되고 다시 시작되는지 확인합니다.

통합의 이 시점에서 앱은 이제 앱 보호 정책을 수신하고 적용할 수 있습니다. 다음 테스트를 실행하여 통합의 유효성을 검사합니다.

첫 번째 정책 응용 프로그램 테스트

먼저 다음 테스트를 실행하여 앱 내 정책 애플리케이션의 전체 최종 사용자 환경에 익숙해지세요.

  1. Microsoft Intune 관리 센터에서 iOS 앱 보호 정책을 만듭니다. 이 테스트에서는 다음 정책을 구성합니다.
    • 액세스 요구 사항에서 기본 설정을 그대로 둡니다. 특히 "액세스용 PIN"은 "Require"여야 합니다.
  2. 앱 보호 정책이 응용 프로그램을 대상으로 지정되어 있는지 확인합니다. 정책 만들기 마법사에서 응용 프로그램의 번들 ID를 수동으로 추가해야 할 수 있습니다.
  3. 테스트 계정을 포함하는 사용자 그룹에 앱 보호 정책을 할당합니다.
  4. 애플리케이션을 설치합니다.
  5. 앱 보호 정책 대상 테스트 계정으로 애플리케이션에 로그인합니다.
  6. Intune 관리 화면이 표시되는지 확인하고 프롬프트를 확인하면 앱이 다시 시작됩니다. 이 화면은 SDK가 이 계정에 대한 정책을 성공적으로 검색했음을 나타냅니다.
  7. 앱 PIN을 설정하라는 메시지가 표시되면 PIN을 만듭니다.
  8. 애플리케이션에서 관리 계정을 로그아웃합니다.
  9. 애플리케이션을 탐색하고 가능하면 로그인하지 않고 앱이 예상대로 작동하는지 확인합니다.

이 단계 목록은 앱이 계정을 제대로 등록하고, 인증 콜백을 등록하고, 계정을 등록 취소하는지 확인하기 위한 *최소한의 테스트입니다. 다음 테스트를 실행하여 다른 앱 보호 정책 설정이 응용 프로그램의 동작을 수정하는 방식을 보다 철저히 검사합니다.

다음 단계

모든 종료 조건을 완료한 후 4단계: 앱 참여 기능으로 계속 진행합니다.