<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1830687063536409594</id><updated>2024-10-24T10:49:43.762-07:00</updated><category term="iPhone"/><category term="Xcode"/><category term="OpenGL ES"/><category term="Reference"/><category term="Objective-C"/><category term="link"/><category term="OpenGL"/><category term="PushNotification"/><category term="용어"/><category term="Framebuffers"/><category term="InterfaceBuilder"/><category term="JSON"/><category term="MPMediaItem"/><category term="MPMediaPropertyPredicate"/><category term="MPMediaQuery"/><category term="SQLite"/><category term="Twitter"/><category term="UIApplication"/><category term="custom template"/><category term="limit"/><category term="template"/><category term="tips"/><category term="커스텀 템플릿"/><category term="탭바와피커"/><title type='text'>I&#39;m not idiot</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://deveruran.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://deveruran.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>URan</name><uri>http://www.blogger.com/profile/18252169921818710895</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://1.bp.blogspot.com/_Jp42cOu6868/S1PnNjw9hLI/AAAAAAAAABE/JwY8y2RsVBc/S220/test.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>53</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1830687063536409594.post-4931745062052587126</id><published>2010-05-09T21:47:00.000-07:00</published><updated>2010-05-10T01:34:55.650-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="iPhone"/><category scheme="http://www.blogger.com/atom/ns#" term="MPMediaPropertyPredicate"/><category scheme="http://www.blogger.com/atom/ns#" term="Reference"/><title type='text'>MPMediaPropertyPredicate Class Reference</title><content type='html'>&lt;span style=&quot;font-size: x-large;&quot;&gt;&lt;b&gt;MPMediaPropertyPredicate Class Reference&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
상속 : MPMediaPredicate:NSObject&lt;br /&gt;
프로토콜 : NSCoding (MPMediaPredicate) / NSObject (NSObject)&lt;br /&gt;
프레임워크 : /System/Library/Frameworks/MediaPlayer.framework&lt;br /&gt;
사용가능 버전 : iPhone OS 3.0 이상&lt;br /&gt;
관련 가이드 : iPod Library Access Programming Guide&lt;br /&gt;
선언 : MPMediaQuery.h&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #3d85c6;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;개요&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;iPod 라이브러리에서 미디어 아이템의 서브셋을 얻는 미디어 쿼리내의 필터를 정의하는 하나 이상의 MPMediaPropertyPredicate 오브젝트 또는 미디어 프로퍼티 프리디케이트들을 사용한다.&amp;nbsp; 이 컨텍스트의 프리디케이트(predicate)는 각 미디어 아이템에 대해 테스트 하기 원하는 논리 상태의 명령문이다.&amp;nbsp; 이 아이템들은 쿼리 결과에서 얻어지는 상태를 만족시킨다.&lt;br /&gt;
&lt;br /&gt;
당신은 &lt;a href=&quot;http://deveruran.blogspot.com/2010/05/mpmediaquery-class-reference.html&quot;&gt;MPMediaQuery 클래스 레퍼런스&lt;/a&gt;에서 설명된 &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaQuery&lt;/span&gt; 클래스를 사용해서 iPod 라이브러리 쿼리들을 정의하고 쿼리 결과들을 얻는다. 미디어 아이템들과 미디어 아이템 컬렉션들은 &lt;a href=&quot;http://developer.apple.com/iphone/library/documentation/MediaPlayer/Reference/MPMediaItemCollection_ClassReference/Reference/Reference.html#//apple_ref/doc/uid/TP40008213&quot;&gt;MPMediaItemCollection 클래스 레퍼런스&lt;/a&gt;와 &lt;a href=&quot;http://deveruran.blogspot.com/2010/05/mpmediaitem-class-reference.html&quot;&gt;MPMediaItem 클래스 레퍼런스&lt;/a&gt;에서 설명된 쿼리를 사용해서 얻는다.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #3d85c6;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;태스크&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;미디어 프로퍼티 프리디케이트 생성&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;color: #3d85c6; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+ predicateWithValue:forProperty:&lt;/div&gt;&lt;div style=&quot;color: #3d85c6; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+ predicateWithValue:forProperty:comparisonType:&lt;/div&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;미디어 프로퍼티 프리디케이트 검사&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;color: #3d85c6; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;property &lt;i style=&quot;color: #6aa84f;&quot;&gt;property&lt;/i&gt;&lt;/div&gt;&lt;div style=&quot;color: #3d85c6; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;value &lt;i style=&quot;color: #6aa84f;&quot;&gt;property&lt;/i&gt;&lt;/div&gt;&lt;div style=&quot;color: #3d85c6;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;comparisonType &lt;i style=&quot;color: #6aa84f;&quot;&gt;property&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style=&quot;color: #3d85c6;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;속성&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;color: #6aa84f;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;comparisonType&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;당신이 쿼리를 호출할 때 비교할 미디어 프로퍼티 프리디케이트 수행 형태.&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;@property (nonatomic, readonly) &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaPredicateComparison&lt;/span&gt; comparisonType;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;토론&lt;/b&gt;&lt;br /&gt;
비교 타입은 &quot;Media Property Predicate Comparison Types.&quot; 를 보도록 하자.&lt;br /&gt;
&lt;br /&gt;
iPhone OS 3.0 이상에서 사용가능하고 MPMediaQuery.h 에 선언되어 있다. &lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #6aa84f;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;property&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;당신이 쿼리를 호출할 때 사용하는 미디어프로퍼티 프리디케이트 속성&lt;br /&gt;
&lt;span style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;@property (nonatomic, readonly, copy) &lt;span style=&quot;color: #3d85c6;&quot;&gt;NSString&lt;/span&gt; *property &lt;/span&gt;&lt;br /&gt;
iPhone OS 3.0 이상에서 사용가능하고 MPMediaQuery.h 에 선언되어 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #6aa84f;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;value &lt;/b&gt;&lt;/span&gt;&lt;/div&gt;당신이 쿼리를 호출할 때 검색할 미디어 프로퍼티 프리디케이트 값.&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;@property (nonatomic, readonly) id value&lt;/div&gt;iPhone OS 3.0 이상에서 사용가능하며 MPMediaQuery.h에 선언되어 있다.&lt;br /&gt;
iPhone OS 3.0 이상에서 사용가능하고 MPMediaQuery.h 에 선언되어 있다. &lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #3d85c6;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;color: #3d85c6;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;클래스 메서드&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;color: #6aa84f;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;predicateWithValue:forProperty:&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;기본 비교 타입으로 미디어 프로퍼티 프리디케이트를 생성.&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;+ (MPMediaPropertyPredicate *)predicateWithValue:(id)value&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; forProperty:(&lt;span style=&quot;color: #3d85c6;&quot;&gt;NSString&lt;/span&gt; *)property&lt;/span&gt;&lt;/div&gt;&lt;b&gt;인자&lt;/b&gt;&lt;br /&gt;
&lt;i&gt;predicateWithValue:&lt;/i&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; iPod 라이브러리에 질의할 때 일치하길 바라는 속성 값.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 예를 들어, forProperty 인자에 MPMediaItemPropertyArtist 상수를 넣었다면,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 이 인자에서 당신은 아티스트명을 포함하는문자열을 제공하도록한다.&lt;br /&gt;
&lt;i&gt;forProperty:&lt;/i&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 미디어 프로퍼티 프리디케이트를 만드는데 사용할 수 있는 호출된 필터가능한 속성.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; MPMediaItem 클래스 레퍼런스의 일반적인 미디어 아이템 속성 키와&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 팟캐스트 아이템 속성 키들을 참고하자.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;리턴값&lt;/b&gt;&lt;br /&gt;
하나의 미디어 프로퍼티 프리디케이트&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;토론&lt;/b&gt;&lt;br /&gt;
이것은 편리한 메서드이다.&amp;nbsp;&lt;br /&gt;
이것은 기본 논리 비교 타입으로 MPMediaPredicateComparisonEqualTo를 사용한다.&lt;br /&gt;
&lt;br /&gt;
iPhone OS 3.0 이상에서 사용가능하고, MPMediaQuery.h 에 선언되어 있다.&lt;br /&gt;
&lt;span style=&quot;color: #3d85c6; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+ predicateWithValue:forProperty:comparisonType:&lt;/span&gt; 도 함께 보도록 하자.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #6aa84f;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;predicateWithValue:forProperty:comparisonType:&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;특정 비교 타입으로 미디어 프로퍼티 프리디케이트를 생성한다.&lt;br /&gt;
&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;+ (MPMediaPropertyPredicate *)predicateWithValue:(id)value&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; forProperty:(&lt;span style=&quot;color: #3d85c6;&quot;&gt;NSString&lt;/span&gt; *)property&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; comparisonType:(&lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaPredicateComparison&lt;/span&gt;)comparisonType&lt;/span&gt;&lt;/div&gt;&lt;b&gt;인자&lt;/b&gt;&lt;br /&gt;
&lt;i&gt;prediateWithValue:&lt;/i&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; iPod 라이브러리에 질의할 때 일치하기를 바라는 속성 값.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 예를 들어, forProperty 속성에 MPMediaItemPropertyArtist 상수를 넣었다면,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 이 인자에서는 아티스트 명을 포함하는 문자열을 제공해야 한다.&lt;br /&gt;
&lt;i&gt;forProperty:&lt;/i&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 미디어 프로퍼티 프리디케이트를 만드는데 사용할 수 있는 호출된 필터가능한 속성.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; MPMediaItem  클래스 레퍼런스의 일반적인 미디어 아이템 속성 키와&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 팟캐스트 아이템 속성 키들을 참고하자.&lt;br /&gt;
&lt;i&gt;comparisonType:&lt;/i&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 프리디케이트를 위한 논리적인 비교 형태.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: #3d85c6;&quot;&gt;&quot;미디어 프로퍼티 프리디케이트 비교 타입&quot;&lt;/span&gt;을 참고하자.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;리턴값&lt;/b&gt;&lt;br /&gt;
하나의 미디어 프로퍼티 프리디케이트&lt;br /&gt;
&lt;br /&gt;
iPhone OS 3.0 이상에서 사용가능하며 MPMediaQuery.h 에 선언되어 있다.&lt;br /&gt;
&lt;span style=&quot;color: #3d85c6;&quot;&gt;+ predicateWithValue:forProperty:&lt;/span&gt; 도 함께 보도록 하자.&lt;br /&gt;
&lt;div style=&quot;color: #3d85c6;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;color: #3d85c6;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;상수&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;미디어 프로퍼티 프리디케이트 비교 타입&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
미디어 쿼리들을 위한 논리적 비교 형태&lt;br /&gt;
다음의 상수들은 iPhone OS 3.0 이상에서 사용가능하며, MPMediaQuery.h에 선언되어 있다. &lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;enum {&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaPredicateComparisonEqualTo&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaPredicateComparisonContains&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;};&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;typedef NSInteger MPMediaPredicateComparison;&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;b&gt;상수&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaPredicateComparisonEqualTo&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 미디어 프로퍼티 프리디케이트의 값과 미디어 아이템의 주어진 속성값이 같을 때.&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaPredicateComparisonContains&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 미디어 프로퍼티 프리디케이트의 값에 미디어 아이템의 주어진 속성값이 포함될 때.&lt;br /&gt;
&lt;a href=&quot;http://developer.apple.com/iphone/library/documentation/MediaPlayer/Reference/MPMediaPropertyPredicate_ClassReference/Reference/Reference.html#//apple_ref/doc/uid/TP40008219&quot;&gt;원문&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://deveruran.blogspot.com/feeds/4931745062052587126/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://deveruran.blogspot.com/2010/05/mpmediapropertypredicate-class.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/4931745062052587126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/4931745062052587126'/><link rel='alternate' type='text/html' href='http://deveruran.blogspot.com/2010/05/mpmediapropertypredicate-class.html' title='MPMediaPropertyPredicate Class Reference'/><author><name>URan</name><uri>http://www.blogger.com/profile/18252169921818710895</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://1.bp.blogspot.com/_Jp42cOu6868/S1PnNjw9hLI/AAAAAAAAABE/JwY8y2RsVBc/S220/test.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1830687063536409594.post-5952396036377694449</id><published>2010-05-09T21:33:00.000-07:00</published><updated>2010-05-10T00:40:44.544-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="iPhone"/><category scheme="http://www.blogger.com/atom/ns#" term="MPMediaQuery"/><category scheme="http://www.blogger.com/atom/ns#" term="Reference"/><title type='text'>MPMediaQuery Class Reference</title><content type='html'>&lt;span style=&quot;font-size: x-large;&quot;&gt;&lt;b&gt;MPMediaQuery Class Reference&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
상속 : NSObject&lt;br /&gt;
프로토콜 : NSCoding / NSCopying / NSObject(NSObject)&lt;br /&gt;
프레임워크 : /System/Library/Frameworks/MediaPlayer.framework&lt;br /&gt;
사용가능한 버전 : iPhone OS 3.0 이상&lt;br /&gt;
관련된 가이드 : &lt;a href=&quot;http://developer.apple.com/iphone/library/documentation/Audio/Conceptual/iPodLibraryAccess_Guide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40008765&quot;&gt;iPod Library Access Programming Guide&lt;/a&gt;&lt;br /&gt;
정의 : MPMediaQuery.h&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #3d85c6;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;개요&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;MPMediaQuery 오브젝트, 또는 미디어 쿼리는 필터나 그룹핑 타입의 방법으로 iPod 라이브러리로부터 미디어 아이템의 셋을 열거한다.&amp;nbsp; 두 방법 모두 옵션이다; 무제한 쿼리는 전체 라이브러리에 매치 한다.&lt;br /&gt;
쿼리는 많아야 하나의 그루핑 타입을 가진다.&amp;nbsp; 쿼리의 필터는 몇개의 미디어 프로퍼티 프리디케이트들로 구성될 수 있다.&amp;nbsp; 당신은 &lt;a href=&quot;http://deveruran.blogspot.com/2010/05/mpmediaitem-class-reference.html&quot;&gt;MPMediaItem 클래스 레퍼런스&lt;/a&gt;에서 설명하는 프로퍼티 키들을 사용하여 &lt;a href=&quot;http://deveruran.blogspot.com/2010/05/mpmediapropertypredicate-class.html&quot;&gt;MPMediaPropertyPredicate 클래스 레퍼런스&lt;/a&gt;에서 설명하는 메서드들을 사용하여 필터들을 만든다.&lt;br /&gt;
&lt;br /&gt;
쿼리를 생성 및 구성한 후에, 당신은 이것을 미디어 아이템 또는 미디어 아이템 컬렉션들을 컴색하는데 사용한다.&amp;nbsp; 컬렉션들은 &lt;a href=&quot;http://developer.apple.com/iphone/library/documentation/MediaPlayer/Reference/MPMediaItemCollection_ClassReference/Reference/Reference.html#//apple_ref/doc/uid/TP40008213&quot;&gt;MPMediaCollection 클래스 레퍼런스&lt;/a&gt;에 설명되어 있다.&lt;br /&gt;
&lt;br /&gt;
이 클래스는 각 그루핑 타입에 사용하며, 대부분의 경우에 iPod 라이브러리의 서브셋에 해당하는 다수의 편리한 생성자들을 포함한다.&amp;nbsp; [표 1] 은 이 생성자들의 기능을 요약한다. 필터 열에 들어가는 자세한 설명은 &lt;a href=&quot;http://deveruran.blogspot.com/2010/05/mpmediaitem-class-reference.html&quot;&gt;MPMediaItem 클래스 레퍼런스&lt;/a&gt;를 보도록 하자.&amp;nbsp; 그루핑 타입 열에 들어가는 설명은 &quot;Media Item Collection Grouping Keys&quot;를 보도록 하자.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;[표 1]&lt;/b&gt; MPMediaQuery 클래스의 편리한 생성자들&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_Jp42cOu6868/S-eWPpTDaJI/AAAAAAAAAGA/IpJS0tnCmZ0/s1600/table_1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;202&quot; src=&quot;http://3.bp.blogspot.com/_Jp42cOu6868/S-eWPpTDaJI/AAAAAAAAAGA/IpJS0tnCmZ0/s400/table_1.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #3d85c6;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;태스크&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;미디어 쿼리 생성&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
여기에서 볼 수 있는 클래스 매서드들은 &quot;미디어 쿼리 구성&quot;에서 설명되는 바와 같이 직접 사용하거나 수정할 수 있는 쿼리를 생성한다.&amp;nbsp; 각 클래스 메서드는, 쿼리의 groupingType 속성을 자동으로 메서드의 이름으로 설정한다.&amp;nbsp; 예를 들어, albumsQuery 메서드는 MPMediaGroupingAlbum의 그루핑 타입을 할당한다.&amp;nbsp; 그루핑 타입은 쿼리로부터 얻을 수 있는 미디어 아이템 컬렉션의 성질을 열거한다.&amp;nbsp; 각 메서드의 토론 섹션에서 설명된 바와 같이 몇몇의 클래스 메서드들은 모든 iPod 라이브러리와 같으며, 다른 것들은 서브셋과 같다.&lt;br /&gt;
&lt;div style=&quot;color: #3d85c6; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;color: #3d85c6; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+ albumsQuery&lt;/div&gt;&lt;div style=&quot;color: #3d85c6; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+ artistsQuery&lt;/div&gt;&lt;div style=&quot;color: #3d85c6; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+ songsQuery&lt;/div&gt;&lt;div style=&quot;color: #3d85c6; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+ playlistsQuery&lt;/div&gt;&lt;div style=&quot;color: #3d85c6; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+ podcastsQuery&lt;/div&gt;&lt;div style=&quot;color: #3d85c6; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+ audiobooksQuery&lt;/div&gt;&lt;div style=&quot;color: #3d85c6; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+ compilationsQuery&lt;/div&gt;&lt;div style=&quot;color: #3d85c6; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+ composersQuery&lt;/div&gt;&lt;div style=&quot;color: #3d85c6; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+ genresQuery&lt;/div&gt;&lt;div style=&quot;color: #3d85c6; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;- init&lt;/div&gt;&lt;div style=&quot;color: #3d85c6; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;- initWithFilterPredicates:&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;미디어 쿼리 구성&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;color: #3d85c6; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp; filterPredicates &lt;i style=&quot;color: #93c47d;&quot;&gt;property&lt;/i&gt;&lt;/div&gt;&lt;div style=&quot;color: #3d85c6; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp; groupingType &lt;i style=&quot;color: #93c47d;&quot;&gt;property&lt;/i&gt;&lt;/div&gt;&lt;div style=&quot;color: #3d85c6; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;- addFilterPredicate:&lt;/div&gt;&lt;div style=&quot;color: #3d85c6; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;- removeFilterPredicate:&lt;/div&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;미디어 쿼리 수행&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
당신은 아이팟 라이브러리로부터 미디어 아이템들이나 미디어 아이템 컬렉션들을 items나 collections 접근 메서드들을 호출함으로써 특정 배열을 얻는다.&lt;br /&gt;
&lt;span style=&quot;color: #3d85c6; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;items &lt;i style=&quot;color: #93c47d;&quot;&gt;property&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;color: #3d85c6; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;collections &lt;i style=&quot;color: #93c47d;&quot;&gt;property&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #3d85c6;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;속성&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;Objective-C 속성에 대한 자세한 내용은 The Objective-C Programming Language 의 &quot;Properties&quot;를 보도록 하자.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #6aa84f;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;collections&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;미디어 아이템 컬렉션들의 배열은 쿼리의 미디어 프로퍼티 프리디케이트와 매치하는 아이템들을 담고 있다.&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;@property (nonatomic, readonly) &lt;span style=&quot;color: #3d85c6;&quot;&gt;NSArray&lt;/span&gt; *collections;&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;b&gt;토론&lt;/b&gt;&lt;br /&gt;
리턴되는 컬렉션의 배열은 미디어 쿼리의 groupingType에 의해 그룹화되고 정렬된다.&amp;nbsp; 다음의 코드 스니펫은 이 속성을 어떻게 사용하는지를 나타낸다:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;//미디어 쿼리 열거; 이것은 iPod 라이브러리와 매치한다.&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;//왜냐하면 이것은 미디어 프로퍼티 프리디케이트를 포함하고 있지 않기 때문이다.&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaQuery *everything = [[MPMediaQuery alloc] init];&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;//미디어 아이템을 이용해서 그룹짓는 미디어 쿼리를 구성;&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;//여기에서는 아티스트로 그룹화 한다.&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;[everything setGroupingType:MPMediaGroupingArtist];&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;//쿼리로 부터 미디어 아이템 컬렉션들을 얻는다&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;NSArray *collections = [everything collections];&lt;/div&gt;&lt;br /&gt;
각 collections 배열의 요소는 이제 미디어 아이템 컬렉션을 포함하고 있다. 각 컬렉션은 개별 아티스트로 나눠진 아이팟 라이브러리의 미디어 아이템들을 포함한다.&amp;nbsp; 이 배열의요소들은 아티스트 이름으로 정렬되어 있다.&lt;br /&gt;
&lt;br /&gt;
그룹핑 타입으로 가능한 것들은 &quot;Media Item Collection Grouping Keys&quot;를 참조하도록 하자. &lt;br /&gt;
이것은 iPhone OS 3.0 이상에서 사용가능하며 MPMediaQuery.h 에 선언되어 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #6aa84f;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;filterPredicates&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;미디어 쿼리의 미디어 프로퍼티 프리디케이트.&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;@property (nonatomic, retain) &lt;span style=&quot;color: #3d85c6;&quot;&gt;NSSet&lt;/span&gt; *filterPredicates;&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;토론&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;http://deveruran.blogspot.com/2010/05/mpmediaitem-class-reference.html&quot;&gt;MPMediaItem Class&lt;/a&gt; 의 &lt;b style=&quot;color: #3d85c6;&quot;&gt;일반적인 미디어 아이템 속성 키들&lt;/b&gt;과 &lt;b&gt;&lt;span style=&quot;color: #3d85c6;&quot;&gt;팟캐스트 아이템 프로퍼티 키들&lt;/span&gt;&lt;/b&gt;의 목록에 프리디케이트를 구성하는데 사용할 수 있는 키들이 포함되어 있다. &lt;br /&gt;
&lt;br /&gt;
iPhone OS 3.0 이상에서 사용가능하며 MPMediaQuery.h에 선언되어 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #6aa84f;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;groupingType&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;미디어 쿼리에서 얻어지는 콜렉션들을 위한 그룹핑&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;@property (nonatomic) &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaGrouping&lt;/span&gt; groupingType;&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;토론&lt;/b&gt;&lt;br /&gt;
기본 그룹핑 타입은 &lt;span style=&quot;color: #3d85c6; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaGroupingTitle&lt;/span&gt; 이다. 사용가능한 그룹핑 타입의 목록은 &lt;span style=&quot;color: #3d85c6;&quot;&gt;&quot;Media Item Collection Grouping Keys&quot;&lt;/span&gt;를 보도록 하자.&lt;br /&gt;
&lt;br /&gt;
iPhone OS 3.0 이상에서 사용가능하며 MPMediaQuery.h에 선언되어 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #6aa84f;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;items&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;미디어 쿼리의 프리디케이트에 대입되는 미디어 아이템들의 배열&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;@property (nonatomic, readonly) &lt;span style=&quot;color: #3d85c6;&quot;&gt;NSArray&lt;/span&gt; *items;&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;토론&lt;/b&gt;&lt;br /&gt;
프리디케이트에 매치되는 아이템이 없다면, 이 메서드는 빈 배열을 리턴한다. 에러가 날 때는 nil을 리턴한다.&lt;br /&gt;
&lt;br /&gt;
iPhone OS 3.0 이상에서 사용가능하며&amp;nbsp; MPMediaQuery.h에 선언되어 있다. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #3d85c6;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;클래스 메서드&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;color: #6aa84f;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;albumsQuery&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;뮤직 아이템들과 매치하고, 컬렉션을 앨범이름으로 그룹 및 정렬하는 미디어 쿼리를 생성.&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+ (MPMediaQuery *)albumQuery&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;리턴값&lt;/b&gt;&lt;br /&gt;
MPMediaTypeMusic 타입의 미디어 아이템들과 매치하며 MPMediaGroupingAlbum의 그룹핑 타입을 가지는 미디어 쿼리.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;토론&lt;/b&gt;&lt;br /&gt;
하나의 미디어 아이템은 하나이상의 미디어 타입을 가질 수 있다. 예를 들어, 하나의 아이템은 &quot;music&quot;과 &quot;podcast&quot;형태가 될 수 있다. 하나의 albumsQuery 쿼리는 그들이 또한 다른 미디어 타입이든 아니든 간에, 모든 MPMediaTypeMusic 아이템들과 매치한다.&lt;br /&gt;
&lt;br /&gt;
iPhone OS 3.0 이상에서 사용가능하며 MPMediaQuery.h에 선언되어 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #6aa84f;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;artistsQuery&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;아티스트 이름으로 그룹화 되고 정렬된 뮤직 아이템들을 얻는 미디어 쿼리를 생성한다.&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+ (MPMediaQuery *)artiestsQuery&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;리턴값&lt;/b&gt;&lt;br /&gt;
MPMediaGroupingArtiest 의 그룹핑 타입을 가지는 MPMediaTypeMusic 타입의 미디어 아이템을 얻는 미디어 쿼리.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;토론&lt;/b&gt;&lt;br /&gt;
하나의 미디어 아이템은 하나이상의 미디어 타입을 가질 수 있다. 예를 들어, 하나의 아이템은 &quot;music&quot;과  &quot;podcast&quot;형태가 될 수 있다. 하나의 artistsQuery 쿼리는 그들이 또한 다른 미디어 타입이든 아니든 간에, 모든  MPMediaTypeMusic 아이템들과 매치한다.&lt;br /&gt;
&lt;br /&gt;
iPhone OS 3.0 이상에서 사용가능하며 MPMediaQuery.h에 선언되어 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #6aa84f;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;audiobooksQuery&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;오디오 북 이름에 의해 오디오 북 아이템들을 얻고, 콜렉션들을 그룹 및 정렬하는 미디어 쿼리를 생성.&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+ (MPMediaQuery *)audiobooksQuery&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;리턴값&lt;/b&gt;&lt;br /&gt;
MPMediaTypeAudioBook 형태의 미디어 아이템을 얻는 미디어 쿼리. 그리고 이것은 MPMediaGroupingTitle을 기본 그룹 형태로 사용한다.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;토론&lt;/b&gt;&lt;br /&gt;
하나의 미디어 아이템은 하나이상의 미디어 타입을 가질 수 있다. 예를 들어, 하나의 아이템은 &quot;music&quot;과  &quot;podcast&quot;형태가 될 수 있다. 하나의 audiobooksQuery 쿼리는 이것이 또 다른 미디어 타입이든 아니든 간에 모든 MPMediaTypeAudioBook 아이템들과 매치한다.&lt;br /&gt;
&lt;br /&gt;
iPhone OS 3.0 이상에서 사용가능하며 MPMediaQuery.h에 선언되어 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #6aa84f; font-size: large;&quot;&gt;&lt;b&gt;compilationsQuery&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
앨범 이름으로 그룹 및 정렬한 컬렉션들과 컴필레이션 아이템들을 얻는 미디어 쿼리를 생성&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+ (MPMediaQuery *)compilationsQuery&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;리턴값&lt;/b&gt;&lt;br /&gt;
MPMediaItemPropertyIsCompilation 속성을 가지는 미디어 아이템을 얻는 미디어 쿼리. 리턴되는 쿼리는 MPMediaGroupingAlbum의 그룹핑 형태를 가진다.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;토론&lt;/b&gt;&lt;br /&gt;
하나의 미디어 아이템은 하나이상의 미디어 타입을 가질 수 있다. 예를 들어, 하나의 아이템이 &quot;music&quot;과 &quot;podcast&quot;타입이 될 수 있다. compilationsQuery 쿼리는 그들의 미디어 타입에 상관없이, MPMediaItemPropertyIscompilation 속성을 가지는 모든 미디어 아이템들을 검색한다. &lt;br /&gt;
&lt;br /&gt;
iPhone OS 3.0 이상에서 사용가능하고 MPMediaQuery.h 에 선언되어 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #6aa84f;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;composersQuery&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;작곡가 이름에 의해 그룹 및 정렬되는 컬렉션들과 모든 미디어 아이템들을 검색하는 미디어 쿼리를 생성.&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+ (MPMediaQuery *)composersQuery&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;b&gt;리턴값&lt;/b&gt;&lt;br /&gt;
MPMediaGroupingComposer의 그룹핑 타입을 가지는 모든 미디어 아이템들을 검색하는 미디어 쿼리.&lt;br /&gt;
&lt;br /&gt;
iPhone OS 3.0 이상에서 사용가능하며 MPMediaQuery.h 에 선언되어 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #6aa84f;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;genresQuery&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;장르명에 의해 그룹 및 정렬되는 컬렉션들의 모든 미디어 아이템들을 검색하는 미디어 쿼리를 생성&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+ (MPMediaQuery *)genresQuery&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;리턴값&lt;/b&gt;&lt;br /&gt;
MPMediaGroupingGenre의 그룹핑 타입을 가지는 모든 미디어 아이템들을 검색하는 미디어 쿼리.&lt;br /&gt;
&lt;br /&gt;
iPhone OS 3.0 이상에서 사용가능하며&amp;nbsp; MPMediaQuery.h에 선언되어 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #6aa84f;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;playlistsQuery&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;재생목록 이름에 의해 컬렉션을 그룹및 정렬하는 모든 iPod 라이브러리를 검색하는 미디어 쿼리를 생성&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+ (MPMediaQuery *)playlistsQuery&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;리턴값&lt;/b&gt;&lt;br /&gt;
MPMediaGroupingPlaylist의 그룹핑 타입을 가지는 모든 미디어 아이템들을 검색하는 미디어 쿼리.&lt;br /&gt;
&lt;br /&gt;
iPhone OS 3.0 이상에서 사용가능하며 MPMediaQuery.h에 선언되어 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #6aa84f;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;podcastsQuery&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;팟캐스트 이름으로 컬렉션을 그룹 및 정렬하는 팟캐스트 아이템들을 정렬하는 미디어 쿼리를 생성&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+ (MPMediaQuery *)podcastsQuery&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;b&gt;리턴값&lt;/b&gt;&lt;br /&gt;
MPMediaGroupingPodcastTitle의 그룹핑 타입을 가지는 MPMediaTypePodCast 타입의 미디어 아이템을 검색하는 미디어 쿼리.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;토론&lt;/b&gt;&lt;br /&gt;
하나의 미디어 아이템은 하나이상의 미디어 타입을 가질 수 있다. 예를 들어, 하나의아이템은 &quot;music&quot;과 &quot;podcast&quot;형태가 될 수 있다. 하나의 podcastsQuery 쿼리는 이것이 다른 미디어 타입이던 아니던 간에 모든 MPMediaTypePodcast를 검색한다.&lt;br /&gt;
&lt;br /&gt;
iPhone OS 3.0 이상에서 사용가능하며 MPMediaQuery.h에 선언되어 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #6aa84f;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;color: #6aa84f;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;songsQuery&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;노래 제목에 의해 컬렉션들을 그룹 및 정력하는 뮤직 아이템들을 검색하는 미디어 쿼리를 생성&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;+ (MPMediaQuery *)songsQuery&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;b&gt;리턴값&lt;/b&gt;&lt;br /&gt;
MPMediaGroupingTitle 의 그룹핑 타입을 가지는&amp;nbsp; MPMediaTypeMusic 형태의 미디어 아이템을 검색하는 미디어 쿼리&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;토론&lt;/b&gt;&lt;br /&gt;
하나의 미디어 아이템은 하나이상의 미디어 타입을 가질 수 있다. 예를 달어 하나의 아이템은 &quot;music&quot;과 &quot;podcast&quot; 형태가 될 수 있다.&amp;nbsp; songsQuery쿼리는 검색하고자 하는것들이 다른 미디어 타입이든 아니든 상관없이 모든 MPMediaTypeMusic 아이템들을 검색한다.&lt;br /&gt;
&lt;br /&gt;
iPhone OS 3.0 이상에서 사용가능하며 MPMediaQuery.h 에 선언되어 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #3d85c6;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;인스턴스 메서드&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;color: #6aa84f;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;addFilterPredicate:&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;쿼리에 미디어 프로퍼티 프리디케이트 추가&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;-(void)addFilterPredicate:(&lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaPredicate&lt;/span&gt; *)predicate&lt;/div&gt;&lt;b&gt;인자&lt;/b&gt;&lt;br /&gt;
predicate&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 쿼리의 프리디케이트 셋에 추가할 미디어 프리디케이트&lt;br /&gt;
&lt;br /&gt;
iPhone OS 3.0 이상에서 사용가능하고 MPMediaQuery.h 에 선언되어 있다.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #6aa84f;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;init&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;일반적인 미디어 쿼리 초기화&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;-(id)init&lt;/div&gt;&lt;b&gt;토론&lt;/b&gt;&lt;br /&gt;
일반적인 미디어 쿼리는 필터 프리디케이트들과 그룹핑 구성이 없다.&amp;nbsp; 이것은 iPod 라이브러리의 모든것을 검색하며 그룹핑이나 정렬은 제공하지 않는다.&lt;br /&gt;
&lt;br /&gt;
iPhone OS 3.0 이상에서 사용가능하며&amp;nbsp; MPMediaQuery.h 에 선언되어 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #6aa84f;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;initWithFilterPredicates:&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;미디어 프로퍼티 프리디케이트들의 셋으로 미디어 쿼리 초기화&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;- (id)initWithFilterPredicates:(&lt;span style=&quot;color: #3d85c6;&quot;&gt;NSSet&lt;/span&gt; *)filterPredicates&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;인자&lt;/b&gt;&lt;br /&gt;
filterPredicates&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; iPod 라이브러리에서 필터로 사용할 미디어 프로퍼티 프리디케이트들의 셋&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;리턴값&lt;/b&gt;&lt;br /&gt;
초기화된 미디어 쿼리&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;토론&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;http://deveruran.blogspot.com/2010/05/mpmediapropertypredicate-class.html&quot;&gt;MPMediaPropertyPredicate 클래스 레퍼런스&lt;/a&gt;는 미디어 프로퍼티 프리디케이트들을 생성하는 방법을 설명한다.&amp;nbsp;&lt;a href=&quot;http://deveruran.blogspot.com/2010/05/mpmediaitem-class-reference.html&quot;&gt; MPMediaItem 클래스 레퍼런스&lt;/a&gt;의 일반적인 미디어 아이템 프로퍼티 키들과 팟캐스트 아이템 프로퍼티 키들의 목록은 프리디케이트들을 구성하는데 사용할 수 있는 키들을 포함하고 있다.&lt;br /&gt;
&lt;br /&gt;
iPhone OS 3.0 이상에서 사용가능하며 MPMediaQuery.h에 선언되어 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #6aa84f;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;removeFilterPredicate:&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;쿼리에서 필터 프리디케이트를 삭제한다.&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;- (void)removeFilterPredicate:(&lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaPredicate&lt;/span&gt; *)predicate&lt;/div&gt;&lt;b&gt;인자&lt;/b&gt;&lt;br /&gt;
predicate&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 쿼리의 프리디케이트 셋에서 지울 미디어 프리디케이트.&lt;br /&gt;
&lt;br /&gt;
iPhone OS 3.0 이상에서 사용가능하며 MPMediaQuery.h에 선언되어 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #3d85c6;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;상수&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;키들을 그룹핑하는 미디어 아이템 컬렉션&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
하나의 미디어 쿼리를 구성하는 groupingType 속성으로 사용되는 키들.&lt;br /&gt;
다음의 상수들은 모두 iPhone OS 3.0 이상에서 사용가능하며, MPMediaQuery.h에 선언되어 있다. &lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;enum {&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaGroupingTitle&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaGroupingAlbum&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaGroupingArtist&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaGroupingAlbumArtist&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaGroupingComposer&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaGroupingGenre&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaGroupingPlaylist&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaGroupingPodcastTitle&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaGroupingSeriesName&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;};&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;typedef NSInteger MPMediaGrouping;&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;상수&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaGroupingTitle&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 제목으로 미디어 아이템 컬렉션들을 그룹 및 정렬한다.&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 노래를 예를 들면&amp;nbsp; title 은 노래 제목이다.&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 이것은 키를 그룹화하는 기본값이다.&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaGroupingAlbum&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 앨범으로 미디어 아이템 컬렉션들을 그룹 및 정렬하고,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 앨범 안에서는 트랙 순서로 노래들을 정렬한다.&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaGroupingArtist&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 연주자(가수이름)로 미디어 아이템 컬렉션들을 그룹 및 정렬한다.&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaGroupingAlbumArtiest&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 앨범 전체에서 앨범의 대표 연주자로 미디어 아이템 컬렉션들을 그룹 및 정렬한다.&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaGroupingComposer&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 작곡가로 미디어 아이템 컬렉션들을 그룹 및 정렬한다.&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaGroupingGenre&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 음악이나 영화 장르를 통해서 미디어 아이템 컬렉션들을 그룹 및 정렬 한다.&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaGroupingPlaylist&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 재생목록으로 미디어 아이템 컬렉션들을 그룹 및 정렬한다.&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaGroupingPodcastTitle&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 팟캐스트 제목으로 미디어 아이템 컬렉션들을 그룹 및 정렬한다.&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaGroupingSeriesName&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 시리즈로 미디어 아이템 컬렉션들을 그룹 및 정렬한다.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;토론&lt;/b&gt;&lt;br /&gt;
다음의 코드 스니펫은 키를 그룹핑하는 방법에 대해 보여준다:&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaQuery *everything = [[MPMediaQuery alloc] init];&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;[everything setGroupingType:MPMediaGroupingAlbum];&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;NSArray *collections = [everything collections];&lt;/div&gt;&lt;br /&gt;
이 코드 라인들을 실행한 후에, collections 배열은 앨범 이름에 따라 그룹 및 정렬된 미디어 아이템들을 포함하고 있다.&lt;br /&gt;
정렬된 노래 목록을 얻으려면, MPMediaGroupingTitle 키로 미디어 쿼리를 구성하거나 미디어 쿼리를 위해 기본으로 되어 있는 타이틀 키의 이점을 활용한다.&amp;nbsp; 이 두 가지 모두, 자신의 컬렉션을 효과적으로 얻는다.&lt;br /&gt;
컬렉션들은 데스크탑의 iTunes 에서 사용하는 것과 같은 방법으로 정렬한다.&amp;nbsp; 이것은 사용자가 선택한 기본 시스템 언어를 포함한다.&amp;nbsp; 기사를 읽을 때, 영어를 사용할 때는&amp;nbsp; &quot;A,&quot; &quot;An,&quot; 그리고 &quot;The&quot;가, 프랑스어를 사용할 때는 &quot;L&#39;,&quot; &quot;La,&quot; &quot;Le&quot;가 정렬되는 동안은 무시된다.&amp;nbsp; 만약에 정확한 정렬이 필요하다면 이것을 당신의 어플리케이션에 구현하라.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://developer.apple.com/iphone/library/documentation/MediaPlayer/Reference/MPMediaQuery_ClassReference/Reference/Reference.html#//apple_ref/doc/uid/TP40008220&quot;&gt;원문&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://deveruran.blogspot.com/feeds/5952396036377694449/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://deveruran.blogspot.com/2010/05/mpmediaquery-class-reference.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/5952396036377694449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/5952396036377694449'/><link rel='alternate' type='text/html' href='http://deveruran.blogspot.com/2010/05/mpmediaquery-class-reference.html' title='MPMediaQuery Class Reference'/><author><name>URan</name><uri>http://www.blogger.com/profile/18252169921818710895</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://1.bp.blogspot.com/_Jp42cOu6868/S1PnNjw9hLI/AAAAAAAAABE/JwY8y2RsVBc/S220/test.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_Jp42cOu6868/S-eWPpTDaJI/AAAAAAAAAGA/IpJS0tnCmZ0/s72-c/table_1.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1830687063536409594.post-88324884174400129</id><published>2010-05-09T18:51:00.000-07:00</published><updated>2010-05-09T21:51:00.164-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="iPhone"/><category scheme="http://www.blogger.com/atom/ns#" term="MPMediaItem"/><category scheme="http://www.blogger.com/atom/ns#" term="Reference"/><title type='text'>MPMediaItem Class Reference</title><content type='html'>&lt;span style=&quot;font-size: x-large;&quot;&gt;&lt;b&gt;MPMediaItem Class Reference&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
상속 : NSObject&lt;br /&gt;
프로토콜 : NSCoding, NSObject(NSObject)&lt;br /&gt;
프레임워크 : /System/Library/Frameworks/MediaPlayer.framework&lt;br /&gt;
이용가능 버전 : iPhone OS 3.0 이상&lt;br /&gt;
관련 가이드 : &lt;a href=&quot;http://developer.apple.com/iphone/library/documentation/Audio/Conceptual/iPodLibraryAccess_Guide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40008765&quot;&gt;iPod Library Access Programming Guide&lt;/a&gt;&lt;br /&gt;
선언 : MPMediaItem.h&lt;br /&gt;
관련 샘플 코드 : &lt;a href=&quot;http://developer.apple.com/iphone/library/samplecode/AddMusic/Introduction/Intro.html#//apple_ref/doc/uid/DTS40008845&quot;&gt;AddMusic&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #3d85c6;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;개요&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;MPMediaItem 오브젝트, 또는 미디어 아이템은 iPod 라이브러리에서 미디어의 한조각을 표현한다.&amp;nbsp; 하나의 미디어 아이템은 하나의 유일한 식별자를 가지는데, 이것은 &lt;span style=&quot;color: #6fa8dc;&quot;&gt;MPMediaItemPropertyPersistentID&lt;/span&gt; 속성 키를 사용하여 접근된다.&amp;nbsp; 이 식별자는 어플리케이션 런치들을 유지한다.&lt;br /&gt;
&lt;br /&gt;
하나의 미디어 아이템은 이것과 관련된 넓은 범위의 메타 데이터를 가질 수 있다.&amp;nbsp; 당신은 이 문서에서 설명되는 속성 키들과 같이 &lt;span style=&quot;color: #6fa8dc;&quot;&gt;valueForProperty:&lt;/span&gt; 메서드를 사용하여 이 메타데이터에 접근한다.&lt;br /&gt;
&lt;br /&gt;
당신은 iPod 라이브러리를 검색하기 위한 미디어 쿼리들을 만드는데에 미디어 아이템의 속성들을 사용한다. 이 속성들은 &quot;Media Item Type Flages,&quot; &quot;General Media Item Property Keys&quot; 그리고 &quot;Podcast Item Property Keys.&quot;에 설명되어 있고, 미디어 쿼리들은 &lt;a href=&quot;http://deveruran.blogspot.com/2010/05/mpmediaquery-class-reference.html&quot;&gt;MPMediaQuery 클래스 레퍼런스&lt;/a&gt;에 설명되어 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #3d85c6;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;태스크&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;미디어 아이템 속성들 사용하기&lt;br /&gt;
+ canFilterByProperty:&lt;br /&gt;
- valueForProperty:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #3d85c6;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;클래스 메서드&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;canFilterByProperty:&lt;br /&gt;
미디어 아이템 속성 키가 미디어 속성을 결정짓도록 구성하는데 사용될수 있는지를 나타냄&lt;br /&gt;
&lt;br /&gt;
+ (BOOL)canFilterByProperty:(&lt;span style=&quot;color: #3d85c6;&quot;&gt;NSString&lt;/span&gt; *)property&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;인자&lt;/b&gt;&lt;br /&gt;
property&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 검사하길 원하는 속성을 위한 키&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;리턴 값&lt;/b&gt;&lt;br /&gt;
속성키로 &lt;span style=&quot;color: #999999;&quot;&gt;YES&lt;/span&gt;를 리턴하는 것은 &lt;span style=&quot;color: #999999;&quot;&gt;MPMediaPropertyPredicate&lt;/span&gt; 오브젝트들을 구성하는데 사용될 수 있다는 것이다.&lt;br /&gt;
&lt;br /&gt;
[iPhone OS 3.0 이상에서 사용가능하며, &lt;span style=&quot;color: #999999;&quot;&gt;MPMediaItem.h&lt;/span&gt; 에 정의되어 있음.]&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #3d85c6;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;color: #3d85c6;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;인스턴스 메서드&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;valueForProperty:&lt;br /&gt;
특정 미디어 아이템 프로퍼티 키의 값&lt;br /&gt;
&lt;br /&gt;
- (id)valueForProperty:(NSString *)property&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;인자&lt;/b&gt;&lt;br /&gt;
property&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 값을 얻기를 원하는 속성&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;리턴 값&lt;/b&gt;&lt;br /&gt;
미디어 아이템 프로퍼티 키를 위한 값을 리턴&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;토론&lt;/b&gt;&lt;br /&gt;
이 프로퍼티와 같이 사용할 수 있는 메타데이터 키들의 목록은 &lt;span style=&quot;color: #3d85c6;&quot;&gt;&quot;일반적인 미디어 아이템 프로퍼티 키, &quot;&lt;/span&gt; &lt;span style=&quot;color: #3d85c6;&quot;&gt;&quot;팟캐스트 아이템 프로퍼티 키, &quot;&lt;/span&gt; 그리고 &lt;span style=&quot;color: #3d85c6;&quot;&gt;&quot;사용자 정의 프로퍼티 키.&quot;&lt;/span&gt; 에 있다.&lt;br /&gt;
&lt;br /&gt;
[iPhone OS 3.0 이상에서 사용가능하며, &lt;span style=&quot;color: #999999;&quot;&gt;MPMediaItem.h&lt;/span&gt;  에 정의되어 있음. 관련 샘플 코드는 &lt;a href=&quot;http://developer.apple.com/iphone/library/samplecode/AddMusic/Introduction/Intro.html#//apple_ref/doc/uid/DTS40008845&quot;&gt;AddMusic&lt;/a&gt;]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #3d85c6;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;상수&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;미디어 아이템 타입 플래그들&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
MPMediaItemPropertyMediaType 속성을 위한 값으로 사용할 수 있는 미디어 아이템 타입들.&amp;nbsp; 하나의 미디어 아이템은 하나 이상의 미디어 아이템 타입을 가질 수 있다.&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;enum {&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; // audio media types&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaTypeMusic&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 1 &amp;lt;&amp;lt; 0,&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaTypePodcast&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 1 &amp;lt;&amp;lt; 1,&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaTypeAudioBook&lt;/span&gt;&amp;nbsp;&amp;nbsp; = 1 &amp;lt;&amp;lt; 2,&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaTypeAnyAudia&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0x00ff,&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // generic media type&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaTypeAny&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = ~0&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;};&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;typedef NSInteger MPMediaType;&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;상수&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaTypeMusic&lt;/div&gt;음악을 포함하는 미디어 아이템으로 설정된 경우.&lt;br /&gt;
iPhone OS 3.0 이상에서 사용가능하며 MPMediaItem.h에 정의 되어 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaTypePodcase&lt;/div&gt;하나의 podcast를 포함하는 미디어 아이템을 설정한 경우.&lt;br /&gt;
iPhone OS 3.0 이상에서 사용가능하며 MPMediaItem.h에 정의되어 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaTypeAudioBook&lt;/div&gt;오디오북을 포함하는 미디어 아이템을 설정한 경우.&lt;br /&gt;
iPhone OS 3.0 이상에서 사용가능하며 MPMediaItem.h에 정의되어 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaTypeAnyAudio&lt;/div&gt;불특정 형태의 오디오 컨텐츠를 포함하는 미디어 아이템을 설정한 경우.&lt;br /&gt;
iPhone OS 3.0 이상에서 사용가능하며 MPMediaItem.h에 정의되어 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaTypeAny&lt;/div&gt;불특정 형태의 오디오를 포함하는 미디어 아이템을 설정한 경우.&lt;br /&gt;
iPhone OS 3.0 이상에서 사용가능하며 MPMediaItem.h에 정의되어 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;일반적인 미디어 아이템 프로퍼티 키들&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
당신은 이 프로퍼티 키들을 사용해서 &lt;span style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;valueForProperty&lt;/span&gt; 메소드를 호출하여 미디어 아이템을 위한 메타데이터를 얻는다.&amp;nbsp; 몇몇의 프로퍼티들은 &lt;a href=&quot;http://deveruran.blogspot.com/2010/05/mpmediapropertypredicate-class.html&quot;&gt;MPMediaPropertyPredicate 클래스 레퍼런스&lt;/a&gt;에서 설명되는 바와 같이, 미디어 프로퍼티 프리디케이트들을 만드는데에도 사용 될 수 있다.&amp;nbsp; 표시된 속성들은 필터 가능하다.&lt;br /&gt;
&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;NSString *const &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaItemPropertyPersistentID&lt;/span&gt;; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //filterable(필터 가능)&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;NSString *const &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaItemPropertyMediaType&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //filterable&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;NSString *const &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaItemPropertyTitle&lt;/span&gt;; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //filterable&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;NSString *const &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaItemPropertyAlbumTitle&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //filterable&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;NSString *const &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaItemPropertyArtist&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //filterable&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;NSString *const &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaItemPropertyAlbumArtist&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //filterable&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;NSString *const &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaItemPropertyGenre&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //filterable&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;NSString *const &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaItemPropertyComposer&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //filterable&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;NSString *const &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaItemPropertyPlaybackDuration&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;NSString *const &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaItemPropertyAlbumTrackNumber&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;NSString *const &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaItemPropertyAlbumTrackCount&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;NSString *const &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaItemPropertyDiscNumber&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;NSString *const &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaItemPropertyDiscCount&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;NSString *const &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaItemPropertyArtwork&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;NSString *const &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaItemPropertyLyrics&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;NSString *const &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaItemPropertyIsCompilation&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp; //filterable&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;상수&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaItemPropertyPersistentID&lt;/div&gt;미디어 아이템을 위한 지속성 있는 식별자.&amp;nbsp; uint64_t(unsigned long long)을 담고 있는 NSNumber 값이다.&amp;nbsp; MPMediaItemPropertyPersistentID 식별자의 값은 어플리케이션의 실행과 미디어 아이템의 변하지 않는 싱크 상태를 유지한다.&amp;nbsp; 이 값은 sync/unsync/sync 사이클을 유지할때 이점이 없다.&lt;br /&gt;
&lt;a href=&quot;http://deveruran.blogspot.com/2010/05/mpmediapropertypredicate-class.html&quot;&gt;MPMediaPropertyPredicate 클래스 레퍼런스&lt;/a&gt;에서 설명되는 바와 같이 미디어 프로퍼티 프리디케이트를 만드는데 사용될 수 있다.&lt;br /&gt;
iPhone OS 3.0이상에서 사용가능하며 MPMediaItem.h에 정의되어 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaItemPropertyMediaType&lt;/div&gt;미디어 아이템의 미디어 타입. NSInteger 데이터형을 나타내는 NSNumber 오브젝트 값이다.&amp;nbsp; NSInteger 값은 &lt;a href=&quot;http://developer.apple.com/iphone/library/documentation/MediaPlayer/Reference/MPMediaItem_ClassReference/Reference/Reference.html#//apple_ref/c/tdef/MPMediaType&quot;&gt;&quot;미디어 아이템 타입 플래그들&quot;&lt;/a&gt; 에서 비트 필드 플래그나 플래그 셋을 나타낸다.&lt;br /&gt;
&lt;a href=&quot;http://deveruran.blogspot.com/2010/05/mpmediapropertypredicate-class.html&quot;&gt;MPMediaPropertyPredicate  클래스 레퍼런스&lt;/a&gt;에서 설명되는 바와 같이 미디어 프로퍼티 프리디케이트를 만드는데 사용될 수 있다.&lt;br /&gt;
iPhone  OS 3.0이상에서 사용가능하며 MPMediaItem.h에 정의되어 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaItemPropertyTitle&lt;/div&gt;미디어 아이템의 제목(또는 이름). 이 속성은 MPMediaItemPropertyAlbumTitle 속성과 관계 없다.&amp;nbsp; NSString 오브젝트 값이다.&lt;br /&gt;
&lt;a href=&quot;http://deveruran.blogspot.com/2010/05/mpmediapropertypredicate-class.html&quot;&gt;MPMediaPropertyPredicate  클래스 레퍼런스&lt;/a&gt;에서 설명되는 바와 같이 미디어 프로퍼티 프리디케이트를 만드는데 사용될 수 있다.&lt;br /&gt;
iPhone  OS 3.0이상에서 사용가능하며 MPMediaItem.h에 정의되어 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaItemPropertyAlbumTitle&lt;/div&gt;&quot;Live On Mars&quot;와 같은 앨범의 제목.&lt;br /&gt;
앨범에서 각각의 곡의 제목에 나란히 들어갈, (MPMediaItemPropertyTitle 속성을 사용하여 열거하는) &quot;Crater Dance (radio edit)&quot;와 같은 것.&amp;nbsp; NSString 오브젝트 값이다.&lt;br /&gt;
&lt;a href=&quot;http://deveruran.blogspot.com/2010/05/mpmediapropertypredicate-class.html&quot;&gt;MPMediaPropertyPredicate  클래스 레퍼런스&lt;/a&gt;에서 설명되는 바와 같이 미디어 프로퍼티 프리디케이트를 만드는데 사용될 수 있다.&lt;br /&gt;
iPhone  OS 3.0이상에서 사용가능하며 MPMediaItem.h에 정의되어 있다.&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaItemPropertyArtist&lt;/div&gt;미디어 아이템의 아티스트. NSString 오브젝트 값이다. &lt;br /&gt;
&lt;a href=&quot;http://deveruran.blogspot.com/2010/05/mpmediapropertypredicate-class.html&quot;&gt;MPMediaPropertyPredicate  클래스 레퍼런스&lt;/a&gt;에서 설명되는 바와 같이 미디어 프로퍼티 프리디케이트를 만드는데 사용될 수 있다.&lt;br /&gt;
iPhone  OS 3.0이상에서 사용가능하며 MPMediaItem.h에 정의되어 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaItemPropertyAlbumArtist&lt;/div&gt;앨범 전체에 걸친 아티스트. NSString 오브젝트 값이다.&lt;br /&gt;
&lt;a href=&quot;http://deveruran.blogspot.com/2010/05/mpmediapropertypredicate-class.html&quot;&gt;MPMediaPropertyPredicate  클래스 레퍼런스&lt;/a&gt;에서 설명되는 바와 같이 미디어 프로퍼티 프리디케이트를 만드는데 사용될 수 있다.&lt;br /&gt;
iPhone  OS 3.0이상에서 사용가능하며 MPMediaItem.h에 정의되어 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaItemPropertyGenre&lt;/div&gt;미디어 아이템의 장르. NSString 오브젝트 값이다.&lt;br /&gt;
&lt;a href=&quot;http://developer.apple.com/iphone/library/documentation/MediaPlayer/Reference/MPMediaPropertyPredicate_ClassReference/Reference/Reference.html#//apple_ref/doc/uid/TP40008219&quot;&gt;MPMediaPropertyPredicate  클래스 레퍼런스&lt;/a&gt;에서 설명되는 바와 같이 미디어 프로퍼티 프리디케이트를 만드는데 사용될 수 있다.&lt;br /&gt;
iPhone  OS 3.0이상에서 사용가능하며 MPMediaItem.h에 정의되어 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaItemPropertyComposer&lt;/div&gt;미디어 아이템 작곡가. NSString 오브젝트 값이다. &lt;br /&gt;
&lt;a href=&quot;http://deveruran.blogspot.com/2010/05/mpmediapropertypredicate-class.html&quot;&gt;MPMediaPropertyPredicate  클래스 레퍼런스&lt;/a&gt;에서 설명되는 바와 같이 미디어 프로퍼티 프리디케이트를 만드는데 사용될 수 있다.&lt;br /&gt;
iPhone  OS 3.0이상에서 사용가능하며 MPMediaItem.h에 정의되어 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaItemPropertyPlaybackDuration&lt;/div&gt;미디어 아이템의 재생시간. NSTimeInterval의 초로 표현되는 NSNumber 오브젝트 값. &lt;br /&gt;
iPhone  OS 3.0이상에서 사용가능하며 MPMediaItem.h에 정의되어 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaItemPropertyAlbumTrackNumber&lt;/div&gt;미디어 아이템이 앨범에서 몇번째에 해당하는지를 나타내는 트랙넘버.&amp;nbsp; NSUInteger 데이터 형을 나타내는 NSNumber 오브젝트 값.&lt;br /&gt;
iPhone  OS 3.0이상에서 사용가능하며 MPMediaItem.h에 정의되어 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaItemPropertyAlbumTrackCount&lt;/div&gt;앨범이 포함하고 있는 미디어 아이템의 수. NSUInteger 데이터형을 나타내는 NSNumber 오브젝트 값. &lt;br /&gt;
iPhone  OS 3.0이상에서 사용가능하며 MPMediaItem.h에 정의되어 있다. &lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaItemPropertyDiscNumber&lt;/div&gt;여러개의 디스크를 가지는 앨범에서 이 미디어 아이템의 디스크 넘버. NSUInteger 데이터 형을 나타내는 NSNumber 오브젝트 값. &lt;br /&gt;
iPhone  OS 3.0이상에서 사용가능하며 MPMediaItem.h에 정의되어 있다. &lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaItemPropertyDiscCount&lt;/div&gt;이 미디어 아이템을 가지고 있는 앨범의 디스크 수. NSUInteger 데이터 형을 나타내는 NSNumber 오브젝트 값.&lt;br /&gt;
iPhone  OS 3.0이상에서 사용가능하며 MPMediaItem.h에 정의되어 있다. &lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaItemPropertyArtwork&lt;/div&gt;미디어 아이템의 아트웍 이미지.&amp;nbsp; 미디어 아이템 이미지 값은, &lt;a href=&quot;http://developer.apple.com/iphone/library/documentation/MediaPlayer/Reference/MPMediaItemArtwork_ClassReference/Reference/Reference.html#//apple_ref/doc/uid/TP40008212&quot;&gt;MPMediaItemArtwork 클래스 레퍼런스&lt;/a&gt; 에 설명되어 있다. &lt;br /&gt;
iPhone  OS 3.0이상에서 사용가능하며 MPMediaItem.h에 정의되어 있다. &lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaItemPropertyLyrics&lt;/div&gt;미디어 아이템의 가사. NSString 오브젝트 값이다. &lt;br /&gt;
iPhone  OS 3.0이상에서 사용가능하며 MPMediaItem.h에 정의되어 있다. &lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaItemPropertyIsCompilation&lt;/div&gt;이 미디어 아이템이 편집의 일부인지(YES) 아닌지(NO)를 나타내는 Boolean 값.&amp;nbsp; BOOL 데이터 타입을 나타내는 NSNumber 오브젝트 값. &lt;br /&gt;
iPhone  OS 3.0이상에서 사용가능하며 MPMediaItem.h에 정의되어 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;팟캐스트 아이템 프로퍼티 키들&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
당신은 이 속성 키들을 사용해서&amp;nbsp; &lt;span style=&quot;color: #3d85c6; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;valueForProperty:&lt;/span&gt; 메서드를 호출하여 팟캐스트 미디어 아이템을 위한 메타데이터를 얻는다.&amp;nbsp; 필터 가능한 속성들은 미디어 프로퍼티 프리디케이트들을 만드는데 사용될 수 있다.&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;NSString *const &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaItemPropertyPodcastTitle&lt;/span&gt;;&amp;nbsp;&amp;nbsp; //filterable&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;상수&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaItemPropertyPodcastTitle&lt;/div&gt;팟캐스트의 개별 에피소드의 제목과 함께 나올 팟캐스트의 제목.&lt;br /&gt;
NSString 오브젝트 값이다.&lt;br /&gt;
&lt;a href=&quot;http://deveruran.blogspot.com/2010/05/mpmediapropertypredicate-class.html&quot;&gt;MPMediaPropertyPredicate   클래스 레퍼런스&lt;/a&gt;에서 설명되는 바와 같이 미디어 프로퍼티 프리디케이트를 만드는데 사용될 수 있다. iPhone  OS 3.0이상에서 사용가능하며 MPMediaItem.h에 정의되어 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;사용자 정의 프로퍼티 키들&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
당신은 이 프로퍼티 키들을 사용해서 &lt;span style=&quot;color: #3d85c6; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;valueForProperty:&lt;/span&gt; 메서드를 호출하여 미디어 아이템을 위한 사용자 정의 메타데이터를 얻는다.&amp;nbsp; 사용자 정의 속성들은 미디어 프로퍼티 프리디케이트들을 만드는데 사용될 수 없다.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;NSString *const &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaItemPropertyPlayCount&lt;/span&gt;;&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;NSString *const &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaItemPropertySkipCount&lt;/span&gt;;&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;NSString *const &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaItemPropertyRating&lt;/span&gt;;&lt;/div&gt;&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;NSString *const &lt;span style=&quot;color: #3d85c6;&quot;&gt;MPMediaItemPropertyLastPlayedDate&lt;/span&gt;;&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;상수&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaItemPropertyPlayCount&lt;/div&gt;사용자가 미디어 아이템을 재생한 횟수. NSUInteger 데이터형을 나타내는 NSNumber 오브젝트 값.&amp;nbsp; iPhone OS 3.0 이상에서 사용가능하고, MPMediaItem.h에 정의되어 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaItemPropertySkipCount&lt;/div&gt;사용자가 아이템 재생을 스킵한 횟수. NSUInteger 데이터형을 나타내는 NSNumber 오브젝트 값. iPhone OS 3.0 이상에서 사용가능하고, MPMediaItem.h에 정의되어 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaItemPropertyRating&lt;/div&gt;사용자가 미디어 아이템에 준 등급. 0~5의 범위를 가지며 NSUInteger 데이터형을 나타내는 NSNumber 오브젝트 값이다.&amp;nbsp; iPhone OS 3.0 이상에서 사용가능하며 MPMediaItem.h에 정의되어 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #999999; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;MPMediaItemPropertyLastPlayedDate&lt;/div&gt;미디어 아이템을 플레이 했던 가장 최근 날짜. NSDate 오브젝트 값이다.&lt;br /&gt;
iPhone OS 3.0 이상에서 사용가능하고 MPMediaItem.h에 정의되어 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://developer.apple.com/iphone/library/documentation/MediaPlayer/Reference/MPMediaItem_ClassReference/Reference/Reference.html&quot;&gt;원문&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://deveruran.blogspot.com/feeds/88324884174400129/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://deveruran.blogspot.com/2010/05/mpmediaitem-class-reference.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/88324884174400129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/88324884174400129'/><link rel='alternate' type='text/html' href='http://deveruran.blogspot.com/2010/05/mpmediaitem-class-reference.html' title='MPMediaItem Class Reference'/><author><name>URan</name><uri>http://www.blogger.com/profile/18252169921818710895</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://1.bp.blogspot.com/_Jp42cOu6868/S1PnNjw9hLI/AAAAAAAAABE/JwY8y2RsVBc/S220/test.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1830687063536409594.post-9010311211669278781</id><published>2010-05-04T06:19:00.000-07:00</published><updated>2010-05-09T18:15:58.465-07:00</updated><title type='text'>Determining OpenGL ES Capabilities</title><content type='html'>&lt;span style=&quot;font-size: x-large;&quot;&gt;&lt;b&gt;OpenGL ES 능력 결정하기&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
iPhone OS의 OpenGL ES 는 고정 함수 그래픽스 파이프라인을 수행하는 OpenGL ES 1.1 과 쉐이더 파이프라인을 수행하는 OpenGL ES 2.0 을 모두 지원한다.  OpenGL ES 2.0 은 OpenGL ES 1.1 의 슈퍼셋이 아니다; OpenGL ES 의 고정함수 능력들은 그래픽스 하드웨어의 최신 인터페이스의 지원에서 제거 되었다.&lt;br /&gt;
&lt;br /&gt;
OpenGL ES 1.1과 OpenGL ES 2.0 모두 반드시 지원해야 하는 모든 임플리먼테이션에 해당하는 최소한의 능력을 정의한다.  하지만, OpenGL ES 명세서는 능력들에 관해서는 하드웨어 임플리먼테이션에 제한을 하지 않는다.  OpenGL ES 임플리먼테이션은 최소한의 능력(예를들어, 텍스쳐의 최대 사이즈 증가라던가..)이나 OpenGL ES 확장 메커니즘으로 인한 OpenGL ES의 확장된 능력들도 확장할 수 있다.  애플은 다른 iPhone 모델들 상에서 다양한 능력들을 제공하는데에 두 메커니즘들을 사용한다.  다음 장인, &quot;Platform Notes,&quot; 에서 이 능력들에 대해 자세히 알아보도록 한다.  하지만, 애플에서 OpenGL ES 의 다른 버전을 제공하여 같은 버전에서도 다른 능력들을 보이기 때문에, 당신의 어플리케이션은 반드시 이 능력에 맞는 동작을 하도록 디바이스의 능력을 테스트 하고 조절해야 한다.  만약에 당신의 어플리케이션이 런타임에 OpenGL ES 의 능력 테스트에 실패한다면, 실행할때 충돌 또는 실패할 것이며, 사용자에게 좋지 못한 경험을 제공하는 것이 된다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;어떤 버전을 타겟으로 삼아야 할까?&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
OpenGL ES 어플리케이션을 설계할 때, 당신이 반드시 대답해야 할 첫번째 질문은 당신의 어플리케이션이 OpenGL ES 1.1 과 2.0을 모두 지원해야 하는가 이다.&lt;br /&gt;
&lt;br /&gt;
OpenGL ES 1.1 의 고정함수 파이프라인은 3D 그래픽스 파이프라인을 위한 동작에 버텍스 변형 및 라이팅 부터 프레임 버퍼와 함께 마지막 픽셀들을 블렌딩 하는 것 까지 좋은 기준치를 제공한다.  만약 당신이 OpenGL Es 2.0 애플리케이션을 구현하는 것을 선택한다면, 이런 기능을 중복할 필요가 있다.  OpenGL ES 2.0은 OpenGL ES 1.1 보다 좀더 융통성 있다.  OpenGL ES 2.0 쉐이더에서 쉽게 구현할 수 있는 커스텀 버텍스와 프래그먼트 연산들도 OpenGL ES 1.1 을 사용하려면 어렵거나 불가능하다. OpenGL ES 1.1 어플리케이션에서의 커스텀 연산의 구현은 종종 다중 렌더링 과정이나 OpenGL ES 상태에 복잡한 변경을 요구하는데, 이것은 코드에 의존적이며, 이해하기 어렵다.&amp;nbsp; 당신의 알고리즘이 복잡해질수록, 쉐이더는 이 연산들을 보다 명료하고 간결하게 그리고 보다 나은 퍼포먼스로 전달한다.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;OpenGL ES 렌더링 컨텍스트 생성&lt;/b&gt;&lt;br /&gt;
iPhone OS 에서 당신의 애플리케이션은 EAGLContext 오브젝트로 알려져 있는 OpenGL ES 렌더링 컨텍스트를 초기화 할 때, 어떤 버전의 OpenGL ES 를 사용할 것인지 결정한다.&amp;nbsp; 당신의 어플리케이션은 각 컨텍스트가 사용하는 OpenGL ES의 버전을 결정한다.&amp;nbsp; 예를 들어, OpenGL ES 1.1 을 사용하는 컨텍스트를 생성하려면, 당신의 애플리케이션은 다음과 같이 초기화 한다.&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;EAGLContext* myContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1];&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
만약 OpenGL ES 2.0을 사용하길 원한다면, 다음과 같이 초기화 한다.&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;EAGLContext* myContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
만약 각 OpenGL ES 의 구현이 가능하지 않다면, initWithAPI:는 nil을 리턴한다.&amp;nbsp; 당신의 어플리케이션은 반드시 사용하기 전에 컨텍스트가 성공적으로 초기화 되었는지 테스트 해 보아야 한다.&lt;br /&gt;
&lt;br /&gt;
OpenGL ES 2.0과 OpenGL ES 1.1 이 같은 어플리케이션에서 모두 지원되도록 하려면, 코드 2-1에 보여지는 바와 같이 당신의 어플리케이션에서는 첫번째로 OpenGL ES 2.0 렌더링 컨텍스트를 생성하는것을 시도해야 한다. 만약 이것이 실패한다면, 대신에 OpenGL ES 1.1 컨텍스트를 생성하는것을 시도한다.&lt;br /&gt;
&lt;br /&gt;
[코드 2-1] 같은 어플리케이션에서 OpenGL ES 1.1 과 OpenGL 2.0 지원하기&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;EAGLContext* CreateBestEAGLContext(){&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; EAGLContext *context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(context == nil)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1];&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return context;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
당신의 어플리케이션이 컨텍스트를 초기화했을 때, 이것은 OpenGL ES 의 어떤 버전을 지원할지 결정하는 컨텍스트의 API 속성을 읽을 수 있다.&amp;nbsp; 예를 들어, 당신의 어플리케이션이 고정함수 렌더러와 쉐이더 렌더러를 클래스에서 구현하여, 일반적인 기본 클래스와 공유한다고 하면, 당신의 어플리케이션은 런타임에 적절한 렌더러를 사용할 것이다.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;중요&lt;/b&gt; : OpenGL ES 2.0 은 OpenGL ES 1.1 에 있는 많은 함수들을 제거 하였고 OpenGL ES 1.1 에서 사용할 수 없는 함수들을 추가하였다.&amp;nbsp; 만약 당신의 어플리케이션이 OpenGL ES 1.1 컨텍스트에서 OpenGL ES 2.0 함수의 호출을 시도한다면(또는 반대로), 결과는 undefined 가 될 것이다.&amp;nbsp; 두개의 렌더링 패스간에 약간의 코드 콩유가 가능한 동안은, 당신은 OpenGL ES 의 두 버전을 식별하는 작업을 호출하는데 공유를 제한해야 한다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;OpenGL ES 의 각 버전으로 당신의 어플리케이션을 제한하기&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://developer.apple.com/iphone/library/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/DeterminingOpenGLESCapabilities/DeterminingOpenGLESCapabilities.html#//apple_ref/doc/uid/TP40008793-CH102-SW1&quot;&gt;원문&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://deveruran.blogspot.com/feeds/9010311211669278781/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://deveruran.blogspot.com/2010/05/determining-opengl-es-capabilities.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/9010311211669278781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/9010311211669278781'/><link rel='alternate' type='text/html' href='http://deveruran.blogspot.com/2010/05/determining-opengl-es-capabilities.html' title='Determining OpenGL ES Capabilities'/><author><name>URan</name><uri>http://www.blogger.com/profile/18252169921818710895</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://1.bp.blogspot.com/_Jp42cOu6868/S1PnNjw9hLI/AAAAAAAAABE/JwY8y2RsVBc/S220/test.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1830687063536409594.post-4643610127864531455</id><published>2010-05-04T01:37:00.000-07:00</published><updated>2010-05-04T02:21:19.292-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="iPhone"/><category scheme="http://www.blogger.com/atom/ns#" term="Xcode"/><title type='text'>PBXProjectWizard 에러처리</title><content type='html'>&lt;a href=&quot;http://webdesigniphone.wiki.fc2.com/wiki/PBXProjectWizard%20%E3%82%A8%E3%83%A9%E3%83%BC%E5%AF%BE%E5%87%A6&quot;&gt;링크&lt;/a&gt; 참조&lt;br /&gt;
&lt;br /&gt;
딱히 뭣땀시 나는 에러인지는 잘 모르겠습니다만..&lt;br /&gt;
저의 경우엔 Window-based Application 템플릿으로 프로젝트 생성할때 갑자기 에러가 나더군요.. SDK를 이거깔았다 저거 깔았다 했더니만..;;&lt;br /&gt;
&lt;br /&gt;
뭐.. 암튼..&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
일본어로 된 사이트 입니다.&lt;br /&gt;
구글자동 번역 이용하시믄 대충이해할 정도는 번역 해 주네요. &lt;br /&gt;
&lt;br /&gt;
인제 별게 다 에러를 내는구만!!&amp;nbsp; &amp;gt;ㅅ&amp;lt;;&lt;br /&gt;
&lt;br /&gt;
Developer 안에 있는 어플리케이션들은 Xcode 설치하면 자동으로 설치 되는군요..&lt;br /&gt;
이것도 모르고 어디서 찾아야 하는지 해메다니..ㅡ..ㅡ;;</content><link rel='replies' type='application/atom+xml' href='http://deveruran.blogspot.com/feeds/4643610127864531455/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://deveruran.blogspot.com/2010/05/pbxprojectwizard.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/4643610127864531455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/4643610127864531455'/><link rel='alternate' type='text/html' href='http://deveruran.blogspot.com/2010/05/pbxprojectwizard.html' title='PBXProjectWizard 에러처리'/><author><name>URan</name><uri>http://www.blogger.com/profile/18252169921818710895</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://1.bp.blogspot.com/_Jp42cOu6868/S1PnNjw9hLI/AAAAAAAAABE/JwY8y2RsVBc/S220/test.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1830687063536409594.post-7015957340880491403</id><published>2010-05-03T03:08:00.000-07:00</published><updated>2010-05-04T03:30:50.471-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="iPhone"/><category scheme="http://www.blogger.com/atom/ns#" term="OpenGL ES"/><title type='text'>Working with OpenGL ES Contexts and Framebuffers</title><content type='html'>&lt;a href=&quot;http://developer.apple.com/iphone/library/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/WorkingwithEAGLContexts/WorkingwithEAGLContexts.html&quot;&gt;원문&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;EAGL Context 생성&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
당신의 애플리케이션에서 OpenGL ES 명령을 실행하기 전에, 첫번째로 EAGL 컨텍스트를 반드시 생성 및 초기화 하고 현재 컨텍스트로 만들어야 한다.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;EAGLContext* myContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1];&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;[EAGLContext setCurrentContext:myContext];&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
당신의 애플리케이션이 컨텍스트를 초기화 했을 때, 이것은 이 컨텍스트를 위해 어떤 버전의 OpenGL ES 를 사용할 것인지를 선택한다.&amp;nbsp; 사용할 OpenGL ES 버전을 선택하는 것에 대한 더 자세한 정보는 &lt;a href=&quot;http://developer.apple.com/iphone/library/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/DeterminingOpenGLESCapabilities/DeterminingOpenGLESCapabilities.html#//apple_ref/doc/uid/TP40008793-CH102-SW7&quot;&gt;&quot;어떤 버전을 타겟으로 해야 하는가?&quot;&lt;/a&gt; 를 보도록 하자.&lt;br /&gt;
&lt;br /&gt;
당신의 애플리케이션의 각각의 스레드는 현재 렌더링 하고 있는 컨텍스트를 가리키는 포인터를 유지하고 있다.&amp;nbsp; 당신의 어플리케이션이 현재 컨텍스트를 만들면, EAGL은 이전의 컨텍스트를 릴리즈 하고, 컨텍스트 오브젝트를 유지하고 앞으로 수행할 OpenGL ES 렌더링 명령을 위한 타겟으로 설정한다. 주의할 것은 많은 경우에, 다중 렌더링 컨텍스트들을 생성하는 것은 불필요할 것이라는 것이다. 당신은 종종 단일 렌더링 컨텍스트와 당신이 렌더링 할 각각의 이미지를 위한 하나의 프레임버퍼 오브젝트를 사용하는 같은 결과를 얻을 수 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Framebuffer 오브젝트 생성&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
EAGL 컨텍스트가 명령들을 받기는 하지만, 이것이 그 명령들의 최종 타겟은 아니다.&amp;nbsp; 당신의 어플리케이션은 픽셀들에 렌더링 할 목적지를 제공한다.iPhone OS 에서는, 모든 이미지들이 프레임 버퍼 오브젝트들로 렌더링 된다.&amp;nbsp; 프레임 버퍼 오브젝트들은 모든 OpenGL ES 2.0 임플리먼테이션들에 의해 제공된다.&amp;nbsp; 그리고, 애플은 또한 OpenGL ES 1.1 에서도 GL_OES_framebuffer_object 확장을 통해 모든 임플리먼테이션들을 제공한다.&amp;nbsp; 프레임 버퍼 오브젝트들은 어플리케이션에서 색상, 깊이, 스텐실 타겟들의 생성을 정밀하게 제어할 수 있도록 한다.&amp;nbsp; 게다가, 색상 타겟은 또한 텍스쳐의 포인터로도 사용될 수 있다.&lt;br /&gt;
&lt;br /&gt;
프레임 버퍼를 생성하는 절차는 다음과 같다:&lt;br /&gt;
1. 프레임 버퍼 오브젝트 생성&lt;br /&gt;
2. 하나이상의 타겟 생성(렌더버퍼 또는 텍스쳐)하고, 메모리 할당, 그리고 프레임버퍼 오브젝트로 바인딩&lt;br /&gt;
3. 제대로 되었는지 프레임 버퍼 테스트&lt;br /&gt;
다음장에서는 이 개념을 더 자세히 확장하도록 한다.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;오프스크린 프레임버퍼 오브젝트&lt;/b&gt;&lt;br /&gt;
오프스크린 프레임 버퍼는 렌더링된 이미지를 담아두는데 OpenGL ES 렌더버퍼를 사용한다.&amp;nbsp; 다음의 코드는 OpenGL ES 1.1 에서 완전한 오프스크린 프레임 버퍼 오브젝트를 할당하는 것이다. OpenGL ES 2.2 어플리케이션은 OES 접미사를 제거하도록 한다.&lt;br /&gt;
&lt;br /&gt;
1. 프레임버퍼 생성 및 바인드해서 미래의 OpenGL ES 프레임버퍼 명령들이 이것을 가리킬 수 있도록 한다.&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;GLuint framebuffer;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;glGenFramebuffersOES(1, &amp;amp;framebuffer);&amp;nbsp; //생성&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;glBindFramebufferOES(GL_FRAMEBUFFER_OES, framebuffer);&amp;nbsp; //바인딩&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
2.색상 렌더버퍼를 생성, 메모리 할당, 그리고 프레임 버퍼에 attach&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;GLuint colorRenderbuffer;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;glGenRenderbuffersOES(1, &amp;amp;colorRenderbuffer); //생성&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;glBindRenderbufferOES(GL_RENDERBUFFER_OES, colorRenderbuffer);&amp;nbsp; //바인딩&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_RGBA8_OES, width, height);&amp;nbsp; //메모리 할당&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, colorRenderbuffer);&amp;nbsp; //프레임 버퍼에 attach&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
3. 깊이 렌더 버퍼 생성및 어테치하기 위해 비슷한 과정을 수행&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;GLuint depthRenderbuffer;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;glGenRenderbuffersOES(1, &amp;amp;depthRenderbuffer);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthRenderbuffer);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT16_OES, width, height);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, depthRenderbuffer);&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
4. 제대로 됐는지 프레임 버퍼 확인.&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;GLenum status = glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;if(status != GL_FRAMEBUFFER_COMPLETE_OES){&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; NSLog(@&quot;failed to make complete framebuffer object %x&quot;, status);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;텍스쳐 렌더링에 프레임버퍼 오브젝트 사용&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
당신의 어플리케이션은 텍스쳐에 바로 렌더링 하고 다음에 드로잉하기 위한 소스로 사용하기를 원할것이다. 예를 들어, 당신은 이것을 당신의 씬에 합성하여 거울에 반사되는 것을 렌더링 하는데 사용할 수 있다.&amp;nbsp; 이 프레임버퍼를 생성하는 코드는 color attachment point에 어테치 되는 현재의 텍스쳐를 제외하고, 오프스크린의 예와 거의 동일하다.&lt;br /&gt;
&lt;br /&gt;
1. 프레임 버퍼 오브젝트 생성&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;GLuint framebuffer;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;glGenFramebuffersOES(1, &amp;amp;framebuffer);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;glBindFramebufferOES(GL_FRAMEBUFFER_OES, framebuffer);&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
2. 색상 데이터를 담을 텍스쳐 생성&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;//Create the texture&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;GLuint texture;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;glGenTextures(1, &amp;amp;texture);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;glBindTexture(GL_TEXTURE_2D, texture);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
3. 프레임버퍼에 텍스쳐 Attach&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;glFramebufferTextrue2DOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_TEXTURE_2D, texture, 0);&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
4. 깊이 버퍼 할당및 Attach(부착?)&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;GLuint depthRenderbuffer;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;glGenRenderbufferOES(1, &amp;amp;depthRenderbuffer);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthRenderbuffer);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT16_OES, width, height);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, depthRenderbuffer);&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
5. 프레임버퍼 테스트&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;GLenum status&amp;nbsp; = glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;if(status != GL_FRAMEBUFFER_COMPLETE_OES){&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; NSLog(@&quot;failed to make complete framebuffer object %x&quot;, status); &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;스크린에 드로잉하기&lt;/b&gt;&lt;br /&gt;
오프스크린 타겟들과 텍스쳐들 모두 흥미롭긴 하지만, 둘다 그들의 픽셀들을 스크린에 디스플레이 할 수는 없다. 그것을 하기 위해서 당신의 애플리케이션은 코어 애니메이션과 상호작용을 할 필요가 있다.&lt;br /&gt;
iPhone OS 에서는 모든 UIView 오브젝트들이 CoreAnimation 레이어들을 깔고 있다.&amp;nbsp; 당신의애플리케이션이 OpenGL ES 컨텐츠를 스크린에 나타내기 위해서는,UIView 오브젝트를 타겟으로 할 필요가 있다.&amp;nbsp; 나아가, 그 뷰는 반드시 특별한 CoreAnimation 레이어인 CAEAGLLayer오브젝트를 깔고(?)있어야 한다.(역주 : 즉, OpenGL ES 컨텐츠를 나타낼 타겟으로 하는 UIView의 레이어는 CAEAGLLayer이어야 한다는 뜻.)&amp;nbsp; 그림 3-1에서 보여지는 바와 같이 CAEAGLLayer 오브젝트는 OpenGL ES를 잘 알고 있고, 렌더버퍼를 참조한다.&lt;br /&gt;
당신의 어플리케이션에서 이러한 결과들을 나타내려고 할 때, 렌더버퍼의 컨텐츠들은 다른 코어 애니메이션 레이어들과 애니메이션되고 합성되어 스크린으로 보내진다.&lt;br /&gt;
&lt;br /&gt;
[그림 3-1] CoreAnimation은 OpenGL ES 와 렌더버퍼를 공유한다. &lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://developer.apple.com/iphone/library/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/Art/eagl_framebuffer_caeaglLayer.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://developer.apple.com/iphone/library/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/Art/eagl_framebuffer_caeaglLayer.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Xcode 에서는 당신이 이런 작업을 할 수 있도록 OpenGL ES 템플릿을 제공하지만, 이것은 &lt;br /&gt;
이 OpenGL ES 템플릿은 Xcode 에서 당신이 이 작업을 할 수 있게 제공되지만, 이것은 스크린에 나타낼 수 있는 프레임 버퍼 오브젝트를 생성하는데 사용되는 과정들을 보여주는 예일 뿐이다.&lt;br /&gt;
&lt;br /&gt;
1. &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;UIView를 서브클래싱&lt;/span&gt;&lt;/b&gt; 하고 당신의 iPhone 어플리케이션을 위한 뷰를 설정한다.&lt;br /&gt;
&lt;br /&gt;
2. 당신의 뷰 클래스의 오브젝트를 생성한 후, CALayer 오브젝트 대신에 CAEAGLLayer 오브젝트로 초기화 하기 위하여 UIView 클래스의 &lt;b style=&quot;color: red;&quot;&gt;layerClass 메서드를 오버라이드&lt;/b&gt; 한다.&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;+(Class)layerClass&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; return [CAEAGLLayer class]; &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
3. UIView의 layer 메서드를 호출하여 뷰와 연관된 레이어를 얻는다.&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;myEAGLLayer = (CAEAGLLayer *)self.layer;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
4. 레이어 속성들을 설정한다.&lt;br /&gt;
선택 작업을 위해서, CALayer 클래스에서 제공되는 opaque 속성을 설정함으로써 불투명한 레이어를 나타내는 것이 권장된다. &lt;a href=&quot;#result&quot;&gt;&quot;당신의 결과를 나타내기&quot;&lt;/a&gt;를 보자.&lt;br /&gt;
&lt;br /&gt;
5. &lt;b&gt;CAEAGLLayer&lt;/b&gt; 오브젝트의 &lt;b&gt;drawableProperties&lt;/b&gt; 속성값에 새 딕셔너리를 할당하는 것에 의해서 렌더링 서페이스의 서페이스 속성들을 선택적으로 구성한다.&lt;br /&gt;
EAGL은 당신이 렌더링된 픽셀들의 포멧을 렌더버퍼가 그의 컨텐츠들을 스크린에 표시한 후에도 유지하든 말든 간에 명세할 수 있게 한다.&amp;nbsp; 당신은 이 속성들을 kEAGLDrawablePropertyColorFormat 과 kEAGLDrawablePropertyRetainedBacking 키들을 사용하는 딕셔너리에서 식별할 수 있다.&amp;nbsp; 당신이 설정할 수 있는 키들의 리스트들은&amp;nbsp; &lt;a href=&quot;http://developer.apple.com/iphone/library/documentation/iPhone/Reference/EAGLDrawable_Ref/EAGLDrawable/EAGLDrawable.html#//apple_ref/doc/uid/TP40007664&quot;&gt;EAGLDrawable Protocol Reference&lt;/a&gt; 를 보도록 하자.&lt;br /&gt;
&lt;br /&gt;
6. 앞서, 프레임 버퍼를 생성한다.&lt;br /&gt;
GLuint framebuffer;&lt;br /&gt;
glGenFramebuffersOES(1, &amp;amp;framebuffer);&lt;br /&gt;
glBindFramebufferOES(GL_FRAMEBUFFER_OES, framebuffer);&lt;br /&gt;
&lt;br /&gt;
7. 색상 렌더버퍼를 생성하고 렌더링 컨텍스트를 호출하여 우리의 CoreAnimation 레이어의 저장소에 할당하도록 하자. 렌더버퍼 저장소의 가로, 세로, 그리고 포멧은 renderbufferStorage:fromDrawable: 메소드가 호출된 순간에 CAEAGLLayer 오브젝트의 속성들과 바운드들로 부터 얻어진다.&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;GLuint colorRenderbuffer;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;glGenRenderbuffersOES(1, &amp;amp;colorRenderbuffer);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;glBindRenderbufferOES(GL_RENDERBUFFER_OES, colorRenderbuffer);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;[myContext renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:myEAGLLayer];&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, colorRenderbuffer);&lt;/span&gt;&lt;br /&gt;
만약에 코어 애니메이션 레이어의 속성들이 변하면, 당신의 애플리케이션은 반드시&amp;nbsp; renderbufferStorage:fromDrawable: 을 다시 호출하여 렌더버퍼를 다시 할당해 줘야 한다.&lt;br /&gt;
디스플레이를 위해 스케일 또는 이동시킨 이미지는 상당한 퍼포먼스 비용이 발생할 수 있으므로, 성공적으로 렌더링할수 없을 수도 있다.&amp;nbsp; 예를 들어, 템플릿에서, 프레임버퍼와 렌더버퍼 오브젝트들은 CAEAGLLayer 오브젝트가 변하는 범위에서는 언제든지 파괴되고 재생성된다.&lt;br /&gt;
&lt;br /&gt;
8. 색상 렌더버퍼의 가로와 세로를 얻는다.&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;GLint width;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;GLint height;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &amp;amp;width);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &amp;amp;height);&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
9. 깊이 버퍼 할당및 어태치(Attach)&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;GLint depthRenderbuffer;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;glGenRenderbuffersOES(1, &amp;amp;depthRenderbuffer);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthRenderbuffer);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT16_OES, width, height);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, depthRenderbuffer);&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
10. 프레임 버퍼 오브젝트 테스트&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;GLenum status = glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;if(status != GL_FRAMEBUFFER_COMPLETE_OES)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; NSLog(@&quot;failed to make complete framebuffer object %x&quot;, status); &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
프레임버퍼 오브젝트를 생성하는 과정을 반복하는 것은 세가지 경우가 모두 비슷하며, 프레이버퍼 오브젝트의 color attachment point 로 어태치 된 오브젝트의 할당을 어떻게 할 것인지에 대한 것만 다르다.&lt;br /&gt;
&lt;br /&gt;
[표 3-1] 프레임버퍼의 Color Attachment 할당을 위한 매커니즘&lt;br /&gt;
&lt;table border=&quot;1&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;th width=&quot;200&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;오프스크린 렌더버퍼&lt;/span&gt;&lt;/th&gt; &lt;td&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;glRenderbufferStorageOES&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;th&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;그릴 수 있는 렌더버퍼&lt;/span&gt;&lt;/th&gt; &lt;td&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;renderbufferStorage:fromDrawable:&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;th&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;텍스쳐&lt;/span&gt;&lt;/th&gt; &lt;td&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;glFramebufferTexture2DOES &lt;/span&gt;&lt;/td&gt; &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;프레임 버퍼 오브젝트 그리기&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
프레임 버퍼 오브젝트를 할당했을 때, 당신은 그곳에 렌더링 할 수 있었다. 모든 렌더링은 현재 프레임 버퍼 영역의 타겟이 된다.&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;glBindFramebufferOES(GL_FRAMEBUFFER_OES, framebuffer);&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&quot;result&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;당신의 결과들을 나타내기&lt;/b&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
당신이 색상 렌더버퍼를 CoreAnimation 레이어에서 포인트로 할당했다고 가정하면, 당신은 현재 렌더버퍼를 만들고 렌더링 컨텍스트에서 presentRenderbuffer:메서드를 호출 하는 것으로 그 컨텐츠들을 나타낼 수 있다.&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;glBindRenderbufferOES(GL_RENDERBUFFER_OES, colorRenderbuffer);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;[context presentRenderbuffer:GL_RENDERBUFFER_OES];&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
기본적으로, 이 렌더버퍼의 컨텐츠들은 스크린에 표시된 후에는 유효하지 않다.&amp;nbsp; 당신의 어플리케이션은 반드시 프레임을 그릴때마다 렌더버퍼의 컨텐츠들을 완전히 재생성해 주어야 한다.&amp;nbsp; 만약에 당신의 어플리케이션이 프레임들 사이에 컨텐츠들을 보존해야 한다면, kEAGLDrawablePropertyRetainedBacking 키를 CAEAGLLayer오브젝트의 drawableProperties 속성에 저장된 딕셔너리에 추가해야 한다.&amp;nbsp; 레이어의 컨텐츠를 유지하는 것은 할당에 필요한 부가적인 메모리가 요구될 것이다. 이것은, 당신의 어플리케이션의 퍼포먼스를 경감시킬 수 있다.&lt;br /&gt;
&lt;br /&gt;
렌더버퍼가 스크린에 표시되었을 때, 이것은 스크린 상에 보이는 다른 코어 애니메이션 레이어들과 OpenGL ES, Quartz 또는 그밖의 다른 그래픽스 라이브러리로 그려진 레이어들이든 말든간에 애니메이션 되고, 합성된다.&amp;nbsp; 다른 컨텐츠와 섞인 OpenGL ES 컨텐츠는 성능에 불리한 점을 가져온다. 가장 좋은 연습을 위해서는, 당신의 애플리케이션에서 OpenGL ES로만 컨텐츠를 렌더링해 보는 것이다.&amp;nbsp; 이것을 하기 위해서는, 스크린 크기의 CAEAGLLayer 오브젝트를 생성하고, opaque 속성을 YES, 그리고 다른 눈에 보이는 Core Animation 레이어들이나 뷰들은 없도록 하는 것이다.&lt;br /&gt;
만약 다른 레이어들과 OpenGL ES 를 합성해야 한다면, 당신의 CAEAGLLayer 오브젝트의 불투명도를 줄이도록 한다. 이것은 퍼포먼스 감소를 없애지는 않는다.&lt;br /&gt;
&lt;br /&gt;
만약 당신의 CAEAGLLayer 오브젝트가 다른 레이어들과 블렌드되었다면, 코어 애니메이션은 상당한 퍼포먼스 패널티를 얻게 된다.&amp;nbsp; 당신은 이런 패널티를&amp;nbsp; 다른 UIKit 레이어들의 뒤에 당신의 레이어를 동작시키는 것으로 감소시킬 수 있다.&lt;br /&gt;
주의 : 만약에 반드시 투명한 OpenGL ES 컨텐츠를 블랜드 해야 한다면, 당신의 렌더버퍼는 코어 애니메이션에 의해서 알맞게 합성되기 위해서 알파값이 먼저 곱해진 버퍼를 반드시 제공해야 한다.&lt;br /&gt;
&lt;br /&gt;
결론적으로 CAEAGLLayer 오브젝트에 코어 애니메이션 변형을 사용할 필요는 거의 없으며, 코어 애니메이션 처리는 당신의 컨텐츠를 디스플레이 하기 전에 반드시 해야 한다.&amp;nbsp; 당신의 애플리케이션은 모델 뷰와 투영 행렬들(또는 당신의 버텍스 쉐이더와 같은 것들), 그리고 glViewport와 glScissor 함수들로 가로와 세로 속성들을 변경하는 것에 의해서 종종 같은 동작을 수행할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;공유그룹&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
EAGLSharegroup 오브젝트는 하나이상의 EAGLContext와 관련된 OpenGL ES 리소스들을 관리한다.&amp;nbsp; 공유그룹은 보통 EAGLContext 오브젝트가 릴리즈 된 것이 참조하는 것이 마지막 EAGLContext 오브젝트일 때 초기화되고, 배치되었을 때 생성된다.&amp;nbsp; 불투명 오브젝트로서, 개발자가 접근가능한 API 는 없다.&lt;br /&gt;
단일 공유그룹을 사용하여 다중 컨텍스트들을 생성하려면, 앞에서와 같이 당신의 어플리케이션은 첫번째로 하나의 컨텍스트를 생성한 후, initWithAPI:sharegroupe: 를 사용해서 하나이상의 부가적인 컨텍스트들을 생성한다.&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;EAGLContext * firstContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1];&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;EAGLContext * secondContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1 sharegroup:[firstContext sharegroup]];&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
공유그룹들은 텍스쳐, 버퍼, 프레임버퍼, 그리고 렌더 버퍼들을 관리한다.&amp;nbsp; 공유그룹의 다중 컨텍스트들이 이 오브젝트에 접근했을 때, 공유된 오브젝트들의 상태 변화를 관리하는 것은 당신의 어플리케이션  책임이다.&amp;nbsp; 다른 컨텍스트에서 렌더링 되기 위해 사용되는 동안 공유 오브젝트의 상태변화의 결과는 정의되지 않는다.&amp;nbsp; 확실한 결과들을 얻으려면, 당신의 어플리케이션은 당신의 어플리케이션이 그것을 수정할 때 렌더링을 위해 사용되는 현재 공유되고 있지 않은 오브젝트를 확실히 할 과정을 명확히 해야 한다.&lt;br /&gt;
나아가, 상태 변화들은 공유그룹에서 그 컨텍스트가 공유된 오브젝트를 다시 바인드 할때까지 다른 컨텍스트에 의해서 발견될 상태 변화들은 보장받지 못한다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
공유그룹에서 컨텍스트 전반에 걸쳐 공유된 오브젝트들로 상태변화의 결과를 정의하기 위해, 당신의 어플리케이션은 반드시 다음의 작업들을 순서대로 수행해야 한다:&lt;br /&gt;
&lt;br /&gt;
&lt;ol class=&quot;ol&quot;&gt;&lt;li class=&quot;li&quot;&gt;오브젝트의 상태 변경&lt;/li&gt;
&lt;li class=&quot;li&quot;&gt;상태수정 루틴을 수행하는 렌더링 컨텍스트에서 glFlush를 호출한다.&lt;/li&gt;
&lt;li class=&quot;li&quot;&gt;각 컨텍스트는 반드시 변화를 보기 위해서 오브젝트를 다시 바인드 해야 한다. &lt;/li&gt;
&lt;/ol&gt;원래의 오브젝트는 공유 그룹의 모든 컨텍스트들이 새로운 오브젝트의 영역을 가지게 된 후에는 삭제된다. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
========================================&lt;br /&gt;
가독성도 떨어지고, 해석도 이상해서 못봐주겠다 싶으면 원문 참고 하세요.&lt;br /&gt;
오타, 오역은 댓글로 알려주시면&lt;b style=&quot;color: #a64d79;&quot;&gt; &quot;Thank you very 감사&quot;&lt;/b&gt; 하겠습니다 ^^</content><link rel='replies' type='application/atom+xml' href='http://deveruran.blogspot.com/feeds/7015957340880491403/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://deveruran.blogspot.com/2010/05/working-with-opengl-es-contexts-and.html#comment-form' title='1개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/7015957340880491403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/7015957340880491403'/><link rel='alternate' type='text/html' href='http://deveruran.blogspot.com/2010/05/working-with-opengl-es-contexts-and.html' title='Working with OpenGL ES Contexts and Framebuffers'/><author><name>URan</name><uri>http://www.blogger.com/profile/18252169921818710895</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://1.bp.blogspot.com/_Jp42cOu6868/S1PnNjw9hLI/AAAAAAAAABE/JwY8y2RsVBc/S220/test.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1830687063536409594.post-2413851360939704077</id><published>2010-04-13T20:05:00.000-07:00</published><updated>2010-04-13T20:05:46.260-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="OpenGL"/><category scheme="http://www.blogger.com/atom/ns#" term="Reference"/><title type='text'>glVertexPointer</title><content type='html'>기능&lt;br /&gt;
OpenGL 버텍스 배열 기능에 사용되는 버텍스 데이터 좌표 배열을 지정한다.&lt;br /&gt;
&lt;br /&gt;
첨가 파일&lt;br /&gt;
&lt;gl.h&gt;&lt;/gl.h&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;형식&lt;br /&gt;
void glVertexPointer(GLint 크기, GLenum 타입, GLsizei 간격, const GLvoid *포인터);&lt;br /&gt;
&lt;br /&gt;
설명&lt;br /&gt;
OpenGL 에서 버텍스 배열 기능을 사용할 때 필요한 데이터의 위치, 구성, 타입을 지정하는함수.&lt;br /&gt;
이 함수에 의해 지정되는 버퍼에는 동적인 데이터가 포함될 수 있으나 반드시 유효한 데이터여야만 한다. OpenGL 이 버텍스 배열을 계산할 떄마다 여기서 지정된 데이터가 여기서 지정된 버텍스 배열 버퍼로부터 다시 읽혀진다.</content><link rel='replies' type='application/atom+xml' href='http://deveruran.blogspot.com/feeds/2413851360939704077/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://deveruran.blogspot.com/2010/04/glvertexpointer.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/2413851360939704077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/2413851360939704077'/><link rel='alternate' type='text/html' href='http://deveruran.blogspot.com/2010/04/glvertexpointer.html' title='glVertexPointer'/><author><name>URan</name><uri>http://www.blogger.com/profile/18252169921818710895</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://1.bp.blogspot.com/_Jp42cOu6868/S1PnNjw9hLI/AAAAAAAAABE/JwY8y2RsVBc/S220/test.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1830687063536409594.post-4648674044145259608</id><published>2010-04-13T20:00:00.000-07:00</published><updated>2010-04-13T20:00:14.933-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="OpenGL ES"/><title type='text'>OpenGL ES 에서 축소된 기능들</title><content type='html'>OpenGL ES의 다른 많은 특성들이 범위와 기능 면에서 상당히 축소 되었다.&lt;br /&gt;
OpenGL ES는 여전히 부동소수점이나 부동소수점 형식의 glColor4, glNormal3 그리고 MultiTexCoord4 명령을 사용해 색상과 법선, 텍스처 좌표 등을 지정하는 제한된 지원을 제공하고 있다.&lt;br /&gt;
이들 함수들은 예를 들어, 이들 상태 중 하나가 전체 버텍스 배열에서 상수로 유지될 때만 사용이 가능하다.&lt;br /&gt;
&amp;nbsp;전체 변환 파이프라인은 여전히 제자리를 유지하고 있지만 새로 지정된 데이터 타입(더블 등이 제거된)만 받을 수 있다. OpenGL ES 는 이외에도 전치 행렬을 지원하지 않으며, 모델 뷰 행렬 스택의 최소 깊이가 32에서 16으로 축소 되었다.&lt;br /&gt;
&lt;br /&gt;
[텍스처 맵핑]&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;2D 텍스처만 지원&lt;/li&gt;
&lt;li&gt;다중 텍스처는 선택사항&lt;/li&gt;
&lt;li&gt;GL_COMBINE 텍스처 환경 제거됨&lt;/li&gt;
&lt;li&gt;텍스처 좌표 생성/큐브맵 지원 제거&lt;/li&gt;
&lt;li&gt;텍스처 테두리/wrap 모드 GL_CLAMP/GL_CLAMP_TO_BORDER 지원 하지 않음&lt;/li&gt;
&lt;li&gt;텍스처 프록시/LOD 고정/편의 인자 등 제거&lt;/li&gt;
&lt;li&gt;텍스처 압축 지원하나 압축되니 텍스처 다시 읽기는 불가능&lt;/li&gt;
&lt;li&gt;압축되지 않은 이미지를 압축하는데 glTexImage2D 사용 불가&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
[래스터 작업]&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;대부분의 래스터 작업 제거됨&lt;/li&gt;
&lt;li&gt;glPixelStore : 텍스처 데이터의 포장과 해제만 지원&lt;/li&gt;
&lt;li&gt;glReadPixels : 픽셀 읽기 가능, 깊이/스텐실 버퍼의 값을 읽는데는 사용불가&lt;/li&gt;
&lt;li&gt;glDrawPixels, glPixelTransfer, glPixelZoom 함수 지원 X&lt;/li&gt;
&lt;li&gt;glReadBuffer, glDrawBuffer, glCopyPixels 함수 지원 X&lt;/li&gt;
&lt;li&gt;폴리곤 오프셋은 채움 모드에서만 지원됨.&lt;/li&gt;
&lt;li&gt;glPloygonMode는 더이상 지원되지 않음.&lt;/li&gt;
&lt;/ul&gt;[조명]&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;최소 8개의 광원 지원해야 함.&lt;/li&gt;
&lt;li&gt;2면 조명 지원.(전면과 후면 재질 속성이 같아야 함)&lt;/li&gt;
&lt;li&gt;색상 재질 모드로 GL_AMBIENT_AND_DIFFUSE만 지원&lt;/li&gt;
&lt;li&gt;보조 색상 / 지역 관찰자 조명 모델 제거 됨&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
[-- 내용 출처 : OpenGL SuperBible 3판 --]</content><link rel='replies' type='application/atom+xml' href='http://deveruran.blogspot.com/feeds/4648674044145259608/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://deveruran.blogspot.com/2010/04/opengl-es_13.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/4648674044145259608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/4648674044145259608'/><link rel='alternate' type='text/html' href='http://deveruran.blogspot.com/2010/04/opengl-es_13.html' title='OpenGL ES 에서 축소된 기능들'/><author><name>URan</name><uri>http://www.blogger.com/profile/18252169921818710895</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://1.bp.blogspot.com/_Jp42cOu6868/S1PnNjw9hLI/AAAAAAAAABE/JwY8y2RsVBc/S220/test.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1830687063536409594.post-2839979275649692959</id><published>2010-04-13T19:47:00.000-07:00</published><updated>2010-04-13T19:47:21.049-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="OpenGL"/><category scheme="http://www.blogger.com/atom/ns#" term="OpenGL ES"/><title type='text'>OpenGL ES 에서 제거된 기능들</title><content type='html'>다음은 OpenGL -&amp;gt; OpenGL ES 로 가면서 제거된 기능들에 대한 목록이다.&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;지오메트리 열거를 위한 Begin/End(OpenGL ES는 버텍스 배열만을 사용한다.)&lt;/li&gt;
&lt;li&gt;인터리브(interleaved) 배열 혹은 glArrayElement 지원&lt;/li&gt;
&lt;li&gt;출력 목록&amp;nbsp;&lt;/li&gt;
&lt;li&gt;평가자&amp;nbsp;&lt;/li&gt;
&lt;li&gt;색상 인덱스 모드&lt;/li&gt;
&lt;li&gt;사용자 정의 클리핑 평면&lt;/li&gt;
&lt;li&gt;선이나 폴리곤 점각법&lt;/li&gt;
&lt;li&gt;glRect&lt;/li&gt;
&lt;li&gt;이미징 서브셋&lt;/li&gt;
&lt;li&gt;피드백&lt;/li&gt;
&lt;li&gt;선택&lt;/li&gt;
&lt;li&gt;누적 버퍼&lt;/li&gt;
&lt;li&gt;경계 플래그&lt;/li&gt;
&lt;li&gt;glPolygonMode&lt;/li&gt;
&lt;li&gt;GL_QUADS, GL_QUAD_STRIP, GL_POLYGON 기본 모델 들&lt;/li&gt;
&lt;li&gt;속성 저장 :&amp;nbsp; glPushAttrib, glPopAttrib, glPushClientAttrib 혹은 glPopClientAttrib&lt;/li&gt;
&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://deveruran.blogspot.com/feeds/2839979275649692959/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://deveruran.blogspot.com/2010/04/opengl-es.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/2839979275649692959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/2839979275649692959'/><link rel='alternate' type='text/html' href='http://deveruran.blogspot.com/2010/04/opengl-es.html' title='OpenGL ES 에서 제거된 기능들'/><author><name>URan</name><uri>http://www.blogger.com/profile/18252169921818710895</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://1.bp.blogspot.com/_Jp42cOu6868/S1PnNjw9hLI/AAAAAAAAABE/JwY8y2RsVBc/S220/test.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1830687063536409594.post-577330215406828506</id><published>2010-04-01T01:47:00.001-07:00</published><updated>2010-04-01T01:47:18.284-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="iPhone"/><title type='text'>iPhone 프로그래밍 참고</title><content type='html'>&amp;nbsp;http://mygeni.tistory.com/category/%5BDev%20Zone%5D/iphone</content><link rel='replies' type='application/atom+xml' href='http://deveruran.blogspot.com/feeds/577330215406828506/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://deveruran.blogspot.com/2010/04/iphone.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/577330215406828506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/577330215406828506'/><link rel='alternate' type='text/html' href='http://deveruran.blogspot.com/2010/04/iphone.html' title='iPhone 프로그래밍 참고'/><author><name>URan</name><uri>http://www.blogger.com/profile/18252169921818710895</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://1.bp.blogspot.com/_Jp42cOu6868/S1PnNjw9hLI/AAAAAAAAABE/JwY8y2RsVBc/S220/test.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1830687063536409594.post-3942438997080688004</id><published>2010-03-31T02:03:00.000-07:00</published><updated>2010-03-31T03:25:33.100-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="custom template"/><category scheme="http://www.blogger.com/atom/ns#" term="Xcode"/><category scheme="http://www.blogger.com/atom/ns#" term="커스텀 템플릿"/><title type='text'>Xcode에서 커스텀 템플릿 만들기</title><content type='html'>&lt;object height=&quot;385&quot; width=&quot;480&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/kDSH7SVQsLs&amp;hl=ko_KR&amp;fs=1&amp;color1=0x2b405b&amp;color2=0x6b8ab6&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/kDSH7SVQsLs&amp;hl=ko_KR&amp;fs=1&amp;color1=0x2b405b&amp;color2=0x6b8ab6&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;480&quot; height=&quot;385&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;
&lt;br /&gt;
커스템 템플릿 만드는 방법.&lt;br /&gt;
&lt;br /&gt;
영어 몰라도 대충 이해되는 동영상 ㅋ&lt;br /&gt;
&lt;br /&gt;
직접 해본 결과..&lt;br /&gt;
&lt;br /&gt;
1. /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Project Templates/Application 에서 기본 템플릿 중 하나를 복사&lt;br /&gt;
&lt;br /&gt;
2. ~/Library/Application Support/Developer/Shared/Xcode 에 새폴더 생성&lt;br /&gt;
&amp;nbsp;폴더 이름은 Project Templates (이미 존재하면 새로 만들 필요 없음)&lt;br /&gt;
&lt;br /&gt;
3. Project Templates 폴더에 이 폴더 안에 아까 복사한 기본 템플릿을 붙여 넣고 원하는 이름으로 변경한다.&lt;br /&gt;
이때 지정하는 폴더 이름이 Xcode에서 템플릿 선택시에 나타날 이름이 된다.&lt;br /&gt;
&lt;br /&gt;
4. 템플릿 폴더 안에 projects 라는 폴더를 하나 생성하고.&lt;br /&gt;
&amp;nbsp;원래 템플릿 폴더 안에 있던 내용들을 projects 폴더 안에 끌어다 놓는다.&lt;br /&gt;
&lt;br /&gt;
5. 기본 템플릿 폴더 안에 보면 예를 들어 Window-based 템플릿이라면 Window-based Application 폴더가 있을 것이다.&lt;br /&gt;
그 안에 보면 __PROJECTNAME__.xcodeproj 파일이 있는데, 이것을 열어서 원하는 대로 수정한 후 저장하면 된다.&lt;br /&gt;
&lt;br /&gt;
6. Xcode를 열고 새 프로젝트를 만들어 보자.&lt;br /&gt;
방금만든 커스텀 템플릿이 보일 것이다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
내.. 이 쉬운것을.. 몰라가지고..헛지꺼리 했다 이거지..ㅡ_ㅡ;;;</content><link rel='replies' type='application/atom+xml' href='http://deveruran.blogspot.com/feeds/3942438997080688004/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://deveruran.blogspot.com/2010/03/xcode.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/3942438997080688004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/3942438997080688004'/><link rel='alternate' type='text/html' href='http://deveruran.blogspot.com/2010/03/xcode.html' title='Xcode에서 커스텀 템플릿 만들기'/><author><name>URan</name><uri>http://www.blogger.com/profile/18252169921818710895</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://1.bp.blogspot.com/_Jp42cOu6868/S1PnNjw9hLI/AAAAAAAAABE/JwY8y2RsVBc/S220/test.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1830687063536409594.post-3083616359671762035</id><published>2010-03-30T02:15:00.000-07:00</published><updated>2010-03-30T02:15:08.639-07:00</updated><title type='text'>Using 3D Models from Blender in OpenGL ES</title><content type='html'>&lt;a href=&quot;http://iphonedevelopment.blogspot.com/2009/06/using-3d-models-from-blender-in-opengl.html&quot;&gt;http://iphonedevelopment.blogspot.com/2009/06/using-3d-models-from-blender-in-opengl.html&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://deveruran.blogspot.com/feeds/3083616359671762035/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://deveruran.blogspot.com/2010/03/using-3d-models-from-blender-in-opengl.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/3083616359671762035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/3083616359671762035'/><link rel='alternate' type='text/html' href='http://deveruran.blogspot.com/2010/03/using-3d-models-from-blender-in-opengl.html' title='Using 3D Models from Blender in OpenGL ES'/><author><name>URan</name><uri>http://www.blogger.com/profile/18252169921818710895</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://1.bp.blogspot.com/_Jp42cOu6868/S1PnNjw9hLI/AAAAAAAAABE/JwY8y2RsVBc/S220/test.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1830687063536409594.post-9088451247739186810</id><published>2010-03-25T00:50:00.000-07:00</published><updated>2010-03-25T01:29:29.985-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="OpenGL"/><category scheme="http://www.blogger.com/atom/ns#" term="Xcode"/><title type='text'>Xcode 에서 OpenGL 시작하기</title><content type='html'>OpenGL SuperBible이라는 책을 보는데..&lt;br /&gt;
똑같은 코드가 Xcode에서 돌리면 제대로 안나오데요..&lt;br /&gt;
&lt;br /&gt;
다음은 Xcode에서 OpenGL코드를 작성할 수 있는 방법에 대한 순서 입니다.&lt;br /&gt;
물론 개발 플랫폼은 MacOS 겠죠.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #6aa84f;&quot;&gt;&lt;b&gt;[ 프로젝트 생성 ]&lt;/b&gt;&lt;/div&gt;1. Xcode에서 File/New Project... 를 선택&lt;br /&gt;
&lt;br /&gt;
2. Mac OS X에 있는 Other를 선택&lt;br /&gt;
3. Empty Project 선택&lt;br /&gt;
4.Choose 클릭&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://4.bp.blogspot.com/_Jp42cOu6868/S6sVvJqGn2I/AAAAAAAAAFo/RXvAFCVUHtg/s1600/newproject.png&quot; /&gt;&lt;/div&gt;&lt;br /&gt;
5. 프로젝트를 저장할 경로 지정&lt;br /&gt;
6.Save As :란에 프로젝트 명 지정하고 Save 선택&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://2.bp.blogspot.com/_Jp42cOu6868/S6sXt-otpYI/AAAAAAAAAFw/pX9wMLwfB5I/s1600/saveas.png&quot; /&gt;&lt;/div&gt;&lt;div style=&quot;color: #6aa84f;&quot;&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;color: #6aa84f;&quot;&gt;&lt;b&gt;[ 타겟 추가 ]&lt;/b&gt;&lt;/div&gt;1.Groups &amp;amp; Files의 Targets에서 마우스 오른쪽 버튼 클릭&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;
&lt;img src=&quot;http://2.bp.blogspot.com/_Jp42cOu6868/S6sZDkNCIPI/AAAAAAAAAF4/PE0tonBBBQA/s1600/groupsnfiles.png&quot; /&gt;&lt;/div&gt;2. Add / New Target... 선택&lt;br /&gt;
3. Mac OS X 에서 Cocoa 선택&lt;br /&gt;
4. Application 선택 하고 Next 클릭&lt;br /&gt;
5. Target Name에 적당한 이름을 주고 Finish 클릭&lt;br /&gt;
6. 추가한 타겟의 Info 창이 뜰 것임&lt;br /&gt;
7. 맨 아래로 스크롤 하여 GCC_PREFIX_HEADER를 더블 클릭&lt;br /&gt;
8. 내용을 삭제한 후 OK 클릭&lt;br /&gt;
9. Info 윈도우를 닫음&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #6aa84f;&quot;&gt;&lt;b&gt;[ Framework 추가 ]&lt;/b&gt;&lt;/div&gt;1. Groups &amp;amp; Files의 Products 폴더에서 마우스 오른쪽 버튼 클릭&lt;br /&gt;
2. Add / Existing Frameworks ... 선택&lt;br /&gt;
3. 프레임워크 목록에서 커맨드버튼을 누른채로 GLUT.framework 와 OpenGL.framework를 선택한 후 Add 클릭&lt;br /&gt;
4. 다이얼로그 박스가 보인다면 그냥 기본설정으로 놔둔채로 Add 클릭&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #6aa84f;&quot;&gt;&lt;b&gt;[ File 추가]&lt;/b&gt;&lt;/div&gt;1. Products 폴더에서 마우스 오른쪽 버튼 클릭&lt;br /&gt;
2. Add / New File ... 선택&lt;br /&gt;
3. Mac OS X 에서 C and C++ 선택&lt;br /&gt;
4. C File 선택 하고 Next클릭&lt;br /&gt;
5. 이름은 main.c 로 한다.&lt;br /&gt;
5. Finish 클릭&lt;br /&gt;
&lt;br /&gt;
근데 뭐.. 다 하고 보니깐 딴게 문제가 아니라 &lt;br /&gt;
아직 OpenGL에 대해서 잘 모르기 때문에 정확히는 모르겠지만..&lt;br /&gt;
&lt;b style=&quot;color: magenta;&quot;&gt;glutInit&lt;/b&gt; 함수를 안써줘서 안나오는 거던데..&lt;br /&gt;
&lt;br /&gt;
잘 돌아가는가 간단히 테스트해 보려면 아래의 코드를 활용하시기바랍니다.&lt;br /&gt;
결과는 600x480 사이즈의 그냥 꺼먼 화면만 뜹니다. &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&lt;table border=&quot;1&quot;&gt;&lt;tbody&gt;
&lt;tr&gt; &lt;td&gt;&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdlib.h&amp;gt;

