iOS ObjC Symbol conflict with other Swift Framework.
하나의 프로젝트에서 프레임웍(외부 오픈소스)를 사용하는 경우는 빈번하다.
내 프로젝트(AwesomeApp)에 CaptureControl 이라는 스위프트 클래스를 사용중에
참조하는 프레임웍내(FRwork)에 CaptureControl 이라는 스위프트 클래스를 사용한다면,
내 프로젝트는 AwesomeApp.CaptureControl, 프레임웍은 FRwork.CaptureControl 과 같이
다른 언어의 namespace(java:package) 로 구분해서 사용이 가능하다.
하지만, 내 프로젝트에 ObjC 코드가 있고, ObjC 에서 내 프로젝트와 FRwork 모두 접근해야 하는 상황이라면,
두 클래스 모두 ObjC 헤더파일에 동일한 CaptureControl 로 import 되어
컴파일이 안되게 된다.
이름을 수정하면 되겠지만, 그것이 여의치 않다면,
@objc(xxx) 의 메타정보 지정으로 해결이 가능하다.
내 프로젝트 클래스 선언 바로 앞에 @objc(MYCaptureControl) 을 지정하면,
ObjC 에서 MYCaptureControl 로 접근이 가능하고,
프레임웍쪽에서 @objc(FRCaptureControl) 을 지정하면,
ObjC 에서 FRCaptureControl 로 프레임웍 클래스를 사용할 수 있다.
Swift 사용 초기에 코딩컨벤션을 정할 때,
Swift 는 모듈을 NameSpace 처럼 쓸 수 있으니, prefix(FR, MY, CA, UI 등)를 붙일 필요가 없다는 주장이 있었는데.
이 처럼 문제될 수 있다.
또한 위와 같이 해결하면, Swift와 ObjC 서로간의 클래스이름이 달라지는 문제도 있다.
선호의 문제로 볼 수도 있겠지만,
프레임웍을 생성하는 쪽에서는 Swift 도 역시 prefix 를 붙여서 작업해주는 것이
애플리케이션 작업하는 쪽을 배려하게 될 것 같다.
(prefix 를 치는 것은 노동력 낭비라는 친구도 당근 있겠지만,)
(단지 그가 이런 배려를 항상 받아왔다고 볼 수도 있을 것이다.)