3

[AIP-Dev] 현재 네트워크상태 확인하기 (WIFI vs 3G)

어플을 만드는 중에, 현재 네트워크상태가 어떤지 혹은 3G에서 WiFi망으로 전환되었는지 여부를 확인해야할

경우가 있을것입니다. 특히 동영상같은 컨텐츠를 제공할 경우, WiFi망에서만 구동되도록 만들수 있을 것입니다.
이를 확인할때 필요한 함수들입니다. sockaddr_in이라는 빈 소켓구조체를 생성하여 확인하는 방법입니다.

필요할 때마다 [self isNetworkReachable] 의 결과값(YES/NO)을 가지고 현재 상태를 확인하면 되겠죠?

질문이 있으신 분들은 댓글을 달아주세요~ ^^

4

아이폰 개발시 Mac/PC의 색상과 iPhone의 색상차이의 이유와 해결방법

필자는 최근 아이폰 어플을 개발하면서, 모니터상의 색상과는 너무나 다른 iPhone액정화면에서의 색상에 경악을 금치못했습니다.
아이폰과 작업PC의 색상차가 생기는 이유와 그 해결책에 대해서 알아보도록 하겠습니다.

Color Management to Match Colors Across Multiple Devices

인쇄가 주를 이루던 시기에는 색상관리(Calibrating)은 스캐너 혹은 디지털카메라에서 컴퓨터의 디스플레이장치로의 변환과정에서 하드교정에 대한 키값을 포함했습니다. 이들중 가장 힘든 것은 RGB장치(광학디스플레이) CMYK장치(잉크등을 사용하는 출력물)의 서로 다른 색상계를 가지는 것을 맞추는 것일 것입니다.

TV매체를 위해 디자인을 하거나 편집을 할때는, 편집용 디스플레이과 송출용 디스플레이가 공용입니다. 이러한 경우에는 Real-time Proof로 시청자의 TV와 색상을 맞출수 있도록 제공합니다.

, 어플리케이션 인터페이스를 제작할때는 그러한 상황이 조금 다릅니다.

최종 결과물은 윈도우(MS Windows), Mac OSX (10.6+), iPhone…등의 Gamma값이 서로 다른 디스플레이에서 작업된 작업물입니다. 웹/어플리캐이션 인터페이스를 개발할 때, 정말 수많은 소스들을 사용하게 됩니다. 일반적으로 PNG, JPG, GIF 이미지들, CSS (Style Markup), 그리고 코드들(Javascript, HTML, Objective-C, ActionScript, etc) 등의 다양한 소스들을 사용하여 보여지게될 최종작업물을 같은 종류의 Device에서 보여지게 되는 것이죠.
이 과정에서 모든 일치하는 녀석들을 얻지 못할 확률이 높습니다.

우리는 웹사이트를 디자인 하거나 UI디자인을 할 때, 포토샵상에서 보이는 자신의 화면이 동일하게 모든 Device에서 재현되기를 바랍니다. 모든 Device라는 말은 동일 플랫폼 내의 다른 브라우저(IE, Safari, Firefox…)일 수도 있고, 전혀 다른 PC(IBM, MAC)와 모바일(iPhone, WM, Android) 기기간의 차이를 가질 수도 있습니다.

하지만 우리가 저장한 실제값들은 포토샵에서 정의한 색상과 정확히 일치하지 않습니다. 어떤 식으로든 색상은 변환되어 표현되거나, 이미 대체되어있거나 입니다.

사용자 삽입 이미지

뭐가 이렇게 어렵나요?

포토샵은 기본적으로 보여지고 있는 디스플레이
혹은 해당파일이 저장된작업환경에 대한 Color Management를 지원합니다.

이러한 기능은 웹 혹은 화면상에 보여질
유저인터페이스를 작업중이라면 정말 필요없는 기능입니다. 포토샵의 기본설정값으로는 #FF0000이 실제로 #FB0018로 보이도록, BB95FF #BA98FD로 보이도록 되어있습니다. 바로 이점에서 미묘하지만 확실한 차이가 발생합니다.


윈도우와 OSX의 포토샵이 어떻게 다른가요?

사용자 삽입 이미지

OSX의 색상관리는 비디오램의 메인버퍼후 프로세싱체인이 결과를 전체화면에 보이도록 지원합니다. 쉽게 말해서, 소프트웨어가 화면상의 색상을 측정하여 같은 값으로 저장하도록 하는 것이 가능합니다. 윈도우비스타나 윈도우7에 도입된 Windows Color System(색상관리시스템)도 이와 비슷할 것으로 추정됩니다

포토샵의 Color Management는 윈도우의 이미지 부분만을 저장하고 그것을 파일에 적용합니다. 포토샵으로 화면에 이미지를 그림으로써 색상보정이 생기는데, 소프트웨어 유틸리티가 측정한 화면의 색상이 때때로 다른 색상으로 인식될수 있습니다. 이는 OSX의 색상관리가 포토샵의Color Management를 지원하는 것이 아무런 가치가 없다는 뜻입니다.

