iPhone Development 2011/03/09 00:10

자주가는 맥부기까페에 어느 회원분이 iRdesktop을 빌드하려는데 잘 되지 않는 다는 글을 보고 한번 해보았습니다.


도움이 되길 바랍니다.


iRdesktop은 iPhone/iPad용 오픈소스 RDP입니다. XCode(iOS SDK 4.2)에서 한번 빌드해 보겠습니다.


Step 1: iRdesktop소스코드를 다운로드 합니다.

http://www.irdesktop.com/gpl/iRdesktop-src-1.0.5.zip

사파리에서 받으면 일반적으로 /Users/사용자이름/Downloads/iRdesktop-src-1.0.5 에 다운로드됩니다. 압축도 풀어지구요.


Step 2: OpenSSL 다운로드 및 빌드

성격 급하신 분들은 다운 받자마자 XCode를 열어 빌드부터 하시죠?;; 

그리고는 엄청난 빌드에러에 좌절을...(네.. 제가 그랬습니다.)


이 빌드 오류는 OpenSSL라이브러리를 찾지 못해서 발생하는 에러입니다.


그래서 iRdesktop소스에 어떤 파일이 있나 찾아보니 

OpenSSL-DownloadAndBuild.command 와 OpenSSL-Thinstuff.diff 라는 파일이 있습니다. 

OpenSSL을 다운로드하고 빌드하는 실행 파일과 OpenSSL소스 패치 파일이네요. 

(또 성격 급하신 분들은 더블클릭으로 실행합니다. 그렇게 하면 /Users/사용자이름/에 파일이 받아지고 빌드가 되어 빌드오류가 납니다. 네..또 접니다;;)


터미널을 열어 OpenSSL-DownloadAndBuild.command파일이 있는 곳으로 이동합니다.

------------------------------------------------------------------------------------------------------------------

$ pwd

/Users/juncon

$ cd Downloads/iRdesktop-src-1.0.5/

------------------------------------------------------------------------------------------------------------------




이제 OpenSSL-DownloadAndBuild.command 파일을 실행합니다.

------------------------------------------------------------------------------------------------------------------

$ ./OpenSSL-DownloadAndBuild.command 

Downloading OpenSSL Version 0.9.8j ...

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

                                 Dload  Upload   Total   Spent    Left  Speed

100 3650k  100 3650k    0     0  49823      0  0:01:15  0:01:15 --:--:--  108k

Unpacking OpenSSL ...


Applying Thinstuff patch ...

patching file Configure

patching file crypto/ui/ui_openssl.c


Copying header hiles ...


Building i386 version (for simulator). Please wait ...

Done. Build log saved in BuildLog.darwin-i386.txt


Building armv6 version (for iPhone). Please wait ...

Done. Build log saved in BuildLog.darwin-armv6.txt

cp: libcrypto.a: No such file or directory

cp: libssl.a: No such file or directory


Finished. Please verify the contens of the openssl folder in your main project folder

------------------------------------------------------------------------------------------------------------------


어랏..끝난 것 같긴 한데... 아래 문구가 눈에 거슬리네요.

cp: libcrypto.a: No such file or directory

cp: libssl.a: No such file or directory


결국 시뮬레이터용은 빌드가 성공적으로 되었는데 arm6용(디바이스)은 실패한 것 같습니다.ㅠㅠ 


음.. 빌드로그를 보니 iOS SDK가 4.1기준으로 되어 있네요. 저는 참고로 SDK 4.2가 설치되어 있습니다.

그래서 어딘가에 iOS SDK 4.1을 설정해주는 부분이 있을 것 같아 여기저기 뒤져보니

OpenSSL-Thinstuff.diff 파일에 /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.1.sdk 라는 문구가 있네요. 

그냥 맨 마지막 iPhoneOS4.1.sdk를 iPhoneOS4.2.sdk로 수정하고 다시 빌드해보겠습니다.


------------------------------------------------------------------------------------------------------------------

$ ./OpenSSL-DownloadAndBuild.command 

Unpacking OpenSSL ...


Applying Thinstuff patch ...

patching file Configure

patching file crypto/ui/ui_openssl.c


Copying header hiles ...


Building i386 version (for simulator). Please wait ...

Done. Build log saved in BuildLog.darwin-i386.txt


Building armv6 version (for iPhone). Please wait ...

Done. Build log saved in BuildLog.darwin-armv6.txt


Finished. Please verify the contens of the openssl folder in your main project folder

------------------------------------------------------------------------------------------------------------------


