+ 추가 : 포스팅을 하고 나서 다시 읽어보니 온통 감사하다는 말뿐이네요. 근데... 정말 고생하신 분들이 많아서 감사하다는 말을 도저히 뺄 수가 없더군요. 이 부분 널리 양해부탁드립니다.


+ 추가 : DevLab 행사와 관련하여 궁금하신 사항이 있으신 분들(참석자 or not)은 언제든지 질문을 주세요.


안녕하세요, 윤진입니다.


10/26(월) 콘래드호텔에서 SOSCON의 사전행사로 Tizen DevLab을 개최하였습니다.

SOSCON Tizen DevLab에 대해서는 이전에 포스팅 한 번 했었는데요,

웹앱과 네이티브앱에 대한 세션을 오후 2시부터 6시까지 마련하였습니다.



발표 리허설을 위해 오전에 서둘러서 출발하였습니다.

9시 7분에 집 지하주차장에서 출발했는데 호텔 주차장에 도착하니 9시 15분이더군요.

평소에는 서울에서 수원으로 출퇴근했기에 출퇴근길이 항상 힘들었는데요,

오늘만큼은... 행복하네요.

호텔 지하주차장에 설치된 모니터에서 소스콘 행사 안내를 볼 수 있었습니다.

"Samsung Open Source Conference Grand Ballroom (3F)"



DevLab이 열린 곳은 콘래드 호텔 6층입니다.

밖이 훤히 보이는 투명한 엘리베이터를 타고 6층으로 올라왔습니다.

엘리베이터 유리창 너머로 파크원 타워 건설 현장이 보였습니다.

건설 현장의 규모만 봐도 굉장한 높이의 빌딩이 올라갈 거라 쉽게 예상할 수 있었습니다.



DevLab 행사장으로 가는 길에 배치된 쇼파입니다.

한 번 앉으면 일어나기 힘들 정도로 포근한 쇼파였습니다.

행사 시작 전에 많은 개발자 분들이 앉아서 담소를 나누고 계시더군요.

한국 개발자 뿐만 아니라 외국 개발자들도 눈에 많이 띄었습니다.



행사장으로 향하는 복도입니다.

전체적으로 구름이 짙게 낀 날씨여서 그런지 실내도 많이 어두웠습니다.

하지만, 내부 인테리어는 전체적으로 중후하고 모던한 분위기였습니다.



중간 공간에 간식과 음료도 마련되어 있었습니다.

간식으로는 쿠키와 빵이 있었습니다.

누구나 먹고 싶은 만큼 가져가 먹을 수 있어서요,

신나게 집어먹은 기억이 납니다.



발표장 앞에 입간판이 세워졌습니다.

SOSCON 삼성 오픈소스 컨퍼런스의 튜토리얼 세션 2개가 나오네요.

Studio7에서는 IoTivity로 재미있는 세션이 이어졌고,

Studio4에서는 Tizen DevLab이 개최되었습니다.



DevLab을 위한 안내 입간판입니다.

14:00~14:30 [강의] 누구나 쉽게 만드는 Tizen Web Application by 강석현 연구원

14:30~15:50 [실습] 누구나 쉽게 만드는 Tizen Web Application by 손보연 연구원

15:50~16:10 휴식

16:10~16:40 [강의] 정교하게 만드는 Tizen Native Application by 윤진 연구원

16:40~18:00 [실습] 정교하게 만드는 Tizen Native Application by 이은영 연구원

전체적으로 위의 순서대로 진행하였습니다.

물론 다양한 변수가 있어서 꼭 위의 시간대로 진행이 되지는 않았습니다. :)



발표장 입구에 들어가자마자 사진을 찍었습니다.

SOSCON 삼성 오픈소스 컨퍼런스 화면이 크게 보입니다.

Studio4에 천장에 내장된 프로젝터 화면이 작아서 큰 화면을 출력할 수 있게 따로 요청했었는데요,

새롭게 놓여진 프로젝트를 탁월한 선택이었단 생각이 듭니다.

DevLab은 코드가 주인공이기 때문에 저 정도가 아니면 소스가 제대로 안 보일 수 있거든요.

(DevLab 행사를 원활히 진행해주신 조재민 연구원님께 감사의 말씀을 드립니다.)



DevLab 행사를 위해 많은 분들이 고생해주셨습니다.

발표장 뒷편에는 원활한 행사진행을 위해 스탭분들이 대기해주셨습니다.

행사를 위해 묵묵히 고생하신 스탭분들께 감사의 마음을 전하고 싶습니다.



각 자리에는 콘래드 호텔에서 준비한 연습장과 볼펜이 놓여 있었습니다.

호텔에서는 종이와 연필을 챙기는 재미가 쏠쏠한지라 '몰래' 가방에 넣어왔습니다.



DevLab 행사 진행을 맡은 박문경 연구원입니다.

전체 행사진행 뿐만 아니라 Native Application의 튜터로도 활약했습니다.

매끄러운 진행을 위해 스크립트도 손으로 한땀한땀 써왔던데요,

공개적이고 형식적인 자리에 어울리는 진행을 해줘서 고맙습니다.

다음에도 진행을 부탁해야겠네요. :)



전체 트랙을 진행하기에 앞서,

타이젠 아키텍트이신 박영주 수석 연구원님께서 모두발언을 해주셨습니다.

타이젠 앱에 대해 간략하게 맥을 짚어주셨는데요,

더 자세한 내용이 궁금하시다면 내일 오후 소스콘 첫 세션(박영주 수석연구원, "Tizen Applications")을 들으시면 됩니다.



타이젠 웹앱 세션에서 강의를 진행하신 강석현 연구원님입니다.

발표장 앞에 있는 입간판에서 포즈를 부탁드렸는데요,

저런 익살스런 포즈를 취하신걸 제 손가락이 놓치지 않았습니다. 우후후.

강석현 연구원께서는 왜 웹앱을 해야하는지 충분히 납득가능한 설명을 해주셨습니다.

중간에 네이티브앱에 대해서도 살짝 언급해주셨는데요,

'개발자가 불에 타고 있는 이미지'를 재미난 이모티콘 이미지를 보여주시며,

제 3의 플랫폼이 개발자를 힘들게 한다는 충격요법으로 포문을 여셨습니다.

그리고 타이젠 플랫폼 뿐만 아니라 다른 플랫폼에도 바로 이식하여 사용할 수 있는 웹앱을 강조해주셨지요.



웹앱 실습은 손보연 연구원께서 진행해주셨습니다.

맥북과 미리 나눠드린 TM1시료가 붙지 않아 여러 참가자 분들이 고생하셨습니다.

최신 OS X 버전 11에서 삼성 USB 통합 드라이버가 제대로 동작하지 않아 생긴 이슈입니다.

