Adopting Universal Binaries on Mac OS X

OSXDEV

Jump to: navigation, 찾기

이러한 소식을 들은 적이 있으실 겁니다. "Mac OS X이 Intel 아키텍쳐에서 돌아가며 첫번째 Intel 기반 매킨토시들은 이미 판매되고 있습니다. " 그리고 개발자들에게는 기존 PowerPC 버전 어플리케이션을 계속해서 지원하며 또한 Intel 버전도 준비해야 함을 이미 알려드렸습니다.

놀라운 퍼포먼스의 Mac OS X에서 작동하도록 변환하는 작업은 매우 쉬우며, 애플은 하나의 패키지에서 양쪽의 아키텍쳐를 위한 네이티브 코드를 같이 포함할 수 있는 포맷인 universal binary라는 것을 발표했습니다. universal binary는 어플리케이션 PowerPC와 Intel 기반 매킨토시 모두 네이티브하게 작동될 수 있도록 합니다. 어플리케이션이 양쪽의 아키텍쳐를 지원할 수 있는 근본적인 이유는 Mac OS X 플랫폼이 앞으로도 양쪽 플랫폼을 모두 지원할 예정이기 때문입니다. 그리고 universal binary로 의 이주는 이미 시작되었습니다.

이러한 새로운 칩 아키텍쳐로 이동할 때 얻을 수 있는 잇점은 퍼포먼스 측면의 일부분에서는 매우 막강하기 때문에 Mac OS X 개발자들에게는 재미있는 일입니다.

만약 많은 부분에서 이미 완료가 되지 않았다면, 현재의 어플리케이션은 새로운 아키텍쳐의 장점을 갖기위해서 변화가 필요합니다. 어플리케이션 개발자는 universal binary를 생성하기 위한 과정이 손쉽고, 일부에서는 간단하다는 것을(몇가지 요소에 따라) 알 수 있을 것입니다. 일반적으로 표준 프로그래밍 가이드라인을 따라 작성된 어플리케이션은 간단하게 universal binary로 변환할 수 있습니다.

이 아티클은 Mac OS X의 universal binary에 대한 소개입니다. 또한 어플리케이션을 universal binary로 작성하기 시작할 때 과정이나 이슈 사항들 그리고 추가 사항이나 참고할 수 있는 링크를 담고 있습니다. 만약 Mac OS X에서 개발한다면, 또는 개발할 예정이라면, 이 아티클을 통해 Intel 기반 매킨토시로 이주하기위해 준비해야할 것들을 명확하게 파악하실 수 있습니다.


목차

[편집] Mac OS X과 매킨토시는 이미 준비되어 있습니다.

애플은 Mac OS X으로의 이주를 별 다른 충격없이 완료했으며 또한 진행중입니다. 지난 2001년부터 Mac OS X은 Intel 기반에서의 빌드되었으며, Mac OS X v10.0을 시작으로 현재 쉬핑 버전까지 진행되었으며, 현재는 Mac OS X v10.4 tiger입니다. Mac OS X은 cross-achitecture로 설계되었으며, 많은 부분에 대한 이주를 이미 마친 상태입니다. Worldwide Developers Conference 2005의 화두는 애플이 Mac OS X을 Intel에서 작동되도록 많은 노력을 기울였으며, PowerPC와 동등하게 가져갈 것이라는 내용이었습니다.

운영체이는 준비되어 있고, 애플은 이미 첫번째 인텔 기반 매킨토시 컴퓨터를 쉬핑했으며, 개발자들이 이주하는 것은 시간문제입니다. 이 문서를 통해 Xcode를 이용하는 명확한 방법과 어플리케이션을 universal binary로 빌드하기 위해 필요한 것을 얻기 바랍니다.


[편집] Tool

애플의 tool suite이며 integrated development environment (IDE)인 Xcode는 이미 universal binary를 지원하도록 업데이트되었습니다. Xcode 2.2 또는 그 이상의 버전은 어플리케이션의 Intel과 PowerPC버전을 간단하게 선택할 수 있는 "Architectures to build for:" 체크박스를 포함하고 있습니다. 양쪽 아키텍쳐를 위한 실행 코드는 하나의 어플리케이션 번들에서 포함되어 있습니다. 실행시에는 운영체제가 번들을 점검하고 하드웨어에 맞는 코드를 선택합니다. 이것은 빠르고 정확하게 완료되므로 사용자들은 혼란스럽지 않습니다.