음...이번엔 뭔가 깔끔하게 끝난 것 같군요. XCode로 프로젝트를 빌드해 봐야겠습니다.


Step 3: 프로젝트 빌드

파인더에서 iRdesktop.xcodeproj를 열어 Base SDK를 iOS 4.2로 수정하고 빌드를 합니다.


음..다음과 같은 오류가 1개 있네요;;




앗.. 처음보는 에러메시지;; 무슨 말인지는 모르겠으나..버전이 어쩌구 저쩌구 하네요. 

급한 마음에 일단 빨간 줄을 더블클릭하니 인터페이스 빌더가 실행됩니다.



위에 빨간 네모 부분에 있는 오류아이콘을 눌러보니 아래와 같이 나옵니다.







음... iOS 2.0으로 되어 있는게 맘에 들지 않네요. 지금 4.3에 iOS 5도 나온다고 하는데 말이죠. 

그냥 Deployment Target:을 iOS 3.0으로 변경 해봅니다.









어랏! 경고1개와 오류1개가 사라졌네요. (왜? 냐고는 묻지 말아주세요 -_-) 일단 잘 되니 넘어가겠습니다. 저장하고 다시 빌드합니다.



Step 4: 실행


잘 되는군요^^  고생하셨습니다.





끝~


'Dev > IPhone' 카테고리의 다른 글

Xcode 3.2.5, iOS SDK 4.2 에서 파스칼로 코딩하기.  (0) 2011.03.13
이전 IPhone SDK 다운로드 하기  (0) 2011.03.13
사실 이 글의 분류는 라자루스에 가깝지만... 자잘한 삽질이야기는 차차 하기로 하고 여기서는 그 결과만 공유해 봅니다. 
FPC for iPhone 의 동작원리 등 좀 더 자세한 이야기는 이후 하기로 하지요.  
제 블로그에서 존대말을 쓰려니 뻘쭘하지만... 삽질기가 아니기 때문에... ^^;  

프리파스칼의 위키에서 아이폰 SDK용 인테그레이션 키트에 관한 글을 발견한지 햇수로 2년이 흘렀습니다. 

이 키트는 당시에도 컴파일 한 번 해보려면 많은 삽질을 해야했는데, 그 이후 별다른 버전업이 없었기 때문에 최신 버전인 iOS SDK 4.2 에서 FPC를 쓴다는 것은 예전보다 훨씬 더 큰 삽질을 요구하게 되었습죠. 이때문에 많은 파스칼 사용자들이 부푼 꿈을 안고 도전했다가 절래절래 고개를 저으며 그냥 오브젝티브-C 로 자신의 코드를 다시 만드는 길을 선택하는 듯 합니다.  

하지만... 저는 거의 십년간 윈도에서 델파이와 OpenGL을 사용해 게임을 만들어왔습니다. 오브젝티브-C는 분명히 매력적이고 장점이 많은 언어지만 제가 작성해온 코드들를 오브젝티브-C로 다시 쓰기에는 너무 먼 길을 와버렸지요. 무엇보다 저는 파스칼로 생각하고 만드는 일을 즐거워하기 때문에 아이폰이라고 해서 이 즐거움을 포기하고 싶지는 않았습니다. 

그럼 시작해봅시다. 

먼저 애플에서 배포중인 최신버전의 Xcode를 설치합니다. 이 글을 적는 시점에서 Xcode는 3.2.5, iOS SDK는 4.2 로군요. 
그리고 프리파스칼의 위키에서 설명하는 대로 다음 두 개의 FPC 배포판을 차례로 설치하세요. 

FPC 2.4.0 for Mac OS X : ftp://ftp.freepascal.org/pub/fpc/dist/2.4.0/i386-macosx/fpc-2.4.0.intel-macosx.dmg 
FPC 2.5.1(r14397) for iPhone: ftp://ftp.freepascal.org/pub/fpc/snapshot/v25/arm-macosx/fpc-2.5.1v1.arm-iphone.dmg 
(tistory가 링크 앞에 자동으로 "http://" 를 붙이는군요. 자동링크 삭제합니다. 본문을 긁어 주소창에 넣어주세요. 광일님 죄송~~ ^^)

iPhone용 FPC를 2.4.0이 아닌 2.5.1 버전을 쓰는 이유는 이 버전부터 arm 컴파일시에 VFP라 불리는 수치연산 보조기능을 사용할 수 있기 때문입니다. 저는 게임을 만드는 것이 목적이기 때문에 선택의 여지가 없지요. 또한 "오브젝티브-파스칼" 이라는 해괴한 코드를 쓸 수 있다는 장점도 생깁니다만 여기서는 논외로 하겠습니다. 

