본문 바로가기

about DEV

갑자기 사라진 Framework... (AWS SDK , Cocoapods)

iOS 개발을 할때 외부 라이브러리나, 프레임웍을 사용할때 Cocoa pods를 즐겨 사용한다.
몇 해 전만 해도, 메뉴얼하게 관리하고 사용했었다면, 그 자체에 귀차니즘과 불편함을 느낀 많은 개발자들의 니즈에 힘입어 Ruby에서 동작하는 라이브러리/프레임웍 디펜던시 관리툴이라고 보면 되는데.. 오늘 조금 어이없는 상황이 생겨서 정리해본다. 


약 한달하고 일주일 전부터 개발중인 어플리케이션 릴리즈를 앞두고 막판 스퍼트를 올려서 디버깅과 테스트 그리고 워딩작업을 하고 있었다. 그리고 점심먹고 돌아온 후, 최종 검수를 위해서 빌드를 딱! 하는 순간... 빌드 Failed... 뭐지? 하는 마음에 Fail 메세지를 보니, AWS Core Framework을 빌드하지 못했다는 메세지와 찾을 수 없다는 메세지만 반복된다.  혹시나 해서, XCode 삭제 후 DerivedData 폴더 통으로 삭제후, 컴퓨터 재부팅 그리고 재빌드를 해봐도 같은 상황..


이런 상황을 주변에서 몇번 보기는 했지만 내게 일어난 건 처음이였다.  심지어 주석도 바꾸지 않았는데 밥먹기 전에 빌드되던 놈이 밥먹고 난 후에 빌드가 안된다니... 적잖은 충격을 받고 방법을 찾아봤다.  구글에 검색도 한두시간이지 뭔짓을 해도 사라진 (?) 프레임웍은 나타날 생각을 않는다. 


결국 Podfile에서 해당 SDK 를 삭제 (AWSCore , AWSS3)하고, 수동으로 Framework를 임베디드해서 프로젝트를 빌드했다.  그리고 마무리 디버깅 작업을 거친 후, 릴리즈를 했더니! 또 생긴 문제. 



마침 스크린샷을 찍어둔게 없어서, 구글검색한 블로그의 이미지를 첨부..

이와같은 상황이 발생했다. 영어 까막눈수준인지라 대충 확인해보면, 지원하는 아키텍쳐가 아닌게 들어있다. 정도랄까? 

x86_64, i386 아키텍쳐가 해당 프레임웍에 포함되어있다는 얘기 


cocoapods를 사용했으면 이런 문제가 없을껀데.. 빌어먹을 -_- 

어쨌든, 아키텍쳐 사용하는것만 빼고 기존거 덮어씌우는 방법으로 해결하고, AppleStore에 릴리즈 완료했다.



# 含まれているアーキテクチャを確認する
$lipo -info AWSCognito.framework/AWSCognito
Architectures in the fat file: AWSCognito.framework/AWSCognito are: i386 x86_64 armv7 armv7s arm64 
# 特定のアーキテクチャのみ抽出する
$lipo -extract arm64 AWSCognito.framework/AWSCognito -o AWSCognito.framework/AWSCognito-arm64
$lipo -extract armv7 AWSCognito.framework/AWSCognito -o AWSCognito.framework/AWSCognito-armv7
# 抽出したアーキテクチャから再生成する
$lipo -o AWSCognito.framework/AWSCognito-merged -create AWSCognito.framework/AWSCognito-armv7 AWSCognito.framework/AWSCognito-arm64
$lipo -info AWSCognito.framework/AWSCognito-merged 
Architectures in the fat file: AWSCognito.framework/AWSCognito-merged are: armv7 arm64 
# 元のファイルを削除し、置き換える
$rm -rf AWSCognito.framework/AWSCognito
$mv AWSCognito.framework/AWSCognito-merged  AWSCognito.framework/AWSCognito
$rm -rf AWSCognito.framework/AWSCognito-*
# AWSAPIGateway.framework、AWSCognitoIdentityProvider.framework、AWSCore.frameworkに関しても同様に行う


참고URL은 http://qiita.com/teradonburi/items/da808c60fe7079a5c086


lipo -info FrameworkName 은 해당 프레임웍의 아키텍쳐 확인이고,

lipo -extract Architectures 는 따로 빼내고자 하는 아키텍쳐 

arm64 / armv7 아키텍쳐만 빼서 머지한 후, 기존 프레임웍을 삭제하고 동일이름으로 재저장하는 방식이다.


역시 iOS나 cocoa는 일본이... 나중에 시간 되면 다시금 cocoapods쪽으로 넣어봐야지 .. 대체 왜 안되는겨 

어쨌든, 별거아니지만 나중에 또 백퍼 까먹을꺼 같아서 미리 저장... 혹시 cocoa pods로 관리하는 프레임웍 갑자기 정상동작/인식하지 않는 분들 계신가요