2016년 12월 1일 목요일

React & Reactive & React Native 개념이해

React 개발에 앞서 React & Reactive & React Native의 개념을 이해하자.

먼저, React는 페이스북이 웹 개발을 위해 만든 기술로 커스텀 컴포넌트를 활용하여 뷰를 쉽게 

개발할 수 있다.


React Native는 React의 접근 방법을 모바일로 확장한 페이스북 오픈소스 프로젝트.

기존의 모바일 자바스크립트 툴들이 웹뷰를 통해 인터페이스를 구축하는 하이브리드 방식이라면 

React Native는 자바스크립트로 작업하지만 인터페이스는 네이티브 위젯으로 표시하는 방법으로

네이티브 UI를 통해서 이질감 없고 쾌적한 사용자 경험 제공.


Reactive는 마이크로소프트가 창안한 개념으로 스트림과 비동기처리등을 NINQ에 영향을 받은 방법으로 

깔끔하게 처리할 수 있게 한 패러다임.


참고 :
https://realm.io/kr/news/react-native/

2016년 10월 3일 월요일

JavaScript : 제곱과 제곱근

[ 제곱 ]

구문 Math.pow(base, exponent) 
기본 식의 값을 지정한 거듭제곱으로 반환합니다.

매개변수
base : 기준 값
exponent : 지수 값

예제
Math.pow(2, 3) - 2의 3승

관련링크 :
https://msdn.microsoft.com/ko-kr/library/0xhwcwy6(v=vs.94).aspx


[ 제곱근 ]

구문 Math.sqrt(number) 
숫자의 제곱근 반환

매개변수
number : 숫자
number가 음수일 경우 NaN 반환

예제
Math. sqrt(4) - 4의 제곱근

관련링크 :
https://msdn.microsoft.com/ko-kr/library/95596f3d(v=vs.94).aspx

JavaScript : 삼항식

구문  (조건식)?value1:value2  
삼항식은 물음표 앞의 조건식이 true이면 value1이 할당되고 false면 value2가 할당되는 것이다. 

설명
?: 연산자는 if...else 문의 단축형으로 사용할 수 있으며일반적으로 if...else 문을 사용하면 
너무 복잡해지는 식에서 사용

예제
홀수와 짝수를 판별하는 코드에서
if (n%2 == 0) { 짝수일때 코드 }else { 홀수일때 코드}

삼항식으로 표현
(n%2 == 0)? "짝수" : "홀수"


관련링크 :
https://msdn.microsoft.com/ko-kr/library/be21c7hw(v=vs.94).aspx

2016년 10월 1일 토요일

JavaScript : reduce 메서드

숫자로 이루어진 배열의 값을 더하거나 평균을 구할때 사용하면 좋을듯한 메서드

[ 기본설명 ]
배열의 모든 요소에 대해 지정된 콜백을 호출합니다.콜백 함수의 반환 값은 결과에 누적되며 다음에 콜백 함수를 호출할 때 인수로 제공


구문 : array.reduce(callback, initialValue)
인자 : 
    callback : 필수 요소.최대 4개까지 인수를 허용하는 함수입니다. reduce 메서드는 배열에 있는 
                    각 요소마다 한 번씩 callback 함수를 호출
     initialValue : (선택 사항) initialValue가 지정된 경우 누적을 시작하는 초기 값으로 사용


[ 사용예제 ]
var sum = [0, 1, 2, 3].reduce(function(a, b) {
  return a + b;
});

// sum == 6


관련 링크 :
https://msdn.microsoft.com/ko-kr/library/ff679975(v=vs.94).aspx
http://www.w3schools.com/jsref/jsref_reduce.asp
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce
http://blog.kazikai.net/?p=16

2016년 9월 30일 금요일

정규표현식 : 정의

정규표현식 (Regular Expression, regex 레젝스)

정규표현식을 사용하는 이유 : 검색과 치환
 - 모든 정규식에 일치하는 텍스트를 찾아 원하는 텍스트로 치환함.

[ 사용 예제 ]

 - 문자열 내에서 패턴을 테스트합니다.
예를 들어, 문자열 내에서 전화 번호 패턴이나 신용 카드 번호 패턴이 사용되는지 확인하기 위해 입력 문자열을 테스트할 수 있습니다. 이를 데이터 유효성 검사라고 합니다.

 - 텍스트를 바꿉니다.
