TIL

[Sesac IOS] 37일차 TIL

37일차 수업 내용을 정리한 글입니다.


Learned

App Sandbox System

1) 개요

  • 앱이 보호받는 영역(샌드박스) 안에서만 동작하도록 제한해서
    보안을 유지하는 애플의 시스템
  • 샌드박스 시스템으로 인해 설치된 앱은 각자 고유의 영역을 가지고 있으며,
    기본적으로 자신의 영역 외에 다른 앱에 접근할 수 없고 외부 앱에서도 접근이 불가능함.
  • 샌드박스는 크게 Bundle, Data, Cloud Container와 하위 디렉토리로 나뉨.

2) Bundle Container

  • 프로젝트의 info.plist, resource(asset, font 등)가 포함됨.
  • 컴파일 소스(.swift 파일)이 바이너리 형태의 실행 파일로 저장되고
    Xib파일, 설치된 라이브러리에 대한 정보가 들어감.

3) Data Container

  • Document 디렉토리
    • 설정에 따라 사용자가 직접 파일을 추가하거나 삭제하는 것이 가능한 영역으로
      사용자가 앱을 통해 생성한 문서, 파일, 영상 등의 컨텐츠가 저장됨.
    • Realm을 통해 생성된 DB 파일은 기본적으로 Document에 저장되지만
      사용자에게 보여질 수 있기 때문에 보안을 위해 Library 디렉토리의
      Application Support 폴더로 경로를 변경해 사용할 수도 있음.
Document 디렉토리 자체는 삭제할 수 없음.
  • Library 디렉토리
    • 사용자의 데이터 파일과 임시 파일을 제외한 모든 파일을 관리하는 영역으로
      캐시 파일(앱의 스냅샷)과 UserDefault 등이 저장됨.
    • 사용자가 볼 수 없는 앱의 기능 및 관리에 필요한 파일들이 포함됨.
      ex) 알람 앱의 기본 알람 사운드 등

로컬 데이터 백업

1) 백업 및 복구의 필요성

  • 사용자의 데이터가 기기(로컬)에 저장될 경우 앱이 삭제될 때 데이터가 함께 사라짐.
  • 별도의 서버에 사용자의 데이터를 저장하고 유지하려면 서버 비용이 발생함.
  • 백업/복구 기능으로 사용자가 원할 때 외부 저장소에 데이터를 저장하거나 가져와서
    앱이 삭제 되더라도 쉽게 사용자의 데이터를 유지할 수 있음.

2) 외부 저장소

  • iCloud
    • 사용자의 Third Party 계정(다른 저장소) 유무와 관계없이
      애플 사용자라면 모두 갖고 있는 저장소이기 때문에 iOS 전용 앱에 효과적임.
    • 유료 사용자가 아닐 경우 기본으로 제공하는 저장 용량이 작아서 백업이 보장되지 않을 수 있음.
  • Third Party Cloud Service
    • 구글 드라이브, 드롭박스 같은 클라우드 서비스에 사용자의 데이터를 저장할 수 있음.
    • 하지만 계정 생성의 번거로움과 용량 제한 문제는 여전히 존재함.
    • 서비스에 따라 정책 및 권한 문제로 개발 시 이슈가 존재할 수 있음.
  • 파일 앱
    • iOS 버전 11부터 등장한 앱으로 외부 저장소처럼 사용자 데이터를 파일 앱에
      Export하거나 Import할 수 있음.
    • ShareActivity(iOS의 공유 기능)을 통해 원하는 외부 저장소(구글, 에어드랍, iCloud 등)로
      데이터를 전송할 수 있기 때문에 매우 유연함.
    • 써드파티 클라우드 서비스의 정책 및 권한 문제로부터 자유로움.

기타

  • DB를 통해 이미지를 다루는 방법 2가지
    • 이미지의 URL을 DB에 저장하는 방법 : 네트워크 연결이 반드시 필요, 적은 용량 사용
    • 이미지 파일을 DB에 저장하는 방법 : 비교적 많은 용량 사용
  • UIImageView에 탭 제스쳐를 사용하는 방법
    • UITapGestureRecognizer 객체를 UIImageView에 연결
    • UIImageView의 isUserInteractionEnabled 프로퍼티를 true로 설정
  •  isUserInteractionEnabled를 false로 설정해서 서버 통신 중에 불필요한
    사용자의 상호작용을 막아서 오류를 방지할 수 있음.
  • 프로토콜을 활용해 Delegate 패턴을 만들어서 뷰 컨트롤러 인스턴스 간
    값을 주고 받을 수 있음.

이상입니다.

'TIL' 카테고리의 다른 글

[Sesac IOS] 39일차 TIL  (0) 2022.08.29
[Sesac IOS] 38일차 TIL  (0) 2022.08.25
[Sesac IOS] 36일차 TIL  (0) 2022.08.24
[Sesac IOS] 34~35일차 TIL  (0) 2022.08.22
[Sesac IOS] 33일차 TIL  (0) 2022.08.18