개발도구도 똑똑해야 사는가요?

개발과삶 2011/08/04 02:55 Posted by 종이비행기

얼마 전, 코딩하다가 에러가 아닌 것 같은데 계속 에러를 뱉어내길 내 잠시후에 살펴보니 eventNo가 아니라 evnetNo가 아닌가요? 하는 에러 메시지가 나와 있었습니다.


definition에서는 evnetNo로 오타를 했고, implement 부분에는 eventNo를 정확하게 입력했습니다.

그러니 저는 eventNo가 맞는데 없다고 하니 좀 의아했습니다.

에러 메시지가 이렇게 스마트하게 나오지 않았다면 문제 해결에 좀 더 시간이 걸렸을지도 모르겠습니다.


개발자 보다 더 스마트해지면 코딩도 개발도구가 할까요? ^^;




저작자 표시 비영리 변경 금지
1. Xcode3 대상으로 배포된 Three20을 Xcode4에 빌드되도록 수정

Xcode3에서는 AdHoc 빌드가 잘 되었는데, Xcode4로 AdHoc을 만들기 위해 Archive를 하면 아래와 유사한 에러를 여러개 볼 수 있습니다.

../scripts/Protect.command: line 23: cd: /Users/pcraft/Library/Developer/Xcode/DerivedData/{프로젝트명}-cqbunqzebuctnedgaescbtskhhhj/ArchiveIntermediates/{프로젝트명}/BuildProductsPath/Release-iphoneos/../three20/Three20Core: No such file or directory

그래서, Xcode3에 맞게 제작된 static library들을 Xcode4에 맞게 수정이 필요합니다. 물론, 시뮬레이터나 Debug 빌드는 잘 됩니다.

지금 글에는 첨부파일이 2개가 있습니다.



Paths.xcconfig는 {Three20 라이브러리}/src/common/Configurations/Paths.xcconfig 에 복사하고,
Protect.command는 {Three20 라이브러리}/src/scripts/Protect.command 에 복사한후 다시 빌드를 하게 되면 위와 같은 오류는 사라지고 정상적으로 빌드가 됩니다. 컴파일시 헤더의 위치를 찾는데 잘못된 위치에서 찾는 것을 수정해주는 것입니다. (원본은 백업후 복사하시길 바랍니다!!)

아래 주소로 Three20의 Xcode4용으로 수정된 부분을 보실 수 있습니다.
https://github.com/pazustep/three20/commit/4a9aad4eb90a6962dd729d245f9293a7cc0d7f36



2. ipa 만들기

Xcode3와 달리 Xcode4는 Product - Archive를 이용하여 AdHoc을 만들게 됩니다. 그래서 이렇게 AdHoc을 만들어서 ipa로 배포를 하게 되는데, Three20과 같은 static library가 들어가게되면 정상적으로 빌드가 되지 않습니다.

그림에서 보듯이 Contents 선택에서 Package가 비활성화됩니다. 그 원인은 App을 빌드할 때 static library까지도 함께 포함되어 빌드가 되는 것 입니다.


Window - Organizier를 열어서 방금 전에 빌드한 Archive를 Show in Finder로 열어보면 아래와 같은 파일 상태를 볼 수 있습니다.

보시면 static library들이 모두 포함이 되어 있습니다. Xcode는 Applications와 usr, 2개의 디렉토리가 있기 때문에 어떤 것이 signing을 해야하는 대상인지 화인할 수 없어서 Package가 비활성화 되는 것입니다.

해결방법은,
프로젝트에 포함된 모든 static library들을 열어서 프로젝트의 Build Settings에 Skip Install 항목을 YES로 해주면 Archive 빌드시 static library가 포함되지 않습니다.


모두 이렇게 변경한 다음 Product - Archive를 하면 Organizier에 Contents선택에 Package가 활성화되어 있을 것입니다.

Xcode3는 static library가 포함되지 않았었는데, Xcode4는 왜 포함되었을까 궁금하시겠지만, Xcode3에는 Archive빌드시 Skip Install 옵션에 관계없이 강제적으로 YES 옵션으로 사용이 되었다고 생각하시면 되겠습니다.
 




저작자 표시 비영리 변경 금지