문서에서 특정 텍스트를 확인하여 완전히 제거하거나 다른 텍스트로 바꿔야 할 때 정규식을 사용할 수 있습니다.

패턴 일치에 따라 문자열에서 부분 문자열을 추출합니다.
문서나 입력 필드 내에서 특정 텍스트를 찾을 수 있습니다.


관련링크 :
https://msdn.microsoft.com/ko-kr/library/101eysae(v=vs.100).aspx

2016년 9월 20일 화요일

iOS 10 기능

메시지(iMessage)

 - 말풍선 효과를 사용하여 다양한 표현(강하게, 부드럽게, 충격 효과 등) 가능
 - 비밀 잉크 기능으로 사진이나 메시지의 내용을 가려진 상태로 보낼 수 있음
 - 축하 메시지의 경우는 전체 화면으로 제공
 - 손글씨 메시지 기능
 - 리치 링크 기능으로 URL 전송시 미리보기 기능
 - Tapback 기능으로 메시지, 링크, 사진에 빠르게 응답 가능
 - Digital Touch를 사용하여 스케치, 탭 및 심박을 보낼 수 있음
 - 텍스트 입력 후 터치(탭)로 이모티콘 변경 가능
 - iMessage를 위한 앱 스토어 제공 : iMessage Store
 - 스티커 다운로드 : 슈퍼 마리오 등

지도(Map) 

- 사용자의 이동 패턴이나 캘린더(일정)을 참고로 다음 장소를 예측하여 제안
- 향상된 검색 기능 제공 : 새로운 설명 풍선 디자인, 검색 결과를 그룹별 표시, 카테고리 필터 등
- 현재 지도에 표시된 지역의 날씨 제공
- 카플레이(CarPlay) 또는 블루투스(Bluetooth)를 사용하여 주차 위치를 지도에 표시
- 제휴되는 앱에서 제공하는 확장프로그램을 사용하여 지도에서 식당/차량 예약하기
- 전방 주시를 위한 방향 자동 조절
- 내비게이션 기능 이용 중 지도 이동 및 확대/축소 기능
- 경로 선택시 통행료와 고속도로를 피하는 운전 옵션 제공
- 집, 직장, 즐겨찾기 위치 및 이벤트 장소를 지도에 표시

시리(Siri) 

- 메시지 기능 : 메시지 보내기, 메시지 검색하기, 메시지 읽어주기
- CarPlay 기능 : 온도, 라디오, 좌석, 개인 설정 등
- 사진 기능 : 이미지 및 사진 검색

사진(Photos) 

- 최신 얼굴 인식 기능을 사용하여 비슷한 얼굴을 자동으로 같은 그룹으로 분류
- 사진에 포함된 사물, 풍경을 인식하여 사진 검색 기능
- 사진, 비디오 및 Live Photo 앨범을 지도상에 표시
- 휘도 조절 기능 : 부분적으로 밝기, 하이라이트, 대비를 조절 가능
- 잊혀진 이벤트, 여행 및 사람을 찾아서 아름다운 사진 모음집으로 제공
- Live Photo 촬영시 필터 사용 가능
- 카메라를 사용하여 디지털 돋보기처럼 사물을 확대하여 볼 수 있는 확대기 기능 제공


애플 뮤직(Apple Music) 

- 새로운 디자인
- 보관함 탐색 기능
- For You 메뉴에서 추천 음악 보기
- 향상 된 '지금 재생 중' 화면 : 가사 보기, 다음에 재생할 목록 확인 및 편집

홈(Home) 

- HomeKit 액세서리를 안전하게 관리/제어할 수 있는 앱
- 모든 기능을 통해 한 번의 탭으로 액세서리 그룹을 제어할 수 있음
- 홈에 대한 접근을 선택적으로 가족 및 친구와 공유


사용자 경험(UX) 

- 들어서 깨우기 기능 : iPhone을 들어 올리면 화면이 자동으로 깨어남
- 리치 알림을 통해 실시간 정보, 오디오, 사진 및 비디오를 곧바로 볼 수 있음
- 잠금화면에서 화면 스와이프로 카메라 실행
- 새로 디자인 된 '오늘 보기'에서 날씨, 지도, 주식 등 다양한 앱의 위젯 지원
- 3D 터치 기능 확장 : 잠금 화면의 알림 자세히 보기, 홈 화면에서 위젯 바로 보기 등


