민감한 신용 카드 데이터를 처리하는 앱을 만들고 있습니다.
내 코드가 디버그 모드에서 실행중인 경우이 데이터를 콘솔에 기록하고 파일 덤프를 만들고 싶습니다.
그러나 최종 앱 스토어 버전 (즉, 릴리스 모드에서 실행중인 경우)에서는이 기능을 모두 비활성화해야합니다 (보안 위험)!
나는 최선을 다해 나의 질문에 대답하려고 노력할 것이다. 문제는 ‘이 솔루션 경로가 올바른 또는 최선의 방법입니까?’입니다.
// add `IS_DEBUG=1` to your debug build preprocessor settings
#if( IS_DEBUG )
#define MYLog(args...) NSLog(args)
#else
#define MYLog(args...)
#endif
답변
디버그를 위해 ‘Apple LLVM-전처리’, ‘전 처리기 매크로’에서 프로젝트의 빌드 설정을 확인하여 디버그 중인지 확인 DEBUG
하십시오. 프로젝트를 선택하고 빌드 설정 탭을 클릭하여이를 수행하십시오. 검색 DEBUG
실제로 있는지 살펴 DEBUG
세트되고있다.
그래도주의하십시오. DEBUG가 DEBUG_MODE와 같은 다른 변수 이름으로 변경된 것을 볼 수 있습니다.
그런 다음 소스 파일에서 조건부로 DEBUG를 코딩합니다.
#ifdef DEBUG
// Something to log your sensitive data here
#else
//
#endif
답변
Swift의 솔루션에 대해서는 SO 의이 스레드 를 참조하십시오 .
기본적으로 Swift 의 솔루션 은 다음과 같습니다.
#if DEBUG
println("I'm running in DEBUG mode")
#else
println("I'm running in a non-DEBUG mode")
#endif
또한 항목을 통해 키의 섹션 에서 DEBUG
기호 를 설정해야합니다 . 예제는 다음 스크린 샷을 참조하십시오.Swift Compiler - Custom Flags
Other Swift Flags
-D DEBUG
답변
Apple은 이미 DEBUG
디버그 빌드에 플래그를 포함하고 있으므로 자신 만의 플래그를 정의 할 필요가 없습니다.
모드에 NSLog
있지 않을 때 null 연산으로 재정의 하는 것을 고려할 수도 있습니다. 이렇게하면 DEBUG
코드가 더 이식성이 좋으며 일반 NSLog
명령문을 사용할 수 있습니다 .
//put this in prefix.pch
#ifndef DEBUG
#undef NSLog
#define NSLog(args, ...)
#endif
답변
대부분의 답변에 따르면 #ifdef DEBUG를 설정하는 방법은 없으며 디버그 / 릴리스 빌드를 결정하는 방법은 없습니다.
내 의견 :
답변
스위프트 및 Xcode 10+
#if DEBUG
모든 개발 / 애드혹 빌드, 장치 또는 시뮬레이터를 통과합니다. App Store 및 TestFlight 빌드의 경우에만 거짓입니다.
예:
#if DEBUG
print("Not App Store build")
#else
print("App Store build")
#endif
답변
zitao xiong의 대답은 내가 사용하는 것과 매우 가깝습니다. 또한 파일 이름을 포함시킵니다 ( FILE 의 경로를 제거하여 ).
#ifdef DEBUG
#define NSLogDebug(format, ...) \
NSLog(@"<%s:%d> %s, " format, \
strrchr("/" __FILE__, '/') + 1, __LINE__, __PRETTY_FUNCTION__, ## __VA_ARGS__)
#else
#define NSLogDebug(format, ...)
#endif
답변
xcode 7에는 Apple LLVM 7.0 아래에 ” 사전 처리 매크로가 사용되지 않는 사전 처리 매크로 … ” 라는 사전 처리 필드가 있습니까? DEBUG 를 디버그 앞에 넣고 아래 코드를 사용하여 작동합니다.
#ifdef DEBUG
NSString* const kURL = @"http://debug.com";
#else
NSString* const kURL = @"http://release.com";
#endif