3단계: iOS 앱에 Intune SDK 통합
참고
이 가이드는 여러 가지 개별 단계로 나뉩니다. 먼저 통합 계획을 검토합니다.
스테이지 목표
- Intune 앱 SDK를 다운로드합니다.
- Intune 앱 SDK에 포함된 파일을 알아봅니다.
- 애플리케이션에서 Intune 앱 SDK를 참조합니다.
- Intune 앱 SDK가 빌드에 제대로 포함되어 있는지 확인합니다.
- MSAL을 사용하여 인증한 후 MAM 관리를 위한 새 계정을 등록합니다.
- 회사 데이터를 제거하려면 로그아웃 시 계정 등록을 취소합니다.
- (권장) 앱에 MAM 로깅을 통합합니다.
필수 조건
Xcode 14.0 이상이 설치된 macOS 컴퓨터가 필요합니다.
앱은 iOS 14.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 스텁 프레임워크. 이 프레임워크는 앱/확장이 연결해야 하는 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 프로세스 흐름을 제공합니다.
모바일 앱에 SDK 빌드
중요
Intune은 Intune 앱 SDK에 대한 업데이트를 정기적으로 릴리스합니다. 정기적으로 iOS용 Intune 앱 SDK 에서 업데이트를 확인하고 소프트웨어 개발 릴리스 주기에 통합하여 앱이 최신 앱 보호 정책 설정을 지원하는지 확인합니다.
Intune 앱 SDK를 사용하도록 설정하려면 다음 단계를 수행합니다.
또는 대상에 연결: xcframework 번들을 프로젝트 대상의 프레임워크, 라이브러리 및 포함된 콘텐츠 목록으로 끌어옵니다.
IntuneMAMStatic.xcframework
IntuneMAMSwift.xcframework
에 대해 다음 단계를 반복합니다IntuneMAMSwiftStub.xcframework
. 기본 앱의 경우 추가된 xcframeworks 모두에 대해 "포함" 열에서 "& 포함"을 선택합니다. 확장에 대해 "포함 안 함"을 선택합니다.프로젝트에 다음 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 파일을 열고 , 키 집합 액세스 그룹을 검색하고, 와일드카드 문자가 있는지 확인하여 이를 확인할 수 있습니다. 예:
<key>keychain-access-groups</key> <array> <string>YOURBUNDLESEEDID.*</string> </array>
키 집합 공유를 사용하도록 설정한 후 단계에 따라 Intune 앱 SDK에서 해당 데이터를 저장할 별도의 액세스 그룹을 만듭니다. UI를 사용하거나 권한 파일을 사용하여 키 집합 액세스 그룹을 만들 수 있습니다. UI를 사용하여 키 집합 액세스 그룹을 만드는 경우 다음 단계를 수행해야 합니다.
모바일 앱에 키 집합 액세스 그룹이 정의되어 있지 않은 경우 앱의 번들 ID를 첫 번째 그룹으로 추가합니다.
공유 키 집합 그룹을 기존 액세스 그룹에
com.microsoft.intune.mam
추가합니다. Intune 앱 SDK는 이 액세스 그룹을 사용하여 데이터를 저장합니다.기존 액세스 그룹에 추가
com.microsoft.adalcache
합니다.위에 표시된 Xcode UI를 사용하여 키 집합 액세스 그룹을 만드는 대신 권한 파일을 직접 편집하는 경우 키 집합 액세스 그룹
$(AppIdentifierPrefix)
앞에 를 추가합니다(Xcode는 자동으로 처리됨). 예:$(AppIdentifierPrefix)com.microsoft.intune.mam
$(AppIdentifierPrefix)com.microsoft.adalcache
참고
권한 파일은 모바일 애플리케이션에 고유한 XML 파일입니다. iOS 앱에서 특수 권한 및 기능을 지정하는 데 사용됩니다. 앱에 이전에 권한 파일이 없는 경우 키 집합 공유(3단계)를 사용하도록 설정하면 Xcode에서 앱에 대한 파일을 생성해야 합니다. 앱의 번들 ID가 목록의 첫 번째 항목인지 확인합니다.
앱이 전달하는 각 프로토콜을
UIApplication canOpenURL
LSApplicationQueriesSchemes
앱의 Info.plist 파일 배열에 포함합니다. 이 배열에 나열된 각 프로토콜에 대해 가 추가된-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 목록에서
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]; }]; }
앱에서 FaceID를 아직 사용하지 않는 경우 NSFaceIDUsageDescription Info.plist 키가 기본 메시지로 구성되어 있는지 확인합니다. iOS에서 앱이 FaceID를 사용하는 방법을 사용자에게 알릴 수 있도록 이 단계가 필요합니다. Intune 앱 보호 정책 설정을 사용하면 IT 관리자가 구성할 때 FaceID를 앱 액세스 방법으로 사용할 수 있습니다.
SDK 리포지토리에 포함된 IntuneMAMConfigurator 도구를 사용하여 앱의 Info.plist 구성을 완료합니다. 도구에는 다음과 같은 세 가지 매개 변수가 있습니다.
속성 사용 방법 -나는 <Path to the input plist>
- e <Path to the entitlements file>
- o (선택 사항) <Path to the output plist>
'-o' 매개 변수를 지정하지 않으면 입력 파일이 현재 위치에서 수정됩니다. 도구는 idempotent이며 앱의 Info.plist 또는 자격 변경이 있을 때마다 다시 실행해야 합니다. 또한 최신 릴리스에서 Info.plist 구성 요구 사항이 변경된 경우 Intune SDK를 업데이트할 때 최신 버전의 도구를 다운로드하고 실행해야 합니다.
Xcode 빌드 설정
앱에는 "스트립 스위프트 기호"(STRIP_SWIFT_SYMBOLS)와 "비트 코드 사용"(ENABLE_BITCODE)이 모두 NO로 설정되어 있어야 합니다.
파일 공급자 확장 프로그램 통합
파일 공급자 확장에는 전체 SDK를 통합하기가 어려울 수 있는 특정 메모리 요구 사항이 있습니다. 더 쉽게 하기 위해 파일 공급자 확장명용 SDK의 제거된 버전인 정적 라이브러리 libIntuneMAMSwiftFileProvider.xcframework
가 있습니다. FileProvider 확장의 UI가 아닌 부분에 대한 것입니다. 전체 SDK를 파일 공급자 UI 확장에 통합해야 합니다.
이러한 라이브러리 중 하나를 파일 공급자 확장명과 통합하려면 위와 같이 SDK를 정적 라이브러리로 통합하는 단계를 수행합니다. 설정을 포함 ContainingAppBundleId
해야 합니다.
복제하지 않은 파일 공급자 확장 프로그램 통합
앱이 NSFileProviderExtension 프로토콜을 구현하는 경우 복제되지 않은 파일 공급자를 사용하고 있습니다. iOS 16.0 이전에 만든 모든 파일 공급자는 복제되지 않습니다.
에서 - startProvidingItemAtURL:completionHandler: [[IntuneMAMPolicy 인스턴스]shouldFileProviderEncryptFiles]]를 사용하여 파일을 암호화해야 하는지 확인합니다. 실제 파일 암호화를 위해 IntuneMAMFileProtectionManager에서 encryptFile:forAccountId: API를 사용합니다. 또한 암호화가 필요한 경우 클라우드 스토리지에 파일의 암호화된 복사본을 저장하지 않으려면 파일 복사본을 공유합니다.
- importDocumentAtURL:toParentItemIdentifier:completionHandler: IntuneMAMFileProtectionManager에서 isFileEncrytped: API를 사용하여 파일이 암호화되는지 확인합니다. 그런 다음 decryptFile:toCopyPath: IntuneMAMFileProtectionManager의 API를 사용하여 암호를 해독합니다. 다중 ID 앱에서 대상 소유자의 IntuneMAMPolicy에서 canReceiveSharedFile: API를 확인하여 소유자가 파일을 받을 수 있는지 확인합니다.
복제된 파일 공급자 확장 프로그램 통합
앱이 NSFileProviderReplicatedExtension 프로토콜(iOS 16.0에 추가됨)을 구현하는 경우 복제된 파일 공급자를 사용하고 있습니다.
에서 - fetchContentsForItemWithIdentifier:version:request:completionHandler: [[IntuneMAMPolicy 인스턴스]shouldFileProviderEncryptFiles]]를 사용하여 파일을 암호화해야 하는지 확인합니다. 실제 파일 암호화를 위해 IntuneMAMFileProtectionManager에서 encryptFile:forAccountId: API를 사용합니다. 또한 암호화가 필요한 경우 클라우드 스토리지에 파일의 암호화된 복사본을 저장하지 않으려면 파일 복사본을 공유합니다.
- createItemBasedOnTemplate:fields:contents:options:request:completionHandler: IntuneMAMFileProtectionManager에서 isFileEncrypted: API를 사용하여 파일이 암호화되는지 확인합니다. 그런 다음 decryptFile:toCopyPath: IntuneMAMFileProtectionManager의 API를 사용하여 암호를 해독합니다. 다중 ID 앱에서 대상 소유자의 IntuneMAMPolicy에서 canReceiveSharedFile: API를 확인하여 소유자가 파일을 받을 수 있는지 확인합니다.
복제된 파일 공급자가 NSFileProviderItem을 만들고 시스템에 전달하는 모든 곳에서 항목의 소유자 ID를 사용하여 IntuneMAMFileProtectionManager의 protectFileProviderItem:forAccountId: API를 호출합니다. NSFileProviderItem 개체가 만들어지고 확장 내에서 유지되는 위치에 따라 각 NSFileProviderReplicatedExtension의 프로토콜 메서드에서 이 작업을 수행해야 할 수 있습니다.
Intune 앱 SDK에 대한 설정 구성
애플리케이션의 Info.plist 파일에서 IntuneMAMSettings 사전을 사용하여 Intune 앱 SDK를 설정하고 구성할 수 있습니다. Info.plist 파일에 IntuneMAMSettings 사전이 표시되지 않으면 만들어야 합니다.
IntuneMAMSettings 사전에서 지원되는 다음 설정을 정의하여 Intune 앱 SDK를 구성할 수 있습니다.
이러한 설정 중 일부는 이전 섹션에서 다루었을 수 있으며 일부 설정은 모든 앱에 적용되지 않습니다.
설정 | 유형 | 정의 | 필수 여부 |
---|---|---|---|
ADALClientId | String | 앱의 Microsoft Entra 클라이언트 식별자입니다. | 모든 앱에 필요합니다. |
ADALAuthority | String | 사용 중인 앱의 Microsoft Entra 기관입니다. Microsoft Entra 계정이 구성된 사용자 고유의 환경을 사용해야 합니다. 자세한 내용은 애플리케이션 구성 옵션을 참조하세요. | 앱이 단일 조직/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 호출 포함(있는 경우)를 자체 로그 파일로 라우팅할지 여부를 지정합니다. 기본값은 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로 설정하지 않는 한 자격 증명을 묻는 메시지 없이 등록 시도가 자동으로 실패합니다. |
선택 사항. 기본값은 아니요입니다. |
MAMPolicyRequired | 부울 | 앱에 Intune 앱 보호 정책이 없는 경우 앱의 시작이 차단되는지 여부를 지정합니다. 기본값은 NO입니다. 참고: MAMPolicyRequired가 YES로 설정된 앱 스토어에 앱을 제출할 수 없습니다. MAMPolicyRequired를 YES로 설정하면 AutoEnrollOnLaunch도 YES로 설정해야 합니다. |
선택 사항. 기본값은 아니요입니다. |
MAMPolicyWarnAbsent | 부울 | 앱에 Intune 앱 보호 정책이 없는 경우 시작 중에 앱이 사용자에게 경고할지 여부를 지정합니다. 참고: 사용자는 경고를 해제한 후에도 정책 없이 앱을 사용할 수 있습니다. |
선택 사항. 기본값은 아니요입니다. |
MultiIdentity | 부울 | 앱이 다중 ID 인식인지 여부를 지정합니다. | 선택 사항. 기본값은 아니요입니다. |
SafariViewControllerBlockedOverride | 부울 | Intune의 SafariViewController 후크를 사용하지 않도록 설정하여 SFSafariViewController, SFAuthSession 또는 ASWebAuthSession을 통해 MSAL 인증을 사용하도록 설정합니다. 참고: SFSafariViewControllerConfiguration 작업 단추 속성 은 Intune의 관리형 Safari 뷰 컨트롤러에서 지원되지 않습니다. 구성된 활동 단추 는 보기가 관리되지 않고 SafariViewControllerBlockedOverride가 예로 설정된 경우에만 SafariViewController에 표시됩니다. |
선택 사항. 기본값은 아니요입니다. 경고: 부적절하게 사용하면 데이터 유출이 발생할 수 있습니다. 반드시 필요한 경우에만 사용하도록 설정합니다. 자세한 내용은 앱 시작 인증에 MSAL을 사용할 때의 특별 고려 사항을 참조하세요. |
SplashIconFile SplashIconFile~ipad |
String | Intune 시작(시작) 아이콘 파일을 지정합니다. | 선택 사항. |
SplashDuration | 숫자 | Intune 시작 화면이 애플리케이션 시작 시 표시되는 최소 시간(초)입니다. 기본값은 1.5입니다. | 선택 사항. |
BackgroundColor | String | Intune SDK의 UI 구성 요소에 대한 배경색을 지정합니다. X가 0-9 또는 A-F의 범위를 지정할 수 있는 #XXXXXX 형식의 16진수 RGB 문자열을 허용합니다. 파운드 기호를 생략할 수 있습니다. | 선택 사항. 기본값은 iOS 버전과 iOS 어둡게 모드 설정에 따라 달라질 수 있는 시스템 배경색입니다. |
ForegroundColor | String | Intune SDK의 UI 구성 요소(예: 텍스트 색)에 대한 전경색을 지정합니다. X가 0-9 또는 A-F의 범위를 지정할 수 있는 #XXXXXX 형식의 16진수 RGB 문자열을 허용합니다. 파운드 기호를 생략할 수 있습니다. | 선택 사항. 기본값은 iOS 버전과 iOS 어둡게 모드 설정에 따라 달라질 수 있는 시스템 레이블 색입니다. |
AccentColor | String | 단추 텍스트 색 및 PIN 상자 강조 색과 같은 Intune SDK의 UI 구성 요소에 대한 강조 색을 지정합니다. X가 0-9 또는 A-F의 범위를 지정할 수 있는 #XXXXXX 형식의 16진수 RGB 문자열을 허용합니다. 파운드 기호를 생략할 수 있습니다. | 선택 사항. 기본값은 시스템 파란색입니다. |
SecondaryBackgroundColor | String | MTD 화면의 보조 배경색을 지정합니다. X가 0-9 또는 A-F의 범위를 지정할 수 있는 #XXXXXX 형식의 16진수 RGB 문자열을 허용합니다. 파운드 기호를 생략할 수 있습니다. | 선택 사항. 기본값은 흰색입니다. |
SecondaryForegroundColor | String | MTD 화면의 보조 전경색(예: 각주 색)을 지정합니다. X가 0-9 또는 A-F의 범위를 지정할 수 있는 #XXXXXX 형식의 16진수 RGB 문자열을 허용합니다. 파운드 기호를 생략할 수 있습니다. | 선택 사항. 기본값은 회색입니다. |
SupportsDarkMode | 부울 | BackgroundColor/ForegroundColor/AccentColor에 대해 명시적 값이 설정되지 않은 경우 Intune SDK의 UI 색 구성표가 시스템 어둡게 모드 설정을 관찰해야 하는지 여부를 지정합니다. | 선택 사항. 기본값은 예입니다. |
MAMTelemetryDisabled | 부울 | SDK가 원격 분석 데이터를 백 엔드로 보내지 않을지 지정합니다. | 선택 사항. 기본값은 아니요입니다. |
MAMTelemetryUsePPE | 부울 | MAM SDK가 PPE 원격 분석 백 엔드에 데이터를 보낼지 지정합니다. 테스트 원격 분석 데이터가 고객 데이터와 혼합되지 않도록 Intune 정책으로 앱을 테스트할 때 사용합니다. | 선택 사항. 기본값은 아니요입니다. |
MaxFileProtectionLevel | String | 앱에서 지원할 수 있는 최대 NSFileProtectionType 값을 지정할 수 있습니다. 이 값은 수준이 애플리케이션이 지원할 수 있는 수준보다 높은 경우 서비스에서 보낸 정책을 재정의합니다. 가능한 값은 NSFileProtectionComplete , , NSFileProtectionCompleteUntilFirstUserAuthentication NSFileProtectionCompleteUnlessOpen , 입니다NSFileProtectionNone . 참고: 가장 높은 파일 보호 수준(NSFileProtectionComplete )을 사용하면 디바이스가 잠금 해제되는 동안에만 보호된 파일에 액세스할 수 있습니다. 디바이스가 잠긴 후 10초 후에 앱은 보호된 파일에 대한 액세스 권한을 잃게 됩니다. 경우에 따라 내부 구성 요소(예: MySQL 데이터베이스)에 대한 액세스가 손실되어 예기치 않은 동작이 발생할 수 있습니다. 잠금 화면 UI 요소가 있는 애플리케이션은 이 값을 NSFileProtectionCompleteUntilFirstUserAuthentication 로 설정하는 것이 좋습니다. |
선택 사항. 기본값은 입니다 NSFileProtectionComplete . |
OpenInActionExtension | 부울 | 작업에서 열기 확장의 경우 YES로 설정합니다. 자세한 내용은 UIActivityViewController를 통해 데이터 공유 섹션을 참조하세요. | |
WebViewHandledURLSchemes | 문자열 배열 | 앱의 WebView에서 처리하는 URL 구성표를 지정합니다. | 앱에서 링크 및/또는 JavaScript를 통해 URL을 처리하는 WebView를 사용하는 경우 필요합니다. |
DocumentBrowserFileCachePath | String | 앱에서 를 사용하여 UIDocumentBrowserViewController 다양한 파일 공급자의 파일을 탐색하는 경우 Intune SDK가 암호 해독된 관리 파일을 해당 폴더에 삭제할 수 있도록 애플리케이션 샌드박스의 홈 디렉터리를 기준으로 이 경로를 설정할 수 있습니다. |
선택 사항. 기본값은 /Documents/ 디렉터리입니다. |
VerboseLoggingEnabled | 부울 | YES로 설정하면 Intune은 자세한 정보 표시 모드로 로그인합니다. | 선택 사항. 기본값은 NO입니다. |
FinishLaunchingAtStartup | 부울 | 앱이 사용 [BGTaskScheduler registerForTaskWithIdentifier:] 중인 경우 이 설정을 예로 설정해야 합니다. |
선택 사항. 기본값은 NO입니다. |
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을 이미 사용하는 앱은 사용자가 성공적으로 인증된 후 인스턴스에서 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;
성공적으로 로그인하면 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을 사용하여 사용자를 로그인하지 않는 앱은 API를 호출하여 SDK가 해당 인증을 처리하도록 하여 Intune MAM 서비스에서 앱 보호 정책을 계속 받을 수 있습니다. 앱은 Microsoft Entra ID로 사용자를 인증하지 않았지만 데이터를 보호하기 위해 앱 보호 정책을 검색해야 하는 경우 이 기술을 사용해야 합니다. 예를 들어 앱 로그인에 다른 인증 서비스를 사용하거나 앱에서 로그인을 전혀 지원하지 않는 경우를 예로 들어 보겠습니다. 이를 위해 애플리케이션은 인스턴스에서 메서드를 loginAndEnrollAccount
호출할 IntuneMAMEnrollmentManager
수 있습니다.
/**
* 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 서비스에 앱을 등록하려고 합니다. "nil"을 ID로 사용하여 메서드를 호출할 수 있습니다. 이 경우 SDK는 디바이스에서 기존 관리되는 사용자(MDM의 경우)에 등록하거나 기존 사용자를 찾을 수 없는 경우 사용자에게 사용자 이름을 묻는 메시지를 표시합니다.
등록에 실패하면 앱은 오류 세부 정보에 따라 나중에 이 API를 다시 호출하는 것을 고려해야 합니다. 앱은 대리자를 통해 등록 요청의 결과에 대한 알림을 받을 수 있습니다.
이 API가 호출된 후 앱은 정상적으로 계속 작동할 수 있습니다. 등록에 성공하면 SDK는 앱 다시 시작이 필요하다는 사실을 사용자에게 알립니다.
앱이 관리되면 Entra 개체 ID 값은 에서 IntuneMAMEnrollmentManager
를 사용하여 enrolledAccountId
쿼리해야 합니다. 앱이 등록된 이 계정에 사용하는 모든 MAM SDK API에 사용합니다.
예:
[[IntuneMAMEnrollmentManager instance] loginAndEnrollAccount:@"user@foo.com"];
Intune이 시작 시 인증 및 등록을 처리하도록 허용
앱 시작이 완료되기 전에 Intune SDK가 ADAL/MSAL 및 등록을 사용하여 모든 인증을 처리하도록 하고 앱에 항상 APP 정책이 필요한 경우 API를 사용할 loginAndEnrollAccount
필요가 없습니다. 앱의 Info.plist에 있는 IntuneMAMSettings 사전에서 아래의 두 설정을 예로 설정할 수 있습니다.
설정 | 유형 | 정의 |
---|---|---|
AutoEnrollOnLaunch | 부울 | 기존 관리 ID가 검색되고 아직 등록하지 않은 경우 앱이 시작 시 자동으로 등록을 시도할지 여부를 지정합니다. 기본값은 NO입니다. 참고: 관리 ID를 찾을 수 없거나 ADAL/MSAL 캐시에서 ID에 대한 유효한 토큰을 사용할 수 없는 경우 앱이 MAMPolicyRequired를 YES로 설정하지 않는 한 자격 증명을 묻는 메시지 없이 등록 시도가 자동으로 실패합니다. |
MAMPolicyRequired | 부울 | 앱에 Intune 앱 보호 정책이 없는 경우 앱의 시작이 차단되는지 여부를 지정합니다. 기본값은 NO입니다. 참고: MAMPolicyRequired가 YES로 설정된 앱은 App Store에 제출할 수 없습니다. MAMPolicyRequired를 YES로 설정하면 AutoEnrollOnLaunch도 YES로 설정해야 합니다. |
앱에 대해 이 옵션을 선택하는 경우 등록 후 앱 다시 시작을 처리할 필요가 없습니다.
사용자 계정 등록 취소
사용자가 앱에서 로그아웃되기 전에 앱은 SDK에서 사용자를 등록 취소해야 합니다. 이렇게 하면 다음이 보장됩니다.
사용자 계정에 대한 등록 재시도는 더 이상 발생하지 않습니다.
앱 보호 정책이 제거됩니다.
앱이 선택적 초기화(선택 사항)를 시작하면 회사 데이터가 삭제됩니다.
사용자가 로그아웃되기 전에 앱은 인스턴스에서 다음 메서드를 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)
- 요청과 연결된 계정의 UPN(ID)
- 요청 결과를 나타내는 상태 코드
- 상태 코드에 대한 설명이 있는 오류 문자열
- 개체입니다
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는 사용자에게 애플리케이션을 다시 시작하도록 지시하는 대화 상자를 즉시 표시합니다.
종료 조건
빌드 플러그 인을 구성하거나 명령줄 도구를 빌드 프로세스에 통합한 후 성공적으로 실행되고 있는지 확인합니다.
- 빌드가 성공적으로 컴파일되고 빌드되는지 확인합니다.
- 컴파일된 앱을 시작하고, 앱 보호 정책의 대상이 아닌 Microsoft Entra 사용자로 로그인하고, 앱이 예상대로 작동하는지 확인합니다.
- 앱 보호 정책을 대상으로 하는 Microsoft Entra 사용자로 로그아웃하고 이 테스트를 반복하고 앱이 이제 Intune에서 관리되고 다시 시작되어 있는지 확인합니다.
통합의 이 시점에서 앱은 이제 앱 보호 정책을 수신하고 적용할 수 있습니다. 다음 테스트를 실행하여 통합의 유효성을 검사합니다.
첫 번째 정책 애플리케이션 테스트
먼저 다음 테스트를 실행하여 앱 내에서 정책 애플리케이션의 전체 최종 사용자 환경을 알아봅니다.
- Microsoft Intune 관리 센터에서 iOS 앱 보호 정책을 만듭니다. 이 테스트의 경우 정책을 구성합니다.
- 액세스 요구 사항에서 기본 설정을 그대로 둡니다. 특히 "액세스용 PIN"은 "필요"여야 합니다.
- 앱 보호 정책이 애플리케이션을 대상으로 지정되었는지 확인합니다. 정책 만들기 마법사에서 애플리케이션의 번들 ID를 수동으로 추가해야 할 수 있습니다.
- 테스트 계정이 포함된 사용자 그룹에 앱 보호 정책을 할당합니다.
- 애플리케이션을 설치합니다.
- 앱 보호 정책을 대상으로 하는 테스트 계정으로 애플리케이션에 로그인합니다.
- Intune 관리 화면이 표시되고 프롬프트가 앱을 다시 시작하는지 확인합니다. 이 화면은 SDK가 이 계정에 대한 정책을 성공적으로 검색했음을 나타냅니다.
- 앱 PIN을 설정하라는 메시지가 표시되면 PIN을 만듭니다.
- 애플리케이션에서 관리되는 계정을 기록합니다.
- 애플리케이션을 탐색하고 로그인하지 않고 앱이 예상대로 작동하는지 확인합니다.
이 단계 목록은 앱이 계정을 제대로 등록하고, 인증 콜백을 등록하고, 계정 등록을 취소하는지 확인하기 위한 *최소 테스트입니다. 다음 테스트를 실행하여 다른 앱 보호 정책 설정이 애플리케이션의 동작을 수정하는 방법을 보다 철저하게 확인합니다.
다음 단계
모든 종료 조건을 완료한 후 4단계: 앱 참여 기능을 계속 진행합니다.