빠른 입력(Quick Type) 

- 새로운 이모티콘 추가
- 기존 이모티콘 캐릭터에 성명 다양성 추가
- 예상 이모티콘 제안
- 팁 뉴럴 네트워크 기술을 적용하여 보다 정확한 예상 단어 추천 기능

전화(Phone) 

- 스팸 전화 인식 앱을 사용하여 스팸 전화 경고를 제공
- 잠금 화면에서 타사 VoIP 앱의 통화 수신, 통화 대기, 소리 끔, 방해금지 모드 지원

2016년 9월 19일 월요일

iOS 앱 생명주기


iOS 앱 생명주기

 - 아이폰에서 사용자가 어플리케이션을 Tap 해서 실행
 - 해당 어플리케이션의 main 실행
 - main 에서 UIApplicationMain() 실행
 - AppDelegate 의 applicationDidFinishLaunching: 을 호출
 - applicationDidFinishLaunching이 완료되면 EventLoop로 들어감
 - 이제부터는 개발자가 코드로 구현한 작업들 수행
 - 어플리케이션 종료
 - AppDelegate의 applicationWillTerminate: 호출
 - 어플리케이션 종료

2016년 9월 18일 일요일

레이블과 버튼으로 텍스트 변경하기

레이블과 버튼 연결


Label을 추가하여 "텍스트" 로 변경




Ctrl 누른 채 ViewContoller 클래스안에 드래그하여 Connection :Outlet 설정. Name은 "labelText"로 입력







동일한 방법으로 Button 추가 후 Connection :Action 설정. Name은 "textChange" 입력




Label(Outlet)과 Button(Action) 연결




Label 텍스트 변경 코드 작성 후 앱 실행

 - 텍스트 변경 코드 : self.labelText.text = "안녕하세요"
 - 설정된 값이 Outlet이냐 Action이냐에 따라 속성 변수와 메서드가 다르게 추가 (Annotation)

2016년 9월 17일 토요일

ViewController 클래스와 코드

ViewController 클래스 연결


뷰 컨트롤러와 ViewContrller 클래스 연결



 아이콘으로 보조 편집기 활성화


ViewController 클래스


ViewController 기본 코드 내용




작성한 클래스에 대한 주석

 - 특정한 형식은 없지만 클래스의 목적와 구현된 기능에 대한 설명을 작성하는게 좋음




import 와  ViewController 내용

 - import 키워드는 라이브러니나 프레임워크 등 사용하고자 하는 기능 관련 파일을 포함한다는 뜻
 - UIViewController라는 클래스를 상속받아 ViewController라는 새로운 클래스로 정의
 - override 키워드는 부모 클래스로 부터 상속받은 프로퍼티나 메서드를 다시 구현하거나 재정의 할때 사용
 - viewDidLoad는 뷰의 로딩이 완료되었을때 시스템에 의해 자동으로 호출
 - super.viewDidLoad는 부모 클래스에 정의되어 있는 viewDidLoad 메서드를 실행
 - didReceiveMemoryWarning은 메모리가 부족할때 자동으로 호출


2016년 9월 16일 금요일

ViewController 화면전환

화면전환


버튼을 추가하여 "화면 전환 버튼"으로 버튼 이름 설정



새로운 View Controller 추가 "화면 2"

 - "화면 전환 버튼"을 선택한 후 Ctrl키 누른상태에서 마우스 왼쪽버튼으로  "화면 2"라는
    새로운  View Controller 위에 드래그하면 화면 이동을 방식을 설정하는 팝업이 뜸





화면 이동 방식 설정하는 팝업

 - "Present Modally" 선택 후 앱 실행하면 화면 전환이 되는 걸 확인할 수 있다.
  • Show : 일반적인 세그웨이로 원래화면을 밀어내고 다음화면을 보여줌
  • Show Detail : UISplitViewController 사용시 유용하며 한 화면에 Master와 Detail 표시
  • Present Modally : Modal 화면으로 뜸
  • Present As Popover : 팝업창으로 뜸
  • Custom : 사용자 정의 세그웨이를 만듬


