본문 바로가기
iOS/swift

디버그, 릴리즈 용 사용 값 구분하기

by 패쓰킴 2024. 7. 8.
728x90

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

728x90

'iOS > swift ' 카테고리의 다른 글

숫자 다루기  (1) 2023.11.07
attributedString  (0) 2022.12.26
Array  (0) 2022.12.21
String  (0) 2022.09.22
진법 변환  (0) 2022.08.31

댓글