통합 드라이버를 빠른 시일내로 업데이트하여 맥북에서도 원활히 테스트할 수 있도록 준비하겠습니다.

타이젠 버전이 업그레이드될수록 IDE도 진화하고 있습니다.

아직 부족한 점이 눈에 띄실 수도 있습니다.

저희가 더 노력해서 더 쉽고 편하고 빠르게 사용할 수 있도록 하겠습니다.



웹앱 튜터로 활약해주신 김용국 연구원입니다.

웹앱 세션에서 여기저기 종횡무진 누비고 다니던데요,

고생 많으셨어요.

함께 고생한 김수필 연구원 독사진이 없어서 그 사진은 최하단의 단체사진으로 대체합니다.

(미안해요, 술필)



그리고 네이티브 세션을 진행했습니다.

(위의 사진은 윈도우 지존 문관경 연구원께서 찍어주셨습니다)

웹앱세션을 진행하며 참가자 분들이 SDK 설정 및 타겟 연결을 완료하셨기 때문에,

네이티브 세션은 상대적으로 SDK와 관련된 이슈가 적었습니다.


그리고 더불어 소스콘 주최측에서 여분의 노트북도 준비해주셨습니다.

노트북을 가져오지 않으신 분들

- 자신의 노트북에서 원활히 SDK가 돌아가지 않는 분들

20대가 넘는 노트북을 준비해서 모두 제대로 실습할 수 있도록 하였습니다.

이 자리를 빌어 노트북을 준비해준 임지혜 연구원님과 SDK와 관련하여 여러가지로 도움주신 이남기 연구원님 외 한 분(이름이 갑자기 생각이 안나네요)께 감사를 전합니다.


이번 네이티브앱 발표에서 다룬 주제는,

- Life cycle

- View (elm_naviframe APIs)

- Component (EDC)

- Launch (app_control APIs)

위처럼 구성되어 있었습니다.


네이티브 앱 세션이 아무래도 웹앱보다는 어려웠을 것이라 생각하는데요,

세션을 더욱 쉽게 준비하지 못한 부분은 모두 제 책임입니다.

타이젠 네이티브앱을 구성하는 핵심요소를 모두 보여드리겠다는 욕심이 과했을지도 모르겠네요.

다음 행사에서는 개발자분들께서 더 쉽게 네이티브앱을 경험하실 수 있도록 준비하겠습니다.



네이티브앱 실습을 진행한 이은영 연구원님입니다.

샘플앱을 직접 작성하고 간결하게 설명하기 위해 바쁜 시간 쪼개가며 준비해주었습니다.

일정상 여러가지 많은 일거리가 있었는데,

불평없이 즐겁게 준비해주어 고마운 마음이 듭니다.



이번 데브랩을 준비한 멤버 모두입니다.

왼쪽부터 박문경 연구원 - 손보연 연구원 - 강석현 연구원 - 박영주 수석연구원 - 이근선 연구원 - 이은영 연구원 - 김수필 연구원 - 하이츨러 마스터 - 윤진 연구원입니다.

데브랩 네이티브 세션에 하이츨러 마스터님도 참석해주셨습니다.

하이츨러 마스터님께서는 세션발표 후 여러가지 실질적인 조언도 아끼지 않고 해주셨습니다.


구글러 서주영 연구원께서도 DevLab에 참석해주셨습니다.

서주영 연구원께서는 모레 있을 EFL 포럼에서 릴리즈와 관련된 세션을 진행할 예정입니다.

EFL 포럼에는 여러가지 재미난 이야기거리가 많이 준비되어 있습니다.

기대하셔도 좋습니다. :)


참가자 분들도 고생 많으셨습니다.

네 시간동안 웹앱도 하고 네이티브앱도 개발하느라 정신없으셨을 것 같네요.

발표하는 입장에서 봤을때는 모두 또렷또렷한 눈으로 따라와주셨는데요,

실제로는 어떠셨을지 궁금하네요.

어쨌든 부족한 발표 따라와 주셔서 감사합니다.


그리고 내일부터 소스콘 본행사가 시작됩니다.

이틀동안 알찬 세션이 많이 준비되어 있습니다.


개발자분들의 관심과 참여 부탁드립니다.

감사합니다.



안녕하세요, 윤진입니다.


며칠 사이 일교차가 커지더니 몸이 항상성 유지에 포기했나봅니다.

두통 + 기침 + 오한의 삼중고에 시달리고 있습니다.


아침 저녁으로 한기가 완연히 느껴지는 10월에,

삼성이 서울에서 대규모 행사를 주관합니다.


SOSCON,

Samsung Open Source Conference

삼성이 주관하는 오픈소스 축제입니다.



소프트웨어 업계에 몸을 담고 있는 개발자이고,

오픈소스에 관심을 가지고 있으면서,

소스콘에 빠지시면 곤란합니다. :)


흥미로운 주제발표를 들으실 수 있고,

굉장한 개발자들과 친교를 맺으실 수 있습니다.

(저... 저랑도 친교를 맺으시지요~ 구걸구걸)

http://www.soscon.net/registration.asp


일시 : 2015. 10. 27(화) ~ 28(수), 단 26(월)은 사전행사!

장소 : 서울 여의도 Conrad 호텔


컨퍼런스는 으레 코엑스에서 개최되었었는데요,

이번에 소스콘은 코엑스 대신 콘라드를 택했습니다.

6성급 호텔에서 개최되는 행사는 어떤 모습일지 기대가 됩니다.



아직 컨퍼런스/튜토리얼 참석 신청 버튼이 열려있습니다.

컨퍼런스를 신청하시면, 키노트 · 세션 · 포럼에 참가하실 수 있습니다!

튜토리얼을 신청하시면, 타이젠 데브랩, IoTivity, S4A 행사에 참가하실 수 있습니다!



여기까지 설명을 드렸으니 이미 눈치를 채셨겠지만요~ 히힛.

그렇습니다,

소스콘 사전행사로 10. 26(월)에 타이젠 데브랩을 개최합니다. :)

이번 데브랩은 정말 재미있을 거예요!


데브랩에 주어진 시간은 총 4시간입니다.

4시간짜리 강의를 할 수는 없으니 크게 두 개의 세션으로 나눠서 진행하려고 합니다.

웹앱 세션 2시간 & 네이티브앱 세션 2시간으로 말이지요.


각각의 세션은 독립적으로 존재하지만 쉬움 vs 정교함을 지속적으로 비교할 수 있게 구성하였습니다.

"누구나 쉽게 만드는 Tizen Web Application"

"정교하게 만드는 Tizen Native Application"


웹앱세션은 웹앱의 대가 강석현 선임께서 발표를 하실 예정입니다.