뷰 컨트롤러  연결 화면

2016년 9월 15일 목요일

스토리보드 화면 구성 및 시뮬레이터 실행

스토리보드 화면 구성

1. Main.Storyboard 파일 선택



2. 뷰 컨트롤러(View Controller) Size 항목에서 크기조정



  • iPhone 3.5 - inch : 아이폰 4, 아이폰 4s의 화면 크기에 매칭
  • iPhone 4 - inch : 아이폰 5, 아이폰 5s의 화면 크기에 매칭
  • iPhone 4.7 - inch : 아이폰 6의 화면 크기에 매칭
  • iPhone 5.5 - inch : 아이폰 6+의 화면 크기에 매칭

3. 뷰 컨트롤러에 오브젝트 추가


  • 우측하단 오브젝트 라이브러리에서 레이블 (Label) 요소를 뷰 컨트롤러에 배치
  • 레이블 더블클릭하여 ' 화면 ' 이라는 텍스트를 입력 후 Align 사용하여 레이아웃 중앙배치


앱 시뮬레이터




1. 앱 시뮬레이터 실행
   - 상단 툴 바 영역에서 실행 버튼 클릭 또는 <Command + R > 단축키 사용하여 실행

2. iOS 시뮬레이터
   - 아이폰이나 아이패드 등 실제 기기에서 앱이 어떻게 동작하는지 미리 테스트해볼 수 있게 지원하는
     시뮬레이터가 포함되어있다.

2016년 9월 14일 수요일

프로젝트 생성 및 설정

Xcode 프로젝트 생성

  • [Create a new Xcode project]
  • Xcode가 실행된 상태에서 [File] - [New] - [Project]

프로젝트 종류

  • Application : 아이폰, 맥, 애플 와치용 애플리케이션
  • Framework & Library : 아이폰, 맥, 와치용 애플리케이션이 사용하는 프레임워크 라이브러리
  • System Plug-in : 맥 OS의 시스템 플러그인
  • Other : 인앱 구매용 패키지나 기타 다른 목적의 프로그램

iOS Application 템플릿 종류

  • Master - detail Application : 메뉴와 상세화면으로 이루어진 복합 뷰로 구성
  • Page - Based Appication : 여러 페이지로 이루어져 차례로 쓸어넘겨 볼 수 있는 뷰로 구성
  • Single View Application : 하나의 뷰로 이루어진 애플리케이션.
  • Tabbed Application : 탭으로 구분되는 여러 뷰를 가지는 애플리케이션.
  • Game : 게임 애플리케이션 제작을 위한 템플릿

프로젝트 정보 입력 사항


  • Product Name :  프로젝트 이름을 입력하는 항목. 배포시 사용되는  앱 식별자 항목인 'Bundle Identifier'의 일부를 구성
  • Organization Name : 본인이 소속된 조직명 입력하는 항목
  • Organization Identifier : 프로젝트 조직 식별자 입력하는 항목. 대체로 보인이 소속된 회사나 해당 프로젝트의 도메인에서 www를 뺀 나머지를 역순으로 사용하는 것이 일반적 (com. projectgroup)
  • Bundle Identifier : 앱 전체에 대한 식별자. 앱 배포나 개발자 계정을 통해 테스트용 앱을 배포시 기준으로 사용. Organization Identifier  + Product Name 으로 자동 구성
  • Language : 앱을 제작할 개발 언어를 선택하는 항목
  • Device : 앱이 지원할 플랫폼을 선택하는 항목. Universal은 아이폰, 아이패드 모두 지원할때 사용
  • Use Core Data : 기기 내부의 저장소에 데이터를 저장할 경우 데이터 저장을 지원하는 객체인 코어 데이터를 사용할지를 선택하는 옵션
  • Include Unit Tests : 기능 일부를 자동으로 테스트해주는 단위테스트를 사용할지를 선택하는 옵션
  • Include UI Tests : 화면 요소에 대한 자동테스트

프로젝트 생성완료



