iPhone/강좌2009/03/10 21:37
Window는 컨텐츠를 출력하는 역할을 수행하고,  Views는 컨텐츠를 구성하고 그리는 역할을 수행합니다. Window는 MS Windows와 비교하였을 때 메인 다이얼로그, Views는 컨트롤이라고 생각해도 무방합니다. 일반적으로 아이폰 어플리케이션은 1개의 Window와 여러개의  Views로 구성됩니다. 어플리케이션이 생성될 때 UIWindow 클래스의 인스턴스가  아이폰 어플리케이션의 유일한 window가 되고, 그것에 하나 이상의 Views가 포함됩니다. 그 후 UIWindow는 포함된 Views를 출력하는 역할을 수행하게 됩니다. 아이폰 운영체제가 계층적인 windows를 지원하기는 하지만, 1개가 넘는 window를 생성하지 말라고 경고하고 있습니다.

UIWindow는 닫기 버튼이나 타이틀바와 같은 UI를 제공하지 않습니다. 모든 기능은 프로그래밍으로 정의하여 처리해야 합니다. 이것은 모든 아이폰 어플리케이션이 같은 UI 방법으로 시작과 종료를 하기 위한것으로 아이폰의 바탕화면에서 아이콘을 터치하여 프로그램을 시작하고, 홈 버튼을 눌러서 종료하는 것을 위한 것입니다.

어플리케이션을 생성할 때, window의 초기 사이즈는 화면 사이즈에 꽉 차게 생성됩니다. nid나 코드 모든것을 통해서 window는 화면 사이즈보다 작아질 수 없습니다. 화면 사이즈에 맞는 UIWindow는 다음과 같이 UIScreen 을 이용하여 다음과 같은 코드로 생성할 수 있습니다.

<code>
UIWindow * aWindow = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
</code>

아 이폰 어플리케이션에서 view는 대부분 UIView를 상속받아 만들어집니다. 이것은 사용자의 인터페이스를 출력하고, 인터페이스와 통신하는 중요한 두가지 역할을 수행합니다. 모든 view 오브젝트는 지정된 사각 영역 안에서 출력하고 인터페이스의 이벤트를 처리합니다.

하나의 view는 여러개의 sub view를 관리합니다. sub view의 관점에서 그것을 포함하고 있는 view는 superview 또는 parent view라고 불립니다.  sub view 또한 또 다른 sub view를 포함하여 superview가 되는 계층적 구조를 가지고 있습니다.

아이폰 운영체제는 UIKit 이라는 클래스를 제공합니다. UIKit은 UIView를 이용한  window와 각종 컨트롤(views)을 제공합니다. 정말 다양한 views를 제공하기 때문에 다른 운영체제에서 프로그래밍할 때와는 다르게 새로운 컨트롤을 제작할 일이 거의 없습니다. UI 디자인도 그 무엇보다 훌륭하여, 프로그래머가 디자인에 신경쓰지 않고 기본 컨트롤을 그대로 써도 멋진 프로그램이 될 정도입니다. 다른 운영체제(Window)에서는 그렇지 않았죠.

사용자 삽입 이미지

위 그림에서 보는 것과 같이, 정말 많은 컨트롤이 기본적으로 제공되고 있습니다. 각 컨트롤에 대한 자세한 내용은 각각의 컨트롤을 검색하여 사용해보시면 금방 숙지할 수 있습니다.

UIKit은 기본적으로 top-left 좌표계를 사용합니다. 왼쪽 상단이 0,0으로 아래, 오른쪽으로 갈 수록 숫자가 커지는 방식입니다. 다른 운영체제처럼 정수계를 사용하지 않고, floating 형식, 즉 실수계를 사용합니다. 이것은 더 정확히 위치를 잡을 수 있게 하는것에 많은 도움이 됩니다. 예를 들어 300, 300 사이즈를 1/4 로 줄였다가 다시 4배로 정확히 키울 수 있습니다. 다음 그림은 아이폰 스크린과 좌표계의 관계를 나타냅니다.

사용자 삽입 이미지
모든 View 객체는 크기와 위치 속성을 포함함니다. 크기와 위치를 결정하는 속성으로는 Frame과 Bounds라는 두 가지의 중요한 개념이 있습니다. Frame은 출력되는 화면 영역을 의미하고, Bounds는 출력할 데이트에서의 영역입니다. 아래 그림을 보면 이 개념을 확실하게 이해할 수 있습니다. 왼쪽에 있는 그림 데이터에서 사용할 영역을 지정한것이 Bounds 개념이고, 이 Bounds를 화면 영역의 어느 부분에 출력할 지 결정하는 좌표가 Frame 영역입니다.

