2014년도_하이브리드 모바일플랫폼 커리큘럼

Download Report

Transcript 2014년도_하이브리드 모바일플랫폼 커리큘럼

하이브리드 모바일플랫폼
커리큘럼
2014년도
1일차 : 클라이언트 교육 과정 (이론/실습)
시간
내용
교육 방식
09:30~10:20
*하이브리드 모바일 플랫폼의 이해
*개발환경설치(이클립스,inspector등)
강의 / 실습
10:30~11:40
IDE 개발환경 이해 / 실습
-프로젝트 생성, 빌드, 디바이스 연동, 디버깅, 배포
강의 / 실습
13:00~14:00
native 개발 가이드(안드로이드, iOS)
- 프로젝트 환경 설정.
- native 화면 연동.
- MCore web–native 데이터 공유.
- MCore 확장 interface 함수 개발.
- MCore native network manager 개발.
강의 / 실습
13:00~14:00
JS, CSS, HTML
API / 개발 방법소개
- 터치 이벤트 사용, jQuery, API 사용, 실습(Template를 프로젝트 생성/ build - 그
룹웨어)
강의 / 실습
기본 정보
 기술 WIKI 사이트 : http://docs.morpheus.kr/mcore/main.php
 로그인 ID / PW : education / education
 온라인 지원시스템 사용법
 사용자 계정 생성(회원가입) : http://www.morpheus.kr/index.php?act=dispMemberSignUpForm&mid=home
(지원시스템은 user 별로 접근 가능하므로 반드시 회원가입을 해주시기 바랍니다)
 Support Menu 이동
 Project Support 메뉴의 프로젝트 게시판을 통해 이슈 등록
 Project Support 게시판은 프로젝트 시작 전에 사용자 그룹이 등록되어야 활성화 됩니다.
 프로젝트 및 사용자그룹 생성은 유라클 플랫폼 컨설팅팀 김주옥 팀장 [email protected] (010-9214-1827 )