프로젝트 설정


  • Deployment Target : 개발시 사용할 iOS 버전
  • Devices : 대상 디바이스 설정 (iPhone / iPad / Universal)
  • Main interface : 메인이 되는 인터페이스를 말하며, 가장 처음 사용자에게 보여지는 뷰
  • Device Orientation : 기기의 가로, 세로 및 방향에 대한 회전 여부 설정
  • Status Bar Style : 스테이터스 바 스타일 변경


  • 기기에 설치되는 앱의 아이콘에 대한 등록 설정과 초기 로딩 페이지 설정을 관리


  • 프레임워크나 라이브러리를 추가할 때 등록하는 영역



프로젝트 구성


  • Swift 확장자 : 앱의 소스 코드를 구성하는 역할
  • Main.Storyboard : 앱의 화면을 설계
  • LaunchScreen.Storyboard : 프로젝트 시작화면을 구성하는 역할 (Splash)






2016년 9월 13일 화요일

iOS 앱 아키텍처

아키텍처란 ?

프로세스와 전체적인 구조나 논리적 요소들 그리고 컴퓨터와 운영체계, 네트웍 및 기타 다른 개념들 간의 논리적 상호관계 등을 생각해내고 정의하는 등, 모든 곳에 적용되는 용어이다.

참고 :
http://bcho.tistory.com/667

화면을 구성하는 객체


앱 인터페이스와 구성요소



UIKit 프레임워크와 화면 구성요소의 관계

 - UIScreen : 기기에 연결되는 물리적인 화면을 정의하는 객체
 - UIWindow : 화면 그리기 지원도구를 제공하는 객체
 - UIView : 그리기를 수행하는 객체

뷰 컨트롤러

화면을 그려내는데 필요한 요소가 아니라 MVC패턴을 도입하면서 생겨난 단순한 컨트롤러 객체.

 - 뷰와 리소스를 관리


MVC 패턴이란?

MVC 패턴은 Model-View-Controller의 줄임말로 애플리케이션의 구성요소를 Model, View, Controller
로 구분지어 개발함으로써 표현계층과 데이터를 처리하는 로직을 분리한다. 이 과정을 통해 중복적인 코딩
을 미연에 방지 할 수 있으며 재사용성을 높일 수 있는 디자인 패턴이다.
 - Model : 데이터에 관한 로직을 담는 부분
 - View : 사용자에게 보여지는 화면 
 - Controller : Model과 View간의 동작을 관리


2016년 9월 12일 월요일

스위프트 오류처리

오류처리란?

프로그램에서 오류 상태로 부터 회복하기 위해 대응하는 과정.
스위프트에서는 실시간 오류에 대해 던지기, 잡기, 전달, 회복을 다루는 것을 지원

오류의 반환과 던지기

오류를 반환하려면 함수의 반환 타입과 일치해야 하지만, 오류를 던지는 것은 함수의 반환타입과 일치하지
않아도 됩니다. 오류에 대한 객체를 반환하는 것이 아니라 실행 흐름 중간에 오류 객체를 만들어 다른 실행 흐름으로 옮겨가는 것이기 때문이다.

오류타입 정의

오류타입으로 사용되는 열겨형을 정의시 ErrorType  프로토콜을 구현. 컴파일러는 ErrorType 프로토콜을
구현한 열거형만을 오류타입으로 인정.

ErrorType 프로토콜은 아무런 기능이 정의되지 않은 빈 프로토콜로 정의되어 있습니다. 따라서ErrorType
프로토콜을 열거형에 추가한 후 나머지는 원하는대로 정의할 수 있다.

- ErrorType 프로토콜 :

      protocol ErrorType { 

      }


 - 오류타입 멤버 정의 (오류타입은 필요에 따라 상세 타입으로 나누어 사용하는것이 효율적임)

      enum DataError : ErrorType {
               case EmptyData
               case DataFormatError
      }

오류 전달

함수의 파라미터 선언 뒤에 throws 키워드는 함수, 메소드 , 초기화오류를 던질수 있음을 나타냅니다.
함수의 반환타입을 지정할 경우, throws 키워드는 반환 화살표 (->)앞에 작성하는데 이는 오류를
던지면 값이 반환되지 않는다는 의미를 가진다.

   func canThrowErrors() throws -> String (오류가 발생시 오류객체를 던질 수 있음)
   func cannotThrowErrors() -> String (오류가 발생하더라도 오류객체를 던질 수 없음)
   
   - 클로저 구문 시 throws 사용
   {() throws -> String in
          ...
   }