FPC 설치가 끝나면 설치 스크립트가 iOS SDK의 경로를 물어옵니다. 문제는 이 FPC for iPhone이 iPhoneOS 3.1 시절의 물건이기 때문에 설치가 제대로 되지 않습니다. 때문에 스크립트를 고쳐 최신버전의 SDK를 인식할 수 있게 해야하지요. 저는 착한 프로그래머이므로 고친 스크립트를 첨부합니다. 

위 압축파일을 내려받아 /Developer/FreePascalCompiler/iPhoneSnapshot-2.5.1-r14397/InstallScript 에 풀어주세요. 이 스크립트를 실행시키면 뭐라 뭐라 좌르륵 떠들며 FPC 환경을 설치해 줄 것입니다. 

# cd  /Developer/FreePascalCompiler/iPhoneSnapshot-2.5.1-r14397/InstallScript
# ./finish_fpc_iphone_install.command


 


이제 Xcode를 실행시켜보면 "User Templates" 항목에 "OpenGL ES App (FPC) 2.5.1" 이라는 템플릿이 보입니다. 




그러나 이 템플릿을 기반으로 프로젝트를 만들면 빌드조차 되지 않습니다. VFP를 사용하는 FPC 컴파일스위치가 기본값으로 되어있어 시뮬레이터용 i386 빌드가 실패하기 때문입죠. 뭐 이후 제가 겪은 삽질은 미처 공개하지 못한 블로그의 행마다 절규하는 욕설로 그 처참함을 짐작할 수 있지만 생략하고... 저는 선량한 프로그래머인지라 지름길로 인도해 드리겠습니다.  

위의 파일을 내려받아 압축을 풀어 /Library/Application Support/Developer/Shared/Xcode/Project Templates 에 옮겨주세요. 다시 Xcode에서 새 프로젝트 메뉴를 클릭하면 다음과 같이 새로운 템플릿이 표시됩니다. 



(아이콘이 기분나쁘시다면 정말 기분탓입니다~~ ^^)

빌드해보시면~~ 시뮬레이터에서 얌전히 꿈틀거리는 사각형을 보실 수 있습니다. 



기존의 템플릿과 비교해 수정된 사항은 다음과 같습니다. 

1. 최신버전의 SDK에서 빌드되도록 하고 Deployment 옵션에서 대상 OS는 3.0으로 함. 
2. FPC 로고 애니메이션 대신 Xcode의 기본 OpenGL ES 템플릿과 동일한 화면으로 수정.  
3. 화면 갱신에 NSTimer 대신 CADisplayLink 를 사용. 
4. fpclogo.pas 를 MainUnit.pas 로 바꾸고, 의미를 혼동할 수 있는 glInit, glDraw 함수는 InitScene, DrawScene 로 변경. 
5. 파스칼 유니트에서 앱 종료시 데이터를 정리할 수 있도록 CloseScene 프로시저를 만들어 둠. 
6. Extended 를 사용하는 math 유니트의 삼각함수 대신 C런타임의 sinf, cosf 를 사용. 
7. 디바이스 릴리즈 모드의 팻바이너리 생성시 armv6, armv7 용으로 각각 다른 VFP옵션을 주도록 함. 
8. 앱 빌드 후 코드사인 전에 strip을 구동, 실행파일의 크기를 20~30% 정도 줄임. 
9. 타이틀바를 없애고 전체화면을 기본으로 함. 


아직 해결해야 할 문제도 있습니다.  

1. 릴리즈 모드의 팻바이너리에서 libfpc.a 를 중복해 만드는 문제. 
2. 아이패드용 템플릿도 필요하다. 
3. 그 외에는... 음... 생각나는 대로 추가할 예정... 



마지막으로, Xcode는 이미 파스칼에 대한 문법 하이라이팅을 지원하지만 이게 초창기 문법에 대한 것이라 실제 코딩하려고 하면 영 깨림직합니다. 




보시는 것 처럼 한줄주석도 제대로 처리되지 않고 Library 도 인식하지 못하지요. 

저란 놈은 지난번 허영일님의 세미나에서 딴지를 걸었듯, 문법 하이라이팅 없으면 어떤 코드도 만들기 싫어하는 게으름뱅이인지라... (오죽하면 윈도에서 오브젝티브-C 공부하려고 Dev-C++ 의 소스를 건드릴까요.) 다음 링크를 참조합시다. 


