Programing

Swift : API 키를 구현하기 위해 PREPROCESSOR 플래그 (`#if DEBUG`와 같은)를 사용하는 방법은 무엇입니까?

lottogame 2020. 11. 16. 07:46
반응형

Swift : API 키를 구현하기 위해 PREPROCESSOR 플래그 (`#if DEBUG`와 같은)를 사용하는 방법은 무엇입니까?


에서 Objective-C가 (MixPanel, 질풍 또는 Crashlytics 같은 분석 패키지 RELEASE 및 DEBUG 키를 구분하기 위해, 예를 들어) 다른 API 키를 정의하는 정적 문자열 상수를 사용하는 것이 유용했다 :

#if DEBUG
static NSString *const API_KEY = @"KEY_A";
#else
static NSString *const API_KEY = @"KEY_B";
#endif

그리고...

[Analytics startSession:API_KEY];

Swift 컴파일러가 더 이상 전처리기를 사용하지 않기 때문에 이것이 Swift로 어떻게 변환됩니까?


Apple은 Xcode 8 부터 Swift 전 처리기 플래그를 완벽하게 지원 하므로 더 이상 "Other Swift Flags"에서 이러한 값을 설정할 필요가 없습니다.

새로운 설정은 "Active Compilation Conditions"라고 불리며, 전 처리기 플래그에 해당하는 Swift에 대한 최상위 지원을 제공합니다. 값 앞에 "-D"를 붙일 필요가 없다는 점을 제외하고는 "Other Swift Flags"와 똑같은 방식으로 사용합니다 (조금 더 깔끔함).

로부터 엑스 코드 8 릴리스 노트 :

Active Compilation Conditions조건부 컴파일 플래그를 Swift 컴파일러에 전달하기위한 새로운 빌드 설정입니다. 이 설정 값의 각 요소 는 동일한 접두사를 가진 clang -Preprocessor Macros전달 되는 요소와 동일한 방식 으로 D가 접두사로 붙은 swiftc 전달됩니다. (22457329)

여기에 이미지 설명 입력

위의 설정을 다음과 같이 사용합니다.

#if DEBUG
    let accessToken = "DebugAccessToken"
#else
    let accessToken = "ProductionAccessToken"
#endif

업데이트 : Xcode 8은 이제이를 자동으로 지원합니다. 위의 @DanLoewenherz의 응답을 참조하십시오.

Xcode 8 이전에는 동일한 방식으로 매크로를 사용할 수있었습니다.

#if DEBUG
let apiKey = "KEY_A"
#else
let apiKey = "KEY_B"
#endif

그러나 Swift가 그것들을 선택하기 위해서는 타겟의 Build Settings에서 "Other Swift Flags"를 설정해야합니다 :

  • 대상에 대한 빌드 설정 열기
  • "other swift flags"검색
  • -D플래그 앞에 사용하려는 매크로를 추가하십시오.

여기에 이미지 설명 입력


후속 관찰로 api 키 / 비밀을 저장소에 일반 텍스트로 보관하지 마십시오. 비밀 관리 시스템을 사용하여 사용자의 환경 변수에 키 / 비밀을로드합니다. 그렇지 않으면 허용되는 경우 1 단계가 필요합니다.

  1. 둘러싸는 저장소 위의 일반 텍스트 파일에 "비밀"을 넣으십시오.
  2. (평가를 방지하려면 작은 따옴표 사용) ../set_keys.sh목록을 포함하는 만들기export API_KEY_A='<plaintext_key_aef94c5l6>'
  3. source ../set_keys.sh실행 순서의 맨 위로 이동할 수있는 실행 스크립트 단계를 추가합니다.
  4. 빌드 설정> 전 처리기 매크로에서 필요에 따라 다음과 같은 정의를 추가합니다. API_KEY_A="$API_KEY_A"

그러면 나중에 각 소스 파일에 대한 각 clang 호출에서 사용되는 컴파일러 정의에 환경 변수를 캡처합니다.

디렉토리 구조의 예

[10:33:15] ~/code/memo yes? tree -L 2 .
.
├── Memo
│   ├── Memo
│   ├── Memo.xcodeproj
│   ├── Memo.xcworkspace
│   ├── Podfile
│   ├── Podfile.lock
│   └── Pods
└── keys

참고 URL : https://stackoverflow.com/questions/38813906/swift-how-to-use-preprocessor-flags-like-if-debug-to-implement-api-keys

반응형