[연구 문서] IPhone (iOS) 이해

스마트폰 2011. 4. 11. 11:30 Posted by TEAMCR@K
본 문서는 iPhone iOS 의 기본 구조를 이해하고, 프로세스 및 Debug 등에 활용될 수 있는 도구를 소개하는데 목적이 있습니다. 다.  해당 내용은 아래와 같이 4개의 주제로 나눠 연재하겠습니다.
 

1. iOS Framework 이해
2. iOS App 분석 및 프로세스/툴 도구 소개
3. Static, Dynamic Code Analyzer 소개
4. Forensic Tools 소개



iOS Framework 이해

1. iOS Architecture
iOS architecture 는 기본적인 Mac OS X의 architecture 와 유사합니다. iOS는 underlying hardware 와 스크린 에 나타나는 application 사이에 중재자 역할을  합니다. 아래 그림에서 보듯이 만들어진 application은 기본이 되는 hardware 와 직접적인 통신은 하지 않습니다. 대신 application들은 하드웨어 변화로부터 application을 보호해줄 well-defined system interface 를 통하여, hardware 와 통신을 합니다. 이러한 추상화(abstraction)는 다른 하드웨어에서도 일관성 있게 작동하는 application을 쉽게 작성할 수 있게 만들어줍니다.

                                      [그림 01] Application layered in top of iOS


2. Layers of iOS
아래 그림에서 볼 수 있듯이, iOS기술의 구현은 계층들의 하나의 집합으로 보여질 수 있습니다. 모든 application들이 의존하는, 시스템의 하위 계층들은 기반이 되는 서비스 와 기술입니다. 상위 계층들은 더욱 정교한 서비스와 기술을 포함하고 있습니다.

                                                  [그림 18] Layers of iOS

application 코드를 작성시, 가능하다면 하위 계층 framework 기반의 상위 계층 framework들의 사용을 선호해야 합니다. 상위 계층의 framework들은 하위 계층 구조에서의 객체 지향 추상화(object-oriented abstraction)를 제공합니다. 이러한 추상화는 잠재적으로 복잡한 특징이 존재하는 socket 과 thread 를 작성 및 캡슐화 시, 상당한 양의 코드를 줄여 줌으로써, 일반적인 코드작성을 더욱 쉽게 만들어 줍니다. 비록 하위 계층의 기술들을 추출 하였지만, 상위 계층은 작성자로부터 사용된 그들의(상위계층) 기술을 숨기지 않습니다. 상위 계층에서 사용될 수 없는 하위 계층 framework의 특징을 사용하기 원하는 개발자를 위해 하위 계층 framework들 또한 사용가능 합니다. 이것을 통하여 각 계층의 기능을 사용하기 위해 전반적인 계층들의 framework들과 framework의 class 정보를 인지하여, iOS의 기능들을 활용 할 수 있습니다.


3. Frameworks of each layer
가. Cocoa Touch Layer
(1) CoreLocation.framework
Core Location framework는  현재 위치 또는 device 관련된 방향을 결정합니다. Core Location framework는 사용자의 위치와 방향을 을 결정하기 위해 가용한 hardware를 사용합니다. 이동 위치와 방향 event 를 관리하기 위하여 Core Location framework 의 class 와 protocol들을 사용할 수 있습니다. 사용자가 해당지역의 경계를 지날 경우를 해당 framework 를 이용하여 지리학적 지역을 확인 할 수 있습니다.

Framework

/System/Library/Frameworks/CoreLocation.framework

Header file directories

/System/Library/Frameworks/CoreLocation.framework/Headers

참고문서)
http://developer.apple.com/library/ios/#documentation/CoreLocation/Reference/CoreLocation_Framework/_index.html#//apple_ref/doc/uid/TP40007123


나. Core Service Layer
(1) CoreTelephony.framework
사용자의 cellular service provider(통신 사업자)에 대한 정보를 얻기 위해선 Core Telephony framework를 사용하시길 바랍니다. Carriers 는 그들의 가입자를 위한 service를 제공하는 application을 작성하기 위해 이러한 정보를 사용할 수 있습니다. 또한 current cellular calls(통화) 정보를 획득하기 위해서 Core Telephony framework를 사용가능 합니다. CTCarrier object는, 해당 네트워크에서 VoIP 의 사용을 허가 여부와 같은 사용자의 cellular service provider에 관한 정보를 제공합니다. CTCall object는 고유 식별자(unique identifier)와 상태정보(dialing, incoming, connected, or disconnected)를 포함하는 current call에 관한 정보를 제공합니다

Framework

/System/Library/Frameworks/CoreTelephony.framework

Header file directories

/System/Library/Frameworks/CoreTelephony.framework

/Headers


참고문서)
http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Reference/CoreTelephonyFrameworkReference/_index.html#//apple_ref/doc/uid/TP40009603