Xcode는 Mac OS X tiger를 위한 어플리케이션을 만들 수 있는 빠르고 쉬운 방법이며, Mac OS X에 포함된 모든 멋진 기술들을 사용할 수 있도록 합니다. 또한 Xcode는 어플리케이션 개발에 대해 미래를 준비할 수 가장 최선의 방법입니다. Xcode는 UNIX의 강점과 높은 개발 퍼포먼스 기술을 동시에 가지고 있으므로, Mac OS X의 장점들을 조화롭게 융합시킬 수 있어 결과적으로 Mac OS X 어플리케이션을 제작하는 최선의 unparalleled tool suite입니다.

Xcode 2.2 또는 그 이상의 버전은 Fix, Continue, ZeroLink, predictive compilation, remote debugging, distributed build와 같은 기술들을 지원합니다. Xcode는 어플리케이션의 수행속도를 증가시키는 향상된 최적화 테크닉들을 포함하는 산업 표준 컴파일러인 GCC 4를 포함하고 있습니다. 이러한 대부분의 특징은 Tree SSA (Single Static Assignment)의 사용입니다. 이것은 이전 컴파일러 버전에서 할 수 없었던 두 가지 랭귀지 디자인과 target independent와 코드 수준의 분석과 최적화를 제공합니다.


[편집] 아키텍쳐 차이

PowerPC와 Inter 아키텍쳐 사이의 가장 큰 차이점은 멀티 바이트 데이터를 어떻게 저장할 것인가 입니다. PowerPC는 most significant byte를 첫번째부터 기록하지만 x86은 least significant byte를 먼저 기록합니다. 바이트 오더링 또한 엔디안 포맷으로 데이터를 가져옵니다. (PowerPC는 빅 엔디안을 사용하며, x86은 리틀 엔디안을 사용합니다.)

이러한 차이점에 대한 설명은 바이트 스왑을 하거나 데이터 핸들링이 엔디안에 의존하는 경우 필요합니다. 바이트 오더링의 대부분의 이슈는 코드를 컴파일하는 것과는 무관합니다만, 생성된 어플리케이션이 의도하지 않은 결과를 낳을 수도 있습니다. 예를 들어 유저 인터페이스 일부나 이미지의 색상이 정확하지 않다던지, 틀린 서체가 출력된다던지, 아니면 수치 계산 오류가 발생될 수도 있습니다.

이러한 이슈들은 모두 아키텍쳐의 차이점에서 기인하므로 Universal Binary Programming Guidelines, Second Edition을 통해 보다 더 세부적인 내용을 확인하시기 바랍니다. 이 문서의 위치는 ADC Home > Reference Library > Documentation > Mac OS X > Universal Binary Programming Guidelines, Second Edition 입니다. 또한 이 문서는 osxdev.org 위키에도 번역되어 있습니다.

[편집] 어플리케이션

universal version의 어플리케이션을 작성해야 합니까? 이것은 어플리케이션의 형태에 따라 다릅니다. 위젯, 스크립트와 자바 어플리케이션등이 다음과 같은 룰을 따른다면 재 컴파일하지 않고도 "작동될 수" 있습니다. 위젯이나 스크립트가 인터프리트(컴파일이 아닌)되거나, 자바 어플리케이션이 이미 플랫폼에 의존하지 않는 형태로 존재할 경우입니다. 자바에 대한 보다 자세한 사항은 Technical Q&A QA1295을 보시기 바랍니다. 이 문서의 위치는 ADC Home > Reference Library > Technical Q&As > Java > Porting 입니다.

Xcode를 이용하여 작성된 코코아 어플리케이션은 재 컴파일전 약간의 수정이 필요합니다만 이러한 수고는 작을겁니다. 반면에 코코아 프레임워크가 엔디안 이슈를 투명하게 다루고 있다면, 그래픽 API나 외부 C/C++ API를 주의하여 사용하시기 바랍니다.

Xcode로 개발한 카본 어플리케이션은 보다 더 많은 수정이 필요하며, 재 컴파일합니만, 역시 비교적 쉽습니다. 커스텀 리소스를 사용하는 카본 어플리케이션은 엔디안 관련을 핸들링하기 위해 수정이 필요합니다.

Metrowerks CodeWarrior를 이용하여 작성된 카본 어플리케이션이 먼저 해야할 일은 Xcode로 변경하는 것입니다. 그 다음 앞서 이야기한 수정과 재 컴파일을 할 수 있습니다. 어플리케이션을 CodeWarrior에서 Xcode로 변경하기 위한 가이드라인은 Porting CodeWarrior Projects to Xcode를 읽어 보시기 바랍니다. 이 문서의 위치는 ADC Home > Reference Library > Documentation > Tools > Xcode > Porting CodeWarrior Projects to Xcode 입니다. 포팅 가이드 라인은 pragma 문을 다루는 것과 같은 다수의 이슈를 다루고 있습니다.

