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 단계가 필요합니다.
- 둘러싸는 저장소 위의 일반 텍스트 파일에 "비밀"을 넣으십시오.
- (평가를 방지하려면 작은 따옴표 사용)
../set_keys.sh
목록을 포함하는 만들기export API_KEY_A='<plaintext_key_aef94c5l6>'
source ../set_keys.sh
실행 순서의 맨 위로 이동할 수있는 실행 스크립트 단계를 추가합니다.- 빌드 설정> 전 처리기 매크로에서 필요에 따라 다음과 같은 정의를 추가합니다.
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
'Programing' 카테고리의 다른 글
문자열에서 마지막 특정 문자 제거 C # (0) | 2020.11.16 |
---|---|
Objective-C에서 ID가 주어지면 어떤 유형의 객체를 가리키는 지 어떻게 알 수 있습니까? (0) | 2020.11.16 |
webpack TS2304 'Map', 'Set', 'Promise'이름을 찾을 수 없습니다. (0) | 2020.11.16 |
SQL 덤프에서 데이터베이스를 복원하는 동안 바이너리 모드 활성화 (0) | 2020.11.16 |
SQL에서 테이블 크기를 찾는 방법은 무엇입니까? (0) | 2020.11.16 |