Appcelerator’s Marketplace에 거는 기대

appcelerator developer blog 캡쳐화면 (CCL 미적용)

며칠전 크로스 Appcelerator의 Developer Blog에 흥미로운 글 하나가 올라왔다. 글 내용은 다름이 아닌 Appcelerator에서 몇 주 후면  Marketpalce를 연다는 것이다. (원문링크) (*Appcelerator는  플랫폼 개발 프레임워크 중의 하나인 Titanium을 만드는 회사이다.)

Appclerator Marketplace가 무엇인가?
Titanium의 팬이자 한 명의 개발자로서 상당히 흥미로운 일이다. Marketplace는 개발자들이 자신이 만든 소프트웨어의 일부를 다른 개발자들에게 사고 파는 장터이기 때문이다. 애플 사용자들에게 앱 스토어가 있다면 Titanium 개발자들에겐 Marketplace가 있는 샘이다.  개인 개발자가 만든 하나의 앱을 앱스토어를 통해 판매자에게 팔 수 있었던 앱스토어 처럼, Titanium을 통해 개발하면서 자신이 만들었던 모듈, UI component, template 등등 소프프트웨어의 일부를 사고 팔 수 있는 곳이 곧 열릴 Appcelerator’s Marketplace이다.

과연 이 마켓 플레이스는 잘 될까?
기존에 소프트웨어 개발자들이 peer to peer로 소프트웨어의 일부를 파는 시장이 있었는지는 난 잘 모른다. 이 Marketplace가 성공 할까? 아님 실패 할까? 개인적으로 이 appcelerator의 marketplace가 잘 성장하길 기대한다.(그리고 바란다^^) 그 이유는 다음과 같다.

1. Appcelerator의 통제력 : 로그인 기반 Titanium Studio을 통해 정당하지 않은 사용을 통제한다.
Appcelerator는 Titanium 프레임워크 상에서 개발하는 개발자들에게  Titanium Studio는라는 강력한 툴을 Appcelerator가 aptana를 인수하고 몇달 후에 공개한 바있다. 이 Studio는 총 두가지 버전이 존재한다. basic과 premium. 이 두 버전은 다른 소프트웨어가 아니다 동일한 설치파일로 소프트웨어를 설치하고 프로그램 사용시 로그인 되는 방식으로 유료회원일 경우 디버깅과 같은 프리미엄 기능을 제공한다. 만약 인터넷이 되지 않는 곳에서 Studio를 실행하면 무조건 basic 기능으로 동작한다. 일반적으로 볼 수 있는 서로 다른 설치 파일 형태가 아닌 로그인을 통해 보다 확실하게 사용자들을 구분하고  통제한다. 이런 식의 통제는 marketplace에서도 존재하리라 생각된다. 내가 구매하지 않은 marketplace의 모듈을 사용하려 한다면  studio 차원에서  하지 못하게 막을 것이라 예상 된다.(개인적인 예상이다.^^)

2. 앱은 실패했지만 앱을 개발하면서 만든 모듈은 성공 할 수 있다?
예를 들어 한 개인 개발자가 얼굴 인식하는 게임을 만들었다고 하자. 이 때 얼굴 인식하는 기능은 직접 모듈을 개발해서 구현했다. 하지만 그 게임은 사용자들의 사랑을 받지 못하고 조용히 사라졌다. 한마디로 앱은 실패한 샘이다. 하지만 그가 개발한 얼굴인식 모듈을 titanium에서 얼굴인식 기능을 사용하려는 개발자들에게 marketplace를 통해 팔수있다. 개발자에게는 분명 또 다른 시장이라고 생각한다. 앱은 단순히 개발력만을 가지고 성공할 수 있는 곳이 아니다. 하지만 marketplace는 좀 더 기술적인 개발력만으로도 해볼 만한 시장이라 생각된다.