발표 강석현 선임 연구원 / 시연 손보연 연구원 / 튜터 김용국 연구원, 김수필 연구원


그리고 네이티브세션은 제가 새로운 컨텐츠로 발표할 예정입니다.

발표 윤진 선임 연구원 / 시연 이은영 연구원 / 튜터 이근선 연구원, 박문경 연구원


매일매일 발표를 준비하며,

웹앱세션보다 명료하고 풍부하게 주제를 표현하고자 노력하는데요,

강석현 선임께서 워낙 발표준비를 잘 하셔서 쉽지 않네요. 히힛.


이번에 데브랩에 오시는 분들은,

반드시 개인 노트북에 타이젠 2.3.1 SDK를 설치하고 오셔야 합니다.

데브랩 시간 동안은 실습만으로 빠듯해서, 따로 SDK를 설치할 시간이 없을겁니다.


만약 SDK 설치에 도움을 받으셔야하면,

행사 시작 1시간 전인 오후 1시에 와주세요.

저희가 도와드리겠습니다!


사전에 배포될 예정인,

발표자료와 소스도 함께 챙겨주세요.

예습을 하시면 좋겠지만,

예습없이도 충분히 이해하기 쉽게 '천천히' 진행하려고 합니다.


이번 데브랩에는 소정의 상품이 준비되어 있습니다.

데브랩에 참석하는 모든 분께 상품을 드리도록 준비는 하고 있지만,

웹앱 세션과 네이티브 세션에서 진행하는 실습에 잘 따라오신 분들께(!)

우선적으로 상품을 드리려고 합니다.


데브랩은 스타터를 위한 행사이니만큼,

타이젠과 함께 즐거운 첫 경험을 시작하셨으면 합니다.


발표내용은 이미 오래전에 정해두었는데요,

아직 발표자료가 완비되지 않아 걱정입니다.

우선 감기부터 떨궈내야 할텐데 말이지요.


감기 조심하시고,

좋은 하루 보내세요~


끝_


지난 주 모처에서 타이젠 앱개발을 주제로 발표를 하였습니다.

발표에 참여하는 분들이 여러가지 면에서 흥미로운 요소를 지니고 있어서,

그 동안 한 번도 보여준 적이 없는 형태로 발표를 준비하였습니다.

발표물은 한 번 쓰고 폐기처분해야하는 상황이라 아쉽긴 하지만,

 발표문에서 타이젠 네이티브앱 초보 개발자에게 흥미로운 내용만을 추려서 포스팅 합니다.



1. 앱라이프사이클


타이젠 앱라이프사이클은 앱의 동작방식을 확정지을 수 있다는 것만으로도 의미가 있지만,

라이프사이클을 활용하여 런칭속도를 최적화할 수 있는 포인트가 있기에 매우 중요합니다.


지난 데브랩때도 이 부분을 강조하여 설명을 드렸었죠.

