SDK 사용할 때 Key 값들을 아무생각 없이
static let debugKey = 1
static let releaseKey = 2
이렇게 작성했다가 뒤늦게 아차 싶었다.
그래서 디버그와 릴리즈 빌드시 사용하는 값들을 분리하여 읽어 올 수 있는 방법에 대해 찾아보았는데,
info.plist에 변수를 작성하여 구분 하는 방법과 클래스를 작성하여 구분하는 방법이 있는 것 같았다.
그러나 결국 info.plist를 사용하더라도 파일을 생성하고 값을 불러오는 코드를 작성해야 해서 클래스를 만들어 사용해보기로 했다!
protocol APIKey {
var aKey: String { get }
var bKey: String { get }
}
디버그와 릴리즈용 클래스 모두 동일한 프로퍼티를 갖도록 프로토콜로 선언해준 뒤
class DebugKey: APIKey {
var aKey = "a1"
var bKey = "b1"
}
class ReleaseKey: APIKey {
var aKey = "a2"
var bKey = "b2"
}
디버그에 사용할 키를 갖는 클래스와 릴리즈에 사용할 키를 갖는 클래스를 각각 만들어주고
APIKey 프로토콜을 채택하도록 한다. 그러면 동일한 프로퍼티를 가지면서 각 클래스 용도에 맞는 값을 대입시켜줄 수 있다.
만약, aKey의 값이 두 클래스 모두 공통으로 사용할 수 있는 값이라면 APIKey를 extension 하여 공통으로 사용할 수 있게 할 수 있다.
extension APIKey {
var aKey = "ab3"
}
이렇게 해두면 각 클래스에 aKey을 사용하지 않아도 에러는 뜨지 않고 값을 사용할 수 있게 된다.
이제 이렇게 만들어진 DebugKey, ReleaseKey 클래스를 관리하고 모드에 따라 사용하는 클래스를 다르게 하도록 설정해줄 공통 모듈을 하나 만들어준다.
class SDKInit {
static let shared: APIKey = {
#if DEBUG
return DebugKey()
#else
return ReleaseKey()
#endif
}()
}
이렇게 만들어 볼 수 있겠다.
SDKInit 클래스를 초기화하여 각 모드별 클래스를 가져오는 건 각자 취향에 맞게 작성하면 될 듯 하다.
사용은
// 디버그 모드일 때
SDKInit.shared.bKey // b1
// 릴리즈 모드일 때
SDKInit.shared.bKey // b2
참고
https://umaking.tistory.com/108
https://ios-daniel-yang.tistory.com/55#article-4--%EC%82%AC%EC%9A%A9
댓글