3. 더욱더 빠른 개발 가능
Titanium의 장점 중에 하나는 빠른 개발이다. 이제 조금(?)의 돈만 더  더 지불한다면 그냥 Titanium을 쓸때 보다 조금 더 빠른 개발을 할 수 있어 지는 거다. marketplace에서 실제로 어떤 가격에 거래 될지는 알수 없지만 뭐 appstore와 비슷하지 않을까?^^ 0.99불에 커스터마이징 된 Tab 컴포넌트를 살 수 있고 4.99불에 얼굴인식 모듈을 살 수 있고 ^^. 블로그 글에 보니 trial도 제공 할 수 있단다. 써보고 살 수 있으면 얼마나 좋은가?

Marketplace 반갑습니다.
Appstore가 백화점이라면 appcelerator’s marketplace는 뭐 원단 시장 같은게 아닐까? 옷을 만들만한 감각은 없지만 신소재 원단 만큼은 끝내주게 만들 수 있는 장인이라면 marketplace가 상당히 반가울 것이다. 반대로 원단은 못 만들지만 디자인은 끝내주게 할 수 있는 디자이너도  끝내주는 최신 유행 원단을 사서 유행의 변화에 대응하는 웃을 만수 있을테고, 그 옷을 백화점 가서 팔 수 있을 것이다. 그렇다면 marketplace의 등장은 디자이너들에게도 반길일이 아닐까?


Titanium에서 xhr에 HTTP Basic Authentication 사용하기

Titanium에서 createHTTPClient를 이용할 때 HTTP Authentication 사용하려면 아래와 같이 하면 된다.

var xhr = Titanium.Network.createHTTPClient();
xhr.setTimeout(20000);
xhr.onload = function()
{
Ti.API.info(this.responseText);
};
// open the client
xhr.open('GET','http://your.destination.url');

authstr = 'Basic ' +Ti.Utils.base64encode("yourUserName"+':'+"yourPassword");
xhr.setRequestHeader('Authorization', authstr);
xhr.send();

참고 URL : http://developer.appcelerator.com/question/20951/how-to-do-a-http-put-with-http-basic-authentication


Titanium에서 JSS(javascript style sheet) 사용법

Titanium에서 1.5버전부터 JSS (javascript style sheet)을 지원하기 시작했다.
jss란 무엇인가? html에 스타일을 적용할 때 CSS(Cascading Style Sheets)를 쓰는 것 처럼 javascript를 기반으로 style을 다룰 때 사용하는 방식이다.

js파일에 해당하는 jss만들기
app.js에 적용할 jss파일은 동일한 이름으로 같은 디렉토리에 생성하면 된다. (app.js 와 app.jss)

jss에 스타일 정의하기
css에서는 id, class, dom element 3가지 방법으로 스타일을 정의하고 적용할 수 있다. Titanium에의 JSS도 이와 유사하다. 다음과 같은 3가지 방법을 제공한다.

ID-based Style : #id로 형태로 선언하고 ui component 생성시 id를 지정한다.

// file : app.js
var styleWindow = Titanium.UI.createWindow({
id:'styleWin',
title:'스타일 적용 할 윈도우'
});
/* file : app.jss */
#styleWin {
background-color:#2A2623;
}

Type-based Style : component type이름으로 선언만하면 해당 component에 적용된다.

// file : app.js
var styleWindow = Titanium.UI.createWindow({
title:'스타일 적용 할 윈도우'
});
/* file : app.jss */
window { //app.js의 모든 window에 기본적으로 적용된다.
background-color:#2A2623;
}

Class-based Style :  .class 형태로 ui component 생성시 className을 지정한다.
(css의 경우 하나의 dom 엘러먼트에 여러개의 class지정하여 사용하나 jss에서는 아직 지원 안하는 모양이다.^^)

// file : app.js
var styleWindow = Titanium.UI.createWindow({
className:'style_win',
title:'스타일 적용 할 윈도우'
});
/* file : app.jss */
.style_win {
background-color:#2A2623;
}

3가지를 전부 정의 했을 때는 다음과 같은 우선 순위를 갖는다.

ID-based styles > type-based styles > class-based styles

이 순서를 확인도 할겸 예제 파일을 만들어 보았다.