사용자 삽입 이미지
또 한가지 속성에 Center 값이 있습니다. 이 값은 Frame 영역에서의 가운데 좌표(X, Y)를 의미합니다. Bounds 영역에서의 Center가 아니라는 점을 꼭 명심하고 있어야, 나중에 개발 할 때 헷갈림이 없을 것입니다.

View 객체가 생성될 때 위 세가지 (Bounds, Frame, Center) 속성이 다음과 같이 초기화 됩니다.
Bounds rectangle 의 원점(Top-Left)를 0, 0으로 설정하고, 가로, 세로를(Width, Height)를 Frame(화면 영역)과 같게 설정합니다. 그리고 Center 속성을 Frame의 width/2, height/2 즉 가운데로 설정합니다. 이 세가지의 속성은 각각을 수정해도 다른 두가지의 속성에 다음과 같이 영양을 끼칩니다.

* Frame 속성을 설정하면 Bounds가 Frame의 사이즈에 맞게 확장됩니다. 그리고 Center 속성이 새로운 Frame에 맞게 변화합니다.
* Center 속성을 설정하면 Frame 속성의 원점이 변경됩니다. 즉, Frame의 크기가 변경되는 것이 아니고 Frame의 가운데를 손가락으로 잡고 움직여서 Frame 자체를 움직이는 듯한 효과가 있습니다.
* Bounds의 사이즈를 변경하면 Frame이 그 크기에 맞춰서 변화합니다.
* Bounds의 원점은 두개의 속성(Frame, Center)의 변경 없이도 바꿀 수 있습니다. 아래 그림과 같이 Bounds의 원점을 대각선 아래로 변경하여 그림의 다른 부분을 똑같은 Frame 에 출력되도록 할 수 있습니다.

사용자 삽입 이미지
이로서 아이폰의 윈도우, 뷰, 좌표계의 개요를 마무리 하겠습니다. 다음 강좌에서는 각 좌표를 변환(회전, 이동, 확대, 축소)등을 수행할 수 있는 방법을 소개하고 실질적으로 실습하는 모습을 보여드리겠습니다.

Posted by Getroot

Leave your greetings.

  1. find cheap <a href="http://www.echeapraybansunglasses.com/"><strong>ray ban aviator</strong></a> products on the <a href="http://www.echeapraybansunglasses.com/"><strong>ray ban sunglasses</strong></a> store, then you can see the fashion <a href="http://www.echeapraybansunglasses.com/"><strong>aviator sunglasses</strong></a>, enjor to buy <a href="http://www.echeapraybansunglasses.com/"><strong>raybands</strong></a> gooo.

    2011/10/20 11:43 [ Permalink : Modify/Delete : Reply ]

iPhone/기획2009/03/05 19:48

이번주에는 매우 간단한 게임 두 가지에 대해서 리뷰하겠습니다. 이 두 가지 게임은  두 손가락을 가지고(한 손으로 해도 됩니다) 속도를 즐기는 게임이라는 공통점을 가지고 있습니다.

그 첫 번째는 2009년 2월 21일 Entertainment 카테고리의 free application 9 위인 Bubble Wrap 이라는 게임입니다. 이른바 사람들이 말하는 일명 뾱뾱이( 에어캡 ) 게임입니다.
 





사용자 삽입 이미지사용자 삽입 이미지

게임을 시작하면 화면에 우리가 종종보던 뾱뾱이(에어캡)들이 자리를 잡고 있습니다. 자, 지금부터 45초 동안 손가락들이 얼마나 빠르게 움직일 수 있는지 내 손가락의 속도를 확인하는 일만 남았습니다.

45초간의 스피디한 손가락 움직임을 보여주었다면 나의 점수를 기록합니다.

사용자 삽입 이미지사용자 삽입 이미지
Bubble wrap은 어릴적에 뾱뾱이(에어캡)가 생기면 장난감 삼아서 놀던, 그 향수를 불러일으키는 그런 게임입니다. 손가락을 얼마나 빠르게 움직이느냐 하는 단순함으로 다가옵니다. 하지만 제가 게임을 즐겼던 환경이 i pod touch 2세대였기 때문인지, 뾱뾱이(에어캡)를 누르는 생동감을 단순히 소리로만 느껴야 한다는 것이 작은 아쉬움으로 남았습니다. 아마도 iPhone 이라던가 국내에 있는 T 옴니아나 햅틱등의 진동이 되는 기기라면 보다 재밌게 즐길 수 있을 것으로 생각 됩니다.

팁을 한가지 드린다면, 터치를 통하여 터진 뾱뾱이(에어캡)가 다시 바람이 들어가는데 시간이 조금 걸리기 때문에 약간씩의 여유를 가지면서 터트려 준다면 높은 점수를 얻을 수 있습니다.


두번째 게임은 Fast finger 입니다.

