App Center 배포 – iOS 앱 내 업데이트
중요
Visual Studio App Center는 2025년 3월 31일에 사용 중지될 예정입니다. Visual Studio App Center가 완전히 사용 중지될 때까지 계속 사용할 수 있지만 마이그레이션을 고려할 수 있는 몇 가지 권장 대안이 있습니다.
App Center 배포를 사용하면 App Center를 통해 배포할 때 사용자가 새 버전의 앱을 설치할 수 있습니다. 새 버전의 앱을 사용할 수 있는 경우 SDK는 사용자에게 업데이트 대화 상자를 표시하여 새 버전을 다운로드하거나 연기합니다. 업데이트를 선택하면 SDK가 애플리케이션 업데이트를 시작합니다.
참고
앱 내 업데이트를 사용할 때 고려해야 할 몇 가지 사항이 있습니다.
- App Store 앱을 릴리스한 경우 앱 내 업데이트가 비활성화됩니다.
- 자동화된 UI 테스트를 실행하는 경우 앱 내 업데이트를 사용하도록 설정하면 App Center 백 엔드에 대해 인증을 시도할 때 자동화된 UI 테스트가 차단됩니다. UI 테스트 대상에 App Center 배포를 사용하도록 설정하지 않는 것이 좋습니다.
참고
4.0.0
App Center 버전에서는 호환성이 손상되는 변경이 도입되었습니다. App Center SDK 4.0.0 이상으로 마이그레이션 섹션에 따라 이전 버전에서 App Center를 마이그레이션합니다.
중요
App Center SDK는 iOS 13에 도입된 여러 창 앱을 지원하지 않습니다.
앱에 앱 내 업데이트 추가
애플리케이션에서 SDK를 구성하지 않은 경우 시작 섹션을 따릅니다.
1. App Center 배포 모듈 추가
App Center SDK는 모듈식 접근 방식으로 설계되었으며 관심 있는 서비스의 모듈만 통합하면 됩니다.
Cocoapods를 통한 통합
Cocoapods를 통해 App Center를 앱에 통합하는 경우 podfile에 다음 종속성을 추가하고 를 실행 pod install
합니다.
pod 'AppCenter/Distribute'
Carthage를 통한 통합
App Center 배포를 포함하려면 다음 종속성을 에 추가합니다
Cartfile
.# Use the following line to get the latest version of App Center github "microsoft/appcenter-sdk-apple"
# Use the following line to get the specific version of App Center github "microsoft/appcenter-sdk-apple" ~> X.X.X
carthage update
을 실행합니다.애플리케이션 대상의 일반 설정 탭을 엽니다. Carthage/Build/iOS 폴더의 AppCenterDistribute.framework 파일을 XCode의 연결된 프레임워크 및 라이브러리 섹션으로 끌어서 놓습니다.
AppCenterDistribute.framework에서 AppCenterDistributeResources.bundle을 XCode의 프로젝트 탐색기로 끌어서 놓습니다.
대화 상자가 나타나 앱 대상이 선택되어 있는지 확인합니다. 마침을 클릭합니다.
Swift 패키지 관리자를 통한 통합
- Xcode 메뉴에서 파일 > 빠른 패키지 > 패키지 패키지 종속성 추가를 클릭합니다.
- 표시되는 대화 상자에서 리포지토리 URL
https://github.com/microsoft/appcenter-sdk-apple.git
을 입력합니다. - 버전에서 다음 주까지를 선택하고 기본 옵션을 사용합니다.
- 패키지 제품 열에서 AppCenterDistribute를 선택합니다.
프로젝트에 이진 파일을 복사하여 통합
Cocoapods를 사용하지 않으려면 이진 파일을 프로젝트에 복사하여 모듈을 통합할 수 있습니다. 아래 단계를 따릅니다.
참고
App Center SDK는 의 XCframework
사용을 지원합니다. XCframeworks를 프로젝트에 통합하려면 릴리스 페이지에서AppCenter-SDK-Apple-XCFramework.zip 다운로드하고 압축을 풉니다. 결과 폴더 콘텐츠는 플랫폼별 콘텐츠가 아니라 각 모듈에 대한 XCframeworks를 포함합니다. 아래 설명된 대로 일반적인 프레임워크와 동일한 방식으로 통합할 수 있습니다.
zip 파일로 제공되는 App Center SDK 프레임워크를 다운로드합니다.
파일 압축을 풀면 AppCenter-SDK-Apple/iOS 라는 폴더가 표시되며 각 App Center 서비스에 대해 서로 다른 프레임워크가 포함됩니다. 호출
AppCenter
된 프레임워크는 서로 다른 모듈 간에 공유되는 코드를 포함하기 때문에 프로젝트에 필요합니다.[선택 사항] 타사 라이브러리에 대한 하위 디렉터리를 만듭니다.
- 타사 라이브러리는 일반적으로 공급업체라고 하는 하위 디렉터리 내에 있는 것이 가장 좋습니다. 프로젝트가 라이브러리에 대한 하위 디렉터리로 구성되지 않은 경우 지금 공급업체 하위 디렉터리를 만듭니다.
- Xcode 프로젝트 내에 Vendor 라는 그룹을 만들어 디스크의 파일 구조를 모방합니다.
Finder를 열고 압축을 푼 AppCenter-SDK-Apple/iOS 폴더를 원하는 위치의 프로젝트 폴더에 복사합니다.
Xcode에서 프로젝트에 SDK 프레임워크를 추가합니다.
- 프로젝트 탐색기가 표시되는지 확인합니다(⌘+1).
- 이제 Finder(Vendor 폴더 내)에서 AppCenter.framework, AppCenterDistribute.framework 및 AppCenterDistributeResources.bundle를 Xcode의 프로젝트 탐색기로 끌어서 놓습니다. SDK를 시작하려면 AppCenter.framework가 필요합니다. 프로젝트에 추가되었는지 확인합니다. 그렇지 않으면 다른 모듈이 작동하지 않으며 프로젝트가 성공적으로 컴파일되지 않습니다.
- 대화 상자가 나타나 앱 대상이 선택되어 있는지 확인합니다. 마침을 클릭합니다.
2. App Center 배포 시작
App Center는 애플리케이션에서 호출하는 특정 모듈만 사용합니다. SDK를 시작할 때 각 항목을 명시적으로 호출해야 합니다.
2.1 App Center 배포에 대한 가져오기 추가
Swift의 Objective-C 또는 AppDelegate.swift 파일에서 프로젝트의 AppDelegate.m 파일을 열고 다음 import 문을 추가합니다.
@import AppCenter;
@import AppCenterDistribute;
import AppCenter
import AppCenterDistribute
2.2 메서드 추가 start:withServices:
메서드에 를 추가하여 Distribute
App Center 배포 서비스를 시작합니다 start:withServices:
.
다음 줄을 삽입하여 프로젝트의 Objective-C용 AppDelegate.m 클래스 또는 메서드의 Swift에 대한 AppDelegate.swift 클래스에서 SDK 를 didFinishLaunchingWithOptions
시작합니다.
[MSACAppCenter start:@"{Your App Secret}" withServices:@[[MSACDistribute class]]];
AppCenter.start(withAppSecret: "{Your App Secret}", services: [Distribute.self])
위의 코드 샘플에서 를 앱 비밀로 바꿔 {Your App Secret}
야 합니다. 또한 애플리케이션에서 SDK를 구성하지 않은 경우 시작 섹션을 검사.
2.3 프로젝트의 Info.plist 수정
- 프로젝트의 Info.plist 파일에서 위쪽의 "정보 속성 목록" 옆에 있는 '+' 단추를 클릭하여 에 대한
URL types
새 키를 추가합니다. Xcode에서 Info.plist 를 소스 코드로 표시하는 경우 아래 팁을 참조하세요. - 키 유형을 배열로 변경합니다.
- 배열(
Item 0
)에 새 항목을 추가하고 형식을 사전으로 변경합니다. - 에서
Item 0
키를 추가하고URL Schemes
형식을 배열로 변경합니다. URL Schemes
키 아래에 새 항목(Item 0
)을 추가합니다.- 에서
URL Schemes
>Item 0
값을appcenter-{APP_SECRET}
로 변경하고 를 앱의 앱 비밀로 바{APP_SECRET}
꿉니다.
팁
Info.plist를 올바르게 수정했는지 확인하려면 소스 코드로 엽니다. 대신 앱 비밀 {APP_SECRET}
에 다음 항목이 포함되어야 합니다.
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>appcenter-{APP_SECRET}</string>
</array>
</dict>
</array>
프라이빗 메일 그룹 사용
기본적으로 배포는 공용 배포 그룹을 사용합니다. 프라이빗 메일 그룹을 사용하려면 속성을 통해 updateTrack
명시적으로 설정해야 합니다.
MSACDistribute.updateTrack = MSACUpdateTrackPrivate;
Distribute.updateTrack = .private
참고
기본값은 UpdateTrack.public
입니다. 이 속성은 메서드 호출 전에 AppCenter.start
만 업데이트할 수 있습니다. 애플리케이션 프로세스가 다시 시작될 때 업데이트 트랙에 대한 변경 내용은 유지되지 않으므로 속성이 호출 전에 AppCenter.start
항상 업데이트되지 않는 경우 기본적으로 공개됩니다.
이 호출 후에는 브라우저 창이 열리고 사용자를 인증합니다. 모든 후속 업데이트 검사는 프라이빗 트랙에서 최신 릴리스를 가져옵니다.
사용자가 프라이빗 트랙에 있는 경우 인증에 성공하면 구성원인 프라이빗 배포 그룹에서 최신 릴리스를 받게 됩니다. 사용자가 공개 트랙에 있는 경우 퍼블릭 배포 그룹에서 최신 릴리스를 받게 된다는 의미입니다.
업데이트 자동 확인 사용 안 함
기본적으로 SDK는 새 릴리스를 자동으로 확인합니다.
- 애플리케이션이 시작될 때.
- 애플리케이션이 백그라운드로 전환되면 다시 포그라운드로 이동합니다.
- 이전에 사용하지 않도록 설정한 경우 배포 모듈을 사용하도록 설정하는 경우
새 릴리스에 대해 수동으로 검사 경우 업데이트에 대한 자동 검사 사용하지 않도록 설정할 수 있습니다. 이렇게 하려면 SDK가 시작되기 전에 다음 메서드를 호출합니다.
[MSACDistribute disableAutomaticCheckForUpdate];
Distribute.disableAutomaticCheckForUpdate()
참고
메서드를 호출하기 전에 이 메서드를 AppCenter.start
호출해야 합니다.
그런 다음, 다음 섹션에 checkForUpdate
설명된 API를 사용할 수 있습니다.
수동으로 업데이트 확인
[MSACDistribute checkForUpdate];
Distribute.checkForUpdate()
그러면 사용 가능한 새 릴리스가 있는 경우 App Center에 요청을 보내고 업데이트 대화 상자를 표시합니다.
참고
자동 업데이트를 사용하도록 설정한 경우에도 업데이트 호출에 대한 수동 검사 작동합니다. 다른 검사 이미 수행 중인 경우 업데이트에 대한 수동 검사 무시됩니다. 사용자가 업데이트를 연기한 경우(최신 버전이 필수 업데이트가 아닌 경우) 업데이트에 대한 수동 검사 처리되지 않습니다.
앱 내 업데이트 대화 상자 사용자 지정 또는 지역화
1. 텍스트 사용자 지정 또는 지역화
업데이트 대화 상자에 표시된 텍스트를 지역화하려는 경우 사용자 고유의 리소스 문자열을 쉽게 제공할 수 있습니다. 이 문자열 파일을 살펴봅니다. 동일한 문자열 이름/키를 사용하고 사용자 고유의 앱 문자열 파일의 대화 상자에 반영할 지역화된 값을 지정합니다.
2. 업데이트 대화 상자 사용자 지정
프로토콜을 구현하여 기본 업데이트 대화 상자의 모양을 사용자 지정할 수 있습니다 DistributeDelegate
. 다음 예제와 같이 SDK를 시작하기 전에 대리자를 등록해야 합니다.
[MSACDistribute setDelegate:self];
Distribute.delegate = self;
다음은 SDK 대화 상자를 사용자 지정 대화 상자로 대체하는 대리자 구현의 예입니다.
- (BOOL)distribute:(MSACDistribute *)distribute releaseAvailableWithDetails:(MSACReleaseDetails *)details {
// Your code to present your UI to the user, e.g. an UIAlertController.
UIAlertController *alertController = [UIAlertController
alertControllerWithTitle:@"Update available."
message:@"Do you want to update?"
preferredStyle:UIAlertControllerStyleAlert];
[alertController
addAction:[UIAlertAction actionWithTitle:@"Update"
style:UIAlertActionStyleCancel
handler:^(UIAlertAction *action) {
[MSACDistribute notifyUpdateAction:MSACUpdateActionUpdate];
}]];
[alertController
addAction:[UIAlertAction actionWithTitle:@"Postpone"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction *action) {
[MSACDistribute notifyUpdateAction:MSACUpdateActionPostpone];
}]];
// Show the alert controller.
[self.window.rootViewController presentViewController:alertController animated:YES completion:nil];
return YES;
}
func distribute(_ distribute: Distribute, releaseAvailableWith details: ReleaseDetails) -> Bool {
// Your code to present your UI to the user, e.g. an UIAlertController.
let alertController = UIAlertController(title: "Update available.",
message: "Do you want to update?",
preferredStyle:.alert)
alertController.addAction(UIAlertAction(title: "Update", style: .cancel) {_ in
Distribute.notify(.update)
})
alertController.addAction(UIAlertAction(title: "Postpone", style: .default) {_ in
Distribute.notify(.postpone)
})
// Show the alert controller.
self.window?.rootViewController?.present(alertController, animated: true)
return true;
}
위의 메서드에서 반환 YES
/true
하는 경우 앱은 다음 API를 사용하여 사용자의 선택을 얻고 결과와 함께 SDK에 메시지를 보내야 합니다.
// Depending on the user's choice, call notifyUpdateAction: with the right value.
[MSACDistribute notifyUpdateAction:MSACUpdateActionUpdate];
[MSACDistribute notifyUpdateAction:MSACUpdateActionPostpone];
// Depending on the user's choice, call notify() with the right value.
Distribute.notify(.update);
Distribute.notify(.postpone);
위의 메서드를 호출하지 않으면 앱이 releaseAvailableWithDetails:
포그라운드에 입력될 때마다 -method가 반복됩니다.
3. 업데이트가 없으면 코드 실행
SDK가 업데이트를 확인하고 현재 사용되는 distributeNoReleaseAvailable:
업데이트보다 최신 업데이트를 찾지 못하는 경우 대리자 콜백에서 MSACDistributeDelegate
가 호출됩니다. 이렇게 하면 이러한 시나리오에서 사용자 지정 코드를 실행할 수 있습니다.
다음은 업데이트를 찾을 수 없을 때 경고 UI를 표시하는 방법을 보여주는 예제입니다.
- (void)distributeNoReleaseAvailable:(MSACDistribute *)distribute {
UIAlertController *alert = [UIAlertController alertControllerWithTitle:nil
message:NSLocalizedString(@"No updates available", nil)
preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"OK", nil) style:UIAlertActionStyleDefault handler:nil]];
[self.window.rootViewController presentViewController:alert animated:YES completion:nil];
}
func distributeNoReleaseAvailable(_ distribute: Distribute) {
let alert = UIAlertController(title: nil, message: "No updates available", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
self.window?.rootViewController?.present(alert, animated: true)
}
런타임에 App Center 배포 사용 또는 사용 안 함
런타임에 App Center 배포를 사용하도록 설정하고 사용하지 않도록 설정할 수 있습니다. 사용하지 않도록 설정하면 SDK는 앱 내 업데이트 기능을 제공하지 않지만 App Center 포털에서 서비스 배포를 계속 사용할 수 있습니다.
[MSACDistribute setEnabled:NO];
Distribute.enabled = false
App Center 배포를 다시 사용하도록 설정하려면 동일한 API를 사용하지만 매개 변수로 전달 YES
/true
합니다.
[MSACDistribute setEnabled:YES];
Distribute.enabled = true
상태는 애플리케이션이 시작될 때 디바이스의 스토리지에 유지됩니다.
참고
이 메서드는 시작된 후에 Distribute
만 사용해야 합니다.
App Center 배포가 사용하도록 설정되어 있는지 확인
App Center 배포를 사용하는지 여부를 검사 수도 있습니다.
BOOL enabled = [MSACDistribute isEnabled];
var enabled = Distribute.enabled
참고
이 메서드는 시작된 후에 Distribute
만 사용해야 하며, 시작 전에 항상 반환 false
됩니다.
개발 중에 App Center 배포를 초기화하지 마세요.
프라이빗 모드인 경우 App Center 배포는 애플리케이션 시작 시 해당 UI/브라우저를 엽니다. 이는 최종 사용자에게 예상되는 동작이지만 애플리케이션의 개발 단계에서 중단될 수 있습니다. 구성을 초기화 Distribute
DEBUG
하지 않는 것이 좋습니다.
#if DEBUG
[MSACAppCenter start:@"{Your App Secret}" withServices:@[[MSACAnalytics class], [MSACCrashes class]]];
#else
[MSACAppCenter start:@"{Your App Secret}" withServices:@[[MSACAnalytics class], [MSACCrashes class], [MSACDistribute class]]];
#endif
#if DEBUG
AppCenter.start(withAppSecret: "{Your App Secret}", services: [Analytics.self, Crashes.self])
#else
AppCenter.start(withAppSecret: "{Your App Secret}", services: [Analytics.self, Crashes.self, Distribute.self])
#endif
업데이트를 위해 애플리케이션이 닫히기 직전에 클린 수행
프로토콜을 DistributeDelegate
구현하고 다음 예제와 같이 대리자를 등록합니다.
[MSACDistribute setDelegate:self];
Distribute.delegate = self;
대리자 메서드는 distributeWillExitApp:
업데이트 설치를 위해 앱이 종료되기 직전에 호출됩니다.
- (void)distributeWillExitApp:(MSACDistribute *)distribute {
// Perform the required clean up here.
}
func distributeWillExitApp(_ distribute: Distribute) {
// Perform the required clean up here.
}
앱 내 업데이트는 어떻게 작동합니까?
참고
앱 내 업데이트가 작동하려면 링크에서 앱 빌드를 다운로드해야 합니다. IDE에서 설치하거나 수동으로 설치하면 작동하지 않습니다.
앱 내 업데이트 기능은 다음과 같이 작동합니다.
이 기능은 App Center 배포 서비스를 사용하여 배포되는 빌드에서만 작동합니다. 디버거가 연결되거나 iOS 단계별 액세스 기능이 켜져 있으면 작동하지 않습니다.
SDK를 통합하고 앱의 릴리스 버전을 빌드하고 App Center에 업로드하면 해당 배포 그룹의 사용자에게 이메일을 통해 새 릴리스에 대한 알림이 표시됩니다.
각 사용자가 전자 메일에서 링크를 열면 애플리케이션이 디바이스에 설치됩니다. 메일 링크를 사용하여 앱을 설치하는 것이 중요합니다. App Center 배포는 다른 원본에서 설치한 앱(예: 전자 메일 첨부 파일에서 앱 다운로드)에 대한 앱 내 업데이트를 지원하지 않습니다. 링크에서 애플리케이션을 다운로드하면 SDK는 쿠키의 중요한 정보를 저장하여 나중에 업데이트를 위해 검사 저장합니다. 그렇지 않으면 SDK에 해당 주요 정보가 없습니다.
애플리케이션이 트랙을 프라이빗으로 설정하면 브라우저가 열리고 사용자를 인증하고 앱 내 업데이트를 사용하도록 설정합니다. 인증 정보가 공개 트랙으로 다시 전환하고 나중에 다시 프라이빗으로 전환할 때에도 유효한 상태로 유지되는 한 브라우저는 다시 열리지 않습니다. 브라우저 인증에 성공하면 사용자가 자동으로 애플리케이션으로 다시 리디렉션됩니다. 트랙이 공용(기본값)이면 다음 단계가 직접 수행됩니다.
- iOS 9 및 10에서는
SFSafariViewController
instance 앱 내에서 열리고 사용자를 인증합니다. 인증이 성공하면 자동으로 닫힙니다. - iOS 11에서 사용자 환경은 iOS 9 및 10과 비슷하지만 iOS 11은 사용자에게 로그인 정보에 액세스할 수 있는 권한을 요청합니다. 시스템 수준 대화 상자이며 사용자 지정할 수 없습니다. 사용자가 대화 상자를 취소하는 경우 테스트 중인 버전을 계속 사용할 수 있지만 앱 내 업데이트는 받지 않습니다. 다음에 앱을 시작할 때 로그인 정보에 다시 액세스하라는 메시지가 표시됩니다.
- iOS 9 및 10에서는
앱의 새 릴리스에는 다음과 같은 경우 사용자에게 애플리케이션을 업데이트하도록 요청하는 앱 내 업데이트 대화 상자가 표시됩니다.
- 또는 값이
CFBundleShortVersionString
더 높습니다. - 의 값은
CFBundleShortVersionString
같지만 값은 입니다CFBundleVersion
. - 버전은 동일하지만 빌드 고유 식별자는 다릅니다.
- 또는 값이
팁
동일한 ipa를 두 번째로 업로드하면 이진 파일이 동일하므로 대화 상자가 표시되지 않습니다 . 동일한 버전 속성을 사용하여 새 빌드를 업로드하면 업데이트 대화 상자가 표시됩니다. 그 이유는 다른 이진이기 때문입니다.
앱 내 업데이트를 테스트할 어떻게 할까요? 있나요?
App Center Portal에 릴리스 빌드(App Center SDK의 배포 모듈 사용)를 업로드하여 앱 내 업데이트를 테스트하고 매번 버전 번호를 늘려야 합니다.
- 아직 앱이 없는 경우 App Center 포털에서 앱을 만듭니다.
- 새 메일 그룹을 만들고 이름을 지정하여 앱 내 업데이트 기능을 테스트하기 위한 것임을 인식할 수 있습니다.
- 자신(또는 앱 내 업데이트 기능의 테스트에 포함하려는 모든 사용자)을 추가합니다. App Center에서 해당 앱에 사용되지 않은 새 전자 메일 주소 또는 버리기 전자 메일 주소를 사용합니다. 이렇게 하면 실제 테스터의 경험에 가까운 경험을 할 수 있습니다.
- 아래에 설명된 대로 App Center 배포 를 포함하고 설치 논리를 포함하는 앱의 새 빌드를 만듭니다. 그룹이 프라이빗인 경우 updateTrack 속성 사용을 시작하기 전에 프라이빗 앱 내 업데이트 트랙을 설정하는 것을 잊지 마세요.
- 포털에서 새 릴리스 배포 단추를 클릭하고 앱 빌드를 업로드합니다.
- 업로드가 완료되면 다음을 클릭하고 해당 앱 배포의 대상으로 만든 배포 그룹을 선택합니다.
- 배포를 검토하고 빌드를 앱 내 테스트 그룹에 배포합니다.
- 해당 그룹의 사람 앱의 테스터로 초대됩니다. 초대를 수락하면 모바일 디바이스에서 App Center 포털에서 앱을 다운로드할 수 있습니다. 앱 내 업데이트가 설치되면 앱 내 업데이트를 테스트할 준비가 된 것입니다.
- 앱의 버전 이름(
CFBundleShortVersionString
)을 범프합니다. - 앱의 릴리스 버전을 빌드하고 이전 단계에서 했던 것처럼 앱의 새 빌드를 업로드하고 이전에 만든 배포 그룹에 배포합니다. 다음에 앱이 시작될 때 메일 그룹의 구성원에게 새 버전을 묻는 메시지가 표시됩니다.
팁
메일 그룹 등에 대한 자세한 내용은 App Center 배포를 활용하는 방법에 대한 정보를 살펴보세요. App Center 배포를 사용하여 코드를 추가하지 않고 새 버전의 앱을 배포할 수 있지만 앱 코드에 App Center 배포를 추가하면 테스터와 사용자가 앱에서 바로 업데이트 환경을 이용할 때 보다 원활한 환경을 제공할 수 있습니다.
App Center 서비스에 대한 애플리케이션 대리자의 메서드 호출 전달 사용 안 함
App Center SDK는 스위즐링을 사용하여 애플리케이션 대리자의 메서드 호출 중 일부를 전달하여 통합을 개선합니다. 메서드 스위즐링은 런타임에 메서드의 구현을 변경하는 방법입니다. 어떤 이유로든 스위즐링을 사용하지 않으려는 경우(예: 특정 정책으로 인해) 아래 단계에 따라 모든 App Center 서비스에 대해 이 전달을 사용하지 않도록 설정할 수 있습니다.
- 프로젝트의 Info.plist 파일을 엽니다.
- 키를 추가하고
AppCenterAppDelegateForwarderEnabled
값을0
로 설정합니다. 이렇게 하면 모든 App Center 서비스에 대한 애플리케이션 대리자 전달이 비활성화됩니다. openURL
프로젝트의AppDelegate
파일에 콜백을 추가합니다.
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
// Pass the url to MSACDistribute.
return [MSACDistribute openURL:url];
}
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
// Pass the URL to App Center Distribute.
return Distribute.open(url)
}