(관련 포스팅 : http://storycompiler.tistory.com/138)


우선 최적화 포인트는 잠시 접어두고 앱사이클을 따져봐야겠지요.

타이젠의 앱 라이프사이클은 아래 5가지 콜백으로 관리됩니다.


- app_create

- app_terminate

위의 두가지는 앱이 각각 생성될때와 종료될때 불립니다.

가장 기본적인 라이프사이클을 관리하는 함수입니다.


- app_resume

- app_pause

위의 두가지는 앱윈도우의 속성과 관련이 있습니다.

윈도우가 1px이라도 화면에 보여지는 순간 resume이 되고,

1px 조차도 보이지 않게 되면 pause가 됩니다.


네이티브앱에서는 ui가 없는 service 앱도 개발할 수 있는데요,

service 앱의 경우는 resume / pause 콜백이 불리지 않습니다.

왜냐하면 위에서 언급했듯,

resume / pause는 윈도우와 함께 동작하는 피쳐이기 때문이지요.


- app_control

control은 앱을 런칭할 때 부가적인 정보를 전달하는 수단으로 사용됩니다.

caller 앱에서 callee 앱에게 정보를 전달할 수도 있고,

service 앱이 ui 앱에게 정보를 전달할 수도 있겠지요.


타이젠 네이티브앱은 최초 런칭시,

앱이 사전에 콜백으로 등록한,

app_create_cb(), app_control_cb(), app_resume_cb()이 순서대로 불립니다.

최초로 불리는 app_create_cb() 함수는,

앱이 mainloop에 진입하기 직전에 수행하는 함수입니다.

앱이 app_create_cb()에서 리턴되면,

바로 mainloop에 진입하여 app_create_cb()에서 요청한 대상에 대해 렌더링을 실시합니다.

이 때 벌어지는 렌더링이 앱 라이프사이클 중에 최초의 렌더링입니다.


그리고 두번째 렌더링은 통상 app_control_cb()을 실행하고 이뤄집니다.

그렇기 때문에 첫번째 렌더링이 빠르게 이뤄질 수 있도록,

app_create_cb()을 간소하게 짤 필요가 있습니다.

바로 이 부분이 최적화 포인트인 셈입니다.


간단하게 라이프사이클을 등록하는 코드를 보면 아래와 같습니다.


int main(int argc, char *argv[])
{
    struct appdata ad;
    ui_app_lifecycle_callback_s event_callback;

    event_callback.create = app_create;
    event_callback.terminate = app_terminate;
    event_callback.pause = app_pause;
    event_callback.resume = app_resume;
    event_callback.app_control = app_control;
    return ui_app_main(argc, argv, &event_callback, &ad);
}



2. 레이아웃

UI를 가진 앱이라면 앱과 사용자와 교감하는 인터페이스를 우선적으로 고려해야합니다.

네이티브 앱의 경우 레이아웃은 edc를 빼놓고 이야기할 수 없겠지요.


edc로 화면의 레이아웃을 구성하고 C로 edc로 짠 레이아웃에 위젯들을 탑재합니다.

C코드에서 edc를 로딩할 때 사용하는 함수가,

elm_layout_add()입니다.

그리고 로딩된 edc 레이아웃에 C에서 작성한 오브젝트를 탑재할 수 있습니다.

elm_object_part_content_set()

위의 함수를 사용하면 간단하게 탑재가능하지요.


탑재를 했으면 반대로 해제를 하는 함수도 있겠지요.

elm_object_part_content_unset()


위의 함수와 함께 메모리 관리에 대해 고민하는 것도 흥미로울 것 같네요.

이 부분은 SOSCON에서 진행할 Devlab이나 EFL 트랙 발표에서 좀 더 다룰 예정입니다.


edc에서 이뤄지는 레이아웃은 아래와 같은 형태가 되겠네요.

edc에서는 rel1 / rel2를 사용하여 각각의 파트마다 위치와 크기를 지정할 수 있습니다.

이미 사용하고 계시다면 굉장히 간단하게 코딩 가능한 스크립트라는 것을 아시겠죠?



3. 뷰플로우

앱은 다수의 뷰로 구성이 됩니다.

하나의 뷰로만 구성된 간단한 앱도 있습니다만,

보통은 몇 단계의 depth로 앱의 세부항목에 다다르는 구조로 되어 있지요.


각각의 뷰는 기본적으로 stack에 넣어 관리를 하는데요,

그 stacking을 도와주는 객체가 elm_naviframe_xxxx() 함수입니다.


naviframe의 stack에 뷰를 push / pop하며 화면 전환을 할 수 있습니다.

화면 전환간에 default로 동작하는 이펙트는 오른쪽에서 왼쪽으로 기존 뷰를 덮으며 나타나는 이펙트입니다.

이펙트는 customize를 통해 신규로 적용이 가능합니다.



naviframe에서 default로 보여지는 타이틀 영역은,

elm_naviframe_item_title_enabled_set() 함수를 사용하여 없앨 수 있습니다.


그리고 elm_naviframe_items_get() 함수로,

naviframe에 들어간 아이템의 리스트를 얻어올 수 있습니다.


stack은 top에만 넣고 뺄 수 있는 구조기에,

중간에도 넣을 수 있도록 insert 관련 함수도 사용할 수 있습니다.

elm_naviframe_item_insert_before()

elm_naviframe_item_insert_after()



4.  비주얼 인터액션

화면을 구성하고 있는 개별 컴포넌트에 각종 효과를 적용할 수도 있습니다.

C에서는 elm_transit 계열의 함수를 사용하여 효과를 줄 수 있고,

edc에서는 program을 활용하여 효과를 줄 수 있습니다.


여기서는 비교적 직관적으로 사용 가능한 edc를 살펴 보겠습니다.

edc는 화면의 구성요소를 의미하는 part와 part 간의 동작을 정의하는 program으로 나뉩니다.


			part {
				name: "popup";
				type: RECT;
				description {
					state: "default" 0.0;
					rel1 { relative: 1.0 0.0; }
					rel2 { relative: 2.0 1.0; }
					color: 154 187 211 255;
					visible: 1;
				}
				description {
					state: "show" 0.0;
					inherit: "default" 0.0;
					rel1 { relative: 0.0 0.0; }
					rel2 { relative: 1.0 1.0; }
				}


위의 파트는 2가지 description을 가지고 있습니다.

각각의 description은 컴포넌트의 위치를 확정하는 rel1 / rel2 값을 달리 가져가고 있습니다.

위처럼 앱의 각각의 상태에 대한 확정은 part에서 진행합니다.


			program {
				name: "popup_show";
				signal: "popup_show";
				action: STATE_SET "show" 0.0;
				target: "popup";
				transition: DECELERATE 0.3;
			}
			program {
				name: "popup_hide";
				signal: "popup_hide";
				action: STATE_SET "default" 0.0;
				target: "popup";
				transition: DECELERATE 0.3;
			}


그리고 part에 위처럼 program이 붙어서 동작제어를 가능하게 합니다.

위의 program은 popup_show라는 시그널이 C파일로부터 날라오면,

popup 파트의 description을 "show"로 변경해줍니다.

만약 transition이 설정이 되어 있다면,

transition의 값을 참고하여 timer를 돌려 부드러운 이펙트로 보여줍니다.



5. 최적화

앱을 위한 화면구성을 완료했다면, 이제는 최적화에 손을 쓸 차례입니다.

Native 앱에는 최적화를 다양한 방법이 있습니다.


앱단에서 가장 손쉽게 관리할 수 잇는 방법은,

elm_gengrid와 elm_genlist 윈셋을 적극적으로 사용하는 것이겠지요.


elm_gen 시리즈는 화면에 보여지고 있는 영역 위주로 메모리에 로딩하고,

보이지 않는 영역은 메모리에서 언로딩하는 방법을 사용하여 메모리를 절약합니다.



genlist에 아이템을 삽입할때는,

아이템의 레이아웃을 edc로 정의해줄 수 있습니다.

위의 Class의 .item_style 필드가 커스터마이즈한 edc입니다.



위의 edc에서는 레이아웃에 필요한,

icon과 name part를 정의하고 있습니다.



그리고 레이아웃에 채워넣을 icon과 텍스트는,

content_get 필드에 대입되어 있는 함수와 text_get 필드에 정의한 _text_cb의 리턴값으로 결정됩니다.



6. 언어변경

언어는 오픈소스인 gettext를 사용하고 있습니다.

gettext 함수를 사용하려면 국가마다 po 파일이 있어야 하지요.

앱에서 지원하고자 하는 나라수만큼 po 파일을 준비해두어야 합니다.


po 파일을 구성하는 msgid에 모든 언어에서 공통적으로 지칭할 고유아이디를 적어둡니다.

C파일에서 텍스트를 노출해야하면,

msgid에 있는 값을 노출해야하는 곳에 적어두어야 합니다.

msgstr에는 고유아이디와 설정언어의 조합을 통해 gettext()로 번역되어 나옵니다.


시스템 상에서 언어가 바뀌면,

앱라이프사이클과 함께 등록한 language_changed_cb()이 불립니다.

그 함수 안에서 변경된 언어를 설정해두고,

다시 gettext()가 불리도록 update만 시켜주면 됩니다.



이상이 초보개발자들이 궁금해할만한 내용이었습니다.

각각의 내용은 하나의 포스팅으로 완결될 수 있는바,

시간을 마련하여 언젠가 포스팅을 하도록 하겠습니다.


그럼 좋은 하루 보내세요~

끝_

  1. 전광하 2015.11.26 20:53

    " naviframe의 stack에 뷰를 push / pop하며 화면 전환을 할 수 있습니다.
    화면 전환간에 default로 동작하는 이펙트는 오른쪽에서 왼쪽으로 기존 뷰를 덮으며 나타나는 이펙트입니다.
    이펙트는 customize를 통해 신규로 적용이 가능합니다 " 라고 하셨는데.. 어떻게 customize를 하는지 알 수 있을까요? 아무리 검색해도 안나오네요.

    • 안녕하세요, 전광하님.
      커스터마이징을 하기 위해서는 edc 파일을 수정해야하는데요,
      답글로는 그 내용을 담을 수 없고(너무 이야기할게 많습니다),
      빠른 시일내로 전체적으로 정리하는 시간을 마련해보도록 하겠습니다.
      언젠가 문의가 들어올 것으로 예상은 했었는데요,
      문의가 들어오기 전에 준비를 했었어야 했는데...
      아무튼 11월은 벌써 끝나가니 12월 중엔... 기필코 정리하도록 하겠습니다.
      그 전까지는 현재 naviframe을 사용하시고,
      아니면 edc에서 naviframe 역할을 하는 그룹을 만드시면 됩니다(edc를 어느정도 아시는지요?).

      곧, 커밍순 하겠습니다. :)

      감사합니다!

  2. 전광하 2015.12.01 00:48

    답변감사합니다. 열정적으로 글들을 읽고있고, 모든 edc 글들을 읽고 연습중입니다. 네비프레임은 포스팅되면 해볼게요 감사합니다~

    • 안녕하세요, 전광하님. edc가 마의 산맥으로 여겨질 수도 있을텐데요. 어려움이 생기면 언제든지 주저말고 문의주세요. :) 그럼 즐거운 코딩하시길~!