제가 찾은 최선책은 포토샵의 Color Management (RGB Document와 관련된)을 최대한 Disable 시키는 것입니다. 이렇게 하면 화면에 있는 파일과 실제색상에 저장된 값과 일치하여 RGB색상으로 맞추려고 애씁니다. 혹시 디자인작업을 위해 모니터를 보정하려면 OS레벨에서의 Calibration을 선행해야 할 것입니다.

포토샵cs2이전 버전에서의 색상관리는 간단하였으나, 지금은 좀더 세부설정이 필요합니다.

Disabling Photoshop’s RGB Color Management

아래의 설명은 Photoshop CS4 on Mac and Windows입니다. CS3설정과 매우 비슷합니다.

1 단계 : 이동 편집색상 설정 RGB위한 작업 공간 설정 모니터 RGB.

사용자 삽입 이미지

2 단계 : Open a document > Edit
Assign Profile 그 다음에 Working RGB. 이렇게 하면 작업할 때 마다 이 과정을 거쳐야 합니다..

사용자 삽입 이미지

3 단계 : View 확인Proof Colors 해제됩니다.

4 단계 : Save for Web & Devices 으로 저장할 때, Convert to sRGB은 끄셔야합니다. JPEG파일을 저장하는 경우, Embed Color Profile을 끌수 있습니다.

Assign Profile Convert To Profile의 차이점은?

“Assign Profile”, “Convert to Profile” 이 두가지의 차이점에 대해서 조금 알아볼 필요가 있겠군요. 포토샵문서에는 각각의 픽셀의 실제색상 데이터를 저장한 별도의 Color Profile를 포함합니다. Assign Profile은 단순히 어떤 색상데이터에 영향을 주지 않고 작업파일의 프로필을 변경합니다. 이것은 문서에 영향을 주지 않고, 자주 새로운 Color Profile을 지정할 수 있습니다. 새로운 프로필을 할당하지만, 데이터를 변형하지 않고, 화면에 표시되는 방법을 변경할 수 있습니다.

Convert to Profile은 많이 다릅니다. Color Profile을 문서에 할당할 뿐만 아니라, 화면에서 항상 같아 보이게 하기 위해 계속 시도합니다. 이는 각각의 픽셀에 대한 파일에 포함된 색상데이터를 처리합니다. 새로운 profile을 변환하는 것은 화면상에 보존된 작업물의 색상을 영구적으로 변형함을 뜻합니다. 이는 매우 주의해서 사용해야 합니다.

만약에 포토샵에서 작업문서를 하나의 레이어로 카피해서, 그것이 동일한 Color Profile이 할당되었는지 반드시 확인해야합니다.


Gamma Differences

윈도우는 2.2 Gamma를 사용해왔습니다. OSX 1.8감마를 사용해왔습니다(Snow Leopard제외, 2.2감마). 이것은 무슨 뜻일까요? SnowLeopard이전에는 웹페이지를 윈도우보다 어둡게 보았습니다. 고맙게도 이제는 두 운영체제의 동기화로 인해, 같은 모니터에서 비슷하게 웹페이지를 볼수 있게 되었습니다.

아이폰의 감마에 대한 정보는 쉽게 접하기 힘듭니다. 아마도 1.8 아니면 2.2 일것입니다. 이것이 여러분의 작업물들을 아이폰상에서 테스트하는 이유일것입니다.

iPhone UI를 위한 마지막 확인

여러분의 iPhone 혹은 iPod의 화면과 색상은 Mac이나 PC에서와는 다를수도 있습니다. 저는 수시로 Mac이나 Window에서 만들어진 작업이미지들을 아이폰과 동기화 시켜서 확인하곤 합니다.

사용자 삽입 이미지
는 아이폰App의 인터페이스를 테스트하는 중 생기는 문제해결점에 대해 다루고 있습니다. 아이폰 상에서는 포토샵에서보다 더욱 Blur가 많이 먹어 보입니다.

참고사항 : 어떤 이상한 이유로 인해, 아이폰 내의 사진프로그램에서 1:1비율의 가로이미지가 보이지 않는 문제가 있습니다. 대신 약간 하위픽셀로 이동하거나 약간의 sub-pixel을 잘라내면 괜찮습니다. 이러한 문제를 피하기 위해서는 항상 portrait(세로형)으로 저장해서 테스트하시길 바랍니다. ( 세히보기)

Mac에서는 포토샵과 Code사이에 색상을 이동하는 것이 보다 쉽습니다. Developer Picker, Hex Color Picker, Colors (무료프로그램들)

결론

포토샵에서 어떠한 색상의 비트맵,벡터이미지들이던 자유롭게 변경가능하며, 포토샵에서의 Color Picker로 색상값을 찾거나, CSS,HTML,Flash, Objective-C에서의 HEX 색상값을 찾을수 있을 것입니다. 저의 포스팅이 도움이 되었기를 바랍니다~ ^^

질문이 있으시다면 아래의 댓글에 올려주시길 바랍니다.

참고사이트 :

1. http://www.smashingmagazine.com/2009/10/12/setting-up-photoshop-for-web-app-and-iphone-development/
2. http://bjango.com/articles/photoappscaling/

iPhone SDK Network기능