사용자 삽입 이미지
이 application은 비록 순위에 올라있지는 않지만 Bubble Wrap 과 같이 손가락 빠르기를 테스트하는 게임입니다.
start 버튼을 누르면 아래와 같은 화면이 나오는데  tap 부분을 빠르게 눌러주면 카운트가 됩니다.

사용자 삽입 이미지사용자 삽입 이미지사용자 삽입 이미지
30초 동안 열정적으로 터치를 해 주는 것이 게임의 전부 입니다. 30초가 지나면 몇번 터치가 되었는지 점수가 나오고 restart 를 누르면 다시 게임을 하게 됩니다.

위 게임은 친구들과 내기용으로 한 두번 해 보기에는 유용해 보이지만 게임 중간중간에 자사의 다른 프로그램을 홍보하거나 점수를 기록하는 기능이 없어서 게임에 동기부여가 되지 않아 지속적으로 하기엔 무리가 있습니다.

이번주에 소개한 두 게임 모두 조작이 쉽고 단순함이 매력적이긴 하지만 이런 매력만으로는 게임을 지속하고 다시 찾게하기 어려워 보입니다. Bubble Wrap 의 경우 뾱뾱이(에어캡)가 다시 바람이 들어가는 시간을 줄이거나 점수를 올려주는 보너스 요소를 조금 보강하고, F.finger의 경우는 문지르기를 넣거나 자신의 기록을 남길 수 있는 공간이 생간다면 사용자들로 하여금 보다 재미를 느끼게 해 줄 수 있지 않을까 생각 해 보았습니다.



Posted by 부르주아

Leave your greetings.

iPhone/팁&태크2009/03/05 19:08

개발자 프로그램에 등록하였다면 이제 자신의 아이폰(아이팟 터치)에 자신이 만든 어플을 올릴 수 있게 됩니다.

그런데 저는 무언가 간단한 작업이라고 생각했었는데 정말 복잡한 문제더군요.

우선 iPhone Dev Center에 방문하여 로그인을 해봅시다. 예전과는 조금 다른 화면을 보실 수 있습니다.

사용자 삽입 이미지
Apple Developer Forums이라는게 보이는군요. 중요한 Program Portal이라는 것이 오른쪽에 보입니다.

그곳이 아이폰 개발관련 포털 서비스를 제공하는 곳입니다.

1. 개발자 추가 등록

그곳에서 바로 다른 개발자를 등록해 보도록 하겠습니다. Team이라는 메뉴로 들어갑니다.
사용자 삽입 이미지
오른쪽의 Add Member를 클릭하면 사용자를 추가하는 창이 뜨게 됩니다.
사용자 삽입 이미지
이름을 입력하고 Email에는 실제로 초대장이 날라갈 이메일 주소를 적어주시면 됩니다. Role에는 일반 멤버와 관리자를 정할 수 있습니다.

2. 인증서 등록

이번에는 인증서 등록을 위해 Certificates 메뉴로 들어가 봅시다. 아래의 그림에서 표시한 download now를 클릭하여 Apple Worldwide Developer Relations Certification Authority를 설치합시다.
사용자 삽입 이미지
설치시에는 위의 그림과 같이 3가지 모두다 체크를 해줍시다.
사용자 삽입 이미지
이제 개인 키페어를 생성하기 위해 유틸리티 - 키체인 접근 메뉴에 들어갑니다.
사용자 삽입 이미지
키체인 접근 - 인증 지원 - 인증기관에서 인증서 요청
메뉴에 들어갑니다.
사용자 삽입 이미지
위와 같이 체크를 하여줍니다. 사용자 이메일 주소에는 Apple Developer Connection에 등록한 이메일을 공통 이름에는 맥의 내 계정에 등록한 이름으로 동일하게 작성해 줍니다.

CA 이메일 주소는 아무것도 쓰지 않습니다.
사용자 삽입 이미지
키페어 정보는 위와같이 하시면 됩니다. 기본적으로 위와 같이 설정됩니다.
사용자 삽입 이미지
위와 같이 하면 인증서 파일(공개키)이 생성됩니다. 이것을 Certificates 메뉴의 Request Certificate를 눌러 위와같은 화면이 뜨면 파일을 선택하여 등록하여 줍니다.
사용자 삽입 이미지
등록이 되면 ActionApprove가 뜹니다. 그것을 눌러줍니다.
사용자 삽입 이미지
위의 그림과 같이 Download버튼이 생겨납니다. 해당 버튼을 누르면 생성된 나만을 위한 인증서를 다운받을 수 있습니다.
사용자 삽입 이미지
다운받은 인증서를 추가합니다. 키체인에는 로그인만 있으면 됩니다.
사용자 삽입 이미지
잘 추가되었군요. iPhone Developer : 이름이 추가되어있으면 정상적으로 된것입니다.

3. Device 등록

