2012-09-17 5 views
6

다른 언어로만 정보를 찾을 수 있습니다. 그래서 나는 단지 여러 코드를 변경하는 대신 오프에 해당을 변경하거나 할 필요가Xcode - 조건부 개발 또는 생산 모드

if (DEV_MODE){ 
    //do something 
}else{ 
    //do the real stuff 
} 

그리고 일부 글로벌 파일 또는 해제 DEV_MODE 설정 : I는 다음과 같은 조건 문에서도 작성을위한 가장 좋은 방법을 알고 싶습니다 장소. 몇 가지 아이디어가 있지만 최선의 방법에 대한 조언을 찾고 있습니다.

+0

컴파일 타임에'DEV_MODE'를 결정 하시겠습니까? 아니면 다시 컴파일하지 않고 런타임에'DEV_MODE'를 바꿀 수 있기를 원합니까? –

답변

14

이 시도 :

#ifdef DEBUG 
    // do stuff 
#endif 

현재 Xcode의 버전은 자동으로 새 프로젝트에이 매크로를 설정합니다. 프로젝트 설정으로 이동하여 설정을 확인하십시오. 거기 아니라면 당신은 스스로를 추가 할 수 있습니다

enter image description here

+0

예, 설정에 반영되어 있습니다. 그래서 아무것도 바꿀 필요가 없습니다. AppStore 스키마를 사용하면 DEBUG가 자동으로 0으로 간주됩니다. – soleil

0

프로젝트 설정에는 "프리 프로세서 매크로"라는 섹션이 있습니다. 이 섹션에서 "DEV_MODE"또는 원하는대로 디버그 빌드 문자열을 추가 할 수 있습니다. 그런 다음 위에 나열된 조건을 수행 할 수 있으며 앱에 '출시'또는 매크로가 포함되지 않은 다른 설정이 빌드되면 수표가 실패합니다. 빌드 구성 변수 (예를 들어 DEV_MODE)를 정의하고, 다음과 같은 전처리 검사를 사용

1

처리기 변수는 당신이 원하는 무엇인가 :

#if DEV_MODE 
    //dev mode code 
#else 
    //non-dev mode code 
#endif 
+0

'DEBUG'을 사용하는 것이 더 좋으며, 기본적으로 Xcode에 의해 정의되거나 정의되지 않았습니다 (물론 다른 IDE/명령 행 툴체인을 사용하는 경우는 아닙니다). –

8

(.이 질문은 에 엑스 코드 관련이 없습니다), 대신 C 스타일의 IF를 사용하여 코드를 오염 말했다

, 사전 처리기 지시문을 사용하여 디버그 및 릴리스 모드를 필터링 할 수 있습니다. 내가 아는 한, 테스트 모드에서는 DEBUG 매크로를 1로 정의하고, 릴리스 모드에서는 매크로를 정의하지 않는 것이 일반적입니다. (또한 Xcode가 이것을 정의 할 수 있습니다.이 동작은 신뢰할 수있는 것으로 나타났습니다.) 이유는 선행 처리기의 사용이 들여 쓰기가 쉽기 때문에 더 읽기 쉽기 때문입니다. 코드를 시각적으로 표시합니다. 전 처리기 매크로

#ifdef DEBUG 
    // do debug stuff here 
#else 
    // do release stuff here 
#endif 

한 추가 인수를 시도 정리해하면, 글로벌 네임 스페이스를 조건화 할 수있는 당신이 할 수없는 C 코드 내. I. 전처리 기 매크로를 쓸 수 있습니다.

#ifdef DEBUG 
    int functionOne() 
    { 
    } 
#else 
    char *functionTwo(int a) 
    { 
    } 
#endif 

전 처리기 없이는이 작업을 수행 할 수 없습니다.

+0

설명해 주셔서 감사합니다. – soleil

관련 문제