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 옵션으로 사용이 되었다고 생각하시면 되겠습니다.