TiShadow 활용방법
TiShadow?
TiShadow를 사용하면 앱을 개발시 여러 디바이스나 시뮬레이터에 빠르게 앱을 실행 시킬 수 있다. 어떻게 빠르게 실행하는 것일까? 기본 방법과 tishadow 방법에 대한 설명으로 비교하겠다.
기존 실행 방법 : 앱을 개발할 때 앱을 디바이스에 실행하려면 해당 앱에 해당하는 native 프로젝트를 빌드해서 앱파일을 생성(ipa, apk)하고 이 파일을 디바이스로 옮기게 된다. 여기서 프로젝트 빌드 시간이 오래 걸린다.1
TiShadow의 실행 방법 : TiShadow는 Titanium으로 개발된 app들은 javascript 코드를 runtime에 실행한다는 특징을 살려서 변경된 코드(Resource)를 네트워크(소켓)을 통해 전송하고 다시 app.js 부터 다시 시작하는 원리이다. 그러므로 다시 네이티브 코드를 빌드하거나 앱 파일(ipa,apk)를 전송하거나 하고 심지어 앱도 종료 되는 것이 아니라 앱이 켜진상태에서 app.js를 다시 실행한다.2
설치방법 및 기본 사용법
설치 방법은 TiShadow Github및 타이타늄 개발자 커뮤니티의 정영석 님 글에 잘 설명되어 있다.
Room
room은 하나의 tishadow 서버를 여러 방으로 나누어서 여러 앱이나 플랫폼 더나아가 여러 개발자들이 동시에 사용가능하다록 해주는 기능이다. 개인적으로 이 room을 사용하는 경우는 alloy프로젝트를 iOS, Android 대상으로 동시에 개발할 때이다. 이때 room을 사용하지 않을 경우 다음과 같은 문제가 있다. tishadow서버에 아이폰 안드로이드 전부 연결되어 있는 상태에서 iOS에서 확인하기 위해 alloy compile -c platform=ios && tishadow run 실행하면 android 폰에까지 iOS용으로 컴파일된 코드가 전달되어 실행되 버리는 문제 발생한다. 그 이유는 Alloy에서 tss나 xml에서 platform3 속성이나 js에서 OS_IOS, OS_ANDROID 변수4를 이용하여 플랫폼에 따라 다르게 개발 했을 때 alloy compile시 지정된 플랫폼에 따라 해당 코드가 최적화 되어 resource파일에는 조건문은 사라지고 조건의 결과에 따른 코드만 존재하기 때문이다. 다시말해 alloy compile은 특정 플랫폼을 위한 최적화 코드를 생성하게 된다. 이 문제는 room을 사용하면 된다.
tishadow server 를 실행한다.
아이폰에서 tishadow app을 connect 할때 advanced를 선택하고 room 이름에 ios라고 입력하고 connect 한다.
안드로이드폰에서 tishadow app을 connect 할때 advanced를 선택하고 room 이름에 android라고 입력하고 connect 한다.
alloy 프로젝트에서 다음과 같이 실행한다.: alloy compile -c platform=android && tishadow run -r android && alloy compile -c platform=ios && tishadow run -r ios
안드로이드 아이폰 모두 각자의 코드로 실행이 된다.
Appify
TiShadow app을 통해서가 아니라 독립된 app형태로 tishadow를 사용하고 싶을 때는 appify를 통해 TiShadow app을 대신할 특정 앱 전용 Tishadow app을 만들면 된다. Appify를 통해 생성하면 서버연결정보가 포함되어 자동 연결하게 된다. 또한 appify를 하게되면 앱에 설정된 모듈을 포함하여 tiapp.xml 설정을 동일하게 복사해준다.
tishadow server를 실행한다.
appify할 프로젝트로 가서 tishadow appify 명령어를 이용하여 appify된 전용 Tishadow 앱을 만든다. ip및 folder tishadow appify -o 192.168.0.2 -r room_appify_ios -d ../AlloySandboxAppify
만들어진 Appify된 전용 Tishadow앱을 실행한다. : titanium build -p ios
원래 프로젝트 폴더로 가서 파일을 수정하고 tishadow run 한다.
사용법은 TiShadow Github이나 아래 동영상을 통해서도 확인 할 수 있다.
Appify의 이해에 있어 주의할 점은 Appify 명령을 통해 생성된 프로젝트는 단지 자동 접속되는 tishadow app일뿐이다. 만들고 있던 프로젝트가 아니다. 원래 프로젝트에서 작업은 계속하고 appify된 프로젝트로 생성된 앱(전용 tishadow app)에서 확인하는 것이다.
Alloy 사용시 주의점
tishadow는 resource 폴더의 내용을 전달한다. 따라서 alloy로 된 프로젝트에서 app 프로젝트 및의 파일을 수정한 경우라면 alloy compile -c platform=android 를 실행하여 alloy 컴파일을 한 후 tishadow run을 실행해야 한다. 아래와 같이 하나의 명령으로도 하면 편리하다. alloy compile -c platform=android && tishadow run
파일 변경시 자동 tishadow run 실행방법
파일을 수정하고 확인하기 위해 매번 위 명령을 실행해야하는데 이게 귀찮다면 이를 자동으로 해주는 supervisor node pakage를 이용하여 해결 할 수 있다. 방법은 https://gist.github.com/kwhinnery/5565515 에 나와있다. (alloy 프로젝트의 경우도 /app 폴더 밑의 파일을 변경하면 자동으로 compile하고 tishadow run 하게 할 수 있음)
참고로 TiShadow와 Hockeykit을 이용하여 테스트/배포 속도 높이기 위한 오프라인 세미나를 곧 갖을 예정입니다. 자세한 사항은 한국 Titanium 개발자 커뮤니티 포럼 http://tidev.kr 이나 facebook 그룹 http://tidev.kr/fb 를 통해 곧 공지하겠습니다.
순수 네이티브 프로젝트와 Titanium 프로젝트의 빌드 시간 차이는 단순한 앱일수록 더 차이난다. Titanium은 단순한 앱이어도 기본적으로 포함되는 TiSDK가 있기 때문이다. ↩︎
앱을 완전히 종료했다가 다시 실행해주는 것이 아니기 때문에 필요에 따라 기존에 app.js를 시작으로 실행되었던 정리를 하는 코드가 필요할 때가 있다.(window 종료, 글로벌 변수 초기화 등.) 이 정리를 하는 방법은 TiShadow Github 저장소의 Keep in Clean부분을 참조바란다. alloy의 경우 alloy.jmk 설정을 해야하는데 이부분도 설명되어 있다. ↩︎
AlloyXMLMarkup-ConditionalCode , AlloyStylesandThemes-Platform-SpecificStyles ↩︎
http://docs.appcelerator.com/titanium/3.0/#!/guide/Alloy_Controllers-section-34636384_AlloyControllers-ConditionalCode ↩︎