위 파일을 내려받아 /Developer/Library/PrivateFrameworks/XcodeEdit.framework/Versions/A/Resources/Pascal.xlangspec 와 바꿔치기 합니다. 결과는 다음과 같이 깔끔 그 자체입니다. 




이상으로 Xcode에서 파스칼로 OpenGL 랜더링을 하기 위한 삽질의 액기스만 뽑아보았습니다. 
템플릿에서 만들어준 MainUnit.pas 의 DrawScene() 프로시저에 원하시는 그림 그리기 코드를 넣어보세요. 


많은 일들이 있었지만... 이렇게 적어 놓으니 참 별것 아닌 길을 어렵게 걸어왔네요. 
아직 갈 길이 멀고 더 많은 어려움이 있으리라 짐작되지만... 파스칼에 혼을 빼앗긴 우리는 충분히 견뎌내리라 믿숩니다. 
파스칼 만세!




여기까지 해 보시고 궁금해하실 부분에 대해 몇가지 답변을 미리 달아둡니다. 

1.
build 디렉토리에 만들어지는 덩치 큰 libfpc.a 파일은 링크시 사용되며 실행파일에 통째로 들어가지는 않습니다. 안심하세요. 


2. 
FPC 는 PascalLibrary.pas 파일을 컴파일하고 그 결과를 오브젝트파일이 아닌 어셈블리 파일로 변환합니다. 이후 앱의 소스 컴파일 시점에서 이 어셈블리를 GCC로 컴파일하고 앞에서 만들어둔 libfpc.a 와 링크하지요. 때문에 프로젝트에 임의로 추가한 파스칼 소스는 '반드시' PascalLibrary 에서 참조되도록 해서 어셈블리 파일이 생성되도록 해야합니다. 안그러면 빌드시 다음과 같은 에러를 만나게 됩니다. 

... warning: '-x assembler-with-cpp' after last input file has no effect
... no input files
... failed with exit code 1

파스칼 코드를 추가한 뒤에는 MainUnit.pas 등의 uses 항목에도 꼭!! 추가해주세요.


3. 
다른 프로젝트와 마찬가지로 FPC도 뭔가 조금 이상하다고 생각되면 일단 Build->Clean 메뉴부터 실행시켜보세요. 


4. 
패키지 설치할 때 함께 들어있는 Readme.rtf 는 정말 주옥같은 정보를 담고 있으니 반드시 읽어보세요. 









어제는 제 둘째놈 백일이었습니다. 
이 글이 도움이되신다면 맘속으로 제 자식놈들 무탈하라고 한번씩 기원해주시와요~~ ^^; 


저작자 표시

'Dev > IPhone' 카테고리의 다른 글

오픈소스 RDP iRdesktop 빌드하기  (0) 2011.04.03
이전 IPhone SDK 다운로드 하기  (0) 2011.03.13
You need Apple developer account to login
But Apple has disabled some of the links recently

iPhone SDK 2.2.1 Leopard (10.5.4)
http://developer.apple.com/iphone/download.action?path=/iphone/iphone_sdk_for_iphone_os_2.2.1__9m2621a__final/iphone_sdk_for_iphone_os_2.2.19m2621afinal.dmg

iPhone SDK 3.0 (Xcode 3.1.3) Leopard (10.5.7)
http://developer.apple.com/iphone/download.action?path=/iphone/iphone_sdk_3.0__final/iphone_sdk_3.0__leopard__9m2736__final.dmg


iPhone SDK 3.0 (Xcode 3.2) Snow Leopard (10.6.0)
http://developer.apple.com/iphone/download.action?path=/iphone/iphone_sdk_3.0__final/iphone_sdk_3.0__snow_leopard__final.dmg

iPhone SDK 3.1 with Xcode 3.1.4 Leopard (10.5.7)
http://developer.apple.com/iphone/download.action?path=/iphone/iphone_sdk_3.1__final/iphone_sdk_3.1_with_xcode_3.1_final__leopard__9m2809.dmg

iPhone SDK 3.1 with XCode 3.2.1 for Snow Leopard (10.6.0)
http://developer.apple.com/iphone/download.action?path=/iphone/iphone_sdk_3.1__final/iphone_sdk_3.1_with_xcode_3.2_final__snow_leopard__10a432.dmg