아이폰이 가지는 여러가지 하드웨어 기능가운데에 네트워크 기능은 고급 어플리케이션을 개발하고자 하는 개발자라면 반드시 주목해야할 부분입니다. 특히 아이폰에서는 이통사와 연결되는 3G망 외에 WiFi망에 자유롭게 접근할수 있는 무선랜 기능을 제공하기 때문에 어플제작의 범위가 상당히 넓다.

일단 iPhone OS에서 제공하는 네트워크 기능에 대해 알아봅시다.
일반적으로 네트워크 기능이라 하면, 한 시스템이 다른 시스템과 통신할수 있는 모든 수단을 뜻하지만, App레벨에서는 IP수준에서의 통신(TCP통신을 의미)을 칭합니다.

TCP를 이용하는 방법은 다음과 같습니다.
1. BSD socket API를 이용하는 방법
2. CF Networking 관련 라이브러리를 이용하는 방법
3. NSStream클래스를 이용하는 방법

BSD socket API는 일반적으로 GCC환경에서 사용하는 소켓과 관련된 API입니다. 기존의 TCP소켓 프로그래밍 방법을 그대로 사용할수 있다는 말이죠.

CF Networking관련 라이브러리는 Cocoa에서 제공하는 네트워킹 관련 API들입니다. BSD socket API를 좀더 쓰기 쉽게 Wrapping해둔 형태라고 보면 됩니다.
RunLoop에 대한 동작을 포함해서, 별개의 Thread를 생성하지 않고 쉽게 소켓프로그래밍을 할수있습니다.

NSStream관련클래스는 Cocoa에서 제공하는 상위레벨의 API로 CFNetworking라이브러리에서 제공하는 CFSocket을 이용하여 비동기화 형태로 네트워킹을 상당히 이용하기 쉽게 구현하고 있습니다.

Thread와 RunLoop에 대한 문서
http://developer.apple.com/documentation/Cocoa/Conceptual/Multithreading/Multithreading.pdf

Check out TBXML V1.2 for a super-fast, lightweight, easy to use XML parser!

TBXML is a light-weight XML document parser written in Objective-C designed for use on Apple iPhone / iPod Touch devices. TBXML aims to provide the fastest possible XML parsing whilst utilising the fewest resources. This requirement for absolute efficiency is achieved at the expence of XML validation and modification. It is NOT possible to modify and generate valid XML from a TBXML object and NO validation is performed whatsoever whilst importing and parsing an XML document.

[TBXML 원문]
http://www.tbxml.co.uk/

과연 device에서 사용가능한 Parser인지는 테스트가 필요합니다. (다해놓고 reject당하면 어떡해;)
테스트후 다시 포스팅하겠습니다.

Parsing XML Files

이 글의 요지는 아이폰에서는 NSXMLParser는 지원되고, NSXMLDocument는 안된다는 것.
그래서 이런저런 Parser들이 존재하지만, 이들은 AppStore에 승인과정에서 Reject를 당할수 있습니다.

플래시쪽에서 쓰는 DOM방식이나 E4X방식에 너무 익숙해져서인지, 이런 방식으로 연동하는 것에 대해 많은 의문점이 있습니다.
과연 Event파서가 Tree파서에 비해 퍼포먼스적으로 우월한가.. 리소스관리에 우월한가..
plist를 사용하는 방식이나, json을 사용하는 것이 효율면에서는 좋아보이지만, XML을 아예 안쓸수는 없으니 말입니다.

조금더 살펴봐야겠습니다.

[iphonesdkarticles 원문]
http://www.iphonesdkarticles.com/2008/11/parsing-xml-files.html

1

XML을 트리 데이터 구조로 변환 (XMLTreeParser)


XML Parsing에 대한 설명이 잘되어있는 블로그 : http://kylog.tistory.com/43

XML파싱을 위한 간단한 트리노드 정의 – XMLTreeNode.h

3

Tree XML Parser for iPhone

XML파일을 파싱(Parsing)할때, 2가지 방법이 있습니다.
하나는, Event Parser를 사용하는 것, 다른 방법은 Tree Parser를 사용하는 것입니다.
Cocoa에서 이런 2가지 다른 파싱방법을 제공하지만, NSXMLDocument가 제공하는 방식은
iPhone에서 메모리사용에 있어서 크리티컬해서 TreeParser를 추천하지않습니다.
실제로 Apple社는 iPhone/iPod터치 에서는 NSXMLDocument를 제공하지않습니다.

이와 관련된 좋은 예제와 설명이 있는 포스팅이 있어 링크를 겁니다.
“wrapper for the libxml2”
“Using libxml2 for XML parsing and XPath queries in Cocoa”

또한, iPhone을 위한 XMLParser 2개를 더 소개합니다.

  • KissXML
  • TouchXML
    StackOverFlow (Dev커뮤니티)에서는 모바일기기에서 TreeParser를 사용하는 것이 왜 안좋은지,
    잘 설명해놨습니다.
    링크

    다음은 별도의 Tree 인터페이스를 적용하여 NSXMLParser를 개선한 방식입니다
    Enhancing the standard NSXMLParser class

    성능비교는 추후 다시 포스팅하도록 하겠습니다.