티스토리 뷰
내용
- 서버 API 를 개발하며 동시에 데이터 손상에 대해 안전하기 위해서 테스트 서버와 릴리즈 서버의 차이를 두기로 하였습니다.
- 개발용, 베타, 릴리즈에 따라 Build 환경을 구축하여 하드 코딩하지 않도록 해보겠습니다.
- 보안상 중요한 key 를 노출시키지 않도록 하겠습니다.
1️⃣ Configuration Setting File 생성 후 설정
- Configuration 을 duplicate 하여 필요한 환경을 만든다.
- xcconfig 파일 생성
- 반드시 targets 를 설정해주어야 한다.
❓.xcconfig 파일이란?
- .xcconfig 파일에 key-value 로 작성을 하면된다.
이때, 진행한 프로젝트는 CocoaPods 을 위한 xcconfig 파일이 있기 때문에 import 하여 사용해야 한다.
// ✅ 공통으로 쓰이는 것들은 각 파일에 따로 include 해주었습니다.
// Shared.xcconfig
KAKAO_NATIVE_APP_KEY = ...
// ✅ 빌드 스키마에 따른 configuration file 을 작성하였습니다.
// Beta.xcconfig
#include "Shared.xcconfig"
#include "Pods/Target Support Files/Pods-(프로젝트 이름)/Pods-(프로젝트 이름).beta.xcconfig"
BASE_URL = (배타 테스트용 URL)
// Debug.xcconfig
#include "Shared.xcconfig"
#include "Pods/Target Support Files/Pods-(프로젝트 이름)/Pods-(프로젝트 이름).debug.xcconfig"
BASE_URL = (개발용 URL)
// Release.xcconfig
#include "Shared.xcconfig"
#include "Pods/Target Support Files/Pods-(프로젝트 이름)/Pods-(프로젝트 이름).release.xcconfig"
BASE_URL = (릴리즈용 URL)
- configurations 에 .xcconfig 파일 매칭
configuration file - Configurations(Debug, Beta, Release) - Build Scheme 로 이어진다.
❓ 방법은 이것뿐인가요? 왜 선택했나요?
info.plist 에서 User-Defined Setting
으로 만든 User-Defined 환경변수를 Swift 파일에 가져와서 동작시키는 방법도 있습니다.
해당 방법은 아래의 블로그를 참고하실 수 있습니다.
[[iOS - swift] iOS 프로젝트 배포 환경별 build 세팅(info.plist 방법, 단일 타겟), debug / alpha / beta / release](https://ios-development.tistory.com/278)
하지만, key-value 들을 따로 모아서 .gitignore 를 통해 무시하게 할 예정이고, 개발자들이 이 파일을 로컬에 가지고 있기로 하였습니다.
그런데 코드가 섞여 있어 추후에 유지보수를 통해 비지니스 로직을 수정하게 되는 swift 파일보다는 key 만 들어있는 configuration file 이 관리에 용이하다고 판단하여 이와 같이 진행하였습니다.
2️⃣ Scheme 설정
빌드 상황에 따른 Configurations 를 만들어보았는데요. 이제는 빌드 스키마를 만들어서 Configurations 를 매칭해보도록 하겠습니다.
- build scheme 생성
- build scheme 에 따른 configuration 설정
release 용 빌드의 경우는
- Run, Test, Analyze 는 Debug
- Profile, Archive 는 Release
beta 테스트 용 빌드 스키마의 경우는 테스트 플라이트로 팀 내에서 진행할 목적이라서
- Profile, Archive 를 Beta 로 Configurations 을 설정했습니다.
이를 통해 베타 테스트에서는 테스트 서버 URL 을 사용하여 테스트 플라이트를 만들도록 하였습니다.
혹여나 Unable to load contents of file list: ~~~ input/output xcfilelist
관련 에러를 만난다면 아래의 방법대로 pod 을 업데이트 후 클린 빌드해보시길 바랍니다.
3️⃣ 사용
- info.plist 에 환경변수를 $()로 만들어준다.
let baseURL = Bundle.main.object(forInfoDictionaryKey: "BaseURL") as? String ?? ""
let kakaoNativeAppKey = Bundle.main.object(forInfoDictionaryKey: "KakaoNativeAppKey") as? String ?? ""
❗️ 주의해야 할 점
.xcconfig 파일에서 // 는 주석처리를 해주기 때문에 사이에 비어있는 환경변수를 넣어서 처리해주었다.
❗️Build Scheme 별로 빌드 번호 관리
beta 테스트를 위해서 빌드버전을 따로 관리할 수도 있었다.
출처
[iOS - swift] iOS 프로젝트 배포 환경별 build 세팅, Build Scheme 세팅 (단일타겟, xcconfig)
[iOS - swift] iOS 프로젝트 배포 환경별 build 세팅(info.plist 방법, 단일 타겟), debug / alpha / beta / release
'iOS' 카테고리의 다른 글
iOS) thread-safe 와 atomic (0) | 2022.10.15 |
---|---|
iOS) 앱 자동 배포를 위한 Fastlane 설정 - cert and sigh (7) | 2022.10.10 |
iOS) main.sync 를 사용하면 왜 안될까요? (0) | 2022.10.03 |
iOS) lazy, type property 는 언제 초기화될까? (0) | 2022.09.27 |
iOS) mutating 키워드는 무엇일까? (0) | 2022.09.26 |
- CloneCoding
- rxswift
- Algorithm
- MVVM
- projectsetting
- OpenSourceLibrary
- RxCocoa
- Swift
- 서버통신
- Notification
- YPImagePicker
- WidgetKit
- Protocol
- Widget
- APNS
- WWDC22
- SwiftUI
- Objective-C
- WWDC
- MOYA
- containerBackground
- github
- watchOS
- urlsession
- IOS
- configurable widget
- UserDefaults
- Firebase
- 2022 KAKAO TECH INTERNSHIP
- async/await
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Total
- Today
- Yesterday