본문 바로가기

iOS/Xcode

[Xcode] Static Library 파일(.a file) 만들어서 Swift 프로젝트에 적용하기

라이브러리를 가져다 쓸 때 참조만 하면 되는데 쓸데없이 프로젝트 내비게이터를 

어지럽히는 경우가 있으므로 Static Library를 만들어 쓰면 깔끔하게 관리가 가능하다.


1. 라이브러리 

.h .m 파일 생성 혹은 오픈



2. 파일 - 뉴 - 타겟 - 코코아 터치 스태틱 라이브러리 생성



3. 빌드페이즈 - 컴파일소스에는 .m and .mm파일 추가, 카피파일에는 .h파일 추가




+ 3번 과정을 굳이 하지않더라도 (프로젝트 파일 구성이 .h .m으로만 구성된게 아니라 .a .framework 등으로 이루어져있어도) 그냥 빌드하면 products 폴더에 해당 프로젝트의 .a 파일이 생김 ->  Show in finder로 보면됨)


4. 새로만든 타겟으로 스킴을 바꾸고 simulator로 한번 빌드, device 연결해서 한번 빌드.


5. 여기까지 하면 시뮬레이터, 디바이스에 대응하는 .a파일이 생성된다.


6. 이를 합치는 작업을 해보자. 시뮬레이터와 디바이스에 만들어진 .a파일을 각각 복사한 후 새로운폴더를 만들어서 두 파일을 이동시킨다.


7. 터미널을 열고 

lipo -create "liblibStaticLibTest_device.a" "liblibStaticLibTest_simulator.a" -output "libStaticLibTest.a"

(Static Library Target이름 생성시 lib을 붙이지않아도 빌드하면 lib이 prefix되어있음)


이 명령어를 치면 해당폴더에 새로운 .a파일이 하나 생성된다.




8. 이것으로 .a파일(static library)은 생성 완료된것이고, 사용법을 알아보자. (Swift 프로젝트에 적용)

8-1. libStaticLibTest.a 파일을 Target - Build Phases에서 Link Binary에 추가.
8-2. Static Library에서 사용할 메소드를 모아놓은 .h파일을 Build Phases 의 Copy File에 추가. (좌측 상단 + 눌러서 Copy File 카테고리 추가)
8-3. Target - Build Setting의 Library Search Path 검색 후 경로 확인.
8-4. StaticLibTest-Bridging-Header.h 추가. 내용은 .h파일명을 임포트 시키는 걸로. 
ex) #import "StaticLibTest.h"
8-5. Build Setting에서 Objective-C Bridging Header Path 추가 and PreCompile Bridging Header = Yes설정.


--------------------------------------------------------------------------------------------------------
순조롭게 되지않아 3일을 고생함.
내가 만든 Static Library 안에 또다른 Static Library의 bitcode enable을 일치시키는 것과,
지원하는 Architecture 설정이 관건이었다.
그 외 라이브러리의 경로 설정 등 수많은 시행착오 끝에 빌드 성공!



여러 빌드 시도 중에 c++ file 더미(아무런 내용없이 파일만)를 만들어서 추가를 했는데 (header file포함), 지우니까 아래와같은 에러가 떴다..
다시 추가해서 빌드하니 제대로 빌드가 됨....허허허

Apple Mach-O Linker (ld) Error