강사: 윤성관 (admin@lingostar.co.kr)


www.schoology.com을 활용하여 강의 진행, 강의 종료 후 에도 사용가능


iOS의 Core OS는 UNIX를 사용하고 있다. 최근에는 UNIX 공식 버전의 인정을 받았고, Apple의 정책에 의해 일부 기능이 막혀 있을 뿐이다.


다음과 같은 것을 사용할 수 없다.

1. 백그라운드 프로세스

2. Sandbox


Apple은 Apple Push Notification Service를 사용하 Background 


Background Fetch

1. 주기적

- 앱은 서버에 주기적으로 접근해서 콘텐츠를 다운함.

- 시스템에 등록하면 주기적으로 실행시킴.

- 적당한 시간은 시스템에서 판단.

2. APNS(Remote Notification)

- 새콘텐트 Push Notification 백그라운드에서 Fetch 가능

- Silent Notification


Sandbox - chroot jail 이면 무엇이 문제 인가?

Application은 Applications 폴더 내에 자신의 Sandbox 폴더에 묶여 있다. 연락처, 사진 등은 Library 를 제공하여 접근이 가능하도록 한다. 하지만, 사용자의 문자, 최신 연락처 등은 사용할 수 없다.

- 우리나라 IT 환경에서의 문제

 : KISA(한국인터넷 진흥원) -> OS X: ~/Library/NPKI , iOS: ? 

  iOS에서는 인증서 폴더를 설정할 수 없다. 

  - 1. 각 은행 랩의 Sandbox 폴더에 인증서를 관리

  - 2. 인증서 앱을 설치하고 은행이나 인증을 필요한 앱은 인증서 앱에 접근해서 사용.

  - 3. iCloud 공유 스토리지를 이용하면 가능하지 않을까?

  - 4. iOS 8 Extentions 이용하면 가능하지 않을까?


개발 시 주의할 사항들

- n - 1의 iOS Version 까지 지원할 수 있으면 좋다. (현재 iOS 8)

  : 기본적으로 동작이 완전히 달라졌다. (96% 이상이 n -1 버전을 사용한다.)


X code 시작하기


option + 마우스 클릭을 하면 해당 class의 도움말을 볼수 있다.


Interface Builder 에서 control 키를 누르고 label, button 등을 code editor로 끌어다 놓으면 Outlet, Action, Outlet Collection의 property를 만들어 사용할 수 있다. 


Action  형태로 만들면 함수가 자동으로 생성이 되며 이곳에 해당 action이 발생했을 때의 코드를 작성하면 된다.

이렇게 생성된 코드는 IB와 연결되어 있는 것을 볼 수 있다. 아래 그림에서와 같이 property 왼쪽에 마우스를 올리면 IB에 해당 속성이 표시된다.




Objective - C 기본


메소드의 호출은 '[' 를 사용하여 호출한다. 

id a = [object message: param];



아래 3개의 코드는 같다.

    self.myLabel.textColor = [UIColor redColor];

    [self.myLabel setTextColor:[UIColor redColor]];

    [[self myLabel] setTextColor:[UIColor redColor]];


메세징

- 사실상 C 구조체

- 함수 포인터 리스트

- objc_msgSend()

- 메소드 캐싱


런타임

- 객체간의 메세징을 지원하는 작은 라이브러리

- libobjc.A.dylib(objc.dll)


Dynamic Typing

- id , void*, NSObject*

- 오브젝트 타입은 런타임시에 결정


레거시인가?

- 2014년 Swift 발표

- 애플은 래거시 지원에 인색

- 기존의 프레임워크들이 모두 Objective-C

- 디버깅 문제


LLVM(Low Level Virtual Machine)

- www.llvm.org

- 오픈소스 컴파일러 컴퍼넌트

- 2002년 시작, 현재 애플이 스폰서, google, Cray, Adobe, IBM 등 참여

- 다양한 언어의 프런트 엔드 진행중

- Clang 프런트엔드를 통해 바이트코드(IR)로 번역

-LLVM 백엔드(JIT) 가 바이너리로


Swift

애플은 왜?

Swift라는 언어를 만들었나?

- Objective-C 언어가 이제 막 언어사용빈도 3위에 올랐는데

- 앱스토어에 백만개 이상의 앱이 Objective-C로 작성되었는데

- 개발자는은 어떻하라고?


OOP, Functional Programming

- 멀티코어 시대엔 새로운 패러다임이 필요

- Java, Objective-C 등에도 함수형 문법 추가


함수형 언어의 시대

- Miranda(1982)에서 시작

- 함수형 언어


Pomodor Timer - 1

IB는 다음과 같이 구성한다.



Label 3개와 Button 2개로 위와 같이 화면을 구성한다. 


아래와 같이 인스턴스 변수를 선언 할 수 있다. 

property를 만들면 getter와 setter가 만들어진다. 그리고, 인스턴스 변수도 만들어진다. 

아래의 경우 _timeLabel 도 자동으로 생성이 된다. 즉, UILable* _timeLabel 이 생성되는 것이다.

* outlet으로 선언된 변수들은 property로 설정이 되며, Action으로 설정하면 함수로 만들어진다.


아래와 같이 implementation을 작성한다. viewDidLoad는 application이 로드 된 이후에 불린다.  

startPause에서는 버튼이 눌리면 NSTimer를 통해 1초 마다 timeGose라른 callback 함수가 불리도록 한다.

timeGose 함수가 불리면 labelUpdate라는 함수를 통하여 가운데 Label을 업데이트 한다.


 X Code 에서는 끌어다 놓은 것을 View Controller에 자동으로 생성해 준다.

아래와 같이  View Controller를 선택하고 Inspector 창에 보면 자동으로 연결된 Outlet을 볼수 있다. 빈 공간의 Outlet은 연결된 행동이 없다는 것으로 error를 유발할 수 있다. 코드에서 지우지 말고 반드시 Outlet 도 삭제 해주어야 한다.







Posted by 빨간 양말