이제 XCode에서 Windows - Organizer를 띄웁니다. 연결했던 나의 아이팟 정보가 뜨게 됩니다. 선택해 봅시다.
사용자 삽입 이미지
위와 같이 Identifier에 40자리의 Hex 코드가 있습니다. 그것을 복사합니다.
사용자 삽입 이미지
Device 메뉴에 들어가서 Add Devices를 클릭합니다. 위와 같은 화면에서 디바이스의 명칭을 정하고 Device ID에는 아까 복사한 40자리 코드를 붙여넣기 합니다.

4. App ID 등록

이제 App ID를 등록할 차례입니다. 이곳에서 많은 분들이 헤매시고, 저역시고 헤매었고; 어려운 부분입니다.
사용자 삽입 이미지
App ID Name
에는 그냥 Program Portal에서 사용하는 식별자라고 생각하시면 됩니다. 별 의미 없으니 뒤의 Identifier에 지정할 내용의 별칭을 지정해 주시면 됩니다.

뒤의 App ID가 조금 중요한 부분인데, Bundle Seed IDBundle Identifier를 합쳐서 App ID가 되게 됩니다.

Bundle Seed ID는 자동 생성 되는것이므로 신경 쓰지 마시고 Bundle Identifier가 중요한데요.

보통은 도메인을 뒤집어 사용합니다. apple.com의 경우 com.apple.*을 사용하게 됩니다.

이는 com.apple 이하의 모든 Bundle Identifier를 허가한다는 뜻입니다. 이런 설정이 귀찮으시다면 *하나만 달랑 써주시면 어떤 경로던지 허가가 되게 됩니다.
사용자 삽입 이미지
등록이 완료된 모습입니다. ID에 보면 XXXXXX.com.apple.* 과 같이 등록된 것을 알 수 있습니다.

여기서 중요한것은 어플리케이션을 만들때 앞의 XXXXXX부분의 코드를 사용하지 않는다는 것입니다.

5. Provisioning 등록
이제 Provisioning을 설정할 때입니다. 공급쯤으로 이해하면 될까요?
사용자 삽입 이미지
Profile Name
을 정하고 자신에게 해당하는 인증서와 생성해둔 App ID 및 등록했던 Device를 선택합니다.
사용자 삽입 이미지
이제 거의 마무리 단계군요. 이제 지금까지 생성했던 나의 계정 + 인증서 + 디바이스 + App ID가 모두 짬뽕된 Provisioning Profile을 다운 받을 수 있습니다.
사용자 삽입 이미지
이 다운 받은 파일을 Organizer 창의 Provisioning 부분에 드래그하여 끌어다 놓습니다.

6. 내 아이폰(아이팟 터치)에 프로그램 올려보기

사용자 삽입 이미지
XCode에서 보시다 시피 왼쪽 위의 창을 Device로 바꿔 줍니다. 그리고 Group&Files창의 프로젝트명을 선택한 상태에서 오른쪽 위의 Info를 클릭합니다.
사용자 삽입 이미지
Build
탭에서 Code Signing Identity의 하위 메뉴인 Any iPhone OS Device에서 내가 등록한 Provisioning Profile을 선택합니다.
사용자 삽입 이미지
Info.plist
파일을 열어 Bundle identifier부분을 App ID에서 등록했던 내용으로 수정하여 줍니다.

App IDXXXXXX.com.apple.* 이었다면 com.apple로 시작하는 어떤 값의 Identifier도 가능하다는 뜻입니다.

위의 값으로는 com.apple.${PRODUCT_NAME:identifier} 로 하면 자동으로 com.apple.HelloWorld(프로젝트명) 가 사용되게 됩니다.
사용자 삽입 이미지
참고로 위의 창을 띄우기 위해서는 Targets안의 내 프로젝트 명을 더블 클릭하여도 됩니다.

이제 마지막으로 실행을 위해 Build&Go를 클릭하면 내 디바이스에 업로드 되어 실행되는 것을 볼 수 있습니다.

* 마치며

위와 같은 과정을 거쳤음에도 인증 문제를 만나는 경우가 있었습니다.

보통은 App ID와 프로젝트의 Bundle Identifier가 불일치 해서 오는 문제였으며 이 문제는 인증서 부분과 App ID등록 부분을 잘 해보면 해결이 되는 문제입니다.

하지만 모든것이 완벽하여 XCode상에서 에러가 발생하지 않지만 인증 문제를 내뱉는 경우가 있습니다.

이때는 공장초기화를 해주고 아이튠즈에 다시 싱크를 해주니 잘 되더군요. 최악의 경우에는 초기화를 해보시기 바랍니다.

새로운 개발자를 등록하였다면 어떻게 해야 할까요?

위의 과정에서 1, 2, 3, 5를 반복하여 Provisioning Profile을 생성해 주면 됩니다.

App ID를 아무래도 같은 팀이라면 공유하는게 좋겠죠.

Posted by 아이

Leave your greetings.