Nano Blog - 오병우

Core Audio

http://www.slideshare.net/mobile/invalidname/core-audioios6portland


Audio Unit Hosting

https://developer.apple.com/library/ios/documentation/MusicAudio/Conceptual/AudioUnitHostingGuide_iOS/AudioUnitHostingGuideForiOS.pdf

안드로이드와는 달리 iOS는 MFi 인증을 얻어야만 블루투스 통신이 가능하다고 함

블루투스 4.0이라고 불리는 BLE를 사용하면 해결이 될듯 함

속도는 줄이고 대신 전원을 오래쓰도록 한 것임


검색해 보니 블루투스 4.0을 지원하는 동글들이 판매 중임

- 퓨전 inote BT-T06, anyclear BM42, 유니콘 XU-400B, [노벨뷰]NVV511, 아이노트 BU-4096 등


프로그래밍

http://weblog.invasivecode.com/post/39707371281/core-bluetooth-for-ios-6-core-bluetooth-was


공식

https://developer.apple.com/library/ios/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/AboutCoreBluetooth/Introduction.html


iOS 시뮬레이터에서 테스트하는 방법

https://developer.apple.com/library/ios/technotes/tn2295/_index.html



BLE 호환성을 검사해 주는 앱인듯...

https://itunes.apple.com/us/app/lightblue-bluetooth-low-energy/id557428110?mt=8



찾다보니 Bluegiga의 BLE112 칩이 자주 검색 되는 듯... 이 칩은 MFi 인증을 받은 것인가...


안드로이드처럼 SPP(Serial Port Profile)를 지원할 계획은 아주 없는 건지...ㅠ.ㅠ

지난번 포스팅 에서는 미디 노트를 단순히 AUSampler를 통해 출력하는 예제를 만들어 보았다. 지난번 예제에 코드를 추가하여 완성할 것이니 지난번 예제를 먼저 볼 것!