다. ExternalAccessory.framework
External Accessory framework는 30-pin dock connector 또는 buletooth를 이용한 무선을 통한 iOS-based device와 연결된 외부 기기와의 통신지원을 제공합니다. external accessories를 지원하는 Application들은 그들의 Info.plist 파일이 올바르게 설정되어있는지 반드시 확인하여야 합니다. 특별히application이 지원하는 특별한 hardware protocol을 선언하기 위해서 반드시 UISupportedExternalAccessoryProtocols key 를 포함해야 합니다. 더 많은 정보를 확인하기 위해서는 External Accessory Programming Topic을 확인 하시길 바랍니다.

Framework

/System/Library/Frameworks/ExternalAccessory.framework

Header file directories

/System/Library/Frameworks/ExternalAccessory.framework

/Headers


참고문서)
http://developer.apple.com/library/ios/#documentation/ExternalAccessory/Reference/ExternalAccessoryFrameworkReference/_index.html#//apple_ref/doc/uid/TP40008235

(1) Foundation.framework
Foundation framework 는 Objective-C class들의 기반이 되는 계층입니다. 추가적으로 유용한 원시적인(primitive) 객체 클래스들을 제공합니다.
 

  • 기본적인 uitiliy class들을 제공합니다.
  • Deallocation과 같은 일관적인 규약을 소개함으로써 software 개발을 쉽게 만듭니다.
  • Unicode string , object persistence(객체 저장) 와 object distribution(객체 분산) 을 지원합니다.
  • 이식성을 강화하기 위하여, OS 독립 수준(level)을 제공합니다.

foundation framework는 string, byte array와 같은 root object class, 날짜와 같은 시스템 정보와 통신 ports 등을 나타내는 다른 객체를 저장할 수 있는 collection class 를 포함 합니다. foundation framework 에 대한 자세한 정보는 Reference url을 참고하시길 바랍니다.

Framework

/System/Library/Frameworks/Foundation.framework

Header file directories

/System/Library/Frameworks/Foundation.framework

/Headers



참고문서)
http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/ObjC_classic/_index.html#//apple_ref/doc/uid/20001091

(2) ImageIO.framework
Image I/O programming interface는 대부분의 image file format 을 읽고 쓰는 것을 할 수 있게 합니다. Image I/O 쉽게 image 의 metadata 접근과 색 관리를 쉽게 할 수 있게 합니다.

Framework

/System/Library/Frameworks/ApplicationServices

/ImageIO

Header file directories

/System/Library/Frameworks/ApplicationServices.framework
/ImageIO.framework/Headers

참고문서)
http://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/ImageIORefCollection/_index.html#//apple_ref/doc/uid/TP40005102

(3) MapKit.framework
MapKit framework는 view 와 windows에 직접적으로 내장되어있는 map interface를 제공합니다. 해당 framework는 지도를 나타내는 것, overlay들의 추가, 주어진 좌표로 장소정보를 결정하기 위한 reversing-geocoding nslookup(좌표로부터 주소를 구함)수행 등에 대한 지원을 제공합니다. MapKit framework 는 map data를 제공하는 google 서비스를 이용합니다. MapKit framwork 의 class를 사용할 경우 자동적으로 Google Map/Google Earth API를 이용하게 됩니다.

Framework

/System/Library/Frameworks/MapKit.framework

Header file directories

/System/Library/Frameworks/MapKit.framework/Headers



참고문서)
http://developer.apple.com/library/ios/#documentation/MapKit/Reference/MapKit_Framework_Reference/_index.html#//apple_ref/doc/uid/TP40008210


라. Core OS Layer

(1) CFNetwork.framework
CFNetwork framework 는 network protocol에 맞추어진 object-oriented abstraction(객체지향 추상화)을 사용하는 높은 수준의 성능을 지니고 있는 C-기반의 interface 집합입니다. 추상화는 protocol stack 에 대해 자세한 제어를 제공하며 BSD socket과 같은 lower-level contstructs(구조)를 쉽게 작성할 수 있게 해줍니다. CFNetwork Framework를 이용하여 FTP 와 HTTP 통신과 resolving DNS host를 결정하는 작업을 간단하게 할 수 있습니다. 다음은 CFNetwork Framework 가 지원하는 작업의 목록입니다.

  • BSD socket 의 사용
  • SSL, TLS 를 이용하는 암호화 연결(encrypted connection)
  • DNS hosts 결정(resolve DNS hosts)
  • HTTP server, 인증을 요구하는 HTTP server(authenticating HTTP server), HTTPS server 와의 연결
  • FTP server 연결
  • Publish, resolve, and browse Bonjour services

CFNetwork 는 이론이나 실제적으로 BSD sockets을 기반으로 되어있습니다. CFNetwork 사용을 위해서는 CFNetwork Programming Guide and CFNetwork Framework Reference 를 참조하시길 바랍니다.

참고문서
http://developer.apple.com/library/ios/#documentation/CFNetwork/Reference/CFNetwork_Framework/_index.html#//apple_ref/doc/uid/TP40007128

※ 현재 버전의 문서에서의 framework 및 class정보는 2011년 3월 25일의 http://developer.apple.com/library/ios/ 기반으로 작성되어 있음을 알려 드립니다.

※ 각 계층의 framework 정보는 일부만을 기재하였음을 알려드립니다.