일시 : 2015년 7월 30일 ~ 31일

장소 : 인도 남부 벵갈루루 리츠칼튼 호텔

웹사이트 : http://tizendevsummit.com/index.html



인도 남부 벵갈루루의 위치는 위의 지도에서 확인하실 수 있습니다.

7월 30일 기준으로 리츠칼튼 호텔 1박에 28만원입니다.

아직 방이 여유가 있으니 예약하고 싶어지는군요.


타이젠 개발자 회담은 앱 & 플랫폼 개발자를 위한 행사입니다.

올해 인도에서 출시된 Mobile Z1은 물론이고 Wearable, TV, IoT까지 행사내용에 포함되어 있습니다.

앱개발자, 플랫폼 디자이너, ISV업체, OEM업체, 하드웨어업체, 소프트웨어업체 등 기술 컨텐츠에 관심을 가질만한 사람은 누구나 참석할 수 있습니다.

C언어 기반의 Native앱을 개발하는 개발자와 HTML5 기반의 웹앱을 개발하는 개발자 모두에게 이틀동안 타이젠에 대해 설명하는 자리가 되겠군요.


이틀간 열리는 행사에서 흥미로운 주제를 몇 개 뽑아보았습니다.

첫날 점심시간 이후에 열리는 "Breakthrough Games with Tizen"이 흥미롭습니다.



삼성전자 타이젠 R&D 그래픽스팀의 최성열 연구원께서 발표하시는군요.

OpenGl-ES와 DALi 툴킷으로 게임그래픽개발에 대해 설명하는 자리가 되겠네요.


같은 시간에 열리는 다른 세션도 구미가 당깁니다.

드디어 TV SDK가 나오나 봅니다.

삼성전자 타이젠 스마트 TV가 국무총리 대상을 받았는데요.

타이젠 TV에 올라가는 앱을 개발하는 SDK에 대한 세션입니다.

SDK 환경 및 가이드를 해주는 자리가 되겠네요.

C언어 기반의 Native 앱보다는 HTML5 기반의 웹앱을 위한 세션으로 보입니다.


다음 시간에 열리는 세션 중에 웨어러블 세션이 있습니다.

타이젠 플랫폼은 이미 삼성 기어 시리즈에 탑재되어 있습니다.

웨어러블 플랫폼의 주요 기능에 대해 전파하는 자리가 되겠네요.

이 세션 역시 웹앱 위주로 설명하는 자리가 되겠네요.


16:30분부터는 타이젠 UI Framework인 EFL과 DALi에 대해 설명하는 자리도 있습니다.

타이젠 네이티브앱에서 사용하는 EFL과 DALi를 엿볼 수 있습니다.

단지 UI 컴포넌트를 설명하는 자리는 아니고,

scene graph나 opengl 가속렌더링, mainloop, thread 등에 대해 훑어보는군요.

게다가 여기에 DALi라는 3D UI 엔진도 소개할 예정입니다.

1시간이 무척이나 짧아보이네요.


이제 둘째날로 넘어갑니다.

둘째날 아침 10시에 타이젠 플랫폼의 퍼포먼스에 대한 세션이 있습니다.

Z1 스마트폰의 사양을 생각할 때,

부팅속도가 상당히 최적화되어 있다고 생각하는데요.

모바일이나 웨어러블 앱을 최적화하는 툴&팁을 공유하는 자리가 되겠군요.


그 다음 시간에는 IoTivity에 대한 세션도 있습니다.

IoTivity의 API셋을 소개하는 자리가 될 것으로 보이는데요.

Things & 센서 관리 서비스를 엿볼 수 있겠군요.

Protocol Manager Service를 사용하여 OIC 규약에 맞게 다양한 디바이스들을 연결할 수 있다고 하니 실체가 궁금해집니다.

IoTivity는 삼성전자가 리드하고 있는 만큼,

타이젠 플랫폼과도 거리를 좁히고 있나보군요.


둘째날 점심에 열리는 세션에서 타이젠의 방향을 볼 수 있습니다.

타이젠앱은 모바일, 웨어러블, TV에서 동작합니다.

다양한 프로파일, 특히 TV까지 포괄하는 플랫폼은 타이젠이 처음이겠군요.

마무리하는 세션이니만큼 타 플랫폼과 차별화되는 특장점들이 나와주겠군요.


이틀간 열리는 짧은 행사입니다.

플랫폼을 설명하기에 이틀은 터무니없이 짧죠.

그렇지만, 타이젠을 미래의 먹거리로 생각하는 사람에게는 좋은 시작이 되겠네요.


Early bird로 1,999루피(35,000원)에 입장권을 구매할 수 있습니다.

이 정도면 거의 공짜...

이참에 휴가내어 인도로 놀러가야겠군요.


끝_

  1. 김재천 2015.06.27 19:15

    잘봤습니다^^

타이젠 네이티브 앱을 개발하려면 네이티브 API를 사용해야합니다.

그리고 일부 네이티브 API는 별도의 Privilege 권한이 있어야 사용할 수 있습니다.


타이젠 네이티브 API에 어떤 Privilege가 있는지 살펴보고,

어떤 식으로 관리되고 있는지 훔쳐보도록 하겠습니다.


Tizen 2.3으로 오픈된 소스를 기반으로 정리하였습니다.



안녕하세요, Tizen 개발자 윤진입니다.


타이젠 SDK에서 관리하는 Privilege를 찾아보았습니다.

git://review.tizen.org/sdk/doc/content의 master브랜치,

api-reference/native/tools/privilege_desc.txt 파일에 Privilege가 명시되어 있습니다.

privilege_desc.txt를 그대로 가져오고,

각각 한글로 간단하게 번역해두었습니다.


http://tizen.org/privilege/account.read
Allows the application to read accounts.
계정을 읽을 수 있습니다.

http://tizen.org/privilege/account.write   
Allows the application to create, update, and delete accounts.   
계정을 생성, 수정, 삭제할 수 있습니다.

http://tizen.org/privilege/alarm   
Allows the application to set an alarm and wake the device up at the scheduled time.   
알람을 설정하고 디바이스를 알람시간에 깨울 수 있습니다.

