최근 고객사로 Library 파일을 전달하는데
당연히 되야할 카테고리 클래스들이 동작하지 않는다는 연락을 받았다.
왜 그런지 고객사측 담당자와 이야기 해보니, other linker flag에 -ObjC를 안넣어서 그렇다고 한다.
샘플프로젝트 자체는 -ObjC 넣어서 배포했으니 넣어달라고 말했지만,
고객사 측에선 이 flag를 넣으면 여러 라이브러리에서 함수 중복 에러가 난다고 거부했다.
그래서 일단 이 flag를 설명하자면
This flag causes the linker to load every object file in the library that defines an Objective-C class or category. While this option will typically result in a larger executable (due to additional object code loaded into the application), it will allow the successful creation of effective Objective-C static libraries that contain categories on existing classes.
라고 한다.(출처 : http://stackoverflow.com/questions/6629979/what-does-the-objc-linker-flag-do)
일단 위 설명에서도 알 수 있듯이 flag안넣으면 라이브러리 안에 Category로 설정한 클래스들 다 못쓴다. 다 에러난다.
iOS 라이브러리 자체가 dynamic 라이브러리가 아니고, static이기 때문에 중복하는 함수 제거하고 쓰는게 맞지만..
고객사측의 시간없어 죽겠는데 5개 라이브러리의 함수 중복 수정하는게 맞냐, 우리 라이브러리 하나만 수정하는게 맞냐는 이상하지만 묘하게 설득력있는 주장때문에 일단 작업을 해주긴 했다.
다시 생각해보니깐 이상하네 진짜 카테고리 쓰지말란건가.
-ObjC flag를 쓰지 않으면 라이브러리 프로젝트에서 포함시켰던 framework파일들이 로드가 안된다.
따라서 사용하는 프로젝트에서 framework를 일일히 추가해줘야한다.
또한 카테고리를 쓰지 못하므로, 카테고리로 구현한 클래스들을 일반 클래스로 다시 변환해주어야 한다.
'프로그래밍 > iOS' 카테고리의 다른 글
[ios] UIAlertView rotate, UIAlertController (0) | 2015.04.09 |
---|---|
[ios] 버전 가져오기 (0) | 2015.04.09 |
[ios] presetPhoto 고찰 (0) | 2015.04.09 |
[아이폰] 카메라화소 (0) | 2015.04.09 |
[Xcode]Xcode6에서 Category 파일 생성 (0) | 2015.04.09 |