(지난 예제: http://bwoh.tistory.com/36)


이번에는 지난 예제에 .aupreset 파일을 추가하여 악기를 로딩하고 그 악기 소리를 내보는 예제를 만들어 본다.

LoadPresetDemo에 있는 Vibraphone.aupreset 파일을 추가하였다.

시퀀서(Sequencer)를 만들기 위해서는 여러 악기를 사용하는 것이 필수이므로 악기를 로딩하는 부분을 설명한다.


다음은 ViewDidLoad 함수이다. 지난번 예제에 코드를 추가한다. 

다음은 악기를 로딩하는 함수이다. 지난번 예제에 이 부분을 추가한다. 이 글의 밑에 있는 참고 문헌 부분에 있는 악기 로딩 설명을 참조할 것!



<References>


Apple에서 제공하는 데모 (매우 간단하니 소스 코드 필독!!!)

LoadPresetDemo

http://developer.apple.com/library/ios/#samplecode/LoadPresetDemo/Introduction/Intro.html#//apple_ref/doc/uid/DTS40011214-Intro-DontLinkElementID_2


Audio Unit Hosting Guide (iOS)

PDF 파일

https://developer.apple.com/library/ios/documentation/MusicAudio/Conceptual/AudioUnitHostingGuide_iOS/AudioUnitHostingGuideForiOS.pdf

Web Page

https://developer.apple.com/library/ios/#documentation/MusicAudio/Conceptual/AudioUnitHostingGuide_iOS/Introduction/Introduction.html#//apple_ref/doc/uid/TP40009492-CH1-SW1


Audio Unit Sampler (AUSampler) 악기 로딩 설명

http://developer.apple.com/library/mac/#technotes/tn2283/_index.html


Audio Unit Programming Guide (OS X)

http://developer.apple.com/library/mac/#documentation/MusicAudio/Conceptual/AudioUnitProgrammingGuide/Introduction/Introduction.html

iOS에서 MIDI를 처리하기 위한 CoreMidi API를 Wrapping해 놓은 클래스로 소스 코드가 공개되어 있다.


Midi Device를 붙여서 사용할 때 유용할 것으로 생각됨


설명:

http://goodliffe.blogspot.kr/2010/10/using-coremidi-in-ios-example.html


소스코드:

https://github.com/petegoodliffe/PGMidi



그냥 게임이나 음악 앱에서 미디 악기의 소리만 낼 때는 다음 글을 참조할 것.


[ios] Play Midi Note : 미디 (midi) 노트 (note, 악보) 출력

http://bwoh.tistory.com/36


[ios] Play Midi Note with Instrument : 미디 (MIDI) 노트 (note, 악보) 악기 음색 출력

http://bwoh.tistory.com/37

Project Navigator의 Supporting Files에서 *-Info.plist 파일 클릭

마우스 오른쪽 버튼 눌러서 Add Row


다음과 같이 만들어 줌


소스 코드에 다음 추가



단 백그라운드 상태에서 전화가 오면 다시 재생되지 않음


전화 온 후에 다시 오디오를 재개하려면 다음 글 참조 

http://cafe.naver.com/mcbugi/237796

(delegate와 NotificationCenter 사용)



Scheme을 변경해야 한다.


디바이스와 시뮬레이터 고르는 곳에서 Edit Scheme 선택.



Build Configuration을 Release로 변경한다.



앱등록시 이렇게 변경하여 Build 하고...


디렉토리 ~~~/Release-iphoneos/ 밑에 있는 패키지를 압축하여 업로드한다.


iPhone 앱을 등록할 때 가장 문제가 많은 부분이 CodeSign 부분일 것이다.

일단, itunesconnect.apple.com에서 Manager Your Applications를 통해 기본적인 것은 세팅해 놓아서  Ready for Upload까지 진행한 것을 가정하겠다.


아참! Universal로 했으면 iPhone 및 iPad 스크린샷을 모두 올려야 한다. 그리고, 사이즈도 레티나 사이즈로 변경되어서, 이전에 올려 놓았던 iPhone 스크린샷은 크기가 맞지 않는다고 저장이 되지 않는다...ㅠ.ㅠ 다시 캡쳐 받는 수밖에...

iOS Simulator에서는 캡쳐가 되지 않으므로, command + shift + 4 누른 후에 space bar를 눌러 전체를 캡쳐한 후에 어플리케이션에 기본으로 들어있는 GIMP를 사용해서 정해진 사이즈대로 잘라낸다.

(Google에 찾아보면 .sh 파일과 NSLog를 사용하여 캡쳐하는 방법도 있기는 하다.)


아무튼 원래 주제로 돌아와서... 앱을 동록하는 과정을 살펴 보자.

기본적인 이론은.... Distribution !!!!!! 이다. (Developer가 아닌....)


1. Build할 때는 Distribution Configuration 사용



추가: 이렇게 한다고 되는 것이 아니라 Scheme을 변경해 줘야 한다. Distribution이 없으면 Release 사용

다음의 링크를 보고 따라하면 된다.

http://bwoh.tistory.com/21



2. Code Signing Identity를 "iPhone Distribution:xxxxx"으로 세팅


문제는 2번을 세팅하기 위해서 아래와 같이 iPhone Distribution으로 시작하는 Provisioning Profile이 있어야 한다는 거다. 이게 없으면 세팅할 수 없다.


Xcode의 Organizer를 띄웠을 때 다음과 같이 프로비저닝 프로파일이 있어야 한다.


프로비저닝 프로파일을 확인하려면 https://developer.apple.com/ios/manage/provisioningprofiles/viewDistributionProfiles.action 에 접속한다.



위의 그림과 같이 프로비저닝 중에서 Distribution에 Active한 프로파일이 있어야 한다.

없으면, 오른쪽 위의 "New Profile"버튼을 눌러서 만들어야 한다.


버튼을 누르면 다음과 같이 나온다.


이 때, 중간에 있는 Distribution Certificate에 인증서가 정상적으로 나타나면 다행인데... 여기에 새로 만들라고 한다면...


https://developer.apple.com/ios/manage/certificates/team/distribute.action

Certificates의 Distribution Tab 여기에 가서 만들어 줘야 한다.


Certificate는 어플리케이션 - 유틸리티 - 키체인 접근에서 만든다. 아니면 있는 것을 Submit한다.

키체인 접근  메뉴 - 인증 지원 - 인증 기관에서 인증서 요청



일반적인 과정을 쫓아가서....



키체인 접근에서도 Certificate가 Developer용과 Distribution용 두개가 있어야 한다. (개발자이면서 배포도 동시에 할 경우...)


아무튼, 준비가 되었으면  Certificate는 developer.apple.com에서 다운로드 받아서 키체인 접근에 추가하고....

Provisioning Profile은 developer.apple.com에서 다운로드 받아서 Xcode의 Organizer에 있는 왼쪽 맨 위에 있는 Library의 Provisioning Profile에 추가한다.


애플사의 공식 도움말은 다음과 같다.

https://developer.apple.com/library/ios/#documentation/Xcode/Conceptual/ios_development_workflow


이렇게 세팅을 했다면 빌드를 했을 때 성공한다. 


어디에 만들어 놓은지 알 수가 없으니 Products에서 타겟에 Control+ 마우스 버튼 눌러서 Show in Finder를 클릭한다.


타겟을 압축한다.


압축 파일을 만들었으면 이제 그 파일을 업로드할 차례이다.


Application Loader라는 툴을 사용한다.


itunesconnect.apple.com에서 Manage Your Applications에 들어가면 맨 밑에 Download Application Loader가 있다. 다운로드 받았더니만 버전이 안 맞는다...ㅠ.ㅠ


그 옆에 보면 Video Tutorials에 Adding an App과 Delivering Your Binary가 있다.

Delivering Your Binary 비디오를 보다보면 Xcode를 깔 때 자동으로 설치된 Application Loader의 경로가 나온다.

https://itunesconnect.apple.com/downloads/Deliver_Binary.mov?itcKey=1341916966_fc3b9515fdd13a3f03a9d98eb93c1e8a


실행 시켜서 로그인하면 다음과 같은 화면이 나온다.



중간에 있는 Deliver Your App을 누른다...

이미 올려 버려서 나타나질 않는데... 쉽게 따라갈 수 있다


아무튼 이때 중요한 것은 아까 타겟을 압축해 둔 파일을 선택한다는 것이다.

폴더를 찾아 들어갈 때 유사한 이름들이 있으니 잘 확인해서 들어갈 것!!


뭔가 오래 걸리면 제대로 되는 것이다~

Code Sign 에러가 발생하면 금방 끝난다.


Code Sign 에러가 발생하면 iTunes Connect에서 업로드하려고 했던 버전과 타겟의 버전이 맞게 되어 있는지 확인해 볼것...

이것 저것 구글링하면서 문제가 없는지 찾아보는 수 밖에....


Good Luck!!!


갑자기 Code Sign Error나서 당황했다.


http://liebus.tistory.com/entry/%EC%95%A0%ED%94%8C-Certificate%EB%93%B1%EB%A1%9D-Devices-App-ID-Provisioning-%EB%93%B1%EB%A1%9D-%EA%B3%BC%EC%A0%95


기본적으로는 위의 링크대로 하면 되는데..안되어서 결국은 다음의 방법으로 해결했다.

위의 링크처럼 Key Chain, Certificate, Provisioning다 만들어 놓은 뒤에...


https://developer.apple.com/ios/manage/provisioningprofiles/index.action


여기에서  Active로 되어있는 것을 다운로드 받고 오거나이저의 위에 있는 (디바이스에 있는 것 말고...) Provisioning Profile에 등록하니 되었다.



낙엽 흩날리며 떨어지는 효과를 찾다가 비슷한 효과를 찾았다. 


http://www.youtube.com/watch?v=DSuHoKZo2mE


http://goodreactions.com/blog/2011/09/09/a-glitterticker-effect-in-cocos2d/



위의 그림과 같이 물결 처리를 위해 cocos2d는 사용해야 겠고, 기존의 UIKit도 같이 사용해야 해서 일주일동안 밤새면서 삽질했다. (정지 화면 캡쳐를 하니 물결이 잘 안보이는 군요...ㅠ.ㅠ 위쪽 약간 왼쪽에 유심히 보시길... 위 화면은 개발 중인 화면임)


결과론적으로는 OpenGL과 cocos2d를 사용해 볼 수 있는 좋은 기회가 되었다.


본 글을 통해 얻을 수 있는 지식

cocos2d와 UIScrollView를 같이 사용하여 두 가지의 장점을 한꺼번에 사용할 수 있는 시너지 효과를 얻을 수 있다. 스크롤뷰가 위에 올려져 있으면 밑에 깔려 있는 cocos2d의 Scene에 터치가 작동하지 않는 문제를 해결한다.


1. OpenGL ES 기반으로 그래픽 처리에 뛰어난 cocos2d 설치 방법

2. cocos2d 맛보기 프로그래밍 (항상 동작하는 애니메이션 및 터치에 따른 애니메이션 처리)

3. 일반적인 아이폰 프로그램 처럼 시작하고 부분적으로 cocos2d 화면을 사용하는 방법

4. cocos2d와 UIScrollView를 동시에 사용하는 방법

5. UIScrollView에서 터치한 이벤트를 cocos2d로 전달하는 방법

6. cocos2d에서 터치의 좌표를 제대로 변환하는 방법


cocos2d 설치

먼저 cocos2d를 다운로드 받아서 설치한다. iPod touch 2.5세대까지는 OpenGL 2.0을 지원하지 않으므로 cocos2d 1.0을 사용해야 한다.

http://www.cocos2d-iphone.org/download

위의 홈페이지에서 다음을 다운로드 받는다 (아니면 아래 링크 클릭). 현재 (2012년 6월 23일) 안정화된 버전이라고 되어 있다.

cocos2d-iphone-1.0.1.tar.gz 


다운로드 받은 후에는 다음의 링크에 따라서 설치한다.

http://www.cocos2d-iphone.org/wiki/doku.php/prog_guide:index


응용프로그램-유틸리티에서 터미널을 실행하여 다음을 실행한다. 이때 디렉토리명이 혹시 다를 경우는 뒤에 붙은 버전까지 모두 입력해야 한다.

cd cocos2d-iphone-1.0.1
./install-templates.sh -u


cocos2d 프로젝트 생성

cocos2d를 설치하였다면 cocos2d 템플릿으로 프로젝트를 생성한다. UIKit을 주로 사용하고 부분적으로만 cocos2d를 사용할지라도 cocos2d 템플릿으로 프로젝트를 생성한다.



그림에서는 cocos2d를 먼저 설치 했었기 때문에 cocos2d v2.x도 있으나 위의 1.0.1을 사용해야 한다.

프로젝트명은 TestTouch으로 입력한다.

프로젝트를 생성한 후에는 일단 실행~ (Command + R)



이렇게 나오면 cocos2d까지는 성공 !!!


cocos2d 프로그래밍 가이드를 따라서 만들어 봅시다~

http://www.cocos2d-iphone.org/wiki/doku.php/prog_guide:lesson_2._your_first_game


이미지 파일을 다운로드 하여 프로젝트 Resources에 추가하는 것을 잊지 말 것!!!

http://www.cocos2d-iphone.org/wiki/lib/exe/detail.php/prog_guide:seeker.png?id=prog_guide%3Alesson_2._your_first_game


HelloWorldLayer.m 파일을 다음과 같이 수정한다.



화면을 터치하면 아이콘이 그 곳으로 이동한다.




UIKit으로 시작되도록 수정

이제는 처음 시작한 뒤에 바로 cocos2d 화면이 보이는 것이 아니라, 일반적인 아이폰 앱처럼 실행되도록 수정한다.

Supporting Files에 보면 main.m 파일이 있다. 이 파일을 다음과 같이 수정한다.



이제는 시작시 화면이 될 XIB 파일을 생성한다.






 MainWindow.XIB 파일을 선택하고 File's Owner를 UIApplication으로 변경한다.


Object를 추가한다.


Object를 선택하고 클래스를 AppDelegate로 써준다.


File's Owner를 선택하고 Outlets에 있는 delegate를 마우스로 끌어다가 방금 만들었던 App Delegate에 연결 시켜준다. 아니면 File's Owner에서 Control + 클릭한 후에 끌어다가 App Delegate에서 놓아 주면 연결된다.


그리고 나서 실행(Command + R)해서 검은 화면이 나타나면 일단 여기까지는 성공!!!


TestTouch를 선택하고 Main Interface를 방금 추가한 MainWindow로 지정한다.


그러면, AppDelegate가 작동하므로 아까랑 같이 seeker는 계속 움직이고 있고 클릭하면 cocos2d 아이콘이 따라오는 화면이 나온다.


AppDelegate.m 파일의 - (void) applicationDidFinishLaunching:(UIApplication*)application 내의 모든 내용을 주석 처리한다.


그리고, 실행하면 다시 검은 화면이 나온다.



MainWindow.XIB 파일을 선택하고 Window를 추가한다.


AppDelegate.h 파일의 window에 IBOutlet을 추가해 준다.


MainWindow.XIB 파일에서 App Delegate를 선택하고 window 오른쪽에 있는 동그라미를 끌어다가 왼쪽 App Delegate 밑에 있는 Window에 놓는다. 또는, App Delegate에서 Control + 클릭한 후에 끌어다가 바로 밑에 있는 Window에 놓는다.


Navigation Controller를 추가한다.





첫 화면으로 네비게이션 컨트롤러 사용


UIViewController 클래스로부터 상속받은 MyViewControllerClass를 생성한다.






디렉토리를 한 단계 아래로 지정한다.



MyViewControllerClass.XIB 파일에서 View에 Round Rect Button을 추가한다. Orientation을 Landscape로 변경하고 버튼의 Title은 그림과 같이 입력한다.


MainWindow.XIB 파일에서 Window를 선택하고 오른쪽의 Outlets 중에서 rootViewController의 오른쪽에 있는 동그라미를 끌어다가 왼쪽에 있는 Navigation Controller에 놓는다. 또는 Window에서 Control + 클릭한 후에 끌어다가 밑에 있는 Navigation Controller에 놓아서 rootViewController를 연결시킨다.


View Controller를 선택하고 오른쪽에서 Class를 MyViewControllerClass로 지정한다.


MyViewControllerClass.m 파일의 다음 메소드를 수정한다.


그리고 실행하면 다음과 같이 화면이 나타난다.




버튼을 누르면 cocos2d 화면 출력

RootViewController.m 파일을 다음과 같이 추가 및 수정한다.


 MyViewControllerClass.h 파일을 다음과 같이 수정한다.


MyViewControllerClass.m 파일을 다음과 같이 수정한다.



버튼을 눌렀을 때 RootViewController로 연결되도록 연결한다. 먼저 위의 버튼 중에서 양복 모양 버튼을 눌러서 Assistant Editor가 나오도록 한다. 그 뒤에 MyViewControllerClass.xib 파일을 선택한 후에 버튼을 선택한다. Control을 누른 상태에서 버튼을 클리하고 마우스를 끌어다가 오른쪽에 있는 buttonTapped 메소드에 놓아서 Connect Action이 되도록 연결한다.



그리고 나서, 실행하여 나오는 첫 화면에서 버튼을 누르면 seeker와 아이콘이 나오는 cocos2d 화면이 나온다.

당연히 왼쪽 위의 버튼을 누르면 첫 화면으로 돌아간다.

처음에 만들어 놓은 cocos2d 화면을 _rootViewController 변수에 저장하고 있으므로 버튼을 눌러 다시 들어와도 화면이 유지된다.


UIScrollView와 cocos2d의 openGL view 동시 사용

UIScrollView는 확대/축소 및 스크롤을 지원하므로 사용하기 매우 편리하다. 그러므로, 배경은 cocos2d의 화면을 사용하고 사용자에게 주된 정보는 UIScrollView를 통해 지원하는 방식이 가능하다.


UIScrollView에서 touch

UIScrollView를 사용하니 매우 편리했는데, 밑에 깔려 있는 cocos2d에 터치를 제공하려고 하니, 되질 않았다. UIScrollView에서는 제스쳐를 인식하려고 노력하기 때문에 touch가 안된다고 한다.


해결 방법은 UIScrollView를 상속받아서 touch를 처리하는 View를 만들면 된다. RootViewController.m 파일에서 @implementation RootViewController 앞에 다음을 추가해 준다.


View 생성 및 연결 방법

RootViewController.h 파일에 imageView 프로퍼티를 추가한다.


RootViewController.m 파일에 imageView 프로퍼티의 메소드를 만들기 위해 synthesize 해준다.


viewDidLoad에서 다음과 같이 연결한다. seeker.png를 확대/축소 및 스크롤하도록 만들었다. 그리고, 소스코드 뒷 부분의 viewForZoomingInScrollView에서는 imageView를 사용하여 줌 및 스크롤이 되도록 한다.



userInteractionEnabled는 여기 저기에 넣어 두었다.

다 되었으면 실행하여 커다란 seeker가 있는지 확인하자. 핀치 액션을 통한 확대/축소, 스크롤 등이 잘 되는지 확인하자.



좌표 이상 해결

seeker를 대상으로 한 동작은 모두 제대로 수행되지만 아이콘의 움직임을 위해 터치 했을 때는 좌표가 정확하지 않다. 이를 수정하는 방법은 다음과 같다.

HelloWorldLayer.m 파일을 다음과 같이 수정한다.


이제 실행해 보면 아이콘의 움직이는 좌표도 정확해 졌음을 확인할 수 있다.


스크롤 뷰를 움직이는 동안 멈추는 현상 해결

스크롤 뷰에 터치하고 움직이는 동안 애니메이션이 멈추는 경우가 있다. 이를 해결하는 방법은 다음과 같다.


프로젝트에서 freezing을 검색하면 CCDirectorIOS.m 파일의 startAnimation 메소드 내의 comment가 검색된다.

이를 다음과 같이 주석 해제하면 된다.

이제 실행해 보면 스크롤 뷰를 터치하여 움직이는 동안에도 cocos2d 애니메이션은 별도로 잘 움직임을 확인할 수 있다.



http://cafe.naver.com/mcbugi/172046 의 글에서는 AppDelegate applicationDidFinishLaunching 함수도 고쳐 주라고 되어 있. 위의 방법만 써도 해결되므로 필요 없을 것으로 생각한다. 


본 예제에서는 애초에 해당 부분을 setupCocos2d 함수에 가져오질 않았었다.




결론

cocos2d와 UIScrollView를 같이 사용하여 두가지의 장점을 한꺼번에 사용할 수 있는 시너지 효과를 얻을 수 있다. 다만, 이때 스크롤뷰가 위에 올려져 있으면 밑에 깔려 있는 cocos2d의 Scene에 터치가 작동하지 않는다. 본 글은 cocos2d와 UIScrollView를 같이 사용하는 방법과 이러한 현상을 해결하기 위한 방법을 설명하였다.


1. 기본적인 앱은 Cocoa Touch를 사용하고 부분적으로 cocos2d를 UIKit과 같이 사용하려고 할 때 적용 가능하다.

2. UIScrollView 밑에 cocos2d를 놓고 사용할 때 터치가 되지 않는 현상을 서브클래싱을 통해 해결하였다.



<참고 문헌>

http://www.cocos2d-iphone.org/wiki/doku.php/prog_guide:lesson_2._your_first_game

http://www.raywenderlich.com/4817/how-to-integrate-cocos2d-and-uikit

http://blog.backpackholic.tv/6



cocos2d를 사용한 물결 효과에 관심이 있으시면 이전에 포스팅한 글에 가보시면 유튜브 영상과 소스코드, 작가의 설명 모두 링크가 되어 있으니 참고하시길...

http://bwoh.tistory.com/14


cocos2d에서 UIKit을 사용하기 위한 튜토리얼


http://www.raywenderlich.com/4817/how-to-integrate-cocos2d-and-uikit


cocos2d 프로젝트를 만든 후에 첫 화면은 닙 파일로부터 만들어 지게 하고,

버튼을 누르면 cocos2d scene을 로드 한다.


그 위에 UIKit View(UIButton)를 overlay한다.

cocos2d와 UIView를 같이 쓸 수 있도록 랩퍼 클래스를 만든 분이 있다.


cocos2d를 사용하면 그래픽 처리에 좋고, UIView를 사용하면 애플의 미려한 인터페이스를 사용할 수 있어서 이 두 가지의 장점을 합칠 수 있을 듯....


http://www.cocos2d-iphone.org/forum/topic/6889


cocos2d 2.0에서 사용하려면 sharedDirector 에서 openGLView를 얻던 것을 그냥 view를 얻어야 하는 듯...


[[[CCDirector sharedDirector] view] addSubView:uiItem];



물결 효과를 cocos2d에서 CCSprite처럼 사용할 수 있도록 클래스로 만들어 공개한 분이 있다.

이론적으로는 싸인 파형을 이용했다.

sin(x) / x 였던 듯...


http://www.youtube.com/watch?v=d5ijwDEfZSw&lr=1&feature=mhee

https://github.com/Birkemose/rippleDemo

http://www.cocos2d-iphone.org/forum/topic/25090


에뮬레이터에서는 정상동작하는데 iPod touch 2.5세대에서 돌리려니 에러가 발생했다.

Build Settings에서 Architecture를 Standard (armv6 armv7)으로 변경하니 정상(?)동작했다. 근데 너무 느리다...



<iOS Human Interface Guidelines>

http://developer.apple.com/library/ios/#documentation/userexperience/conceptual/mobilehig/IconsImages/IconsImages.html


주로 사용하는 것만 정리하면 다음과 같다.


 

 iPhone

 iPhone 4S

 iPad

 New iPad


 Default.png

320 * 480 

640*960 

768*1004 (P)

1024*748 (L) 

1536*2008(P)

 2048*1496(L)

 

 Icon.png

57 * 57 

114 * 114 

72*72 

144*144 

 

 앱스토어용 Icon

512*512 

1024*1024 

512*512 

1024*1024 

 

[Tab Bar Icon].png

24 * 22 

(30*30 정도)

(60*60 정도) 

(30*30 정도) 

(60*60 정도) 

배경: 투명, 보이는 이미지 색: 검정색

 

 

 

 

 

 


Icon-72.png: 72x72

Icon-Small-50.png: 50x50

Icon-Small.png: 29x29

Icon-Small@2x.png: 58x58

Icon@2x.png: 114x114


iTunesArtwork

Cocoa는 Objective-C 또는 Objective-C++ 언어를 사용하기 위한 Application Frameworks 이다.


Application Frameworks는 지난 글에 설명한 바와 같이 응용 프로그램이 기본적으로 동작하는 틀(프레임)을 제공하여, 프로그래머가 응용 프로그램에서 만들고자 하는 Business Logic의 설계 및 구현에만 전념할 수 있도록 도와 준다.


응용 프로그램을 작성할 때 백지상태의 처음부터 모든 프로그램을 직접 짤 필요 없이, 응용 프로그램이 기본적으로 동작하기 위한 구조 위에 필요한 부분만을 구현하여 얹어 놓을 수 있도록 해준다.


객체 지향 개념과 소프트웨어 공학에 대한 이해가 깊다면 쉽게 이해할 수 있다.


Cocoa는 Model 또는 Document 역할의 Foundation frameworks와 View 역할의 Application frameworks로 나뉜다.


- Foundation frameworks는 데이터, 파일, 메모리 등 담당

- Application frameworks는 UI (User Interface) 관련 컨트롤, 이벤트 처리 제공


XCode에서 프로젝트 생성시에 Cocoa 응용 프로그램을 선택하여 만들고 Command + Enter로 실행해 보자.


<Homework>

1. MFC의 Document/View 구조에 대해 조사하라.

2. Design Patterns에 대해 간략히 조사하라.

3. Design Pattern에서 MVC (Model-View-Controller)에 대해 자세히 조사하라.

'프로그래밍 > iOS 프로그래밍' 카테고리의 다른 글

물결 효과 (cocos2d)  (0) 2012.06.20
이미지 크기 (작성중)  (0) 2012.06.17
Application Frameworks 란 무엇인가  (0) 2012.05.15
Cocoa, Carbon, Quartz 등의 용어들  (0) 2012.05.15
XCode - Mac의 개발툴  (0) 2012.05.15

초창기에 MS에서 윈도우즈 프로그램을 개발하기 위해서는 메세지 처리, 윈도우 생성 등의 과정을 모든 프로그램에서 유사하게 반복적으로 작성해 줘야 했다.


MS에서는 윈도우즈 프로그래머들의 편의를 위해서 매번 반복하던 작업들을 묶어서 틀(프레임, 와꾸?)을 제공하기 위한 프로젝트를 진행했는데 이름이 AFX이다. Applicarion Frameworks의 줄임말이다.  X는 어디서 튀어 나왔을까? 여기서 X는 "~크" 발음에 해당한다. (크리스마스 X-mas)

참고로, 컴퓨터 분야에서 X는 trans- 라는 통신의 의미로도 자주 사용된다. (오늘의 퀴즈: Mac OS X의 X는 무슨 의미라고 했는지 기억나세요?)


다시 MS로 돌아와서, 프로젝트의 멋진 이름인 AFX는 발표할 때는 MFC (Microsoft Foundation Class)라는 MS는 들어가지만 가슴에 와 닿지 않는 이름으로 변경되는 설움을 겪는다. MFC는 MS가 만들어 준 기반 클래스라는 뜻이라서 응용 프로그램을 만들 때 쓰이는 틀이라는 의미가 축소되었다. 그렇다고 AFX라는 개발 당시의 이름을 모두 바꾸기는 힘들었는지 그대로 발표되어, 아직도 윈도우즈에서 MFC 프로그래밍하다 보면 Afx prefix(접두사)를 많이 만나게 된다.


이제 Mac OS X 얘기를 해보자. 지난 글에 설명한 운영 체제의 전체 구조에서 보면 Application Frameworks Layer(계층)가 있다. 앞서 설명한 MFC와 같이 응용 프로그램을 개발하기 위한 틀, 프레임, 기본적인 구조 역할을 해주는 것이다.


운영 체제에서 동작하는 기본적인 응용 프로그램의 기능들은 모두 제공을 해주므로, 프로그래머는 응용 프로그램에서 만들고자 하는 Business Logic에만 전념할 수 있다.


운영 체제에서 동작하는 응용 프로그램들이 유사한 인터페이스를 제공하고 유사하게 사용할 수 있도록 해주는 기능도 가지고 있다.


<Homework>

1. MS 윈도우즈에서 API 프로그래밍 방법과 MFC 프로그래밍 방법에 대해 비교하라.

2. 객체 지향 개념에서 상속의 개념에 대해 복습하라.

3. MS 또는 애플사에서 만들어 준 틀(AFX)이 그대로 동작하면서 그 소스를 뜯어 고치지 않으면서도, 응용 프로그래머가 원하는 부분을 바꿀 수 있도록 해주는 방법을 생각해 보라. (Hint: 2번 객체 지향 개념의 상속 참고)

'프로그래밍 > iOS 프로그래밍' 카테고리의 다른 글

물결 효과 (cocos2d)  (0) 2012.06.20
이미지 크기 (작성중)  (0) 2012.06.17
Cocoa 란 무엇인가 (Mac OS X)  (0) 2012.05.15
Cocoa, Carbon, Quartz 등의 용어들  (0) 2012.05.15
XCode - Mac의 개발툴  (0) 2012.05.15

XCode를 설치하고 실행했지만 당황스럽게 다양한 용어가 나온다.


아이폰이나 아이패드에서 프로그래밍하고 싶다는 일념하에 어렵게 해킨토시를 설치하거나 큰 맘 먹고 맥을 구매하였다면 먼저 우리가 만들 응용 프로그램이 어떤 곳에서 동작할지 운영 체제에 대해 알아봐야 한다.


MS의운영 체제 이름이 Windows인 것 처럼 맥의 운영 체제 이름은 Mac OS X이다. X는 로마자 10이다. Mac OS 9의 다음 버전이라는 의미이다.


시스템을 설계할 때는 주로 계층 구조를 많이 사용하는데 맥의 개발자 사이트에서도 Mac OS X를 계층 구조로 설명하고 있다.


애플사의 개발자 사이트 주소는 다음과 같다.

http://developer.apple.com/


위의 사이트에 들어가서 Mac OS X의 구조를 보면 Aqua, Spotlight, Cocoa, Carbon, Quartz, Darwin 등의 용어가 있음을 알 수 있다.


처음에 모두 알 필요는 없지만 어떤 것들이 있는지와 간단한 역할 정도는 알아두어야 한다.


<Homework>

Mac OS X의 전체적인 구조에 대해 조사하고 각 부분의 역할을 설명하라.

'프로그래밍 > iOS 프로그래밍' 카테고리의 다른 글

물결 효과 (cocos2d)  (0) 2012.06.20
이미지 크기 (작성중)  (0) 2012.06.17
Cocoa 란 무엇인가 (Mac OS X)  (0) 2012.05.15
Application Frameworks 란 무엇인가  (0) 2012.05.15
XCode - Mac의 개발툴  (0) 2012.05.15