에게 이메일로 신청해 주시기 바랍니다.
=> 예) 등록사용자 email/이름/휴대폰번호 | [email protected] / 홍길동 / 010-XXXX-XXXX
3
하이브리드 모바일플랫폼의 이해 (세부내용)
HYBRID APP?
하이브리드 모바일플랫폼의 이해 (세부내용)
HYBRID CAR
휘발유 + 전기
하이브리드 모바일플랫폼의 이해 (세부내용)
HYBRID APP
Native
(iOS, Android, etc)
+
Web
(HTML5, CSS3, JS)
하이브리드 모바일플랫폼의 이해 (세부내용)
‘HELLO WORLD’ APP
네이티브 개발시
- iOS 개발자
- Android 개발자
각 OS 별 전문 개발자가 필요하고,
각 OS 별로 개발해야 함.
하이브리드 모바일플랫폼의 이해 (세부내용)
‘HELLO WORLD’ APP
하이브리드 개발시
- 웹 개발자
HTML5 + CSS3 + JS
웹 개발 기술만으로도
iOS, Android 등 각 OS 별 앱 동시 개발 가능!
하이브리드 모바일플랫폼의 이해 (세부내용)
MORPHEUS
하이브리드 앱 개발 위한 프레임워크
하이브리드 모바일플랫폼의 이해 (세부내용)
ONE SOURCE MULTI USE
HTML5 + CSS3 + JS
스마트폰, 태블릿(iOS, Android)
하이브리드 모바일플랫폼의 이해 (세부내용)
동적 서비스 업데이트
• 최초 한 번만 앱 스토어 등록
• 이후 동적으로 앱 리소스 업데이트
• 검수 과정 필요없기 때문에, 업데이트 즉시 반
영 가능
하이브리드 모바일플랫폼의 이해 (세부내용)
프레임워크 구성
HTML
CSS
JS
WebView
WN Interface(Web-Native Interface)
Activity
Network
Common
Data
Native
Controller
Manager
Handler
Handler
Activities
Media
Event
Storage
Control
Control
Control
Device
Control
Notification
iOS
Android
클라이언트 IDE 개요
IDE
Eclipse기반 Plug-in으로 개발된 Morpheus IDE는 개발 생산성 향상을 위해 설계되었으며 다음과 같은 기능을 제공 합니다.
15
Wizard 기반 프로젝트 생성
Wizard
Wizard를 이용하여, OS 별 프로젝트를 손쉽게 생성할 수 있도록 제공합니다.
16
Build Tool 지원
Build Tool
One Source Multi Use가 가능한 OS별 Build 툴을 지원합니다.
안드로이드 / 아이폰 환경 설정 및 Build 지원
17
가이드앱 제공
Guide App
개발 생산성 향상을 위해 다양한 Template를 제공 합니다.
컴퍼넌트 가이드 앱 구성
1. UI Kit
1)
2)
3)
4)
5)
레이아웃
네비게이션
컨텐츠뷰
컨트롤
미디어
1)
2)
인트로, 로그인, 메인
사이드 메뉴, 전체메뉴, 조회 등등
1)
page, data, sec, apps, net 등 Native 함수 연동
2. Sample
3. API
Morpheus mobile UI framework
• HTML5/CSS3/JS 기반의 Web 리소스 사용
• 멀티 플랫폼 지원 가능
• Phone/Tablet, 해상도/사이즈에 따른
반응형 레이아웃 구조(Responsive Web)
• 터치 기능 및 애니메이션 효과 가능
• Native Device 연동 / Native 화면 구현
• 다양한 플러그인 제공
18
Browser Emulator 제공
웹 인스펙터를 통해, 빠르고, 다양한 형태의 디버깅을 지원합니다.
웹 인스펙터 지원
• 웹 디버깅
• HTML 요소(Elements)검사
- Styles(CSS)
- Properties
- Event Listeners
• 리소스 관리
• 네트워크 현황
• 스크립트 디버깅
- Watch Excpressions
- Call Stack
- Breakpoints
- Worker threads
• 콘솔(Console)
19
Browser Emulator 제공
다양한 해상도 지원이 가능한 Emulator 와 웹표준 / 장애인 차별 금지법 준수를 체크 할 수 있는 도구를 제공합니다.
다양한 해상도 지원
웹 표준 / 장애인 차별 금지법 준수 체크 기능
20
Direct View 제공
생산성 향상을 위해, 수정된 리소스를 재 컴파일 하지 않고, 실시간으로 확인 할 수 있도록 Direct View 기능을 제공합니다.
(UI, 업무로직, 다양한 이벤트)
로컬 서버를 이용한 DirectView 기능
21
라이브러리 업데이트 기능
기능이 추가된 라이브러리, Plug-In, 템플릿을 실시간으로 업데이트가 가능하도록 라이브러리 Manager를 지원합니다.
라이브러리 Manager 기능
22
Code 자동완성 기능
초보개발자들도 함수를 손쉽게 사용할 수 있도록, Code 자동완성 기능을 지원합니다.
Code 자동완성 기능
23
하이브리드 모바일플랫폼의 이해 (세부내용)
MORPHEUS 개발 가이드
http://docs.morpheus.kr/
하이브리드 모바일플랫폼의 이해 (세부내용)
리소스 폴더 구조
Manifest.xml: App 환경 설정 파일
morpheus.mobile.lic: 라이센스 파일
리소스 배포시, zip 파일은 res 폴더가 포함된채
로 압축되어야 하며, 위 2개 파일은 배포 대상이
아님.
하이브리드 모바일플랫폼의 이해 (세부내용)
화면 상태 이벤트 함수
M.onReady(function(event) {
// 화면 로딩 완료시, 실행
});
화면 로드시 이벤트 발생 순서
1. DOMContentLoaded
2. load
3. M.onReady
M API 사용은 3번 M.onReady 함수가 호출된 시점 이후에 사용해야 정상 동
작
하이브리드 모바일플랫폼의 이해 (세부내용)
화면 상태 이벤트 함수
M.onHide(function(event) {
// 화면 이동시, 현재 화면이 숨겨질때 실행
});
하이브리드 모바일플랫폼의 이해 (세부내용)
화면 상태 이벤트 함수
M.onRestore(function(event) {
// 화면 이동시, 숨겨졌던 화면이 다시 로딩될 때
실행
});
하이브리드 모바일플랫폼의 이해 (세부내용)
화면 상태 이벤트 함수
M.onResume(function(event) {
// 사용자에 의해서 앱이 background에서
foreground로 올라올 때 실행
});
하이브리드 모바일플랫폼의 이해 (세부내용)
화면 상태 이벤트 함수
M.onPause(function(event) {
// 앱이 foreground에서 background로 전환될 때
실행
});
하이브리드 모바일플랫폼의 이해 (세부내용)
화면 상태 이벤트 함수
M.onDestroy(function(event) {
// 현재 화면이 스택에서 제거될 때 실행
});
하이브리드 모바일플랫폼의 이해 (세부내용)
화면 상태 이벤트 함수
M.onBack(function(event) {
// Android일 경우, 하드웨어 back키가 눌렸을 때
실행
});
하이브리드 모바일플랫폼의 이해 (세부내용)
API
화면 이동
M.page.html(url, setting);
예제:
M.page.html(‘B.html’);
하이브리드 모바일플랫폼의 이해 (세부내용)
API
이전 화면으로 이동
M.page.back(setting);
예제:
M.page.back();
하이브리드 모바일플랫폼의 이해 (세부내용)
API
서버와 통신
M.net.http.send(setting);
예제:
M.net.http.send({
server: ‘server-name’,
trcode: ‘interface-code’,
reqData: {curPage: ‘1’},
onSuccess: function(receivedData) {
// receivedData 는 서버가 응답하여 보내주는 데이터로 JSON 형식
}
});
하이브리드 모바일플랫폼의 이해 (세부내용)
API
네이티브 컴포넌트 연동 - 날짜
M.pop.date(setting, callback);
예제:
M.pop.date({
type: ‘YMD’,
initDate: ‘20140409’
}, function(result) {
console.log(result.yyyy + ‘년’ + result.MM + ‘월’ + result.dd + ‘일’);
});
native 개발 (Android)
Android native Guide
native 개발 (Android)
목차
-
android project view.
native 화면 연동.
web(js)-native 데이터 공유.
wn 확장 Interface 함수 개발.
native network manager 개발.
native Activity 생성 시 주의 사항.
- WebView 객체가 포함된 native Activity의 경우,
clearView, clearHistory, clearCache 함수를 호출해줘야함.
- 예제 코드.
WebView webView = null;
webView.clearView( );
webView.clearHistory( );
webView.clearCache(true);
native 개발 (Android)
android project view(1/3)
파일
설명
BaseActivity.java
- 플랫폼에서 화면구성을 하는 Activity로 내부 MainActivity를 상속 받아서
생성한 Activity임.
Startup.java
- MAIN LAUNCHER Activity로 App이 구동 될때 처음으로 생성되는 Activity
임.
(Push 기능을 사용하고자 할때 Push관련 초기 로직이 추가되는 파일임.)
ExtendApplication.java
- Android Application Class를 상속받은 파일로 확장 구현시 필요한 소스를
추가 할수 있음.
ExtendWNInterface.jav
a
- 플랫폼에서 기본으로 제공하지 않는 기능을 추가 시
ExtendWNInterface 파일에 메소드(함수)를 구현하는 파일.
(tip)필요한 기능에 대한 Class 생성 후 ExtendWNInterface에서 객체 생성
형태로 구현하시면 각각의 기능을 파일별로 관리 가능.
native 개발 (Android)
android project view(2/3)
파일
설명
HttpDataNetworkManager.j
ava
- 서버와 전문 통신 시 사용되는 HTTP 네트워크 manager.
- WN 함수 중 M.net.http.send(setting), M.net.res.update(setting) 함수
의 native 함수와 연관되어 있음.
- (알림) 사이트에 따라 HttpDataNetworkManager 파일을 참고하
여 legacy 시스템과 통신하는 HTTP 네트워크 manager 생성 가능함.
ImageList1Activity.java
- WN 함수 중 M.media.library() 함수에서 PHOTO 에 MULTI 값으로
설정할 경우 이미지를 선택할수 있도록 만들어 놓은 Activity임. 화면
UI수정 가능.
ImageList2Activity.java
- WN 함수 중 M.media.library() 함수에서 PHOTO 에 MULTI 값으로
설정할 경우 이미지를 선택할수 있도록 만들어 놓은 Activity임. 화면
UI수정 가능.
StartActivity.h
- 앱의 시작 화면을 HTML 페이지가 아닌 native 화면으로 구성 시 사용
할 수 있는 샘플(sample) native class.
- Manifest.xml 필드 중 <startpage>의 <name> name 필드에 native
class 이름을 입력.
- ex) StartActivity class를 시작 화면으로 설정 시
<startpage>
<name>StartActivity</name>
<orient>default</orient>
</startpage>
native 개발 (Android)
android project view(3/3)
파일/폴더
설명
이외의 나머지 Activity
- Sample로 추가 되어 있는 Activity.
ListAdapter.java
- SampleNativeListActivity에서 사용하는 adapter 파일.
native 개발 (Android)
native 화면 연동(1/)
- Native Activity 생성하기.
• 부모 class AbstractActivity 를 상속 받아서 Activity를 생성 시, 플랫폼의 데이터 공유 및 화면 이동 함수
사용 가능.
화면 이동
웹(html)→native 화면
예제
M.page.native('SampleNative'/*class 이름*/, {
action: 'NO_HISTORY' /*NO_HISTORY | NEW_SCR | CLEAR_TOP */
});
native 화면 연동(2/)
- Native Activity 생성하기.
• 부모 class AbstractActivity 를 상속 받아서 Activity를 생성 시, 플랫폼의 데이터 공유 및 화면 이동 함수
사용 가능.
화면 이동
예제
// 파라메터 설정
Parameters pubParams = new Parameters();
// 파라메터 정보를 보내는 경우
Parameters inParam = new Parameters();
inParam.putParam("REQUEST_PARAM", "이 메시지는 네이티브 화면에서 보냅니다.");
inParam.putParam("param2", "테&스트", "UTF-8");
pubParams.putParam("PARAMETERS", inParam.getParamString());
// 웹 컨테이너에서 보여질 html 페이지
pubParams.putParam("TARGET_URL", CommonLibHandler.getInstance().g_strHTMLDirForWeb +
"www/html/mp_wn_web.html");
native 화면→웹 화면(html)
// 화면 방향 설정 : DEFAULT,PORT,LAND,ALL
pubParams.putParam("ORIENT_TYPE", "PORT");
// Action type : NEW_SCR, NO_HISTORY, CLEAR_TOP
int actionType = CommonLibUtil.getActionType("NEW_SCR");
// 하이브리드 웹화면으로 이동시에는 타겟 클래스 인텍스가 반드시 LibDefinitions.libactivities.ACTY_MAIN 이어야 한다.
setViewForMovingScreen(getRootView(thisObj));
// Animation Type : DEFALUT, NONE, SLIDE_LEFT, SLIDE_RIGHT, SLIDE_TOP, SLIDE_BOTTOM,
ZOOM_IN,ZOOM_OUT,FADE,MODAL_UP,MODAL_DOWN
Controller.getInstance().actionMoveActivity(LibDefinitions.libactivities.ACTY_MAIN,
actionType, thisObj,
"SLIDE_RIGHT",pubParams);
native 화면 연동(3/)
- Native Activity 생성하기.
• 부모 class AbstractActivity 를 상속 받아서 Activity를 생성 시, 플랫폼의 데이터 공유 및 화면 이동 함수
사용 가능.
화면 이동
예제
// 파라메터 설정
Parameters pubParams = new Parameters();
// 파라메터 정보를 보내는 경우
Parameters inParam = new Parameters();
inParam.putParam("native_param1", "네이티브 파라메터 값1");
inParam.putParam("native_param2", "네이티브 바라메터 값2(테&스트)", "UTF-8");
pubParams.putParam("PARAMETERS", inParam.getParamString());
// 화면 방향 설정 : DEFAULT,PORT,LAND,ALL
pubParams.putParam("ORIENT_TYPE", "PORT");
native 화면→native 화면
// Action type : NEW_SCR, NO_HISTORY, CLEAR_TOP
int actionType = CommonLibUtil.getActionType("NEW_SCR");
//NANIVE_ANIM
setViewForMovingScreen(getRootView(thisObj));
// Animation Type : DEFALUT, NONE, SLIDE_LEFT, SLIDE_RIGHT, SLIDE_TOP, SLIDE_BOTTOM,
ZOOM_IN,ZOOM_OUT,FADE,MODAL_UP,MODAL_DOWN
Controller.getInstance().actionMoveActivity(LibDefinitions.libactivities.ACTY_CUSTOM,
actionType, thisObj,
"ZOOM_IN",
pubParams, "SampleActivity");
native 화면 연동(4/)
- Native Activity 생성하기.
• 부모 class AbstractActivity 를 상속 받아서 Activity를 생성 시, 플랫폼의 데이터 공유 및 화면 이동 함수
사용 가능.
화면 이동
이전 화면
예제
// 파라메터 설정
Parameters backParam = new Parameters();
backParam.putParam("backParam1", "backParamValue1");
backParam.putParam("backParam2", "하&하하", "UTF-8");
backParam.putParam("backParam3", "한글을 보낸다.");
// Animation Type : DEFALUT, NONE, SLIDE_LEFT, SLIDE_RIGHT, SLIDE_TOP, SLIDE_BOTTOM,
ZOOM_IN,ZOOM_OUT,FADE,MODAL_UP,MODAL_DOWN
Controller.getInstance().actionHistoryBack(backParam, "MODAL_DOWN");
native 개발 (Android)
웹(js)-native 데이터 공유.(1/3)
구분
파라미터
데이터 공유
(1/3)
전역
데이터 공유
(2/3)
영속
데이터 공유
(3/3)
설명
native class
- 화면 전환 간에 데이터가 전달 됨.
- URL의 key=value 파라미터 전달 방식
Parameters
- memory 저장 방식.
- 앱 running 중 get/set 가능.
- 앱 off 시 memory에서 사라짐.
CommonLibUtil
- storage 저장 방식.
- 앱 running 중 get/set 가능.
CommonLibUtil
native 개발 (Android)
웹(js)-native 데이터 공유.(2/3)
구분
동작
웹(js)식 방식(예제)
- 화면 이동 함수에서 아래와 같
이 param 변수에 값을 설정.
native 방식(예제)
- Parameters 객체를 생성 후 화면 이동 함수의 파라미터로 전달.
Parameters backParam = new Parameters();
파라미터
데이터 공
유
(1/3)
SET
M.page.back({
param : {'key_a':'b','key_c':'d'}
});
backParam.putParam(“backParam1”, “TestValue1”);
backParam.putParam(“backParam2”, “테스트”, “UTF-8”);
backParam.putParam(“backParam3”, “한글”);
Controller.getInstance().actionHistoryBack(backParam, “DEFAULT”);
(알림) AbstractActivity class 상속 받은 class에서만 사용 가능.
var key_a = M.data.param("key_a");
GET
String data = getParamsString();
Parameters receivedParams = new Parameters(data);
(알림) AbstractActivity class 상속 받은 class에서만 사용 가능.
native 개발 (Android)
웹(js)-native 데이터 공유.(3/3)
구분
동작
전역
데이터 공
유
(2/3)
SET
GET
SET
영속
데이터 공
유
(3/3)
GET
웹(js)식 방식(예제)
native 방식(예제)
M.data.global(“g_key”, “value”);
CommonLibUtil.setVariable(”g_key”, ”value”);
var g_key =
M.data.global(“g_key”);
String g_key = CommonLibUtil.getVariable(”g_key”);
M.data.storage(“s_key”, “value”);
CommonLibUtil.setUserConfigInfomation(”s_key”, ”value”,
Context);
var s_key =
M.data.storage(“s_key”);
String s_key =
CommonLibUtil.getUserConfigInfomation(”s_key”,
Context);
native 개발 (Android)
WN 확장 Interface 함수 개발.(1/4)
확장 interface 추가하기.
→ WIKI API에 정의되지 않은 native 함수를 추가 및 js에서 호출.
→ 동기/비동기 방식의 함수 지원.
동기
: native 함수의 return 값이 화면으로 바로 전달되는 방식.
비동기 : native의 결과 값을 js 함수를 호출하여 전달되는 방식.
→ 권장
기능 추가 시, ExtendWNInterface 를 연결고리로 사용하여 기능별 Class 파일을 구현하여 코드의 모듈
화를 권장.
동기식 예제소스)
비동기식 예제소스)
native 개발 (Android)
WN 확장 Interface 함수 개발.(2/4)
native 함수 정의 제약 사항.
→ 함수의 접근지정자가 public 으로 설정되어야 정상 동작함
Public String syncTest(String param1, String param2);
→ 함수의 매개변수 / 반환 타입은 (String ) 타입 만을 지원.
Public String syncTest(String param1, String param2);
→ callback Function 구현시 UIThread 사용
callerObject.runOnUiThread(new Runnable() {
@Override
public void run() {
webView.loadUrl(“……………”);
}
});
native 개발 (Android)
WN 확장 Interface 함수 개발.(3/4)
- WN2Common 함수 정의.
function test_WN2Common(param1, param2)
{
var _param1 = param1 || '';
var _param2 = param2 || '';
return WN2Common(“syncTest”/*native함수이름*/, _param1, _param2);
}
- WN2CommonAsync 함수 정의.
function test_WN2CommonAsync(callbcak_function, param1, param2)
{
var _callback = callbcak || function() {};
var _param1 = param1 || '';
var _param2 = param2 || '';
(주의) WN2Common/WN2CommonAsync native 함수 호출.
→ 입력된 native 함수 이름의 대/소문자가 일치 해야 함.
→ 입력된 파라미터의 개 수가 일치 해야 함.
→ WN2CommonAsync 함수의 경우
native로 전달할 js 함수는 M.buffer.on( ) 함수로 wrapping 되어
야 함.
WN2CommonAsync(“asyncTest” /*native함수이름*/, M.buffer.on(_callback), _param1,
_param2);
}
native 개발 (Android)
WN 확장 Interface 함수 개발.(4/4)
- WN2Common 함수 사용 예제.
// WN2Common 테스트 코드.
var result = test_WN2Common("안녕", "하세요!");
alert("result : " + result);
- WN2CommonAsync 함수 사용 예
제.
// WN2CommonAsync 응답(CB) 함수.
function test_CBAsync(p1, p2)
{
var rst = "cb result = p1:" + p1 + ", p2:" + p2;
alert(rst);
};
// WN2CommonAsync 테스트 코드.
test_WN2CommonAsync(test_CBAsync, "니먼", "하오!");
(*) 주의
⇒ javascript 함수 객체(object)가 전달 되어
야 함.
→
OK : test_CBAsync
→ NOT OK : “test_CBAsync”
native 개발 (Android)
native network manager 개발.(1/4)
- WHAT ?
⇒ 플랫폼 내부의 network provider와 interface(요청/응답) 기능.
network provider → network resource에 대한 요청 및 응답을 대행하는 플랫폼 모듈
(ex, android provider).
- HOW ?
⇒ 상속 받아야 할 class : AsyncHttpNetwork
⇒ 구현해야 할 메서드
→ requestData(), setRequestData()← request 기능.
→ getResponseData()
→ handlingError()
← response 기능.
← 내부 Error 및 network Error 처리 기능.
⇒ 기 생성되어 있는 HttpDataNetworkManager class를 참고하여 신규로 생성.
native 개발 (Android)
native network manager 개발.(2/4)
- network request / response flow
화면(js)
network manager
<requestData()>
<getResponseData()>
native
플랫폼
network provider
<AsyncHttpNetwork>
network
native 개발 (Android)
native network manager 개발.(3/4)
- HttpDataNetworkManager
→ WN 함수 중 M.net 함수의 native request method.
ex) M.net.http.send(setting), M.net.res.update(setting)
native method
call
(request)
native 개발 (Android)
native network manager 개발.(4/4)
- HttpDataNetworkManager
→ WN 함수 중 M.net 함수로 response 전달 method.
ex) M.net.http.send(setting), M.net.res.update(setting)
native response
native 개발 (Android)
native network manager 개발.(1/3)
- native Activity Network method
→ 통신 요청 메서드
native 개발 (Android)
native network manager 개발.(2/3)
- native Activity Network method
→ 통신 수신 메서드
native 개발 (Android)
native network manager 개발.(3/3)
- native Activity Network method
→ Error 처리 메서드
native 개발 (iOS)
iOS native Guide
native 개발 (iOS)
목차
-
iOS 개발 환경 및 유의 사항.
iOS Project View.
native 화면 연동.
MCore web(js)-native 데이터 공유.
MCore 확장 Interface 함수 개발.
MCore native network manager 개발.
native 개발 (iOS)
iOS 개발 환경 및 유의 사항
- iOS 개발 환경
⇒ Xcode 5.x 이상 버전(OS X)
- 유의(주의) 사항
⇒ (*주의) 인증서(APP, PUSH) 사용 기간 365일(1년)
함.
⇒ 인증서 만료 전에 인증서(APP, PUSH)를 갱신(60일 전부터 가능)해야
⇒ 참고 사이트
https://developer.apple.com/kr/support/technical/certificates/
https://developer.apple.com/kr/support/ios/program-renewals.html
native 개발 (iOS)
iOS project view(1/4)
파일
[email protected]
설명
- iphone 4-inch 지원을 위한 png 이미지 파일.
MorpheusAppDelegate.h
- UIApplicationDelegate 관련된 함수가 구현되어 있음.
- 플랫폼을 start up 시키는 method(함수)가 존재함.
ExtendWNInterface.h
- 플랫폼에서 기본으로 제공하지 않는 기능을 추가 시
ExtendWNInterface 파일에 method(함수)를 구현하는 파
일.
- iOS의 경우, category를 이용하여 구현하면 모듈화가 가
능함.
PPHybridViewController.h
- iOS 플랫폼의 기본 화면을 구성하는 class 파일.
- 부모 class에 UIWebView를 member로 가지고 있음.
native 개발 (iOS)
iOS project view(2/4)
파일
설명
HttpDataNetworkManager.h
- 서버와 전문 통신 시 사용되는 HTTP 네트워크 manager.
- WN 함수 중 M.net.http.send(setting), M.net.res.update(setting) 함수
의 native 함수와 연관되어 있음.
- (알림) 사이트에 따라 HttpDataNetworkManager 파일을 참고하
여 legacy 시스템과 통신하는 HTTP 네트워크 manager 생성 가능함.
HttpFileDownloader.h
- (알림) 사용되지 않음(old version use only).
- 리소스 동적 업데이트 중 서버 플랫폼에 있는 zip 파일을 다운로드 하
는 class.
HttpResourceDownloader.h
- 리소스 동적 업데이트 과정 중 서버 플랫폼에 있는 zip 파일을 다운로
드 하는 class.
- 리소스 동적 업데이트와 관련된 Manifest.xml 필드는<resource> 필드임.
StartActivity.h
- 앱의 시작 화면을 HTML 페이지가 아닌 native 화면으로 구성 시 사용
할 수 있는 샘플(sample) native class.
- Manifest.xml 필드 중 <startpage>의 <name> name 필드에 native class
이름을 입력.
- ex) StartActivity class를 시작 화면으로 설정 시
<startpage>
<name>StartActivity</name>
<orient>default</orient>
</startpage>
native 개발 (iOS)
iOS project view(3/4)
파일/폴더
설명
Info.plist
- Xcode project 설정 파일.
InfoPlist.strings
- Xcode project에서 사용 할 수 있는 localized string 설정 파일.
main.m
- 앱 start up 시 entry point 함수가 정의된 파일.
PPAppDelegate.h
- MorpheusAppDelegate class를 상속한 class 파일.
- UIApplicationDelegate 함수가 구현되어 있음.
Prefix.pch
- pre compiled header 파일
- 프로젝트에서 공통으로 사용되는 class가 import 되어 있음.
MLibrary
- MCore.license : /res/mcore.mobile.lic 파일을 parsing 하는 라이브러리.
- MCore.xx.xx.xx : 플랫폼 코어 framework 폴더.
- MAddon 이하 폴더 : 플랫폼 Addon framework 폴더.(core’s plugin
module)
native 개발 (iOS)
res 폴더 project에 추가하기(4/4)
- step #1(추가 방법)
메뉴
⇒ Xcode → File → Add Files to “추가할 프로젝트” 클릭.
단축키 ⇒ option + command + A 입력.
- step #2(추가 방법)
Folders의 Create folder references for any added folders 선택.
Add to targets “추가할 프로젝트” 선택.
- step #3(추가 완료 화면)
native 개발 (iOS)
native 화면 연동.(1/2)
- native 화면 개발 하기.
⇒ UIViewController class를 이용하여 일반적인 native 화면을 생성.
⇒ 부모 class를 PPNativeViewController 로 변경 시, 플랫폼의 데이터 공유 및 화면 이동 함수 사용 가능.
PPNativeViewController의 화면 이동 함수
설명
- (void) moveToWebOnNewActWithUrl:(NSString*)url
paramObj:(PPParameters *)pParameters
action:(PPActionType)pActionType
orient:(PPSupportOrientation)pOrientationType
animation:(PPAnimationType)pAnimationType;
native 화면에서 WEB 화면(HTML)으로 이동하는 함수.
- (void) moveToNativeActWithClass:(Class)className
paramObj:(PPParameters *)pParameters
action:(PPActionType)pActionType
orient:(PPSupportOrientation)pOrientation
animation:(PPAnimationType)pAnimationType;
native 화면에서 native 화면으로 이동하는 함수.
- (void) historyBackWithParamObject:(PPParameters *)pParameters
animation:(PPAnimationType)pAnimationType;
native 화면에서 이전 화면으로 이동하는 함수.
- (BOOL) moveClearTop:(NSString *)pKey
params:(PPParameters*)pParameters
animation:(PPAnimationType)pAnimationType;
PPActionType 타입이 PPActionClearTop인 화면 이동 함수.
⇒ WEB 화면(HTML), native 화면 둘 다 사용가능함.
native 개발 (iOS)
native 화면 연동 예제.(2/2)
화면 이동
예제
웹(html)→native 화면
M.page.native('SampleNative'/*class 이름*/, {
action: 'NO_HISTORY' /*NO_HISTORY | NEW_SCR | CLEAR_TOP */
});
native 화면→웹 화면(html)
[self moveToWebOnNewAct:@"/www/html/yepp.html"
paramObj:nil
action:PPActionNewScreen /* PPActionNewScreen | PPActionNoHistory | PPActionClearTop */
orient:PPSupportOrientationAll
animation:PPAnimationDefault];
native 화면→native 화면
[self moveToNativeActWithClass:[SampleTwoNativeViewController class]
paramObj:nil
action:PPActionNewScreen /* PPActionNewScreen | PPActionNoHistory | PPActionClearTop */
orient:PPSupportOrientationAll
animation:PPAnimationDefault];
이전 화면
[self historyBackWithParamObject:nil
animation:PPAnimationDefault];
native 개발 (iOS)
웹(js)-native 데이터 공유.(1/3)
구분
파라미터
데이터 공유
(1/3)
전역
데이터 공유
(2/3)
영속
데이터 공유
(3/3)
설명
native class
- 화면 전환 간에 데이터가 전달 됨.
- URL의 key=value 파라미터 전달 방식
PPParameters
- memory 저장 방식.
- 앱 running 중 get/set 가능.
- 앱 off 시 memory에서 사라짐.
PPAppContext
- storage 저장 방식.
- 앱 running 중 get/set 가능.
PPAppContext
native 개발 (iOS)
웹(js)-native 데이터 공유 예제.(2/3)
구분
동작
웹(js)식 방식(예제)
native 방식(예제)
- 화면 이동 함수에서 아래와 같이 param 변수에 값
을 설정.
- PPParameters 객체를 생성 후 화면 이동 함수의 파라미터로 전
달.
M.page.back({
param : {'key_a':'b','key_c':'d'}
});
PPParameters* param = [[PPParameters alloc] init];
[param setObject:@"'key_a'" forKey:@"b"];
[param setObject:@"'key_c'" forKey:@"d"];
SET
파라미터
데이터 공유
(1/3)
[self historyBackWithParamObject:param
animation:PPAnimationDefault];
[param autorelease];
(알림) PPNativeViewController class 상속 받은 class에서만 사용
가능.
var key_a = M.data.param("key_a");
GET
NSString *key_a = [self.parameters objectForKey:@"'key_a'"];
(알림) PPNativeViewController class 상속 받은 class에서만 사용
가능.
native 개발 (iOS)
웹(js)-native 데이터 공유 예제.(3/3)
구분
전역
데이터 공유
(2/3)
영속
데이터 공유
(3/3)
동작
SET
GET
SET
GET
웹(js)식 방식(예제)
native 방식(예제)
M.data.global(“g_key”, “value”);
_setGlovalValue(@”g_key”, @”value”);
var g_key = M.data.global(“g_key”);
NSString *g_key = _getGlovalValue(@”g_key”);
M.data.storage(“s_key”, “value”);
_setStorageValue(@“s_key”, @”value”);
var s_key = M.data.storage(“s_key”);
NSString *s_key = _getStorageValue(@“s_key”);
native 개발 (iOS)
WN 확장 Interface 함수 개발.(1/5)
- 확장 interface 추가하기.
→ WIKI에 정의되지 않은 MCore API를 추가 할 수 있음.(= MCore 확장 API)
→ MCore 확장 API는
⇒ native 함수의 구현 및
⇒ native 함수를 호출하는 js 함수 구현.
→ 동기/비동기 방식의 함수 지원.
⇒ 비동기(non-blocing)
- native의 결과 값을 js 함수(js callback)를 호출하여 전달되는 방식.
- WN2CommonAsync js 함수를 사용.
⇒ 동기(blocking)
- native 함수의 return 값이 화면으로 바로 전달되는 방식.
- WN2Common js 함수를 사용.
→ native coding
⇒ ExtendWNInterface.m 파일에 js에서 정의한 native 함수 정의.
⇒ (권장)신규 기능 추가 시, ExtendWNInterface class의 ”Objective-C category”를 이용.
native 개발 (iOS)
WN 확장 Interface 함수 개발.(2/5)
- native 함수 정의 시, 제약 사항.
→ 함수 매개변수에 적용되는 named parameter의 name은 공백(‘’)이어야 함.
→ 함수의 매개변수 타입은 (NSString *) 타입 만을 지원.
→ 함수의 반환(return) 타입은 (NSString * or void) 타입 만을 지원.
→ 확장 interface 함수 개발 시.
- (void)someMethodWithFirstValue:(NSString *)value1
- (NSString *)someMethodWithFirstValue:(NSString *)value1
:(NSString *)value2;
:(NSString *)value2;
→ 일반적인 Objective-C 함수.
- (void)someMethodWithFirstValue:(NSString *)value1 secondValue:(NSString *)value2;
native 개발 (iOS)
Asynch JS 함수의 CB 호출하기.(3/5)
- 관련 class.
→ PPHybridViewController
- 관련 function.
→ - (void) callCbfunction:(NSString *)func withObjects:(NSObject*)fristObject, ... NS_REQUIRES_NIL_TERMINATION;
- 예제
// 샘플 코드.
- (void) asyncTest:(NSString *)callback :(NSString *)param1 :(NSString *)param2 {
[_viewctrl callCbfunction:callback withObjects:@"native set value", param1, param2, nil];
}
(note) _viewctrl 변수
⇒ ExtendWNInterface class에 정의된 PPWebViewController class 객체.
native 개발 (iOS)
Sync/Async JS 함수 정의.(4/5)
- WN2Common 함수 정의.
function test_WN2Common(param1, param2)
{
var _param1 = param1 || '';
var _param2 = param2 || '';
(주의) WN2Common/WN2CommonAsync native 함수 호출.
return WN2Common(“syncTest”/*native함수이름*/, _param1, _param2);→ 입력된 native 함수 이름의 대/소문자가 일치 해야 함.
}
→ 입력된 파라미터의 개 수가 일치 해야 함.
- WN2CommonAsync 함수 정의.
function test_WN2CommonAsync(callbcak_function, param1, param2)
{
var _callback = callbcak || function() {};
var _param1 = param1 || '';
var _param2 = param2 || '';
→ WN2CommonAsync 함수의 경우
native로 전달할 js 함수는 M.buffer.on( ) 함수로 wrapping 되어
야 함.
WN2CommonAsync(“asyncTest” /*native함수이름*/, M.buffer.on(_callback), _param1,
_param2);
}
native 개발 (iOS)
Sync/Async JS 함수 사용 예제.(5/5)
- WN2Common 함수 사용 예제.
// WN2Common 테스트 코드.
var result = test_WN2Common("안녕", "하세요!");
alert("result : " + result);
- WN2CommonAsync 함수 사용 예제.
// WN2CommonAsync 응답(CB) 함수.
function test_CBAsync(p1, p2)
{
var rst = "cb result = p1:" + p1 + ", p2:" + p2;
alert(rst);
};
// WN2CommonAsync 테스트 코드.
test_WN2CommonAsync(test_CBAsync, "니먼", "하오!");
(*) 주의
⇒ javascript 함수 객체(object)가 전달 되어야 함.
→
OK : test_CBAsync
→ NOT OK : “test_CBAsync”
native 개발 (iOS)
native network manager 개발.(1/6)
- WHAT ?
⇒ 플랫폼 내부의 network provider와 interface(요청/응답) 기능.
network provider → network resource에 대한 요청 및 응답을 대행하는 플랫폼 모듈
(ex, android provider).
- HOW ?
⇒ 상속 받아야 할 class : PPAbstractHttpNetworkManager
⇒ 구현해야 할 protocol
→ PPNetworkManager
← request 기능.
→ PPNetworkManagerDelegate ← response 기능.
→ PPHttpProviderDelegate
← network provider의 response를 받기 위한 delegate.
⇒ 기 생성되어 있는 HttpDataNetworkManager class를 참고하여 신규로 생성.
ex) HttpDataNetworkManager의 header file
native 개발 (iOS)
native network manager 개발.(2/6)
- network requset / response flow
화면(js)
network manager
<PPNetworkManager>
<PPNetworkManagerDelegate>
native
플랫폼
network provider
<PPHttpProviderDelegate>
networ
k
native 개발 (iOS)
native network manager 개발.(3/6)
- PPAbstractHttpNetworkManager class ?
→ 신규 network manager 생성 시 parent가 되는 class.
→ Manifest.xml 파일의 network 필드에 해당하는 class.
native 개발 (iOS)
native network manager 개발.(4/6)
- PPNetworkManager protocol ?
→ WN 함수 중 M.net 함수의 native request method.
ex) M.net.http.send(setting), M.net.res.update(setting)
native method
call
(request)
native 개발 (iOS)
native network manager 개발.(5/6)
- PPNetworkManagerDelegate protocol ?
→ WN 함수 중 M.net 함수로 response 전달 method.
ex) M.net.http.send(setting), M.net.res.update(setting)
native response
native 개발 (iOS)
native network manager 개발.(6/6)
- PPHttpProviderDelegate protocol ?
→ network provider의 response를 받기 위한 method.
provider
success
fail
method call
2일차 : 서버 교육 과정 (이론/실습)
시간
14:00~16:00
16:00~18:00
내용
서버 개발환경 이해
-SpringFramework, SVN + Maven Project 관리 이해, myBatis 의 이해
확장개발과 리소스 업데이트
- 확장개발 방법, 리소스 업데이트의 이해, 앱스토어 연동
-앱스토어 연동 실습
-로그인 API 연동
-리소스 배포 방법(zip 파일, 서버연동)
- 앱 업데이트
교육 방식
강의 / 실습
강의 / 실습