http://tizen.org/privilege/application.launch   
Allows the application to be opened conditionally or to open another application.   
앱을 상황에 맞게 열거나 다른 앱을 런칭할 수 있습니다.

http://tizen.org/privilege/appmanager.kill   
Allows the application to close another application.
다른 앱을 닫을 수 있습니다.

http://tizen.org/privilege/appmanager.launch   
Allows the application to manage another application opening conditionally.   
다른 앱을 조건에 맞게 열 수 있습니다.

http://tizen.org/privilege/appmanager.setting   
Allows the application to read and update default application preferences.   
디폴트 앱의 설정을 읽고 수정할 수 있습니다.

http://tizen.org/privilege/appsetting   
Allows the application to manage application settings.
앱의 설정을 관리할 수 있습니다.    

http://tizen.org/privilege/appusage   
Allows the application to receive notifications about foreground application changes.   
foreground에 있는 앱의 변화를 받을 수 있습니다.

http://tizen.org/privilege/appwidgetprovider.install   
Allows the application to add Dynamic Box to the home screen.   
다이나믹박스를 홈스크린에 추가할 수 있습니다.

http://tizen.org/privilege/audiomanager.route   
Allows the application to set audio input and output routes and receive notifications about route events.   
오디오 입출력 경로를 설정하고 경로이벤트에 대한 알림을 받을 수 있습니다.

http://tizen.org/privilege/audiorecorder   
Allows the application to manage audio recording.   
오디오레코딩을 관리할 수 있습니다.

http://tizen.org/privilege/bluetooth.admin   
Allows the application to change Bluetooth settings, such as turning Bluetooth on or off, and setting the local device name.   
블루투스 설정을 변경할 수 있습니다. - 블루투스 on / off, 로컬 디바이스 이름 변경

http://tizen.org/privilege/bluetooth.gap   
Allows the application to use the Generic Access Profile (GAP), for example, to scan for and pair devices.   
Generic Access Profile(GAP)을 사용할 수 있습니다. - 페어 디바이스를 스캔하기 등

http://tizen.org/privilege/bluetooth.health   
Allows the application to use the Health Device Profile (HDP), for example, to send health data.   
Health Device Profile을 사용할 수 있습니다. - 헬스 데이타 보내기 등

http://tizen.org/privilege/bluetooth.opp   
Allows the application to use the Object Push Profile (OPP), for example, to send files.
Object Push Profile을 사용할 수 있습니다. - 파일 보내기 등

http://tizen.org/privilege/bluetooth.spp   
Allows the application to use the Serial Port Profile (SPP), for example, to send serial data.   
Serial Port Profile을 사용할 수 있습니다. - 시리얼 데이타 보내기 등

http://tizen.org/privilege/bluetoothmanager   
Allows the application to change Bluetooth system settings related to privacy and security, such as the visible mode.   
블루투스 시스템 설정(프라이버시, 시큐리티)을 변경할 수 있습니다. - visible 모드 등

http://tizen.org/privilege/bookmark.read   
Allows the application to read bookmarks.   
북마크를 읽을 수 있습니다.

http://tizen.org/privilege/bookmark.write   
Allows the application to create, update, and delete bookmarks.   
북마크를 생성, 수정, 삭제할 수 있습니다.

http://tizen.org/privilege/calendar.read   
Allows the application to read schedule and task information.   
스케쥴과 업무 정보를 읽을 수 있습니다.

http://tizen.org/privilege/calendar.write
Allows the application to create, update, and delete schedule and task information.   
스캐쥴과 업무 정보를 생성, 수정, 삭제할 수 있습니다.

http://tizen.org/privilege/callforward
Allows the application to control the call forwarding service.   
콜 포워딩 서비스를 컨트롤할 수 있습니다.

http://tizen.org/privilege/camera
Allows the application to manage device cameras to preview and capture pictures.
프리뷰를 보고 사진을 찍을 수 있습니다.

http://tizen.org/privilege/cellbroadcast
Allows the application to manage the Cell Broadcast Service (CBS).   
Cell Broadcast Service를 관리할 수 있습니다.

http://tizen.org/privilege/certificate.read
Allows the application to read certificates.   
인증서를 읽을 수 있습니다.

http://tizen.org/privilege/certificate.write
Allows the application to add, update, and delete certificates.   
인증서를 추가, 수정, 삭제할 수 있습니다.

http://tizen.org/privilege/contact.read
Allows the application to read contacts.
연락처 정보를 읽을 수 있습니다.

http://tizen.org/privilege/contact.write
Allows the application to add, update, and delete contacts.   
연락처 정보를 추가, 수정, 삭제할 수 있습니다.

http://tizen.org/privilege/content.read
Allows the application to read content.   
컨텐츠를 읽을 수 있습니다.

http://tizen.org/privilege/content.write
Allows the application to create, update, and delete content.   
컨텐츠를 추가, 수정, 삭제할 수 있습니다.

http://tizen.org/privilege/customnetaccount
Allows the application to use the Internet with a specified bearer.
특정 배러와 함께 인터넷을 사용할 수 있습니다.

http://tizen.org/privilege/datacontrol.consumer
Allows the application to access specific data exported by other applications.
다른 앱이 준 데이타에 접근할 수 있습니다.

http://tizen.org/privilege/dns
Allows the application to provide the Domain Name Service (DNS).   
Domain Name Service를 제공할 수 있습니다.

http://tizen.org/privilege/download
Allows the application to manage HTTP downloads.   
HTTP 다운로드를 관리할 수 있습니다.

http://tizen.org/privilege/geolocationpermission.read
Allows the application to read geolocation permissions.   
지리정보 권한을 읽을 수 있습니다.

http://tizen.org/privilege/geolocationpermission.write
Allows the application to delete geolocation permissions.   
지리정보 권한을 지울 수 있습니다.

http://tizen.org/privilege/http
Allows the application to communicate with the HTTP server.   
HTTP 서버와 통신할 수 있습니다.

http://tizen.org/privilege/ime
Allows the application to provide a way to input characters and symbols into an associated input field.   
소프트웨어 키보드를 제공할 수 있습니다.

http://tizen.org/privilege/imemanager
Allows the application to manage the installed input methods.    
설치된 소프트웨어 키보드를 관리할 수 있습니다.


http://tizen.org/privilege/inputmanager
Allows the application to generate touch and key events, and capture screens.    
터치, 키 이벤트를 만들고 스크린을 캡쳐할 수 있습니다.


http://tizen.org/privilege/location
Allows the application to use the user location data.  
유저의 지리데이터를 이용할 수 있습니다.  

http://tizen.org/privilege/lockmanager
Allows the application to unlock the device.   
디바이스를 언락할 수 있습니다.