p.s. 모든 js파일에 자동적용되는 공통적인 jss는 global.jss에 정의하면 된다고 나와있으나 실제 해보면 적용이 되지 않았다. 하지만 기본적인 css에서 사용하는 import로 공통적으로 사용하는 jss를 불러와서 사용할 수 있다.
따라서 공통적으로 쓸 jss의 경우 base.jss와 같이 독립된 파일을 만들고 base.jss가 필요한 jss에서 import를 시켜 사용하면 편리하다.

/* file : base.jss */
window {
barColor:#2A2623;
backgroundColor :#000;
}
/* file : app.jss */
@import url('./base.jss');
app {
background-color:#000;
}

reference
http://wiki.appcelerator.org/display/guides/Designing+the+User+Interface#DesigningtheUserInterface-CrossplatformlayoutusingJSS


이제 Titanium이 Mobile Web까지..

출처: Appcelerator Developer Blog (CCL 적용대상 아님)

Appcelerator가  Titanium Studio 및 Mobile SDK 1.7의 RC1 버전을 공개했다. 그리고 다양한 내용을 담고 있는 블로그 포스트가 올라왔다.
http://developer.appcelerator.com/blog/2011/05/major-titanium-updates.html

위 포스트의 내용은 다음과 같다.

  1. Titanium Mobile 1.7 RC1
  2. Titanium Desktop 1.2
  3. Titamium Mobile Web
  4. Titanium Mobile for BlackBerry Beta 2
  5. Titanium Studio RC1
  6. 새로운 Titanium 유료 계정 (inde, professional, enterprise)

Titanium을 사용하고 있는 개발자라면 하나를 제외하고 이미 예고된 내용들일 것이다.  처음으로 등장한 것이 바로 Mobile Web 관련이다.
아래 시연 동영상처럼 Titanium Mobile SDK를 통해 App을 제작하면 그대로 Mobile Web 으로 구동 가능하게 해준다는 것이다. indie 계정 이상에게만 공개된것이다 보니 아직 써보진 못했다. 당연히 완벽하게 되진 않겠지?

[iframe http://player.vimeo.com/video/23832536 640 480]

동영상 출처: Appcelerator Developer Blog (CCL 적용대상 아님)

하지만 요즘 Titanium의 행보를 보면 Titanium 으로 모든 것을 다 할 수 있는 맥가이버 칼(?) 같은 걸 만들고 싶은게 아닌가 하는 생각이든다. (맥가이버 칼은 매력적이지만 정교한 작업은 힘들듯이 이것이 장점이 되기도 하지만 단점이 되기도..)

비록 새롭고 쓸만한 것들은 이제 유료 계정에서만 사용가능하게 끔 하는 것 같다. ㅠㅠ
어찌 되었든 Titanium의 새로운 소식들은 나에게는 재미있고 반가운 소식이다^^


Android Device로 Titanium App 넣을때 R.java Error

Titanium에서 안드로이드 앱을 설정 한다는 것은 쉬운 일이 아닌 것 같다. 설정해줘야 할 것도 생각 보다 많고 설정하다가 안되는 경우도 많았다.

어렵게 설정을 다해 성공을 했는데 나중에 다시 새로운 프로젝트를 만들고 안드로이드 폰에 넣으려고 하니 R.java 에러가 날때가 있다. Resource 안의 폴더를 지웠다가 다시 실행도 해보고 새로운 프로젝트도 생성해서 해봤지만 소용 없었다.

결국, 찾은 해답은 App ID의 문제 였다. App ID에 최소한 하나의 ‘.’ (dot) 이 중간에 들어가야 한다. 이를 지키지 않으면 다음과 같은 에러가 나더라.

[ERROR] Error generating R.java from manifest

이런 error 때문에 고생한다면 appid 를 확인해보자!

p.s. Apple의 앱 아이디의 경우 apple에서는 domain을 거꾸로 적은 형태의 id를 권한다.( com.yomybaby.c ) 하지만 ‘test’ 와 같은 일반적인 텍스트 형태를 넣어도 Titanium에서는 문제 없이 돌아간다.
App ID는 말 그대로 앱을 나타내는 고유의 ID 이며 app을 구분하는데 쓰인다. push notification을 사용하기 위해서는 *와 같은 id를 쓰지 않고 com.domain.www 형태 이어야 한다.