Often you want to use functionality from a new version of iOS, but you also need to support older versions
iOS 개발을 하다보면 API 들이 추가되고 새 SDK에서 개발하다 보면 최신 OS에서만 동작하는 메소드들을 호출하게 되는 경우가 종종 있다. 그런데 문제는 그렇게 그냥 배포까지 나가는 경우도 있다는 것. 그렇게 되면 하위 버전의 OS를 사용하는 사람들은 앱이 죽는다고 불평을 하곤 한다. 그렇다고 해서 API가 대상 OS에서 지원하는 API인지 아닌지 확인할 방법은 없다. 애플 Lab 에서 테크니셔에게 확인한 내용. 호출하기 전에 확인을 해보라는 것 뿐이다.
개발자가 실수할 여지가 다분하기 때문에 다음과 같은 기능을 지원하면 어떨까?
메소드 단위 호환성 보장 [NSObject -forwardInvocation:] 이용해 커스텀 구현으로 동작
객체 단위 호환성 보장 drop-in 객체를 반환해서 동작
함수나 심볼 단위 호환성 보장 NSString으로 확인할 수 있는 구현체 추가
위 3가지 경우를 기본으로 지원할 계획을 하고 있다.
사용성을 높이기 위한 방법으로 몇가지 추가 요구사항이 있다.
메소드가 없는 경우 앱이 크래시 되는데 선택적으로 로깅만 남기도 아무런 동작을 하지 않는 방식도 지원하고자 한다.
라이브러리로 사용된다면 또 필요한 것이 결과 바이너리의 최소화 일 것이다. framework나 archive로 제공된다면 의미가 없겠지만. CocoaPods를 통해 제공할 수 있다면 Target OS에 따라 구현체들을 조정할 수 있는 기능이 포함되어야 할 것이다.
이미 프로젝트는 시작했다. 부끄럽지만 이름도 조금 거창하게 iOS-Compatibility 로 결정했다. 현재는 구현체가 1개만 지원하고 있어서 많은 노력이 필요한 상황이다. 부디 많은 투자를 할 수 있게 되빌 스스로에게 바란다.