http://tizen.org/privilege/messaging.read
Allows the application to receive messages, and to retrieve messages from the message boxes.   
메시지를 받고 메시지박스에서 메시지를 긁어올 수 있습니다.

http://tizen.org/privilege/messaging.write
Allows the application to write SMS, MMS, and email messages.   
SMS, MMS와 이메일을 쓸 수 있습니다.

http://tizen.org/privilege/netstatisticsmanager
Allows the application to reset network statistics.   
네트워크 정보를 리셋할 수 있습니다.

http://tizen.org/privilege/network.account
Allows the application to manage network accounts.   
네트워크 계정을 관리할 수 있습니다.

http://tizen.org/privilege/network.connection
Allows the application to manage network connections.   
네트워크 커넥션을 관리할 수 있습니다.

http://tizen.org/privilege/network.statistics
Allows the application to read network statistics.   
네트워크 정보를 읽을 수 있습니다.

http://tizen.org/privilege/networkmanager
Allows the application to update system network accounts.
시스템 네트워크 계정을 수정할 수 있습니다.

http://tizen.org/privilege/nfc.admin
Allows the application to change NFC settings, such as turning NFC on or off.   
NFC 설정을 변경할 수 있습니다. - NFC on / off

http://tizen.org/privilege/nfc.common
Allows the application to use NFC common features.   
NFC 공통 기능을 사용할 수 있습니다.

http://tizen.org/privilege/nfc.p2p
Allows the application to push NFC messages to other devices.   
다른 기기에 NFC 메시지를 푸쉬할 수 있습니다.

http://tizen.org/privilege/nfc.tag
Allows the application to read and write NFC tag information.   
NFC 태그정보를 읽고 쓸 수 있습니다.

http://tizen.org/privilege/nfcmanager
Allows the application to change NFC system settings, such as turning on or off reserved push, which sends predefined NDEF messages.   
NFC 시스템 설정을 변경할 수 있습니다. - 예약 푸쉬를 on / off 하기

http://tizen.org/privilege/notification
Allows the application to provide user notifications, such as messages and badges.   
유저 알림을 제공할 수 있습니다. - 메시지나 배지

http://tizen.org/privilege/package.info
Allows the application to receive package information.   
패키지 정보를 받을 수 있습니다.

http://tizen.org/privilege/packagemanager.info
Allows the application to receive detailed package information.   
자세한 패키지 정보를 받을 수 있습니다.

http://tizen.org/privilege/packagemanager.install
Allows the application to install or uninstall application packages.   
앱 패키지를 설치 혹은 삭제할 수 있습니다.

http://tizen.org/privilege/packagemanager.setting
Allows the application to set package configurations.   
패키지 설정값을 변경할 수 있습니다.

http://tizen.org/privilege/power
Allows the application to hold and control power states.   
파워 상태를 유지하거나 조절할 수 있습니다.

http://tizen.org/privilege/privacymanager.read
Allows the application to read privacy settings.   
프라이버시 설정값을 읽을 수 있습니다.

http://tizen.org/privilege/privacymanager.write
Allows the application to change privacy settings.   
프라이버시 설정을 변경할 수 있습니다.  

http://tizen.org/privilege/privilegemanager.read
Allows the application to read privilege information.   
프라이버스 정보를 읽을 수 있습니다.

http://tizen.org/privilege/push
Allows the application to receive push notifications.   
푸쉬 알림을 받을 수 있습니다.

http://tizen.org/privilege/secureelement
Allows the application to access to secure smart card chip such as UICC/SIM, embedded secure element, or secure SD card.   
UICC/SIM 카드에 접근할 수 있습니다.

http://tizen.org/privilege/setting
Allows the application to update or read user settings.   
유저 설정을 읽거나 수정할 수 있습니다.

http://tizen.org/privilege/settingmanager.read
Allows the application to read security or privacy settings.   
시큐리티나 프라이버시 설정을 읽을 수 있습니다.

http://tizen.org/privilege/settingmanager.write
Allows the application to change security or privacy settings.   
시큐리티나 프라이버시 설정을 변경할 수 있습니다.

http://tizen.org/privilege/shortcut.install
Allows the application to add and remove shortcuts from the home screen.   
홈스크린에서 숏컷을 추가 혹은 삭제할 수 있습니다.

http://tizen.org/privilege/smstrigger
Allows the application to receive SMS messages from a specified port.
특정 포트로부터 SMS 메시지를 받을 수 있습니다.

http://tizen.org/privilege/socket
Allows the application to communicate with other devices and servers.
다른 디바이스나 서버와 통신할 수 있습니다.

http://tizen.org/privilege/system
Allows the application to access system information.
시스템 정보에 접근할 수 있습니다.

http://tizen.org/privilege/systemmanager
Allows the application to access secure system information.
보안 시스템 정보에 접근할 수 있습니다.

http://tizen.org/privilege/telephony
Allows the application to retrieve telephony information, such as network, SIM, and call details.
텔레포니 정보를 긁어올 수 있습니다. - Network, SIM, Call 상제정보

http://tizen.org/privilege/telephonymanager
Allows the application to configure the mobile networks.
모바일 네트워크를 설정할 수 있습니다.


http://tizen.org/privilege/uimanager
Allows the application to manage UI properties.   
UI 속성을 관리할 수 있습니다.

http://tizen.org/privilege/userprofile.read
Allows the application to read the user profile.
유저 프로파일을 읽을 수 있습니다.

http://tizen.org/privilege/userprofile.write
Allows the application to manage the user profile.
유저 프로파일을 관리할 수 있습니다.

http://tizen.org/privilege/vibrator
Allows the application to turn on and use vibrate.
진동키능을 켜겨나 사용할 수 있습니다.

http://tizen.org/privilege/videorecorder
Allows the application to manage video recording with the camera.
카메라를 사용하여 비디오 녹화를 할 수 있습니다.

http://tizen.org/privilege/wappush
Allows the application to manage WAP push messages.
WAP 푸쉬 메시지를 관리할 수 있습니다.

http://tizen.org/privilege/web.privacy
Allows the application to manage the user data stored by the Web control or browser.
웹컨트롤이나 브라우저에서 저장된 유저데이터를 관리할 수 있습니다.

http://tizen.org/privilege/web.service
Allows the application to display Web content or use the Web content-related API.
웹컨텐트를 표시하고 웹컨텐트 관련 함수를 사용할 수 있습니다.

http://tizen.org/privilege/wifi.admin
Allows the application to manage Wi-Fi on the device, such as turning Wi-Fi on or off, and connecting to AP.
Wi-Fi를 관리할 수 있습니다. - 와이파이를 on / off 하고, AP에 접속하기