#include &amp;lt;GLUT/glut.h&amp;gt;

void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    
    glutSwapBuffers();
}

void reshape(int width, int height)
{
    glViewport(0, 0, width, height);
}

void idle(void)
{
    glutPostRedisplay();
}

int main(int argc, char** argv)
{
    glutInit(&amp;amp;argc, argv);
    
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
    glutInitWindowSize(640, 480);
    
    glutCreateWindow(&quot;GLUT Program&quot;);
    
    glutDisplayFunc(display);
    glutReshapeFunc(reshape);
    glutIdleFunc(idle);
    
    glutMainLoop();
    return EXIT_SUCCESS;
}&lt;/glut&gt;&lt;/glut&gt;&lt;/stdlib.h&gt;&lt;/stdlib.h&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
참고 : &lt;a href=&quot;http://mitchallen.com/iphone/archives/50&quot;&gt;http://mitchallen.com/iphone/archives/50&lt;/a&gt;&lt;br /&gt;
main.c 코드 출처 : &lt;a href=&quot;http://blog.onesadcookie.com/2007/12/xcodeglut-tutorial.html&quot;&gt;http://blog.onesadcookie.com/2007/12/xcodeglut-tutorial.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
그럼 OpenGL 열공하시기 바랍니다.</content><link rel='replies' type='application/atom+xml' href='http://deveruran.blogspot.com/feeds/9088451247739186810/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://deveruran.blogspot.com/2010/03/xcode-opengl.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/9088451247739186810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/9088451247739186810'/><link rel='alternate' type='text/html' href='http://deveruran.blogspot.com/2010/03/xcode-opengl.html' title='Xcode 에서 OpenGL 시작하기'/><author><name>URan</name><uri>http://www.blogger.com/profile/18252169921818710895</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://1.bp.blogspot.com/_Jp42cOu6868/S1PnNjw9hLI/AAAAAAAAABE/JwY8y2RsVBc/S220/test.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_Jp42cOu6868/S6sVvJqGn2I/AAAAAAAAAFo/RXvAFCVUHtg/s72-c/newproject.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1830687063536409594.post-84474807808396869</id><published>2010-03-24T22:33:00.001-07:00</published><updated>2010-03-25T00:17:50.143-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="iPhone"/><category scheme="http://www.blogger.com/atom/ns#" term="OpenGL ES"/><title type='text'>iPhone UI using OpenGL ES</title><content type='html'>&lt;object height=&quot;385&quot; width=&quot;480&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/yntW9fCgL7o&amp;hl=ko_KR&amp;fs=1&amp;&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/yntW9fCgL7o&amp;hl=ko_KR&amp;fs=1&amp;&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;480&quot; height=&quot;385&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;
&lt;br /&gt;
게임인것 같네요.</content><link rel='replies' type='application/atom+xml' href='http://deveruran.blogspot.com/feeds/84474807808396869/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://deveruran.blogspot.com/2010/03/iphone-ui-using-opengl-es.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/84474807808396869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/84474807808396869'/><link rel='alternate' type='text/html' href='http://deveruran.blogspot.com/2010/03/iphone-ui-using-opengl-es.html' title='iPhone UI using OpenGL ES'/><author><name>URan</name><uri>http://www.blogger.com/profile/18252169921818710895</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://1.bp.blogspot.com/_Jp42cOu6868/S1PnNjw9hLI/AAAAAAAAABE/JwY8y2RsVBc/S220/test.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1830687063536409594.post-540538158798192906</id><published>2010-03-24T00:01:00.000-07:00</published><updated>2010-03-24T00:02:23.399-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="InterfaceBuilder"/><category scheme="http://www.blogger.com/atom/ns#" term="Xcode"/><category scheme="http://www.blogger.com/atom/ns#" term="탭바와피커"/><title type='text'>탭바와 피커 관련 에러 해결 방법 (NSUnknownKeyException)</title><content type='html'>시작하세요 아이폰 3 프로그래밍에서 7장 탭바와 피커 에러 관련 해결 방법입니다.&lt;br /&gt;
컴파일시 &quot;NSUnknownKeyException&quot; 이 발생하는 경우에 참고하세요.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.iphonedevbook.com/forum/viewtopic.php?f=25&amp;amp;t=1299&quot;&gt;http://www.iphonedevbook.com/forum/viewtopic.php?f=25&amp;amp;t=1299&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
결론부터 말하자면.. 인터페이스 빌더에서 연결을 잘못해서 나는거군요..&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
코드가 이상한가 싶어서 코드만 뚫어져라 보지 말고, 인터페이스 빌더에서 차근차근 해보세요.&lt;br /&gt;
&lt;br /&gt;
여기도 참고..:&lt;br /&gt;
&lt;a href=&quot;http://iphonedevbook.com/forum/viewtopic.php?f=13&amp;amp;t=572&quot;&gt;http://iphonedevbook.com/forum/viewtopic.php?f=13&amp;amp;t=572&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://deveruran.blogspot.com/feeds/540538158798192906/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://deveruran.blogspot.com/2010/03/nsunknownkeyexception.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/540538158798192906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/540538158798192906'/><link rel='alternate' type='text/html' href='http://deveruran.blogspot.com/2010/03/nsunknownkeyexception.html' title='탭바와 피커 관련 에러 해결 방법 (NSUnknownKeyException)'/><author><name>URan</name><uri>http://www.blogger.com/profile/18252169921818710895</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://1.bp.blogspot.com/_Jp42cOu6868/S1PnNjw9hLI/AAAAAAAAABE/JwY8y2RsVBc/S220/test.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1830687063536409594.post-8637297620863977607</id><published>2010-03-22T19:30:00.000-07:00</published><updated>2010-03-24T00:07:32.328-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="template"/><category scheme="http://www.blogger.com/atom/ns#" term="Xcode"/><title type='text'>Xcode Project Templates</title><content type='html'>&lt;h2 class=&quot;title&quot;&gt;&lt;span style=&quot;color: #6aa84f;&quot;&gt;Cocoa dev&lt;/span&gt;: Design your own Xcode project templates&lt;/h2&gt;&lt;h2 class=&quot;title&quot;&gt;&lt;a href=&quot;http://arstechnica.com/apple/guides/2009/04/cocoa-dev-design-your-own-xcode-project-templates.ars&quot;&gt;http://arstechnica.com/apple/guides/2009/04/cocoa-dev-design-your-own-xcode-project-templates.ars&lt;/a&gt;&lt;/h2&gt;&lt;h2 class=&quot;title&quot;&gt;&amp;nbsp;&lt;/h2&gt;&lt;h2 class=&quot;title&quot;&gt;&lt;span style=&quot;color: #6aa84f;&quot;&gt;&amp;nbsp;Carbon Five Community&lt;/span&gt; : Custom iPhone Template for iPhone Development&lt;/h2&gt;&lt;h2 class=&quot;title&quot;&gt;&lt;a href=&quot;http://blog.carbonfive.com/2009/05/testing/custom-xcode-template-for-iphone-development%20&quot;&gt;http://blog.carbonfive.com/2009/05/testing/custom-xcode-template-for-iphone-development &lt;/a&gt;&lt;/h2&gt;&lt;h2 class=&quot;title&quot;&gt;Read it! &lt;/h2&gt;&lt;h2 class=&quot;title&quot;&gt;&lt;/h2&gt;&lt;h2 class=&quot;title&quot;&gt;&lt;/h2&gt;&lt;h2 class=&quot;title&quot;&gt;&lt;/h2&gt;</content><link rel='replies' type='application/atom+xml' href='http://deveruran.blogspot.com/feeds/8637297620863977607/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://deveruran.blogspot.com/2010/03/design-your-own-xcode-project-templates.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/8637297620863977607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/8637297620863977607'/><link rel='alternate' type='text/html' href='http://deveruran.blogspot.com/2010/03/design-your-own-xcode-project-templates.html' title='Xcode Project Templates'/><author><name>URan</name><uri>http://www.blogger.com/profile/18252169921818710895</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://1.bp.blogspot.com/_Jp42cOu6868/S1PnNjw9hLI/AAAAAAAAABE/JwY8y2RsVBc/S220/test.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1830687063536409594.post-2247145528154255239</id><published>2010-03-11T00:15:00.000-08:00</published><updated>2010-03-11T00:26:38.160-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Framebuffers"/><category scheme="http://www.blogger.com/atom/ns#" term="OpenGL ES"/><title type='text'>Framebuffers</title><content type='html'>&lt;a href=&quot;http://developer.apple.com/iphone/library/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/OpenGLESontheiPhone/OpenGLESontheiPhone.html#//apple_ref/doc/uid/TP40008793-CH101-SW8&quot;&gt;원문참조&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Framebuffer 오브젝트들은 모든 명령들의 타겟이다.&lt;br /&gt;
원래 OpenGL ES 에서 framebuffer는 플렛폼에 한정된 인터페이스를 사용하도록 만들어졌다.&lt;br /&gt;
각 플렛폼은 그들 나름대로의 스크린에 그려질 수 있는 프레임 버퍼를 생성하는 함수를 제공한다.&lt;br /&gt;
OES_framebuffer_object는 오프스크린 렌더버퍼나 텍스쳐들로 렌더링되는 프레임버퍼들을 생성하고 구성하는 일반적인 메커니즘을 제공하도록 OpenGL ES 를 확장한다.&lt;br /&gt;
Apple은 프레임버퍼 오브젝트를 생성하기 위한 플렛폼 인터페이스를 제공하지 않는다.&lt;br /&gt;
OpenGL ES 2.0에서는 이 함수들이 코어 명세서의 일부이다.&lt;br /&gt;
&lt;br /&gt;
프레임버퍼 오브젝트는 그림 1-1과 같이 프레임 버퍼에 들어가는 이미지에 대한 color, depth, 또는/그리고 stencil 데이터를 위한 저장을 제공한다.&lt;br /&gt;
가장 일반적인 이미지 부가장치는 renderbuffer 이다.&lt;br /&gt;
texture 역시 프레임버퍼의 색상 부가장치로 부가될 수 있지만, 이미지를 그리고 나면, 텍스쳐는 다른 도형에 맵핑 된다.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;그림 1&lt;/b&gt;. 프레임 버퍼의 color, depth &amp;amp; stencil buffer들&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;http://developer.apple.com/iphone/library/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/Art/framebuffer_objects.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://developer.apple.com/iphone/library/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/Art/framebuffer_objects.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
프레임 버퍼를 생성하는 일반적인 절차 :&lt;br /&gt;
1. 프레임버퍼를 생성하고 연결(bind)&lt;br /&gt;
2. 이미지 생성, 연결, 구성&lt;br /&gt;
3. 프레임버퍼에 이미지 부착(Attach)&lt;br /&gt;
4. 다른 이미지들을 위해 2,3단계 반복&lt;br /&gt;
5.완전성을 위하여 프레임 버퍼 테스트. 완전성에 대한 규칙은 명세서에 나와 있음.&lt;br /&gt;
이 규칙들이 프레임 버퍼와attachment들이 제대로 정의되도록 보장한다.</content><link rel='replies' type='application/atom+xml' href='http://deveruran.blogspot.com/feeds/2247145528154255239/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://deveruran.blogspot.com/2010/03/framebuffers.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/2247145528154255239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/2247145528154255239'/><link rel='alternate' type='text/html' href='http://deveruran.blogspot.com/2010/03/framebuffers.html' title='Framebuffers'/><author><name>URan</name><uri>http://www.blogger.com/profile/18252169921818710895</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://1.bp.blogspot.com/_Jp42cOu6868/S1PnNjw9hLI/AAAAAAAAABE/JwY8y2RsVBc/S220/test.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1830687063536409594.post-1293656548427242430</id><published>2010-03-08T23:31:00.001-08:00</published><updated>2010-03-08T23:31:51.017-08:00</updated><title type='text'>Accessibility Programming Guide for iPhone OS</title><content type='html'>&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://developer.apple.com/iphone/library/documentation/UserExperience/Conceptual/iPhoneAccessibility/iPhoneAccessibility.pdf&quot;&gt;링크 참조&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://deveruran.blogspot.com/feeds/1293656548427242430/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://deveruran.blogspot.com/2010/03/accessibility-programming-guide-for.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/1293656548427242430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/1293656548427242430'/><link rel='alternate' type='text/html' href='http://deveruran.blogspot.com/2010/03/accessibility-programming-guide-for.html' title='Accessibility Programming Guide for iPhone OS'/><author><name>URan</name><uri>http://www.blogger.com/profile/18252169921818710895</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://1.bp.blogspot.com/_Jp42cOu6868/S1PnNjw9hLI/AAAAAAAAABE/JwY8y2RsVBc/S220/test.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1830687063536409594.post-7972280043786591238</id><published>2010-03-04T23:17:00.000-08:00</published><updated>2010-03-08T18:15:39.680-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="limit"/><category scheme="http://www.blogger.com/atom/ns#" term="Twitter"/><title type='text'>Twitter API Limit</title><content type='html'>하루 최대 Tweet 1000 개 , DM 250개 - 해제 불가&lt;br /&gt;
&lt;br /&gt;
트위터 REST API 는 시간당 150회 호출 제한&lt;br /&gt;
- IP 당 제한 및 접속 사용자별 제한으로 분류&lt;br /&gt;
- Whitelisting 신청으로 20000회로 상향 가능&lt;br /&gt;
&lt;br /&gt;
검색 API 는 IP당 시간별 제한 &amp;gt; 150&lt;br /&gt;
- Whitelisting 불가&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
아.. 이런..&lt;br /&gt;
&lt;br /&gt;
참고 : &lt;a href=&quot;http://www.slideshare.net/guruguru/twitter-api-mashup&quot;&gt;http://www.slideshare.net/guruguru/twitter-api-mashup&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://deveruran.blogspot.com/feeds/7972280043786591238/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://deveruran.blogspot.com/2010/03/twitter-api-limit.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/7972280043786591238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/7972280043786591238'/><link rel='alternate' type='text/html' href='http://deveruran.blogspot.com/2010/03/twitter-api-limit.html' title='Twitter API Limit'/><author><name>URan</name><uri>http://www.blogger.com/profile/18252169921818710895</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://1.bp.blogspot.com/_Jp42cOu6868/S1PnNjw9hLI/AAAAAAAAABE/JwY8y2RsVBc/S220/test.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1830687063536409594.post-5837497422523693633</id><published>2010-03-04T00:03:00.000-08:00</published><updated>2010-03-04T00:03:35.607-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="iPhone"/><category scheme="http://www.blogger.com/atom/ns#" term="JSON"/><title type='text'>iPhone JSON and Flicker Tutorials</title><content type='html'>JSON Framework for iPhone&lt;br /&gt;
(링크 참조)&lt;br /&gt;
&lt;a href=&quot;http://iphonedevelopertips.com/networking/uber-iphone-json-flickr-tutorial-part-1.html&quot;&gt;PART1&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://iphonedevelopertips.com/networking/iphone-json-flickr-tutorial-part-2.html&quot;&gt;PART2&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://iphonedevelopertips.com/networking/iphone-json-flickr-tutorial-part-3.html&quot;&gt;PART3&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://deveruran.blogspot.com/feeds/5837497422523693633/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://deveruran.blogspot.com/2010/03/iphone-json-and-flicker-tutorials.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/5837497422523693633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/5837497422523693633'/><link rel='alternate' type='text/html' href='http://deveruran.blogspot.com/2010/03/iphone-json-and-flicker-tutorials.html' title='iPhone JSON and Flicker Tutorials'/><author><name>URan</name><uri>http://www.blogger.com/profile/18252169921818710895</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://1.bp.blogspot.com/_Jp42cOu6868/S1PnNjw9hLI/AAAAAAAAABE/JwY8y2RsVBc/S220/test.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1830687063536409594.post-944205922569575101</id><published>2010-03-03T20:49:00.001-08:00</published><updated>2010-03-03T20:49:58.435-08:00</updated><title type='text'>Http Request 결과를 JSON 으로 쉽게 파싱해 보기</title><content type='html'>링크 참조 : &lt;a href=&quot;http://alones.kr/tag/json&quot;&gt;http://alones.kr/tag/json&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://deveruran.blogspot.com/feeds/944205922569575101/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://deveruran.blogspot.com/2010/03/http-request-json.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/944205922569575101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/944205922569575101'/><link rel='alternate' type='text/html' href='http://deveruran.blogspot.com/2010/03/http-request-json.html' title='Http Request 결과를 JSON 으로 쉽게 파싱해 보기'/><author><name>URan</name><uri>http://www.blogger.com/profile/18252169921818710895</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://1.bp.blogspot.com/_Jp42cOu6868/S1PnNjw9hLI/AAAAAAAAABE/JwY8y2RsVBc/S220/test.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1830687063536409594.post-7978856262073324997</id><published>2010-03-03T18:24:00.000-08:00</published><updated>2010-03-03T19:55:50.136-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="iPhone"/><category scheme="http://www.blogger.com/atom/ns#" term="PushNotification"/><title type='text'>Push Notification Service 서버 개발</title><content type='html'>&lt;strong&gt;내용출처 : Cocoa Touch for iPhone OS 3, WILEY&amp;nbsp; / &lt;/strong&gt;&lt;a href=&quot;http://www.wileydevreference.com/&quot;&gt;&lt;strong&gt;http://www.wileydevreference.com&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
SSL을 사용하는 푸시 노티피케이션을 위한 애플리케이션 서버를 만들 수 있는 기술은 상당히 다양하며, 지금 이것들을 구성하는 내용에 대해서 모두 설명하는 것은 불가능 하다.&lt;br /&gt;
지금은 사용할 특정 기술을 하나 선택할 것이다.&lt;br /&gt;
&lt;br /&gt;
이말인 즉슨, 이 예제에서는 Ruby를 사용한 푸시 노티피케이션 제공자의 구현방법을 보여주겠다는 것이다.&lt;br /&gt;
&lt;br /&gt;
어떻게 애플리케이션을 작성하는지 또는 Ruby 코드를 어떻게 읽어야 하는지에 대한 자세한 내용은 다루지 않을 것이다.&lt;br /&gt;
지금은 일단 따라해 보자.&lt;br /&gt;
이 예제의 소스는 책에 전체 코드가 나와 있으며, 책의 웹사이트에서도 얻을 수 있다.&lt;br /&gt;
&lt;br /&gt;
반드시 알아야 될 점은, 푸시노티피케이션 서비스는 전적으로 당신이 구성한 내용에 따라 실행이 달라진다는 것이다. 이 예제에서는 한가지 방법만을 알려줄 것이다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: #93c47d;&quot;&gt;Ruby 푸시 노티피케이션 공급자의 구현&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
Ruby로 푸시 노티피케이션 공급자를 구현하기 위해서는 OpenSSL,&amp;nbsp;연결 및 메시지 전송, 연결해제를 사용하기 위해 Ruby의 빌트인 서포트를 사용할 것이다.&lt;br /&gt;
당연히 다른 방법을 사용할 수도 있다.&lt;br /&gt;
특히, 모든 단일 메시지를 위해서 연결, 전송, 연결해제를 계속 하지는 말기 바란다.&lt;br /&gt;
솔직히,&amp;nbsp;이런 행동을 하면 애플은 &amp;nbsp;그들의 서버를 공격하는 것으로 알고, 당신의 인증을 폐지시킬 것이다.&lt;br /&gt;
APNS 모델은 연결하고, 연결을 유지하고, 필요할때 메시지를 흘려보내는 개념을 기반으로 한다.&amp;nbsp; 이런것은 또한 C, Python, Perl 등과 같은 다른 언어들로 수행할 수 있다.&lt;br /&gt;
&lt;br /&gt;
잡담은 이쯤해 두고, 다음의 코드를 보도록 하자.&lt;br /&gt;
다음의 코드는 Ruby로 작성한 푸시 노티피케이션 공급자를 보여준다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;table border=&quot;1&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;th&gt;A Push Notification Supplier Implemented in &lt;span style=&quot;color: magenta;&quot;&gt;Ruby&lt;/span&gt;&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;#!/usr/bin/ruby&lt;br /&gt;
# ./notify.rb &#39;&lt;device token=&quot;&quot;&gt;&#39; &#39;&lt;message text=&quot;&quot;&gt;&#39;&lt;br /&gt;
require &#39;socket&#39;&lt;br /&gt;
require &#39;openssl&#39;&lt;br /&gt;
# just checking our arguments...&lt;br /&gt;
if(ARGV.length &amp;lt; 2 or ARGV[0].length &amp;lt; 32)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; puts &quot;Usage: ./notify.rb &#39;&lt;device token=&quot;&quot;&gt;&#39; &#39;&lt;message&gt;&#39;&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; exit(-255)&lt;br /&gt;
end&lt;br /&gt;
# strip out the space in the token&lt;br /&gt;
# the token is copied from an NSLog in our client app&lt;br /&gt;
tokenText = ARGV[0].delete(&#39; &#39;)&lt;br /&gt;
messageText = ARGV[1]&lt;br /&gt;
# pack the token to convert the ascii representation&amp;nbsp; back to binary&lt;br /&gt;
tokenData = [tokenText].pack(&#39;H*&#39;)&lt;br /&gt;
#construct the payload&lt;br /&gt;
payload = &quot;{\&quot;aps\&quot;:{\&quot;alert\&quot;:\&quot;#{messageText}\&quot;, \&quot;badge\&quot;:1}}&quot;&lt;br /&gt;
#construct the packet&lt;br /&gt;
packet = [0, 0, 32, tokenData, 0, payload.length, payload].pack(&quot;ccca*cca*&quot;)&lt;br /&gt;
# read our certificate and set up our SSL context&lt;br /&gt;
cert = File.read(&quot;devcerts.pem&quot;)&lt;br /&gt;
openSSLContext = OpenSSL::SSL::SSLContext.new&lt;br /&gt;
openSSLContext.cert = OpenSSL::X509::Certificate.new(cert)&lt;br /&gt;
openSSLContext.key = OpenSSL::PKey::RSA.new(cert)&lt;br /&gt;
# Connect to port 2195 on the server.&lt;br /&gt;
sock = TCPSocket.new(&#39;gateway.sandbox.push.apple.com&#39;,2195)&lt;br /&gt;
#do our SSL handsaking&lt;br /&gt;
sslSocket = OpenSSL::SSL::SSLSocket.new(sock, openSSLContext)&lt;br /&gt;
sslSocket.connect&lt;br /&gt;
#write our packet to the stream&lt;br /&gt;
sslSocket.write(packet)&lt;br /&gt;
#cleanup&lt;br /&gt;
sslSocket.close&lt;br /&gt;
sock.close&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
이 코드에서 푸시 노티피케이션을 보내는 과정에 대해서 자세히 보도록 하자.&lt;br /&gt;
&lt;br /&gt;
첫째로, 당신은 메시지와 디바이스 ID를 커맨드라인 파라미터를 통해서 얻는다.&lt;br /&gt;
그리고 이것을 이용해 APNS 서버에 보낼 패킷을 구성한다.&lt;br /&gt;
&lt;br /&gt;
&lt;table border=&quot;1&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;th&gt;Constructing Your Packet&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;# strip out the spaces in the token&lt;br /&gt;
# the token is copied from an NSLog in our client app&lt;br /&gt;
tokenText = ARGV[0].delete(&#39; &#39;)&lt;br /&gt;
messageText = ARGV[1]&lt;br /&gt;
# pack the token to convert the ascii representation&amp;nbsp; back to binary&lt;br /&gt;
tokenData = [tokenText].pack(&#39;H*&#39;)&lt;br /&gt;
#construct the payload&lt;br /&gt;
payload = &quot;{\&quot;aps\&quot;:{\&quot;alert\&quot;:\&quot;#{messageText}\&quot;, \&quot;badge\&quot;:1}}&quot;&lt;br /&gt;
#construct the packet&lt;br /&gt;
packet = [0, 0, 32, tokenData, 0, payload.length, payload].pack(&quot;ccca*cca*&quot;)&lt;/td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
기본적으로, 당신은 커맨드라인 인자를 얻어서 메시지와 payload에 넘겨질 직렬화된 JSON 오브젝트를 구성한다.&amp;nbsp;메시지는 JSON 딕셔너리에 &quot;alert&quot; 이라는 키를 이용해 위치 시킨다.&lt;br /&gt;
또 다른 키인 &quot;bedge&quot; 에는 1을 설정했다.&lt;br /&gt;
마지막으로, 이 딕셔너리 오브젝트를 &amp;nbsp;&quot;apt&quot; 키와 연관된 곳에 넣는다.&lt;br /&gt;
&lt;br /&gt;
다음은, 디스크에서 당신의 인증서를 읽어오는 것과 관련된 코드 이다.&lt;br /&gt;
&lt;table border=&quot;1&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;th&gt;Reading the Certificates&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;# read our certificate and set up our SSL Context&lt;br /&gt;
cert = File.read(&quot;devcerts.pem&quot;)&lt;br /&gt;
openSSLContext = OpenSSL::SSL::SSLContext.new&lt;br /&gt;
openSSLContext.cert = OpenSSL::X509::Certificate.new(cert)&lt;br /&gt;
openSSLContext.key = OpenSSL::PKey::RSA.new(cert)&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
여기에서 중요한 부분은 iPhone Developer Portal 에서 언제 당신의 인증서를 받을 것인지에 대한 것이다. 이것은 .p12 포멧으로 되어 있다.&lt;br /&gt;
대부분의 OpenSSL 라이브러리들은 .pem 포멧의 인증서로 동작하는것을 선호한다.&lt;br /&gt;
그러므로, .p12 포멧에서 .pem 포멧으로 변경해 주어야 한다.&lt;br /&gt;
이렇게 하기 위해서 다음의 명령어를 실행시킨다.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;openssl pkcs12 -in Certificates.p12 -out devcerts.pem -nodes -clcerts&lt;/div&gt;&lt;br /&gt;
이 파일을 얻으면, 이것을 이용해서 OpenSSL 컨텍스트를 생성할 수 있다.&lt;br /&gt;
이 컨텍스트에서 당신의 인증서에서 얻은 정보로 cert와 key 속성을 설정한다.&lt;br /&gt;
&lt;br /&gt;
다음으로, APNS 서버로의 연결을 오픈한다.&lt;br /&gt;
한번 연결을 오픈하면, TCP 소켓을 이용하는 새로운 SSLSocket 을 초기화 한다.&lt;br /&gt;
SSL socket 에서 connect 를 호출하면 SSL 은 handshaking을 수행한다.&lt;br /&gt;
&lt;br /&gt;
&lt;table border=&quot;1&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;th&gt;Connecting to the Server and Sending Your Packet&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;# Connect to port 2195 on the server&lt;br /&gt;
sock = TCPSocket.new(&#39;gateway.sandbox.push.apple.com&#39;, 2195)&lt;br /&gt;
# do our SSL handshaking&lt;br /&gt;
sslSocket = OpenSSL::SSL::SSLSocket.new(sock, openSSLContext)&lt;br /&gt;
sslSocket.connect&lt;br /&gt;
#write our packet to the stream&lt;br /&gt;
sslSocket.write(packet)&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
마침내, 당신은 서버에 패킷을 보냈다.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: #93c47d;&quot;&gt;Pushing Notifications&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
이제 간단한 명령어를 실행함으로써 노티피케이션 제공자를 실행시킨다.&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;./notify.rb &#39;&lt;token&gt;&#39; &#39;&lt;message&gt;&#39;&lt;/div&gt;여기에서&amp;nbsp;토큰은 당신의 클라이언트 애플리케이션으로부터 받은 것이다.&lt;br /&gt;
테스트 목적이라면, 콘솔을 이용한 간단한 로그를 날리는 애플리케이션을 만들 수 있다.&lt;br /&gt;
그렇다면, 저 명령어를 커맨드 라인에 붙여 넣으면 된다.&lt;br /&gt;
실제 구현은 소켓을 사용하는 당신의 서버로 토큰을 날리는 메커니즘을 작성해야 하며 이런 절차는 자동화 시키도록 한다.&lt;br /&gt;
&lt;br /&gt;
디바이스에서 이 메시지를 받으면 스크린에 표시될 것이다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: #93c47d;&quot;&gt;Checking delivery using feedback&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
만약에 사용자가 iPhone에서 당신의 애플리케이션을 삭제하면, 노티피케이션을 계속 보내야 되는지 알수가 없다.&lt;br /&gt;
&lt;br /&gt;
받은 노티피케이션들은 더이상 표시해 줄 애플리케이션이 없다.&lt;br /&gt;
디바이스 또한 APNS 서버에 전송될 수 없다는 공지를 해준다.&lt;br /&gt;
APNS 서버는 그 다음으로 이 디바이스에 대한 리스트를 APNS 피드백 서버에 올린다.&lt;br /&gt;
당신은 가끔 피드백 서버에 연결하여 당신이 보낸 노티피케이션을 받지 않는 토큰들의 리스트를 다운로드 해야 한다.&lt;br /&gt;
그리고 그 토큰들에 대해서는 메시지 전송을 중단시켜야 한다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===================================&lt;br /&gt;
아오.. 루비는 모르는데 어쩔꺼임?</content><link rel='replies' type='application/atom+xml' href='http://deveruran.blogspot.com/feeds/7978856262073324997/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://deveruran.blogspot.com/2010/03/push-notification-service.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/7978856262073324997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/7978856262073324997'/><link rel='alternate' type='text/html' href='http://deveruran.blogspot.com/2010/03/push-notification-service.html' title='Push Notification Service 서버 개발'/><author><name>URan</name><uri>http://www.blogger.com/profile/18252169921818710895</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://1.bp.blogspot.com/_Jp42cOu6868/S1PnNjw9hLI/AAAAAAAAABE/JwY8y2RsVBc/S220/test.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1830687063536409594.post-3404138560769266439</id><published>2010-03-03T03:04:00.000-08:00</published><updated>2010-03-08T18:43:23.306-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="iPhone"/><category scheme="http://www.blogger.com/atom/ns#" term="PushNotification"/><title type='text'>Push Notification이란?</title><content type='html'>&lt;a href=&quot;http://developer.apple.com/iphone/library/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/WhatAreRemoteNotif/WhatAreRemoteNotif.html#//apple_ref/doc/uid/TP40008194-CH102-SW1&quot;&gt;원문참조&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
iPhone 이나 iPod 터치의 애플리케이션은 종종 클라이언트-서버 모델 기반에 중점을 두기도 한다.&lt;br /&gt;
애플리케이션의 클래이언트 부는 장치에 설치된다.; 애플리케이션의 서버 사이드는 다수의 클라이언트 애플리케이션들에 데이터를 제공하는 것을 주 기능으로 한다. (그래서 이걸 &quot;Provider(공급자)&quot; 라고 한다.)&lt;br /&gt;
하나의 클라이언트 애플리케이션은 때때로 그 애플리케이션의 프로바이더와 연결해서 원했던 데이터를 다운로드 한다. 이메일과 &amp;nbsp; SN 어플리케이션들은 이런 클라이언트 - 서버 모델의 예이다.&lt;br /&gt;
&lt;br /&gt;
하지만 프로바이더가 다운로드할 새로운 데이터를 가지고 있을 때 애플리케이션이 그의 프로바이더에 연결되지 않았거나 장치에서 실행조차 되지 않은 경우라면? &amp;nbsp;이 대기중인 데이터에 대해서 어떻게 알 수 있을까? 푸시 노티피케이션들은 이런 딜레마에 대한 해결책이 된다. &amp;nbsp;하나의 푸시 노티피케이션은 프로바이터가 디바이스에 넘겨주는 짧은 메시지이다.; 이 디바이스는, 변화에 대해,&amp;nbsp;다운로드 될 데이터가 있는 클라이언트 애플리케이션의 사용자를 알려준다. &amp;nbsp;만약 이 사용자가 이 기능을 사용할 수 있고 애플리케이션이 완전하게 등록되어 있으면, 노티피케이션은 디바이스와 애플리케이션에 전달된다.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://developer.apple.com/iphone/library/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/ApplePushService/ApplePushService.html#//apple_ref/doc/uid/TP40008194-CH100-SW9&quot;&gt;&quot;Apple Push Notification Service&quot;&lt;/a&gt; 에서 설명하는&amp;nbsp;APNS(Apple Push Notification Service) 는, 리모트-노티피케이션 기능을 위한 일차적인 기술이다.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;사용자 관점에서 본 푸시 노티피케이션 &lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
당신이 iPhone을 사용하고 있다고 가정해 보자: 전화를 하고, 웹서핑을 하고, 음악을 듣는다. 당신의 아이폰에는 &amp;nbsp;체스 애플리케이션이 설치되어 있다. &amp;nbsp;그리고 원격에서 플레이 하고 있는 친구와 함께 게임을 시작한다. 당신은 첫번째로 말을 움직였고(이것은 서버 애플리케이션에 기록되었다.), 이메일을 읽기 위해서 클라이언트 애플리케이션을 종료했다. 그 동안에, 당신의 친구는 당신의 움직임을 계산한다. 체스 애플리케이션의 서버는 이 움직임에 대해서 인지하고 당신의 디바이스가 더이상 연결되어 있지 않다는 것을 알고 APNS에 푸시 노티피케이션을 보낸다.&lt;br /&gt;
당신의 디바이스 - 엄밀히 말하자면 당신의 디바이스에서 돌아가고 있는 iPhone OS - 는 APNS 로 부터 노티피케이션을 받는다.&lt;br /&gt;
당신의 체스 어플리케이션이 지금 동작하고 있지 않기 때문에 iPhone OS 는 그림 1-1 과 같은 Alert 창을 보여주게 된다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;b&gt;그림 1-1&lt;/b&gt; Push Notification Alert&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;http://developer.apple.com/iphone/library/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Art/alert.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://developer.apple.com/iphone/library/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Art/alert.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;br /&gt;
여기에서 View 버튼을 누르면, 체스 애플리케이션이 실행되며, 프로바이더에 연결해서 새로운 데이터를 다운로드 받은 후 체스 판 UI를 친구의 움직임을 반영하여 조정하게 된다.(Close 버튼을 누르면 단순히 Alert 창을 닫는다.)&lt;br /&gt;
&lt;br /&gt;
Alert 메시지를 나타내는 대신에 - 또는 Alert 메시지와 함께 - iPhone OS 에서는 타겟 애플리케이션의 아이콘 우측 상단에 그림 1-2와 같이 배지(badge) 번호를 표시할 수 있다. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;그림 1-2&lt;/b&gt; 배지 넘버를 표시한 애플리케이션 아이콘&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;http://developer.apple.com/iphone/library/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Art/badged_app.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://developer.apple.com/iphone/library/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Art/badged_app.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;br /&gt;
배지 넘버는 종종 그 애플리케이션을 위해 서버에서 가지고 있는 대기중인 아이템의 수를 반영하지만, 다른 의미로도 쓰일 수 있습니다.&lt;br /&gt;
배지 넘버는 그 애플리케이션의 특정된 그 어떤 숫자라도 나타낼 수 있습니다.&lt;br /&gt;
예를 들자면, 다운로드할 데이터 아이템의 수라던지, 읽지 않은(하지만 다운로드는 된) 이메일의 갯수라던지 하는것입니다.&lt;br /&gt;
&lt;br /&gt;
Alert메시지나 배지 넘버와 함께 iPhone OS는 노티피케이션이 들어올때 특정 소리를 이용해서 사용자에게 알려줄수 있습니다.</content><link rel='replies' type='application/atom+xml' href='http://deveruran.blogspot.com/feeds/3404138560769266439/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://deveruran.blogspot.com/2010/03/push-notification.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/3404138560769266439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/3404138560769266439'/><link rel='alternate' type='text/html' href='http://deveruran.blogspot.com/2010/03/push-notification.html' title='Push Notification이란?'/><author><name>URan</name><uri>http://www.blogger.com/profile/18252169921818710895</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://1.bp.blogspot.com/_Jp42cOu6868/S1PnNjw9hLI/AAAAAAAAABE/JwY8y2RsVBc/S220/test.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1830687063536409594.post-2544225779064622371</id><published>2010-03-03T00:27:00.000-08:00</published><updated>2010-03-03T00:56:28.656-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="iPhone"/><category scheme="http://www.blogger.com/atom/ns#" term="PushNotification"/><title type='text'>Apple Push Notification Programming Guide</title><content type='html'>[링크 참조]&lt;br /&gt;
&lt;a href=&quot;http://developer.apple.com/iphone/library/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Introduction/Introduction.html&quot;&gt;http://developer.apple.com/iphone/library/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Introduction/Introduction.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[ 서론 ]&lt;br /&gt;
푸시 노티피케이션 (리모트 노티피케이션이라고도 함) 은 데이터를 가지고 있는 서버의 IP와 지속적으로 연결하고 있으면서, 애플리케이션이 실행중이지 않을 때 디바이스에서 데이터를 받아 경고창, 소리 또는 배지를 이용해서 사용자에게 알려준다.&lt;br /&gt;
푸시 노티피케이션은 데스크탑 컴퓨터의 백그라운드 애플리케이션과 같은 용도를 가진다.&lt;br /&gt;
(알다시피, 백그라운드 애플리케이션은 모바일 기기에서는 허용되지 않는다.)&lt;br /&gt;
&lt;br /&gt;
푸시 노티피케이션의 용법 가이드라인에 대해서는 iPhone Human Interface Guideline 에 있는 &amp;nbsp;&lt;a href=&quot;http://developer.apple.com/iphone/library/documentation/UserExperience/Conceptual/MobileHIG/HandleTasks/HandleTasks.html#//apple_ref/doc/uid/TP40006556-CH16-SW15&quot;&gt;Enabling Push Notifications&lt;/a&gt;&amp;nbsp;를 보길 바란다.&lt;br /&gt;
&lt;br /&gt;
이 문서에서는 푸시 노티피케이션이 무엇인가, 또 당신의 애플리케이션에서 푸시 노티피케이션의 기능을 어떻게 구현하는가에 대해서 논한다.&lt;br /&gt;
클라이언트 부의 구현은 Objective-C와 Cocoa Touch Framework으로 한다.&lt;br /&gt;
프로바이더 부의 구현은 &lt;strong&gt;&lt;span style=&quot;color: #6aa84f;&quot;&gt;TLS/SSL 기술과 스트리밍 소켓 기술&lt;/span&gt;&lt;/strong&gt;이 도움이 될 것이다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[이 문서의 구성]&lt;br /&gt;
이 문서는 다음과 같은 장으로 구성되어 있다.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://developer.apple.com/iphone/library/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/WhatAreRemoteNotif/WhatAreRemoteNotif.html#//apple_ref/doc/uid/TP40008194-CH102-SW1&quot;&gt;&quot;Push Notification 이란?&quot;&lt;/a&gt;&amp;nbsp;푸시 노티피케이션이 무엇인지 설명한다.&amp;nbsp; 어떻게 사용자에게 알려줄지, 그리고 개발자에게 어떤 이점들을 가져다 주며, 어떤 요구사항들이 있는지에 대해서 설명한다.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://developer.apple.com/iphone/library/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/ApplePushService/ApplePushService.html#//apple_ref/doc/uid/TP40008194-CH100-SW9&quot;&gt;&quot;Apple Push Notification Service&quot;&lt;/a&gt; 프로바이더에서 클라이언트 애플리케이션에게 노티피케이션의 전송 및 라우팅(경로설정)을 하기 위한 Central Push Service 에 대해 설명한다.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://developer.apple.com/iphone/library/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/ProvisioningDevelopment/ProvisioningDevelopment.html#//apple_ref/doc/uid/TP40008194-CH104-SW1&quot;&gt;&quot;Provisioning and Development&quot;&lt;/a&gt;&amp;nbsp;아이폰 개발자 프로그램 포탈로부터 권한을 얻는 과정과 개발환경 설정에 대해서 설명한다.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://developer.apple.com/iphone/library/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingWIthAPS/CommunicatingWIthAPS.html#//apple_ref/doc/uid/TP40008194-CH101-SW1&quot;&gt;&quot;Provicer Communication with Apple Push Notification Service&quot;&lt;/a&gt;&amp;nbsp;프로바이더가&amp;nbsp;APNS 와 소통하기 위한 인터페이스와 요구사항에 대해 설명한다.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://developer.apple.com/iphone/library/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/IPhoneOSClientImp/IPhoneOSClientImp.html#//apple_ref/doc/uid/TP40008194-CH103-SW1&quot;&gt;&quot;iPhone OS Client Implimentation&quot;&lt;/a&gt;&amp;nbsp;iPhone OS 시스템에서 푸시(리모트) 노티피케이션을 제어 및 등록 하기 위해서 클라이언트 애플리케이션이 반드시 해야하는 것이 무엇인지 설명한다.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
푸시 노티피케이션을 이해하는데 도움이 되는 유용한 정보에 대한 부가적인 소스는 다음을 보기 바란다.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://developer.apple.com/iphone/library/documentation/Security/Conceptual/Security_Overview/Introduction/Introduction.html&quot;&gt;Security Overview&lt;/a&gt;&amp;nbsp;iPhone OS 및 Mac OS X 플랫폼에서 사용되는 보안 기술에 대해 설명한다.&lt;/li&gt;
&lt;li&gt;UIApplication 과 UIApplicationDelegate&amp;nbsp;레퍼런스 문서는 클라이언트 애플리케이션을 위한 리모트 노티피케이션 API 를 설명한다.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://tools.ietf.org/html/rfc5246&quot;&gt;RFC 5246&lt;/a&gt; 는 TLS 프로토콜에 대한 표준이다.&lt;/li&gt;
&lt;/ul&gt;데이터 프로바이더와 APNS 사이의 안전한 커뮤니케이션을 위해서 Transport Layer Security(TLS) 이것의 이전 버전인 Secure Sockets Layer(SSL) 기술이 요구된다.&lt;br /&gt;
그 이상의 정보를 위해서는 암호화 관련 문서들을 참조하도록 하자.</content><link rel='replies' type='application/atom+xml' href='http://deveruran.blogspot.com/feeds/2544225779064622371/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://deveruran.blogspot.com/2010/03/apple-push-notification-programming.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/2544225779064622371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/2544225779064622371'/><link rel='alternate' type='text/html' href='http://deveruran.blogspot.com/2010/03/apple-push-notification-programming.html' title='Apple Push Notification Programming Guide'/><author><name>URan</name><uri>http://www.blogger.com/profile/18252169921818710895</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://1.bp.blogspot.com/_Jp42cOu6868/S1PnNjw9hLI/AAAAAAAAABE/JwY8y2RsVBc/S220/test.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1830687063536409594.post-7680303023733266410</id><published>2010-02-26T04:00:00.001-08:00</published><updated>2010-02-26T04:00:59.971-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Objective-C"/><category scheme="http://www.blogger.com/atom/ns#" term="용어"/><title type='text'>카테고리</title><content type='html'>&lt;a href=&quot;http://devdiary.files.wordpress.com/2008/01/objective-c_category.pdf&quot;&gt;http://devdiary.files.wordpress.com/2008/01/objective-c_category.pdf&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://deveruran.blogspot.com/feeds/7680303023733266410/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://deveruran.blogspot.com/2010/02/blog-post_2996.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/7680303023733266410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1830687063536409594/posts/default/7680303023733266410'/><link rel='alternate' type='text/html' href='http://deveruran.blogspot.com/2010/02/blog-post_2996.html' title='카테고리'/><author><name>URan</name><uri>http://www.blogger.com/profile/18252169921818710895</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://1.bp.blogspot.com/_Jp42cOu6868/S1PnNjw9hLI/AAAAAAAAABE/JwY8y2RsVBc/S220/test.jpg'/></author><thr:total>0</thr:total></entry></feed>