2011-12-27 5 views
1

우리 회사는 iOS 개발 용으로 두 가지 SDK를 제공하고 각 SDK를 사용하는 샘플 응용 프로그램을 제공하고자합니다. 두 SDK는 둘 중 하나의 공용 인터페이스의 일부가 아닌 많은 공통 코드를 사용합니다.XCode에서 개인 정적 라이브러리를 사용하는 공용 정적 라이브러리를 만드는 방법은 무엇입니까?

저는 하나의 정적 라이브러리 프레임 워크 (우리는 비공개로 유지)에 공통 코드를 갖도록 프로젝트를 구성하고 각 SDK를 자체 정적 라이브러리 프레임 워크 (게시 할 예정)로 만들고 싶습니다. SDK 프레임 워크는 각각 공통 프레임 워크에 의존합니다.

필자는 한 가지를 제외하면이 설정과 작동을 얻었습니다 ... SDK 코드에서 사용되는 공용 라이브러리에는 몇 가지 상위 클래스가 있습니다. SDK 코드에 하위 클래스를 게시하려면 SDK 프레임 워크와 함께 상위 클래스 (개인용 공통 프레임 워크에만 있음)의 헤더를 내보내야합니다.


이 문제를 해결하는 방법에 대한 제안 사항이 있으십니까? 여기에 가장 중요한 우선 순위는 다음과 같습니다

  • 고객은 하나의 프레임 워크를 다운로드 할 수 있습니다 그리고 그것은 단지 우리는 높은 가시성 이상이있는 클래스를 갖는 여러 프로젝트
+0

문제가 무엇인지 확실하지 않습니다. 부모 클래스의 헤더를 게시하지 않는 것이 맞습니까? – joerick

+0

아니, 나는 그렇게하지 않아도된다. 문제는 * * XCode를 SDK 프레임 워크에 포함시킬 수 없다는 것입니다. –

+0

이것을 작동 시키셨습니까? 고객은 개인 프레임 워크를 제공하지 않으면 구축 할 공개 프레임 워크 중 하나를 어떻게 얻을 수 있습니까? 공용 프레임 워크를 공용 프레임 워크의 2 진 파일에 링크하고 있습니까? 그렇다면 SDK A가 CommonSDK 1.0을 사용하고 SDK B가 CommonSDK 1.1을 사용하는 경우 어떻게해야합니까? 이 두 가지를 동일한 앱에 연결하는 데 문제가 있습니까? – Liron

답변

0

를 통해 코드를 복제하지 않는

  • 일을했다 그 조상은 어려운 문제입니다. 실제로 매우 인기있는 일부 언어 및 런타임 (예 : .NET Framework를 사용하는 언어)이이를 금지합니다.

    명백한 해결책이 없습니다. 내 생각에 가장 쉬운 방법은 필드 만있는 개인 클래스의 헤더를 게시하는 것입니다. 메소드를 생략 할 수 있습니다. 이것은 "개인"메소드가 Apple 프레임 워크에 숨겨져있는 방식입니다 (기본적으로 클래스는 "공개"로 설정되지만 모든 메소드는 숨겨집니다).

    또 다른 솔루션은 기능을 가져 오기 위해 상속이 아닌 컴포지션을 사용하는 것입니다. public 클래스를 NSObject에서 상속 받고 private 클래스의 인스턴스를 제공하십시오. id 필드를 사용하여 해당 유형을 숨 깁니다.

  • +0

    조금 명확히하기 위해 ... 나는 부모 클래스에 대한 헤더를 노출하는 것에 대해 너무 걱정하지 않는다. 내가 더 걱정하는 것은 모든 것을 공통의 틀에 노출시키지 않는 것이다. –

    +0

    불행히도, 공통 프레임 워크에서 필요한 헤더를 SDK의 프레임 워크로 복사 할 수 있도록 SDK의 XCode 프로젝트를 구성하는 방법을 알 수 없습니다. –

    +0

    @AndrewMiner, 정확한 설정은 무엇입니까? '.framework' 객체 또는'.a' 객체를 여러 헤더로 게시하고 있습니까? 정적 프레임 워크와 혼동을 느낍니다. – zneak

    0

    두 공통 프레임 파일을 Xcode의 참조로 추가하면됩니다. Xcode 프로젝트 파일은 해당 프로젝트 폴더 외부의 파일을 참조 할 수 있습니다. 그런 다음 헤더 파일 복사 빌드 단계를 사용하여 게시하도록 선택할 수 있습니다.

    0

    내 블로그 포스트를 참조하십시오.

    클릭 here

    이 창조 정적 라이브러리에 대한 완벽한 레퍼런스이다.

    +0

    이것은 "완전히"잘못되었습니다. 그것은 다른 문제를 심하게 해결합니다. – Adam

    관련 문제