| Service | Cocoapods Pod Name | Framework | Dependency | Build Settings |
|---|---|---|---|---|
| Log & Crash | NHNCloudLogger | NHNCloudLogger.framework | [External & Optional] * CrashReporter.framework (NHNCloud) |
|
| Mandatory | NHNCloudCore NHNCloudCommon |
NHNCloudCore.framework NHNCloudCommon.framework |
OTHER_LDFLAGS = ( "-ObjC", "-lc++" ); |
platform :ios, '11.0'
use_frameworks!
target '{YOUR PROJECT TARGET NAME}' do
pod 'NHNCloudLogger'
end




알아두기
Log & Crash Search Symbol API가 v3로 전환되었습니다. v3부터는 앱키 외에 User Access Token 인증이 필요합니다.
v3 API 호출에는 NHN Cloud User Access Token이 필요하며, 다음 두 가지 방법 중 하나로 제공합니다.
방법 1. User Access Key ID / Secret Access Key로 전달(권장)
--user-access-key-id(-uak), --secret-access-key(-sak)방법 2. User Access Token을 직접 전달
--user-access-token(-uat)주의
방법 1(-uak/-sak)과 방법 2(-uat)는 동시에 사용할 수 없습니다. 둘 중 하나만 전달하세요.
인증 정보를 전달하지 않으면 업로드가 진행되지 않습니다.
방법 1(User Access Key)
if [ "${CONFIGURATION}" = "Debug" ]; then
${PODS_ROOT}/NHNCloudSymbolUploader/nhncloud.ios.sdk-*/run \
--app-key LOG_N_CRASH_SEARCH_APPKEY \
--user-access-key-id USER_ACCESS_KEY_ID \
--secret-access-key SECRET_ACCESS_KEY
fi
방법 2(User Access Token)
if [ "${CONFIGURATION}" = "Debug" ]; then
${PODS_ROOT}/NHNCloudSymbolUploader/nhncloud.ios.sdk-*/run \
--app-key LOG_N_CRASH_SEARCH_APPKEY \
--user-access-token USER_ACCESS_TOKEN
fi
LOG_N_CRASH_SEARCH_APPKEY에는 Log & Crash Search의 앱 키를 입력해야 합니다.인증 정보는 위 두 방법 중 사용하는 쪽의 정보를 입력해야 합니다.
USER_ACCESS_KEY_ID, SECRET_ACCESS_KEYUSER_ACCESS_TOKENRun Script 섹션 하단의 Input Files에 dSYM의 기본 경로를 설정합니다.
${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}
USAGE: symbol-uploader -ak <ak> -pv <pv> [-sz <sz>] [-uak <uak>] [-sak <sak>] [-uat <uat>] <path> [--verbose]
ARGUMENTS:
<path> dSYM file path is must be entered.
OPTIONS:
-ak, --app-key <ak> [Log&Crash Search]'s AppKey must be entered.
-pv, --project-version <pv>
Project version must be entered.
-sz, --service-zone <sz>
You can choose between real, alpha, beta. (default: real)
-uak, --user-access-key-id <uak>
User Access Key ID (use with -sak to issue a token).
-sak, --secret-access-key <sak>
Secret Access Key (use with -uak to issue a token).
-uat, --user-access-token <uat>
User Access Token (Bearer) to use directly.
--verbose Show more debugging information
-h, --help Show help information.
방법 1(User Access Key)
./SymbolUploader \
--app-key {APP_KEY} \
--project-version {CFBundleShortVersionString || MARKETING_VERSION} \
--user-access-key-id {USER_ACCESS_KEY_ID} \
--secret-access-key {SECRET_ACCESS_KEY} \
{symbol path(~/Project.dSYM)}
방법 2(User Access Token)
./SymbolUploader \
--app-key {APP_KEY} \
--project-version {CFBundleShortVersionString || MARKETING_VERSION} \
--user-access-token {USER_ACCESS_TOKEN} \
{symbol path(~/Project.dSYM)}
알아두기
동일한 버전에 같은 파일명의 Symbol이 이미 업로드되어 있는 경우 서버는 업로드를 거부합니다. (resultMessage: "A file with the same filename for this version has already been uploaded.") SymbolUploader는 이 경우 업로드되어 있는 동일 파일명의 Symbol을 제거하고 다시 업로드합니다. 두 Symbol 파일의 파일명이 다를 경우 업로드되어 있는 Symbol은 제거되지 않으므로, Log & Crash Search 콘솔에서 직접 제거해야 합니다. https://console.nhncloud.com/ > 조직 선택 -> 프로젝트 선택 > Analytics > Log & Crash Search > 설정 > 심벌 파일
// 초기화
+ (void)initWithConfiguration:(NHNCloudLoggerConfiguration *)configuration;
NHNCloudLoggerConfiguration *configuration = [NHNCloudLoggerConfiguration configurationWithAppKey:@"YOUR_APP_KEY"];
[NHNCloudLogger initWithConfiguration:configuration];
// DEBUG Level log
+ (void)debug:(NSString *)message;
// INFO Level log
+ (void)info:(NSString *)message;
// WARN Level log
+ (void)warn:(NSString *)message;
// ERROR Level log
+ (void)error:(NSString *)message;
// FATAL Level log
+ (void)fatal:(NSString *)message;
[NHNCloudLogger info:@"NHN Cloud Log & Crash Search!"];
// 사용자 정의 필드 추가
+ (void)setUserFieldWithValue:(NSString *)value forKey:(NSString *)key;
// 사용자 정의 필드 추가
[NHNCloudLogger setUserFieldWithValue:@"USER_VALUE" forKey:@"USER_KEY"];
사용자 아이디가 설정되어 있으면 Log & Crash Search 콘솔의
크래시 사용자항목에서 사용자별 크래시 경험을 확인할 수 있습니다. 사용자 아이디 설정은 시작하기에서 확인 가능합니다.
// CrashReporter 활성화
NHNCloudLoggerConfiguration *configuration = [NHNCloudLoggerConfiguration configurationWithAppKey:@"YOUR_APP_KEY" enableCrashReporter:YES];
[NHNCloudLogger initWithConfiguration:configuration];
// CrashReporter 비활성화
NHNCloudLoggerConfiguration *configuration = [NHNCloudLoggerConfiguration configurationWithAppKey:@"YOUR_APP_KEY" enableCrashReporter:NO];
[NHNCloudLogger initWithConfiguration:configuration];
+ (void)setShouldReportCrashHandler:(void (^)(void))handler;
[NHNCloudLogger setShouldReportCrashHandler:^{
// 사용자 정의 필드 를 통해 Crash가 발생한 상황에서 얻고자 하는 정보를 함께 전송
// 사용자 정의 필드 추가
[NHNCloudLogger setUserFieldWithValue:@"USER_VALUE" forKey:@"USER_KEY"];
}];
+ (void)setDelegate:(id<NHNCloudLoggerDelegate>) delegate;
@protocol NHNCloudLoggerDelegate <NSObject>
@optional
// 로그 전송 성공
- (void)nhnCloudLogDidSuccess:(NHNCloudLog *)log;
// 로그 전송 실패
- (void)nhnCloudLogDidFail:(NHNCloudLog *)log error:(NSError *)error;
// 네트워크 단절 등의 이유로 로그 전송에 실패한 경우 재전송을 위해 SDK 내부 저장
- (void)nhnCloudLogDidSave:(NHNCloudLog *)log;
// 로그 필터링
- (void)nhnCloudLogDidFilter:(NHNCloudLog *)log logFilter:(NHNCloudLogFilter *)logFilter;
@end
#import <NHNCloudLogger/NHNCloudLogger.h>
@interface AppDelegate () <UIApplicationDelegate, NHNCloudLoggerLoggerDelegate>
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// ...
// 초기화
NHNCloudLoggerConfiguration *configuration = [NHNCloudLoggerConfiguration configurationWithAppKey:@"YOUR_APP_KEY" enableCrashReporter:YES];
[NHNCloudLogger initWithConfiguration:configuration];
// Delegate 설정
[[NHNCloudLogger setDelegate:self];
return YES;
}
#pragma mark - NHNCloudLoggerDelegate
// 로그 전송 성공
- (void)nhnCloudLogDidSuccess:(NHNCloudLog *)log {
// ...
}
// 로그 전송 실패
- (void)nhnCloudLogDidFail:(NHNCloudLog *)log error:(NSError *)error {
// ...
}
// 네트워크 단절 등의 이유로 로그 전송에 실패한 경우 재전송을 위해 SDK 내부 저장
- (void)nhnCloudLogDidSave:(NHNCloudLog *)log {
// ...
}
// 로그 필터링
- (void)nhnCloudLogDidFilter:(NHNCloudLog *)log logFilter:(NHNCloudLogFilter *)logFilter {
// ...
}
@end
콘솔을 통해 Network Insights 기능을 활성화하면 NHN Cloud Logger를 초기화할 때, 콘솔에 등록한 URL로 1회 요청합니다.
typedef NS_ENUM(NSInteger, NHNCloudEnvironment) {
NHNCloudEnvironmentPublic = 0,
NHNCloudEnvironmentGovernment = 1,
};
@property (nonatomic) NHNCloudEnvironment cloudEnvironment;
* 설정하지 않을 경우 기본값은 NHNCloudEnvironmentPublic입니다.
NHNCloudLoggerConfiguration *configuration = [NHNCloudLoggerConfiguration configurationWithAppKey:@"YOUR_APP_KEY"];
[configuration setCloudEnvironment:NHNCloudEnvironmentGovernment];
[NHNCloudLogger initWithConfiguration:configuration];