Do - Catch를 사용하여 오류처리

함수(throws키워드로 오류를 전달 가능한)에서 던진 오류를 잡아낼 때는 쓰는 구문으로 실행중인
코드블럭의 오류처리를 위해 Do - Catch문법을 사용한다.

do {
   try 오류를 던질수 있는 함수
} catch 오류타입 1 {
   오류타입 1에 대한 대응
} catch 오류타입 2 {
   오류타입 2에 대한 대응
} ...


예제코드
func someData() throws ->Data {
   ...
}

do {
   let data = try someData()
    ...
}catch DataError.EmptyData {
    ...오류타입에 대한 대응
}catch {
    ... 잡히지 않은 오류처리
}

 - do구문은 오류가 발생하지 않는 상황에서 실행할 구문이 작성되는 영역
 - 오류타입은 ErrorType프로토콜을 사용하여 원하는대로 정의한 열거형 오류타입
 - 마지막 catch구문은 앞에 catch에서 잡히지 않은 오류를 잡아주는 와일드카드 역할
 - 오류를 던지도록 짜여진 함수나 메소드의 오류를 던지지 않게 사용할때에는 try!만 사용




2016년 9월 11일 일요일

스위프트 유닛테스트

유닛테스트란?

유닛 테스트(unit test)는 컴퓨터 프로그래밍에서 소스 코드의 특정 모듈이 의도된 대로 정확히 작동하는지 검증하는 절차다.



유닛테스트 작성시 유의사항

- 유닛 테스트는 간과하기 쉬운 에러를 잡아내는데 필요한 코딩영역.
- 유닛테스트는 모듈화 해서 사용하는것이 좋음
- 각각 테스트는 기본적이고 구체적인 테스트 하나만을 수행하는게 효율. 지나치게 길거나 복잡하면 잘못된 부분을 찾는게 어려움


유닛테스트

- Include Unit Test 체크 후 프로젝트 생성




















- 자동으로 생성된 Unit Test
















- 테스트 할 객체 생성 (데이터 모델) : Target 에서 TestUnitCode 체크




























- 테스트 객체 초기값 설정











- Unit Test Code 작성 후 테스트 진행 (왼쪽 문양 클릭)









- Unit Test 오류 확인












- Unit Test 오류 수정 후 테스트 진행












참고 : UnitTest 예제
https://www.youtube.com/watch?v=LGLUct53cTE

2016년 9월 10일 토요일

스위프트 REST API

GET Request


POST Request


JSON과 URLRequest 오픈소스 - SwiftyJSON : https://github.com/SwiftyJSON/SwiftyJSON  - Alamofire : https://github.com/Alamofire/Alamofire

2016년 9월 9일 금요일

스위프트 iOS9 개발시 체크 사항


ATS(App TransportSecurity) 설정 변경

외부 URL를 통한 접근 제한으로 네트워크 관련 기능을 사용할 경우 설정 변경

- 오류 내용
Transport security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.

- info.plist에 키 값 추가
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

- 특정 도메인만 접근할 경우 (SNS API 사용) : DOMAIN_ADDRESS 에 도메인 주소 입력
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>DOMAIN_ADDRESS</key>
    </dict>
</dict>

Bitcode 설정 변경

Bitcode 를 미지원하는 플러그인들로 인한 오류 발생

 - Bitcode 란
비트 코드는 컴파일 된 프로그램의 중간 표현입니다. 비트 코드를 포함하면 아이튠즈 커넥트에 업로드앱은 컴파일 저장소에 연결됩니다. 비트 코드를 포함하면 애플 스토어에 앱의 새 버전을 제출할 필요 없이 미래에 앱 바이너리를 다시 최적화할 수 있고, iOS 앱의 경우 비트 코드 옵션은 선택 사항이고, watchOS 및 tvOS 앱의 비트 코드가 필수로 적용되어야 한다. - iOS Developer Library

 - 오류내용
You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. Note: This will be an error in the future.

 - 설정 :
프로젝트 Build Setting > Build Option > Enable Bitcode 값을 No 로 변경해준다




2016년 9월 8일 목요일

스위프트와 네트워크 통신 (2)

[ 웹페이지 ]
인터넷상에 있는 개개의 문서를 가르키며 하이퍼링크로 두개 이상의 웹페이지를 연결할 수 있는 점이 특징이다. HTML, CSS, javascript 등으로 구성되어 있으며 HTTP를 통해 전송하거나 받아온다.

[ 웹서비스 ] 
XML과 HTTP등을 기본으로 하여 다른 컴퓨터에 있는 데이터나 서비스를 호출하기 위한 통신규약

 구조에 따른 방식
    - SOAP (Simple Object Access Protocol) :
       일반적으로 널리 알려진 HTTP, HTTPS, SMTP 등의 프로토콜을 통해 양측에서 XML 기반의 메세지를 주고 받는 프로토콜.

        장점 : 프락시나 방어벽과 관계없이 쉽게 통신가능
                  데이터 전송을 위한 다양한 프로토콜 사용 가능
                  플랫폼 독립적인 통신
                  프로그래밍 언어에 종속되지 않음
                  매우 간단하고 확장할 수 있음

        단점 : XML 포맷을 사용하므로 CORBA같은 미들웨어 기술과 비교시 상대적으로 느림
 
     - RESTful  :
       ( REST - Representational State Transfer 원리를 따르는 시스템을 RESTful이란 용어로 지칭.
       웹에 있는 데이터를 HTTP를 바탕으로 하여 전송하되 SOAP나 쿠키 등 별도의 전송용 규약없이 전송
       하기 위한 매운 간단한 형식의 인터페이스. 데이터를 요청하는 URI를 보내면 그에 맞는 데이터가 전송됨

         장점 : 네트워크 서버뿐만 아니라 웹서버를 통해서도 약간의 설정만으로 쉽고 간단하게 구현 가능

 데이터 타입에 따른 방식
     - XML : 요청의 결과로 응답하는 데이터를 XML 포맷으로 제공. SOAP, RESTful API 방식모두 제공
         장점 : 플랫폼에 의존적이지 않은 표준데이터를 제공
         단점 : 데이터의 의미를 전달하기 위해 마크업 태그를 사용하므로 주고 받아야 할 전체 데이터의
                용량이 지나치게 커짐.
     - JSON : 경량의 데이터 교환 방식. 단, 데이터가 점점 많을수록 가독성이 떨어짐.
                   JSON 객체와  Json 배열의 구조를 가지고 있음

* URI : Uniform Resource Identifier는 인터넷에 있는 자원을 나타내는 유일한 주소
* API : Application Programming Interface 응용프로그램에서 사용할 수 있도록 운영체제나 프로그래밍
           언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스
* RESTful API : 서버에서 제공하는 데이터 명세에 따라 요청규격에 맞게 정보 제공하는 방식
                        정보의 타입은 CRUD - 쓰기(Create), 읽기(Read), 수정(Update), 삭제(Delete)로 구성
                        되어 있으며 웹에서 사용되는 HTTP 메소드는 POST와 GET 두가지이다.
   - GET : 데이터 요청. 데이터 전송도 가능하지만 URL이 복잡해지는 단점이 있음. 또한 1,024바이트
               이상의 정보는 전송할 수 없음
   - POST : 데이터 전송. 리소스를 생성하거나 수정할때 사용
* Quoting (쿼우팅) : 문자열을 따옴표로 묶는 것
* JSON 객체 : {데이터 키 : 데이터 값} 형태로 이루어지는 순서없는 집합형 구조
* JSON 배열 : [...] 형태로 이루어지는 순서화된 리스트 구조


참조 : 웹서비스와 두가지 접근 방식
http://gis.seoul.go.kr/GisWebDataStore/Gis_Edu/html/S1112/SGIS-HTML.jsp?sgis=1112&pgis=0203

참조 : RESTful
http://www.iamcorean.net/22

참조 : RESTful API
http://blog.naver.com/PostView.nhn?blogId=awesomedev&logNo=220725884070&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView
http://devjms.tistory.com/61

2016년 9월 4일 일요일

스위프트와 네트워크 통신 (1)

네트워크 통신의 종류

[ 소켓 방식의 연결 지향 통신 ]
 - 전가가 결합하는 소켓의 개념을 따온 소켓 방식
 - 소켓을 이용한 네트워크 통신 방식은 보통 저수준 (Low - level)통신을 통하여 구현
 - 앱과 서버가 연결되면 한쪽에서 명시적으로 끊을 때까지 지속해서 연결을 유지하는 방식
 - 연결이 이루어진 단계, 연결이 유지되고 있는 단계, 연결이 종료된 단계 등으로 연결 상태를 구분

 장점 : 연결을 종료하기 전까지 재연결할 필요 없이 원하는 만큼 메시지를 주고 받을 수 있음
 단점 : 연결 정보를 유지해야 하므로 네트워크 대역을 많이 소모, 서버 부하도 큼

 소켓 방식의 분류
 - TCP : 데이터 유실을 방지하고 완전한 전송을 보장하지만 상대적으로 덜 빠른 연결
 - UDP : 데이터의 완전한 전송을 보장하지는 않지만 상대적으로 빠른 연결


[ HTTP, HTTPS, SMTP 방식의 비연결 지향 통신 ]
 - HTTP등의 프로토콜을 사용하여 메세지를 주고받는 방식
 - 필요할때만 연결하여 요청을 처리한 후 연결을 종료하여 연결 상태정보가 존재하지 않음

장점 : 필요없는 네트워크 대역소모를 줄일 수 있고 서버부하도 낮출 수 있어서 범용적인 모바일 서비스
          에 많이 사용
단점 : 매번 요청할때마다 연결해야 하므로 소켓방식에 비해 상대적으로 데이터를 주고받는 속도에 제약

2016년 9월 3일 토요일

스위프트 동기와 비동기 처리 (2)

[ 기본적인 GCD 활용]

let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
dispatch_async(dispatch_get_global_queue(priority, 0)) {
// do some task
dispatch_async(dispatch_get_main_queue()) {
// update some UI
}
}

 - 메인 큐 : UI가 돌아가는 큐. UI 관련 작업 처리
 - 글로벌 큐 : 오래걸리는 작업이나 API 처리. UI와는 별개로 동작


참고 : 
https://blog.asamaru.net/2015/11/24/swift-background-threads-gcd-grand-central-dispatch/
https://outofbedlam.github.io/swift/2016/05/11/GCD/
https://outofbedlam.github.io/swift/2016/03/09/Queue-in-Swift/
http://m.blog.naver.com/horajjan/220344253612
http://seorenn.blogspot.kr/2014/06/swift-gcdgrand-central-dispatch.html

 

2016년 9월 2일 금요일

스위프트 동기와 비동기 처리 (1)

동기 (Synchronize) :
 주어진 명령을 차례대로 처리하되 하나의 업무가 완료될 때까지는 
 다른 업무로 넘어가지 않는  방식
 - 특징 : 중간에 대기하는 시간때문에 효율은 떨어지지만 일관된 업무 보장과 동시다발적 업무가
             발생하지 않으므로 대응이 불필요하여 업무구성이 단순화 됨


비동기 (Asynchronize) :  
주어진 명령을 차례대로 처리하되 시간이 걸리는 업무는 진행 해둔 채 기다리는 동안
다른 업무 처리
 - 특징 : 일관적인 업무 흐름이 깨지고 응답에 대한 대응이 필요함


비동기 구현하는 방식 :
 - 델리게이트 패턴 : 
   네트워크 통신 자체에만 국한된 비동기 처리.  ( NSURLConectionDelegate 객체 활용)
   델리게이트 객체에 특정 이벤트에 대한 처리를 위임한 다음, 이벤트에서 응답이 오면 
   델리게이트 객체가 특정 메소드를 호출하게 하여 이 메소드 내부에 처리할 작업을 정의하는
   방식으로 구현

 - 비동기 함수 :
   dispatch_async() 활용. 이 함수는 Block와 GCD(Global Centeral Dispatch)를 이용
   iOS 시스템에서 제공하는 메인 시스템 큐를 인자값으로 받아 비동기 실행 흐름을 발생 시키고 
   그 흐름 위에서 원하는 코드가 실행되도록 만들어줌

 - GCD :병렬처리와 스레드 풀에 기반을 둔 방식을 구현해줌으로써 멀티코어 프로세서에
             최적화된  앱을 지원.