๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŽ iOS

[Xcode/Swift] User-Defined Build Settings

by ํ‹ด๋”” 2023. 4. 26.
728x90
๋ฐ˜์‘ํ˜•
  • Build Settings์—์„œ Configuration ๋ณ„๋กœ ๊ฐ’์„ ์ง€์ •ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
  • Configuration์ด ๊ฐ๊ฐ ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ 
    • ex) host url

1. Build Settings ์—์„œ Add User-Defined Setting ์„ ๋ˆŒ๋Ÿฌ ์‚ฌ์šฉ์ž ์ •์˜ ์„ธํŒ…์„ ์ถ”๊ฐ€

 

2. ์‚ฌ์šฉํ•  ํƒ€์ดํ‹€์„ ์ž…๋ ฅํ•ด ์ฃผ๋ฉด Configuration ๋ณ„๋กœ ๊ฐ’์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Œ

 

3. Info.plist์—์„œ BASE_URL๋กœ ์ ‘๊ทผ์‹œ Build settings ์—์„œ ์ •์˜ํ•ด ์ค€ BASE_URL ๊ฐ’์„ ์“ธ ์ˆ˜ ์žˆ๋„๋ก $(BASE_URL) ๋กœ ์„ค์ • ํ•ด ์คŒ

Info.plist๋ž€ key/value ์Œ์œผ๋กœ ๋นŒ๋“œ ํƒ€์ž„ ๋™์•ˆ ์—…๋ฐ์ดํŠธ ๋˜๋Š” ๊ฐ’. xCode๋Š” ๋นŒ๋“œ ๋˜๋Š” ๋™์•ˆ Build setting์„ ์‚ดํŽด๋ณด๊ฒŒ ๋˜๋Š”๋ฐ ํ˜„์žฌ ๋นŒ๋“œ๋˜๊ณ  ์žˆ๋Š” configuration๊ณผ ํ”„๋กœ์ ํŠธ์˜ Info.plist ์— ์žˆ๋Š” ๊ฐ’์ด ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€ ํ™•์ธํ•จ. (target ๋ณ„๋กœ ๋‹ค๋ฅธ info.plist๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋‹ˆ ๋นŒ๋“œ์‹œ ์ฃผ์˜ํ•ด์•ผ ํ•จ)

 

4. Info.plist์—์„œ ์ •์˜ ํ•ด์ค€ ๊ฐ’์€ Bundle ์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅ

let baseUrl = Bundle.main.infoDictionary?["BASE_URL"]

infoDictionary์—์„œ key๋ฅผ ๊ฐ€์ง€๊ณ  ํ•ด๋‹น ๊ฐ’์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•จ

 

5. Configuration์˜ ๊ฐ’์„ ์–ป๊ณ  ์‹ถ๋‹ค๋ฉด $(CONFIGURATION) ์œผ๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ

6. ์ฝ”๋“œ ๋‚ด๋ถ€์—์„œ Bundle ์ด ์•„๋‹Œ ๋‚ด๋ถ€ enum์„ ์ถ”๊ฐ€ํ•ด์„œ ๊ฐ„๊ฒฐํ•˜๊ณ  ์ฝ”๋“œ ์˜ค๋ฅ˜ ์—๋Ÿฌ ์—†์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•จ

import Foundation

enum Configuration: String {
    case debug
    case release
    case qa
    
    static let current: Configuration = {
        guard let rawValue = Bundle.main.infoDictionary?["Configuration"] as? String else {
            fatalError("No Configuration Found")
        }
        
        guard let configuration = Configuration(rawValue: rawValue.lowercased()) else {
            fatalError("Invalid Configuration")
        }
        
        return configuration // ๋ฆฌํ„ด๋˜๋Š” ๊ฑด Configuration ํƒ€์ž…
    }()
    
    static var baseURL: URL {
        switch current {
        case .debug:
            return URL(string: "http://debug.com")!
        case .release:
            return URL(string: "http://staging.com")!
        case .qa:
            return URL(string: "http://qa.com")!
        }
    }
}

Photo by Karolina Grabowska from Pexels: https://www.pexels.com/photo/table-setting-for-christmas-dinner-5473345/

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€