Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

iOS 개발일지

0824 새싹 37회차 정리 본문

SeSAC iOS 데뷔과정 2기

0824 새싹 37회차 정리

Lia's iOS 2022. 8. 24. 20:55
iOS 앱 개발자 데뷔 과정 37회차

 

 

 

 

#0. Memo

- App Sandbox

 

미국에서 어린 아이의 안전을 위해 모래통 (sandbox) 에서만 놀도록 하는데서 유래한 보안 모델이다.

iOS는 앱 하나당 전부 Sandbox화 되어있어, 다른 앱에 대한 접근이 불가능하다.

 

- Bundle Container

앱의 번들로 파일, info.pilist, Resource 등을 그룹화

Compile Source(.swift) 가 바이너리 형태의 실행 파일로 변환

 

- Data container ( = AppData 폴더) Documents

개발자가 접근 가능한 디렉토리는 Documant, Library, tmp, System Data 이므로 Document의 서브디렉토리를 통해 관리

사용자가 앱을 통해 생성한 문서, 파일, 음악 등의 컨텐츠 등을 저장하며, 설정에 따라 사용자가 직접 파일을 추가하거나 삭제 가능

따라서 Document 내부에는 삭제, 변경되어도 무방하고 사용자가 다루는 컨텐츠와 관련된 파일들만 저장

 

- Data container ( = AppData 폴더) Library

사용자 데이터 파일과 임시 파일을 제외한 모든 파일을 관리

사용자 노출을 피하고 앱의 기능이나 관리에 필요한 파일 저장

 

 

 

 

#1. Checklist

- pass data - protocol

다양한 데이터 전달 방법 중, 이번에는 프로토콜을 사용해 데이터를 전달해보자.

[5주차 마무리] 에서 한번 다뤘었지만, 한번 더 짚고 넘어가려고 한다.

 

1. 프로토콜 선언

.

.

2. delegate 선언 - 위치 : 전달할 VC

.

.

3. 위에서 선언한 delegate 위임하기 - 위치 : 전달받을 VC

.

.

4. 전달하고자 하는 데이터 넘기기 - 위치 : 전달할 VC

 

.

.

5. 실질적인 동작 구현 - 위치 : 전달받을 VC (프로토콜을 채택한 VC)

 

 

 

 

- Generic

Generic을 활용해 화면 전환 코드를 아래처럼 열거형과 스위치로 구현해놓으면, 이후 사용이 매우 간단해진다.

한 가지 주의해야 할 점은, 파라미터와 T를 잘 구분해서 사용해야 한다는 것이다.

T는 정해지지 않은 타입을 나타낼 뿐이고, 실질적으로 present 혹은 push 될 VC는 파라미터로 전달받은 viewController이다.

한 번 기억하면 잘 헷갈리지는 않을 것 같지만, 헷갈리더라도 컴파일 에러가 발생하니 금방 찾을 수 있다.

 

사용해야 할 때도 헷갈리면 안 될 것이 있는데, ImageSearchViewController()의 인스턴스를 vc로 초기화했다.

이 상태에서 trasition의 매개변수에 vc가 아닌 ImageSearchViewController() 를 전달하면 그건 vc와는 다른 인스턴스가 된다.

당장 컴파일 에러가 발생하지 않고, 화면전환이 이루어지더라도 문제가 발생할 수 있으니 헷갈리지 않도록 하자.

 

 

 

- FileManager

아이폰의 앱마다 자기만의 공간을 가지고 있는데, 이 공간을 관리하는 매니저가 FileManager 라고 할 수 있다.

FileManager를 통해 파일 생성, 읽기, 삭제 등 파일의 저장에 관한 작업을 수행할 수 있다.

그리고 이러한 기능을 하는 함수들을 모아 extension 으로 분리하면, 코드의 가독성이 좋아지고 관리하기도 용이하다.

FileManager+Extension

 

WriteViewController에서의  활용예시

 

HomeViewController에서의 활용예시

 

 

 

 

# 그 외

- 유저 이벤트 무시 / isUserInteractionEnable

만약 통신이 완료되기 전에 유저가 셀을 선택한다면, 선택된 셀에 대한 정보를 전달하는 코드에서 에러가 발생할 수 있다.

이러한 문제를 방지하기 위해, 앱이 이벤트를 받을 준비가 될 때까지 사용자 이벤트를 무시할 수 있다.

viewDidLoad에서 isUserInteractionEnabled를 false로 설정해 차단한 뒤, 준비가 완료된 후 true로 전환한다.