iOS/tvOS/macOS 앱 통합¶
iOS, tvOS, macOS 앱의 메트릭 데이터를 수집하여 Apple 플랫폼 애플리케이션의 성능을 시각적으로 분석합니다.
읽기 경로¶
- 처음 통합하는 경우: 빠른 시작을 먼저 확인하세요.
- 전체 통합: 이 문서를 계속 읽으세요.
- 1.6.6 이전 버전에서 업그레이드: 마이그레이션 가이드를 확인하세요.
- 초기화 파라미터: SDK 초기화, RUM 구성, Log 구성, Trace 구성을 확인하세요.
- 사용자 정의 기능: 사용자 정의 태그 사용, 사용자 정의 수집 규칙, 데이터 수집 마스킹을 확인하세요.
- 고급 시나리오: "고급 시나리오" 그룹의 전용 페이지를 확인하세요.
- 문제 해결: 장애 진단을 확인하세요.
전제 조건¶
참고
RUM Headless 서비스를 이미 활성화한 경우, 전제 조건이 자동으로 구성되므로 앱을 바로 통합할 수 있습니다.
- DataKit 설치;
- RUM 수집기 구성;
- DataKit을 공개 네트워크에서 액세스 가능하게 구성하고 IP 지리 정보 데이터베이스 설치.
macOS Alpha 안내
SDK 1.6.6 이상 버전에서 GuanceSDK 메인 SDK는 iOS, tvOS, macOS를 지원합니다. macOS는 현재 Alpha 버전이며, 모든 iOS 기능이 지원된다고 보장하지 않습니다. macOS를 통합하기 전에 먼저 테스트 환경에서 초기화, RUM, Log, Trace, 데이터 동기화 등 핵심 링크를 검증하세요. Session Replay 및 Widget Extension은 macOS를 지원하지 않습니다.
앱 통합¶
- 실제 사용자 모니터링(RUM) > 앱 생성으로 이동하여 iOS, tvOS 또는 macOS 앱 유형을 선택합니다.
- 앱 이름을 입력합니다.
- 앱 ID를 입력합니다.
-
앱 통합 방식을 선택합니다:
- 공용 네트워크 DataWay: DataKit 수집기를 설치하지 않고 RUM 데이터를 직접 수신합니다.
- 로컬 환경 배포: 전제 조건을 충족한 후 RUM 데이터를 수신합니다.
설치¶
소스 코드 주소: https://github.com/GuanceCloud/datakit-ios
데모: https://github.com/GuanceDemo/guance-app-demo
CocoaPods 유지 보수 안내
CocoaPods 공식 공지에 따라 CocoaPods는 2026년 12월 2일 이후에 trunk를 읽기 전용으로 전환하고 새로운 Podspec을 수신하지 않을 계획입니다. 이미 게시된 Pod 버전과 기존 빌드는 즉시 무효화되지 않지만, 이후 CocoaPods를 통해 새 버전, 호환성 수정 및 보안 업데이트를 받는 데 제한이 있을 수 있습니다. 따라서 새로 통합하거나 SDK를 업그레이드할 때는 Swift Package Manager 방식을 우선 사용하는 것이 좋습니다.
Xcode UI 사용
-
Xcode에서
File->Add Package Dependency...를 선택합니다. -
표시된 페이지의 검색창에
https://github.com/GuanceCloud/datakit-ios.git를 입력합니다. -
Xcode가 패키지를 확인한 후, 종속성 버전 규칙을 선택합니다.
Up to Next Major Version을 선택하는 것이 좋습니다.추가할 프로젝트를 선택한 후
Add Package를 클릭하고 로딩이 완료될 때까지 기다립니다. -
패키지 확인이 완료되면 Package Products 목록에서 각 Target에 추가할 제품을 선택하고
Add Package를 클릭합니다.GuanceSDK: 메인 프로젝트 Target에 추가하며, iOS, tvOS, macOS를 지원합니다. macOS는 Alpha 버전입니다.GuanceWidgetExtension: iOS Widget Extension Target에만 추가합니다.
Package.swift 사용
프로젝트 자체가 Swift Package인 경우, SDK를 종속성으로 추가하려면 Package.swift에 dependencies를 추가합니다.
// 메인 프로젝트
dependencies: [
.package(url: "https://github.com/GuanceCloud/datakit-ios.git",
.upToNextMajor(from: "[latest_version]"))
]
Targets에 종속성을 추가합니다:
targets: [
.target(
name: "YourTarget",
dependencies: [
.product(name: "GuanceSDK", package: "GuanceSDK"),
]),
.target(
name: "YourWidgetExtensionTarget",
dependencies: [
.product(name: "GuanceWidgetExtension", package: "GuanceSDK"),
]),
]
참고: 1.4.0-beta.1 이상에서 Swift Package Manager를 지원합니다. SDK 1.6.6 이상 버전에서 SPM 제품명은 GuanceSDK, GuanceWidgetExtension, GuanceSessionReplay로 조정되었습니다. 이전 제품명 마이그레이션은 마이그레이션 가이드를 참조하세요.
-
Cartfile파일을 구성합니다. -
종속성을 업데이트합니다.
대상 플랫폼(iOS, tvOS 또는 macOS)에 따라 해당하는
carthage update명령을 실행하고, XCFrameworks를 생성하기 위해--use-xcframeworks파라미터를 추가합니다:-
iOS 플랫폼의 경우:
-
tvOS 플랫폼의 경우:
-
macOS 플랫폼의 경우:
생성된 xcframework는 일반 Framework와 동일한 방식으로 사용합니다. 컴파일된 라이브러리를 프로젝트에 추가합니다.
GuanceSDK: 메인 프로젝트 Target에 추가하며, iOS, tvOS, macOS를 지원합니다. macOS는 Alpha 버전입니다.GuanceWidgetExtension: iOS Widget Extension Target에만 추가합니다. -
-
TARGETS->Build Setting->Other Linker Flags에-ObjC를 추가합니다. -
Carthage를 사용한 통합, SDK 버전 지원:
GuanceSDK: >=1.6.6GuanceWidgetExtension: >=1.6.6
CocoaPods 적용 안내
CocoaPods 공식 공지에 따라 CocoaPods는 2026년 12월 2일 이후에 trunk를 읽기 전용으로 전환하고 새로운 Podspec을 수신하지 않을 계획입니다. 새 프로젝트이거나 종속성 관리 방식을 조정 중인 프로젝트는 위의 Swift Package Manager 방식을 우선 사용하여 SDK를 통합하세요.
-
Podfile파일을 구성합니다.-
Dynamic Library 사용
-
Static Library 사용
-
Podfile파일:use_modular_headers! # 메인 프로젝트 target 'yourProjectName' do pod 'GuanceSDK', :path => '[folder_path]' end # Widget Extension target 'yourWidgetExtensionName' do pod 'GuanceSDK/WidgetExtension', :path => '[folder_path]' endfolder_path:GuanceSDK.podspec파일이 있는 폴더의 경로입니다.GuanceSDK.podspec파일:GuanceSDK.podspec파일에서s.version및s.source를 수정합니다.Pod::Spec.new do |s| s.name = "GuanceSDK" s.version = "[latest_version]" s.source = { :git => "https://github.com/GuanceCloud/datakit-ios.git", :tag => s.version } ends.version: 지정된 버전으로 수정합니다.Sources/Agent/Core/FTSDKVersion.h의SDK_VERSION과 일치시키는 것이 좋습니다.s.source:tag => s.version
-
Widget Extension 호환 표기법:
SDK 1.6.6 이상 버전은 GuanceSDK/WidgetExtension 사용을 권장합니다. 기존 프로젝트에서 pod 'FTMobileSDK', :subspecs => ['Extension']을 사용했다면, GuanceSDK로 업그레이드한 후에도 호환 subspec을 계속 사용할 수 있습니다:
Podfile디렉토리에서pod install을 실행하여 SDK를 설치합니다.
호환성 안내: SDK 1.6.6 이상 버전에서 메인 Pod 이름은 GuanceSDK입니다. 이전 FTMobileSDK 통합 방식은 1.6.6 이전 버전에 적용됩니다. 1.6.6 이상 버전으로 업그레이드할 때는 마이그레이션 가이드를 참조하여 종속성 이름을 조정하세요.
헤더 파일 추가¶
상세 설정 진입점¶
고급 시나리오¶
- 사용자 정의 태그 사용
- 데이터 수집 사용자 정의 규칙
- 데이터 수집 마스킹
- URLSession 사용자 정의 네트워크 수집
- 동적 구성
- 심볼 파일 업로드
- Widget Extension 데이터 수집
- WebView 데이터 모니터링
- tvOS 데이터 수집
자주 묻는 질문¶
크래시 로그 분석¶
개발 중 Debug 및 Release 모드에서는 Crash 시 캡처된 스레드 역추적이 심볼화됩니다. 그러나 릴리스 패키지에는 심볼 테이블이 포함되어 있지 않으므로, 예외 스레드의 주요 역추적은 이미지 이름만 표시되고 유효한 코드 심볼로 변환되지 않습니다. 획득한 crash log의 관련 정보는 모두 16진수 메모리 주소이며, 크래시 코드를 식별할 수 없습니다. 따라서 16진수 메모리 주소를 해당 클래스 및 메서드로 변환해야 합니다.
컴파일 또는 패키징 후 dSYM 파일을 찾는 방법¶
- Xcode에서 dSYM 파일은 일반적으로 컴파일된 .app 파일과 함께 동일한 디렉토리에 생성됩니다.
- 프로젝트를 보관(Archive)한 경우, Xcode의
Window메뉴에서Organizer를 선택한 다음 해당 보관 파일을 선택합니다. 보관 파일을 마우스 오른쪽 버튼으로 클릭하고Show in Finder를 선택합니다. Finder에서 해당.xcarchive파일을 찾습니다..xcarchive파일을 마우스 오른쪽 버튼으로 클릭하고Show Package Contents를 선택한 다음dSYMs폴더로 이동하면 해당 dSYM 파일을 찾을 수 있습니다.
Xcode 컴파일 후 dSYM 파일이 생성되지 않습니까?¶
Xcode Release 컴파일은 기본적으로 dSYM 파일을 생성하지만, Debug 컴파일은 기본적으로 생성하지 않습니다. 해당 Xcode 설정은 다음과 같습니다:
Build Settings -> Code Generation -> Generate Debug Symbols -> Yes
Build Settings -> Build Option -> Debug Information Format -> DWARF with dSYM File
bitCode를 활성화한 경우 심볼 테이블을 어떻게 업로드하나요?¶
bitcode App을 App Store에 업로드할 때 제출 대화 상자에서 심볼 파일(dSYM 파일) 생성을 선언합니다:
- 심볼 테이블 파일을 구성하기 전에 App Store에서 해당 버전의 dSYM 파일을 로컬로 다운로드한 다음, 스크립트를 사용하여 입력 파라미터에 따라 심볼 테이블 파일을 처리 및 업로드해야 합니다.
- 스크립트를 Xcode 프로젝트의 Target에 통합할 필요가 없으며, 로컬에서 생성된 dSYM 파일을 사용하여 심볼 테이블 파일을 생성하지 마십시오. 로컬 컴파일로 생성된 dSYM 파일의 심볼 테이블 정보는 모두 숨겨져 있기 때문입니다. 로컬 컴파일로 생성된 dSYM 파일을 업로드하면 복원 결과가 "__hiden#XXX"와 같은 심볼이 됩니다.
App Store에 게시된 앱의 dSYM 파일을 찾는 방법은 무엇인가요?¶
| App Store Connect에 업로드된 애플리케이션의 Distribution options | dSym 파일 |
|---|---|
| Don’t include bitcode Upload symbols |
Xcode를 통해 찾기 |
| Include bitcode Upload symbols |
iTunes Connect를 통해 찾기 Xcode를 통해 찾기, .bcsymbolmap을 사용한 디오버스케이션(deobfuscation) 처리 필요 |
| Include bitcode Don’t upload symbols |
Xcode를 통해 찾기, .bcsymbolmap을 사용한 디오버스케이션 처리 필요 |
| Don’t include bitcode Don’t upload symbols |
Xcode를 통해 찾기 |
Xcode를 통해 찾기¶
-
Xcode -> Window -> Organizer -
Archives탭 선택 -
게시된 보관 패키지를 찾아 마우스 오른쪽 버튼으로 클릭하고
Show in Finder선택 -
찾은 보관 파일을 마우스 오른쪽 버튼으로 클릭하고
패키지 내용 보기선택 -
dSYMs디렉토리 선택, 디렉토리 내에 다운로드된 dSYM 파일이 있습니다.
iTunes Connect를 통해 찾기¶
- App Store Connect에 로그인합니다.
- "My Apps"로 이동합니다.
- "App Store" 또는 "TestFlight"에서 특정 버전을 선택하고 "빌드 메타데이터(Build Metadata)"를 클릭합니다. 이 페이지에서 "Download dSYM" 버튼을 클릭하여 dSYM 파일을 다운로드합니다.
.bcsymbolmap 디오버스케이션 처리¶
Xcode를 통해 dSYM 파일을 찾을 때 BCSymbolMaps 디렉토리를 볼 수 있습니다.
터미널을 열고 다음 명령을 사용하여 디오버스케이션 처리를 수행합니다.
xcrun dsymutil -symbol-map <BCSymbolMaps_path> <.dSYM_path>
충돌 필드를 방지하기 위한 전역 변수 추가¶
사용자 정의 필드와 SDK 데이터 간의 충돌을 방지하려면, 태그 이름에 프로젝트 약어 접두사를 추가하는 것이 좋습니다. 예: custom_tag_name. 프로젝트에서 사용하는 key 값은 소스 코드에서 확인할 수 있습니다. SDK 전역 변수에 RUM, Log와 동일한 변수가 있는 경우, RUM, Log가 SDK의 전역 변수를 덮어씁니다.
GXP_1_XGXP_2_XGXP_3_XGXP_4_XGXP_5_XGXP_6_XGXP_7_XGXP_8_XGXP_9_XGXP_10_XGXP_11_XGXP_12_XGXP_13_XGXP_14_XGXP_15_XGXP_16_XGXP_17_XGXP_18_XGXP_19_XGXP_20_XGXP_21_XGXP_22_XGXP_23_XGXP_24_XGXP_25_XGXP_26_XGXP_27_XGXP_28_XGXP_29_XGXP_30_XGXP_31_XGXP_32_XGXP_33_XGXP_34_XGXP_35_XGXP_36_XGXP_37_XGXP_38_XGXP_39_XGXP_40_XGXP_41_XGXP_42_XGXP_43_XGXP_44_XGXP_45_XGXP_46_XGXP_47_XGXP_48_X






