2012-01-11 3 views
1

내 Xcode 프로젝트에는 동일한 이름의 클래스를 정의하는 두 개의 프레임 워크가 있습니다 (B.framework 및 C.framework에는 모두 MyClass라는 클래스가 있습니다). 다음과 같은 몇 가지 경고가 나타납니다.두 기호로 된 프레임 워크

Duplicate symbol _OBJC_METACLASS_$_MyClass originally in B.framework/B(MyClass.o) now lazily loaded from C.framework/C(MyClass.o) 
Duplicate symbol _OBJC_CLASS_$_MyClass originally in B.framework/B(MyClass.o) now lazily loaded from C.framework/C(MyClass.o) 

그런 다음 실행시에 구현 중 하나만로드하고, 그들이 동일에도 불구하고 (완전히 다른 클래스입니다 때문에 "예를 보내 인식 할 수없는 선택"가 발생합니다 다른 하나를 사용하려고 이름).

내가 직접 내 코드에서 MyClass에 구현 중 하나를 사용하지만, 다른 프레임 워크는 내부적으로 만 의 MyClass의를 사용하고 심지어 수출 (그것조차 프레임 워크의 헤더 파일 언급하지, 내가 nm을 사용하여 그 이유를 몰라 기호를 보려면).

두 프레임 워크를 어떻게 작동시킬 수 있습니까?

답변

3

Obj-C에는 "내 보낸"클래스가 없습니다. 또는 "수출되지 않은"수업은 없습니다. 이 문제는 정확하게 Obj-C 코드에 대해 클래스에 2- 또는 3- 문자 접두사를 사용하는 것이 좋습니다. 이러한 프레임 워크를 사용하지 않는 유일한 해결책은 클래스 이름을 변경하기 위해 프레임 워크 중 하나 (또는 ​​둘 다)를 편집하거나 소스에 액세스 할 수없는 경우 공급 업체에 문의하여 그 변화를 만들어라.

+0

내가 두려워하는 것. 나는 프레임 워크 소스에 접근 할 수 없다. 또는 내가 말했던 방식으로 그것을 고쳐 놓았을 것이다. 벤더가 저를 위해 그것을 고치기를 희망하기 전에, 친구는 그럴듯한 해결책 (그것은 일종의 해커를 느낄지라도)이 들리라고 제안했습니다 : 각각 자신의 프레임 워크 중 하나에 링크 된 내 자신의 두 프레임 워크를 생성 한 다음, 적절한 접두사가 필요합니다. 이 방법이 작동하는지 또는 프레임 워크의 기호가 캡슐화 된 프레임 워크를 통해 여전히 "내보낼"수 있습니까? Gunna test asap –

+0

@poiuy_qwert : 절대적으로 * 작동하지 않을 것입니다. –

+0

Obj-C는 동적 런타임 언어임을 기억하십시오. 링크 된 오브젝트 파일/프레임 워크에 의해 런타임에 추가 된 모든 것은 전체 어플리케이션에 노출됩니다. –