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 을 만들면 된다는걸 알았다. 아래는 그 과정들이다.
위에서는 sqlite.c , sqlite.h 파일 두개이며, 위의 링크에서 make 를 통해 만들어진 결과물이다.
프로젝트로 drag 하면 쉽게 추가 가능 ( 매우 당연한 소리인가... )
module 폴더 안에 module.modulemap 파일을 만들자.
File -> New -> File -> Empty -> 파일이름 module.modulemap 으로 생성.
파일은 위와 같이 작성하면 된다.
Cipher 은 import 할때 사용할수있는 모듈 이름이다. 원하는 것으로 작성하자.
끝났다. 엄청 간단하다 :D
만약 C 라이브러리를 써야하는데 framework 안에 넣어야 한다면 매우 간단한 이 방법을 쓰자.
나는 이 과정까지 도달하기 까지 좀 많이 삽질했었다.
modulemap 이 아닌 다른 방법으로 시도해보기도 하고... 이것저것 손대다가... -_-;;