http://tizen.org/privilege/wifi.read
Allows the application to request Wi-Fi information.
Wi-Fi 정보를 요청할 수 있습니다.

http://tizen.org/privilege/wifi.wifidirect.admin
Allows the application to manage Wi-Fi Direct on the device.
Wi-Fi Direct 기능을 관리할 수 있습니다.

http://tizen.org/privilege/wifi.wifidirect.read
Allows the application to request Wi-Fi Direct information.
Wi-Fi Direct 정보를 요청할 수 있습니다.

http://tizen.org/privilege/wifimanager
Allows the application to manage the Wi-Fi system settings, such as updating AP information.
Wi-Fi 시스템 설정을 관리할 수 있습니다. - AP 정보 갱신 등


위에서 기술된 Privilege를 앱에서 사용하는 것이지요.

플랫폼 버전마다 사용할 수 있는 Privilege는 다를 수 있습니다.


SDK에서 개발할 때는,

- Project Explorer에서 자신의 프로젝트 내에 있는 tizen-manifest.xml 선택

- Tizen Manifest Editor에서 Privileges 탭 선택

- Add 버튼을 눌러 Privilege를 추가할 수 있습니다.



SDK 외부에서 개발할 경우에는,

각 앱의 xml파일에 직접 Privilege를 기술해야 합니다.


<?xml version="1.0" encoding="utf-8" ?>
<manifest xmlns="http://tizen.org/ns/packages" package="org.tizen.data-provider-slave" version="1.0.0" install-location="auto" support-mode="screen-reader">
    <!-- ... 생략 ... -->
    <ui-application appid="org.tizen.data-provider-slave" exec="/usr/apps/org.tizen.data-provider-slave/bin/data-provider-slave" nodisplay="true" multiple="true" type="capp" taskmanage="false">
    <!-- ... 생략 ... -->
    </ui-application>
    <privileges>
        <privilege>http://tizen.org/privilege/location</privilege>
        <privilege>http://developer.samsung.com/tizen/privilege/privacymanager.read</privilege> <!-- weather -->
    </privileges>
    <!-- ... 생략 ... -->
</manifest>


위의 코드는 git://review.tizen.org/apps/livebox/data-provider-slave의 tizen_2.3 브랜치,

org.tizen.data-provider-slave.xml 파일에서 따왔습니다.

SDK 외부에서 개발하는 앱은 위처럼 자신에게 필요한 Privilege를 xml 파일에 직접 추가해야 하지요.


Security/Tizen 2.X smack-privilege-config


앱에 추가된 Privilege는,

앱이 설치되는 시점에 Privilege 레벨에서 Smack 레벨로 변경됩니다.


git://review.tizen.org/framework/security/smack-privilege-config의 tizen_2.3 브랜치,

permissions_mobile/permissions_2_3_0 디렉토리에는 수많은 *.smack 파일이 있습니다.

그 중 EFL_org.tizen.privilege.camera.smack 파일을 열어보겠습니다.


~APP~ device::camera rw----
~APP~ mm_qcamera_daemon -w----
~APP~ privilege::tizen::camera rw----
~APP~ system::vconf_multimedia rw----


카메라를 사용하기 위해 필요한 스맥룰이 명시되어 있습니다.

~APP~은 위의 privilege를 설정한 앱의 스맥레이블로 치환될 것입니다.

간단히 내용을 살펴보면,

device::camera에 접근하기 위한 읽고 쓰는 권한,

mm_qcamera_daemon에 쓰기 권한,

privilege::tizen::camera를 읽고 쓰는 권한,

system::vconf_multimedia를 읽고 쓰는 권한 등의 스맥권한을 부여합니다.


이렇게 부여된 스맥레이블은,

네이티브 API가 사용하는 파일/디렉토리 등에 접근할 수 있게 할겁니다.

만약 제대로된 스맥레이블 없이 파일/디렉토리에 접근하려하면 Permission denied 에러가 나오겠죠.


git://review.tizen.org/framework/security/privilege-checker의 tizen_2.3 브랜치,

capi/src/privilege_checker.c 소스를 살펴보면,

앱이 Privilege를 가지고 있는지 여부를 직접 체크하는 부분도 있습니다.


int privilege_checker_check_package_privilege(const char* package_id, const char* privilege_name)
{
    // ... 생략 ...
    //find privilege in cache
    for(i=0; i<g_cached_privileges_size; i++)
    {
        if(hash_value == g_cached_privileges[i].hash_value)
        {
            matched_index = i;
            ++matched_cnt;
        }
    }

    if(matched_cnt == 1){
        LOGD("Found cached hash privilege");
        return PRIV_CHECKER_ERR_NONE;

    }
    // ... 생략 ...
    LOGD("Not Found cached privilege");

    // ... 생략 ...
    res = pkgmgrinfo_pkginfo_foreach_privilege(handle, __privilege_checker_privilege_list_by_pkgid_cb, user_data);
    // ... 생략 ...

    TryReturn(g_isMached == true, PRIV_CHECKER_ERR_INVALID_PRIVILEGE, "[PRIV_CHECKER_ERR_INVALID_PRIVILEGE] %s privilege denied", privilege_name);

    return PRIV_CHECKER_ERR_NONE;
}

그래서 API를 수행할 때, API를 호출한 앱의 권한을 체크하여 수행여부를 결정하게 됩니다.

예를 들어,

git://review.tizen.org/framework/api/application의 tizen_2.3 브랜치,

app_control/app_control.c 소스를 보면 Call Operaion로 런칭요청이 온 경우 Privilege가 있는지 체크합니다.


int app_control_send_launch_request(app_control_h app_control, app_control_reply_cb callback, void *user_data)
{
    // ... 생략 ...
    // Check the privilege for call operation
    if (!strcmp(operation, APP_CONTROL_OPERATION_CALL))
    {
    // ... 생략 ...

        ret = privilege_checker_check_package_privilege(pkg_id, "http://tizen.org/privilege/call");
        pkgmgrinfo_appinfo_destroy_appinfo(app_info);
        if (ret != PRIV_CHECKER_ERR_NONE)
        {
            if (ret == PRIV_CHECKER_ERR_INVALID_PRIVILEGE)
            {
                return app_control_error(APP_CONTROL_ERROR_PERMISSION_DENIED, __FUNCTION__, "no privilege for Call operation");
            }
        }
    }
}


Privilege는 Smack으로 치환되어 관리될 수 있고,

Privilege 자체로 관리될 수도 있습니다.


끝_


* SMACK에 대한 이야기를 쌓아본다

http://storycompiler.tistory.com/51


* References

https://wiki.tizen.org/wiki/Security/Tizen_2.X_smack-privilege-config

https://wiki.tizen.org/wiki/Security/Tizen_2.X_cert-svc#Additional_certificate_service_APIs

+ Recent posts