일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 오브젝티브C
- iPhone
- 윈도구7
- Number
- 아이폰
- VISTA
- 퇴사
- c#
- 윈도우즈7
- Objective-C
- 링크
- ObjectiveC
- 애플
- 설치
- windows
- mac
- windows7
- 7932
- 볼링
- java
- screen
- WSDL
- 윈도구
- install
- WebService
- 아이맥
- 맥
- cagr48com
- Mobile
- 형식
- Today
- Total
A colossal Dreamer: GR鐵塔-天生我材
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 를 치는 것은 노동력 낭비라는 친구도 당근 있겠지만,)
(단지 그가 이런 배려를 항상 받아왔다고 볼 수도 있을 것이다.)
'Development > 아이폰' 카테고리의 다른 글
NSAutolayout (0) | 2020.02.05 |
---|---|
맥에서 https git저장소에 접근하는 login 정보는 어디에? (0) | 2019.12.03 |
Multi Thread 에서 접근하는 안전한 Property 설계 GCD (DispatchQueue) (0) | 2019.10.23 |
SwiftUI 시대의 코딩아키텍쳐 전략 (0) | 2019.06.26 |
[UIKit] mask layer with Gradient layer (0) | 2019.04.30 |