iPhone SDK 3.1.2 with XCode 3.1.4 for Leopard (10.5.7)
http://developer.apple.com/iphone/download.action?path=/iphone/iphone_sdk_3.1.2__final/iphone_sdk_3.1.2_with_xcode_3.1.4__leopard__9m2809.dmg

iPhone SDK 3.1.2 with XCode 3.2.1 for Snow Leopard (10.6.0)
http://developer.apple.com/iphone/download.action?path=/iphone/iphone_sdk_3.1.2__final/iphone_sdk_3.1.2_with_xcode_3.2.1__snow_leopard__10m2003.dmg




Update : You are too late, Apple has removed the links above.




iPhone SDK 3.1.3 with XCode 3.1.4 for Leopard (10.5.7)
http://developer.apple.com/ios/download.action?path=/iphone/iphone_sdk_3.1.3__final/iphone_sdk_3.1.3_with_xcode_3.1.4__leopard__9m2809a.dmg

iPhone SDK 3.1.3 with XCode 3.2.1 for Snow Leopard (10.6.0)
http://developer.apple.com/ios/download.action?path=/iphone/iphone_sdk_3.1.3__final/iphone_sdk_3.1.3_with_xcode_3.2.1__snow_leopard__10m2003a.dmg

iPhone SDK 3.2 Final with Xcode 3.2.2 for Snow Leopard (10.6.0)
http://developer.apple.com/ios/download.action?path=/iphone/iphone_sdk_3.2__final/xcode_3.2.2_and_iphone_sdk_3.2_final.dmg

Xcode 3.2.3 and iPhone SDK 4 GM seed for Snow Leopard (10.6.2)
http://developer.apple.com/ios/download.action?path=/iphone/iphone_sdk_4_gm_seed/xcode_3.2.3_and_iphone_sdk_4_gm_seed.dmg

Xcode 3.2.3 and iPhone SDK 4 Final for Snow Leopard (10.6.2)
http://developer.apple.com/ios/download.action?path=/iphone/iphone_sdk_4__final/xcode_3.2.3_and_iphone_sdk_4__final.dmg

Xcode 3.2.3 and iOS SDK 4.0.1 for Snow Leopard (10.6.4)
http://developer.apple.com/ios/download.action?path=/ios/ios_sdk_4.0.1__final/xcode_3.2.3_and_ios_sdk_4.0.1.dmg

Xcode 3.2.3 and iOS SDK 4.0.2 for Snow Leopard (10.6.4)
http://developer.apple.com/ios/download.action?path=/ios/ios_sdk_4.0.2__final/xcode_3.2.3_and_ios_sdk_4.0.2.dmg

Xcode 3.2.4 and iOS SDK 4.1 for Snow Leopard (10.6.4)
http://developer.apple.com/ios/download.action?path=/ios/ios_sdk_4.1__final/xcode_3.2.4_and_ios_sdk_4.1.dmg

Xcode 3.2.5 and iOS SDK 4.2 GM for Snow Leopard (10.6.4)
http://developer.apple.com/ios/download.action?path=/ios/ios_sdk_4.2_gm_seed/xcode_3.2.5_and_ios_sdk_4.2_gm_seed.dmg

Xcode 3.2.5 and iOS SDK 4.2 for Snow Leopard (10.6.4)
http://developer.apple.com/ios/download.action?path=/ios/ios_sdk_4.2__final/xcode_3.2.5_and_ios_sdk_4.2_final.dmg

Xcode 3.2.6 and iOS SDK 4.3 GM Seed for Snow Leopard (10.6.6)
http://developer.apple.com/devcenter/download.action?path=/ios/ios_sdk_4.3_gm_seed/xcode_3.2.6_and_ios_sdk_4.3_gm_seed.dmg

Xcode 3.2.6 and iOS SDK 4.3 for Snow Leopard (10.6.6)
http://adcdownload.apple.com/Developer_Tools/xcode_3.2.6_and_ios_sdk_4.3__final/xcode_3.2.6_and_ios_sdk_4.3__final.dmg

Xcode 4 and iOS SDK 4.3 for Snow Leopard (10.6.6)
http://developer.apple.com/devcenter/download.action?path=/Developer_Tools/xcode_4_and_ios_sdk_4.3__final/xcode_4_and_ios_sdk_4.3__final.dmg

.
.
.

'Dev > IPhone' 카테고리의 다른 글

오픈소스 RDP iRdesktop 빌드하기  (0) 2011.04.03
Xcode 3.2.5, iOS SDK 4.2 에서 파스칼로 코딩하기.  (0) 2011.03.13

+ Recent posts