바이트 오더외에 다른 다수의 다른 이슈를 우연히 마주칠 수 있습니다. 그러나 이러한 문제는 모든 사람이 겪는 것은 아닙니다. 보다 자세한 내용은 Universal Binary Programming Guidelines, Second Edition을 보시기 바랍니다.

만약 어플리케이션에서 plug-in API를 지원한다면, plug-in 개발자와 협의하여 어플리케이션이 양쪽 아키텍쳐를 지원할 수 있도록 해야합니다.

이러한 내용의 예는 Universal Binary Programming Guidelines, Second Edition을 참고하시기 바랍니다.

[편집] universal binary 생성하기

universal Binary를 생성하는 전체 과정은 대단히 수월합니다. 의존성을 확인한 후 어플리케이션을 빌드하고 실행합니다. 이후는 일반적이며 스텝이며 세부 설명은 아닙니다. 보다 자서한 사항은 "더 많은 정보"에 소개된 정보를 참고하시기 바랍니다.

첫번째, 어플리케이션이 포함하는 서드 파티 라이브러리, 플러그인, 커널 익스텐션등의 의존성을 확인합니다. 만약 의존성 부분을 제거해 내거나 변경하 수 있다면 보다 더 손쉽게 이주할 수 있습니다. 또한 이번 기회에 가능한한 하드웨어 의존 부분을 추상화 시킨다면 더더욱 좋을 것입니다. 낮은 수준의 하드웨어를 랩핑할 수 있는 고수준 API를 사용하는 것도 한가지 방법입니다.

다음으로, 빌드한 어플리케이션을 얻기위해 Xcode 2.2 또는 그 이상의 버전과 GCC 4를 사용해야 합니다. GCC는 오픈 소스 GNU 컴파일러 컬렉션이며 어플리케이션을 컴파일하거나 링크하기 위해 Xcode에서 사용되고 있습니다. 만약 코드가 이전 버전의 GCC 버전이나 CodeWorrior에 의존적이라면, 이러한 부분들 부터 개선해야 합니다. 일반적으로 CodeWorrior 이슈는 위의 "어플리케이션" 에서 언급되었습니다.

다음 스텝은 univesal binary를 빌드하기 위한 환경을 만드는 것입니다. 만약 이미 이전 버전의 Xcode를 사용하고 있다면, 손쉽게 Xcode 2.2 이상으로 업그레이드할 수 있습니다. 만약 프로젝트가 Xcode를 사용하지 않고 GCC만을 사용한다면 configure 스크립트와 Makefile, 또는 Intel 기반 빌드 환경을 위한 다른 커스텀 빌드 툴을 개선해야 합니다.

주의: 각각의 PowerPC와 Intel 기반 매킨토시에서 universal binary를 생성할 수 있습니다만, PowerPC와 Intel 기반 매킨토시 모두에서 꼭 테스트해야 합니다.


API의 일부가 변경된다면 어플리케이션도 수정이 필요합니다. 만약 애플에서 제공하는 억세서 함수를 이용하지 않고 스트럭쳐의 특정 필드를 직접 엑세스하고 있다면 이러한 부분을 개선해야합니다. 보다 자세한 내용은 Universal Binary Programming Guidelines, Second Edition를 참고하시기 바랍니다.

다음, 어플리케이션을 빌드하고, 실행하여 문제점을 해결하면 끝입니다.

[편집] 더 많은 정보

더 많은 정보를 알고 싶으십니까? 여기 시작을 도와드릴 수 있는 추가 리소스가 있습니다.

  • Tool
    • universal binary를 빌드할 수 있는 개발 환경인 Xcode 2.2 또는 그 이상을 다운로드하십시오. 개발자는 Xcode에 관한 의문 사항들을 Xcode-users 메일링 리스트 에 올릴 수 있습니다.
    • CodeWarrior 사용자는 Porting CodeWarrior Projects to Xcode를 통해 프로젝트 파일을 어떻게 Xcode로 임포트 하는 지등과 같은 Xcode와 CodeWarrior 간의 상세한 차이점을 알 수 있습니다.


이 문서의 원본은 ADC Home > Mac OS X > Adopting Universal Binaries on Mac OS X 입니다.