기존에 진행하던 xcode3 용 프로젝트를 xcode4 로 환경을 업데이트 하면서 xcode4 에서 불러들였습니다.그런데 빌드를 하자마자 아래와 같은 에러가 뜨더군요. 

참 웃긴건, 어떤프로젝트는 그대로 빌드가 잘 되고, 어떤건 아래와 같은 에러가 뜬다는 것이었습니다. 거참... 개발자로써 미치고 환장할 노릇이었죠. :) 

[BEROR]No architectures to compile for (ARCHS=i386, VALID_ARCHS=armv6 armv7).

해결방법은 간단합니다. 



프로젝트의 빌드 세팅에서 Valid Architectures 의 항목에 i386 을 추가해 줍니다. 

그리고 Target 빌드 세팅에서도 동일한 작업을 해줍니다. 

그리고 빌드~! 에러가 사라집니다. :)


PS. 제가 정확한 원인을 알지 못한채 해결한 방법이라, 동일한 에러지만 혹시 다른 경우에는 위 방법으로도 안될수도 있습니다. :)




블로그 이미지

하루하루

하루하루를 열심히 살아가는 그런 사람이 되고자 합니다. 오늘을 후회없이 말이지요.

,

CEO 의 자질.

잡다한 생각 2011. 4. 29. 20:19


Steve Jobs for Fortune magazine
Steve Jobs for Fortune magazine by tsevis 저작자 표시비영리변경 금지


CEO에게 꼭 필요한 자질이 무엇인지 생각해본 하루다.

만약 당신의 프로젝트를 혼자서 다 하는 1인 기업의 CEO 라면, 또는 정말 천재적인 능력을 지녔다면 지금 적어내려가는 CEO 의 자질은 필요 없을지도 모른다. 하지만, 세상 대부분의 일은 그렇지 않기에 다음의 자질은 반드시 필요한 덕목이라고 본다.

당연한 이야기겠지만 CEO는 해당 분야의 인재를 알아볼줄 알아야 한다. 세상의 모든 일은 사람에서 시작하고 사람에서 끝나기에 좋은 인재를 알아보는것은 너무나도 중요하다.

CEO 는 알아본 훌륭한 인재를 자기와 함께 할 수 있도록 만들 수 있어야 한다. 인재를 알아보지만 자신과 함께 하지 않는다면 그 무슨 소용인가.

CEO 는 훌륭한 인재를 알아보고 자기와 함께 할 수 있게 만들었다면 이제 그를 완전히 믿어줄 차례다. 당신의 인사이트를 말해주되 강요하지 마라. 그렇다면 당신의 훌륭한 인재는 자신의 능력을 200% 발휘할 수 있을것이다.


하지만, 훌륭한 인재를 알아볼 수 있는 훌륭한 눈도 없고, 운좋게 찾아다고 하더라도 나와 함께 할 수 있도록 할 자신도 없다. 그럼에도 불구하고 막상 내가 CEO 가 되어, 직원을 채용하고, 프로젝트를 만들고, 돈이 들어가고, 그러다보면 그 직원이 나와 다른 생각으로 일을 처리할때 그 직원을 100% 믿어 줄수 없겠지.

그렇게 하기가 정말 쉽지 않겠지.




'잡다한 생각' 카테고리의 다른 글

아쉬운 아이폰 요금제.  (18) 2009.11.30
신종플루시대에 맞는 아이 대하는 예절.  (0) 2009.09.09
백일떡.  (0) 2009.02.22
2009 모바일 라이프를 위한 고민  (0) 2009.01.29
이력관리는 평소에 하자.  (2) 2009.01.18
블로그 이미지

하루하루

하루하루를 열심히 살아가는 그런 사람이 되고자 합니다. 오늘을 후회없이 말이지요.

,

지난 3월 28일에 포도트리에서 그동안 준비해 왔던 iOS App 중에 단어장 앱 Super 0.99 Vocab 30K 와 다산북스와 제휴해서 만든 세계 인물학습만화 who? (iPhone, iPad)시리즈  2가지를 선보였습니다. 그중에는 제가 참여한 프로젝트도 있어서 런칭하기 하루 전날부터는 긴장되어 잠도 잘 못잤더랬죠.


런칭을 하고 나서 정말 폭풍같 이틀이 지나갔습니다. 제가 알고 있는 지인들께 제품 런칭했다고 알려드리기도 하고, 사용자 응대도 하구요. 비록 제가 개발자 이지만, 지난 이틀은 개발자가 아닌 회사 홍보팀의 한사람이 되어서 살았습니다. 나름대로 흥미진진하고 재미있는 경험이었어요. :)


사실 이번에 런칭한 앱이 나오기까지는 정말 눈물나는 Making Story 가 있습니다. 여러사람의 땀이 들어간 노력의 결과 물이기도 합니다. 이러한 Making Story 는 나중에 공개 하도록 할께요.ㅠㅠ 아마 들어보시면 "아 이 앱이 그냥 대충해서 만들어진게 아니구나, 아우.. 진짜 고생 많이 했네.. " 라는 생각이 절로 드실 겁니다. :)


시장은 그러한 우리의 노력을 알기라도 했다는 듯이, 좋은 성적으로 답해 주었습니다. 새벽에 런칭하고 나서 오전에 50위권에 금방 들어섰고.. 점심때쯤 되자 10위권에 육박하는 성적을 보여 주었습니다. 그리고 저녁때는 5위권 안으로 들어오면서 회사 동료들과 기쁜 런칭 첫날을 보냈었죠. 이왕 5위권 안으로 들어온거 1등 찍었으면 좋겠다! 하는 마음으로 랭킹을 지켜보다가 런칭 첫날을 마감 했습니다.


다음날 아침. 자고 일어나니 아...  앱스토어에서 Super 0.99 가 아이폰 유료앱 부분 1위를 하고 있었습니다. 가슴이 두근두근 뿌듯뿌듯 했습니다. 그리고 얼마 지나지 않아서 who? for iPad 가 아이패드 유료앱 부분 1위에 올라섰습니다. 정말 눈물날 지경 이었죠.  who? for iPhone 은 유료부분 8위를 하고 있었습니다.

우왓! 출시 하루만에 1위다!


저희가 출시한 앱이 모두 유료부분 10위권안에 들다니.. 정말... 기뻣습니다. 그리고, 두려웠습니다. 이제 시작인데 이렇게 좋은 출발을 하면 너무 부담스럽다고나 할까요.  하지만, 정말 다행입니다. :)


포도트리는 전 글에서도 밝혔듯이 세계를 목표로 만들어진 회사 입니다. 이번 런칭은 한국에 국한 되었지만, 좀더 준비해서 글로벌로 나아가려고 합니다. 정말로 이제 시작인 것이죠. 국내 시장에서 좋은 성적을 거둔것이 정말 다행입니다. 여러분들이 이렇게 호응을 안해주셨으면  세계로 나갈 엄두도 못냈을지도 몰라요. 여러분이 기대해 주시고 응원해 주신 덕분에 세계로 나갈 용기를 얻었습니다.


폭풍같은 지난 이틀이 지나고, 이제 좀 평온해 지는 느낌입니다. 다시 마음을 다잡고 새로시작하는 마음으로 글로벌 진출 준비를 해야 할꺼 같아요. 글로벌 출시가 임박해지면 또 소식 전하겠습니다.


지난 이틀간의 뜨거운 호응 정말 감사드립니다. :)
꾸벅~!



PS. 정말 대단한 리뷰들




블로그 이미지

하루하루

하루하루를 열심히 살아가는 그런 사람이 되고자 합니다. 오늘을 후회없이 말이지요.

,

작년 9월에 완전 신생벤처인 포도트리우주침략자님의 권유로 입사한 이후 6개월동안 노력한 결과물이 드디어 세상에 선보입니다. 그동안 듣보잡 벤처인 포도트리가 드디어 제대로된 무기를 가지고 세상에 출사표를 던지게 된것입니다. 과연 세상은 우리를 어떻게 평가할지 기대반 두려움반 입니다. 

신생 듣보잡 벤처에 우수한 인재들이 모이고, 그 인재들의 잠재력을 인정받아 매출도 없는 주제에 벌써 투자도 받았습니다. 엄청난 부담입니다. 저희 대표님 비유에 따르면 포도트리의 등장은 학교 도서관에 공부를 무지 잘할것만 같은 포스를 풀풀 풍기는 녀석이 나타난 것과 같다고 합니다. 실제로 시험 성적은 아직 아무도 모르는 것이지요. :)

애초에 세계시장이 목표인 포도트리는 그 처음 시작을 대한민국에서부터 하려고 합니다. 3월 28일! 드디어 그동안 준비해온 첫 앱이 한국 시장에 나옵니다. 도서관에서 공부만 하는 모습을 보여주던 녀석이 중간고사 보겠다고 시험장에 들어선 꼴입니다. 시험장에 들어서는 본인 뿐만아니라, 그를 그동안 바라보고 있었던 주위사람들까지 과연 성적이 어떨지 기대하고 궁금해 합니다.


세계 인물학습 만화 who?


SUPER 0.99 - 영단어 30000



시작은 대한민국에서 합니다만, 포도트리의 목표는 세계 입니다. 앱 자체도 철저히 세계시장을 바라보고 기획되었습니다. 세계 앱시장의 3%에 불과한 한국에서(통계가 정확하지는 않습니다. 어디서 줏어들은 말이에요 ㅋ) , 세계를 제패하겠다는 꿈을 꾸고 있습니다. 과연 가능할까요. 2010년에 세계인의 사랑을 한몸에 받았던 앵그리버드 같은 앱을 게임이 아닌 다른 카테고리에서 만들어 보겠다고 큰소리 치고 있습니다. 저는 가능하다고 생각합니다. 많은 분들이 도와주셨고, 포도트리 식구들도 너무나 많은 열정과 노력, 신뢰를 보여주었습니다.

곧 평가를 받을 시간 입니다. 처음 시장에 제품을 내놓는 자리에 여러 기자님들도 오신다고 합니다. 설레입니다. 저는 우리의 이야기가 세계인의 입에 오르내렸으면 좋겠습니다. 많은 분들이 이야기해 주셨으면 좋겠습니다. 동양의 조그만 나라, 대한민국에서 세계1등을 꿈꾸고 있는 작은 회사가 있다고... 과거, 아시아와 유럽을 잇는 대제국을 건설했던 몽골의 무기였던 몽고기병과 같이, 완성도 있고 세계인이 공감할 수 있는 컨텐츠와 앱으로 무장한 포도트리가 세계를 향해 출사표를 던졌다고 말이지요.





블로그 이미지

하루하루

하루하루를 열심히 살아가는 그런 사람이 되고자 합니다. 오늘을 후회없이 말이지요.

,

작년 1월에 소개했던  2010/01/24 - 내가 쓰는 아이폰 앱 #1 이후로 1년만에 포스팅하는 앱 관련 이야기 입니다. 지난 포스팅을 돌아보니 아이폰이 국내에 들어온지 1년이 넘은 지금, 그 이후로 굉장히 좋은 앱들이 많이 나온것을 느끼고 있습니다. 게다가 아이패드까지 나오게 되면서 국내에도 앱들이 홍수처럼 쏟아지고 있지요.

그런 와중에 사용자에 의해서 좋은 앱들이 가려지고 있습니다. 사용자들 본인들이 아이폰을 사용하는 용도가 모두 틀리기 때문에 각각 많이 쓰는 앱들이 차이가 날 수 있겠지만, 이런 기회에 다른 사람들은 어떤 앱을 많이 쓰고 있는지 알아보는것도 괜찮겠지요?

이번 포스팅은 그런 의미에서 제가 요즘들어 가장 많이 쓰는 앱들 10개를 뽑아본것입니다. :)

그럼 한번 알아볼까요?


#1. Seoul Bus 2


아이폰 필수 앱이죠? 요즘 버스 정류장엔 버스 오기 10분전부터 사람들이 붐빈다고 합니다. 스마트폰에서 버스시간 미리 보고서 시간 맞춰 나온다는거 같아요. :) 이 앱 덕분에 회사에서 퇴근할때도 버스시간 맞춰서 나가고 추운 겨울에는 버스 정류장에서 버스 올때까지 벌벌 떠는 일도 줄어 들었지요. 항상 정확한건 아니라서 약 3~4분 정도의 여유를 두고 정류장에 도착하는게 안전합니다. :)





#2. 지하철


지하철 노선도 앱입니다. 작년 포스팅에서는 iKorway 를 사용하고 있었는데, 업데이트도 중단되고 유료였지만 이앱은 무료에다가 아이패드/아이폰 유니버셜 앱이라서 한번 아이튠즈에 설치하면 아이폰/아이패드에서 동시에 설치가 가능합니다. 지도 해상도가 높아서 용량이 꽤 됩니다만 그만큼 값어치를 합니다. :)







#3. 다음지도


여전히 가장 많이 사용하는 지도앱입니다. 작년 포스팅에도 들어 있네요. :) 요즘엔 네이버지도가 많이 따라 왔는데 여전히 다음지도가 지도는 최고인거 같아요. 가끔 서버에 문제가 있는지 느릴때가 있는데, 그럴때는 서브로 네이버 지도를 사용합니다. 사실 호불호가 갈리는 앱이라 딱히 뭐가 더 좋다라고는 말 할 수 없네요.







#4. Things


할일 관리 앱입니다. 아이폰/아이패드 용으로 따로 나와 있구요. 맥을 사용하신다면 맥용 프로그램으로도 나와 있습니다. GTD Tool 로는 꽤 유명한 앱이고 맥용 프로그램과 싱크가 되어서 할일 관리하는데 탁월한 효과를 발휘 합니다. 유료로 지른 후에는 다른 Todo 앱은 사용하지 않게 되네요. :)






#5. me2day


아이폰 사용하시면서 가장큰 변화는 SNS 에 발을 들여 놓게 되는것이지요. 언제 어디서나 접속해서 확인하고 관리하고 싶은 SNS 의 특성상 스마트폰은 최적의 도구라고 할 수 있습니다. 따라서 각종 SNS 앱들이 나와 있습니다. 우리나라에는 토종 SNS 인 me2day 가 있는데, 제가 me2day 를 사용하고 있는지라 하루에도 몇번씩 실행하는 앱입니다. 참고로 제 me2day 주소는 여기 입니다. 친신해 주세요. :)





#6. 네이버웹툰


시간죽이기 끝판왕격인 앱입니다. 만화를 보려고 실행해서 하나 제대로 걸리면 시간가는줄 모릅니다. 화장실갈때 가장 유용하게 쓰이구요. 잠깐 시간 보낼때 SNS 와 더불어서 가장 손이 많이 가는 앱입니다. 제가 가장 챙겨보는 만화는 '노블레스'! 안보신 분들은 한번 챙겨 보시길. :)






#7. 카카오톡


메세징앱으로 국내 점유율 1위를 달리고 있는앱입니다. 약관 문제라던가 최근 업데이트에서 일부 사용자들에게서 친>구목록이 다 날라가는등 사건사고가 좀 있어서 일부 사용자들이 이탈하는 현상도 있었지만 여전히 가장 많은 사용자>들이 사용하는 메세징앱입니다. 사실 이런류의 메신저툴들은 친구들에 의해서 사용이 결정되곤 하는데 저역시도 대부분의 친구들이 카카오톡을 사용하는 덕에 옮길래야 옮길수가 없네요. :) MSN 메신저가 NateOn 메신저를 이길수 없는 이유이기도 하죠? ㅋㅋ




#8. 카카오아지트


카카오톡을 만든 회사에서 만든 폐쇄형 동아리 서비스(?)의 앱버전 입니다. 지금 다니고 있는 회사에서 회사내 협업>을 카카오아지트를 통해서 하고 있어서 처음 사용해 봤습니다. 나름 완성도 있게 잘 만들어져 있어서 비슷한 툴이 필요한 사람들에게 권하고 있습니다. 각종 자료와 게시물들을 공유하고 끼리끼리 노는데 카키오아지트 만한 툴도 없는>거 같습니다.





#9. TiltShift Generator


나온지 한참 됐는데, 여전히 제일 자주 사용하는 사진 보정 툴 입니다. 미투데이에 올리는 거의 모든 사진은 이 툴을 통해 한번 보정을 한 후에 올립니다. 간편한 조작으로 굉장히 훌륭한 결과물을 만들어줍니다. 사진과 관련한 여러가지 앱들이 있지만, 아직 이 앱이 제겐 최고의 툴로 자리잡고 있습니다.






#10. 웨더스타


매일 아침 실행하는 앱입니다. 오늘의 날씨를 알아보는 앱이지요. 우리나라 기상청 정보를 실시간으로 받아와서 제공해 주는 앱입니다. 우리나라 기상청 예보가 잘 틀리긴 하지만, 그래도 믿을만한곳은 기상청밖에 없지요.;; 여러가지 모드로 날씨정보를 제공해서 굉장히 편리하게 사용할 수 있습니다.






이상입니다. 도움이 되셨나요? 이미 너무나도 유명한 앱들이라 신선한것을 원하셨던 분들은 약간 김빠지실수도 있겠어요. 다음에 기회가 되면 재미있었던 앱들만 소개하는 포스팅을 해도 재미있을꺼 같네요. :) 



블로그 이미지

하루하루

하루하루를 열심히 살아가는 그런 사람이 되고자 합니다. 오늘을 후회없이 말이지요.

,

아이폰 앱 개발을 완료 하고 나서, QA 를 위해서 주변 지인 분들이나, 사내 QA 팀에 앱을 배포해야 할 때가 있습니다. 이때 많이 사용하는 방법이 앱을 AdHoc 방법으로 배포를 하는 것입니다. (AdHoc 배포 파일을 만드는 방법은 여러 다른 분들께서 설명을 많이 해 주셨으니, 이번 포스팅에선 넘어갑니다. ) 그런데 이 AdHoc 배포가 여간 불편한게 아닙니다. 저도 그동안 AdHoc 파일을 iPhone 에 설치 하기 위하여 아래 와 같은 절차를 밟았습니다.

 

  1. AdHoc 파일을 다운로드 받는다. 
  2. 아이폰과 동기화 되어 있는 iTunes에 설치한다. 
  3. 아이폰과 동기화 한다. 

위 절차가 번거로운 이유는 2번 때문입니다. 꼭 동기화 되어 있는 iTunes 가 필요하기 때문이지요. 하지만, 이번에 소개하는 툴을 사용하면 iTunes 동기화 없이도 AdHoc 파일을 아이폰에 설치 할 수 있습니다. 


위 툴이 언제 생겼는지는 저도 잘 모르겠네요. :) 위 툴 덕분에 AdHoc 파일을 설치하기가 너무 간편해 졌습니다. 또한, 각종 아이폰과 관련된 설정들을 간편하게 조작할 수도 있습니다. 

일단 위 링크로 따라 들어가서 해당 프로그램을 다운로드 받아서 설치 합니다. 설치를 하면 Application의  Utility 디렉토리에 설치가 됩니다. 실행하시면 다음과 같은 화면을 볼 수 있습니다. 

AdHoc 파일을 설치하고 싶은 아이폰을 USB  로 연결 하시면 DEVICE 섹션에 나타납니다. :)

그리고, Application 부분을 선택하고 (빨간색 네모) 오른쪽 리스트 나오는 부분에 설치하려는 AdHoc 파일을 던져 넣습니다. (Drag & Drop) 

급하게 준비하느라, 위 그림엔 빠져 있지만, AdHoc 파일을 던져 넣으면 설치할 앱 이름이 보입니다. 그러면 설치 준비는 끝입니다. 

Application  에 등록이 되었다면, DEVICE 의 연결된 아이폰을 선택 합니다. 


그럼 위와 같은 화면을 볼 수 있습니다. 오른쪽에는 해당 디바이스와 관련된 설정들을 볼 수 있는 화면이 나타납니다. 그중에서 Application 탭을 선택 합니다. 

Application 탭을 선택하면 현재 아이폰에 인스톨 되어 있는 앱들의 목록이 나타납니다. 각각의 앱  오른쪽에는 uninstall 버튼이 자리잡고 있고, 스크롤을 내리다가 보면 AdHoc 배포 앱의 이름과 버튼이 install 이라고 나타나있는것이 보입니다.

install 버튼을 살며시 눌러 주세요. 그럼 설치 끝.

iTunes 를 이용해서 동기화 하는 방법 보다는 훨씬 깔끔한거 같네요. :)



블로그 이미지

하루하루

하루하루를 열심히 살아가는 그런 사람이 되고자 합니다. 오늘을 후회없이 말이지요.

,

xcode3 은  한 프로젝트당 한개의 창이 열리도록 되어 있습니다. 하지만, 프로젝트를 하다보면 동시에 두개의 프로젝트를 진행하기도 하고 동일한 앱이지만 아이폰/아이패드 용으로 개발할때도 있습니다. 전자의 경우 어떨지 모르겠지만 동일한 앱이지만 유니버셜앱이 아니라 아이폰/아이패드 용으로 따로 앱을 만들겠다 결정이 되면 프로젝트 관리가 참 머리아프게 됩니다.

똑같은 기능과 목적을 가진 앱이기 때문에 개발시 사용했던 모델이 동일하게 사용될 확률이 90%가 넘고, 앱이하는 역할이 동일하기 때문에 동일한 로직을 가지고 있는 컨트롤러가 있을 경우 또한 90%가 넘습니다. 결국, 기능의 확장이 약간 있고 사용자에게 보여지는 뷰가 조금씩 다를 뿐 내부는 똑같다는 말이지요.

이런 상황에서 프로젝트를 두개 만들고 동일한 코드는 복사해서 쓰게 되면 두 프로젝트에서 사용하는 공통 코드에서 수정 사항이나 추가 사항이 발생했을시에 작업을 두군데 모두 해줘야 하는 상황이 발생합니다. 상당히 짜증납니다. 

이를 극복하기 위해서 제일 처음에 한 짓이 공통 코드는 코드의 복사본을 만들지 않고, 코드는 한군데에 두고 각 프로젝트는 코드의 레퍼런스만을 유지한채 개발을 하는 것이었습니다. 하지만, 이 방법 또한 만족스럽지 않습니다. 왜냐하면 프로젝트 창이 두개가 열리기 때문이지요. (이럴때는 workspace 개념이 참 간절합니다.) 게다가 공통 코드가 추가 될때마다 각 프로젝트에서 코드를 추가해야 하는 불편함이 생깁니다. 

그래서 다음으로 적용해 본것이 오늘 설명할 Target 을 이용한 프로젝트 관리 입니다. xcode4 에서는 workspace 개념이 생겨서 이번 포스팅의 관리팁이 별로 소용이 없을 수도 있겠습니다. 하지만, 적어도 xocde3 를 계속 사용하시는 분들과, target 개념을 익히기 위한 분들에게는 도움이 될 것 같습니다. 

첨부하는 샘플 코드는 자동차와 관련된 작업을 하는 앱입니다. 말은 거창한데 그야말로 샘플입니다. :) 상황은 이렇습니다. 앱을 개발해야 하는 디바이스는 아이폰/아이패드 입니다. 아이폰에서는 차를 관리해 주는 앱을 만들고, 아이패드에서는 차를 판매해야 하는 앱을 만들어야 합니다. 이때 Car 라는 클래스는 공통으로 쓰입니다. 

샘플 코드의 구조를 보면 common 그룹과, iPhone 그룹, iPad 그룹 으로 코드를 구분했습니다. 이름에서 딱 감이 오시는 분들도 있으실 겁니다. ^^


그리고 처음에는 한개 밖에 없지만, 새로 Target 을 추가하고 다음과 같이 타겟을 구성 합니다. 


처음에 target 을 만들고 나면 새로 만들어진 target 에는 아무것도 추가되어 있지 않습니다. 타겟이 필요한 파일들을 추가하는 방법은 필요한 파일을 선택해서 Drag & Drop 하는게 제일 쉽습니다. 참고로 타겟내의 Compile Sources 그룹에 .h 헤더 파일이 들어가면 컴파일시 경고를 뿜어 내니까 헤더는 추가 하지 않도록 합니다. 

이렇게 구성이 되었다면, 각 타겟의 빌드 설정을 손봐 줍니다. 각 타겟을 선택을 하고 상단의 Info 버튼을 누르거나 cmd + i 단축키를 통해서 설정창을 불러내서 build 탭으로 갑니다. 그곳에 보면 

어떤 디바이스에서 실행이 되게 할것인지 설정하는 부분이 있고,

컴파일시 적용하는 flag 를 세팅해 주는 부분이 있습니다. 저 부분은 프로그래머가 임의로 정해주면 됩니다. 저 같은 경우는 iPad 에서 돌아가는 앱을 컴파일 할때와, iPhone 에서 돌아가는 앱을 컴파일 할때를 구분해 주기 위해서 IPAD라는 flag 를 만든 경우 입니다. 해당 플래그는 앱 델리게이트에서 사용하고 있습니다. 


그리고, 추가적으로 Info 에서는 프로젝트에서 사용될 info.plist 파일 이름을 지정 할 수 있고, 빌드 되고 나서의 product name 도 설정 할 수 있습니다. :)


이렇게 하고 나서 xcode 상단의 Overview 선택 박스를 열어보면 다음과 같이 되어 있습니다. 

이제 Active Target 을 필요에 따라서 선택하고 컴파일 하시면 성공~!

target 은 동일한 소스로 다른 설정을 적용하여 다른 결과물을 만들어 내는데 응용하면 유용하게 쓰일것 같습니다. 저도 target 을 이용한 프로젝트 세팅은 전부 다 알고 있는게 아니라 좀더 공부하면 더욱 좋은 쓰임새를 찾을 수 있을것 같기도 합니다. 더 좋은것을 알고 계시는 분이 있으면 댓글 달아 주시면 감사하겠습니다. :)


 << 주의점 >>

- 위와 같이 프로젝트를 구성했을경우 디자이너와의 협업을 위해서 두 프로젝트에서 사용하는 이미지 이름이 같아지면 IB 에서 혼동해서 이미지를 불러오는 경우가 생깁니다. 하지만, 실제 컴파일되는 이미지는 제대로된 이미지이니 실제로 컴파일해서 돌려보면 정상적인 이미지가 나옵니다. 





블로그 이미지

하루하루

하루하루를 열심히 살아가는 그런 사람이 되고자 합니다. 오늘을 후회없이 말이지요.

,

아마도 아이폰 개발을 하면서 제일 먼저 하게 되는것은 아마도 UIViewController 의 life cycle 을 이해하는 것일 것입니다. UIViewController 을 만들어 낼때는 두가지 방법이 있습니다. IB 를 이용해서 xib 를 만들어서 하는 방법과, 그냥 IB 를 이용하지 않고 (xib 없이) 오로지 코딩을 통해서만 하는 방법입니다. 이러한 두가지 방법중 어떤 방법을 사용하더라도 UIViewController 의 life cycle 을 이해 하는것은 굉장히 중요합니다. 언제 어느 시점에 적절한 뷰 생성과, 배치 , 해제를 해줘야 할지 알아야 하기 때문이지요. 

UIViewController 의 life cycle 은 나름대로 이해하기 굉장히 쉽습니다. 컨트롤러가 가지고 있는 메소드의 이름들은 그저 이름만 봐도 이해를 할 수 있게 쉽고 동작에 맞는 이름들로 되어 있고, 그 구조 또한 간단하기 때문입니다. 

하지만, 딱 하나의 메소드인 viewDidUnload 만은 이해하기 참 힘들었습니다. 굉장히 간단하고, 평범한 메소드 입니다. 그 뜻은 컨트롤러의 뷰가 내려갈때 불리는 함수 입니다. 근데 이것이 참 애매하기 짝이 없습니다. 

뷰가 내려갈때란 어떤때를 말하는 것일까요? Controller 가 dealloc 될때 일까요? 저도 처음엔 컨트롤러가 해제될때 dealloc 되면서 뷰가 내려갈테니까 viewDidUnload 가 불리는줄 알았습니다. 하지만, 절대로 불리지 않더군요. 그저 dealloc 만 로그창에 찍고 있을 뿐이었습니다. 그래서 좀더 세심하게 수많은 문서를 보고 구글링을 해보았지만, 돌아오는 답변은, 거의 두가지로 압축이 되더군요. 

첫째. viewController 의 view 가 nil 로 세팅될때 불리는 함수이다. 
둘째. 메모리 워닝이 통지 될때 (시스템의 메모리 워닝은 UIViewController 에게 Notification을 줍니다.) 가려진 뷰를 가지고 있는 컨틀롤러의 viewDidUnload 가 불린다.

하지만, 여전히 불리는 시점이 명확하지 않았고, 사용되지 않는다는것이 굉장히 애매했습니다. 

그래서 샘플 코드를 작성해 보았습니다.


  1. View Base 로 프로젝트를 하나 만듭니다.
  2. UIViewController 2개를 만듭니다.
    1. RedViewController , BlueViewController
    2. 각 컨트롤러의 뷰의 색깔을 빨강과 파랑으로 만들어 줍니다.
  3. 새로 만든 두개의 컨트롤러의 뷰를 기본 base view 에 차례대로 붙입니다.
  4. base view 하단 에는 red button, blue button 을 만들어서 각 버튼을 눌렀을때 각 버튼에 맞는 뷰가 보이도록 코딩 합니다.
    1. 이때 사용할 방법이 두가지가 있습니다. 첫째는 각 뷰의 hidden 프로퍼티를 사용하여 보여질 뷰에만 NO 를 세팅하고, 감춰질 뷰는 YES 를 세팅하는 방법.
    2. 두번째가 감춰질 뷰는 removeFromSuperview 메세지를 보내 base view 에서 떼어냈다가 보여질 시점에 다시 addSubview or insertview 하는 방법.
  5. 그리고, 시뮬레이터에서 가상으로 memory warning 을 발생시키도록 합니다.


위 순서중에 4번을 눈여겨 보시기 바랍니다. 4번의 방법중에 , 첫번째 방법으로 구현하고 5번을 실행할때와, 두번째 방법으로 구현하고 5번을 실행할때 중 어떤 방법으로 구현했을때 viewDidUnload 가 발생하게 될까요?

네. 결론은 두번째 방법으로 구현했을 경우 입니다. 즉, 현재 뷰에서 보여주지 않을 뷰는 (필요하지 않은 뷰는) 구지 super view 에 붙여 놓고 있을 필요가 없습니다. removeFromSuperview 메세지를 보내서 떼어 놔야 iOS 에서 "아~ 이 view 는 사용하지 않는 view구나" 라고 인식합니다. 따라서 iOS 에서 통지하는 Memory Warning 메세지를 View Controller 가 받았을때 자신이 가지고 있는 view 를 사용하지 않고 있다면 view 에 nil 을 세팅하게 되고, 그때, viewDidUnload 가 불리게 됩니다.

디바이스에서는 메모리가 항상 부족하므로, 필요없는 뷰는 그때그때 떼어내고 필요할때 붙여서 쓰면 되고, memory warning 이 발생했을시에는 viewDidUnload 에서 필요없는 객체들 또는 뷰들을 해제시켜 메모리를 확보하면 메모리 크래쉬로 앱이 죽는 일은 쉽게 일어나지 않을것입니다.

코드는 한줄 없이 장황하게 글로만 써서 죄송합니다. 샘플코드 첨부합니다. :) 주석은 없습니다. :-p


블로그 이미지

하루하루

하루하루를 열심히 살아가는 그런 사람이 되고자 합니다. 오늘을 후회없이 말이지요.

,

iOS 개발을 하다보면 화면에 직접 그림을 그리거나 이미지를 리사이즈 하거나 크롭하는등의 이미지 핸들링을 할 때가 있습니다. 이때 많은 분들이 공개되어 있는 샘플 소스를 참조하여서 프로그래밍을 하실텐데요. 대부분의 분들이 이해없이 그냥 저렇게 사용하니 그냥 습관적으로 사용하는 부분이 있습니다. 바로 CGContextTranslateCTM 와 CGContextScaleCTM  이라는 함수 입니다. 

저도 그냥 샘플소스 복사해서 쓰다가, 이번기회에 이해를 좀 해보았습니다. 역시나 이해하고나니 별거 아니더라는... -_-;;;

일단 제 경우에는 문서에 나와있는 말이 좀 애매해서 문서만 보고서는 이해가 좀 힘들었습니다. 그래서 제 나름대로 정의를 내려보면 다음과 같습니다. 


void CGContextTranslateCTM ( CGContextRef c, CGFloat tx, CGFloat ty ); 

컨텍스트 좌표의 원점(0,0)을 x , y 크기 만큼 이동 시켜 줍니다. 

예를 들어 

CGContextTranslateCTM(context, 0.0, 480);
이라고 사용하면 일반적으로 iOS 에서 사용하는 좌표의 원점인 왼쪽 위의 원점이 왼쪽 아래로 잡히게 됩니다. 


void CGContextScaleCTM ( CGContextRef c, CGFloat sx, CGFloat sy );

컨텍스트 x,y 좌표의 +,- 방향을 바꾸고 좌표계의 비율을 변경 해 줍니다. 

예를 들어

CGContextScaleCTM(context, 1.0, -1.0);
이라고 사용하면 X,Y 축의 비율은 1.0으로 동일하고, Y 축 좌표가 아래에서 위로가는 방향이 + 방향으로 변경됩니다.


예제코드를 통해서 확실히 의미를 이해해 보도록 하겠습니다. 


위와 같이 코드를 작성하면 결과는 다음과 같이 됩니다. 


이미지도 Quartz 로 불러온것이기 때문에 Quartz 좌표계를 따르는데요, 이때문에 위 두 함수를 적용하지 않은채 컨텍스트에 그림을 그리면 이미지가 상하 반전되어서 나오게 됩니다. 따라서 좌표계를 반전 시켜주시고 그림을 그리면 원상태로 나오게 되는것이지요. 

Quartz 의 좌표의 원점은 왼쪽 아래고, + 방향은 위쪽과 오른쪽 입니다. 이점을 먼저 인지 하시고 위 함수들의 변수값을 조정하시면서 테스트를 해보시면 좀더 이해가 빨리 됩니다. 

블로그 이미지

하루하루

하루하루를 열심히 살아가는 그런 사람이 되고자 합니다. 오늘을 후회없이 말이지요.

,


나잇 & 데이
감독 제임스 맨골드 (2010 / 미국)
출연 톰 크루즈,카메론 디아즈
상세보기



역시. 이런류의 영화는 킬링 타임 용으로 아주아주 적절하다. 

뭔가 머리아프고 힘들어 맘편히 아무생각없이 쉬고 싶을때, 딱 보면 시원하게 볼 수 있는 영화다. 

이제 할아버지 할머니가 되어가시는 탐크루즈 형님과 카메론 디아즈 누님의 액션영화. 

일단 내가 소시적에 무지무지 좋아했던 두 배우라서 영화가 더 끌렸는지도 모르겠다.

오래간만에 탐크루즈의 매력적인 미소를 볼 수 있었고, 아. 정말 늙는건 한순간이로구나 하고 느낄수 있는  

카메론 디아즈를  만나볼 수 있는 영화였다. 말도 안되는 유쾌한 액션은 덤이다. 

무료한 자 한번 즐겨 보시길. 


PS. 흑흑 카메론... ㅜ.ㅜ

블로그 이미지

하루하루

하루하루를 열심히 살아가는 그런 사람이 되고자 합니다. 오늘을 후회없이 말이지요.

,