iOS용 앱 SDK 개발자 가이드 Microsoft Intune
참고
지원되는 각 플랫폼에서 통합을 준비하는 방법을 설명하는 Intune 앱 SDK 가이드 시작 문서를 참조하세요.
SDK를 다운로드하려면 SDK 파일 다운로드를 참조하세요.
Intune 앱 SDK를 앱에 통합하는 데 문제가 있는 경우 GitHub에서 지원 요청을 제출합니다.
iOS용 Microsoft Intune 앱 SDK를 사용하면 Intune 앱 보호 정책(APP 또는 MAM 정책이라고도 함)을 네이티브 iOS 앱에 통합할 수 있습니다. MAM 지원 애플리케이션은 Intune 앱 SDK와 통합된 애플리케이션입니다. IT 관리자는 Intune 앱을 적극적으로 관리할 때 모바일 앱에 앱 보호 정책을 배포할 수 있습니다.
필수 조건
Xcode 14.0 이상이 설치된 macOS 컴퓨터가 필요합니다.
앱은 iOS 14.0 이상을 대상으로 해야 합니다.
iOS 사용 조건에 대한 Intune 앱 SDK를 검토합니다. 레코드에 대한 사용 조건의 복사본을 인쇄하고 유지합니다. iOS용 Intune 앱 SDK를 다운로드하고 사용하여 이러한 사용 조건에 동의합니다. 동의하지 않는 경우 소프트웨어를 사용하지 마세요.
GitHub에서 iOS용 Intune 앱 SDK에 대한 파일을 다운로드합니다.
SDK 리포지토리의 내용
IntuneMAMSwift.xcframework: Intune 앱 SDK 프레임워크입니다. 이 프레임워크를 앱/확장에 연결하여 Intune 클라이언트 애플리케이션 관리를 사용하도록 설정하는 것이 좋습니다. 그러나 일부 개발자는 정적 라이브러리의 성능 이점을 선호할 수 있습니다. 다음을 참조하세요.
libIntuneMAMSwift.xcframework: Intune 앱 SDK 정적 라이브러리입니다. 개발자는 프레임워크 대신 정적 라이브러리를 연결하도록 선택할 수 있습니다. 정적 라이브러리는 빌드 시 앱/확장 이진 파일에 직접 포함되므로 정적 라이브러리를 사용하는 데 몇 가지 시작 시간 성능 이점이 있습니다. 그러나 앱에 통합하는 것은 더 복잡한 프로세스입니다. 앱에 확장이 포함된 경우 정적 라이브러리를 앱에 연결하고 확장을 연결하면 정적 라이브러리가 각 앱/확장 이진 파일에 포함되므로 앱 번들 크기가 커집니다. 프레임워크를 사용하는 경우 앱 및 확장은 동일한 Intune SDK 이진 파일을 공유할 수 있으므로 앱 크기가 작아질 수 있습니다.
IntuneMAMSwiftStub.xcframework: Intune 앱 SDK Swift 스텁 프레임워크입니다. 이는 앱/확장이 연결해야 하는 IntuneMAMSwift.xcframework 및 libIntuneMAMSwift.xcframework 모두의 필수 종속성입니다.
IntuneMAMResources.bundle: SDK가 사용하는 리소스를 포함하는 리소스 번들입니다. 리소스 번들은 정적 라이브러리(libIntuneMAMSwift.xcframework)를 통합하는 앱에만 필요합니다.
IntuneMAMConfigurator: Intune 관리에 필요한 최소 변경 내용으로 앱 또는 확장의 Info.plist를 구성하는 데 사용되는 도구입니다. 앱 또는 확장의 기능에 따라 Info.plist를 수동으로 변경해야 할 수 있습니다.
Intune 앱 SDK 작동 방식
iOS용 Intune 앱 SDK의 목적은 최소한의 코드 변경으로 iOS 애플리케이션에 관리 기능을 추가하는 것입니다. 코드가 적을수록 출시 시간이 줄어들지만 모바일 애플리케이션의 일관성과 안정성에는 영향을 주지 않습니다.
모바일 앱에 SDK 빌드
중요
Intune 정기적으로 Intune 앱 SDK에 대한 업데이트를 릴리스합니다. iOS용 Intune 앱 SDK에서 업데이트를 정기적으로 확인하고 소프트웨어 개발 릴리스 주기에 통합하여 앱이 최신 앱 보호 정책 설정을 지원하는지 확인합니다.
Intune 앱 SDK를 사용하도록 설정하려면 다음 단계를 수행합니다.
옵션 1 - 프레임워크(권장): 대상에 연결 및
IntuneMAMSwiftStub.xcframework
연결IntuneMAMSwift.xcframework
: 프로젝트 대상의 프레임워크, 라이브러리 및 포함된 콘텐츠 목록으로 끌어IntuneMAMSwift.xcframework
IntuneMAMSwiftStub.xcframework
다 옵니다.옵션 2 - 정적 라이브러리: 대상에 연결 및
IntuneMAMSwiftStub.xcframework
연결libIntuneMAMSwift.xcframework
: 프로젝트 대상의 프레임워크, 라이브러리 및 포함된 콘텐츠 목록으로 끌어libIntuneMAMSwift.xcframework
IntuneMAMSwiftStub.xcframework
다 옵니다.IntuneMAMResources.bundle
빌드 단계 내의 번들 리소스 복사에서 리소스 번들을 끌어 프로젝트에 리소스 번들을 추가합니다.프로젝트에 다음 iOS 프레임워크를 추가합니다.
- MessageUI.framework
- Security.framework
- CoreServices.framework
- SystemConfiguration.framework
- libsqlite3.tbd
- libc++.tbd
- ImageIO.framework
- LocalAuthentication.framework
- AudioToolbox.framework
- QuartzCore.framework
- WebKit.framework
각 프로젝트 대상에서 기능을 선택하고 키 집합 공유 스위치를 사용하도록 설정하여 키 집합 공유 (아직 사용하도록 설정되지 않은 경우)를 사용하도록 설정합니다. 다음 단계를 진행하려면 키 집합 공유가 필요합니다.
참고
프로비저닝 프로필은 새 키 집합 공유 값을 지원해야 합니다. 키 집합 액세스 그룹은 와일드카드 문자를 지원해야 합니다. 텍스트 편집기에서 .mobileprovision 파일을 열고 , 키 집합 액세스 그룹을 검색하고, 와일드카드 문자가 있는지 확인하여 이를 확인할 수 있습니다. 예를 들면
<key>keychain-access-groups</key> <array> <string>YOURBUNDLESEEDID.*</string> </array>
키 집합 공유를 사용하도록 설정한 후 단계에 따라 Intune 앱 SDK에서 데이터를 저장할 별도의 액세스 그룹을 만듭니다. UI를 사용하거나 권한 파일을 사용하여 키 집합 액세스 그룹을 만들 수 있습니다. UI를 사용하여 키 집합 액세스 그룹을 만드는 경우 다음 단계를 수행해야 합니다.
a. 모바일 앱에 키 집합 액세스 그룹이 정의되지 않은 경우 앱의 번들 ID를 첫 번째 그룹으로 추가합니다.
b. 공유 키 집합 그룹을 기존 액세스 그룹에
com.microsoft.intune.mam
추가합니다. Intune 앱 SDK는 이 액세스 그룹을 사용하여 데이터를 저장합니다.c. 기존 액세스 그룹에 추가
com.microsoft.adalcache
합니다.d. 위에 표시된 Xcode UI를 사용하여 키 집합 액세스 그룹을 만드는 대신 권한 파일을 직접 편집하는 경우 키 집합 액세스 그룹을
$(AppIdentifierPrefix)
앞에 추가합니다(Xcode는 자동으로 처리됨). 예를 들면$(AppIdentifierPrefix)com.microsoft.intune.mam
$(AppIdentifierPrefix)com.microsoft.adalcache
참고
권한 파일은 모바일 애플리케이션에 고유한 XML 파일입니다. iOS 앱에서 특수 권한 및 기능을 지정하는 데 사용됩니다. 앱에 이전에 권한 파일이 없는 경우 키 집합 공유(3단계)를 사용하도록 설정하면 Xcode에서 앱에 대한 파일을 생성해야 합니다. 앱의 번들 ID가 목록의 첫 번째 항목인지 확인합니다.
앱이 전달하는 각 프로토콜을
UIApplication canOpenURL
LSApplicationQueriesSchemes
앱의 Info.plist 파일 배열에 포함합니다. 이 배열에 나열된 각 프로토콜에 대해 가 추가된-intunemam
프로토콜의 복사본도 배열에 추가해야 합니다. 또한 , , , , , , , , ,wandera
,lookoutwork-ase
skycure
betteractiveshield
,smsec
, 및mvisionmobile
를scmx
배열에 추가해야 합니다.lacoonsecurity
zips
smart-ns
microsoft-edge-https-intunemam
microsoft-edge-http-intunemam
https-intunemam
http-intunemam
앱에서 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] setCurrentThreadIdentity:"" forScope:^{
canOpen = [[UIApplication sharedApplication] canOpenURL:urlForKnownManagedApp];
}];
}
앱에서 FaceID를 아직 사용하지 않는 경우 NSFaceIDUsageDescription Info.plist 키가 기본 메시지로 구성되어 있는지 확인합니다. iOS에서 앱이 FaceID를 사용하는 방법을 사용자에게 알릴 수 있도록 이 작업이 필요합니다. Intune 앱 보호 정책 설정을 사용하면 IT 관리자가 구성할 때 FaceID를 앱 액세스 방법으로 사용할 수 있습니다.
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를 업데이트할 때 최신 버전의 도구를 다운로드하고 실행해야 합니다.
Xcode 빌드 설정
앱에는 "스트립 스위프트 기호"(STRIP_SWIFT_SYMBOLS)와 "비트 코드 사용"(ENABLE_BITCODE)이 모두 NO로 설정되어 있어야 합니다.
파일 공급자 확장 프로그램 통합
파일 공급자 확장에는 전체 SDK를 통합하기가 어려울 수 있는 특정 메모리 요구 사항이 있습니다. 더 쉽게 하기 위해 파일 공급자 확장명용 SDK의 제거된 버전인 정적 라이브러리 libIntuneMAMSwiftFileProvider.xcframework
가 있습니다. FileProvider 확장의 UI가 아닌 부분에 대한 것입니다. 전체 SDK를 파일 공급자 UI 확장에 통합해야 합니다.
이러한 라이브러리 중 하나를 파일 공급자 확장명과 통합하려면 위와 같이 SDK를 정적 라이브러리로 통합하는 단계를 수행합니다. 설정을 포함 ContainingAppBundleId
해야 합니다.
다중 ID 앱인 경우 의 메서드IntuneMAMFileProtectionManager
를 사용하여 API의 파일 공급자 열거자에서 - enumeratorForContainerItemIdentifier:error:
현재 사용자 ID를 setIdentity:onFileProviderEnumerator:
설정해야 합니다.
를 - startProvidingItemAtURL:completionHandler:
사용하여 [[IntuneMAMPolicy instance]shouldFileProviderEncryptFiles]]
파일을 암호화해야 하는지 확인합니다. 실제 파일 암호화에 IntuneMAMFileProtectionManager
의 API를 사용합니다encryptFile:forIdentity
. 또한 암호화가 필요한 경우 클라우드 스토리지에 파일의 암호화된 복사본을 저장하지 않으려면 파일 복사본을 공유합니다.
에서 - importDocumentAtURL:toParentItemIdentifier:completionHandler:
API를 사용하여 isFileEncrytped:
파일이 암호화되는지 확인합니다 IntuneMAMFileProtectionManager
. 이 경우 의 IntuneMAMFileProtectionManager
API를 사용하여 decryptFile:toCopyPath:
암호를 해독합니다.
MSAL 설정
Intune 앱 SDK는 인증 및 조건부 시작 시나리오에 Microsoft 인증 라이브러리를 사용합니다. 또한 MSAL을 사용하여 디바이스 등록 시나리오 없이 관리를 위해 MAM 서비스에 사용자 ID를 등록합니다.
AAD 앱 등록 설정 및 구성
MSAL을 사용하려면 앱이 AAD(Azure Active Directory)에 등록 하고 고유한 클라이언트 ID를 만들고 URI를 리디렉션하여 앱에 부여된 토큰의 보안을 보장해야 합니다. 애플리케이션이 자체 인증에 이미 MSAL을 사용하는 경우 앱과 연결된 AAD 앱 등록/클라이언트 ID/리디렉션 URI가 이미 있어야 합니다.
앱에서 MSAL을 아직 사용하지 않는 경우 AAD에서 앱 등록을 구성하고 Intune SDK에서 사용해야 하는 클라이언트 ID 및 리디렉션 URI를 지정해야 합니다.
앱이 현재 ADAL을 사용하여 사용자를 인증하는 경우 ADAL에서 MSAL로 앱을 마이그레이션하는 방법에 대한 자세한 내용은 iOS 및 macOS용 MSAL로 애플리케이션 마이그레이션을 참조하세요.
앱은 MSAL의 최신 릴리스에 연결하는 것이 좋습니다.
MSAL을 프로젝트에 연결
설치 섹션에 따라 MSAL 이진 파일을 앱에 넣습니다.
MSAL 구성
구성 섹션에 따라 MSAL을 구성합니다. 구성 섹션의 모든 단계를 수행해야 합니다. 앱이 이미 AAD에 등록된 경우 1단계를 무시합니다.
아래 사항에는 MSAL을 구성하고 연결하기 위한 추가 정보가 포함되어 있습니다. 애플리케이션에 적용되는 경우 이를 따릅니다.
- 앱에 정의된 키 집합 액세스 그룹이 없는 경우 앱의 번들 ID를 첫 번째 그룹으로 추가합니다.
- 키 집합 액세스 그룹에 를 추가하여
com.microsoft.adalcache
MSAL SSO(Single Sign-On)를 사용하도록 설정합니다. - MSAL 공유 캐시 키 집합 그룹을 명시적으로 설정하는 경우 로 설정되어
<appidprefix>.com.microsoft.adalcache
있는지 확인합니다. MSAL은 재정의하지 않는 한 이를 설정합니다. 를 바꿀com.microsoft.adalcache
사용자 지정 키 집합 그룹을 지정하려면 키를 사용하여ADALCacheKeychainGroupOverride
IntuneMAMSettings 아래의 Info.plist 파일에서 를 지정합니다.
Intune 앱 SDK에 대한 MSAL 설정 구성
AAD에서 애플리케이션에 대해 앱 등록이 구성되면 AAD에 대해 인증하는 동안 앱 등록의 설정을 사용하도록 Intune 앱 SDK를 구성할 수 있습니다. 다음 설정을 채우는 방법에 대한 자세한 내용은 Intune 앱 SDK에 대한 설정 구성을 참조하세요.
- ADALClientId
- ADALAuthority
- ADALRedirectUri
- ADALRedirectScheme
- ADALCacheKeychainGroupOverride
다음 구성이 필요합니다.
프로젝트의 Info.plist 파일에서 키 이름이
ADALClientId
인 IntuneMAMSettings 사전 아래에서 MSAL 호출에 사용할 클라이언트 ID를 지정합니다.1단계에서 구성된 클라이언트 ID에 매핑되는 Azure AD 앱 등록이 단일 AAD 테넌트에서만 사용하도록 구성된 경우 애플리케이션의 Info.plist 파일 내에서 IntuneMAMSettings 사전에서 키를 구성
ADALAuthority
합니다. msAL에서 Intune 모바일 애플리케이션 관리 서비스에 대한 토큰을 획득하는 데 사용할 Azure AD 기관을 지정합니다.또한 키 이름이
ADALRedirectUri
인 IntuneMAMSettings 사전 아래에서 MSAL 호출에 사용할 리디렉션 URI를 지정합니다. 또는 애플리케이션의 리디렉션 URI가 형식scheme://bundle_id
인 경우 대신 를 지정할ADALRedirectScheme
수 있습니다.
또는 앱은 런타임에 이러한 Azure AD 설정을 재정의할 수 있습니다. 이렇게 하려면 클래스에서 aadAuthorityUriOverride
, aadClientIdOverride
및 aadRedirectUriOverride
속성을 IntuneMAMSettings
설정하기만 하면됩니다.
- 앱 보호 정책(APP) 서비스에 대한 iOS 앱 권한을 부여하는 단계를 따릅니다. "앱 보호 서비스에 대한 앱 액세스 권한 부여(선택 사항)" 아래의 Intune Intune SDK 시작 가이드의 지침을 사용합니다.
참고
Info.plist 접근 방식은 정적이며 런타임에 확인할 필요가 없는 모든 설정에 권장됩니다. 런타임 시 클래스 속성에 IntuneMAMSettings
할당된 값이 Info.plist에 지정된 해당 값보다 우선하며 앱이 다시 시작된 후에도 유지됩니다. SDK는 사용자가 등록 취소되거나 값이 지워지거나 변경될 때까지 정책 체크 인에 계속 사용합니다.
앱 시작 인증에 MSAL을 사용할 때 특별한 고려 사항
애플리케이션은 앱 시작 MSAL 대화형 인증 작업에 대해 SFSafariViewController, SFAuthenticationSession 또는 ASWebAuthenticationSession을 웹 보기로 사용하지 않는 것이 좋습니다. 기본적으로 MSAL은 ASWebAuthenticationSession을 사용하므로 앱 개발자는 웹 보기 형식 을 WKWebView로 명시적으로 설정해야 합니다. 어떤 이유로든 앱이 대화형 MSAL 인증 작업에 WKWebView 이외의 웹 보기 형식을 사용해야 하는 경우 애플리케이션의 Info.plist의 사전 아래에서 IntuneMAMSettings
로 설정 true
SafariViewControllerBlockedOverride
해야 합니다. 경고: 인증 세션을 사용하도록 설정하기 위해 Intune SafariViewController 후크가 꺼집니다. 이렇게 하면 애플리케이션이 SafariViewController를 사용하여 회사 데이터를 보는 경우 앱의 다른 곳에서 데이터가 누출될 위험이 있으므로 애플리케이션은 이러한 웹 보기 형식에 회사 데이터를 표시해서는 안 됩니다.
Intune 앱 SDK에 대한 설정 구성
애플리케이션의 Info.plist 파일에서 IntuneMAMSettings 사전을 사용하여 Intune 앱 SDK를 설정하고 구성할 수 있습니다. Info.plist 파일에 IntuneMAMSettings 사전이 표시되지 않으면 만들어야 합니다.
IntuneMAMSettings 사전에서 지원되는 다음 설정을 정의하여 Intune 앱 SDK를 구성할 수 있습니다.
이러한 설정 중 일부는 이전 섹션에서 다루었을 수 있으며 일부 설정은 모든 앱에 적용되지 않습니다.
설정 | 유형 | 정의 | 필수 여부 |
---|---|---|---|
ADALClientId | 문자열 | 앱의 Azure AD 클라이언트 식별자입니다. | MSAL을 사용하는 모든 앱에 필요합니다. |
ADALAuthority | 문자열 | 사용 중인 앱의 Azure AD 기관입니다. AAD 계정이 구성된 사용자 고유의 환경을 사용해야 합니다. 자세한 내용은 애플리케이션 구성 옵션을 참조하세요. | 앱이 단일 조직/AAD 테넌트 내에서 사용하도록 빌드된 사용자 지정 기간 업무 애플리케이션인 경우 필요합니다. 이 값이 없으면 공통 AAD 기관이 사용됩니다(다중 테넌트 애플리케이션에 대해서만 지원됨). |
ADALRedirectUri | 문자열 | 앱의 Azure AD 리디렉션 URI입니다. | MSAL을 사용하는 모든 앱과 비 Intune AAD 리소스에 액세스하는 ADAL 앱에는 ADALRedirectUri 또는 ADALRedirectScheme이 필요합니다. |
ADALRedirectScheme | 문자열 | 앱의 Azure AD 리디렉션 체계입니다. 애플리케이션의 리디렉션 URI가 형식 scheme://bundle_id 인 경우 ADALRedirectUri 대신 사용할 수 있습니다. |
MSAL을 사용하는 모든 앱과 비 Intune AAD 리소스에 액세스하는 ADAL 앱에는 ADALRedirectUri 또는 ADALRedirectScheme이 필요합니다. |
ADALLogOverrideDisabled | 부울 | SDK가 모든 MSAL 로그(앱의 MSAL 호출 포함(있는 경우)를 자체 로그 파일로 라우팅할지 여부를 지정합니다. 기본값은 NO입니다. 앱이 자체 MSAL 로그 콜백을 설정하는 경우 YES로 설정합니다. | 선택 사항. |
ADALCacheKeychainGroupOverride | 문자열 | "com.microsoft.adalcache" 대신 MSAL 캐시에 사용할 키 집합 그룹을 지정합니다. 앱 ID 접두사는 없습니다. 런타임에 제공된 문자열에 접두사로 지정됩니다. | 선택 사항. |
AppGroupIdentifiers | 문자열 배열 | 앱의 권한 com.apple.security.application-groups 섹션의 앱 그룹 배열입니다. | 앱에서 애플리케이션 그룹을 사용하는 경우 필요합니다. |
ContainingAppBundleId | 문자열 | 확장이 포함된 애플리케이션의 번들 ID를 지정합니다. | iOS 확장에 필요합니다. |
AutoEnrollOnLaunch | 부울 | 기존 관리 ID가 검색되고 아직 등록하지 않은 경우 앱이 시작 시 자동으로 등록을 시도할지 여부를 지정합니다. 기본값은 NO입니다. 참고: 관리 ID를 찾을 수 없거나 MSAL 캐시에서 ID에 대한 유효한 토큰을 사용할 수 없는 경우 앱이 MAMPolicyRequired를 YES로 설정하지 않는 한 자격 증명을 묻는 메시지 없이 등록 시도가 자동으로 실패합니다. |
선택 사항. 기본값은 아니요입니다. |
MAMPolicyRequired | 부울 | 앱에 Intune 앱 보호 정책이 없는 경우 앱의 시작이 차단되는지 여부를 지정합니다. 기본값은 NO입니다. 참고: MAMPolicyRequired가 YES로 설정된 App Store 앱을 제출할 수 없습니다. MAMPolicyRequired를 YES로 설정하면 AutoEnrollOnLaunch도 YES로 설정해야 합니다. |
선택 사항. 기본값은 아니요입니다. |
MAMPolicyWarnAbsent | 부울 | 앱에 Intune 앱 보호 정책이 없는 경우 앱이 시작 중에 사용자에게 경고할지 여부를 지정합니다. 참고: 사용자는 경고를 해제한 후에도 정책 없이 앱을 사용할 수 있습니다. |
선택 사항. 기본값은 아니요입니다. |
MultiIdentity | 부울 | 앱이 다중 ID 인식인지 여부를 지정합니다. | 선택 사항. 기본값은 아니요입니다. |
SafariViewControllerBlockedOverride | 부울 | SFSafariViewController, SFAuthSession 또는 ASWebAuthSession을 통해 MSAL 인증을 사용하도록 설정하려면 Intune SafariViewController 후크를 사용하지 않도록 설정합니다. 참고: SFSafariViewControllerConfiguration 작업 단추 속성은 Intune 관리되는 Safari 뷰 컨트롤러에서 지원되지 않습니다. 구성된 활동 단추 는 보기가 관리되지 않고 SafariViewControllerBlockedOverride가 예로 설정된 경우에만 SafariViewController에 표시됩니다. |
선택 사항. 기본값은 아니요입니다. 경고: 부적절하게 사용하면 데이터 유출이 발생할 수 있습니다. 반드시 필요한 경우에만 사용하도록 설정합니다. 자세한 내용은 앱 시작 인증에 MSAL을 사용할 때의 특별 고려 사항을 참조하세요. |
SplashIconFile SplashIconFile~ipad |
문자열 | 시작 Intune 아이콘 파일을 지정합니다. | 선택 사항. |
SplashDuration | 숫자 | 애플리케이션 시작 시 Intune 시작 화면이 표시되는 최소 시간(초)입니다. 기본값은 1.5입니다. | 선택 사항. |
Backgroundcolor | 문자열 | Intune SDK의 UI 구성 요소에 대한 배경색을 지정합니다. X가 0-9 또는 A-F의 범위를 지정할 수 있는 #XXXXXX 형식의 16진수 RGB 문자열을 허용합니다. 파운드 기호를 생략할 수 있습니다. | 선택 사항. 기본값은 iOS 버전과 iOS 어둡게 모드 설정에 따라 달라질 수 있는 시스템 배경색입니다. |
ForegroundColor | 문자열 | 텍스트 색과 같은 Intune SDK UI 구성 요소의 전경색을 지정합니다. X가 0-9 또는 A-F의 범위를 지정할 수 있는 #XXXXXX 형식의 16진수 RGB 문자열을 허용합니다. 파운드 기호를 생략할 수 있습니다. | 선택 사항. 기본값은 iOS 버전과 iOS 어둡게 모드 설정에 따라 달라질 수 있는 시스템 레이블 색입니다. |
AccentColor | 문자열 | 단추 텍스트 색 및 PIN 상자 강조 색과 같은 Intune SDK의 UI 구성 요소에 대한 강조 색을 지정합니다. X가 0-9 또는 A-F의 범위를 지정할 수 있는 #XXXXXX 형식의 16진수 RGB 문자열을 허용합니다. 파운드 기호를 생략할 수 있습니다. | 선택 사항. 기본값은 시스템 파란색입니다. |
SecondaryBackgroundColor | 문자열 | MTD 화면의 보조 배경색을 지정합니다. X가 0-9 또는 A-F의 범위를 지정할 수 있는 #XXXXXX 형식의 16진수 RGB 문자열을 허용합니다. 파운드 기호를 생략할 수 있습니다. | 선택 사항. 기본값은 흰색입니다. |
SecondaryForegroundColor | 문자열 | MTD 화면의 보조 전경색(예: 각주 색)을 지정합니다. X가 0-9 또는 A-F의 범위를 지정할 수 있는 #XXXXXX 형식의 16진수 RGB 문자열을 허용합니다. 파운드 기호를 생략할 수 있습니다. | 선택 사항. 기본값은 회색입니다. |
SupportsDarkMode | 부울 | BackgroundColor/ForegroundColor/AccentColor에 대해 명시적 값이 설정되지 않은 경우 Intune SDK의 UI 색 구성표가 시스템 어둡게 모드 설정을 준수해야 하는지 여부를 지정합니다. | 선택 사항. 기본값은 예입니다. |
MAMTelemetryDisabled | 부울 | SDK가 원격 분석 데이터를 백 엔드로 보내지 않을지 지정합니다. | 선택 사항. 기본값은 아니요입니다. |
MAMTelemetryUsePPE | 부울 | MAM SDK가 PPE 원격 분석 백 엔드에 데이터를 보낼지 지정합니다. 테스트 원격 분석 데이터가 고객 데이터와 혼합되지 않도록 Intune 정책으로 앱을 테스트할 때 사용합니다. | 선택 사항. 기본값은 아니요입니다. |
MaxFileProtectionLevel | 문자열 | 앱에서 지원할 수 있는 최대 NSFileProtectionType 값을 지정할 수 있습니다. 이 값은 수준이 애플리케이션이 지원할 수 있는 수준보다 높은 경우 서비스에서 보낸 정책을 재정의합니다. 가능한 값은 NSFileProtectionComplete , , NSFileProtectionCompleteUntilFirstUserAuthentication NSFileProtectionCompleteUnlessOpen , 입니다NSFileProtectionNone . 참고: 가장 높은 파일 보호 수준(NSFileProtectionComplete )을 사용하면 디바이스가 잠금 해제되는 동안에만 보호된 파일에 액세스할 수 있습니다. 디바이스가 잠긴 후 10초 후에 앱은 보호된 파일에 대한 액세스 권한을 잃게 됩니다. |
선택 사항. 기본값은 입니다 NSFileProtectionComplete . |
OpenInActionExtension | 부울 | 작업에서 열기 확장의 경우 YES로 설정합니다. 자세한 내용은 UIActivityViewController를 통한 데이터 공유 섹션을 참조하세요. | |
WebViewHandledURLSchemes | 문자열 배열 | 앱의 WebView에서 처리하는 URL 구성표를 지정합니다. | 앱에서 링크 및/또는 JavaScript를 통해 URL을 처리하는 WebView를 사용하는 경우 필요합니다. |
DocumentBrowserFileCachePath | 문자열 | 앱에서 를 사용하여 UIDocumentBrowserViewController 다양한 파일 공급자의 파일을 탐색하는 경우 애플리케이션 샌드박스의 홈 디렉터리를 기준으로 이 경로를 설정하여 Intune SDK가 암호 해독된 관리 파일을 해당 폴더에 삭제할 수 있도록 할 수 있습니다. |
선택 사항. 기본값은 /Documents/ 디렉터리입니다. |
VerboseLoggingEnabled | 부울 | YES로 설정하면 Intune 자세한 정보 표시 모드로 로그인됩니다. | 선택 사항. 기본값은 NO입니다. |
FinishLaunchingAtStartup | 부울 | 앱이 사용 [BGTaskScheduler registerForTaskWithIdentifier:] 중인 경우 이 설정을 예로 설정해야 합니다. |
선택 사항. 기본값은 NO입니다. |
앱 보호 정책 받기
개요
Intune 앱 보호 정책을 받으려면 앱이 Intune MAM 서비스를 사용하여 등록 요청을 시작해야 합니다. 디바이스 등록 여부에 관계없이 앱 보호 정책을 수신하도록 Intune 관리 센터에서 앱을 구성할 수 있습니다. MAM(모바일 애플리케이션 관리)을 사용하면 Intune MDM(모바일 디바이스 관리)에 디바이스를 등록할 필요 없이 Intune 앱을 관리할 수 있습니다. 두 경우 모두 정책을 수신하려면 Intune MAM 서비스에 등록해야 합니다.
중요
iOS용 Intune 앱 SDK는 앱 보호 정책에서 암호화를 사용하는 경우 256비트 암호화 키를 사용합니다. 보호된 데이터 공유를 허용하려면 모든 앱에 현재 SDK 버전이 있어야 합니다.
이미 ADAL 또는 MSAL을 사용하는 앱
참고
Azure Active Directory(Azure AD) ADAL(인증 라이브러리) 및 Azure AD Graph API 더 이상 사용되지 않습니다. 자세한 내용은 MSAL(Microsoft 인증 라이브러리) 및 Microsoft Graph API를 사용하도록 애플리케이션 업데이트를 참조하세요..
이미 ADAL 또는 MSAL을 사용하는 앱은 사용자가 성공적으로 인증된 후 인스턴스에서 IntuneMAMEnrollmentManager
메서드를 호출 registerAndEnrollAccount
해야 합니다.
/*
* This method will add the account to the list of registered accounts.
* An enrollment request will immediately be started.
* @param identity The UPN of the account to be registered with the SDK
*/
(void)registerAndEnrollAccount:(NSString *)identity;
메서드를 registerAndEnrollAccount
호출하여 SDK는 사용자 계정을 등록하고 이 계정을 대신하여 앱을 등록하려고 시도합니다. 어떤 이유로든 등록이 실패하면 SDK는 24시간 후에 자동으로 등록을 다시 시도합니다. 디버깅을 위해 앱은 대리자를 통해 등록 요청의 결과에 대한 알림을 받을 수 있습니다.
이 API가 호출된 후에도 앱은 정상적으로 계속 작동할 수 있습니다. 등록에 성공하면 SDK는 앱 다시 시작이 필요하다는 사실을 사용자에게 알립니다. 이때 사용자는 즉시 앱을 다시 시작할 수 있습니다.
[[IntuneMAMEnrollmentManager instance] registerAndEnrollAccount:@"user@foo.com"];
ADAL 또는 MSAL을 사용하지 않는 앱
ADAL 또는 MSAL을 사용하여 사용자를 로그인하지 않는 앱은 API를 호출하여 해당 인증을 처리하도록 API를 호출하여 Intune MAM 서비스에서 앱 보호 정책을 받을 수 있습니다. 앱은 Azure AD 사용자를 인증하지 않았지만 데이터를 보호하기 위해 앱 보호 정책을 검색해야 하는 경우 이 기술을 사용해야 합니다. 예를 들어 앱 로그인에 다른 인증 서비스를 사용하거나 앱이 로그인을 전혀 지원하지 않는 경우입니다. 이를 위해 애플리케이션은 인스턴스에서 메서드를 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는 앱 다시 시작이 필요하다는 사실을 사용자에게 알립니다.
예제:
[[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 identity The UPN of the account to be removed.
* @param doWipe If YES, a selective wipe if the account is un-enrolled
*/
(void)deRegisterAndUnenrollAccount:(NSString *)identity withWipe:(BOOL)doWipe;
사용자 계정의 Azure AD 토큰이 삭제되기 전에 이 메서드를 호출해야 합니다. SDK는 사용자를 대신하여 Intune MAM 서비스에 특정 요청을 하려면 사용자 계정의 AAD 토큰이 필요합니다.
앱이 자체적으로 사용자의 회사 데이터를 삭제하는 경우 플래그를 doWipe
false로 설정할 수 있습니다. 그렇지 않으면 앱에서 SDK가 선택적 초기화를 시작하게 할 수 있습니다. 그러면 앱의 선택적 초기화 대리자를 호출하게 됩니다.
예제:
[[IntuneMAMEnrollmentManager instance] deRegisterAndUnenrollAccount:@"user@foo.com" 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
다음 정보가 있는 개체를 반환합니다.
- 요청과 연결된 계정의 ID입니다.
- 요청 결과를 나타내는 상태 코드
- 상태 코드에 대한 설명이 있는 오류 문자열
- 개체입니다
NSError
. 이 개체는 반환할 수 있는 특정 상태 코드와 함께 에IntuneMAMEnrollmentStatus.h
정의됩니다.
샘플 코드
대리자 메서드의 예제 구현은 다음과 같습니다.
- (void)enrollmentRequestWithStatus:(IntuneMAMEnrollmentStatus*)status
{
NSLog(@"enrollment result for identity %@ with status code %ld", status.identity, (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.identity, (unsigned long)status.statusCode);
NSLog(@"Debug Message: %@", status.errorString);
}
- (void)unenrollRequestWithStatus:(IntuneMAMEnrollmentStatus*)status
{
NSLog(@"un-enroll result for identity %@ with status code %ld", status.identity, (unsigned long)status.statusCode);
NSLog(@"Debug Message: %@", status.errorString);
}
애플리케이션 다시 시작
앱이 처음으로 MAM 정책을 수신하는 경우 필요한 후크를 적용하려면 다시 시작해야 합니다. 다시 시작해야 한다는 것을 앱에 알리기 위해 SDK는 에서 IntuneMAMPolicyDelegate.h
대리자 메서드를 제공합니다.
- (BOOL) restartApplication
이 메서드의 반환 값은 애플리케이션이 필요한 다시 시작을 처리해야 하는지 SDK에 알려줍니다.
true가 반환되면 애플리케이션에서 다시 시작을 처리해야 합니다.
false가 반환되면 이 메서드가 반환된 후 SDK가 애플리케이션을 다시 시작합니다. SDK는 사용자에게 애플리케이션을 다시 시작하도록 지시하는 대화 상자를 즉시 표시합니다.
API를 사용하여 앱 동작 사용자 지정
Intune 앱 SDK에는 앱에 배포된 Intune APP 정책에 대한 정보를 가져오기 위해 호출할 수 있는 여러 API가 있습니다. 이 데이터를 사용하여 앱의 동작을 사용자 지정할 수 있습니다. 다음 표에서는 사용할 몇 가지 필수 Intune 클래스에 대한 정보를 제공합니다.
클래스 | 설명 |
---|---|
IntuneMAMPolicyManager.h | IntuneMAMPolicyManager 클래스는 애플리케이션에 배포된 Intune APP 정책을 노출합니다. 특히 다중 ID를 사용하도록 설정하는 데 유용한 API를 노출합니다. |
IntuneMAMPolicy.h | IntuneMAMPolicy 클래스는 앱에 적용되는 일부 MAM 정책 설정을 노출합니다. 이러한 정책 설정의 대부분은 앱이 UI를 사용자 지정할 수 있도록 노출됩니다. 대부분의 정책 설정은 앱이 아닌 SDK에 의해 적용됩니다. 여기에는 몇 가지 예외가 있습니다. 앱 개발자는 이 헤더의 주석을 검토하여 애플리케이션의 시나리오에 적용할 수 있는 API를 결정해야 합니다. |
IntuneMAMFileProtectionManager.h | IntuneMAMFileProtectionManager 클래스는 앱이 제공된 ID를 기반으로 파일 및 디렉터리를 명시적으로 보호하는 데 사용할 수 있는 API를 노출합니다. ID는 Intune 또는 비관리형으로 관리할 수 있으며 SDK는 적절한 MAM 정책을 적용합니다. 이 클래스를 사용하는 것은 선택 사항입니다. |
IntuneMAMDataProtectionManager.h | IntuneMAMDataProtectionManager 클래스는 제공된 ID가 제공된 경우 앱이 데이터 버퍼를 보호하는 데 사용할 수 있는 API를 노출합니다. ID는 Intune 또는 비관리형으로 관리할 수 있으며 SDK는 암호화를 적절하게 적용합니다. |
허용되는 계정 구현
Intune 통해 IT 관리자는 사용자가 로그인할 수 있는 계정을 지정할 수 있습니다. 앱은 Intune 앱 SDK에서 지정된 허용 계정 목록을 쿼리한 다음 허용된 계정만 디바이스에 로그인했는지 확인할 수 있습니다.
허용된 계정을 쿼리하려면 앱에서 에서 IntuneMAMEnrollmentManager
속성을 확인해야 allowedAccounts
합니다. 속성은 allowedAccounts
허용된 계정 또는 nil을 포함하는 배열입니다. 속성이 nil이면 허용된 계정이 지정되지 않았습니다.
앱은 알림을 관찰하여 속성의 allowedAccounts
변경 내용에 반응할 수도 있습니다 IntuneMAMAllowedAccountsDidChangeNotification
. 속성 값이 변경될 때마다 알림이 allowedAccounts
게시됩니다.
파일 암호화 구현 필요
에 IntuneMAMPolicy.h
정의된 API는 isFileEncryptionRequired
IT 관리자가 애플리케이션이 디스크에 저장된 모든 파일에서 Intune 암호화를 사용하도록 요구하는 경우 애플리케이션에 알릴 수 있습니다. 가 true이면 isFileEncryptionRequired
앱에서 디스크에 저장된 모든 파일이 , IntuneMAMFileProtectionManager.h
및 IntuneMAMFDataProtectionManager.h
의 APIIntuneMAMFile.h
를 사용하여 암호화되도록 하는 것은 앱의 책임입니다.
앱은 에 정의된 알림을 관찰하여 이 정책의 IntuneMAMDataProtectionDidChangeNotification
변경 내용에 대응할 수 있습니다 IntuneMAMFDataProtectionManager.h
.
다른 이름으로 저장 및 열기 컨트롤 구현
Intune IT 관리자는 관리되는 앱이 데이터를 저장하거나 데이터를 열 수 있는 스토리지 위치를 선택할 수 있습니다. 앱은 에 정의된 API를 사용하여 isSaveToAllowedForLocation:withAccount:
허용되는 스토리지 위치에 대해 Intune MAM SDK를 쿼리할 수 있습니다IntuneMAMPolicy.h
. 앱은 에 정의된 API를 사용하여 isOpenFromAllowedForLocation:withAccount:
허용된 오픈-인 스토리지 위치에 대해 SDK를 쿼리할 수도 있습니다 IntuneMAMPolicy.h
.
또한 앱은 에 정의된 API를 쿼리하여 공유 확장에서 canReceiveSharedItemProvider:
들어오는 데이터가 허용되는지 확인할 수 있습니다 IntuneMAMPolicy.h
. 앱은 API를 canReceiveSharedFile:
쿼리하여 openURL 호출에서 들어오는 파일을 확인할 수도 있습니다. 또한 에 정의되어 있습니다. IntuneMAMPolicy.h
참고
MAM SDK v15.1.0부터 내부 동작이 변경되었습니다.
nil
계정은 더 이상 LocalDrive/LocalStorage 위치의 현재 계정으로 취급되지 않습니다.nil
계정을 전달하면 관리되지 않는 계정으로 처리됩니다. 앱은 샌드박스 스토리지를 처리하는 방법을 제어할 수 있으므로 ID는 해당 위치와 연결될 수 있고 연결되어야 합니다.nil
계정은 더 이상 단일 ID 앱의 현재 계정으로 취급되지 않습니다. 이제 단일 ID 앱에서nil
계정을 전달하면 다중 ID 앱에 전달된 것과 동일하게 처리됩니다. 단일 ID 앱을 개발하는 경우 를 사용하여IntuneMAMPolicy
primaryUser
관리되는 경우 현재 계정을 참조하고nil
관리되지 않는 경우 현재 계정을 참조하세요.
저장 시나리오 처리
새 클라우드 스토리지 또는 로컬 위치로 데이터를 이동하기 전에 앱은 IT 관리자가 isSaveToAllowedForLocation:withAccount:
데이터 전송을 허용했는지 확인하기 위해 API를 확인해야 합니다. 이 메서드는 개체에서 IntuneMAMPolicy
호출됩니다. 현재 위치에서 편집 및 저장되는 데이터는 이 API로 확인할 필요가 없습니다.
참고
개체는 IntuneMAMPolicy
저장되는 데이터의 소유자 정책을 나타내야 합니다. 특정 ID의 IntuneMAMPolicy
개체를 얻으려면 의 policyForIdentity:
메서드를 호출IntuneMAMPolicyManager
합니다. 소유자가 ID nil
가 없는 관리되지 않는 계정인 경우 에 policyForIdentity:
전달할 수 있습니다. 저장되는 데이터가 조직 데이터가 isSaveToAllowedForLocation:withAccount:
아니더라도 를 호출해야 합니다. 대상 위치를 소유한 계정에는 들어오는 관리되지 않는 데이터를 제한하는 정책이 여전히 있을 수 있습니다.
메서드는 isSaveToAllowedForLocation:withAccount:
두 개의 인수를 사용합니다. 첫 번째 인수는 에 정의된 형식 IntuneMAMSaveLocation
의 열거형 값입니다 IntuneMAMPolicy.h
. 두 번째 인수는 위치를 소유하는 ID의 UPN입니다. 소유자를 알 nil
수 없는 경우 를 대신 사용할 수 있습니다.
지원되는 저장 위치
Intune MAM SDK는 에 IntuneMAMPolicy.h
정의된 다음 저장 위치에 대한 지원을 제공합니다.
IntuneMAMSaveLocationOneDriveForBusiness
- 이 위치는 비즈니스용 OneDrive 위치를 나타냅니다. OneDrive 계정과 연결된 ID는 두 번째 인수로 전달되어야 합니다.IntuneMAMSaveLocationSharePoint
- 이 위치는 SharePoint Online 및 AAD 하이브리드 최신 인증 SharePoint 온-프레미스 위치를 모두 나타냅니다. SharePoint 계정과 연결된 ID는 두 번째 인수로 전달되어야 합니다.IntuneMAMSaveLocationLocalDrive
- 이 위치는 앱에서만 액세스할 수 있는 앱 샌드박스 스토리지를 나타냅니다. 이 위치는 파일 선택기를 통해 저장하거나 공유 확장자를 통해 파일에 저장하는 데 사용하면 안 됩니다. ID를 앱 샌드박스 스토리지와 연결할 수 있는 경우 두 번째 인수로 전달되어야 합니다. IDnil
가 없는 경우 를 대신 전달해야 합니다. (예를 들어 앱은 다른 계정에 대해 별도의 앱 샌드박스 스토리지 컨테이너를 사용할 수 있습니다. 이 경우 액세스 중인 컨테이너를 소유하는 계정을 두 번째 인수로 사용해야 합니다.)IntuneMAMSaveLocationCameraRoll
- 이 위치는 iOS 사진 라이브러리를 나타냅니다. iOS 사진 라이브러리nil
와 연결된 계정이 없으므로 이 위치를 사용할 때만 두 번째 인수로 전달되어야 합니다.IntuneMAMSaveLocationAccountDocument
- 이 위치는 관리되는 계정에 연결할 수 있는 이전에 나열되지 않은 모든 조직 위치를 나타냅니다. 위치와 연결된 조직 계정을 두 번째 인수로 전달해야 합니다. (예: 조직 계정에 연결된 조직의 LOB 클라우드 서비스에 사진 업로드)IntuneMAMSaveLocationOther
- 이 위치는 이전에 나열되지 않은 조직 또는 알 수 없는 위치를 나타냅니다. 계정이 위치와 연결된 경우 두 번째 인수로 전달되어야 합니다. 그렇지 않으면 를nil
대신 사용해야 합니다.
저장 위치에 대한 특별 고려 사항
위치는 IntuneMAMSaveLocationLocalDrive
앱에서만 액세스할 수 있는 앱 샌드박스 스토리지에만 사용해야 합니다. 파일 선택기 또는 파일 앱 IntuneMAMSaveLocationOther
에서 데이터에 액세스할 수 있는 다른 방법을 통해 iOS 디바이스 스토리지에 파일을 저장할 수 있는지 확인하려면 를 사용해야 합니다.
대상 위치가 나열되지 않은 경우 또는 IntuneMAMSaveLocationOther
을 IntuneMAMSaveLocationAccountDocument
사용해야 합니다. 위치에 관리되는 계정을 사용하여 액세스하는 조직 데이터가 포함된 경우(예: 조직 데이터를 저장하기 위한 LOB 클라우드 서비스) IntuneMAMSaveLocationAccountDocument
를 사용해야 합니다. 위치에 조직 데이터가 IntuneMAMSaveLocationOther
없는 경우 위치를 사용해야 합니다.
개방형 시나리오 처리
새 클라우드 스토리지 또는 로컬 위치에서 데이터를 가져오기 전에 앱은 API를 isOpenFromAllowedForLocation:withAccount:
통해 IT 관리자가 데이터 전송을 허용했는지 확인해야 합니다. 이 메서드는 개체에서 IntuneMAMPolicy
호출됩니다. 현재 위치에서 열려 있는 데이터는 이 API로 확인할 필요가 없습니다.
참고
개체는 IntuneMAMPolicy
데이터를 수신하는 ID의 정책을 나타내야 합니다. 특정 ID의 IntuneMAMPolicy
개체를 얻으려면 의 policyForIdentity:
메서드를 호출IntuneMAMPolicyManager
합니다. 받는 계정이 ID nil
가 없는 관리되지 않는 계정인 경우 에 policyForIdentity:
전달할 수 있습니다. 수신되는 데이터가 조직 데이터가 isOpenFromAllowedForLocation:withAccount:
아니더라도 를 호출해야 합니다. 데이터를 소유한 계정에는 나가는 데이터 전송의 대상을 제한하는 정책이 여전히 있을 수 있습니다.
메서드는 isOpenFromAllowedForLocation:withAccount:
두 개의 인수를 사용합니다. 첫 번째 인수는 에 정의된 형식 IntuneMAMOpenLocation
의 열거형 값입니다 IntuneMAMPolicy.h
. 두 번째 인수는 위치를 소유하는 ID의 UPN입니다. 소유자를 알 nil
수 없는 경우 를 대신 사용할 수 있습니다.
지원되는 열린 위치
Intune MAM SDK는 에 IntuneMAMPolicy.h
정의된 다음 열린 위치에 대한 지원을 제공합니다.
IntuneMAMOpenLocationOneDriveForBusiness
- 이 위치는 비즈니스용 OneDrive 위치를 나타냅니다. OneDrive 계정과 연결된 ID는 두 번째 인수로 전달되어야 합니다.IntuneMAMOpenLocationSharePoint
- 이 위치는 SharePoint Online 및 AAD 하이브리드 최신 인증 SharePoint 온-프레미스 위치를 모두 나타냅니다. SharePoint 계정과 연결된 ID는 두 번째 인수로 전달되어야 합니다.IntuneMAMOpenLocationCamera
- 이 위치는 카메라에서 촬영한 새 이미지 만 나타냅니다. iOS 카메라nil
와 연결된 계정이 없으므로 이 위치를 사용할 때만 두 번째 인수로 전달되어야 합니다. iOS 사진 라이브러리에서 데이터를 여는 경우 를 사용합니다IntuneMAMOpenLocationPhotos
.IntuneMAMOpenLocationPhotos
- 이 위치는 iOS 사진 라이브러리 내의 기존 이미지 만 나타냅니다. iOS 사진 라이브러리nil
와 연결된 계정이 없으므로 이 위치를 사용할 때만 두 번째 인수로 전달되어야 합니다. iOS 카메라에서 직접 찍은 이미지를 여는 경우 를 사용합니다IntuneMAMOpenLocationCamera
.IntuneMAMOpenLocationLocalStorage
- 이 위치는 앱에서만 액세스할 수 있는 앱 샌드박스 스토리지를 나타냅니다. 이 위치는 파일 선택기에서 파일을 열거나 openURL에서 들어오는 파일을 처리하는 데 사용하면 안 됩니다. ID를 앱 샌드박스 스토리지와 연결할 수 있는 경우 두 번째 인수로 전달되어야 합니다. IDnil
가 없는 경우 를 대신 전달해야 합니다. (예: 앱은 다른 계정에 대해 별도의 앱 샌드박스 스토리지 컨테이너를 사용할 수 있습니다. 이 경우 액세스 중인 컨테이너를 소유하는 계정을 두 번째 인수로 사용해야 합니다.)IntuneMAMOpenLocationAccountDocument
- 이 위치는 관리되는 계정에 연결할 수 있는 이전에 나열되지 않은 모든 조직 위치를 나타냅니다. 위치와 연결된 조직 계정을 두 번째 인수로 전달해야 합니다. (예: 조직 계정에 연결된 조직의 LOB 클라우드 서비스에서 사진 다운로드)IntuneMAMOpenLocationOther
- 이 위치는 이전에 나열되지 않은 비조직 위치 또는 알 수 없는 위치를 나타냅니다. 계정이 위치와 연결된 경우 두 번째 인수로 전달되어야 합니다. 그렇지 않으면 를nil
대신 사용해야 합니다.
열린 위치에 대한 특별 고려 사항
위치는 IntuneMAMOpenLocationLocalStorage
앱에서 액세스할 수 있는 앱 샌드박스 스토리지에만 사용해야 합니다. 파일 선택기를 통해 iOS 디바이스 스토리지에서 파일을 열 수 있는지 또는 파일 앱 IntuneMAMOpenLocationOther
에서 데이터에 액세스할 수 있는 다른 방법을 사용할 수 있는지 확인하려면 를 사용해야 합니다.
대상 위치가 나열되지 않은 경우 또는 IntuneMAMOpenLocationOther
을 IntuneMAMOpenLocationAccountDocument
사용해야 합니다. 위치에 관리되는 계정을 사용하여 액세스하는 조직 데이터가 포함된 경우(예: 조직 데이터를 저장하기 위한 LOB 클라우드 서비스) IntuneMAMOpenLocationAccountDocument
를 사용해야 합니다. 위치에 조직 데이터가 IntuneMAMSaveLocationOther
없는 경우 위치를 사용해야 합니다.
들어오는 NSItemProviders 및 파일 처리
공유 확장 IntuneMAMPolicy
에서 받은 NSItemProviders를 처리하기 위해 의 canReceiveSharedItemProvider:
메서드를 대신 isOpenFromAllowedForLocation:withAccount:
사용할 수 있습니다. 메서드는 canReceiveSharedItemProvider:
NSItemProvider를 사용하고 IT 관리자가 개체의 계정으로 IntuneMAMPolicy
열 수 있는지 여부를 반환합니다. 이 메서드를 호출하기 전에(예: 를 호출 loadItemForTypeIdentifier:options:completionHandler
하여) 항목을 로드해야 합니다. 이 메서드는 NSItemProvider 로드 호출에 전달된 완료 처리기에서 호출할 수도 있습니다.
들어오는 파일을 IntuneMAMPolicy
처리하기 위해 대신 의 canReceiveSharedFile:
메서드를 사용할 isOpenFromAllowedForLocation:withAccount:
수 있습니다. 메서드는 canReceiveSharedFile:
NSString 경로를 사용하고 IT 관리자가 개체의 계정에 열 IntuneMAMPolicy
수 있는지 여부를 반환합니다.
차단된 경고 공유
또는 isOpenFromAllowedForLocation:withAccount:
API가 호출되고 저장/열기 작업을 차단하는 UI 도우미 함수를 찾을 때 isSaveToAllowedForLocation:withAccount:
사용할 수 있습니다. 앱이 사용자에게 작업이 차단되었음을 알리려는 경우 에 정의된 IntuneMAMUIHelper.h
API를 showSharingBlockedMessage
호출하여 일반 메시지와 함께 경고 보기를 표시할 수 있습니다.
UIActivityViewController를 통해 데이터 공유
릴리스 8.0.2부터 Intune 앱 SDK는 Intune 관리되는 공유 위치만 선택할 수 있도록 작업을 필터링 UIActivityViewController
할 수 있습니다. 이 동작은 애플리케이션 데이터 전송 정책에 의해 제어됩니다.
'복사하기' 작업
및 를 UIActivityViewController
UIDocumentInteractionController
통해 문서를 공유할 때 iOS는 공유 중인 문서 열기를 지원하는 각 애플리케이션에 대한 '복사 대상' 작업을 표시합니다. 애플리케이션은 Info.plist의 CFBundleDocumentTypes
설정을 통해 지원하는 문서 형식을 선언합니다. 정책이 관리되지 않는 애플리케이션에 대한 공유를 금지하는 경우 이 유형의 공유는 더 이상 사용할 수 없습니다. 대신 사용자는 애플리케이션에 UI가 아닌 작업 확장을 추가하고 Intune 앱 SDK에 연결해야 합니다. 작업 확장은 스텁일 뿐입니다. SDK는 파일 공유 동작을 구현합니다. 아래 단계를 수행합니다.
애플리케이션에는 해당 항목과
-intunemam
함께 Info.plistCFBundleURLTypes
아래에 하나 이상의 schemeURL이 정의되어야 합니다. 예를 들면<key>CFBundleURLSchemes</key> <array> <string>launch-com.contoso.myapp</string> <string>launch-com.contoso.myapp-intunemam</string> </array>
애플리케이션 및 작업 확장은 둘 다 하나 이상의 앱 그룹을 공유해야 하며 앱 그룹은 앱 및 확장의 IntuneMAMSettings 사전 아래 배열 아래에
AppGroupIdentifiers
나열되어야 합니다.애플리케이션 및 작업 확장 모두 키 집합 공유 기능이 있어야 하며 키 집합 그룹을 공유
com.microsoft.intune.mam
해야 합니다.작업 확장명을 "열기"로 지정하고 애플리케이션 이름을 으로 지정합니다. 필요에 따라 Info.plist를 지역화합니다.
Apple의 개발자 설명서에 설명된 대로 확장에 대한 템플릿 아이콘을 제공합니다. 또는 IntuneMAMConfigurator 도구를 사용하여 애플리케이션 .app 디렉터리에서 이러한 이미지를 생성할 수 있습니다. 이를 위해 실행할 작업:
IntuneMAMConfigurator -generateOpenInIcons /path/to/app.app -o /path/to/output/directory
확장의 Info.plist에 있는 IntuneMAMSettings에서 값이 YES인 부
OpenInActionExtension
울 설정을 추가합니다.애플리케이션의
NSExtensionActivationRule
CFBundleDocumentTypes
접두사로 된 단일 파일 및 모든 형식을 지원하도록 을com.microsoft.intune.mam
구성합니다. 예를 들어 애플리케이션이 public.text 및 public.image를 지원하는 경우 활성화 규칙은 다음과 같습니다.SUBQUERY ( extensionItems, $extensionItem, SUBQUERY ( $extensionItem.attachments, $attachment, ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "com.microsoft.intune.mam.public.text" || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "com.microsoft.intune.mam.public.image").@count == 1 ).@count == 1
기존 공유 및 작업 확장 업데이트
앱에 공유 또는 작업 확장 NSExtensionActivationRule
이 이미 포함되어 있는 경우 Intune 형식을 허용하도록 해당 확장을 수정해야 합니다. 확장에서 지원하는 각 형식에 대해 접두사로 추가 형식을 com.microsoft.intune.mam
추가합니다. 예를 들어 기존 활성화 규칙이 인 경우:
SUBQUERY (
extensionItems,
$extensionItem,
SUBQUERY (
$extensionItem.attachments,
$attachment,
ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.url" ||
ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.plain-text" ||
ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.image" ||
ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.data"
).@count > 0
).@count > 0
로 변경됩니다.
SUBQUERY (
extensionItems,
$extensionItem,
SUBQUERY (
$extensionItem.attachments,
$attachment,
ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.url" ||
ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.plain-text" ||
ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.image" ||
ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.data" ||
ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "com.microsoft.intune.mam.public.url" ||
ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "com.microsoft.intune.mam.public.plain-text" ||
ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "com.microsoft.intune.mam.public.image" ||
ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "com.microsoft.intune.mam.public.data"
).@count > 0
).@count > 0
참고
IntuneMAMConfigurator 도구를 사용하여 활성화 규칙에 Intune 형식을 추가할 수 있습니다. 기존 활성화 규칙이 미리 정의된 문자열 상수(예: NSExtensionActivationSupportsFileWithMaxCount, NSExtensionActivationSupportsText 등)를 사용하는 경우 조건자 구문이 매우 복잡해질 수 있습니다. IntuneMAMConfigurator 도구를 사용하여 Intune 형식을 추가하는 동안 활성화 규칙을 문자열 상수에서 조건자 문자열로 변환할 수도 있습니다.
UI의 모양
이전 UI:
새 UI:
iOS 애플리케이션에 대해 대상 구성(APP/MAM 앱 구성) 사용
MAM 대상 구성(MAM 앱 구성이라고도 함)을 사용하면 앱이 Intune SDK를 통해 구성 데이터를 받을 수 있습니다. 이 데이터의 형식과 변형은 앱 소유자/개발자가 Intune 고객에게 정의하고 전달해야 합니다.
Intune 관리자는 Microsoft Intune 관리 센터 및 Intune Graph API 통해 구성 데이터를 대상으로 지정하고 배포할 수 있습니다. iOS용 Intune 앱 SDK 버전 7.0.1을 기준으로 MAM 대상 구성에 참여하는 앱은 MAM 서비스를 통해 MAM 대상 구성 데이터를 제공할 수 있습니다. 애플리케이션 구성 데이터는 MAM 서비스를 통해 MDM 채널이 아닌 앱으로 직접 푸시됩니다. Intune 앱 SDK는 이러한 콘솔에서 검색된 데이터에 액세스하는 클래스를 제공합니다. 다음 항목은 필수 구성 요소입니다.
MAM 대상 구성 UI에 액세스하려면 Intune MAM 서비스에 앱을 등록해야 합니다. 자세한 내용은 앱 보호 정책 받기를 참조하세요.
앱의 원본 파일에 포함합니다
IntuneMAMAppConfigManager.h
.를 호출
[[IntuneMAMAppConfigManager instance] appConfigForIdentity:]
하여 App Config 개체를 가져옵니다.개체에서 적절한 선택기를
IntuneMAMAppConfig
호출합니다. 예를 들어 애플리케이션의 키가 문자열인 경우 또는allStringsForKey
를 사용stringValueForKey
하려고 합니다. 반환 값 및 오류 조건에 대한 자세한 설명은 을 참조IntuneMAMAppConfig.h
하세요.
Graph API 기능에 대한 자세한 내용은 Graph API 참조를 참조하세요.
iOS에서 MAM 대상 앱 구성 정책을 만드는 방법에 대한 자세한 내용은 iOS/iPadOS에 Microsoft Intune 앱 구성 정책을 사용하는 방법의 MAM 대상 앱 구성 섹션을 참조하세요.
App Protection CA 지원(선택 사항)
앱 보호 조건부 액세스는 Intune 앱 보호 정책이 적용된 것을 확인할 때까지 서버 토큰에 대한 액세스를 차단합니다. 이 기능을 사용하려면 사용자 추가 흐름을 변경해야 합니다. 고객이 App Protection CA를 사용하도록 설정하면 보호된 리소스에 액세스하는 해당 고객 테넌트의 애플리케이션은 이 기능을 지원하지 않는 한 액세스 토큰을 획득할 수 없습니다.
의존 관계
Intune SDK 외에도 앱에서 App Protection CA를 사용하도록 설정하려면 이러한 두 구성 요소가 필요합니다.
- iOS Authenticator 앱
- MSAL 인증 라이브러리 1.0 이상
MAM-CA 수정 흐름
새 API
대부분의 새 API는 IntuneMAMComplianceManager.h에서 찾을 수 있습니다. 앱은 아래에 설명된 동작의 세 가지 차이점을 알고 있어야 합니다.
새 동작 | 설명 |
---|---|
앱 → ADAL/MSAL: 토큰 획득 | 애플리케이션이 토큰을 획득하려고 하면 ERROR_SERVER_PROTECTION_POLICY_REQUIRED 받을 준비가 되어 있어야 합니다. 앱은 초기 계정 추가 흐름 중에 또는 애플리케이션 수명 주기의 뒷부분에서 토큰에 액세스할 때 이 오류를 받을 수 있습니다. 앱이 이 오류를 수신하면 액세스 토큰이 부여되지 않으며 서버 데이터를 검색하기 위해 수정해야 합니다. |
앱 → Intune SDK: remediateComplianceForIdentity 호출 | 앱이 ADAL에서 ERROR_SERVER_PROTECTION_POLICY_REQUIRED 받거나 MSAL에서 MSALErrorServerProtectionPoliciesRequired를 받으면 [[IntuneMAMComplianceManager 인스턴스] remediateComplianceForIdentity]를 호출하여 Intune 앱을 등록하고 정책을 적용할 수 있도록 해야 합니다. 이 호출 중에 앱을 다시 시작할 수 있습니다. 앱을 다시 시작하기 전에 상태를 저장해야 하는 경우 IntuneMAMPolicyDelegate의 restartApplication 대리자 메서드에서 이 작업을 수행할 수 있습니다. remediateComplianceForIdentity는 registerAndEnrollAccount 및 loginAndEnrollAccount의 모든 기능을 제공합니다. 따라서 앱은 이러한 이전 API 중 하나를 사용할 필요가 없습니다. |
Intune → 앱: 위임 수정 알림 | Intune 정책을 검색하고 적용한 후 IntuneMAMComplianceDelegate 프로토콜을 사용하여 앱에 결과를 알립니다. 앱이 각 오류를 처리하는 방법에 대한 자세한 내용은 IntuneComplianceManager.h의 IntuneMAMComplianceStatus를 참조하세요. IntuneMAMComplianceCompliant를 제외한 모든 경우 사용자에게 유효한 액세스 토큰이 없습니다. 앱에 이미 관리 콘텐츠가 있고 규격 상태를 입력할 수 없는 경우 애플리케이션은 선택적 초기화를 호출하여 회사 콘텐츠를 제거해야 합니다. 규격 상태에 도달할 수 없는 경우 앱은 withErrorMessage 및 andErrorTitle에서 제공하는 오류 메시지 및 제목 문자열을 지역화하여 표시해야 합니다. |
IntuneMAMComplianceDelegate의 hasComplianceStatus 메서드 예제
(void) identity:(NSString*) identity hasComplianceStatus:(IntuneMAMComplianceStatus) status withErrorString:(NSString*) error;
{
switch(status)
{
case IntuneMAMComplianceCompliant:
{
/*
Handle successful compliance
*/
break;
}
case IntuneMAMComplianceNotCompliant:
case IntuneMAMComplianceNetworkFailure:
case IntuneMAMComplianceUserCancelled:
case IntuneMAMComplianceServiceFailure:
{
UIAlertController* alert = [UIAlertController alertControllerWithTitle:identity
message:error
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {exit(0);}];
[alert addAction:defaultAction];
dispatch_async(dispatch_get_main_queue(), ^{
[self presentViewController:alert animated:YES completion:nil];
});
break;
}
case IntuneMAMComplianceInteractionRequired:
{
[[IntuneMAMComplianceManager instance] remediateComplianceForIdentity:identity silent:NO];
break;
}
}
}
func identity(_ identity: String, hasComplianceStatus status: IntuneMAMComplianceStatus, withErrorMessage errMsg: String, andErrorTitle errTitle: String) {
switch status {
case .compliant:
//Handle successful compliance
case .notCompliant, .networkFailure,.serviceFailure,.userCancelled:
DispatchQueue.main.async {
let alert = UIAlertController(title: errTitle, message: errMsg, preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { action in
exit(0)
}))
self.present(alert, animated: true, completion: nil)
}
case .interactionRequired:
IntuneMAMComplianceManager.instance().remediateCompliance(forIdentity: identity, silent: false)
}
MSAL/ADAL
앱은 MSAL/ADAL 구성에 클라이언트 기능 변수를 추가하여 App Protection CA에 대한 지원을 나타내야 합니다. 다음 값이 필요합니다. claims = {"access_token":{"xms_cc":{"values":["protapp"]}}}
MSALPublicClientApplicationConfig 클래스 참조(azuread.github.io)
MSALAADAuthority *authority = [[MSALAADAuthority alloc] initWithURL:[[NSURL alloc] initWithString:IntuneMAMSettings.aadAuthorityUriOverride] error:&msalError];
MSALPublicClientApplicationConfig *config = [[MSALPublicClientApplicationConfig alloc]
initWithClientId:IntuneMAMSettings.aadClientIdOverride
redirectUri:IntuneMAMSettings.aadRedirectUriOverride
authority:authority];
/*
IF YOU'RE IMPLEMENTING CA IN YOUR APP, PLEASE PAY ATTENTION TO THE FOLLOWING...
*/
// This is needed for CA!
// This line adds an option to the MSAL token request so that MSAL knows that CA may be active
// Without this, MSAL won't know that CA could be activated
// In the event that CA is activated and this line isn't in place, the auth flow will fail
config.clientApplicationCapabilities = @[@"protapp"];
guard let authorityURL = URL(string: kAuthority) else {
print("Unable to create authority URL")
return
}
let authority = try MSALAADAuthority(url: authorityURL)
let msalConfiguration = MSALPublicClientApplicationConfig(clientId: kClientID,redirectUri: kRedirectUri,
authority: authority)
msalConfiguration.clientApplicationCapabilities = ["ProtApp"]
self.applicationContext = try MSALPublicClientApplication(configuration: msalConfiguration)
App Protection CA를 테스트하는 방법
App Protection CA에 대한 테스트 사용자 구성
- 관리자 자격 증명을 사용하여 에 로그인합니다 https://portal.azure.com.
- Azure Active Directory>보안>조건부 액세스>새 정책을 선택합니다. 새 조건부 액세스 정책을 만듭니다.
- 다음 항목을 설정하여 조건부 액세스 정책을 구성합니다.
- 이름 필드를 입력합니다.
- 정책을 사용하도록 설정합니다.
- 사용자 또는 그룹에 정책 할당
- 클라우드 앱을 할당합니다. 모든 클라우드 앱포함>을 선택합니다. 경고 정보로 이 설정을 잘못 구성하지 않도록 주의해야 합니다. 예를 들어 모든 클라우드 앱을 제외한 경우 콘솔에서 자신을 잠급니다.
- 액세스 제어 권한 부여앱 보호 정책 필요를 선택하여 액세스 > 제어를 부여합니다>.
- 정책 구성이 완료되면 만들기 를 선택하여 정책을 저장하고 적용합니다.
- 정책 사용 설정
- 또한 사용자가 MAM 정책의 대상이 되도록 해야 합니다.
테스트 사례
테스트 사례 | 테스트 방법 | 예상 결과 |
---|---|---|
MAM-CA는 항상 적용됨 | 앱에 등록하기 전에 사용자가 App Protection CA 및 MAM 정책의 대상이 되는지 확인합니다. | 앱이 위에서 설명한 수정 사례를 처리하고 앱이 액세스 토큰을 가져올 수 있는지 확인합니다. |
사용자가 등록한 후 적용된 MAM-CA | 사용자는 앱에 이미 로그인되어 있어야 하지만 App Protection CA의 대상은 아닙니다. | 콘솔에서 App Protection CA에 대한 사용자를 대상으로 지정하고 MAM 수정을 올바르게 처리했는지 확인합니다. |
MAM-CA 비준수 | App Protection CA 정책을 설정하지만 MAM 정책을 할당하지 않습니다. | 사용자가 액세스 토큰을 획득할 수 없습니다. 이는 앱이 IntuneMAMComplianceStatus 오류 사례를 처리하는 방법을 테스트하는 데 유용합니다. |
원격 분석
기본적으로 iOS용 Intune 앱 SDK는 다음 유형의 이벤트에 대한 원격 분석을 수집합니다.
앱 시작: Microsoft Intune 관리 유형별 MAM 사용(MDM이 있는 MAM, MDM 등록이 없는 MAM 등)에 대해 알아보는 데 도움이 됩니다.
등록 호출: Microsoft Intune 클라이언트 쪽에서 시작된 등록 호출의 성공률 및 기타 성능 메트릭에 대해 알아보는 데 도움이 됩니다.
Intune 작업: 문제를 진단하고 Intune 기능을 보장하기 위해 Intune SDK 작업에 대한 정보를 수집합니다.
참고
모바일 애플리케이션에서 Microsoft Intune Intune 앱 SDK 원격 분석 데이터를 보내지 않도록 선택하는 경우 앱 SDK 원격 분석 캡처를 Intune 사용하지 않도록 설정해야 합니다. IntuneMAMSettings 사전에서 속성을 MAMTelemetryDisabled
YES로 설정합니다.
다중 ID 사용(선택 사항)
기본적으로 SDK는 앱 전체에 정책을 적용합니다. 다중 ID는 ID별 수준에서 정책을 적용하도록 설정할 수 있는 MAM 기능입니다. 이렇게 하려면 다른 MAM 기능보다 더 많은 앱 참여가 필요합니다.
앱은 활성 ID를 변경하려는 경우 앱 SDK에 알려야 합니다. 또한 SDK는 ID 변경이 필요할 때 앱에 알 수 있습니다. 현재 하나의 관리 ID만 지원됩니다. 사용자가 디바이스 또는 앱을 등록한 후 SDK는 이 ID를 사용하고 이를 기본 관리 ID로 간주합니다. 앱의 다른 사용자는 무제한 정책 설정으로 관리되지 않는 것으로 처리됩니다.
ID는 단순히 문자열로 정의됩니다. ID는 대/소문자를 구분하지 않습니다. ID에 대한 SDK 요청은 ID가 설정되었을 때 원래 사용된 것과 동일한 대/소문자를 반환하지 않을 수 있습니다.
ID 개요
ID는 단순히 계정의 사용자 이름(예: user@contoso.com)입니다. 개발자는 다음 수준에서 앱의 ID를 설정할 수 있습니다.
프로세스 ID: 프로세스 전체 ID를 설정하며 주로 단일 ID 애플리케이션에 사용됩니다. 이 ID는 모든 작업, 파일 및 UI에 영향을 줍니다.
UI ID: 잘라내기/복사/붙여넣기, PIN, 인증 및 데이터 공유와 같은 주 스레드의 UI 작업에 적용되는 정책을 결정합니다. UI ID는 암호화 및 백업과 같은 파일 작업에 영향을 주지 않습니다.
스레드 ID: 현재 스레드에 적용되는 정책에 영향을 줍니다. 이 ID는 모든 작업, 파일 및 UI에 영향을 줍니다.
앱은 사용자가 관리되는지 여부에 관계없이 ID를 적절하게 설정해야 합니다.
언제든지 모든 스레드에는 UI 작업 및 파일 작업에 대한 효과적인 ID가 있습니다. 적용해야 하는 정책(있는 경우)을 확인하는 데 사용되는 ID입니다. ID가 "ID 없음"이거나 사용자가 관리되지 않는 경우 정책이 적용되지 않습니다. 아래 다이어그램은 유효 ID가 결정되는 방법을 보여 줍니다.
스레드 큐
앱은 종종 비동기 및 동기 작업을 스레드 큐로 디스패치합니다. SDK는 GCD(Grand Central Dispatch) 호출을 가로채 현재 스레드 ID를 디스패치된 태스크와 연결합니다. 작업이 완료되면 SDK는 일시적으로 스레드 ID를 태스크와 연결된 ID로 변경하고 작업을 완료한 다음 원래 스레드 ID를 복원합니다.
NSOperationQueue
는 GCD NSOperations
를 기반으로 빌드되므로 태스크가 에 추가NSOperationQueue
될 때 스레드의 ID에서 실행됩니다. NSOperations
또는 GCD를 통해 직접 디스패치된 함수는 실행 중인 현재 스레드 ID를 변경할 수도 있습니다. 이 ID는 디스패치 스레드에서 상속된 ID를 재정의합니다.
SDK가 에 대한 DispatchWorkItem
ID를 전파하는 방법의 결과로 인해 신속하게 와 DispatchWorkItem
연결된 ID는 항목을 디스패치하는 스레드가 아닌 항목을 만든 스레드의 ID입니다.
파일 소유자
SDK는 로컬 파일 소유자의 ID를 추적하고 그에 따라 정책을 적용합니다. 파일 소유자는 파일을 만들 때 또는 잘림 모드에서 파일을 열 때 설정됩니다. 소유자는 작업을 수행하는 스레드의 유효 파일 작업 ID로 설정됩니다.
또는 을 사용하여 IntuneMAMFilePolicyManager
앱에서 파일 소유자 ID를 명시적으로 설정할 수 있습니다. 앱은 를 사용하여 IntuneMAMFilePolicyManager
파일 소유자를 검색하고 파일 내용을 표시하기 전에 UI ID를 설정할 수 있습니다.
공유 데이터
앱이 관리되는 사용자와 관리되지 않는 사용자 모두의 데이터가 있는 파일을 만드는 경우 앱은 관리되는 사용자의 데이터를 암호화해야 합니다. 의 및 unprotect
API를 사용하여 데이터를 암호화할 protect
수 있습니다IntuneMAMDataProtectionManager
.
메서드는 protect
관리되거나 관리되지 않는 사용자일 수 있는 ID를 허용합니다. 사용자가 관리되는 경우 데이터가 암호화됩니다. 사용자가 관리되지 않는 경우 ID를 인코딩하는 데이터에 헤더가 추가되지만 데이터는 암호화되지 않습니다. 메서드를 protectionInfo
사용하여 데이터의 소유자를 검색할 수 있습니다.
확장 공유
앱에 공유 확장이 있는 경우 공유되는 항목의 소유자는 의 메서드IntuneMAMDataProtectionManager
를 protectionInfoForItemProvider
통해 검색할 수 있습니다. 공유 항목이 파일인 경우 SDK는 파일 소유자 설정을 처리합니다. 공유 항목이 데이터인 경우 앱은 이 데이터가 파일에 유지되는 경우 파일 소유자를 설정하고 UI에 이 데이터를 표시하기 전에 API를 호출 setUIPolicyIdentity
해야 합니다.
다중 ID 켜기
기본적으로 앱은 단일 ID로 간주됩니다. SDK는 프로세스 ID를 등록된 사용자로 설정합니다. 다중 ID 지원을 사용하도록 설정하려면 이름 MultiIdentity
및 값이 YES인 부울 설정을 앱의 Info.plist 파일의 IntuneMAMSettings 사전에 추가합니다.
참고
다중 ID를 사용하도록 설정하면 프로세스 ID, UI ID 및 스레드 ID가 nil로 설정됩니다. 앱은 적절하게 설정해야 합니다.
ID 전환
앱 시작 ID 스위치:
시작 시 다중 ID 앱은 알 수 없는 관리되지 않는 계정으로 실행되는 것으로 간주됩니다. 조건부 시작 UI는 실행되지 않으며 앱에 정책이 적용되지 않습니다. 앱은 ID를 변경해야 할 때마다 SDK에 알릴 책임이 있습니다. 일반적으로 앱이 특정 사용자 계정에 대한 데이터를 표시하려고 할 때마다 발생합니다.
예를 들어 사용자가 전자 필기장에서 문서, 사서함 또는 탭을 열려고 할 때입니다. 파일, 사서함 또는 탭이 실제로 열리기 전에 앱이 SDK에 알려야 합니다. 이 작업은 의 API를
setUIPolicyIdentity
통해 수행됩니다IntuneMAMPolicyManager
. 이 API는 사용자가 관리되는지 여부에 관계없이 호출되어야 합니다. 사용자가 관리되는 경우 SDK는 탈옥 검색, PIN 및 인증과 같은 조건부 시작 검사를 수행합니다.ID 스위치의 결과는 완료 처리기를 통해 비동기적으로 앱에 반환됩니다. 앱은 성공 결과 코드가 반환될 때까지 문서, 사서함 또는 탭 열기를 연기해야 합니다. ID 전환에 실패한 경우 앱은 작업을 취소해야 합니다.
다중 ID 앱은 ID를 설정하는 방법으로 사용하지
setProcessIdentity
않아야 합니다. UIScenes를 사용하는 앱은 API를setUIPolicyIdentity:forWindow
사용하여 ID를 설정해야 합니다.앱은 및
setCurrentThreadIdentity:forScope:
을 사용하여setCurrentThreadIdentity:
현재 스레드의 ID를 설정할 수도 있습니다. 예를 들어 앱은 백그라운드 스레드를 생성하고, ID를 관리 ID로 설정한 다음, 관리되는 파일에서 파일 작업을 수행할 수 있습니다. 앱이 를 사용하는setCurrentThreadIdentity:
경우 앱이 완료되면 원래 ID를 복원할 수 있도록 앱도 사용해야getCurrentThreadIdentity
합니다. 그러나 앱이 를 사용하는setCurrentThreadIdentity:forScope:
경우 이전 ID 복원이 자동으로 발생합니다. 를 사용하는setCurrentThreadIdentity:forScope:
것이 좋습니다.비동기/대기
[IntuneMAMPolicyManager setCurrentThreadIdentity:]
[IntuneMAMPolicyManager setCurrentThreadIdentity:forScope:]
로 인해 빠른 속도로 사용할 수 없습니다. 대신 현재 ID를 설정하려면 를 사용합니다IntuneMAMSwiftContextManager.setIdentity(_, forScope:)
. 전달될 비동기, throw 및 비동기 throw 클로저에 대한 이 API의 변형이 있습니다.SDK 시작 ID 스위치:
경우에 따라 SDK는 앱에 특정 ID로 전환하도록 요청해야 합니다. 다중 ID 앱은 이 요청을 처리하려면 에서
identitySwitchRequired
IntuneMAMPolicyDelegate
메서드를 구현해야 합니다.이 메서드가 호출될 때 앱이 지정된 ID로 전환하기 위한 요청을 처리할 수 있는 경우 완료 처리기에 전달
IntuneMAMAddIdentityResultSuccess
되어야 합니다. ID 전환을 처리할 수 없는 경우 앱이 완료 처리기에 전달IntuneMAMAddIdentityResultFailed
되어야 합니다.앱은 이 호출에 대한 응답으로 를 호출
setUIPolicyIdentity
할 필요가 없습니다. SDK에서 앱이 관리되지 않는 사용자 계정으로 전환해야 하는 경우 빈 문자열이 호출에identitySwitchRequired
전달됩니다.SDK 시작 ID 자동 등록:
SDK가 작업을 수행하기 위해 앱에서 사용자를 자동으로 등록해야 하는 경우 앱은 에서
IntuneMAMPolicyDelegate
메서드를addIdentity:completionHandler:
구현해야 합니다. 앱이 ID를 추가할 수 있는 경우 애플리케이션은 완료 처리기를 호출하고 IntuneMAMAddIdentityResultSuccess를 전달해야 합니다. 그렇지 않으면 IntuneMAMAddIdentityResultFailed를 추가합니다.선택적 초기화:
앱이 선택적으로 초기화되면 SDK는 에서
IntuneMAMPolicyDelegate
메서드를wipeDataForAccount
호출합니다. 앱은 지정된 사용자의 계정 및 연결된 모든 데이터를 제거할 책임이 있습니다. SDK는 사용자가 소유한 모든 파일을 제거할 수 있으며 앱이 호출에서wipeDataForAccount
FALSE를 반환하는 경우 제거됩니다.이 메서드는 백그라운드 스레드에서 호출됩니다. 앱은 사용자의 모든 데이터가 제거될 때까지 값을 반환해서는 안 됩니다(앱이 FALSE를 반환하는 경우 파일 제외).
Siri 의도
앱이 Siri 의도와 통합되거나 Siri 의도 기부를 하는 경우 이 시나리오를 지원하는 방법에 대한 지침은 에 IntuneMAMPolicy.h
대한 areSiriIntentsAllowed
의견을 읽어보세요.
참고
iOS 16 이상에서는 새 앱 의도 시스템 프레임워크를 사용하여 Swift 앱 의도를 만들 수 있습니다. 앱 의도를 구현하는 앱은 먼저 사용자의 IntuneMAMPolicy 개체에서 속성을 확인해야 areSiriIntentsAllowed
합니다.
인쇄
앱이 인쇄를 구현하고 사용자 지정 메뉴에서 사용자 지정 인쇄 작업을 제공하는 경우 를 활용하여 UIPrintInteractionController.isPrintingAvailable()
사용자 지정 메뉴에 인쇄 작업을 추가해야 하는지 여부를 결정해야 합니다.
알림
앱이 알림을 수신하는 경우 이 시나리오를 지원하는 방법에 대한 지침은 에 IntuneMAMPolicy.h
대한 notificationPolicy
설명을 읽어보세요. 앱은 에 IntuneMAMPolicyManager.h
설명된 에 IntuneMAMPolicyDidChangeNotification
등록하고 키 집합을 UNNotificationServiceExtension
통해 이 값을 해당 앱에 전달하는 것이 좋습니다.
Safari 웹 확장
앱에 Safari 웹 확장이 있고 확장과 부모 애플리케이션 간에 데이터 전송을 지원하는 경우 일부 시나리오에서는 애플리케이션이 데이터 차단을 지원해야 할 수 있습니다. 데이터를 차단하려면 부모 애플리케이션에서 에서 IntuneMAMPolicy.h
API를 isAppSharingAllowed
호출한 다음 웹 확장을 차단합니다.
애플리케이션 내에서 웹 콘텐츠 표시
iOS에서 웹 보기를 사용하여 앱의 컨텍스트를 벗어나지 않고도 다양한 웹 콘텐츠를 표시할 수 있습니다. 일부 애플리케이션은 여러 플랫폼에서 기능 및 UI를 공유하는 방법으로 웹 보기를 사용할 수도 있습니다.
웹 보기는 앱 내에 존재하기 때문에 잠재적인 데이터 누출에 노출됩니다. 사용자가 앱 내에서 임의의 외부 웹 페이지로 이동할 수 있는 경우(의도적인 앱 디자인을 통해 또는 렌더링된 웹 페이지의 html 콘텐츠에서 노출된 링크를 통해 영리하게 기동하여) 사용자는 앱에서 관리되는 데이터를 유출할 수 있습니다.
Intune MAM SDK는 관리되는 콘텐츠와 관리되지 않는 콘텐츠가 앱 내의 웹 보기를 통해 표시되는 다양한 시나리오를 처리하기 위한 여러 API를 제공합니다. 이러한 API는 앱에 로그인한 관리되는 사용자가 있는 경우에만 호출해야 합니다. API가 어떤 시나리오에 적용되는지 빠른 가이드로 아래 표를 참조하세요.
시나리오 | API |
---|---|
임의 웹 페이지의 위험이 없는 사용자 및 조직 콘텐츠만 | API가 필요하지 않음 |
비 사용자 및 비조직 콘텐츠만 | 에서 를 설정합니다 TreatAllWebViewsAsUnmanaged . Info.plist |
사용자/조직 및 비사용자/비조직 콘텐츠 혼합(대부분의 비사용자/비조직) | 에서 Info.plist 를 설정하고 TreatAllWebViewsAsUnmanaged 사용자 또는 조직 데이터를 포함하는 웹 보기에서 를 IntuneMAMWebViewPolicyCurrentIdentity 사용합니다setWebViewPolicy:forWebViewer: . |
사용자/조직 및 비사용자/비조직 콘텐츠 혼합(대다수 사용자/조직) | 사용자 또는 조직 데이터가 포함되지 않은 웹 보기에서만 를 사용합니다 setWebViewPolicy:forWebViewer: IntuneMAMWebViewPolicyUnmanaged . |
사용자 또는 조직 콘텐츠이지만 임의 웹 페이지의 위험이 있음 | 및 setWebViewPolicy:forWebViewer: 의 적절한 사용에 따라 임의 TreatAllWebViewsAsUnmanaged 웹 페이지로 이동할 수 있는 웹 보기에 을 구현 IntuneMAMWebViewPolicyDelegate 합니다. |
웹 보기 시나리오 1: 사용자 또는 조직 콘텐츠를 표시하는 웹 페이지만
앱이 사용자 또는 조직 콘텐츠를 렌더링하는 방법으로 웹 보기만 사용하고 웹 보기가 임의의 외부 웹 페이지로 이동할 위험이 없는 경우 API 또는 설정을 사용할 필요가 없습니다. 기본적으로 SDK는 앱 내에 표시된 모든 웹 보기를 현재 UI 정책 ID에 속하는 콘텐츠로 처리합니다.
관리되는 사용자가 앱 내에서 웹 보기를 열면 웹 보기의 잘라내기/복사 데이터가 관리되는 콘텐츠로 처리됩니다. 웹 보기에 붙여넣으면 관리되는 계정의 정책에 따라 처리됩니다.
관리되지 않는 사용자가 앱 내에서 웹 보기를 열면 웹 보기의 잘라내기/복사 데이터가 관리되지 않는 콘텐츠로 처리됩니다. 웹 보기에 붙여넣는 작업은 관리되지 않는 계정에서 수행하는 것처럼 처리되며 추가 제한은 적용되지 않습니다.
웹 보기 시나리오 2: 사용자 또는 조직 콘텐츠를 표시하지 않는 웹 페이지만
앱이 웹 보기 내에 사용자 또는 조직 콘텐츠를 표시하지 않는다는 것을 알고 있는 경우 앱의 Info.plist
에서 로 설정할 TreatAllWebViewsAsUnmanaged
YES
수 있습니다. 이렇게 하면 웹 보기 내의 모든 사용자가 수행한 모든 잘라내기, 복사 및 붙여넣기 작업이 관리되지 않는 것으로 처리됩니다. 작업을 수행하는 데 사용되는 계정의 관리 상태에 관계없이 작업은 관리되지 않는 사용자가 수행하는 것처럼 처리됩니다.
이렇게 하면 관리되는 앱 콘텐츠가 웹 보기를 통해 앱 외부에서 유출되지 않습니다. 앱에서 웹 보기만 사용하여 개인 정보 알림, EULA 또는 사용자가 볼 필요가 없는 기타 정적 페이지 콘텐츠를 표시하는 경우 이 플래그를 설정하는 것이 좋습니다.
이 설정되면
TreatAllWebViewsAsUnmanaged
웹 보기 자체가 관리되지 않는 것으로 간주되므로 웹 보기 내에 표시되는 모든 콘텐츠를 복사하여 관리되지 않는 다른 앱에 붙여넣을 수 있습니다.
웹 보기 시나리오 3: 사용자/조직 및 비사용자/비조직 콘텐츠 혼합
더 복잡한 앱은 사용자/조직 및 비사용자/비조직 웹 보기의 조합을 사용할 수 있습니다. 앱은 웹 보기를 사용하여 개인 정보 알림을 표시할 수 있지만 웹 보기를 사용하여 사용자 콘텐츠를 표시할 수도 있습니다. 이 경우 의 setWebViewPolicy:forWebViewer:
API를 IntuneMAMPolicyManager
사용할 수 있습니다. 이 API를 사용하면 앱이 개별 웹 보기를 관리되지 않는 것으로 표시하거나 개별 웹 보기에 TreatAllWebViewsAsUnmanaged
대한 효과를 실행 취소할 수 있습니다.
API는 두 개의 인수를 사용합니다. 첫 번째는 형식의 열거형 값입니다 IntuneMAMWebViewPolicy
. 두 번째는 자식 뷰 계층 구조에 WKWebView를 포함할 수 있는 UIView 또는 UIViewController일 수 있습니다. WKWebView 자체는 두 번째 인수로 직접 전달할 수도 있습니다.
WKWebView가 두 번째 인수로 전달된 UIView 또는 UIViewController의 자식인 경우 이 API가 호출될 때 뷰 계층 구조 내에 존재할 필요가 없습니다. UIView 또는 UIViewController에 전달된 의 모든 자식 WKWebView는 추가될 때 적절한 정책을 적용합니다.
IntuneMAMWebViewPolicyUnset
- 모든 WKWebViews에 대한 기본 정책입니다. 웹 보기는 플래그에TreatAllWebViewsAsUnmanaged
따라 처리됩니다.IntuneMAMWebViewPolicyUnmanaged
- 이 정책으로 태그가 지정된 웹 보기에서 사용자가 수행하는 모든 잘라내기/복사/붙여넣기 작업은 관리되지 않는 ID에 의해 수행되는 것처럼 처리됩니다. 이 정책은 플래그를 덮어씁 수 있습니다TreatAllWebViewsAsUnmanaged
.IntuneMAMWebViewPolicyCurrentIdentity
- 이 정책으로 태그가 지정된 웹 보기에서 사용자가 수행하는 모든 잘라내기/복사/붙여넣기 작업은 현재 UI 정책 ID에 의해 수행되는 것처럼 처리됩니다. 이 정책은 플래그를 덮어씁 수 있습니다TreatAllWebViewsAsUnmanaged
.
대다수 비사용자 및 비조직 데이터
앱 내의 웹 보기 대부분이 관리되지 않는 콘텐츠를 TreatAllWebViewsAsUnmanaged
표시하는 경우 앱 Info.plist
에서 를 설정할 수 있으며 setWebViewPolicy:forWebViewer:
IntuneMAMWebViewPolicyCurrentIdentity
사용자 또는 조직 콘텐츠 웹 보기에서 를 호출할 수 있습니다.
대다수 사용자 및 조직 데이터
앱 내의 웹 보기 대부분이 사용자 또는 조직 콘텐츠를 표시하는 경우 모든 웹 보기는 기본적으로 관리되는 것으로 처리되므로 관리되지 않는 웹 보기에서 만 setWebViewPolicy:forWebViewer:
IntuneMAMWebViewPolicyUnmanaged
호출해야 합니다.
웹 보기 시나리오 4: 사용자 또는 조직 콘텐츠이지만 임의 웹 페이지의 위험이 있음
웹 보기를 사용하여 사용자 또는 조직 콘텐츠를 표시하지만 임의의 외부 URL로 이동할 위험이 있는 경우 및 setWebViewPolicy:forWebViewer:
와 TreatAllWebViewsAsUnmanaged
함께 추가 API를 사용할 수 있습니다. 예를 들어 검색 엔진에 대한 직접 또는 간접 링크가 있는 기능 제안 또는 피드백 웹 페이지가 있습니다.
IntuneMAMWebViewPolicyDelegate
를 사용하여 IntuneMAMPolicyManager
setWebViewPolicyDelegate:forWebViewer:
를 구현하고 웹 보기로 설정할 수 있습니다. 에 IntuneMAMWebViewPolicyDelegate
필요한 메서드가 하나 있습니다 isExternalURL:
.
메서드는
setWebViewPolicyDelegate:forWebViewer:
WKWebView 또는 SFSafariViewController에서 직접 호출해야 합니다.
웹 보기가 새 페이지 isExternalURL:
로 이동할 때마다 대리자 메서드가 호출됩니다. 애플리케이션은 대리자 메서드에 전달된 URL이 사용자 또는 조직 데이터를 붙여넣을 수 있는 내부 웹 사이트 또는 조직 데이터를 유출할 수 있는 외부 웹 사이트를 나타내는지 확인해야 합니다. NO
반환하면 로드되는 웹 사이트가 사용자 또는 조직 데이터를 공유할 수 있는 조직 위치임을 SDK에 알릴 수 있습니다. YES
반환하면 현재 정책 설정에 필요한 경우 SDK가 WKWebView 또는 SFSafariViewController가 아닌 관리되는 브라우저에서 URL을 엽니다. 이렇게 하면 앱 내의 사용자 또는 조직 데이터가 외부 웹 사이트로 유출될 수 없습니다.
웹 보기 API 예제
앱은 5개의 웹 보기(A, B, C, D 및 E)로 빌드됩니다. 웹 보기 A, B 및 C는 사용자 또는 조직 데이터를 표시하지 않습니다. 웹 보기 D는 회사의 모든 사용자가 사용할 수 있는 조직 페이지를 표시합니다. 웹 보기 E는 링크를 포함할 수 있는 사용자의 문서를 렌더링합니다.
대부분의 웹 보기는 관리되지 않으므로(A, B 및 C) 를 호출setWebViewPolicy:forWebViewer:
해야 하는 횟수를 줄이도록 설정할 TreatAllWebViewsAsUnmanaged
수 있습니다.
웹 보기 D 및 E는 사용자 콘텐츠를 표시하고 모든 웹 보기는 기본적으로 관리되지 않으므로 를 사용하여 IntuneMAMWebViewPolicyCurrentIdentity
태그를 setWebViewPolicy:forWebViewer:
지정해야 합니다.
웹 보기 E에는 사용자가 클릭할 수 있고 임의의 URL로 이동하는 데 사용할 수 있는 링크가 포함되어 있으므로 를 구현 IntuneMAMWebViewPolicyDelegate
하고 를 사용하여 setWebViewPolicyDelegate:forWebViewer:
웹 보기 E로 설정해야 합니다. isExternalURL:
구현에서는 들어오는 URL을 확인하고 해당 URL이 문서의 URL과 같은지 확인할 수 있습니다. 일치하지 않으면 외부 URL이며 를 반환 YES
할 수 있습니다. 일치하는 경우 내부 URL이며 를 반환 NO
할 수 있습니다.
이러한 API를 구현하고 호출하면 관리되는 사용자 또는 조직 콘텐츠가 웹 보기 A, B 및 C로 누출될 수 없습니다. 또한 관리되는 콘텐츠는 문서 내의 링크를 클릭하여 E에서 탐색할 수 있는 외부 URL로 누출될 수 없습니다. 또한 관리되는 콘텐츠는 웹 보기 D 및 E의 데이터가 앱 외부에서 누출되지 않도록 방지하여 보호됩니다.
SwiftUI 지원
새로 만든 SwiftUI 앱은 UIScenes를 지원하지만 기본적으로 구현된 UISceneDelegate는 없습니다. 앱이 UIScenes를 지원하고 Intune 앱 SDK를 사용하려는 경우 UISceneDelegate를 구현해야 합니다. UIScenes UIApplicationSceneManifest
를 지원하지 않으려면 앱의 Info.plist에서 ("애플리케이션 장면 매니페스트"라고도 함) 설정을 제거해야 합니다.
iOS 모범 사례
iOS용 개발을 위한 권장 모범 사례는 다음과 같습니다.
- iOS 파일 시스템은 대/소문자를 구분합니다. 와 같은
IntuneMAMResources.bundle
파일 이름에 대한 사례가 올바른지 확인합니다. - 사용자 지정 URL 체계를 등록하면 특정 URL이 앱으로 리디렉션할 수 있습니다. iOS 및 iPadOS를 사용하면 여러 앱이 동일한 사용자 지정 URL 체계를 등록할 수 있으며 OS는 호출되는 애플리케이션을 결정합니다. 잘못된 형식의 URL을 처리하기 위한 사용자 지정 URL 구성표 충돌 및 보안 지침을 방지하는 데 도움이 되는 권장 사항은 앱에 대한 사용자 지정 URL 구성표 정의 Apple 설명서를 참조하세요.
FAQ
네이티브 Swift 또는 Objective-C 및 Swift 상호 운용성을 통해 모든 API를 해결할 수 있나요?
Intune 앱 SDK API는 Objective-C에만 있으며 네이티브 Swift를 지원하지 않습니다. Objective-C와의 신속한 상호 운용성이 필요합니다.
내 애플리케이션의 모든 사용자를 APP-WE 서비스에 등록해야 합니까?
아니요. 실제로 회사 또는 학교 계정만 Intune 앱 SDK에 등록해야 합니다. 앱은 계정이 회사 또는 학교 컨텍스트에서 사용되는지 여부를 결정할 책임이 있습니다.
애플리케이션에 이미 로그인한 사용자는 어떻습니까? 등록해야 합니까?
애플리케이션은 성공적으로 인증된 후 사용자를 등록해야 합니다. 또한 애플리케이션은 MDM이 없는 MAM 기능을 갖기 전에 존재했을 수 있는 기존 계정을 등록해야 합니다.
이렇게 하려면 애플리케이션에서 메서드를 registeredAccounts:
사용해야 합니다. 이 메서드는 Intune MAM 서비스에 등록된 모든 계정이 있는 NSDictionary를 반환합니다. 애플리케이션의 기존 계정이 목록에 없는 경우 애플리케이션은 을 통해 registerAndEnrollAccount:
해당 계정을 등록하고 등록해야 합니다.
SDK는 얼마나 자주 등록을 다시 시도하나요?
SDK는 24시간 간격으로 이전에 실패한 모든 등록을 자동으로 다시 시도합니다. SDK는 사용자가 애플리케이션에 로그인한 후 사용자의 조직에서 MAM을 사용하도록 설정한 경우 사용자가 정책을 성공적으로 등록하고 받을 수 있도록 하기 위해 이 작업을 수행합니다.
SDK는 사용자가 애플리케이션을 성공적으로 등록했음을 감지하면 다시 시도를 중지합니다. 한 번에 한 명의 사용자만 애플리케이션을 등록할 수 있기 때문입니다. 사용자가 등록을 취소하면 동일한 24시간 간격으로 재시도가 다시 시작됩니다.
사용자를 등록 취소해야 하는 이유는 무엇인가요?
SDK는 백그라운드에서 주기적으로 다음 작업을 수행합니다.
- 애플리케이션이 아직 등록되지 않은 경우 24시간마다 등록된 모든 계정을 등록하려고 시도합니다.
- 애플리케이션이 등록된 경우 SDK는 8시간마다 MAM 정책 업데이트를 확인합니다.
사용자를 등록 취소하면 사용자가 더 이상 애플리케이션을 사용하지 않을 것임을 SDK에 알리고 SDK는 해당 사용자 계정에 대한 정기 이벤트를 중지할 수 있습니다. 또한 필요한 경우 앱 등록 취소 및 선택적 초기화를 트리거합니다.
등록 취소 메서드에서 doWipe 플래그를 true로 설정해야 하나요?
사용자가 애플리케이션에서 로그아웃되기 전에 이 메서드를 호출해야 합니다. 사용자의 데이터가 로그아웃 doWipe
의 일부로 애플리케이션에서 삭제된 경우 을 false로 설정할 수 있습니다. 그러나 애플리케이션이 사용자의 데이터를 제거하지 않는 경우 SDK가 데이터를 doWipe
삭제할 수 있도록 을 true로 설정해야 합니다.
애플리케이션을 등록 취소할 수 있는 다른 방법이 있나요?
예, IT 관리자는 선택적 초기화 명령을 애플리케이션에 보낼 수 있습니다. 이렇게 하면 사용자의 등록이 취소되고 등록이 취소되고 사용자의 데이터가 초기화됩니다. SDK는 이 시나리오를 자동으로 처리하고 등록 취소 대리자 메서드를 통해 알림을 보냅니다.
SDK를 통합하는 방법을 보여 주는 샘플 앱이 있나요?
예! Chatr 샘플 앱을 참조하세요.
내 앱 문제를 해결하려면 어떻게 해야 하나요?
iOS 9.0.3 이상용 Intune SDK는 정책 테스트 및 로깅 오류를 위해 모바일 앱 내에 진단 콘솔을 추가하는 기능을 지원합니다. IntuneMAMDiagnosticConsole.h
는 개발자가 IntuneMAMDiagnosticConsole
Intune 진단 콘솔을 표시하는 데 사용할 수 있는 클래스 인터페이스를 정의합니다. 이렇게 하면 테스트 중에 최종 사용자 또는 개발자가 Intune 로그를 수집하고 공유하여 발생할 수 있는 문제를 진단할 수 있습니다. 이 API는 통합자에 대한 선택 사항입니다.