brunch

You can make anything
by writing

C.S.Lewis

by Tilltue May 30. 2020

Swift Framework 에서
C 라이브러리 사용

modulemap, sqlcipher, c, bridging header



Swift framework 에서 C 라이브러리를 사용하는 방법에 대해서 정리하려고 한다.


시간이 부족하신 분들을 위해 결론부터 말하자면 굉장히 쉽다.

아래의 링크의 글대로 진행하면 된다.



아래의 글은 위의 방법으로 SQL cipher 라이브러리를 적용한 과정을 정리해봤다.



작업이 필요한 프로젝트는 아래와 같은 구조의 내부 Repository framework 를 가지고 있었다.

덧) 인터페이스에 의존하도록 해서 Database 의 세부사항을 숨기고자 했다. 

덧2) CacheDao Protocol만 만족시킨다면 Sql 을 쓰든, CoreData 를 쓰든 Realm 을 쓰든 자유롭게 선택할수 있다.


최근에 보안관련 이슈로 sqlcipher 를 쓰도록 변경해야 하는 이슈가 생겼다.

흠... SqliteCacheDao 객체에서 sqlcipher 를 쓰게 하면 되겠군. 그리하여...


https://www.zetetic.net/sqlcipher/ios-tutorial/


위의 가이드중 Source Integration 방법대로 진행하던중...

framework 에서는 bridging-header 를 못쓴다는 것을 발견, 다시 검색해보니 modulemap 을 만들면 된다는걸 알았다. 아래는 그 과정들이다.


1. 라이브러리 파일( 사용할 c 라이브러리 .c .h)을 프레임워크 프로젝트에 포함

위에서는 sqlite.c , sqlite.h 파일 두개이며, 위의 링크에서 make 를 통해 만들어진 결과물이다.


프로젝트로 drag 하면 쉽게 추가 가능 ( 매우 당연한 소리인가... )


2. modulemap 파일을 만들자

module 폴더 안에 module.modulemap 파일을 만들자.

File -> New -> File -> Empty -> 파일이름 module.modulemap 으로 생성.


파일은 위와 같이 작성하면 된다.


Cipher 은 import 할때 사용할수있는 모듈 이름이다. 원하는 것으로 작성하자.


3. 빌드 셋팅에 Swift Compiler - Search Paths 의 import Paths 에 아래와 같이 라이브러리 패스를 넣어준다.



4. 끝

끝났다. 엄청 간단하다 :D




만약 C 라이브러리를 써야하는데 framework 안에 넣어야 한다면 매우 간단한 이 방법을 쓰자.


나는 이 과정까지 도달하기 까지 좀 많이 삽질했었다.

modulemap 이 아닌 다른 방법으로 시도해보기도 하고... 이것저것 손대다가... -_-;;

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari