iOS 어플리케이션 개발을 한 대의 맥에서 한다면 걱정이 없습니다만,

여러대의 맥에서 해야 한다면 인증서를 여러대의 맥에 설치를 해야 합니다.

간단하게 생각하면 개발자 홈페이지에서 다시 다운받아 설치하면 된다고 생각을 하지만, 실상 그렇지가 못합니다.

참..! 그리고 처음 인증서를 발급 받을 때 생성하였던 파일들을 모두 보관해 두시기 바랍니다.

나중에 갱신에 필요할지도 모르니까요^^

여튼, 여러대의 맥에서 개발을 하려면 처음 인증서를 발급받은 맥에서 일정 과정을 거쳐 복사하여 다른 맥으로 옮겨줘야 합니다.


인증서 파일을 복사하려면

응용프로그램 - 유틸리티 - 키체인 접근

을 실행합니다.



키체인에서 로그인, 카테고리에서 인증서를 선택하면 인증서 목록이 쭈욱 나오게 됩니다.

거기에서 관련된 3개의 항목이 존재합니다.

iPhone Distribution, iPhone Developer, Apple Worldwide Developer Certification Authority

이 세가지 항목을 선택하고 오른쪽버튼을 눌러 3개 항목 보내기...를 클릭합니다.



경로를 지정하고 저장을 누르면

인증서를 다른 맥에서 설치할 때 사용할 암호를 생성합니다.



그 후, 현재 매킨토시의 계정 비밀번호를 확인합니다. (3번 확인 할 수도 있습니다.)



이제 이렇게 이쁘게 인증서 내보내기가 완료되었습니다.



다른 맥에 가서 이 파일을 실행시키고 암호를 입력해주면 자동으로 인증서 설치가 완료됩니다 :-)



↓↓↓도움이 되었다면 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓

Posted by yagom

댓글을 달아 주세요

  1. 밤피 2012.03.29 07:55  댓글주소  수정/삭제  댓글쓰기

    감사합니다~잘봤습니다^^즐겨찾기 하고 자주 와서 참고하겠습니다^^

    티스토리는 어케 가입하나요 ㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.03.29 10:36 신고  댓글주소  수정/삭제

      찾아주셔서 감사합니다.^^*
      저도 가입한지 너무 오래되서 기억이 안나네요..ㅠ
      그때는 누군가 초대장을 보내서 가입했던거로 기억하는데요..ㅋ

  2. Favicon of https://zuperztar.tistory.com BlogIcon LarryAhn 2012.04.14 17:29 신고  댓글주소  수정/삭제  댓글쓰기

    캬~~ 블로그에 정말 유용한 정보들만 쏙쏙 있어서 정말 좋네요.

    다년간 윈도우 프로그램만 개발하다가 맥OS 를 살펴시 같이 하려다 보니 다시 초보자가 된 느낌이 많네요 ㅎㅎ

  3. yimcold 2014.02.24 14:46  댓글주소  수정/삭제  댓글쓰기

    짱짱짱짱짱!!!!!!!!!!!
    여기는 정말 유용유용한 정보만 있는듯!!

  4. kpjSkool 2014.03.22 05:29  댓글주소  수정/삭제  댓글쓰기

    감사합니다!
    막 iPad 어플을 개발하기 시작했는데요,
    objective-c부터 도움받는게 정말정말 많습니다.
    나중에 꼭 훌륭한 어플 만들어서 보답해드리고 싶네요
    감사합니다!
    자주 들를게요!


오늘의 주제

1. 맵뷰 띄우기


열 일곱번째 시간입니다.^^

지난 번까지는 화면 전환 기법 몇 가지를 알아보았습니다.
화면 전환은 상황과 때에 맞게 그리고 사용자의 요구에 맞게 적절하게 사용하면 되겠습니다~^^

자 그럼 오늘은 지도(구글 맵)을 한 번 띄워보도록 하지요~
출발~~~~~~~~~~~~


# MKMapView


긴 말 필요 없습니다 ㅋㅋㅋ 바로 실습 들어갑니다.
당연히 지난번 까지 쓰던 프로젝트 그대로 사용합니다~

새로운 뷰 컨트롤러 생성을 위하여 Root폴더에서 우클릭(또는 컨트롤+클릭) 하여 New File...을 선택!


UIViewController Subclass를 선택하고 Next~!
아... 이제 다음부터는 이거 캡쳐 안해야지... ㅋㅋㅋㅋㅋㅋㅋㅋ 


이름을 MyMapViewController라고 해줍니다. 체크박스와 Subclass of를 잘 확인하세요~


자 뷰 컨트롤러가 생성되었으면 MyMapViewController.xib파일을 엽니다.


View위에 Map View를 끌어다 놓습니다. 자동으로 화면 전체에 들어갈거예요~


그 위에 버튼 세개를 살포시 얹어줍니다. 그리고 속성창에 들어가서 Alpha 값을 0.5로 설정해 줍니다~



그 후에 이제 SecondViewController.m으로 갑니다. 우리는 이 MyMapViewController를 SecondViewController에서 Modal View로 띄울 생각이거든요^^
자, SecondViewController.m으로 와서 새로 만든 MyMapViewController를 import해줍니다.


그 후에 아래로 내려와서 지난번에 만들어 놓았던 modalButtonClick메소드를 수정해 줍니다.


그리고 나서 실행을 해 봅니다~
짠! 잘 되시나요?ㅋㅋㅋ


안ㅋ돼ㅋ요ㅋ

빌드에서 에러도 없는데 왜 안될까요 도대체 ㅠㅠㅠ
자... 그럼 우리가 새로 추가한 녀석이 누군가 떠올려 봅시다.
우리가 처음 써보는건 분명히 Map View네요^^

개발문서에서 MapView에 관해 검색해 보았습니다.
Map View의 클래스 이름은 MKMapView입니다.

자... 개발문서에서 Class Reference를 보시면 사용하는 Framework와 사용가능한 버전, 그리고 선언되어있는 헤더가 나오네요~
MapKit.framework와 MKMapView.h 등을 데려와야 하겠군요~


자, 프로젝트를 클릭하고 아래와 같은 곳에 Linked Frameworks and Libraries가 있네요~
말그대로 링크된 프레임워크와 라이브러리가 있어요~
우린 지금 MapKit프레임워크를 추가해야 하므로 +버튼을 눌러줍니다~


MapKit.framework를 Add해줍니다~


자, 이렇게 추가 했으면 잘 실행이 될거예요~

그런데 맵에서 닫기버튼이 동작을 안하면 모달뷰를 닫을 수가 없죠~
이제 버튼 동작을 만들어 봅시다~^^
자, 이거 다 어떻게 하는지 아시죠??
모르면 이 아래 캡쳐에서 오른쪽 위에 Editor가 어떻게 되어있는지 확인해보시구요~
아래 빨간 화살표는, 버튼을 오른쪽버튼 또는 컨트롤 클릭해서 끌어오라는 말씀입니다~^0^


버튼 액션을 요따구로 연결 해주시구요~^^


나머지 두 버튼들도 연결 해줍니다~


또 맵뷰도 똑같이 끌어오는데, 요놈은 액션이 아니라 아울렛으로 연결해주셔야겠죠?^^
요로코롬 연결 해봅니다~


흐미~ 근데 이게 왠 에러!!??
에러 내용을 보니 MKMapView가 Unknown type이라네요..;
얘가 맵뷰를 인식하지 못하고 있어요!!!!!!!!!!!!
그럼 이럴땐 어떻게 해줘야 할까요? 고민고민.. +_+


자, 아까 위에 개발문서에서 MKMapView 클래스를 사용하려면 어떻게 해야 했죠?ㅎㅎ
프레임워크랑 헤더파일을 추가해야 했죠?
헤더파일을 살포시 추가해 줍니다.
이래서 개발문서가 중요하다 중요하다 하는거예요~ 혼자 하다가 모르면 구글보다 요놈이 백만배 빠를수도 있으니까요^^&


짜잔~~~~~~~~~~~~~~
맵을 보셨나요?ㅎㅎㅎ
(p.s 시뮬레이터에서 자신의 위치는 캘리포니아 애플 본사로 찍힙니다.)
아직은 밋밋하고 재미없네요~ 조금 더 해볼까요?


이번에는 내가 있는 곳의 위치를 알아보는 기능도 써보고 싶습니다~
프레임 워크중에 CoreLocation.framework를 추가해줍니다~ 


짜잔~ 추가해주고 아래와 같은 코드들도 입력해 줍시다~
참, 캡쳐에는 빨간 네모가 없지만 CoreLocation.h 헤더도 import해줍니다~


그리고 나서 SEOUL버튼을 누르면!!!???
지도가 뿅하고 오긴 오는데... 흐음... 확대도 안되고 재미가 없네요 ㅋㅋ


그래서 이동도 되고 확대도 되도록 코드를 조금 바꿔 넣어줘 봅시다~
코드에 대한 설명은 코멘트에^^


짜잔~ 이렇게 서울 시청으로 오네요 ㅎㅎㅎ 


그리고 드디어! 내가 있는 곳으로 지도를 움직이고 싶을 때..!! 어떻게 해야 하나???
showUserLocation메소드에 아래와 같이 입력합니다.
그런데 에러...ㅠ_ㅠ
또 뭐가 문제일까요..?


자... 문제에 봉착했다면..?ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
그렇죠 개발문서!
뭔가 의심되는 부분이 있다면 알트키를 누른채로 그녀석 위로 커서를 올리면 손꾸락 모냥이 나옵니다~ 클릭!
그리고 Class reference로 가보는거죠~


MKUserLocation이라는 클래스는MKUserLocation에 선언되어 있군요!?


그렇다면 <MapKit/MKUserLocation.h> 헤더를 추가해 주고 빌드해 봅니다~

그래도... 에러...ㅠ_ㅠ

또다시 의심가는 부분에서 개발문서를 살펴봅니다~ 그 결과 저는 이렇게 두개의 헤더를 추가해줬습니다~
왜 CoreLocation/CLLocation.h 헤더를 추가했는지 여러분들도 찾아 보아용~ 이힛~!ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
(-_- 이런 표정이 되셨다면 죄송...;)


그리고 코드를 이쁘게 적어주고 빌드해봅니다~
빌드성공!!


실행 해 봅니다~
ME, Close, SEOUL 버튼들이 모두 잘 동작하는지 확인합니다~^^*


하아... 힘드네요 ㅠ_ㅠ

이제 아울렛 연결이나 액션 연결... 클래스 생성 등의 소소한거는 캡쳐 그만해야겠어요..ㅋㅋㅋ

요렇게 짧은거 하는데 이미지 캡쳐만 30개..ㅋㅋㅋㅋㅋㅋㅋㅋ

휴휴, 다음에는 또 뭘 해볼까요?

여러분들은 뭐가 더 필요하신가요? 댓글달아주세요~ 진짜 그거 해보게요 ㅋㅋ

저도 맵뷰 처음 써봐서(그래서 개발문서 캡쳐가 많은 것일지도..ㅋㅋ) 부족한 점이 많은데요, 요청하시는게 있으면 배워서라도 포스팅 할게요 ㅋㅋ
 
그럼 이만 빠바이~


by yagom

twitter : @yagomsoft

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   

↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓

Posted by yagom

댓글을 달아 주세요

  1. 이전 댓글 더보기
  2. Newbie 2012.05.22 16:05  댓글주소  수정/삭제  댓글쓰기

    저는 왜 ME 키를 누르면 에러가 날까요.. ㅠㅠ 어플이 잘 실행되고, Seoul, Close 키는 잘 먹는데 Me 를 누르면

    main.m 화일에서

    초록색으로

    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); <<--- Thread 1 :signal SIGABRT


    라고 나오면서 작동이 안되네요 ㅠㅠ

    오타도 없는 것 같았는데 왜 그런지 모르겠네요 ㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.22 23:36 신고  댓글주소  수정/삭제

      아무래도 오타 또는 xib에서 엉킨 것 같습니다...^^;
      메소드를 다시 잘 구현해 보시구요~
      xib파일 가셔서 File's Owner에서 우클릭 하셔서 액션이 잘 연결이 되어있는지, 물음표가 떠있는 노란색 액션이 없는지 잘 확인해 보시기 바랍니다..^^

  3. NewBie 2012.05.23 15:09  댓글주소  수정/삭제  댓글쓰기

    오오!! 역시 전지전능하십니다!!

    제가 shouUserLocation 이라고 오타를 쳤엇더군요 +_+!!!!!!!!!!!!!!!!!!!!!!

    그런데...

    왜 ME 를 누르면, south Pacific Ocean -_-... 이 나오게 되는걸까요...??

    이게 Simulator 로 할 떄는 어쩔 수 없는건가용??

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.23 16:28 신고  댓글주소  수정/삭제

      아아 과찬이십니다^^;
      해결되셨다니 다행이네요~
      시뮬레이터에서는 위치정보를 활용 할 수 없기 때문에 자신의 위치로 이동하는 것이 불가능 합니다 ㅠ_ㅠ

  4. 유유 2012.06.17 10:40  댓글주소  수정/삭제  댓글쓰기

    iOS 처음배우는데 너무 힘들고 어려웠는데 여기서 다배우는거 같아요..

    너무 감사합니다..ㅠㅠ

  5. yjdk 2012.06.21 16:13  댓글주소  수정/삭제  댓글쓰기

    안녕하세요.
    좀 여쭤보고 싶은게 있는데요.
    앱에서 위치서비스를 사용자 동의없이 자동으로 활성화 시키는 것도 가능한가요?
    아니면 자동으로 활성화 시키면 안되는 규정이라도 있나요?
    아무리 찾아봐도 모르겠네요.
    알고계시면 좀 알려주세요~ㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.21 16:56 신고  댓글주소  수정/삭제

      사용자의 허가 없이는 그 무엇도 불가능 합니다... :-)
      그런 규정이 명시되어있는지는 모르겠지만, 사용자의 위치정보를 무단 수집하는 행위이므로 어플리케이션에서 임의로 사용자 위치정보를 사용할 수 없습니다.
      사용자가 허가 하여야 합니다.

  6. Sio 2012.07.17 12:45  댓글주소  수정/삭제  댓글쓰기

    안녕하세요~ 오늘도 잘보고 갑니다~!
    오늘은 궁굼한 점이 있습니다.
    #import 를 할때 <Mapkit/MKMapView.h> 는 헤더파일에서 했는데 왜 다른 아이들은 구현파일에서 하나요.
    그냥 한군데서 한꺼번에 하면 문제가 되는 건가요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.18 00:02 신고  댓글주소  수정/삭제

      안녕하세요 Sio님 :-)
      예리한 지적이십니다 ㅎㅎㅎ
      설명하자면 길어질 것 같은데요, 지금같은 상황에서는 사실 어느쪽에서 하든 큰 상관은 없습니다.
      위의 예제같은 경우는 맵뷰를 인스턴스 변수로 사용하기 위하여 헤더파일에서 임포트 해 준 것이구요, 나머지는 굳이 헤더에서는 사용하지 않기 때문에 구현파일에서 임포트 해 준 것입니다..^^
      그 외에도 이유는 다양하지만 위의 예제의 경우에는 이렇습니다..ㅎㅎㅎ

  7. 박찬균 2012.07.25 13:40  댓글주소  수정/삭제  댓글쓰기

    안녕하세요?
    좋은 강좌로 많은 도움 받고 있습니다. 감사합니다.

    전 iOS 5.1에 Xcode 4.3.3을 쓰고있는데요,

    어째서인지..
    [myMapView setShowsUserLocation:YES];

    알려주신
    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    에 넣지 않고
    - (void)viewDidLoad
    안에 넣어 줬을 때 위치 정보를 확인한다고 물어보고, 위치정보표시가 뜨면서 자기 위치를 취득해 사용할 수 있게 되었습니다.

    확인 부탁드립니다.

  8. jk 2012.09.03 13:22  댓글주소  수정/삭제  댓글쓰기

    대단하십니다. 저는 컴퓨터입문한지 3개월되었습니다. 그런데 초보가 봐도 알 수 있도록 설명해 주셔서 대단히 감사합니다.
    앞으로 많은 지도편달바랍니다.

    - 왕초보 -

  9. bji 2012.09.06 18:34  댓글주소  수정/삭제  댓글쓰기

    mapkit을 이용한 앱을 구현하고 있는데 많은 도움이 됬습니다.
    이 정보와 다른정보를 조합하여, 원하는 위치에 핀을 꽂고 눌렀을 시 팝업이 뜨는 것을 성공하였습니다.

    하지만 제가 궁극적으로 구현하고 싶은 것은
    핀을 클릭했을 때 핀 바로 위에 정보가 뜨는것이 아니라...

    화면 하단에 서브뷰 형식으로 선택한 핀의 이미지, 이름, 설명 등의 간단한 내용을 띄우려고 하는데요...

    서브뷰를 만들어서 핀을 선택했을 때 서브뷰를 보여지면서 정보를 갱신해야하는 것인지...
    아니면 다른 방법이 있는지 궁금합니다.

    xib가 아니라 storyboard으로 한 자료였으면 더욱더 좋았을 테지만...ㅠㅠ 스토리보드는 참 어렵고도 심오한거 같네요.ㅎㅎ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.10.03 21:36 신고  댓글주소  수정/삭제

      한달이나 지난 뒤지만... 정확히 어떤 것을 원하시는 것인지 잘 감이 안오네요 ^^;
      벌써 시간이 흘러 다 해결되셨을까요?ㅎ
      스토리보드가 없어서 죄송합니다 ㅠㅠ

  10. ppange 2012.11.02 06:49  댓글주소  수정/삭제  댓글쓰기

    강의 잘 봤습니다..
    presentModalViewController 가 안되서 아래와 같이 바꾸었는데요..
    에러가 나네요.. (No visible @interface for 'SecondViewController' declares the selector 'presentViewController:animated:')
    어떻게 수정을 해야 할런지 통 모르겠어요.. ㅠ.ㅠ

    - (IBAction)modalButtonClick {
    MyMapViewController *myMapViewControllerForModal = [[MyMapViewController alloc]init];
    [self presentViewController:myMapViewControllerForModal animated:YES];
    }

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.02 16:35 신고  댓글주소  수정/삭제

      iOS6에서 메소드가 변경이 되었기 때문인데요~ 검색해 보시면 금방 찾으실 수 있을거예요 ^^
      http://winplz.tistory.com/203
      이곳을 참고하셔도 좋습니다 :)

  11. hyung 2012.11.08 15:34  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 야곰님~ 이번에도 좋은 글 감사합니다 많이 도움이 되었어요
    실례가 안되면 하나만 여쭤 봐도 될까요?

    혹시 맵자체에 그림을 삽입 할수 있나요?
    예를 들어 현재위치에 자기 얼굴이 나오는 사진 같은게 나온다던가..
    서울 좌표에다가 63빌딩 같은 그림이 지도상에 나오게 할 수 있나요??

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.09 11:17 신고  댓글주소  수정/삭제

      안녕하세요 hyung님~!
      제가 직접 해 본적은 없습니다만...
      아예 방법이 없을 것 같진 않습니다~
      iOS6의 3D 지도에선 또 어떨지 잘 모르겠네요 ^^;
      일단 부딪혀 보셔야 할 것 같습니다 ㅎ

      http://developer.apple.com/library/ios/#documentation/MapKit/Reference/MKMapView_Class/MKMapView/MKMapView.html#//apple_ref/doc/uid/TP40008205-CH3-SW41

      이 부분을 참고해 보시는 것도 좋을 것 같네요~:)

    • hyung 2012.11.09 13:10  댓글주소  수정/삭제

      감사합니다^^

  12. Min 2012.11.13 14:06  댓글주소  수정/삭제  댓글쓰기

    친절한 강좌 잘 보고 있습니다.
    하나하나 따라해 보고 있는 중인데요.

    왜 저의 경우엔 대개의 지명이 영어로 나올까요?
    게다가 지하철 정보 같은 것은 아예 나오지도 않는군요..

    버전의 문제인가요? 아니면 뭔가 추가로 설정해 줘야 하는 부분이 있는걸까요?
    답변 주시면 감사하겠습니다.

    -개발환경
    iMac osX 10.8.2
    XCode 4.5.2 ( 4G2008a )

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.13 14:42 신고  댓글주소  수정/삭제

      아마도 시뮬레이터 또는 기기의 iOS 버전이 6.0 이상의 버전이 아닌가 싶습니다. 6.0 버전으로 업데이트 되면서 지도가 변경이 되었어요.
      그렇지 않다면 시뮬레이터나 기기의 언어설정이 영어로 되어있지는 않으신지요~
      이 포스팅이 6.0버전이 출시되기 이전에 쓰여졌기 때문에 6.0 이상의 버전에서는 결과가 다를 수 있습니다 ^^;

  13. Min 2012.11.14 16:44  댓글주소  수정/삭제  댓글쓰기

    빠른 답변 감사드려요...
    시뮬레이터에서 확인해 보니 말씀하신대로
    언어설정이 영어로 되어 있어서 발생하는 문제였네요..
    이렇게 간단한 것을 감도 못잡고 있었다는데 약간 화가 나기도 합니다.. ㅜㅠ

    하지만, 지하철 정보가 여전히 뜨지 않는 것은
    그저 버전 문제인가 보다 하고 넘어가려고 합니다.
    그것 말고도 공부할게 넘 많아요. ㅋ

    다시 한번 감사드립니당~

  14. asrada 2012.11.17 13:55  댓글주소  수정/삭제  댓글쓰기

    정말 잘 보고갑니다~!
    TalbeView랑 합쳐보고 있는데 잘안되네요ㅠㅠ
    모달뷰 개념이 잘이해안되긴하는데...
    강좌몇강을 보면 모달을 완벽히 이해할수 있을까요?!?!?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.19 10:24 신고  댓글주소  수정/삭제

      모달뷰의 예로는, 아이폰 카카오톡에서 아이템스토어를 눌렀을 때 올라오는 화면같은 것입니다.

      http://blog.yagom.net/135
      http://blog.yagom.net/168
      을 확인해 보시구요, 구글에서 좀 더 검색해 보셔도 좋을 것 같아요 :)

      조금 더 정확히 어떤부분이 부족한지 집어주시면 더 설명해 드릴게요 ㅎ

  15. choboda 2012.12.10 11:57  댓글주소  수정/삭제  댓글쓰기

    정말 훌륭하시네요.. 감동

    (iOS 개발을 입문한지 일주일째)
    근데 iPhone 6.0 simulator에서 맵뷰를 실행시켜면 "Error Domain=NSURLErrorDomain Code=-1004 \"Could not connect to the server" 란 메시가 계속 나오네요

    그리고 시뮬레이터에는 지도가 나타나지 않네요.. 원인을 잘 모르겠습니다.
    뭐가가 문제죠?

  16. 마스터 2013.01.12 22:04  댓글주소  수정/삭제  댓글쓰기

    이거 폰에서해도 ME 가 지중해 가운데로 나오네요 ;; 어떻게 해야할까요??

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.01.13 22:14 신고  댓글주소  수정/삭제

      폰에 로케이션 기능이 켜져있는지 확인하시구요, 처음 앱을 구동할때 위치정보 허용을 하도록 설정하셨는지 확인해 보세용.
      iOS6라면, API등이 변경되서 정상동작 하지 않을 수 있으니 도큐먼트를 참고해 보세요^^

  17. 2013.02.24 04:44  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  18. 딴또 2013.03.11 14:47  댓글주소  수정/삭제  댓글쓰기

    감사합니다

  19. seungjae 2013.08.07 04:57  댓글주소  수정/삭제  댓글쓰기

    2013-08-06 15:53:57.850 UiTest_Buttons_Tabview[2681:907] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<MapViewController 0x1d0658c0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key closeModal.'


    이건무슨에러일까요.. 도무지 알수가없네요..

  20. abcBEAR 2013.09.05 21:41  댓글주소  수정/삭제  댓글쓰기

    iOS 6.1버전을 사용하고 있습니다.
    윗 분이 말씀하신 것 처럼
    [mapView setShowUserLocation:YES]; 함수는
    init이 아니라 viewDidLoad에 입력 해야 정상 동작하는 것 같습니다.

    좋은 강좌 항상 잘 보고 있습니다.
    감사합니다.

  21. Bro 2013.11.09 23:19  댓글주소  수정/삭제  댓글쓰기

    시청에 위치 지정핀을 표시하고 싶은데. 어떻게 해야 하나요?!

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.11.11 09:47 신고  댓글주소  수정/삭제

      google에서 mapkit pin이라고 검색 또는
      http://stackoverflow.com/questions/2699171/how-do-i-add-custom-pins-to-the-iphone-mapkit
      를 참고하시면 될 것 같습니다 :)


오늘의 주제

1. 뷰 위에 뷰 얹어보기 


열 다섯번째 시간입니다.^^

지난 번까지는 네비게이션 컨트롤러에 대해 알아보고, 주석다는 방법에 대해 좀 알아보았습니다.
요즘들어 너무 바빠서 몸이 다섯개라도 모자랄지경입니다 ㅠㅠ 포스팅도 너무 뜸한거 같아 슬프네요 ㅠㅠㅠ

자 그럼 오늘은 화면을 바꿔보는 방법 중에 하나인 뷰 얹고 없애기를 한 번 해보도록 할게요~
스따뚜~~~~~~~~~~~~


# 새로운 프로젝트 생성

지난 번 까지는 iOS5에는 최적화되지 않은 코드였습니다. 물론 최적화되지 않은 코드들에 대한 설명은 거의 하지 않았으니 헷갈릴까 걱정하실 필요는 없습니다용 ㅎㅎ

일단 새로운 프로젝트를 생성합니다~

Tabbed Application 을 선택합니다~

이 프로젝트로 꽤 오랜시간 포스팅 진행하게 될 듯 합니다 ㅎㅎ


저는 프로덕트 이름을 ChangeViews 라고 해줬습니다!

그리고 여기서 지난번이랑 다른점은 Use Automatic Reference Counting에 체크하는 거예요~ 



짜잔~ 프로젝트가 만들어 졌습니다요 ㅎㅎ


한 번 실행시켜 볼까요?ㅎ

지난 번과 똑같이 두 개의 탭을 가진 탭 기반 어플리케이션이 자동으로 생성되어 있네요 ㅎ



화면 좌측에 네비게이션영역의 ChangViews그룹에서 우클릭 또는 Ctrl+클릭을 하여 New File...을 선택하여 줍니다.



그 후에 ThirdViewController라는 이름의 뷰컨트롤러 하나를 만들어 줍시다.
 


자, 그 후에 FirstViewController.xib 파일로 이동합니다. 그리고 우측 아래쪽에 Objects 중에 View를 살짝 끌어서 First View 위가 아니고 격자모양처럼 표시되어있는 FirstView '바깥'영역으로 끌어옵니다.



그러면 네모칸 안에처럼 view와 view가 서로 포함되지 않게 나오게 됩니다~ 즉, 원래있던 View안에 새로 넣은 View가 포함되지 않게 해야 합니다 ㅎ
그리고 오른쪽 메뉴중에 자 모양으로 생긴 메뉴로 가면 뷰의 크기를 조절할 수 있어요~ 280 * 100으로 만들어줘 봅시다~


속성탭으로 가서 배경색은 검은색으로 바꿔주구요~



Objects에서 Round Rect Button 하나를 쭈욱 끌어옵니다. Title은 Remove로 바꿔보았습니다~ 이 버튼을 누르면 이 뷰가 뿅하고 사라질 때 쓰일거예요 ㅎㅎ


그리고 원래 있던 FirstView쪽에 Add라는 Title을 가진 Round Rect Button 하나를 만듭니다~ 이 버튼은 새로운 뷰를 위에 얹을 때 쓸거구요 ㅎ


이왕 이렇게 된거 숨기기 보이기 버튼도 하나씩 만들어 봅시다~


이제 메소드를 만들어 주어야겠죠?ㅎ
FirstViewController.h 헤더로 옵니다.
아래와 같이 코드를 넣어봅시다~

@property 줄은 새로 만들어진 View랑 연결해 줄 녀석이구요~

그 아래 메소드 네개는 버튼들과 연결해줄 녀석들입니다.


이제 구현파일 FirstViewController.m으로 와서 

@property했으니, @synthesize로 받아주어야겠죠?ㅎ

그 아래 메소드 네개를 구현해 줍니다.

여기서 잠깐! #pragma mark - View Control Methods 라고 써놓은 부분!

이건 말 그대로 마크 해놓는 건데요~

요기 표시해 놓은 부분부터 다음 표시 부분까지는 View Control Method 라고 개발자가 표시해 놓는 겁니다.

요렇게 만들어 놓으면 나중에 코드가 아무리 길어져도 관련 메소드들을 쉽게 찾아 볼 수 있어요^^

어떻게 찾냐구요?

화면 중간 위쪽을 보시면 지금 빨간 네모 만든 부분을 클릭해 보세요~ 다들 눌러보실 것으로 알고 다음 설명은 생략합니다^^ 눌러보시면 답 나오거든요 ㅎ


이제 아까 구현해 놓은 녀석들을 연결해 줄 차례입니다~
File's Owner에서 우클릭 또는 Ctrl+클릭 으로 드래그 앤 드롭으로 새로 만든 View로 끌고옵니다~


Outlets에 onView에 클릭!


정상적으로 연결이 되면 앞에 동그라미가 생겨요~


이제는 반대로 File's Owner에서 오는게 아니라 버튼을 오른쪽버튼 드래그 앤 드롭 합니다. 또는 Ctrl키를 누른 상태에서 드래그 앤 드롭!
 



Add버튼이니까 addView와 이벤트를 연결합니다.


자, 그런데 이 방법 말고 또 다른 방법들을 소개합니다~!
이벤트를 연결하기를 원하는 버튼에서 우클릭! 또는 Ctrl+클릭!
하게되면 아래 그림과 같이 Event와 Outlet 등을 연결할 수 있는 참이 똻!!!!!!!!!!




그러면 자신이 원하는 이벤트 또는 아울렛의 오른편에 보이는 빈 동그라이 있지요?
거기서 누르고 File's Owner쪽으로 드래그 앤 드롭 해봅니다~  버튼은 통사아Touch Up Inside 이벤트를 주로 사용합니다.


그 반대로 File's Owner쪽에서 우클릭 또는 컨트롤 클릭하여 연결해 주는 방법도 있습니다~!


이벤트는 Touch Up Inside로~! 물론 다른거 해보셔도 됩니다 ㅎㅎ 어떤 결과가 나오는지 직접 해보세요^^
이렇게 세가지 방법을 소개해 드렸습니다~ 이 세 방법중에 편한 방법을 골라서 쓰시면 될 것 같네요 ㅎ


자, 정상적으로 다 연결되고 난 후에 File's Owner를 우클릭 했을 때 뜨는 창의 모습니다.
전부 잘 연결 되셨나요?^^


자, 제대로 다 되셨으면 실행시켜 봅시다~

과감히 Add버튼을 클릭!!
 

오이잉??
창이 지멋대로 이상한데 붙어버리네요 ㅎㅎ
제대로 잘 붙도록 조정해 줘야겠네요~


자 FirstViewController.m 구현파일로 이동합니다~

addView 메소드에서 한 줄을 더 추가해 줍니다~


자~ 다시 실행~~


이쁘게 잘 나오나요?ㅎㅎ



자, 그럼 여기서 동작을 잘 살펴봅니다~!

Add버튼으로 화면 위에 붙인 녀석은 Remove로도 화면에서 없어지고, Hide로도 없어집니다! 그쵸?

그런데 Hide로 없어진 녀석은 Add해도 다시 나타나질 않습니다~

그리고 Remove로 없애고 나서 Show해도 안나타 납니다!!

오이잉??? 도대체 왜 이런일이???

똑같이 화면에서 없어지고 나타났는데, 동작이 될때가 있고 안될때가 있다???

애매~~~~~~합니다잉~~~~~~

자, 잘 생각해 봅시다용 ㅎㅎ

아까 작성해둔 코드를 보게 되면

addView: 메소드 안에는

addSubview: 라는 메소드가 들어가 있습니다.

이말인 즉슨, 어떠한 view위에 sub(하위) view를 추가하겠다.

말 그대로 '새로운 하위 뷰를 얹어넣겠다' 라는 뜻이겠죠?

하지만 showView: 메소드 안에는 setHidden: 이라는 메소드가 사용된 것을 보게 됩니다.

말 그대로 '숨기지 않겠다!' 이런 뜻이겠죠? 



자, 다시 생각해 봅니다!

addSubView는 원래 없는 녀석이 새롭게 뷰 위로 얹혀진다는 것을 알게 됩니다!
하지만, Hidden은 말 그대로 투명으로 없어져 있어서 눈으로만 안보일뿐 원래 있는 녀석이 보이게 되는 것 뿐입니다!


그 반대로 생각해 봅니다~

removeFromSuperview메소드는 있던 녀석을 뷰 위에서 아예 없애버는 것이구요,

hidden해버리면 우리 눈에만 안보이고 뷰 위에 계속 얹혀있는 상태가 되는 겁니다.


그렇기 때문에 add버튼보다 show버튼을 먼저 누르게 되면, 새로운 뷰가 얹혀져 있지 않은 상태이기 때문에 화면에 나타나지 않게 되는 것이고,

hidden으로 숨겨놓고 add해버리면, 이미 화면위에 얹혀져 있기 때문에 프로그램은 이미 얹혀져 있고 보이지만 않는 것을 다시 얹을 필요가 없으므로, 그상태 그래도 놔두게 됩니다. 즉, 우리 눈에는 보이지 않아도 컴퓨터는 위에 얹혀져 있다는 것을 알기 때문에 동작하지 않는 것입니다.

이해 가시나요?

여튼, 상황과 때에 따라서 이렇게 뷰를 얹고 없애고 보이게 하고 안보이게 하고... 이런식으로 컨트롤 할 수 있다는 것을 간략히 보여드렸습니다~!

다음 번에는... 또 뭘 해볼까요?ㅋㅋ

아직 할것은 태산인데 말이죠 ㅎㅎㅎ

댓글 남겨주세요~!

by yagom

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓
Posted by yagom

댓글을 달아 주세요

  1. 이전 댓글 더보기
  2. 현준이빵 2012.10.14 01:03  댓글주소  수정/삭제  댓글쓰기

    즉, 원래 있던 View와 새로 띄운 View와 상호작용이 안돼나요?;

    죄송합니다 뎃글 한번에 안달아서; 집컴퓨터가 이상해서 확인이 안눌지네요;

  3. asrada 2012.10.27 01:51  댓글주소  수정/삭제  댓글쓰기

    정말좋은강좌...!!

    시간가는줄 모르겠네요ㅎㅎ

    정말 또 잘보고 갑니다!!

  4. Karl 2012.11.07 16:06  댓글주소  수정/삭제  댓글쓰기

    바쁘신 와중에 죄송하지만 질문 하나 드려도 될까요..?
    야곰님 강좌를 처음부터 쭈욱 보면서 따라하고 있는데요
    야곰님이 강좌에서 쓰시는 Xcode 버전이 4.2맞죠~?
    제가 snow leopard로 개발을 진행하고 있는데 사정상(앱스토어 연결이 안되요 ㅠㅠㅠㅠㅠㅠㅠㅠ)
    Xcode를 4.0을 쓰고 있습니다...

    처음부터 강좌를 따라하다보니 강좌와 다른 부분이 꽤 많이 있더라구요..
    그래서 어느 정도 고쳐가면서 제작중인데 이번 강좌는 실행이 잘 안되네요... ㅜㅜ
    Remove를 누르고 다시 Add를 누르면 초록색 바탕에

    Thread 1: Program received signal: "EXC_BAD_ACCESS"

    가 출력되고 멈춰버리네요 ㅠㅠㅠ
    저건 무슨 에러인가요...? ㅜㅜ 찾아봐도 잘 안나와서
    죄송하지만 이렇게 여쭤봅니다 ㅜㅜ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.08 07:39 신고  댓글주소  수정/삭제

      안녕하세요 Karl님~!
      방문해 주셔서 고맙습니다 :)
      말씀하신 내용은 Xcode 버전과는 별개의 문제 같아요^^
      여튼 해결방안을 생각해 보자면... 제 생각에는 버튼에 메소드가 중첩 연결이 되어있거나 잘못 연결이 되어있을 것 같습니다.
      xib에서 버튼을 오른쪽버튼 클릭하여 메소드가 정상적으로 연결되어 있는지 한 번 꼼꼼히 살펴보시기 바랍니다.
      그게 아니라면 코드상에 무엇인가가 잘못되어 있겠죠^^;

  5. hyung 2012.11.15 16:41  댓글주소  수정/삭제  댓글쓰기

    야곰님 안녕하세요! 야곰님이 게시해주신 화면전환게시물 4개를 다 읽고 해봐도 안되는게 있어요 ㅠㅠ
    죄송하지만 혹시 시간되실때 한번 읽어주세요 ㅠㅠ
    음 조금 설명을 드리자면..
    A라는 뷰에 카메라(B라고 말할게요)로 갈 수 있는 버튼이 있어요.
    그 버튼을 눌러서 B로 왔어요
    B는 그냥 카메라가 아닌, 저번에 야곰님이 가르쳐주셔서 만든 커스텀 카메라가 있어요
    거기에 옵션뷰로 이동하는 "버튼"이 있는데 이녀석이 도통 말을 듣지 않네요
    웃긴건요 다른뷰에서 그 함수를 쓰면 잘 알아 듣는데 꼭 카메라에서 쓰면 아무 반응이 없네요
    제 생각에는 처음에 [self.view addSubview.onView]에서 맨 앞에 view가 A뷰라서 안되는거 같은데
    카메라 고유 view포인트라던가 있나요 ㅠㅠ.. 정말 오늘 7시에 출근해서 지금까지 못해가지궁..
    진짜 어떻게든 해보려했는데 너무너무 힘드네요 ㅠㅠ

    쉽게 정리 하자면 A->옵션뷰 로는 가지는데 B->옵션뷰 는 아무 반응이 없어요! 제 생각은 처음에 뷰를 못잡아서 그런거 같은데
    야곰님 의견을 들려주세요 ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.15 17:36 신고  댓글주소  수정/삭제

      :) 안녕하세요 hyung님~
      [self.view addSubview] 가 아니라

      B가 뷰컨트롤러라면 [B.view addSubview:]
      를 사용하시면 되고,
      B가 뷰라면 [B addSubview:]
      하시면 될 것 같습니다 ^^

    • hyung 2012.11.15 17:40  댓글주소  수정/삭제

      네 한번 해볼게요! 항상 친절한 답변 감사드립니다 ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.15 17:46 신고  댓글주소  수정/삭제

      별말씀을요:-) 항상 찾아주셔서 고맙습니다 ㅎ

    • hyung 2012.11.16 11:32  댓글주소  수정/삭제

      안녕하세요! 어제 끙끙거리던게 풀렸어요^^
      카메라가 뷰컨트롤러가 안잡혀서 계속 A뷰에 옵션화면이 뜨고 있던 거였어요 ㅠㅠ
      결국 [self dismissModalViewController]로 그냥 그 화면을 지우고 A뷰에 띄우니 되더라구요.. 흑흑 카메라녀석 뷰 이름을 몰라서..

      근데 또 다른문제가 생겨버렸어요..
      옵션뷰에서 카메라로 돌아가려고 하는데, 카메라뷰를 지우고 띄운거기 때문에, 다시 카메라를 실행시켜야 되는데
      함수를 불러도 반응이 없네요.. ㄷㄷ
      다른 Alert같은 함수들은 되는데 이녀석은 무반응..

      -(IBAction)Camera{
      UIPIckerController*********어쩌고저쩌고
      }
      이녀석이 카메라 함수인데 아무리 불러도 반응이 ㅠㅠ

      그냥 카메라 함수 전체를 복사해서 옵션뒤로가거버튼에 그 함수를 넣자니 그건 좀 아닌것 같구요 ㅠㅠ.. 왜 안되는 걸까요

      아.. 참고로 카메라 함수가 있는 파일과 옵션뷰가 있는 파일이 서로 다릅니다. #import해서 불러오려는데.. 흑흑
      [self.cameraModule Camera];이렇게 했는데 안되구요
      [self.cameraModule Alert];이런 메세지띄우는 함수는 되는데.. 뭐가 다른거죠 ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.16 15:16 신고  댓글주소  수정/삭제

      흐음... 무슨말씀이신지 잘 감이 안와요 ㅠ_ㅠ
      말로만 들으니 잘 모르겠네요 ㅠㅠㅠ
      에고... 고생이 많으실텐데

    • hyung 2012.11.16 15:42  댓글주소  수정/삭제

      음.. 간단히 말씀드리면요
      OptionView라는 파일에서
      CameraModule파일에 있는 함수를 가져다 쓰려고 하는데

      A(Alert)라는 함수는 불러지는데
      B(Camera)라는 함수는 안불러져요
      둘다 제가 만든 녀석들이구요..
      두 함수 다 CameraModule이라는 파일에 있구요
      OptionView에서 버튼을 누르면
      CameraModule에 있는 카메라 함수를 실행시키려고 했거든요..
      그게 안되네요 ㅠㅠ 근데 웃긴게 Alert함수는 되더라구요.. ㅠㅠ
      진짜 점점 카메라가 싫어지고 있....

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.16 17:36 신고  댓글주소  수정/삭제

      일단 그 메소드 내부에 로그를 찍어서 메소드가 호출이 되는지 확인을 해보는 것이 우선일 것 같구요, 버튼과 확실히 잘 연결이 되어있는지 확인해 보시구요, 그래도 아니라면 카메라를 어떤식으로 불러들이는지 확인을 해봐야 할 것 같습니다 ^^;

    • hyung 2012.11.19 09:17  댓글주소  수정/삭제

      허헛.. 다시 주일의 시작이네요! 야곰님 조언받아 다시 해볼게요^^

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.19 10:25 신고  댓글주소  수정/삭제

      :) 넵 또 새로운 시작이네요~!
      행복한 한 주 되시길 빕니다 ㅎ

  6. hyung 2012.11.19 10:59  댓글주소  수정/삭제  댓글쓰기

    안녕하세요! 요새 야곰님을 매우 귀찮게 하고 있는 형 입니다..
    CameraModule파일에
    -(void)Camera{
    -카메라 실행 소스
    }
    라는 메소드가 있을때

    같은 CameraModule파일에서
    -(IBAction)button{
    [self Camera];
    }
    라고 하면은 실행이 되잖아요?

    그렇다면! OptionView.h라는 파일에서
    #import CameraModule.h
    해서 Camera메소드를 사용해고 싶을때는 어떤식으로 써야 하나요
    [self Camera]라고 하면 오류나와요 ㅠㅠ.. 기본개념이 없어서 죄송합니다..
    어떤 식으로 불러들여야 할지 ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.19 10:56 신고  댓글주소  수정/삭제

      안녕하세요 hyung님~
      언제든 저를 괴롭히셔도 상관은 없습니다 ^^;
      self라는 녀석은 자기 자신(객체)를 지칭하는 역할을 하므로 당연히 다른객체에 있는 메소드를 가져다 쓰려고하면 에러가 나겠죠^^
      일단 제 Objective-C 포스팅을 쭉 한번 보면서 기본 문법에 대한 정리를 해 보시고, 클래스 메소드로 만들어 보시면 더 편하게 사용하실 수 있을 것 같습니다.

      아무리 질문을 많이 하고 검색을 많이 해서 당장 해결 할 수 있고 잔기술을 써볼 순 있지만, 기초가 없으면 빠른 시일내로 무너지게 되어있습니다.

      지금 당장은 오래 걸리는 것 같아도 기초부터 차근차근히 다시 배우고 정리하는 것이 가장 빠른 지름길일 것이라고 생각합니다 ^^*

      처음부터 차근차근 기초를 되짚어 보셔요 :)

  7. hyung 2012.12.04 17:12  댓글주소  수정/삭제  댓글쓰기

    야곰님 포스팅엔 정말 중요한게 많아요^^~

    addsub뷰 지우는거 찾다가 검색해보니 역시나 있네요!

    또한번 도움받고 갑니다^^~

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.12.04 19:45 신고  댓글주소  수정/삭제

      중요하다기 보다는 기초적인 것이겠죠...ㅎ
      물론 기초가 가장 중요하긴 하지만...
      내가 뭔 말을 하고 있는건지 +_+ㅋㅋㅋ

  8. Favicon of http://deoker.com BlogIcon Deoker 2013.01.02 17:03  댓글주소  수정/삭제  댓글쓰기

    좋은 강좌 너무 감사 드립니다 :D

  9. Lewis6 2013.01.03 11:19  댓글주소  수정/삭제  댓글쓰기

    저는 처음에 First View 바깥 쪽에 뷰를 놓고 나서 추가한 뷰의 사이즈 조정이 안되어서 몇시간을 낭비했네요. ㅠㅠ
    처음에 속성탭에서 Simulated Metrics Size 가 Retina 4 Full Screen 로 되어 있는데 그것을 Freeform 으로 변경해서 사이즈 수정을 할 수 있었습니다.
    Xcode 4.5, iOS 6.0 기준입니다 ;;

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.01.03 20:01 신고  댓글주소  수정/삭제

      안녕하세요 Lewis6님!
      찾아주셔서 정말 고맙습니다 ㅎ
      Xcode가 버전이 변경되면서 좀 바뀐 부분들이 있죠^^;
      부가적인 설명 남겨주셔서 정말 고맙습니다!
      새해 복 많이 받으셔요 ㅎ

    • 난나야 2013.12.19 10:55  댓글주소  수정/삭제

      와 감사합니다^^

      덕분에 사이즈 조절 할 수 있었습니다. ㅎㅎ

    • NanMin 2014.03.23 13:23  댓글주소  수정/삭제

      저두 1시간째 보다 혹시나 해서 댓글보니 역시 저같은분이 계셨네요..감사합니다….ㅎㅎ

  10. hyun 2013.02.10 23:02  댓글주소  수정/삭제  댓글쓰기

    좋은 강좌 감사드립니다~!
    저도 윗분처럼 추가한 뷰의 사이즈 조정이 안되어서 몇 시간 허비했네요..ㅠㅠ
    버전마다 바뀌는 게 많아서 따라하기도 어렵네요..ㅠ

  11. 딴또 2013.03.08 18:52  댓글주소  수정/삭제  댓글쓰기

    이번 강의도 감사합니다.

  12. 퐝칭칭 2013.03.28 14:33  댓글주소  수정/삭제  댓글쓰기

    아 정말 답답한게 다사라지는 곳입니다 여긴 ...... ~,,~
    혼자 공부하면서 얼마나 생고생을 했는데
    정말 감사드립니다 야곰 님 앞으로도 1강부터 지금까지 쭉따라왔는데 너무 좋아요~
    사랑합니다 ㅋㅋㅋㅋ

  13. dklee7206 2013.04.29 21:55  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. 강좌 잘 보고 있는 초보입니다.

    강좌중에 File's Owner에서 검정색 뷰로 땡겨서 onView가 동그라미 생기게 하라고 하셨는데, 안해도 실행은 되는데
    어떤 차이가 있는지 궁금해서요, 안바쁘실때 답변 부탁드립니다.

    dklee7206@naver.com

  14. nari 2013.05.14 16:24  댓글주소  수정/삭제  댓글쓰기

    정주행 하면서 하나씩 다 따라해보고 있는데
    점점 재밌네요^^ 감사합니다~

  15. yimcold@gmail,com 2013.07.23 08:16  댓글주소  수정/삭제  댓글쓰기

    안녕하세요! 이 블로그를 한줄기 빛 처럼 여기며 살아가는 iOS에 매우 초보자입니다.
    덕분에 많은 내용 얻어가고 있습니다.

    두가지 질문드릴게 있는데요

    1.여기에서 thirdViewController파일은 이용하지 않는 것 처럼 보이는데 왜 추가하신 건가요?

    2. 저는 thirdviewController에서 구현한 뷰를 부분뷰 처럼 집어넣고 싶은데 그게 가능 할까요?
    그러니까 현재는 B.xib에서 버튼이 들어있는 부분뷰를 구현해서 히든/쇼/하고 있잖아요~ 그렇다면 A.xib파일에서 구현한 뷰를 B.xib에서 부분뷰로 사용하는게 가능한가요?

    우문이지만 현답해 주실것으로 믿습니다 ^.^
    감사합니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.07.23 09:36 신고  댓글주소  수정/삭제

      ㅎㅎ 안녕하세요~!

      1. 매의 눈을 가지셨군요!! 글쎄요... 제가 왜 안썼을까요 'ㅁ'
      아마 제가 뭔가 해보려다가 안하고 이거만 포스팅 했었나봐요 ㅎㅎㅎ 신경쓰지 않으셔도...ㅎㅎ

      2. 당연히 가능합니다 :) iOS 6 이상이라면 Container View Controller를 활용할 수 있구요, 그 이하 버전이라도 다른 방법으로 가능합니다 ㅎ

      컨테이너 뷰 컨트롤러 예제는 애플 문서에 잘 나와있습니다 :) 참고해 보세요 ㅎ

      http://bit.ly/Vksa9N

      그 이하 버전에서 사용할 수 있는 방법은
      살짝 다른 개념이지만 이 부분을 참고해 보세요.
      http://www.ralfebert.de/tutorials/iosdev/viewcontroller/
      위 예제에서 네비게이션 컨트롤러 대신 지금 사용하고 있는 뷰 컨트롤러 위에 예제와같이 뷰 컨트롤러를 올리고 클래스(ThirdViewController)를 지정해 주면 됩니다 :)

  16. yimcold@gmail,com 2013.07.23 19:51  댓글주소  수정/삭제  댓글쓰기

    와!!!!!!!
    주신 아이디어로 여러문제 해결했습니다!!!
    자주 들를게요. 야곱님 감사합니당!!!!!

  17. Hide 2013.11.10 15:30  댓글주소  수정/삭제  댓글쓰기

    감사합니다

  18. tmsnvl 2014.10.10 10:16  댓글주소  수정/삭제  댓글쓰기

    안녕하세요~!!
    좋은 강좌 잘 봤습니다.
    강좌를 보고 질문이 있는데요~
    지금 현재는
    [self.view addSubview:onView];
    [onView setFrame:CGRectMake(20.0f, 300.0f, 280.0f, 100.0f)];
    으로 좌표를 조정해서 밑에 버튼을 가려놓으셨는데 가려져 있지 않다고 했을때
    밑에 부모뷰의 클릭 이벤트는 어떻게해서 막을수 있나요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2014.10.10 10:22 신고  댓글주소  수정/삭제

      안녕하세요~
      뷰에 보면 userInteractiveEnable (?) 이라는 프로퍼티가 있을거예요.
      NO로 설정해주시면 이벤트를 받지 않습니다 :)

  19. tmsnvl 2014.10.10 17:32  댓글주소  수정/삭제  댓글쓰기

    앗~!! 빠른 답변 감사드립니다~ㅎㅎ
    제가 질문을 잘못했나봅니다.
    addSubview 로 팝업을 띄우면 팝업 외의 다른 버튼이나 이벤트
    즉 부모뷰의 Add 버튼이나 Show 버튼은 이벤트가 안먹히게 하고 싶습니다.
    팝업 뷰의 Remove, Hide 버튼 이벤트는 되구요
    물론 팝업 뷰가 사라지면 다시 버튼 이벤트가 정상 동작하게 하고 싶구요~

    아직 많이 부족해서 야곰님이 힌트 주신걸로 이렇게 해보니
    [self.view addSubview:onView];
    [self.view setUserInteractionEnabled:NO];

    팝업뷰도 이벤트가 안먹히네요 ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2014.10.10 18:29 신고  댓글주소  수정/삭제

      음... 버튼들도 기본적으로 UIView의 확장이기 때문에 같은 프로퍼티를 줄 수 있습니다. 버튼들을 IBOutlet으로 연결하고 각자 버튼들을 컨트롤 해줄 수도 있는데, 잘 이해가 가지 않으시면.. 차후 IBOutlet을 연결하는 방법을 터득하신 후 다시 보시면 이해가 되지 않을까 싶습니다 ^^

  20. VSblue 2015.08.25 10:27  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 좋은강좌 잘 보고 있습니다.
    질문이 있는데요

    스토리보드에 view를 드래그래서 띄울려고하는데 자꾸 view가 드래그가 안되네요...어찌해야되죠...

    • Favicon of https://blog.yagom.net BlogIcon yagom 2015.08.25 12:21 신고  댓글주소  수정/삭제

      안녕하세요 :)
      스토리보드에서 View 대신 View Controller를 올려주세요~ 스토리보드에는 뷰 대신 컨트롤러들을 올릴 수 있습니다 :)

  21. 넘나다른것 2016.09.27 13:41  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. 강좌 너무 잘보고 있습니다! 앞에것은 어찌어찌 따라했는데.. navigation controller부터 따라하기가 힘드네요 ㅜㅜ

    이번편은
    view를 만들어서 File's owner에서 드래그했는데 onView가 안떠요...ㅠㅠ

    그 전에는 스토리보드에서 view controller로 만들었었는데 그것도 안되서 다시 해본 거거든요 ㅠㅠ
    xcode가 너무 바뀌어서 따라하기 정말 힘드네요 ㅠㅠ 도와주세요 ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2016.10.01 18:29 신고  댓글주소  수정/삭제

      안녕하세요 넘나다른것님!

      iOS 버전이 많이 바뀌어서 해당 내용들은 많이 사라지거나 바뀌었고, Xcode 또한 변화가 많았습니다. 초보자의 입장에서 요즘 이 튜토리얼을 제대로 따라하기에는 무리가 있습니다 ㅠ_ㅠ 최신의 좋은 예제들을 따라해 보심이 어떨까 합니다.

      많은 도움을 드리지 못해 죄송합니다.


오늘의 주제

1. 주석 ( Comment, 코멘트 )


열 네번째 시간입니다.^^

정말 오랜만에 뵙겠습니다...
알고 계시다 시피 저의 맥북 에어가 구입한지 일년도 되지 않았는데...
누군가 슬쩍 해 갔습니다...ㅠㅠ
어흑...
일단 핑계지만...
어흑..ㅠㅠ
여튼... 다시 차근차근 포스팅 해 보려 합니다.

탭 뷰 컨트롤러, 네비게이션 컨트롤러 등을 쭈욱 살펴 왔었는데...
잠시 딴얘기 한 번 해보려 합니다.
저도 좀 더 빨리빨리 이것저것 써보고 싶지만, 
중요하다고 생각하는 만큼 빼놓고 갈 수가 없네요..^^

사실 Objective C와 C 포스팅 중간에 다 들어가 있습니다.
그런데 여기 또 다시 캡쳐하기도 거시기 해서 Objective-C 포스팅에서 퍼왔습니다.
기본적인 내용은 동일 하므로, 제가 저기에 적어 넣은 코드들은
어플리케이션의 AppDelegate.m 파일의
application:didFinishLaunchingWithOptions: 메소드 안에 작성하시면 됩니다.

자, 다시 출발!!


# 주석

주석이 무엇인가 궁금하시죠?ㅎ
다른 블로그나 책에서 한 챕터를 잡고 주석을 설명하는 경우는 거의 없습니다만..
주석은 생각 외로 굉장히 중요한 역할을 하며, 프로그래밍의 첫 습관을 들일때 매우 중요한 녀석이라고 생각합니다. 물론 실무에서도 굉장히 중요합니다.
그래서 주석은 한 챕터로 잡고 설명하려 합니다!!
오늘 포스팅은 짧습니다만, 꼭 기억해 두셔야 할 포스팅입니다^^*

주석.. 코멘트.. 같은 말입니다!
주석은 코드에 아무런 영향을 미치지 않지만, 이 코드가 어떤 코드인지, 무슨 역할을 하는 것인지에 대한 설명을 적어놓는 메모 같은 것입니다.

그런데 이게 왜 중요하냐구요?
정말 간단한 프로그램이라면 굳이 필요 없을지도 모르지만, 나중에 백줄, 천줄, 만줄 ... 길어지는 프로그램이라면 내가 짜 놓고도 이 부분이 어떤 부분이었는지 기억하지 못하는 경우가 허다합니다 ㅋㅋㅋ
나는 기억력이 좋아서 아닐거라구요?
훗...!절대 그렇지 않습니다!
십수년 프로그래밍 한 고수분들도 꼭 적어두는 것이 주석입니다.
정말 코드 짜기도 바빠 죽겠는데 그런거 적을 시간이 어디있냐구요?
그래도 해야 합니다!!
나중에 현업에 가서 협업을 할때에도 굉장히 중요합니다.
내가 짜놓은 코드는 내가 해석하기 쉬울지 몰라도 다른 사람이 같이 일하면서 내 코드를 볼 때, 이해가 가지 않으면 일이 그만큼 늦어지고 심지어는 프로젝트가 망가지기도 하니까요.
제가 여기서 중요하다고 백만번 말해도 모자랄 만큼, 주석을 다는 것은 정말 중요한 습관입니다.
처음부터 주석을 다는 습관을 들여 놓으셔야지 나중에 후회하지 않고, 힘도 덜 드실것을 저는 장담합니다!!

이렇게 말하니까 주석 다는 것이 정말 어려운 것 같지만, 사실은 정말 간단합니다!
한 번 보시죠 ㅎㅎ

자... 화면에 보이는 저 녹색 글씨들 보이시죠? 저것들이 모두 주석입니다.
프로그램을 실행시켰을 때는 전혀 티가 나지 않지만, 작업하는 프로그래머는 보게 되는 저것이 주석입니다.
컴파일 할때 컴파일러가 주석은 모두 제외하고 컴파일 하게 됩니다.


 




위의 코드 실행 결과 화면입니다.
녹색으로 주석처리된 녀석들은 화면에 나오지 않죠???
코드 해석이 어려우시면 지난번 포스팅을 다시 한 번 보고 오세요^^



자... 조금 수정해서 보여드릴게요~!
어떻게 뭐가 달라졌는지 비교해 가면서 보세요^^


결과 화면입니다~!



로그에 찍힌겁 보시면 깨알같은 팁도 있죠?ㅎㅎㅎ
여기에 직접 쓰지 않을테니 한 번 사용해 보세요^^ 


중요한 주석 처리하는 방법은 간단합니다!


// 주석......
이런식으로 주석을 작성하게 되면 한 줄이 주석처리 됩니다.
즉, 한 줄을 자신이 쓰고 싶은 말들을 써놓을 수 있죠.


또한, 
/* 주석...
여러줄
쓸 수 있는
주석... */ 


이런식으로 처리를 하게 되면 여러줄을 주석처리 할 수 있습니다.

참 쉽죠잉!?

위에 예시로 작성한 코드에서는 주석을 위나 아래에 달아놓았는데, 코드 바로 옆에 붙여 써도 무방합니다~
무슨말인지 잘 이해가 안가시면 직접 해보세요 ㅎㅎ
다시 한 번 말씀드리지만, 컴퓨터 안고장납니다잉 ㅋㅋ 폭발 안합니다잉 ㅋㅋㅋ
주석 다는 스타일을 같이 협업하는 사람끼리 정하거나, 자신만의 스타일로 작성해도 됩니다. 딱히 정해진 틀은 없어요^^ 

앞으로 제가 포스팅을 할 때 마다 주석을 일일히 달며 하지는 못할 거예요.
하지만, 여러분은 제 포스팅을 보며 공부 하실때마다 코드에 꼭 주석을 달아주세요!!
부탁드립니다~!
이것은 정말 중요한 습관임을 다시 말씀드립니다!
그래서 일부러 한 챕터를 내서 포스팅을 한거예요~

그럼 긴 잔소리는 여기까지만 하고 다음 번에 뵙도록 해요^^*

뿅!


by yagom

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓
Posted by yagom

댓글을 달아 주세요

  1. 늙은독자 2012.01.31 18:43  댓글주소  수정/삭제  댓글쓰기

    맥북에어 ...

    가슴이 아프네요....T_T

  2. Favicon of http://www.theuniuni.com/ BlogIcon cheap bras 2012.06.25 12:38  댓글주소  수정/삭제  댓글쓰기

    Amazing write-up! This could aid plenty of people find out more about this particular issue. Are you keen to integrate video clips coupled with these? It would absolutely help out. Your conclusion was spot on and thanks to you; I probably won’t have to describe everything to my pals. I can simply direct them here

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.25 15:54 신고  댓글주소  수정/삭제

      I don't know how to make a video clip for these...
      If you can, let me know about it.
      But I cannot understand ur words.
      Is this post has a conclusion?
      Do u understand what the post means?
      If you can direct ur friends, I can write it in Eng either.

      p.s.
      If my question were rude to you, forgive me buddy.
      It's just lack of my expression skill.

  3. 컴맹 2012.06.28 17:38  댓글주소  수정/삭제  댓글쓰기

    헐..맥북에어..ㅠㅠ
    어쩌다가...ㅠㅠ

    암튼 강의 잘보고 갑니다.~

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.29 09:43 신고  댓글주소  수정/삭제

      안녕하세요 컴맹님 :-)
      그 맥북에어 생각하면 아직도 가슴이 아려옵니다...ㅎㅎ
      찾아주셔서 고맙습니다 ^^*
      자주자주 놀러오세요 ㅎ

  4. neoaero 2012.07.26 12:46  댓글주소  수정/삭제  댓글쓰기

    주석을 그리 중요하게 생각하지 않았는데 명심하겠습니다...^^

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.08.24 17:52 신고  댓글주소  수정/삭제

      ㅎㅎ 넵~!
      주석이 중요하죠...ㅎㅎㅎㅎㅎㅎㅎ
      사실 저도 업무중에 바쁘다보면 안쓰고 지나가 버리는 경우가 많은데 다음에 볼 때마다 후회하죠 ㅠㅠ

  5. chosamong 2012.08.24 17:44  댓글주소  수정/삭제  댓글쓰기

    흑 맘 아픈 맥북 에어...
    또 생각나게 해 드리네요. ㅠ.ㅠ;

    주석 달기 정말 정말 어려버요.
    그래도 배웠으니 이제부터라도...

    감사 인사 꾸우벅 <(__)>

  6. 2013.02.23 17:03  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  7. 딴또 2013.03.07 16:35  댓글주소  수정/삭제  댓글쓰기

    강의 감사합니다.


오늘의 주제


1. 기기별 Icon추가 및 관리하기
2. 해상도별 이미지 처리

열 번째 시간입니다.

지난번에는 TabView기반 어플리케이션을 만들어 보았습니다~!

오늘은 지난 번에 다음 번에 얘기 해 보자고 한 이미지에 대해 얘기해 보려 합니다...ㅎㅎ

자 이제 본론으로 고고 ^^

# 어플리케이션 Icon관리하기

지난번에 만들어 놓았던 MyFirstTabbedApp을 이용해 볼까 합니다~

그 전에 아이콘 파일들에 대해 좀 살펴봐야 할 것 같아요~
제가 미리 만들어본 아이콘 파일들입니다.


이게 다 뭐냐구요?ㅋㅋ
설명해 드릴게요.
아이콘 안에 들어가 있는 숫자들은 아이콘 이미지의 크기입니다.
29 x 29  부터 114 x 114까지 다양하지요?
지금부터 설명 들어갑니다~!

 파일명 사이즈  용도 
Icon.png  57 * 57 
iPod 터치 3세대 이하
iPhone3GS 이하 
디스플레이의 홈화면 아이콘
Icon@2x.png 114 * 114 
iPod 터치 4세대 이상
iPhone4 이상 Retina 
디스플레이용 홈화면 아이콘 
Icon-72.png  72 * 72
iPad 및 iPad2
홈화면 아이콘 
Icon-Small.png   29 * 29
iPod 터치 3세대 이하
iPhone3GS 이하
스포트라이트용 아이콘 
Icon-Small@2x.png 58 * 58 
iPod 터치 4 이상
iPhone4 이상 Retina
스포트라이트용 아이콘 
Icon-Small-50.png   50 * 50
iPad 및 iPad2
스포트라이트용 아이콘 

조금 감이 오시나요?
아이콘 종류가 뭐가 이렇게 많냐구요?
기기별로 지원 해상도와 화면 크기가 다르기 때문이죠~
아, 그런데 물론 기본아이콘인 Icon.png하나만 넣어도 모든 기기에서 똑같은 아이콘을 볼 수 있긴 하지만 기기별로 아이콘이 약간 뭉그러져 보이거나 깨끗해 보이지 않을 수 있기 때문에 분리해서 넣어주는 거예요.
분리해서 안넣어준다고 쇠고랑 차지 않아요~
그냥 안이뻐 보이면 안좋으니까 하는거예요~
ㅋㅋㅋㅋㅋㅋㅋ

아, 또 스포트라이트가 뭐냐구요?
iOS의 기능 중에 하나인데, 홈화면에서 왼쪽으로 쭈욱 끝까지 화면 이동하면 검색하는 화면이 나올거예요.
거기가 스포트라이트 검색창입니다.
기기에 있는 모든 정보들을 검색할 수 있는 곳이죠.
그 목록에는 조금 작은 아이콘을 넣어놓으면 이미지 로딩 속도가 더 빠르기 때문에 스포트라이트용 아이콘을 따로 넣는 건데요, 사실~ 이것도 굳이 넣어주지 않아도 됩니다.

하지만 그냥 유저들을 위한 깨알같은 서비스?ㅋㅋㅋ
여튼 이렇게 여러 크기의 아이콘을 만드는 이유를 조금 이해하시나요?

제가 먼저 만든 아이콘은 파일 첨부 해 두었습니다^^


그럼 이 아이콘들을 직접 어플에 적용시켜 봅시다.

지난 번에 만들었던 어플을 다시 한 번 실행시켜 봅시다^^* (아, 물론 그냥 비어있는 어플 만드셔도 상관없습니다~)
 

일단 아이콘 이미지들을 넣어 줄 그룹을 생성했구요~


아이콘 파일들을 끌어다 넣어줍니다.
가져올때 복사에 체크 해 주시는거 잊지 마시구요~

[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile25.uf@190B50334ECCA5A6301C13.png%7Cwidth=%22500%22%20height=%22343%22%20alt=%22%22%20filename=%222.png%22%20filemime=%22image/jpeg%22%7C_##]
 총 6개가 되겠죠?ㅎ

그런데... 이렇게 여섯개나 되는 파일을 일일히 저장하기 귀찮죠...ㅠㅠ
그런 분들을 위한 어플이 존재합니다~
Mac App Store에 가셔서 iConify라는 어플리케이션을 받아 설치하시면 한방에 모두 해결해 드립니다 ㅎㅎㅎ

iConify

또는 Icon Express를 이용하세요~

Icon Express


네비게이션 영역에서 MyFirstTabbedApp-Info.plist 파일을 찾아 클릭해 봅시다.
새로 프로젝트를 만드신 분들께서는 <ProjectName>-Info.plist 의 형식으로 자동생성이 되어있을거예요.
plist파일은 Property list 파일입니다. 즉, 속성값들을 갖고 있는 파일입니다.
지금 선택된 이 plist파일은 이 어플리케이션의 속성과 설정 값들을 저장하고 있는 파일이라고 생각하시면 됩니다~!
잘 보시면 Icon files라는 행이 보이실거예요.
오른쪽에 보시면 0 items라고 써있는게 보이구요~


우리는 6개를 넣어줄거니까요~
Icon files 좌측에 보시면 화살표가 보이는데, 아래로 향하도록 한번 클릭해 주시고~
Icon files라는 행이 파란색으로 표시되어 있는 상태에서 엔터 한번 눌러주시면 아래 item 0 이라는 행이 하나 생길거예요~
여섯 행을 만들어 줍시다.
그리고 아이콘 파일들의 이름을 쭈욱 적어줍니다~! (대소문자 구별 합니다)


그리고 실행시켜 볼까요?
시뮬레이터에서 보니 아이콘에 57 x 57 이라고 보이시죠?
제가 Icon.png 파일에 57 x 57 이라고 적어놓았으니 이렇게 나올거예요~
그런데, 시뮬레이터 화면은 분명히 아이폰4 모양인데 왜 57 아이콘이 나올까요?ㅠㅠ


자, 시뮬레이터는 기본적으로 레티나 디스플레이가 아닌 기기로 설정이 되어있습니다.
시뮬레이터 실행 중에 상단에 메뉴표시줄에서 Hardware-Device-iPhone(Retina)를 선택하여 레티나 화면으로 변경하여 봅시다.


짜잔~ 아이폰4 이상에서 지원되는 레티나 화면에서는 114 아이콘 (Icon@2x.png)가 정상적으로 나오네요~


그럼 디바이스를 아이패드로 바꾸면? 
짜잔~ 72 아이콘이 나와욬ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
아 신기해랔ㅋㅋㅋㅋㅋㅋㅋㅋ


그런데, 나는 아이콘에 발광 효과를 넣지 않았는데 여기는 자동으로 나와요~
없애고 싶으신 분들을 위하여 방법을 알려드립니다~
다시 plist파일로 돌아와서 공백에 대고 마우스 오른쪽 클릭!
또는 컨트롤+클릭 하시면 메뉴가 나오는데요
Add Row를 클릭합니다~


그러면 새로 한 줄이 나오는데요, Key라는 열의 내용을 Icon already includes gloss effects라고 입력하여 하시고 (아마 자동완성으로 나올거예요) Value는 YES를 써주시구요~(대소문자 구별합니다)


다시 실행하여 봅니다~
엄허~! 뽀송뽀송 글로시 효과가 사라졌어용 ㅋㅋㅋ


근데 아이콘 밑에 보이는 어플이름을 좀 바꾸고 싶다면...??
plist파일에 보면 Bundle display name 이라는 행에서 Value를 자신이 원하는 이름으로 바꿔주시면 됩니다. 한글 영문 상관없습니다. 다만 ...이 생기지 않으려면 한글6글자, 영문 12자까지만 써주시면 됩니다.(띄어쓰기는 영문 1글자로 취급됩니다)


자~ 이렇게 어플 아이콘 아래의 이름이 변경되었습니다~!
나라별로 지정 가능합니다. 이를 로컬라이제이션이라고 하는데, 그 부분에 대해서는 다음에 다루도록 해 볼게요..ㅎㅎ



# 해상도별 이미지 관리

아이폰에는 두 가지 해상도가 존재합니다.
320*480과 640*960.
꼭 두배 차이나죠?
그렇기 때문에 높은 해상도의 화면과 낮은 해상도의 이미지 화면의 이미지의 선명도도 다릅니다.
기본적으로 어떤 크기의 이미지던간에 기기별로 알아서 리사이징을 해 주어 같은 이미지를 출력하도록 해주지만, 그렇게 하면 리사이징 처리 시간도 걸리게 되고, 기기에 최적화된 이미지가 아니기 때문에 선명하지 못하거나 뭉그러져 보일 수 있습니다.
그래서 깨끗한 화면을 원하는 개발자는 해상도별로 이미지도 따로 관리를 해주게 되는데요~
그것에 대해 간략한 설명 드리겠습니다~
지난 번에 집어 넣었던 yagom_icon.png라는 이미지 파일이 있습니다.
아이콘 파일이 아닙니다... 혼동을 드려 죄송합니다 (ㅠ_ㅠ)
여튼, 이 파일의 이미지 크기와 꼭 2배가 되는 이미지를 yagom_icon@2x.png라는 이름으로 집어 넣어줍니다.
.


그리고 실행해 봅시다.
retina디스플레이가 아닌 일반 화면(320*480) 버전의 기기를 통하여 yagom_icon.png라는 파일을 사용하였던 화면을 보면 전에 봤던 것과 동일한 이미지가 나옵니다.


하지만 레티나 디스플레이로 변경한 후 다시 보게된다면!?



어머나 세상에!
전 단지 @2x라는 접미어만 붙여서 파일을 넣어줬을 뿐인데 알아서 찾아서 보여주네요~ 


이렇게나 친철하게 말입니다 ㅋㅋㅋ


그래서 아이패드로도 실행 해 보았습니다.
그런데...
아이패드에서 아이폰 어플을 실행하였을 때에는 @2x가 아닌 일반 이미지를 로딩하는군요.
이 이유에 대해서는 논란이 많은데, 구글링 해보시면 조금이나마 이유를 알 수 있으실 거예요..^^
정확한 사실도 아니거니와 설명하기 복잡하여 일단 패스 합니다 ㅎㅎㅎ


자 이렇게 해서 아이콘 넣어보기와 이미지 관리에 대해 조금 알아보았습니다~
협업하시는 디자이너 분께 이렇게 저렇게 이미지를 처리해 주세요~ 라고 말씀하시면서 이유를 설명해 주세요~ㅎㅎ
이미지가 더 이뻐보이려고 이렇게 한다고 말씀드리면 마다하는 디자이너분은 없으실 거예요ㅋㅋ
그런데~!
더 편하게 하는 방법을 소개해 드립니다~!
맥 앱스토어에서 Unretiner 검색하시면 나옵니다..^^
레티나 디스플레이 기준의 이미지를 넣으면 이미지 뒤의 @2x라는 접미어를 없애는 동시에 크기를 절반으로 줄여서 따로 저장해 줍니다~
그러면 일반 이미지와 레티나 이미지를 한방에 해결할 수 있죠^^
다만, 사이즈가 111x123과 같이 홀수가 되는 파일은 처리가 되질 않으니 112x124와 같이 이미지 크기를 조정하셔서 넣어주셔야 합니다^^
링크는요~ Unretiner


후아~
이렇게 아이콘과 이미지에 대해 조금 알아보았습니다^^
어떠세요?
유익하셨나요?
별거 아닌 내용인 것 같아도 나중에 다 피가되고 살이되는 내용일겁니다 ㅎㅎ
유익하셨다거나 도움이 되셨다면 응원이나 질책의 댓글 하나씩 남겨주세요 ㅠㅠ 넙죽넙죽
저는 그럼 다음번에 조금 더 유익한 내용으로 찾아뵙겠습니다~^^*

다음에 뭐 할까요? 댓글 주세요 ㅎㅎ
 

by yagom


p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.


RSS Feed 받기 


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓

Posted by yagom

댓글을 달아 주세요

  1. 옥탑방원숭이S 2012.03.03 21:05  댓글주소  수정/삭제  댓글쓰기

    이번 내용도 잘 보았습니다 ^_^
    아이콘 설정은 꼭 알아야 할 중요한 내용 같네요!
    중간에 알려주신 아이콘 등록 앱은
    일일이 설정으로 잡을 걸 알아서 파일 옮기면 해주는 건가요??

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.03.05 10:13 신고  댓글주소  수정/삭제

      폭풍같은 댓글 감사드립니다~!

      중간에 소개해 드린 앱들은 저렇게 많은 아이콘 파일들을 일일히 다른이름으로 저장하는 불편함을 덜어주기 위하여 가장 큰 해상도인 114*114 해상도의 아이콘만 만들어서 이 앱에 넣어 주시면 이름별로 스스로 정리해서 뱉어주는 녀석입니다~^^*

  2. 한이 2012.03.16 00:42  댓글주소  수정/삭제  댓글쓰기

    잘보고 갑니다.
    중간중간에 유틸 소개 정말 도움이 되었습니다. ㅎㅎㅎㅎㅎㅎㅎ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.03.16 10:02 신고  댓글주소  수정/삭제

      찾아주셔서 감사합니다^^
      도움이 되셨다니 행복하네요~
      필요하거나 궁금한 것이 있으면 언제든 말씀주세요^^

  3. 여맹이 2012.03.26 14:01  댓글주소  수정/삭제  댓글쓰기

    잘보고 갑니다!!!

    이제 입문인데 많이 배워가네요.^^

  4. 리현 2012.07.21 07:42  댓글주소  수정/삭제  댓글쓰기

    잘보고있습니다. 지금 따라 해보는데욤. 저는 plist 에서 아이콘 파일 리스트가 안나와요 ㅁ흠 ㅠㅠ 왜ㅡ일까요?

  5. 초보kay 2012.07.23 19:11  댓글주소  수정/삭제  댓글쓰기

    잘 보고있습니다.
    plist 파일에서 icon files의 아이템이름을 임의로 주었더니 실행시 어플의 아이콘이 생기지 않습니다.
    아이콘파일이름은 야곰님이 이용하신 이름으로 고정되였고 그래야 콤파일러가 인식을 하는건지요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.23 21:02 신고  댓글주소  수정/삭제

      임의로 아이콘 이름을 설정해도 그에 맞는 아이콘이 있다면 구동이 될 것 입니다.
      대소문자도 구분을 하구요~ 확장자도 넣어주어야 합니다.
      png형태로 넣어주시는 것이 좋구요.
      그리고 그래도 아이콘이 안나온다면 Build-Clean 한 후 다시 빌드해 보시기 바랍니다.
      빌드클린 단축키는 Command+Shift+K 입니다~
      그럼 잘 해결되시면 좋겠네요 ㅎ

  6. 초보kay 2012.07.23 23:00  댓글주소  수정/삭제  댓글쓰기

    아, 제가 plist 에 파일 확장자를 써넣지 않았댔군요.
    답글 감사합니다.
    저는 현재 시뮬레이터상에서 테스트를 해보고 있습니다.
    본래 아이콘이미지파일을 지우고 새 아이콘파일을 복사해서 넣었고
    또 Build-Clean도 해 주었는데 실행하면 아이콘그림이 바뀌지 않고 지워진 이미지가 계속 나와서요.
    시뮬레이터에 이미 설치된 앱의 정보가 남아있는것 같은데 무슨 방도가 없을가요? ㅠ ㅠ ㅠ

  7. neoaero 2012.07.26 10:38  댓글주소  수정/삭제  댓글쓰기

    전 아이콘파일 해상도는 57*57만 있는줄 알았는데..이런 기능이 있는줄 몰랐네요..
    감사합니다.

  8. chosamong 2012.08.24 14:07  댓글주소  수정/삭제  댓글쓰기

    정말로 피가 되고 살이 되는 내용이네요.
    마음을 담아서 감사의 인사를 드립니다.
    꾸벅 <(__)>

  9. alison 2012.09.10 18:01  댓글주소  수정/삭제  댓글쓰기

    왜...
    위에것 그대로 따라했는데 어떤 버젼에석너 114짜리 해상도 아이콘으로만나올까요..;;;
    엑스코드 4.4.1, 시뮬레이터 5.1 쓰고 있는데 뭔가 다른건가요??

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.10.03 21:43 신고  댓글주소  수정/삭제

      만약에 그렇게 나온다고 하면 Xcode에서 빌드클린(커맨드+K)을 해 보시고 시뮬레이터 안에서 어플리케이션을 삭제하고 다시 한 번 해보세요~

  10. 루감 2012.11.22 08:37  댓글주소  수정/삭제  댓글쓰기

    감사히 잘 배웠습니다.
    근데.. 질문이 .. xcode나 시뮬레이터등 캡쳐는 어떻게 하신건가요?
    창 뒤쪽 그림자까지도 캡쳐되어 있네요.. 신기합니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.22 10:20 신고  댓글주소  수정/삭제

      안녕하세요 루감님 :)
      덧글 고맙습니다 ㅎ
      Command + Shift + 4 누르신 후에 화면이 바뀌면 Space 눌러주세요 ㅎ 그럼 창 캡쳐가 됩니다.
      추가로 Command + Shift + 3을 누르시면 전체 화면 캡쳐구요 ㅎ
      Command + Shift + 4를 누르고 원하는 영역 드래그 하시면 영역 캡쳐입니다.

      이미지는 데스크탑에 저장됩니다 ㅎ

    • 루감 2012.11.23 08:13  댓글주소  수정/삭제

      와우.. space에 비밀이 있었군요.. 상상도 못했네요. ㅎㅎ
      무한한 정보 정말 감사합니다.

  11. 딴또 2013.03.07 08:31  댓글주소  수정/삭제  댓글쓰기

    진짜 최고의 명강의 입니다. 감사합니다.

  12. 2013.03.12 18:16  댓글주소  수정/삭제  댓글쓰기

    우왕! 깨알같네여! 요즘은 바쁘신지 포스팅을 미루시는 듯...?. 실망이네여 흥쳇퉷

  13. yimcold 2014.04.09 09:34  댓글주소  수정/삭제  댓글쓰기

    대박이네요 ㅋㅋ 항상 야곰님 블로그에서 많이 얻고갑니다!

  14. yimcold 2014.04.09 09:34  댓글주소  수정/삭제  댓글쓰기

    대박이네요 ㅋㅋ 항상 야곰님 블로그에서 많이 얻고갑니다!

오늘의 주제

1.Tab View 기반 어플리케이션 만들어보기

아홉 번째 시간입니다.

지난번에는 아이폰 화면에 이미지를 띄워 보았습니다~!

오늘은 약간 응용하여 탭뷰를 만들어 봅시다...ㅎㅎ

자 이제 본론으로 고고 ^^

# MyFirstTabbedApp

지난 번 이미지 띄운 것을 조금 응용해 볼게요~
일단 뭘 시작하려면 프로젝트를 하나 생성해야 겠지요?
이제 프로젝트 정도는 혼자 생성할 줄 아셔야 해요~ㅋㅋ
잘 모르시면 지난 포스팅 한 번 보시고~
참고로 새 프로젝트 만들기 단축키는 커맨드+Shift+N입니다.
이번에는 Tabbed Application 템플릿을 이용해 보겠습니다~


이번 프로젝트명은 MyFirstTabbedApp입니다~!


기본 세팅 해 주시구요~


일단 무작정 실행시켜 봅시다 ㅋㅋ
커맨드 + R
우왕ㅋ 그냥 잘 되네용ㅋㅋㅋ


이것저것 눌러봅시다~
아래 탭 눌러서 화면전화 해봐용~


자.. 이제 본격적으로 초큼 바꿔 보도록 하겠습니다~!
우리 지난번에 썼던 이미지들 한 번 다시 끌어와 볼까요?
짜잔~ 다시 두 이미지 끌어와 봤습니다~


좌측 네비게이션 영역에서 FirstViewController.xib 파일을 클릭하여 아래 IB화면으로 이동합니다.
이미지 뷰 하나를 끌어 넣어서 자신이 가져온 이미지를 화면에 넣어줍시다~


SecondViewController.xib에서도 마찬가지로 이미지를 넣어줍니다~!


그리고 또 한번 실행 ㅋㅋ
커맨드 + R 
어휴~ 이렇게 이쁘게 또 나왔네요 ㅋ


하..지..만... 탭이 두개밖에 없으니 쓸쓸해 보이지 않나요?
탭을 하나 더 추가해 봅시다~!
프로젝트 폴더에서 오른쪽 버튼을 누르고 New File 클릭!
또는, 커맨드+N 입니다!

[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile3.uf@1831363F4ECA0F7A04B227.png%7Cwidth=%22500%22%20height=%22339%22%20alt=%22%22%20filename=%2211.png%22%20filemime=%22image/jpeg%22%7C_##]
아래 그림처럼 새 파일 템플릿이 나오면 UIViewController subclass 를 선택합니다.
이말인 즉슨 새로운 뷰 컨트롤러 녀석을 하나 생성하겠단 뜻이겠죠?
[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile1.uf@1131363F4ECA0F7C052651.png%7Cwidth=%22500%22%20height=%22352%22%20alt=%22%22%20filename=%2212.png%22%20filemime=%22image/jpeg%22%7C_##]
Class명은 ThirdViewController 입니다.
subclass of 에는 UIViewController 라고 기입해 줍니다.
UIViewController에서 상속받는 ThirdViewController라는 클래스를 생성한다는 뜻입니다.


이렇게 파일이 저장될 위치를 설정해 준 후(그냥 기본적으로 잘 되어있으니 바꾸지 않으셔도 됩니다) Create !!


짜잔~ 네비게이션 영역에 보면 파일들이 생성이 됩니다.
보기좋게 위치정렬 해주시고~ ThirdViewController.xib파일을 클릭해 줍니다.


저는 이미지 하나와 Label하나를 집어 넣어 보았습니다~
마음껏 하나 꾸며보세요 ㅎ


그리고 실행 해 봅시다~!
커맨드 + R
어...? 그런데 왜 세번째 탭이 안생겼죠? 


당연히 프로그램은 우리가 말해주지 않으면 모릅니다...ㅋㅋㅋ
프로그램에게 새 뷰컨트롤러를 만들어 줬고, 거기에 넣고 싶다고 말해줍시다.
우선 AppDelegate.m이라는 파일로 가 봅시다.
AppDelegate라는 녀석은 어플리케이션 전체를 총괄 관리하는 녀석이라고 생각해 주시면 됩니다.
긴 설명은 차후에 하도록 하고, 일단 코드를 봅시다..!
드디어 코드..!? 두둥!
겁먹지 마세요~ㅋㅋ
아주 간단하게 할거예요.


복사 붙여넣기 신공을 펼쳐 봅시다.
화면에서
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
라는 메소드로 이동해 봅시다.
이게 뭐냐구요? 메소드가 뭐냐구요?
뭐... 다음에 설명합니다 ㅋㅋㅋ
뭐 이런 날림이 다 있어 하지만 걱정마세요ㅋㅋㅋ
거기서 viewController2에 해당하는 줄을 복사해서 아래줄에 붙여 넣어 봅시다.
뭔가 뻘건게 눈에 띕니다.
뭐가 불만이냐...?
Redefinition of 'viewController2' 라고 나오네요.
같은 이름이 중복선언 되었다고 나와요~
이 세계에서는 이름이 같으면 안되나 봅니다.


그래서 이름을 살짝 바꿔줍니다. viewController3로 바꿔주시구요~
안에 적혀있는 [SecondViewController alloc ]도 ThirdViewController alloc으로.. 뒤에 @"SecondViewController"도 @"ThirdViewController"로 변경해줍니다.
여튼 화면에 보이는 것처럼 바꿔주세요 ㅋㅋ
그런데도 빨간놈이 안없어진다구요?
예... 안없어집니다. 코드 상단에 보면 #import라는 녀석이 보일텐데요, 이녀석도 한 줄 추가해 줍니다. 화면에 보이는 것처럼요~
import는 말 그대로 데려오는건데요~
여기서 이 클래스를 사용하겠다는 의미입니다.
우리가 어렵사리(?) 만들어 놓은 ThirdViewController 클래스를 데려와줍니다 ㅋ

그러고 나서도 뭔가 누런게 우리보고 지껄입니다...
viewController3 라는 녀석이 쓰이지 않았다는 waring 메세지 입니다.
왜 만들어놓고 쓰지 않느냐는 뜻입니다.
우리가 탭에 새로 만든 녀석을 넣어줘야 하므로...
아래에 
self.tabBarController.viewControllers에 우리가 만든 녀석을 살포시 하나 더 넣어줍니다.


그러면 이렇게 말끔한 화면이 탄생할거예요~
두구두구두구두...
실행해 봅시다~!


우왕 ㅋ 새탭이 나타났어요~


 그런데 새로만든 탭에 아무것도 없어요..ㅠㅠ

화면은 나오는데 탭에 이름도.. 그림도 없네요!!
넣어봐 주어야 겠지요?

[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile24.uf@20185C344ECA137A1193AF.png%7Cwidth=%22396%22%20height=%22744%22%20alt=%22%22%20filename=%2223.png%22%20filemime=%22image/jpeg%22%7C_##]
탭에 넣어줄 이미지를 가져와 줍니다.
투명 바탕을 사용하는 이미지여야 해요~!
png파일로 가져와야 해요.ㅎ
그런데 여기서 파일을 보면 제가 star.png와 star@2x.png 두개를 가져왔지요?
그냥 이름은 아이폰 3GS이하의 기종에서 지원하는 이미지, @2x를 붙이는 것은 아이폰4 이상의 기종(현재 기준)을 지원하는 이미지 입니다.
사실 iOS는 기종별로 지원하는 해상도가 다르기 때문에 좀 더 깨끗한 이미지를 원한다면 좀 더 높은 해상도의 이미지를 넣어주어야 한답니다.
하지만 굳이 그럴 필요없이 고해상도 이미지만 넣어도 큰 무리는 없습니다.
다만 좀 더 느린 사양의 기기에서 구동속도가 조금 느려지는 정도!?
어떻게 하시든간에 선택은 자신의 몫입니다.
저는 그냥 주로 아이폰4 기준의 이미지를 넣는 편입니다.
하나의 이미지만 넣어도 어플 내에서 알아서 인식하고 이미지 크기나 해상도 조절을 합니다.
하나의 이미지만 넣고 싶으면 @2x등을 붙일 필요없이 지난번에 넣었던 것처럼 이미지를 그냥 끌어다 넣으면 됩니다~

일단 제가 이번에 넣은 이미지는 star.png가 30*30의 크기, star@2x.png는 60*60의 크기를 갖습니다. 딱 2배 크기예요~ @2x는 두배 크기라는 말씀..^^

추가된 2개의 파일은 첨부파일로 올려놓았습니다.
여튼 두 파일을 끌어다 놓습니다~



[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile7.uf@12185C344ECA137B120EA8.png%7Cwidth=%22500%22%20height=%22352%22%20alt=%22%22%20filename=%2224.png%22%20filemime=%22image/jpeg%22%7C_##]
그리고 FirstViewController.m 파일로 와서 빨간색으로 표시된 영역의 두줄을 복사해둡시다.


그리고 우리가 만든 세번째 뷰컨트롤러 ThirdViewController.m에 와서 붙여넣고 아래 스크린샷처럼 내용을 살짝 바꿔줍시다~!


그리고 에러가 없다면 실행-!!
짜잔~!
드디어 나왔네요 ㅋㅋㅋ 이름과 그림 ㅋㅋ 


후아후아~
여기까지 잘 따라오셨나요?
다음에는 무슨 이야기를 해볼까요?
사실 여기서 다음에 다음에 한다~
이렇게 써놓은거...
귀찮아서 그런거 절대 아닙니다 ㅋㅋㅋ
여기서 쓰면 한도없이 길어져서 따로 챕터를 만들까 하는데, 먼저 필요한 부분 댓글로 남겨주시면 하루이틀 내로 포스팅 해드릴게요~
소통에 게을리 하지 않겠습니다 ㅋㅋㅋ
 
그럼 다음에 뵙도록해요~!



by yagom

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.


RSS Feed 받기 


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓ 

Posted by yagom

댓글을 달아 주세요

  1. 이전 댓글 더보기
  2. 루감 2012.11.21 12:21  댓글주소  수정/삭제  댓글쓰기

    안녕하세요.
    지난주부터 시작해서 덕분에 잘 배우고 있습니다. 쉽게 설명해주셔서 따라하기만 하면 되더군요.
    근데 드디어 진행이 안되고 막혔네요.
    xcode 4.5.2 사용하고 있는데요. (iOS SDK 6.0 입니다.)
    이 글의 UIViewController를 추가를 위해 New File 메뉴를 선택하니..
    화면이 틀려요.
    Choose a options for your new file: 이라는 그림과 같은 창이 아니고요.
    Choose a template for your new file: 이라는 이름의 창이 뜨고, iOS, OSX 두가지 범주에서
    Cocoa Touch, C and C++, User Interface 등 여러가지 항목과 그 하위에 수많은 클래스들을
    선택할 수 있게 되있네요..
    다 눌러봐도 UIViewController 또는 그와 비슷한것도 찾을수가 없네요.
    뭘 선택해서 추가해야 하나요?

  3. Lisa 2012.11.22 12:36  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. 야곰님의 블로그에서 많은 정보를 얻고 열심히 아이폰 개발을 하고 있는 초짜 인데요.
    질문을 좀 몇가지만 드리려고 합니다.

    참고로 Xcode 4.5.2, 스토리보드X, xib View - Bottom Bar 로 Tab Bar 형태로 개발하고 있습니다.

    1. A뷰콘트롤러에는 여러개의 버튼들이 있습니다. 그리고 하단에는 Tab Bar 가 있어서 A, B, C... 순서대로 탭바 내용이 보이게 됩니다. 그리고 그 버튼들은 각 B, C... 뷰콘트롤러로 이동할 예정입니다.
    그런데 A -> B 로 화면전환 할때
    SecondViewController *secondModal = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil]; 초기화를 한 후
    [self presentViewController:secondModal animated:YES completion:nil]; 모달뷰 형태로 지정해서 실행하면 Tab Bar는 보이지 않은 상태에서 View 내용이 보이게 됩니다. 그렇다고 [self.view addSubview:secondModal.view]; 형태로는 현재 뷰 위에 얹혀서 보이는 식으로 나타나게 됩니다. (이 부분은 당연한 부분이겠죠.)

    해서 제가 원하는 결과는 A뷰컨트롤러에서 B, C....뷰컨트롤러로 화면전환이 이동되면서 Tab Bar가 보이고 Tab Bar Item도 각 Tab 위치에 맞는 활성화된 상태로 보이도록 하는것이 목표입니다.

    2. FifthViewController에는 툴바가 있고 네비게이션바는 없는 상태입니다. 해당 뷰안에 버튼이 있는데 이 버튼을 누르게 되면
    SixthViewControlller 로 화면전환 하려 합니다. 그런데 SixthViewController 에서는 툴바는 설정 안해놨습니다. 네비게이션바와 Back 버튼이 보이고 클릭하면 FifthViewController 로 돌아가고 싶습니다. 가능한지요?

    아직 실력이 미흡해 제대로 설명을 못드린것 같아 죄송합니다.

    염치불구하지만 답변 기다릴게요 ^^;;

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.22 13:06 신고  댓글주소  수정/삭제

      안녕하세요 Lisa님! 반갑습니다 :)
      1번의 경우에는 모달은 원래 그런 용도(새로운 화면으로 덮어버리는...)이기 때문에 원하는 기능에 적절하지 않은 것 같습니다. 네비게이션 컨트롤러를 이용하는 것이 좋을 것 같습니다.

      2번의 경우에는 이동할 때마다 네비게이션 컨트롤러의 setNavigationBarHidden: 메소드로 보였다 가렷다 하면 될 것 같습니다~ :)

      도움이 될지 모르겠습니다. ^^;

  4. Lisa 2012.11.23 16:25  댓글주소  수정/삭제  댓글쓰기

    답변 달아주셔서 감사합니다.

    기존 작업들 다 엎고 모달로 불러올 수 있도록 재작업중에 있습니다. ㅡ.ㅜ
    제대로 된 교육도 안받고 기초도 없는 상태에서 사정상 개발부터 하려니 참... 힘드네요. ㅠㅠ

    아무쪼록 또 궁금한 사항 생기면 여쭤봅도록 하겠습니다.

    주말 잘 보내세요 ^^

  5. Favicon of http://blackturtle.tistory.com BlogIcon 까만거북이 2013.01.03 22:16  댓글주소  수정/삭제  댓글쓰기

    또 고맙습니다.
    저도 블로거로써 이 고마움을 어찌 전해야할지 모르겠네요. :)

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.01.04 07:46 신고  댓글주소  수정/삭제

      까만거북이님 :)
      저도 거북이님 블로그 보면서 많은 정보 얻어갑니다 ㅎㅎ
      유용한 팁과 정보들이 정말 많네요 ㅎ

  6. 첼로와 짜짜 2013.01.11 17:21  댓글주소  수정/삭제  댓글쓰기

    ㅋㅋㅋㅋㅋㅋ 탭바에 이미지 넣는거 좀 헤매다가 결국 알아냈어요. 끝까지 다 볼겁니다. 정말 도움이 많이되요. 감사합니다.
    탭 4개 만들었어요ㅋㅋㅋㅋ

  7. 딴또 2013.03.07 08:11  댓글주소  수정/삭제  댓글쓰기

    명강의 감사합니다.

  8. Favicon of http://keepingstar.tistory.com BlogIcon keepingstar 2013.03.30 13:59  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 야(한)곰님~
    따라하기로 하고 있는데 이상하게 이미지뷰를 집어넣은 곳과
    시뮬레이터로 실행시킨 후의 위치가 틀리네요-?

    지금 제가 6.0을 사용하고있는데 이것의 버그일까요?
    흠..

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.03.31 00:08 신고  댓글주소  수정/삭제

      야한곰은 절대로 아니구요...ㅠㅠ
      일단 탭뷰안에 들어가서 위치가 달라보일 수도 있고
      뷰가 오토 리사이징이 되어서 그럴 수도 있을 것 같습니다..

  9. 청담동개발자 2013.04.15 16:36  댓글주소  수정/삭제  댓글쓰기

    안녕하세요~ 궁금한거 하나만 물어볼께요

    Tabbed Application을 이용하면 FirstViewController ,SecondViewController 라고 이름이 정해지는데

    이름을 바꿀 수 없나요? 이름 바꿨더니..오류나고 실행이 안되네여..

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.04.16 09:53 신고  댓글주소  수정/삭제

      당연히 바꿀 수 있습니다... ^^;
      어디서 어떤 이름을 바꾸셨는지 모르겠지만...
      파일이름을 변경하고 싶으시면 파일이름 변경 후에 #import에서도 바꿔주셔야 하구요...
      클래스 이름을 바꿔주셨으면 xib에서도 클래스 정보를 바꿔주셔야 합니다...

  10. 질문돌이 2013.06.08 15:59  댓글주소  수정/삭제  댓글쓰기

    제가 뭘 잘 몰라서 그런데요,
    탭바에 view controller를 등록하기 전에

    UIViewController *viewController1 = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];

    이런식으로 UIViewController instance를 만드는데,
    막상 생성하는건 FirstViewController instance네요.

    이래도 되는건가요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.06.09 14:43 신고  댓글주소  수정/삭제

      제가 잘못 표현한 부분입니다 ^^;
      FirstViewController와 SecondViewController 포인터로 선언해 주는것이 더 맞겠습니다 ㅎㅎ

  11. 개개개발의 귀태랑 2013.07.01 17:39  댓글주소  수정/삭제  댓글쓰기

    안녕하세요.
    좋은 강의 잘 보고 있습니다.

    한가지 궁금한 점이 있는데요. 이번 강좌를 다 따라했고, run실행 시 오류도 없었습니다.
    그런데 시뮬레이션 화면에서 세번째 탭( star이미지도 잘 뜹니다)을 누르기만 하면 시뮬레이터가 멈춰 버리는데요.;

    이건... 어떤 문제인지 알 수 있을까요?

    xcode는 4.6.2버전입니다~

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.07.02 10:02 신고  댓글주소  수정/삭제

      글쎄요...^^;

      그렇게만 말씀해 주시면 저도 뭐라고 답변을 드려야 할지 잘 모르겠습니다 ㅠ_ㅠ

    • 개개개의 귀태랑 2013.07.02 10:54  댓글주소  수정/삭제

      아... 어디가 잘못되었는지를 모르니 질문을 상세하게 드릴 수가 없네요.ㅠㅠ

      디버그 네비게이터에

      int main(int argc, char *argv[])
      {
      @autoreleasepool {
      return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); <--Thread 1: signal SIGABAT
      }
      }

      이라고 나옵니다. 댓글 중에도 몇분이 SIGABAT얘기를 하시는 것 같은데 무슨 말인지 모르겠네요.ㅜㅜ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.07.02 11:29 신고  댓글주소  수정/삭제

      난감한 상황이 아닐 수 없습니다..ㅠ_ㅠ

      메모리에 잘못 접근하고 있는 것 같은데, AppDelegate쪽에 오타나 잘못 입력한 부분이 있는지 확인해 보시고, ThirdViewController의 xib파일에 문제가 없는지 확인해 보시는 것도 좋을 것 같습니다. 'ㅁ'

  12. 개개개의 귀태랑 2013.07.02 17:23  댓글주소  수정/삭제  댓글쓰기

    해결했습니다.ㅎㅎ;

    탭을 새로 추가하는 부분에 문제가 있었습니다. 본문에는 New File을 하고 템플릿에서 UIViewController subclass를 선택하면 된다고 되어 있습니다만, 저 같은 경우 그런 템플릿을 못찾아서;; 그냥 템플릿 라이브러리에서 만들어 썼던 게 문제였던 것 같습니다.

    제 xcode에서는 new file을 한 뒤 'ios' --> 'cocoa touch' --> 'objective-c class'를 선택해 줘야 'UIViewController subclass'를 선택할 수 있었습니다.

    아무튼 이제 나머지 부분을 따라갈 수 있겠네요~~ 감쏴함다~~ㅎ

  13. sunju 2013.07.30 11:54  댓글주소  수정/삭제  댓글쓰기

    혹시 두번째 tab에 안녕하세요이런 문자열을 저장해 놓구 첫번째 tab에서 읽어 올수 있는 방법은 없나요??? 블로거님 delegate 부분 보구 해봣는데 안되네요 ㅠㅠ 도와주세요~ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.07.30 12:02 신고  댓글주소  수정/삭제

      안녕하세요 선주님!! :)
      어떤식으로 저장하셨고, 어떤 식으로 델리게이트 연결을 하셔서 구현을 하셨는지에 대한 정확한 설명과 코드 없이는 제가 도와드릴 수 있는 부분이 없을 것 같아요...^^
      어떤 부분이 어떻게 동작을 안하는지 직접 쉽게 설명할 수 있는 정도로 자신의 코드를 이해해서 설명해 보셔요. 아마 그때 쯤이면 스스로 원하는 기능을 완성하셨을 거예요.
      그럼에도 불구하고 원하는 기능이 동작하지 않는다면, 이해한 내용을 저에게 다시 설명해 주세요. 함께 방법을 찾아보아요 :)

  14. sunju 2013.07.30 13:22  댓글주소  수정/삭제  댓글쓰기

    답변감사합니다
    아직 해결이 안되서 또 물어볼게요 ㅠㅠ
    두번째 tab view에 uislider 만들고 viewDidDisappear에서[self.delegate returnValue...] 이런식으로 코딩하고 첫번째 tabview에서 returnvalue란 함수를 통해서 값을 읽어오구 싶은데 우선 첫번째 setDelegate을 어디부분에서 해야될지 막막합니다. viewDidload에서 setDelegate을 했더니 returnvalue 함수가 호출도 되지 않네요...ㅜㅜ 설명이 제대로 됬는지는 잘모르겠네요 ㅠㅠ 감사합니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.07.30 13:28 신고  댓글주소  수정/삭제

      탭바에서는 viewDidDisappear가 호출이 안될텐데, 로그 찍어보셨나요?
      viewDidDisappear말고 다른 방법으로 해당 메소드를 호출해줘 보세요.
      가령 예를 들어 버튼을 누른다던지, 첫 번째 탭에서 다른 방법으로 불러오는 방식이라던지요... ^^

  15. Hide 2013.11.05 19:57  댓글주소  수정/삭제  댓글쓰기

    감사합니다. ~

  16. 무숙자 2013.12.16 22:18  댓글주소  수정/삭제  댓글쓰기

    설명 최고네요 최고....감탄을 하고 갑니다.
    저같이 일반인도 이해가 가다니요

  17. Bart 2014.02.04 22:43  댓글주소  수정/삭제  댓글쓰기

    요즘 맥을 시작하는 초보사용자로 야곰님 강좌를 처음부터 따라하기 시작한 사람입니다

    저는 xcode5.0.2 사용 중인데, 프로젝트 생성할때 storyborad 선택이 없어서 메소드 부분이 없어서 막히고 있는데요,
    혹시 다른 해결 방안은 없는지요?

  18. myonug 2014.05.21 19:56  댓글주소  수정/삭제  댓글쓰기

    안녕하세요.
    좋은 강좌 감사합니다.!
    그때 한번 댓글 달았는데 빠른 답변도 정말 감사드리고요^^

    궁금한점이 있습니다.
    혹시 title의 사이즈를 좀더 키울 수 없을까요?
    키울수 있다면 어떤 방법으로 키워야 되나요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2014.05.21 20:38 신고  댓글주소  수정/삭제

      http://goo.gl/BE1tCF
      한 번 참고해 보셔요 :)
      제가 지금 문서를 안봐서 모르겠지만 아마 iOS 6 이상에서부터 사용할 수 있는 메소드일거예요 ㅎㅎ

  19. myonug 2014.06.10 15:59  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 벌써 세번째 댓글을 다는거 같습니다.
    항상 답변해주셔서 감사해요!

    탭뷰를 하면서 5페이지를 만들었어요.. 근데 1245페이지는 버튼을 눌렀을때 지정해준 뷰로 이동을 하는
    일반적인 탭뷰형식입니다. 3번째 위치한 탭뷰버튼을 눌르면 마지막으로 보여진 뷰는 유지되면서
    그위에 버튼을 구현을 할려고 하는데 혹시 조언이나.. 검색을 어떻게 하면 되는지 가르쳐주실수 잇나요..ㅠㅠ
    머라고 검색을 해야되는지.. 잘 몰라서 물어봅니다!

    0
    0
    탭뷰: 1 2 3 4 5

    탭뷰 3번째를 클릭했을때 0이라는 버튼이 그위에 구현되는 방식입니다.


    • Favicon of https://blog.yagom.net BlogIcon yagom 2014.06.11 16:43 신고  댓글주소  수정/삭제

      안녕하세요 :)
      UITabBarControllerDelegate 에 대해서 알아보시면 될 것 같아요 :)
      탭바를 눌렀을 때 호출되는 델리게이트 메소드가 있을거예요 ㅎ

  20. 2014.11.13 18:06  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  21. 루나 2016.01.02 15:11  댓글주소  수정/삭제  댓글쓰기

    포스팅이 2011년으로 오래되긴 했지만 너무 자세히 설명해 주셔서 차근 차근 따라하고 있습니다.
    Xcode 7.2를 사용해서 배우는 중인데 지금은 ViewController Class 파일을 만들지 않고 Object에서 ViewController를 추가하여 오른쪽 버튼으로 연결하게 변경이 된거 같아요. 코딩 필요 없이요. 그래서 게시글과 달라 조금 헤맸습니다. ㅎㅎㅎ
    시뮬레이터로 띄워봤을 때 3번째 탭이 나타납니다.
    다만 정말 초보기에 질문드리는데... 이렇게 Object로 ViewController를 연결하면 첫번째, 두번째 탭처럼 h, m 파일이 생성되지 않아서 궁금합니다. 제가 Xcode 최신 버전을 사용해서 다른 걸까요? 아님 제가 뭘 잘못한 걸까요?

    새해 복 많이 받으세요. :)

    • Favicon of https://blog.yagom.net BlogIcon yagom 2016.01.09 03:01 신고  댓글주소  수정/삭제

      안녕하세요 루나님~!
      음... 그것은 기본적으로 UIViewController 클래스의 객체를 스토리보드에서 자동으로 생성해주기 때문입니다. 쉽게 말로 풀어쓰기가 정말 어려운데... 음...ㅠㅠ
      스토리보드의 ViewController 객체를 스토리보드에 올려놓으면 코드로 UIViewController를 생성해주는 것과 같은 효과를 얻게됩니다. 컴파일 할 때 자동으로 스토리보드를 분석해서 Xcode가 대신 코딩해주는 효과라고 할까나요?
      지금 위에서처럼 UIViewController 클래스를 상속받는 클래스 두 개를 더 만든 후에 스토리보드에 올린 UIViewController 객체를 선택하시고 Identity inspector 메뉴(참고 : https://goo.gl/UwdTx4)에서 Class 이름을 우리가 만들어준 클래스 이름으로 지정해주면 위에서 해본 예제랑 같은 효과를 얻어보실 수 있습니다 :)

      말로 최대한 풀어 써보려고 했는데 잘 이해가 되실지는 모르겠어요ㅠ

      더 궁금하신 사항이 있으면 또 글 남겨주세요~!


오늘의 주제

1. iOS Application의 화면구조
2. View Controller
3. 화면에 보이지 않는 Object 종류 알아보기

일곱 번째 시간입니다.

지난번에는 Object에 대하여 조금 알아보았습니다~

오늘은 iOS App의 화면구조와 아직 배우지 못한 몇몇 객체들에 대해 알아봅시다...ㅎㅎ

자 이제 본론으로 고고 ^^

# iOS Application의 화면구조

우리가 iOS를 사용할 때 보이는 화면구조에 대해서 조금 먼저 알아볼 필요가 있겠습니다.
일단 최고로 상위에 있는 녀석이 UIWindow입니다.
지난 번에 설명드렸듯이 iOS는 하나의 윈도우창으로 이루어져 있습니다. 즉 하나의 화면 안에서 모든 것들이 이루어지는것이라는 말이죠. 즉, 컴퓨터로 생각해 보면 하나의 모니터가 있고, 그 모니터 안에 여러개의 창을 띄워놓고 작업하지요? 그것과 같습니다.
한 화면 안에서 여러개의 창을 띄워놓을 수 있습니다.
그 하나하나의 창을 우리는 View로 표현 할 수 있습니다.
헷갈리시나요?
일단 아래의 그림을 봅시다.
하나의 UIWindow안에 View가 여러개 존재하여 보여질 수 있습니다.
View가 각자의 영역을 가지고 보여질 수도 있고, 곂쳐져 보여질 수도 있습니다.
이래도 솔직히 감이 안옵니다 ㅎㅎ
또 아래의 그림으로 가봅시다.


[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile2.uf@131957454EBAB4AE1F41BC.png%7Cwidth=%22500%22%20height=%22750%22%20alt=%22%22%20filename=%222.png%22%20filemime=%22image/jpeg%22%7C_##]

실질적인 어플리케이션의 화면입니다.
화면 최상단에는 Status Bar, 즉 상태바가 있지요.
상태바를 보여줄지 안보여줄지는 개발자의 선택입니다.
일단 이 어플리케이션에는 상태바가 보이네요.
상태바도 하나의 뷰로 생각할 수 있습니다.
우리는 상태바를 보이게 할지 안보이게 할지, 또 상태바의 스타일은 어떤식으로 표현할지 등을 정할 수 있습니다. 
화면에 보면 일단 메인뷰(UIView)가 존재하고 메인뷰 크기만큼의  이미지뷰(UIImageView)가 존재합니다. 이미지뷰로 배경화면을 깔아 놓았고 그 위에 버튼들로 구성된 화면입니다.
버튼(UIButton)도 View의 종류중에 하나입니다. 화면에 보이는 거의 모든것이 View에서 상속받은 것인데요, 상속이라는 것은 뭐 일단을 설명하지 않겠습니다.ㅎㅎ
지금 보다시피 지금 이 화면(UIWindow)에는 하나의 뷰(UIView)위에 이미지뷰(UIImageView)하나가 얹어져 있고, 버튼(UIButton) 5개로 이루어진 윈도우입니다.
위에 설명이 잘 이해가 안가시면... 지난 번 포스팅을 한 번 더 보고 오시는것은 어떨까요?ㅎ
 


아래 화면을 보시면 하나의 윈도우 위에 상태바가 존재하고 메인 뷰 위에 배경을 씌운 이미지 뷰 하나, 그위에 여러 View들로 이루어져 있습니다.
사용자의 선택을 받기 위한 버튼들, 제목표시를 위한 라벨, 입력받기 위한 텍스트필드와 텍스트뷰가 존재합니다. 지난 번에 설명해 드린 것을 참고하시면 어떤 역할을 하는지 대충 감이 오시겠죠?ㅎ


이렇게 화면에 많은 뷰들로 구성이 되어있는데 이 많은 뷰들을 어떻게 관리를 해 줄 것인가??
그런 생각이 드실거예요. 뷰들이 화면에 어떤 모양으로 보여지게 될지는 뷰 자체적으로 결정을 합니다. 하지만 사용자의 입력을 받거나 사용자의 행동에 따라 화면을 어떻게 바꿔줄지 또는 어떤 동작을 하는지는 Controller라는 녀석이 결정을 하게 됩니다.
헷갈리기 시작하시는 모습이 눈에 선합니다 ㅎㅎ
컨트롤러라는 녀석들은 화면에 보이질 않는 추상적인 녀석들이니까요..^^
그럼 거기에 대해서 조금 더 알아볼까요?

# View Controller

이제 컨트롤러 중에서 가장 많이 보게 될 View Controller에 대하여 알아봅니다.
일단 iOS의 동작이 어떤 순서로 이르어 지는지 먼저 살펴봅시다.


iOS는  MVC모델을 기반으로 합니다.
Model - View - Contorller 의 준말입니다.뭐 무슨말인지는 나
중에 이해하게 되실거예요~

Model은 데이터를 저장하는 곳, View는 화면에 보이는 것, Controller는 View와 Model을 관리하는 객체라고 보시면 됩니다.
무슨말인지 잘 감이 안잡히시죠? 괜찮습니다~
어쨋든 Controller라는 녀석이 대부분의 모든것을 주관한다라고 생각해 두세요.
그리고 View Controller는 화면에서 일어나는 것들의 처리를 맡아서 처리한다고 생각하시면 되겠지요?
즉, 컨트롤러들은 일처리를 열심히 하는 일꾼이고, 뷰들은 컨트롤러가 쏴주는 명령과 데이터로 화면에 보여주는 아바타 꼭두각시들입니다. ㅎㅎ
정리가 좀 되실라나요?


# 화면에 보이지 않는 Object 종류 알아보기
그럼 이제까지 화면에 보이는 녀석들을 좀 봤으니 화면에 보이지 않는 녀석들과 컨트롤러 들에 대하여 한 번 알아보도록해요~
 

이름 : Tap Gesture Recognizer
설명 : 화면에 직접적으로 보이지는 않지만 앱 내부에서 열심히 동작하는 녀석들 중에 하나가 Recognizer 녀석들입니다. Recognize하면 알아차리다 라는 뜻이죠? 말 그대로 Tap, 즉 우리가 터치하는 것들을 알아차리고 프로그램에 전달하는 녀석입니다. 이녀석이 사용자가 어디를 탭했다 또는 몇 손가락으로 터치를 했다 라고 전달해 주면 어플이 그에 알맞는 동작을 할 수 있게되는거죠^^ 이녀석은 Recognizer중에 화면을 터치하는 것을 감지해 주는 녀석입니다.
클래스 : UITapGestureRecognizer

이름 : Pinch Gesture Recognizer
설명 : Pinch 하면 집게죠 ㅎ 즉, 손가락을 집게처럼 오므리거나 벌리는 동작을 말합니다. 화면을 확대 축소 할때 주로 쓰이는 동작이죠? 그 동작을 사용자가 하면 시스템에 알려주는 역할을 합니다.
클래스 : UIPinchGestureRecognizer

이름 : Rotation Gesture Recognizer
설명 : 손가락으로 동그랗게 돌리는 것을 인식하여 시스템에 전달해 주는 역할을 합니다.
클래스 : UIRotationGestureRecognizer


이름 : Swipe Gesture Recognizer
설명 : Swipe하면 쓸어내다 이런 뜻이죠. 화면을 쓸어내듯이 미는 동작을 감지합니다. 밀어서 잠금해제 뭐 이런 동작이요 ㅎ
클래스 : UISwipeGestureRecognizer


이름 : Pan Gesture Recognizer
설명 : 쉽게말해서 드래그 하는 동작을 잡아냅니다 ㅎ
클래스 : UIPanGestureRecognizer


이름 : Long Press Gesture Recognizer
설명 : 말그대로 길~~~~~~~~게 누르고 있는 동작을 인식하여 시스템에 알려줍니다~!
클래스 : UILongPressGestureRecognizer


이름 : Object
설명 : 이녀석이 우리가 말하는 객체의 원형이라고 볼 수 있겠네요. 인터페이스 빌더에서 사용할 수 없는 커스텀 객체를 구성 할 수 있습니다.
클래스 : NSObject


이름 : External Object
설명 : 문서 외부에서 끌어오는 객체를 위한 Placeholder, 즉 자리를 차지하게 해주는 인터페이스 빌더의 요소입니다.
클래스 : 


이름 : View Controller
설명 : 드디어 뷰컨트롤러네요 ㅎㅎ 이녀석이 뷰에서 일어나는 일들을 감지하고 어떤 동작을 하고 어떤 변화를 줄지 결정하고 수행하는 역할을 하는 녀석입니다. 아까도 말씀드렸죠? 뷰는 꼭두각시 아바타일 뿐, 요녀석이 조종사입니다 ㅎㅎ
클래스 : UIViewController


이름 : Table View Controller
설명 : iOS보면 목록들을 쭈욱 나열할 수 있는 테이블을 볼 수 있습니다. 사실 테이블이라고 하면 잘 감이 안오시겠지만, 아이폰 설정에 들어가면 설정 메뉴 목록이 섹션별로 나뉘어서 쭈욱 목록이 나오는 것이 테이블입니다. 그 테이블 화면에 나올 것들과 테이블 열(Row)를 눌렀을 때 어디로 이동하게 될지 정해주는 역할을 해요~
클래스 : UITableViewController


이름 : Navigation Controller
설명 : iOS화면 상단에 보면 제목과 뒤로가기버튼, 메뉴 버튼 등이 존재하는 바가 존재하지요? 그것을 네비게이션 바 라고 지난번에 설명을 드렸는데, 그녀석이 뒤로가기 버튼이나 메뉴 버튼을 눌렀을 때 어떤 동작을 취할지 명령을 내리는 컨트롤러 입니다. 아이폰 설정화면 상단에 보면 네비게이션 바가 있지요^^
클래스 : UINavigationController


이름 : Tab Bar Controller
설명 : 탭바를 통제하는 녀석입니다. 그 유명한 카카오톡 화면 아래에 보면 메뉴들을 보여주는 탭바가 존재하지요? 그 탭바를 눌렀을 때 어떻게 동작을 하게될지 결정하는 녀석입니다.
클래스 : UITabBarController


이름 : Page View Controller
설명 : iPad에서만 동작하는 녀석입니다. 말그대로 페이지처럼 동작하는 뷰들을 관리합니다.
클래스 : UIPageViewController

이름 : Search Bar and Search Display Controller
설명 : 아이폰에서 검색할 때 쓰이는 검색바와 그 검색 결과창에 어떤 것을 검색해서 표현해 줄지 결정하고 명령하는 녀석입니다.
클래스 : UISearchDisplayController


이름 : GLKit View Controller
설명 : 지난 번에 설명드렸던 GLKView를 관리하는 녀석입니다. 3D 사용을 위한 Open GL ES를 사용하는 뷰에 대한 조종을 합니다.
클래스 : GLKViewController


 이렇게 해서 IB의 Library에서 볼 수 있는 객체들에 대해 알아보았는데요, 사실 객체의 종류는 수도 없이 많습니다. IB에서 볼 수 있는 객체들은 일부에 불과해요..^^
화면에 보이지 않는 객체들은 수도 없이 많습니다.
하지만 걱정하지 마세요~
저와 함께 차근차근 신나게 알아보도록 해요~
일단 지난번과 이번에 본 것들은 아~ 이런것들이 있구나 하는 정도로 알아두시고 (물론 다 기억하시면 시야가 넓어지는 좋은 일이 생기지요..^^) 이후에 진행되는 내용들에서 잘 기억이 나지 않거나 이해가 가지 않는 부분이 생기면 돌아와서 한 번쯤 돌아보시는 것도 좋을 것 같아요.

오늘은 iOS화면구성과 iOS 동작에 대한 내용 아주 초큼, 그리고 화면에 보이지 않는 객체들을 일부분 살펴보았습니다.

혹시나 올바르지 못한 내용을 발견한 고수분들은 의견주세요^^*

다음에는 무엇을 해볼까요?ㅎ
이 블로그의 주인은 여러분들입니다. 여러분들이 해보고 싶은 것들을 댓글로 말씀해 주시면 준비해 보도록 하겠습니다^*^

이론만 하기는 너무 힘드시죠?ㅎ
다음 번에는 한 번 실전에 들어가 보도록 할까 합니다~
고된 여행을 떠날 준비가 되셨나요?ㅎ

다음에 뵙도록 해요^~^
 


by yagom

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기 


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓ 

Posted by yagom

댓글을 달아 주세요

  1. 말썽쩡 2011.12.12 19:46  댓글주소  수정/삭제  댓글쓰기

    감사해요 막막했는데 이렇게 설명을 잘해주시다니 ㅋㅋ 잘봤어요 ^^

  2. 옥탑방원순이S 2012.03.03 09:58  댓글주소  수정/삭제  댓글쓰기

    진짜 신나게 읽었습니다.
    다음번 실전도 너무 재밌을 것 같아요 ^_^
    정리해서 책으로 내셔도 될 것 같아요~~~
    잘 봤습니다 ^_^

  3. 블루아빠넹 2012.04.20 09:13  댓글주소  수정/삭제  댓글쓰기

    정말 잘 보고 있습니다.
    친절한 포스팅 너무 감사하구요.
    앞으로도 꾸준한 포스팅 부탁드려요~!!

  4. 봇짱 2012.06.17 19:51  댓글주소  수정/삭제  댓글쓰기

    쉬운 설명 감사합니다.
    정말 잘 보고 갑니다.

  5. 자몽주스 2012.06.25 13:40  댓글주소  수정/삭제  댓글쓰기

    이제야 아이콘들이 어떤기능들을 하는지 알것 같아요 정말감사합니다.

  6. SODA 2012.06.27 16:13  댓글주소  수정/삭제  댓글쓰기

    죄송한데 IB가 무엇을 말하는 건가요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.27 17:21 신고  댓글주소  수정/삭제

      google에서 Xcode IB라고 검색하시면 제가 답변해 드리는 것 보다 훨씬 속시원한 답을 얻으실 수 있을 것 같아요 ^^*

  7. 딴또 2013.03.06 08:43  댓글주소  수정/삭제  댓글쓰기

    좋은 강의 정말 감사합니다.

  8. ios 개발자 될놈.. 2013.05.08 19:04  댓글주소  수정/삭제  댓글쓰기

    야곰님 앞으로도 쭉,!!

  9. ryan 2014.06.17 09:38  댓글주소  수정/삭제  댓글쓰기

    아 글 너무 잘 읽고 있습니다. 안드로이드를 조금 만지다가 Swift 가 나왔다고해서 이참에 iOS도 배우고 있는 중인데요. 설명을 너무 잘 해주셨네요. Swift 에 관련된 강좌는 하실 계획이 없으신지요? :)

  10. 동기 2017.03.17 14:55  댓글주소  수정/삭제  댓글쓰기

    책을 안 사서 무작정 하고 있는데 이런 좋은 글들 때문에 서점이 망하지 않을까 우려가 되네요...ㅎㅎㅎ 감사합니다 잘 보고 있습니다!! 댓글을 웬만해선 귀찮아서 안 다는데 너무 감사해서 댓글 달고 갑니다 ㅎㅎ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2017.03.17 16:05 신고  댓글주소  수정/삭제

      안녕하세요 동기님!
      덧글 고맙습니다 :) 너무 예전 자료라 많이 도움이 될지는 잘 모르겠습니다^^; 종종 들러주세요~

  11. 김성욱 2017.03.28 10:36  댓글주소  수정/삭제  댓글쓰기

    잘 봐씁니다. 감사합니다.


오늘의 주제

1. Object란??
2. 화면에 보이는 Object 종류 알아보기

여섯 번째 시간입니다.

지난번에는 Xcode를 한 번 살펴보았습니다~

오늘은 일단 화면에 보이는 녀석들이 무엇인지 한 번 파악해 봅시다..ㅎㅎ

자 이제 본론으로 고고 ^^
 

우리는 iOS프로그래밍(Cocoa Touch)을 할 때 Objective-C를 사용합니다.

물론, C나 C++등을 이용하여 프로그래밍도 가능하지만, 기본적으로 Objective-C를 사용하여 코딩한다고 생각합시다.

Objective-C는 '객체지향언어'입니다.

객체지향언어는 객체지향 프로그래밍을 지향하는데요...

아.. 처음 보는 분들은 도무지 무슨말인지, 뭔소린지 도통 모르시겠죠?ㅎㅎ

사실, 모든 것을 시작을 할 때 기초를 탄탄히 다지고 하는것도 좋지만 전 지금 여러분들이 프로그래밍에 대한 지식이 전무하다고 생각을 하고 진행해 볼 생각입니다.

일단, 머리아프게 생각하지 맙시다..ㅎㅎ

지금 기초부터 정말 탄탄히 다지고 싶은분들은..

객체지향언어, 객체지향 프로그래밍, Objective-C, 객체, 인스턴스, 메소드, 클래스에 대해서 역사부터 차근차근 공부하고 오시길 바랍니다. 그러면 조금 더 이해가 잘 갈 수도 있어요^^

하.지.만...

공부하고 되돌아 오시는 분들은 그렇게 많지 않을 것 같네요.ㅎㅎ

하다가 분명히 지칠 것 같아요^^..

그냥 간단간단하게 알아두고 차근차근 한 번 생각하며 나가 봅시다~

일단 저만 믿고 와보시라니까요^^~
아, 그리고 Cocoa Touch가 무엇이냐구요? 구글 검색 한 번 해보시길...^^ 크게 중요한 것이 아니라 여기서는 넘어가겠습니다~ 그냥 우리가 배우고 있는게 Cocoa Touch구나~ 정도 알아두시면 되겠습니다~ 


# Object란??

오브젝트라는 것이 무엇일까요?
아..!! 그 전에 미리 말씀드리는데, 지금 보이는 이 챕터의 원론적인 이야기들은 정 이해가 가지 않으신다면 일단 스킵하셔도 큰 무리가 없습니다. 나중에 다음거 보다가 이해가 안되시면 다시 돌아와서 보실일도 많을 거라 생각합니다. 그만큼 처음엔 굉장히 헷갈리는 부분이거든요..^^

다시 돌아와서 Object란..? 
한글로 하면 객체입니다.

그렇다면 객체란 무엇일까요??
우리는 객체를 '내 차(My Car)'라고 생각해 봅시다.
여기석 클래스라는 녀석도 등장을 하는데, 클래스는 공장의 '생산라인'이라고 생각합시다.
공장의 생산라인에서는 똑같이 생긴 차량을 우리가 필요한 만큼 만들어 냅니다. 
이것이 클래스와 객체간의 관계입니다.


그림에서 보는 것과 같이..(발로그려서 죄송...ㅋㅋ) 생산라인에서 똑같이 생긴 자동차를 뽑아냅니다. 하지만 차량마다 번호가 다르고 탑승하는 사람도 제각각입니다. 이처럼 클래스는 어떠한 객체가 가지는 특정 모양에 대한 내용을 담고 있습니다. 그리고 객체는 찍혀나온 녀석이고, 우리는 그 안에 객체마다 클래스 형식에 맞춰 내가 원하는 내용들을 채워 넣을 수 있습니다.
다른 방법으로 표현하면 클래스는 붕어빵을 찍어내는 쇠로된 틀이고, 오브젝트는 그 틀에서 찍혀나오는 붕어빵으로도 비유할 수 있겠습니다. 또한, 붕어빵에 넣어주는 앙금에 따라 팥앙금을 가지는 붕어빵이 될 수도, 피자맛 붕어빵이 될 수도 있죠. 겉모양은 같은데 말예요^^
 
조금 이해가 가시나요? 이해가 지금 당장 가지 않으셔도 좋습니다~!
그냥 읽어두세요!!
걱정하실 필요 없구요~ 서서히 시간이 지나고 가끔씩 제가 클래스니 변수니 이런말을 무의식중에 할 때 마다 한 번씩 와서 다시 봐주세요^^ 이해가 잘 안가시면 구글에서 검색해 보시면 도움이 되는 자료들이 많을 거예요~
 
그리고 인스턴스(Instance) 또는 인스턴스변수라는 이름도 종종 보게 되실텐데요, 이녀석은 다름이 아니라 객체를 지칭하는 말입니다. 인스턴스 = 객체라고 생각하시면 됩니다.
 
그럼 여기서 대충 클래스, 객체(인스턴스)의 관계에 대하여 알아보았습니다. 책에서 보면 원론적인 내용들이 굉장히 많아서 헷갈리는 경우도 많고, 요거만 보다가 지쳐 쓰러지는 경우도 있으니.. 일단 여기서 잠시 접어둡시다~ 사실 이게 다예요^^;

정 더 궁금하시다면... 대충 흝어보고 오세요~
http://ko.wikipedia.org/wiki/%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D
http://ko.wikipedia.org/wiki/%EC%98%A4%EB%B8%8C%EC%A0%9D%ED%8B%B0%EB%B8%8C-C
http://www.webdoor.org/xe/135
http://kldp.org/node/108983
별 내용은 없을거예요~

서론이 너무 길었네요..^^
객체지향언어는 왜 사용하는지, Objective-C는 왜 C랑 다른지... 등등은 C를 배우지 않으신 분들이 아니라면 굳이 여기서 설명해 드릴 필요는 없을 것 같아요^^
다음 번 정도에 객체지향언어의 특징과 왜 객체를 사용하는지 정도에 대해서 간략히 설명해 드릴게요. (만약 제가 깜빡하고 안하면 댓글 남겨주세요..ㅎㅎ)


# 화면에 보이는 Object들 알아보기 
 
사실.. 오늘 이것만 하려고 했는데, Object에 대한 설명이 필요할 것 같아서 위에 아주 장황하게 써놓았네요..ㅋㅋㅋ
자, 본래의 목적으로 돌아왔습니다~
우리가 iOS기기들의 화면에 보이는 녀석들을 한 번 알아봅시다.
참, 이곳에서는 iOS5 기준으로 설명하겠습니다.
때에따라서는 iOS5 미만의 버전들에서 없는 것이 추가로 생긴것도, 있던것들이 없어진 것도 있으시 참고하세요^^

이름 : Page Control
설명 : 아이폰 홈 화면에서도 보이죠? 말그대로 페이지를 이동할 때 마다 페이지 상태를 보여주는 역할을 합니다. 또한 양 옆을 터치해주면 페이지가 넘어가는 역할도 하죠^^
클래스 : UIPageControl

이름 : Stepper
설명 : iOS5 부터 지원되는 녀석입니다. 생긴것만 봐도 아시겠죠? 값을 증감시킬 수 있는 버튼입니다~
클래스 : UIStepper

이름 : Table View
설명 : 말 그대로 테이블(표) 뷰 입니다. 뷰라는 것이 무엇인가요..?? 흠... 컴퓨터 화면에서 보이는 하나의 윈도우창이라고 생각하시면 될 듯 합니다. 일단 자세한 설명은 다음번에^^
클래스 : UITableView

이름 : Table View Cell
설명 : 테이블뷰 셀입니다. 말 그대로 테이블뷰의 기본적인 셀이 아니라 자신이 셀 모양을 직접적으로 만들어주고 싶을 때 사용하게 됩니다.
클래스 : UITableViewCell

이름 : Image View
설명 : View중에서도 이미지를 보여줄 수 있는 View입니다.
클래스 : UIImageView

이름 : Text View
설명 : View중에서 주로 장문의 텍스트를 볼 수 있도록 해주는 녀석입니다. 사용자들에게 수정, 편집, 복사권 등을 허용 또는 불허 할 수 있습니다.
클래스 : UITextView

이름 : Web View
설명 : View중에서 웹사이트 화면을 직접 보여줄 수 있습니다.
클래스 : UIWebView

이름 : Map View
설명 : 설명을 안해도 아시겠죠? 우리가 보는 지도 화면입니다..^^
클래스 : UIMapView

이름 : Scroll View
설명 : 위아래로 스크롤 할 수 있는 화면입니다. 그냥 View는 스크롤이 안돼요^^~ 눈치 빠른 분들은 눈치채셨겠지만, Text View는 Scroll View안에 글자들이 들어가 있는 것이라고 보셔도 무방합니다~
클래스 : UIScrollView

이름 : Date Picker
설명 : 날짜를 선택할 수 있게 만들어 놓은 녀석입니다
클래스 : UIDatePicker

이름 : Label
설명 : 사용자에게 텍스트를 보여줄 때 사용합니다. 여러줄을 나타낼 수 있지만 TextView처럼 스크롤은 불가능 합니다. 또한 사용자가 수정, 편집, 복사 등을 할 수 없습니다. 즉, 보여주기만 가능하다는 말씀!
클래스 : UILabel

이름 : Picker View
설명 : 뺑그르르 돌면서 선택할 수 있게해주는 그 녀석 아시죠?^^
클래스 : UIPickerView

이름 : Ad BannerView
설명 : iAd라는 iOS전용 광고를 사용할 때 사용하는 광고 배너창입니다~ 여기에 관해서는 나~중에 한 번 설명할 기회가 있다면 설명해 보겠습니다
클래스 : ADBannerView

이름 : GLKit View
설명 : OpenGL ES를 포합하는 뷰입니다.  3D관련 모듈을 iOS에서 보다 편리하게 사용하기 위해 만들어진 녀석인데요 iOS5에서 새로 선보였습니다.
클래스 : GLKView

이름 :Round Rect Button
설명 : 우리가 아이폰에서 자주 볼 수 있는 둥그스름한 버튼입니다~ 사실 이 모양 말고도 다른 모양으로 변환도 가능합니다~ 기본적으로 제공되는 버튼들이 많아요~
클래스 : UIButton


이름 : View
설명 : 위에서 소개해 드렸죠? 컴퓨터의 한 화면(창)이라고 보시면 될 듯 합니다. 자세한 설명은 다음 시간에^^
클래스 : UIView

이름 : Window
설명 : 영어 설명을 보시면 화면에 표시된 뷰를 관리하고 꾸미는 역할이라고 정의되는데, 뭐... 딱히 신경쓰지 않아도 될 녀석입니다. iOS에서는 하나의 윈도우가 기본적으로 밑바탕에 깔리게 되며, 하나의 윈도우 안에서 많은 뷰들로 화면이 보이게 됩니다. 사실 윈도우는 사용자에게 부각되거나 보이진 않는 부분이라는게 맞을 것 같기도 하네요~
클래스 : UIWindow

이름 : Navigation Bar
설명 : 익숙한 녀석일 거예요~ 화면에서 위에 Back버튼 보이면서 왔다갔다 할 수 있게 하는 상단의 바 아시죠? 그녀석입니다~
클래스 : UINavigationBar

이름 : Segmented Control
설명 : 사용자에게 몇 개 중 하나를 택일하게 할 때 쓰이는 버튼입니다. 대충 그림보면 답 나오죠?^^ 이것도 버튼과 마찬가지로 몇가지 형태가 존재합니다~ 사실 대부분의 View들은 속성을 조절하면 다양한 형태의 모습이 됩니다~ 마치 내 차에 스티커를 붙이거나 새로 도색을 하는 것 처럼요^^
클래스 : UISegmentedControl

이름 : Navigation Item
설명 : Navigation Bar에 들어가는 내용들을 총칭하여 Navigation Item이라고 합니다. 좌측 또는 우측버튼, 바 제목 등이 Navigation Item에 속합니다.
클래스 : UINavigationItem

이름 : Search Bar
설명 : 이 또한 굳이 설명하지 않아도..^^ 검색할 때 보이는 그 검색 바 입니다.
클래스 : UISearchBar


이름 : Tool Bar
설명 : 화면 상단 또는 하단 등에 바 형태로 여러개의 버튼들을 넣어 기능을 수행할 수 있게 만든 녀석입니다.
클래스 : UIToolBar

이름 : Bar Button Item
설명 : 툴바에 들어가는 아이템들을 총칭합니다. 네비게이션 아이템에도 포함됩니다.
클래스 : UIBarButtonItem

이름 : Fixed Space Bar Button Item
설명 : 화면상에 바 버튼 아이템들 사이에 정해진 간격만큼의 간격을 주는 녀석입니다. 실제로 점선은 보이지 않아요~
클래스 : 클래스 없음

이름 : Flexible Space Bar Button Item
설명 : 위에 있는 녀석은 고정 넓이라면, 이 녀석은 버튼들 사이를 균등한 간격으로 띄워주는 역할을 합니다~
클래스 : 클래스 없음

이름 : Tab Bar
설명 : 카카오톡에 보면 아래에 메뉴처럼 화면 옮겨 다닐 수 있게 몇개의 버튼들을 나열해 놓은 바 같은 곳이 있죠? 그곳이 탭바 입니다.
클래스 : UITabBar

이름 : Tab Bar Item
설명 : 말 그대로 탭바에 들어가는 아이템들을 총칭합니다..^^
클래스 : UITabBarItem

이름 : Text Field
설명 : 사용자에게 텍스트를 입력받을 수 있는 필드입니다.
클래스 : UITextField

이름 : Slider
설명 : 설정창에 음량조절, 화면밝기조절 등에 보면 많이 보이죠? 뭐 그런 역할 주로 합니다
클래스 : UISlider

이름 : Switch
설명 : 설정창에 보면 On/Off설정 하는 녀석 보이죠? 그 녀석입니다~
클래스 : UISwitch

이름 : Activity Indicator View
설명 : 여기 캡쳐에서는 잘 보이지 않지만... 대기 화면에서 뱅글뱅글 돌아가는 녀석 아시죠? 날 자꾸 기다리며 설레게 하는 그 녀석...ㅋㅋㅋ 그녀석을 Activity Indicator 라고 합니다. 인터넷 사용중에 화면 상단 Status Bar에서 돌아가는 작은 녀석은 Network Indicator라고 불러요~
클래스 : UIActivityIndicator

이름 : Progress View
설명 : 말 그대로 현재 진행상황을 보여줄 때 주로 쓰입니다. 주우우욱 차오를 때 마다 설레는 그 기분^~^
클래스 : UIProgressView


후아~
넘넘 길어요!! 
진이 쭉쭉 빠지네요...^^
열심히 한 만큼 많은 도움과 참고가 되었으면 좋겠네요~
지나가는 고수분 께서는 혹여 제가 실수한 부분이 있다면 지적 부탁드릴게요~
저도 사람인지라 방대한 양을 하려니 지치고 헷갈리는 부분도 더러 있네요~^^;
참..!! 그리고 여기 있는 설명이 부족하면 Xcode실행하셔서 Object Library에서 객체들 위에 살포시 얹어 놓고 기다리시면 도움말이 보일거예요~ 
아래 그림처럼요..^^



자, 그럼 오늘은 여기까지 해 보구요~
다음 번에는 iOS화면들이 어떤 관계에 있는지, 그리고 화면에 보이지 않는 객체들에는 어떠어떠한 것들이 있는지 1~2번에 걸쳐서 얘기해 보도록 할게요.
그리고 그 다음 번에는 객체지향에 관한 얘기를 조금 이어서 해 볼게요 :-)
그럼 모두 다음에 보아요~^^ 


by yagom

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기 


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓ 

Posted by yagom

댓글을 달아 주세요

  1. 무한도전 2012.01.11 09:10  댓글주소  수정/삭제  댓글쓰기

    설명 정말 쉽고 재밌게 잘 해주셨네요. 잊어버릴만한 내용들도 다시 떠오르고, 모르는 부분도 이해되구요. 잘 봤습니다. 감사해요~!!

  2. 옥탑방원순이S 2012.03.03 09:48  댓글주소  수정/삭제  댓글쓰기

    한번에 정리된 자료들로 보니 훨씬 이해가 쉽습니다. ^_^ 다음 강의로 더 정진!!!

  3. 나이마흔에앱만들기 2012.04.23 03:17  댓글주소  수정/삭제  댓글쓰기

    엊그제 시작했는데, 객체 붕어빵, 클래스 붕어빵틀에서 확 와닿는데요. 부지런히 배울께요. 배워서 남주셔서 감사합니다.

  4. 오싹이 2012.04.25 07:57  댓글주소  수정/삭제  댓글쓰기

     와~~~ 언제 이렇게 다 준비하셨나요!!!
    너무 고생이 많았겠습니다....
    너무 감사 드립니다.
    아이폰 개발 공부하려고 여기저기 찾다가 여기왔는데... 너무 정리가 잘 되어 있네요....
    열심히 공부하겠습니다.
    의욕이 생깁니다....

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.04.25 10:54 신고  댓글주소  수정/삭제

      도움이 되신다니 저도 기분이 좋습니다~^^
      시간이 되신다면 추천도 꽝꽝 박아주세요 ㅎㅎㅎ
      자주 놀러오세요~^^

  5. vip0331 2012.05.14 15:19  댓글주소  수정/삭제  댓글쓰기

    이렇게 보니 막 정리되는 기분이네요.
    많은양 만드시느라 수고하셨습니다.
    감사합니다. ㅎㅎ

  6. Favicon of https://rakubaru.tistory.com BlogIcon 산책고냥이 2012.06.26 09:54 신고  댓글주소  수정/삭제  댓글쓰기

    깔꼼하고 보기 쉽게 설명해주셔서 머리에 쏙쏙 들어와요!!

  7. Lewis6 2012.10.25 17:01  댓글주소  수정/삭제  댓글쓰기

    진심 감사드립니다~~!

    입문자를 배려한 강좌 정말 감동이네요 ㅎㅎ

  8. Favicon of http://blackturtle.tistory.com BlogIcon 까만거북이 2013.01.03 19:43  댓글주소  수정/삭제  댓글쓰기

    정말 고맙습니다! :)

  9. 딴또 2013.03.06 07:38  댓글주소  수정/삭제  댓글쓰기

    번거롭고 힘든 작업을 정말 멋지게 하셨습니다. 감사합니다.

  10. 찰리 2013.12.30 15:25  댓글주소  수정/삭제  댓글쓰기

    정말 감사합니다. 잘 봤습니다.

오늘의 주제

1. Xcode 둘러보기


다섯 번째 시간입니다.
지난번에는  iTunes Connect에 연락처, 은행, 세금정보들을 등록해 보았습니다~
오늘은 개발에 쓰게될 Xcode를 본격적으로 살짝 열어 봅시다..ㅎㅎ
자 이제 본론으로 고고 ^^


# Xcode안녕??
지난 번에 아무 생각없이 그냥 말도안되는 앱 하나 만들어 보았습니다.
이제는 기초를 슬슬 쌓아 보아야 겠지요?
하지만, 체력만 좋고 전술만 좋다고 전쟁에서 이기진 않죠?
무기 다룰줄도 알아야 합니다..ㅎ
우리가 앞으로 매일매일 보아야 할 Xcode라는 녀석을 한 번 뜯어보도록 하죠.
Xcode실행!!
실행 못하시는 분은 없으리라 믿고..ㅋㅋ

지난 번에 지나가면서 보여드렸던 화면입니다.
Xcode화면구성을 간략히 보여주고 있는데요, 제가 부연설명을 쬐끔 하겠습니다..^^




각자 버튼들을 누르면 화면이 어떻게 변하고 어떤 동작을 하는지 스크린샷은 찍지 않았습니다.
감히 아뢰온데, 여러분들께서 직접 눌러보셨으면 합니다.

<1> 종료, 최소화, 확대
MS Windows와는 반대죠? 빨간놈이 종료, 노란놈이 최소화, 초록색놈이 확대입니다. 눌러보세요~

<2> 실행, 정지
어플리케이션 또는 테스트 단위.. 등등을 실행할 수 있는 버튼과 중지 하는 버튼입니다.
지난 번에 실행 한 번 눌러보셨죠?ㅎ
꾸욱 누르고 있으면 또 다른 녀석들도 나타납니다.. 그 녀석들은 추후에 설명하도록 해요~

<3> Scheme 선택
쉽게말해서, 이 앱을 어디에서 실행할까 설정해 주는 역할을 합니다. 시뮬레이터, 기기 등을 선택할 수 있습니다.

<4> Breakpoints
우리는 차후에 Debug라는 것을 할 때가 올겁니다. 디버그... 즉 벌레시키들을 잡아야 한다.. 버그를 없앤다 뭐 그런거죠 ㅋㅋ 여튼 그 디버그를 할때, 프로그램에서 의심가는 부분 등을 체크해 놓고 유심히 볼때 쓰는 그런 기능입니다. <13>의 Breakpoint gutter로 Breakpoint를 설정 해 줄 수 있고, 지금 이 버튼으로 Breakpoint들을 활성/비활성화 시킬 수 있습니다.

<5> 프로젝트명, 파일명
현재 작업중인 프로젝트와 파일명을 보여줍니다.

<6> 작업내역 확인창
아.. 위에 적은 것들은 제가 임의로 이름 붙인거예요.. 정식 명칭은... 궁금하면 찾아보세요..ㅋㅋ
빌드나 실행 중, 혹은 후에 결과들을 보여줍니다.

<7> 최대화
OSX Lion을 설치하신 분들이라면 보이는 최대화 버튼입니다.

<8> Editor Mode 버튼
화면 하단에 코드가 나오는 에디터 부분의 보기형식을 바꾸는 버튼들입니다.
궁금하시죠? 한 번 눌러보세요~ㅎㅎ 다 눌러보세요~
첫 번째는 단일 기본 화면. (Standard editor Mode)
두 번째는 두개의 에디터창이 생기는 모드. (Assistance editor Mode)
세 번째는 버전 에디터 모드. (Version editor Mode)
버전 에디터가 뭔지는 다음에 설명하도록 할게요~ 한 번에 너무 많은 것을 알면 머리가 뽀개집니다..ㅋㅋㅋ 궁금하시면 검색창에 버전컨트롤, 또는 Repository 등을 치면 많은 정보가 나올거예요.. 일단은 궁금증을 덮어봅시다 ㅋㅋ

<9> View 버튼
전체적인 화면을 크게보면 네 화면으로 나뉘는데요,
첫 번째 버튼으로 나왔다 사라졌다 하는 <11>영역. 네비게이터입니다.
즉, 소스파일이나 검색, 에러 결과창 등등 많은 것들을 우리에게 안내하고 보여주죠.
두 번째 버튼으로 나왔다 사라졌다 하는 <17>영역. 디버그영역입니다.
아까 말씀드렸듯이 버그 때려잡을때 쓰게되는 창입니다.
세 번째 버튼으로 나왔다 사라졌다 하는 <15>,<16>영역. 유틸리티입니다.
정말 유용하고 좋은 기능들을 가지고 있죠. 자세한 설명은 아래에서..

<10> Organizer
Organizer창을 띄우는 버튼입니다.
Organizer에서는 디바이스 관리, Repository관리 등등을 할 수 있구요, 우리에게 가장 필요하고 중요하고 개발 내내 친구가 될 Documentation을 볼 수 있는 창입니다.
개발 문서는 정말 너무너무 중요합니다. 추후에 설명해 드릴게요~

<11> Navigator
Project Navigator, Symbol Navigator, Search Navigator, Issue Navigator, Debug Navigator, Breakpoint Navigator, Log Navigator 등으로 이루어져 있습니다.
말 그대로 안내자 입니다. 현재 작업중인 프로젝트에 관련한 대부분의 내용을 이곳에서 훑어 볼 수 있습니다. 한 번씩 쭈욱 눌러보고 돌아보세요~ 아무런 문제 생기지 않습니다..ㅎㅎ

<12> Jump Bars
프로젝트 내부의 여러 곳들을 점프 점프 하면서 다닐 수 있는 막대기 입니다..ㅋㅋ 한 번 눌러서 여기저기 점프하고 놀러다녀 보세요~

<13> Breakpoint gutter
아까 위에서 말씀드린대로 Breakpoint를 지정할 수 있는 막대 공간입니다.
한번 콕 찍어 눌러보세요. 그럼 퍼런놈이 생깁니다. 이것이 Breakpoint인데요 동시에 <4>영역 Breakpoints도 활성화 될거예요. 그러면 또 Breakpoints도 눌러서 비활성화도 시켜보고 놀아보세요. 그러고 다 놀만큼 놀아보셨으면 Breakpoint들 다 제거해 주세요 ㅋㅋㅋ 제거하는 방법은 스스로 연구해 보시길!! 여러가지 있으니까요..^^
참고로 네비게이션영역에선 프로젝트의 모든 것을 훑어 볼 수 있다고 말씀드렸죠?ㅎ

<14> Editor area
말그대로 에디터 영역입니다. 우리가 소스코드를 작성, 수정하는 곳이죠. xib파일을 누르면 물론 IB 화면이 나옵니다. 이 말이 무엇이냐구요? 저번에 해 봤잖아요~

<15> Inspector pane
인스펙터 판입니다. Inspector하면 한국어로 검열자, 감시관, 감독관 등등의 뜻이있죠? 여기선 관리감독이 가장 맞는 표현이 아닐까 싶은데요, 이녀석은 에디터 영역에 선택된 것들의 속성, 정보 등등 모든 것들을 알고 있구요, 내가 선택한 Object또는 코드내용에 대한 속성과 도움말 등등 많은 것을 알려줍니다. 한 번 프로젝트의 모든 파일들을 한 번씩 클릭해 가며 어떤 내용들을 담고있는지 확인해 보세요~ 

<16> Library pane
말그대로 라이브러리 판입니다. 
File Template Library, Code Snippet Library, Objects Library, Media Library 등이 있습니다. 이곳에도 정말 많은 정보들이 있습니다.
파일 샘플, 코드 샘플, 오브젝트들, 미디어 라이브러리..
그 중 우리가 제일 많이 보게 될 라이브러리는 오브젝트 라이브러리구요, 그 다음으로는 간간히 코드 샘플도 보게 될거예요. 코딩 초보라면 코드 샘플도 많이 많이 봐두시면 좋아요~
비단 Objective-C뿐만 아니라 C/C++샘플 코드들도 있거든요^^

<17> Debug area
말그대로 디버그 할 때 쓰는 영역입니다.
지금 화면 모드가 두개로 나뉘어진 모드인데요.
왼쪽에 보이는 것이 변수들이 나올 창이구요, 오른쪽에 보이는 것이 콘솔창입니다.
디버깅 할때 왼쪽 창에는 변수들과 그 메모리 주소 등이 나오고, 오른쪽에서는 콘솔에 로그들이 찍혀 나오겠죠? 지금 잘 몰라도 차츰 배워가면 되니 걱정마세요~


오늘은 여기까지..^^
지금 있는 설명들은 최대한 간략하게 정리 해 본거예요~
어디 하나 쓸모없는 것 없이 기능들을 알차게 잘 만들어 놓았으니 이것저것 만져보며 익숙해 지시길 바랍니다. 어떤 버튼이 어떤 기능을 하는지도 파악해 두시면 좋구요..^^
또한, 제가 가르쳐 드리지는 않았지만 각 기능에는 대부분 단축키가 있죠? 한 번 알아보세요~
첫 습관과 첫 기초가 중요합니다. 빨리 무언가 해보고 싶더라도, 꼭 한번 Xcode를 쥐잡들이 뜯어보세요 ㅎ
자, 그럼 다음에 뵙겠습니다~


by yagom

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기


 

↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓

Posted by yagom

댓글을 달아 주세요

  1. 옥탑방원순이S 2012.03.03 09:43  댓글주소  수정/삭제  댓글쓰기

    이렇게 멋드러지게 잘 설명해주시다니 ^_^
    시중에 파는 책보다 훨씬 낫네요!!
    책에서는 대부분 xcode3 버전으로 된 것들이 많아서
    많이 헷갈렷거든요 >.<
    열심히 배우고 멋진 앱 만들기 도~전!!!

  2. 더벅머리 2012.05.09 17:56  댓글주소  수정/삭제  댓글쓰기

    기초와 기본이 중요하다!!! 새겨듣겠습니다!! 저도 의욕만 앞서 기초와 기본을 제쳐둔 것이 아닌가 돌아보게 되네요. xcode란 프로그램을 일단 잘 알아야 코딩도 할 수 있는 법!! 오늘부터 좀 더 그 녀석이랑 친해져볼께요!~!

  3. 초보kay 2012.07.23 17:23  댓글주소  수정/삭제  댓글쓰기

    많은걸 배우고 갑니다. 감사합니다.

  4. Favicon of http://blackturtle.tistory.com BlogIcon 까만거북이 2013.01.02 22:48  댓글주소  수정/삭제  댓글쓰기

    정말 고맙습니다. 잘 배우고 갑니다. :)

  5. 딴또 2013.03.06 07:15  댓글주소  수정/삭제  댓글쓰기

    정말 너무 감사합니다. 열심히 공부하겠습니다.

  6. 차나한잔 2013.03.19 19:01  댓글주소  수정/삭제  댓글쓰기

    정말 고맙습니다. 너무 잘 보고 있습니다. 추천 100만번 꾸욱 누릅니다~ ^^

  7. 조언이필요한자 2014.02.20 10:34  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 질문이 있어서요 ㅠㅠ

    프로젝트명을 변경하려고 하는데요

    인터넷 찾아서 View - > Utilities - > File Inspector 클릭후

    변경이름을 치고 리턴을 쳤습니다

    그리고 Rename 으로도 해보고 Don't Rename 을 클릭 하여 프로젝트 명이 변경된것으로 보였는데요

    이제 실행을 시키면 Apple LLVM Compiler 5.0 error 라면서

    Command /Applications/xcode 5/Xcode 5.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang failed with exit code 1

    이 에러가 나는데 해결 방법좀 알려주실수 있을까요??ㅜ

    읽어주셔서 감사합니다.

    좋은하루되십시오~

    • Favicon of https://blog.yagom.net BlogIcon yagom 2014.02.20 18:08 신고  댓글주소  수정/삭제

      안녕하세요!

      일단 프로젝트 명 변경 방법부터 잘못되긴 했는데...

      음... 우선 클린 후 빌드해 보시구요...

      뭐가 잘못되었는지 딱히 잘 모르겠어요..ㅠ

오늘의 주제

1. iTunes Connect에 계좌정보 입력하기


네 번째 시간입니다.
지난번에는 iOS Developer Program 등록 마무리와 개발을 위한 인증서 및 프로비저닝 파일 설치를 했구요~
이번에는 iTunes Connect에 대해 조금 알아봅니다~
자 이제 본론으로 고고 ^^


# iTunesConnect에 계좌정보 입력하기
지난 번에 마지막으로 도착한 의문의 이메일이 있었습니다.
참지 못하고 눌러보신 분들도 계시겠습니다..^^
그 메일이 왜 왔는지 한 번 살펴보도록 할게요~
기쁜 마음으로 iTunes Connect를 클릭해 볼까요?? 후훗..

물론 직접 http://itunesconnect.apple.com/ 으로 진격하셔도 됩니다~! 고고씽~


로그인을 해달라고 하네요~

기쁜 마음으로 로그인~

[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile26.uf@1946BD3C4EB0FCDA093DC3.png%7Cwidth="500"_##]
또.. 약관에 동의 하라네요~ 뭐 해야지요~
동의~

[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile23.uf@1746BD3C4EB0FCDA0A786C.png%7Cwidth=%22500%22%20height=%22330%22%20alt=%22%22%20filename=%223.png%22%20filemime=%22image/jpeg%22%7C_##]
자.. 이제 연락처, 세금, 뱅킹 정보를 입력하는 화면이 나옵니다.
All이라고 써있는 줄의 Request버튼을 눌러줍니다.

[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile25.uf@1946BD3C4EB0FCDB0B63A7.png%7Cwidth=%22500%22%20height=%22401%22%20alt=%22%22%20filename=%224.png%22%20filemime=%22image/jpeg%22%7C_##]
물론 또 약관이 나오겠지요?
동의해주시구요~


동의 했으니 당연히 고마워 해야죠~
Done버튼 클릭~
 


일단 연락처 정보 먼저 입력해 봅시다. Contact Info의 Set Up버튼을 클릭~


현재 나의 연락처 정보가 입력이 되어있지 않으므로, Add New Contact 클릭~


요런 창이 올라오면 이름, 성, 이메일주소, 직위, 전화번호를 차례로 적어줍니다. 팩스번호는 적지 않아도 무관합니다.
직위에는 개인개발자 또는 1인기업이라면 President라고 적어줍시다.
나 혼자니까 내가 짱이잖아요 ㅋㅋㅋ
만약 회사라면 적당한 직위를 적어주면 되겠습니다.


관리자, 회계, 기술, 법률, 프로모션 담당자가 전부 저군요...ㅋㅋㅋ 전부 세팅해 주고 Done버튼을 눌러줍니다.


자, 이번에는 은행계좌 정보를 입력해 봅시다.
Bank Info 의 Set Up버튼을 눌러줍니다~


미리 저장되어 있는 계좌 정보가 없으므로 Add Bank Account버튼을 눌러줍니다~


은행계좌가 저는 한국꺼 밖에 없으므로.. 한국을 선택해 줍니다.
Korea, Republic of
아... 우리나라는 민주공화국인데... 맞나요? 흐음...
민주 공화국이었나...?
지금 민주공화국이라고 왜 생각이 안들까요...
아! 사설 죄송합니다 ㅋㅋ
젠장 대한민국은 민주공화국인데.. 젠장


여튼 이제 은행 코드를 입력하라고 나오는데요, 우리가 은행코드를 어찌 알겠습니까.
Lookup your Bank를 클릭!


저는 이름으로 검색해 보았습니다.
영어로 검색하셔야 합니다~
자신의 은행정보를 클릭하고 Next를 눌러줍시다.


은행이 맞는지 확인하고 다음 클릭해 줍니다.


계좌번호를 입력하구요, 이름, 그리과 화폐단위는 저는 KRW즉, 한화를 선택했구요, 전화번호를 입력했습니다.
그러나 여기서 주의할 것은 Account Holder Name. 즉, 계좌주 이름이 정확하지 않으면 입금되지 않는다는 내용이 주의사항으로 나와있습니다.
저는 자신의 은행의 고객센터에 전화하여 꼭 영문명을 확인하시길 추천드립니다.
저도 혹시나 해서 전화해보니 아예 영문명이 등록이 되어있지 않아 전화상으로 영문명을 등록했습니다.
카드나 여권 등에 적힌 것과는 달리 은행에 등록되는 영문명은 또 다르니 꼭 확인하시길 바랍니다.


내용이 맞는지 확인하고 저장을 눌러줍니다.
내용이 맞지 않으면 추후에 수입이 들어오지 않을 수 있으니 잘 확인하시길 바랍니다.


자신의 은행정보를 선택하고 저장을 눌러줍시다.


자 이제 Tax Info의 Set Up 버튼을 눌러줍니다. 이건 스샷을 못찍었네요..^^
그럼 아래와 같은 화면이 나옵니다.
우린 호주인도 아니고 캐나다인도 아니고.. U.S. Tax Forms는 모두에게 필요하다고 하니 그거 작성해 줍시다.
U.S Tax Forms의 Set Up버튼 클릭!


미국 시민권자이거나 거주자냐고 묻네요. 아니니까 No.


미국에서 사업중이냐고 묻네요. 아니니까 No.


아래 칸들을 잘 작성해 주시고 확인 버튼 클릭.


다시 한 번 확인하라고 하네요. 앞으로 웹상으로 수정이 불가능하다고 경고하네요. 다시 한 번 확실한지 확인하고 제출합니다.


이번에는 iAd Network에 정보를 등록합니다.
iAd는 애플이 제공하는 모바일 광고 플랫폼입니다.
언제 쓸줄은 모르지만, 뭐 쓰던 안쓰던 나중에 언제 쓸지도 모르고, 지금 시간 얼마 안걸리니까 요것도 작성해 줍시다.
작성방법은 아까와 마찬가지이지만, 이미 정보를 다 등록해 놓았으므로 선택하고 제출만 눌러주면 됩니다. 
방법은 동일하기 때문에 따로 안찍었습니다.


자, 이렇게 하여 모든 정보를 다 입력하였습니다.
추후에 확인이 완료되면 Status가 Processing이 아니라 유효기간이 나오게 됩니다. 


이렇게요~


자, 드디어 등록이 끝나고 iTunes Connect 홈 화면으로 왔습니다~
iTunes Connect에서는 내가 등록한 어플들을 관리하고, 수입과 다운로드 회수 체크 등 여러가지를 할 수 있습니다.
한 번 쭈욱 둘러보세요
어플을 하나 완성하기 전까지는 들어올일이 거의 없지만, 하나 완성하고 나면 자주 들어와볼 그런 곳입니다..ㅎㅎ



오늘은... 아쉽지만 여기까지~
이제 다음 부터는 본격적으로 어플 만들기에 필요한 것들을 차근차근 알아가 볼게요 ㅎㅎ
그럼 다음에 또 만나요~ :-) 

by yagom

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기

Posted by yagom

댓글을 달아 주세요

  1. Favicon of http://talkit.tistory.com BlogIcon 가야태자 2012.06.06 22:08  댓글주소  수정/삭제  댓글쓰기

    음 오늘은 저도 이만 자야겠습니다. ^^;;

    내일 부터는 본격적으로 XCode를 통해서 공부를 해보겠습니다.

    앗 내일은 안되고 주말에 공부할 수도 있구요 ^^;;

  2. Favicon of http://hatnim.tistory.com BlogIcon 햇 님 2012.07.26 17:15  댓글주소  수정/삭제  댓글쓰기

    요즘 한창 iOS 앱 개발을 하는 도중인데 Lion 버젼으로 정리가 잘되어있어서 추천 꾹꾹 눌렀습니다.

    항시 개발은 준비과정에서 반이상은 먹고 들어가는거 같네요!

    구글링과 애플에서 제공하는 샘플코드로 머리 빡빡 굴리던게 뻥 뚫린기분입니다! ^-^

  3. poku 2012.09.04 10:23  댓글주소  수정/삭제  댓글쓰기

    만든 어플을 기기에 등록하는거만 하려면 이건 안해도 되죠..?

  4. 2012.10.30 21:31  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  5. Favicon of http://trapping.egloos.com/ BlogIcon TrappinG 2013.07.02 21:00  댓글주소  수정/삭제  댓글쓰기

    좋은 정보 감사합니다. 덕분에 수월하게 등록할 수 있었네요.

    다시 한번 감사의 말씀 드립니다.

  6. 김성욱 2017.03.25 14:07  댓글주소  수정/삭제  댓글쓰기

    잘보았습니다

  7. Ted 2017.09.20 04:42  댓글주소  수정/삭제  댓글쓰기

    잘보고 갑니다.~ 혹시

    Tax Information 등록하실 때, EIN 발급받으셔서 등록하셨나요?

    W-8BEN 폼에 어떻게 작성해야하는지 잘 모르겠네요

    • Favicon of https://blog.yagom.net BlogIcon yagom 2017.09.20 22:48 신고  댓글주소  수정/삭제

      안녕하세요 Ted님,

      그 부분에 대해선 저도 자세히 모르겠습니다^^;

      요즘 등록할때는 어떻게 나오는지 잘 모르겠네요^^;; 도움이 되지 못해 죄송합니다!


오늘의 주제

1. iOS Developer Program 등록 마무리하기

2. 인증서 및 프로비저닝 파일 설치 



세 번째 시간입니다.
지난 번에는 iOS Developer Proram에 등록하고 처음 Xcode로 의미없는 어플 하나 만들어 봤습니다.
이번에는 iOS Developer Program 등록 마무리와 개발을 위한 인증서 및 프로비저닝 파일 설치를 할까 합니다~
자 이제 본론으로 고고 ^^


# iOS Developer Program 등록 마무리
iOS Developer Program을 구매하고 긴긴 기다림 끝에 이메일이 도착했습니다^^.
기쁜 마음으로 Activation Code를 클릭해 볼까요?? 후훗..!


아.. 그런데 이게 무슨 날벼락 같은 소식입니까??ㅠㅠ
애플 개발자 프로그램 멤버쉽을 활성화 할 수 없다고 나오네요... (물론 무사통과 하신 분들도 있을 겁니다.)
그런데 저는 이런 내용이 화면에 나오네요..
당황하지 말고 contact us 를 클릭하여 당당히 물어봅시다.



우리는 Program Enrollments 부분을 클릭하여 메일을 보내봅니다.
영어로 쓰시는 것이 가장 빠르고 효율적으로 답변을 받으실 수 있습니다.
영어가 잘 안되더라도 최선을 다하여 영어로 써봅니다.
무슨 연유로 내가 통과되지 않았는지 알고 싶다고 영어로 써서 문의를 했습니다.
메일을 보내실 때에는 반드시 Enrollment ID를 함께 적어 넣어 주셔야 합니다.


그랬더니 다음 날 저에게 회신이 돌아왔습니다. (제가 쓴 내용은 상상에 맡기겠습니다..^^;)
================================================================================
Re: Apple Developer Support

Hello,

Thank you for contacting Apple Developer Support regarding your recent program purchase.

Please know that we use technology which matches your Apple Developer program enrollment detail with the billing information for your program order. Your recent order information did not sufficiently verify your identity against your enrollment detail and your order was placed on a temporary hold.

We have reviewed the issue and have removed the hold on the order. At this time, we ask that you please refer to the original activation code email that you received and click through the link once again. You should be able to now successfully activate your program.

We apologize for any inconvenience. If you have any questions or need further assistance, please let us know.

Regards,
================================================================================
대충, 임시적으로 홀드 상태였다고... 메일에 있던 엑티베이션 코드를 다시 클릭하면 정상 등록이 될거라고 써있네요.
그와 함께 아래와 같은 메일도 함께 왔습니다.
홀드 상태에서 해방되었으니 다시 인증하라고 나오네요.


처음 인증번호가 왔던 메일을 열어 다시 인증번호를 눌러줍시다.



자 이제 정상적으로 등록이 되는 절차입니다.
당당히 Activate 버튼을 클릭!


Activation Complete!! 드디어 기다림의 시간이 끝을 내리는군요 ㅎㅎ
Get Started!!!


메일로 또 뭔가 왔습니다. 한 번 읽어보시구요~


아까 Get Started!! 를 누르면 보이는 화면입니다.
멤버 센터인데요.
iOS Provisioning Portal로 이동합시다~
(이 화면이 보이지 않는 분께서는 iOS Dev Center의 Member Center로 오시면 됩니다!)


iOS Provisioning Protal 입니다.
일단 인증서를 받아봅시다.
Certificates를 클릭!


인증서를 획득하기 위한 과정이 필요합니다.
일단 아래와 같은 화면이 나오지 않는다 하시면 Certificates를 누른 화면에서 Request Certificate.. 였나 그 버튼을 눌러주시면 됩니다.
인증서를 만드는 방법이 아래 쭈욱 설명이 되어있습니다.
제가 설명해 드릴테니 따라오세요~


자신의 맥의 응용프로그램 폴더의 유틸리티 폴더로 가서 키체인 접근 앱을 실행합니다.
못찾으시겠다구요?
힌트!!
/Applications/Utilities


키체인 접근을 실행 시키시고 화면 상단의 메뉴바에서 키체인 접근을 눌러주시고, 인증서 지원 - 인증기관에서 인증서 요청 을 눌러줍니다.


그럼 아래와 같은 화면이 나올텐데요, 자신의 개발자 등록 메일주소와 등록시의 이름을 적어주시고,
디스크에 저장됨을 선택하신 후 계속을 눌러줍니다.


파일 저장 장소를 묻는 화면이 나오는데요, 저는 데스크탑에 저장하겠습니다.
만약 데스크탑이 지정이 되어있다면 그냥 저장 눌러주시고,
그렇지 않은 경우에는 화면에 보이는 화살표를 누르시던지 위치를 눌러서 데스크탑으로 지정하시면 됩니다. (꼭 데스크탑이 아니더라도 자신이 찾기 쉬운곳에 넣어주세요)

 


짜잔~ 끝났네요.


그럼 다시 아까 웹브라우저로 돌아와서 파일 선택 버튼을 눌러주고, 아까 만들어놓은 인증서 요청 파일을 선택해 줍니다.


자 그러면 인증서 목록에 인증서가 보입니다. Status가 Issued로 나오네요.
그런데 이것을 나의 맥에 설치를 해야 하는데, 다운로드 받을 수 있는 곳이 안보입니다.ㅠㅠ
Development라는 버튼 다시 한 번 클릭해 줍시다.


다운로드 버튼이 보일 때 까지 몇 번 눌러주셔도 됩니다.
다운로드 버튼이 보이면 다운로드 받아줍시다.
후에 화면 상단에 보시면 다운로드 내역 보기 버튼을 눌러보면 인증서가 보일거예요.
더블클릭 해주세요~
그러면 인증서 설치가 됩니다.


방금 위에서 한것은 개발 전용 인증서 입니다.
나중에 개발을 완료한 후에 배포용 인증서가 별도로 필요한데, 그때가서 다시 만드려면 귀찮으니까 오늘 다 만들어 줍시다.
아까 눌렀던 Development 옆의 Distribution을 눌러줍니다.
여기서도 마찬가지로 Request Certificate를 누르고 파일 선택을 누르신 후에 아까 생성해 놓은 인증서 지원 파일을 선택해 줍니다. (새로 인증서 지원 파일을 만드실 필요가 없습니다)


여기서도 다운로드 버튼이 나올 때 까지 눌러주다가 나오면 다운로드 받아서 설치해 줍니다.



자 여기까지 했고, 자신의 개발용 기기가 있다면! 웹브라우져는 열어둔 상태로 Xcode를 실행해 줍니다.
물론 개발용 기기도 USB로 맥에 연결하여 줍시다.
(만약 개발용 기기가 아직 준비가 되어있지 않다면, 준비가 되었을 때 추가적으로 이 작업을 해주시면 됩니다. 아래 진행되는 사항들은 개발자 포털에 나의 기기를 등록하고 개발을 위해 쓰기 위함입니다.)
Xcode를 실행 한 후 화면 상단의 메뉴에서 Windows를 클릭하여 메뉴 중 Organizer를 클릭!


아래와 같은 화면이 나옵니다. 물론 똑같진 않으실겁니다. 만약 다른 화면이 나오면 상단의 메뉴중에 Devices를 눌러줍니다.
그 후 연결된 자신의 기기가 보이면, Use for development를 눌러줍니다.
로그인 하라고 하면 자신의 개발자 계정으로 로그인 합니다.
그 후에 화면 하단에 Add to Portal를 클릭!


진행 중에 이런 메시지가 나온다면 항상 허용을 눌러주세요~


웹 브라우저로 돌아옵시다. (기기를 여러대 등록하고 싶으시면 여기로 돌아오시기 전에 Organizer 창에서 Use for development와 Add to Portal을 각각 해주고 오세요~ 뭐.. 물론 나중에 해도 큰 지장은 없습니다)

브라우저로 돌아오셔서 Devices를 눌러보시면 방금 자신이 등록한 기기가 나옵니다.
걍 확인해 보시라구요^^ 그 다음 Provisioning 을 클릭!


자동으로 Provisioning파일이 생성되어져 있을 겁니다.
다운로드 해 줍시다.


좀 전과 마찬가지로 다운로드 내역을 보고 실행 해 줍니다~


그러면 자동으로 다음과 같은 창이 뜹니다.
등록이 제대로 되었나 확인 해 주세요~


자... 여기까지 마치고 나니 의문의 이메일이 한 통 또 도착했습니다.
이 이메일에 대해서는 다음 번에 알려드릴게요~^^*


그럼 다음에 봬요~
(뵈요는 틀린 말입니다. 뵈어요의 준말 봬요..^^)

by yagom

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓
Posted by yagom

댓글을 달아 주세요

  1. Favicon of http://talkit.tistory.com BlogIcon 가야태자 2012.06.06 22:06  댓글주소  수정/삭제  댓글쓰기

    앗 2번 글에서 다음 View 안누르고 온듯 ㅋㅋㅋ ^^;;

    열심히 눌러 드려야 되는뎅 ^^;;

  2. poku 2012.09.04 10:26  댓글주소  수정/삭제  댓글쓰기

    근데 결국 만든 어플을 아이폰에 넣으려면 어떻게 해야하는지가 안써있는데 어떻게 해야 하나요..-_-;

  3. 마스터 2012.12.19 20:27  댓글주소  수정/삭제  댓글쓰기

    그런데요 Add to portal 을 누르면요 No value was provided for the parameter 'appIdName'. 라고 에러가 뜨네요??
    어떻게해요??

  4. 마스터 2012.12.19 20:27  댓글주소  수정/삭제  댓글쓰기

    그런데요 Add to portal 을 누르면요 No value was provided for the parameter 'appIdName'. 라고 에러가 뜨네요??
    어떻게해요??

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.12.20 13:57 신고  댓글주소  수정/삭제

      검색해 보니
      http://stackoverflow.com/questions/12884434/no-value-was-provided-for-the-parameter-appidname-when-provisioning
      이런 답변이 있네요~