Programming

Custom version check

 2017. 3. 8. 18:26
반응형

Objective-C에서 버전 체크 해주기.

앱이나 연동되는 기기 버전에 따라 다른 흐름으로 코드를 처리해주고 싶은데, 모든 클래스 마다 변수를 불러와서 사용하려니 매우 귀찮다.

안드로이드에서 SDK 버전 체크해서 어떤 버전 보다 높을 때 해당 함수를 실행해주는 코드를 만들어야 겠다...


간단하게 헤더 파일에만 정의해두면 글로벌 변수로 사용할 수 있는 코드가 있다.


1
2
extern int PROTOCOL_VERSION;
 
cs


헤더 파일 (.h file) 에 위와 같이 선언해두면 

별탈 없이 다른 클래스에서도 가져오고, 정의할 수 있다.


1
2
3
4
5
6
7
8
9
10
11
12
13
#import "headerFileName.h"
 
PROTOCOL_VERSION = 100// 최초로 버전을 불러올 때 정의해주기.
 
if(PROTOCOL_VERSION >= 234){
 
// 상위 버전인 경우    
 
}else{
 
// 하위 버전인 경우
 
}
cs


헤더 파일 import 하고, 위와 같이 버전 체크를 해주면 된다.

그런데 고정 값으로 되어 있지 않아서 잘못된 값으로 정의되는 것을 조심해야 한다.


1
2
3
 
int PROTOCOL_VERSION = 100// 최초로 버전을 불러올 때 정의해주기.
 
cs


위쪽에는 int 선언하는게 빠졌는데, 저렇게 할 경우 Linker 에러가 뜬다.

다시 한번 선언해줘야하는 것을 잊지 말자.


더 좋은 방법은 없을까?


---


저렇게 했을 때 헤더 끼리 참조하게 되면서인지 링커 에러가 다시 뜨게 되었다.

이런 방식이 아니라 단순하게 singleton 클래스를 하나 만들어서 값을 보관하고 있는 것이 좋겠다는 생각이 들었다.

classname.sharedInstance.version 와 같이 호출해서 사용할 수 있으니 정말 간편하다.


---


Swift 에서는 Singleton 클래스를 아주 쉽게 만들 수 있다!


1
2
3
4
5
6
7
8
9
10
11
12
13
14
final class Singleton {
 
    // Can't init is singleton
    private init() { }
 
    //MARK: Shared Instance
 
    static let sharedInstance: Singleton = Singleton()
 
    //MARK: Local Variable
 
    var emptyStringArray : [String] = []
 
}
cs


http://stackoverflow.com/a/39860897/4486389


복잡하던 코드가 몇 줄 이면 끝난다.

let 으로 선언된 class 는 자체적으로 겹치지 않게 해준다.


자주사용하게 될 것 같다. :)

반응형