자작 static framework를 정리해 SDK화해 ObjC와 Swift로 사용

목표



자작 Swift 프레임워크에서 다른 Objective-C 라이브러리를 참조할 수 있도록 한다.
※예를 들어, ObjC로 만든 자작 라이브러리를 새롭게 Swift Framework로 사용해, 그 Swift framework를 앱으로 이용하는 경우를 상정.
※관리가 번거롭기 때문에 언어별로 무엇인가를 준비한다든가, 언어 마다 참조하는 파일이 다르다든가는 없다.

사용하는 것



Clang Modules



htp://c cg. lvm. rg/도cs/모즈ぇs. HTML
modulemap 언어라고 하는 것을 이용해, header를 binary 형식으로 프리프로세스한 것.
의존 관계 등도 기술할 수 있지만, 여기의 설명에서 header의 공개 설정 등을 하는 것은 실용적이지 않을 것 같다.
explicit 수식자라는 명시적 import를 강제하는 수식자를 붙여도 코드 후보에는 올라 버린다.

이번 대상외의 것



Objective-c static library



header의 해석이 Swift에서 이용할 수 없기 때문에 불채용.
다만 Static Framework화하면 사용할 수 있습니다.
※Dynamic Framework화해도 좋다

Bridging Header



ObjC library를 Swift Framework에서 참조하려고 하는 경우는 Briging Header를 만들어도 라이브러리의 이용은 할 수 없습니다.

샘플



두 개의 ObjjC Static library를 Swift framework에 싸는 방법.
  • static library를 2개 만든다.
  • 두 가지 모두 정적 프레임 워크로 만듭니다.
  • 각 static framework의 umbrella header를 module로서 선언한 module.modulemap 파일을 작성한다.


  • 4. 각 프레임 워크 내에 Modules 폴더를 만들고 배치합니다.

    5. 각 static framework의 umbrella header를 감싸는 umbrella header를 작성한다

    6. 5.에서 만든 umbrella header의 module.modulemap 파일(umbrella module)을 작성한다.

    ※__has_include 매크로를 넣으면 좋다.
    7. 5.6.에서 만든 umbrella framework 및 umbrella module, framework를 다음과 같이 배치한다.

    8. 이용하는 프로젝트에 각 framework 및,umbrella module, umbrella header(framework.h)를 import한다.
    9. user header search path에 umbrella header의 path를 지정
    10. Swift에서 사용하는 경우에만 Swift compiler의 import path에 umbrella module을 지정

    완성



    Swift


    Objective-C


    framework끼리 의존성이 없으면 필요한 것만을 정리 SDK가 된다.

    비고



    내포하는 ObjjC framework는 dynamic framework에서도 가능. 다만 dynamic framework를 포함하는 경우는 최종적으로 이용하는 앱에서 ObjC framework를 포함한 모든 내장된 framework를 직접 참조하지 않아도 embedded framework로 정의할 필요가 있다.
    이는 swift framework와 ObjjC framework가 정적 링크가 아니기 때문입니다.

    주의점



    이른바 umbrella framework이므로, framework내에서 외부의 framework(스스로 update 할 수 없는 것)를 포함하는 것은 추천하지 않는다. 어느 정도 지식이 있어도, 빠지기 쉬운 포인트는 많아, 눈치채기 어렵다.
    어디까지나 자작의 정리 정도가 좋다.

    좋은 웹페이지 즐겨찾기