Xcode Debug/Release 별로 Static Lib Link 설정하기

 iOS로 개발하다보면서 궁금했던게 있었습니다. iOS Device와 Simulator용 Debug Universal Static Lib와 배포용인 Release(Archive) Static Lib를 사용하면서 개발하다가 스토어에 배포하기위해서는 만든 static lib를 그때그때 교체해줘야 하는 불편사항이 있었습니다. 이 내용은 Universal Static Lib를 만들때도 이미 불만을 토로했던 내용이죠. 디바이스용과 시뮬레이터용 Debug static lib를 빌드때마다 교체해줘야 한다는 문제가 있어서 Universal Static Lib를 만든것이죠. 이에 대한 해결을 정리해보겠습니다.

 해결하기에 앞서 기존 Project Navigator의 Frameworks나 Build Phases -> Link Binary With Libraries에 추가했던 static lib는 삭제하시기 바랍니다.

 먼저 제가 만든 Framework의 플랫폼별 static lib 디렉토리 구조입니다. 스샷에서 선택되어진 libFramework.a는 배포용이고 libFrameworkUniversal.a는 개발용 Debug static lib입니다.

 첫번째 해결책으로는 Tapjoy를 연동할 때 나왔던 Link에러 내용에 있는 -force_load 를 사용하는 것입니다.

Debug
-force_load "$(SRCROOT)/../Libs/Framework/ios/libFrameworkUniversal.a"
Release
-force_load "$(SRCROOT)/../Libs/Framework/ios/libFramework.a"

 이렇게 lib가 있는 위치와 파일을 빌드 설정별로 지정해줘서 해주면 됩니다.

 두번째로 -force_load 없이 그 뒤에 내용만으로도 가능하더군요.
Debug
"$(SRCROOT)/../Libs/Framework/ios/libFrameworkUniversal.a"
Release
"$(SRCROOT)/../Libs/Framework/ios/libFramework.a"

 이런식으로 꼭 " "로 묶어는 줘야합니다.

 2가지가 무슨 차이가 있는지, 또 뭔가 다른 방법이 있는지 저도 잘 모르겠습니다. 사실 win32 Visual Studio환경이라면 별 것 아닌 내용인데 Xcode 환경에서 개발은 아직 새내기 이다보니 이제야 해결했네요. 일단 배포시에 디버그 static lib가 적용되서 나가는 실수는 미리 방지할 수 있겠네요.

댓글

이 블로그의 인기 게시물

'xxx.exe' 프로그램을 시작할 수 없습니다. 지정된 파일을 찾을 수 없습니다.

goorm IDE에서 node.js 프로젝트로 Hello World Simple Server 만들어 띄워보기

애드센스 수익을 웨스턴 유니온으로 수표대신 현금으로 지급 받아보자.