개요
종종 서버에서 공개되면 안되는 키 값이나 서버 주소 등을 json 파일과 같은 key-value 관리에 용이한 파일로 만든 후 .gitignore 에 추가해서 git 에 올라가지 않게 한 후 관리합니다.
iOS 상에서도 API 키 값 등, 외부에 공개되면 안되는 값을 어떻게 관리할까 싶어 이런저런 글들을 많이 찾아봤는데,
plist 파일이 key-value 파일이기 때문에 관리하기 가장 적합하다고 판단했습니다.
방법
1. .gitignore 에 config.plist 추가
아래와 같이 추가해줍니다.
### .gitignore
...
# frontend config
config.plist
2. XCode 에서 plist 파일을 '파일 추가’로 만들기
File → New → File… 로 파일 추가를 연 후 아래로 스크롤을 내려보면 Resource 탭에 Property list 라고 있습니다.
이를 선택한 후 config.plist 로 이름을 지어줍니다.
파일을 만들고 나면 기본이 Dictionary 형태로 파일이 만들어집니다. key-value 구조가 필요한 것이므로 그대로 필요한 값들을 추가합니다.
3. plist 파일을 읽어들이는 함수 만들기
plist 를 읽는 함수를 구현합니다. 저희 Memolight 팀의 경우, Utils.swift 라는 파일을 만들어 그 안에 정의해넣었습니다. 코드는 갓택오버플로우를 참고해왔습니다. 사용법은 4번을 참고해주세요.
import Foundation
func getPlist(withName name: String) -> [String: String]?
{
if let path = Bundle.main.path(forResource: name, ofType: "plist"),
let xml = FileManager.default.contents(atPath: path)
{
return (try? PropertyListSerialization.propertyList(from: xml, options: .mutableContainersAndLeaves, format: nil)) as? [String: String]
}
return nil
}
4. 필요한 값을 불러와 사용하기
아래 코드와 주석을 확인해주시길 바랍니다.
// 이 코드는 Request.swift 코드의 일부를 가져온 것입니다.
// host 는 Request class 의 멤버 변수로 선언 돼있고, 아래 코드는 init() 안에 있는 코드입니다.
// config 라는 이름을 가진 plist 파일을 가져옵니다.
// optional 이기 때문에 if 로 검사해줍니다.
if let config = getPlist(withName: "config") {
// 키 값을 dictionary 조회하듯이 조회합니다.
// 마찬가지로 optional 이기 때문에 if 로 검사해줍니다.
if let SERVER_ADDR = config["SERVER_ADDR"] {
print(SERVER_ADDR)
self.host = SERVER_ADDR
}
// 조회에 실패한 경우입니다.
// 초기화는 해야하므로 앱이 크래시날만한 값을 넣습니다.
else {
self.host = ""
}
}
// 위와 마찬가지로 초기화는 해야하므로 앱리 크래시날만한 값을 넣습니다.
else {
self.host = ""
}
여담
iOS 로 팀워크를 하다보면 git 에서 수정하지 않았는데 자동으로 변경되는 파일들이 많아 충돌이 많이 일어납니다.
config.plist 를 .gitignore 에 추가하고, 그 외에 추가적으로 필요한 .gitignore 설정들은 다음 글에서 잘 설명한 것 같습니다.
http://codershigh.dscloud.biz:30004/t/git-ignore/138?u=s0metimes
혹시 다른 팀은 어떻게 하고 있는지 궁금하고, 이보다 나은 방법이 있는지 또한 궁금합니다.