Swift: '#if DEBUG'와 같은 PRECPURG 플래그를 사용하여 API 키를 구현하는 방법은 무엇입니까?
인Objective-C
정적 문자열 상수를 사용하여 대체 API 키를 정의하는 것이 종종 유용했습니다(예: MixPanel, Flurry 또는 Crashlytics와 같은 분석 패키지에 대한 RELEASE 키와 DEBUG 키를 구별하는 것).
#if DEBUG
static NSString *const API_KEY = @"KEY_A";
#else
static NSString *const API_KEY = @"KEY_B";
#endif
그리고 나서...
[Analytics startSession:API_KEY];
스위프트 컴파일러가 더 이상 프리프로세서를 사용하지 않기 때문에 이것이 스위프트로 어떻게 변환됩니까?
Apple은 Xcode 8에서 Swift 전처리기 플래그를 완전히 지원하므로 더 이상 "기타 Swift 플래그"에서 이 값을 설정할 필요가 없습니다.
새 설정은 "활성 컴파일 조건"이라고 하며, 이는 사전 프로세서 플래그에 해당하는 Swift에 대한 최상위 수준의 지원을 제공합니다.값 앞에 "-D"를 추가할 필요가 없다는 점을 제외하고는 "기타 스위프트 플래그"와 동일한 방식으로 사용합니다.
Active Compilation Conditions
는 조건부 컴파일 플래그를 Swift 컴파일러에 전달하기 위한 새로운 빌드 설정입니다.이 설정 값의 각 요소는 다음과 같이 접두사가 붙은 swiftc로 전달됩니다.-D
의 요소들과 같은 방식으로Preprocessor Macros
같은 접두사를 사용하여 clang에 전달합니다. (22457329)
위의 설정을 다음과 같이 사용합니다.
#if DEBUG
let accessToken = "DebugAccessToken"
#else
let accessToken = "ProductionAccessToken"
#endif
업데이트됨: Xcode 8은 이제 이를 자동으로 지원합니다. 위의 @dwlz의 응답을 참조하십시오.
Xcode 8 이전에도 매크로를 동일한 방식으로 사용할 수 있었습니다.
#if DEBUG
let apiKey = "KEY_A"
#else
let apiKey = "KEY_B"
#endif
그러나 Swift에서 이러한 플래그를 선택하려면 대상의 빌드 설정에서 "기타 Swift 플래그"를 설정해야 합니다.
- 대상에 대한 빌드 설정 열기
- "기타 빠른 플래그" 검색
- 사용할 매크로를 다음에 추가합니다.
-D
깃발
빠른 패키지에서 당신은 이것을 내부에서 해야 합니다.swiftSettings
에 대한 주장..target
당신의Package.swift
파일을 사용합니다.define
방법(Apple 설명서) 또는 Swift 설명서
targets: [
.target(name: String,
dependencies: [Target.Dependency],
path: String?,
exclude: [String]?,
sources: [String]?,,
cSettings: [CSetting]?,
cxxSettings: [CXXSetting]?,
swiftSettings: [SwiftSetting]?,
linkerSettings: [LinkerSetting]?),
내 것은 이렇게 생겼고 작동합니다!
swiftSettings: [
.define("VAPOR")
]
내 코드에서 나는 다음을 사용하여 조건부로 컴파일할 수 있습니다.
#if VAPOR
추가 관찰을 위해 저장소에 일반 텍스트로 된 api 키/비밀을 보관하지 마십시오.비밀 관리 시스템을 사용하여 키/비밀을 사용자의 환경 변수에 로드합니다.그렇지 않으면 1단계가 필요합니다(가능한 경우).
- "비밀"을 위의 일반 텍스트 파일에 동봉된 리포지토리에 넣습니다.
- 성을 합니다.
../set_keys.sh
에는 의목이포있다니의 있습니다.export API_KEY_A='<plaintext_key_aef94c5l6>'
하기 위해 한를 사용합니다. - 합니다.
source ../set_keys.sh
의 맨 합니다. - [ Settings ] > [ Macros ] 에서합니다.
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
'programing' 카테고리의 다른 글
에서 마크업을 주석 처리할 수 있는 방법이 있습니까?ASPX 페이지? (0) | 2023.05.16 |
---|---|
Python 3의 문자열 형식 (0) | 2023.05.16 |
ThreadPoolExecutor().map이 ThreadPoolExecutor().submit와 어떻게 다릅니까? (0) | 2023.05.16 |
WP7 응용 프로그램 모음 아이콘이 시뮬레이터에 표시되지 않음(단, 블렌드에서는 작동함) (0) | 2023.05.16 |
Git에서 손실된 커밋을 복구하려면 어떻게 해야 합니까? (0) | 2023.05.16 |