λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

🍎 iOS/iOS

[iOS] iOS 파일 μ‹œμŠ€ν…œ

File System

파일 μ‹œμŠ€ν…œμ€ λ°μ΄ν„° 파일, μ•± 및 운영 체제 μžμ²΄μ™€ κ΄€λ ¨λœ 파일의 영ꡬ μ €μž₯을 μ²˜λ¦¬ν•©λ‹ˆλ‹€. λ”°λΌμ„œ 파일 μ‹œμŠ€ν…œμ€ λͺ¨λ“  ν”„λ‘œμ„ΈμŠ€μ—μ„œ μ‚¬μš©λ˜λŠ” κΈ°λ³Έ λ¦¬μ†ŒμŠ€ 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€.

iOS File System

Apple μƒνƒœκ³„μ˜ κΈ°λ³Έ 파일 μ‹œμŠ€ν…œμ€ APFS둜, macOS, iOS, watchOS 및 tvOS의 κΈ°λ³Έ 파일 μ‹œμŠ€ν…œμž…λ‹ˆλ‹€. (iOS 10.3 이상, macOS HighSierra 이상)

iOS 파일 μ‹œμŠ€ν…œμ€ 자체적으둜 μ‹€ν–‰λ˜λŠ” 앱에 맞좰져 μžˆμŠ΅λ‹ˆλ‹€. μ‹œμŠ€ν…œμ„ λ‹¨μˆœν•˜κ²Œ μœ μ§€ν•˜κΈ° μœ„ν•΄ iOS μž₯치 μ‚¬μš©μžλŠ” 파일 μ‹œμŠ€ν…œμ— 직접 μ•‘μ„ΈμŠ€ν•  수 μ—†μœΌλ©° 앱은 ν•΄λ‹Ή κ·œμΉ™μ„ 따라야 ν•©λ‹ˆλ‹€. (μ‚¬μš©μžκ°€ 파일 μ‹œμŠ€ν…œμ— 직접 μ•‘μ„ΈμŠ€ ν•  수 μ—†λ‹€λ©΄ 파일 μ‹œμŠ€ν…œμ΄ λ‚΄λΆ€ κ·œμΉ™μ„ ν†΅ν•΄μ„œλ§Œ κ΄€λ¦¬λ˜κΈ° λ•Œλ¬Έμ— 문제의 μ†Œμ§€κ°€ 적어지고 관리가 μ‹¬ν”Œν•΄μ§)

App Sandbox

<κ³΅μ‹λ¬Έμ„œ λ²ˆμ—­>
App SandboxλŠ” κΆŒν•œμ„ 톡해 μš”μ²­λœ λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ μ•±μ˜ μ•‘μ„ΈμŠ€λ₯Ό μ œν•œν•˜μ—¬ μ‹œμŠ€ν…œ λ¦¬μ†ŒμŠ€μ™€ μ‚¬μš©μž 데이터λ₯Ό λ³΄ν˜Έν•©λ‹ˆλ‹€. 
App Store에 앱을 λ°°ν¬ν•˜κΈ° μœ„ν•œ μš”κ΅¬ 사항인 μ•± μƒŒλ“œλ°•μŠ€λŠ” κ³΅κ²©μžκ°€ 앱을 톡해 ν”Œλž«νΌ κΈ°λŠ₯을 λ‚¨μš©ν•  수 μžˆλŠ” λ²”μœ„λ₯Ό μ œν•œν•©λ‹ˆλ‹€.

 

μ•± μƒŒλ“œλ°•μŠ€λž€, μ»€λ„ μˆ˜μ€€μ—μ„œ μ‹œν–‰λ˜λŠ” macOSμ—μ„œ μ œκ³΅λ˜λŠ” μ ‘κ·Ό μ œμ–΄ κΈ°μˆ μž…λ‹ˆλ‹€. 

파일, λ„€νŠΈμ›Œν¬ μ—°κ²°, ν•˜λ“œμ›¨μ–΄ κΈ°λŠ₯에 λŒ€ν•œ μ•±μ˜ μ•‘μ„ΈμŠ€λ₯Ό μ œν•œν•˜μ—¬ μ•…μ˜μ μΈ κ³΅κ²©μœΌλ‘œλΆ€ν„° μ‚¬μš©μž 데이터와 운영 체제 λ¦¬μ†ŒμŠ€λ₯Ό λ³΄ν˜Έν•©λ‹ˆλ‹€. 앱이 손상될 경우 μ‹œμŠ€ν…œ 및 μ‚¬μš©μž 데이터에 λŒ€ν•œ 손상을 ν¬ν•¨ν•˜λ„λ‘ μ„€κ³„λ˜μ–΄μžˆμœΌλ©°, App Storeλ₯Ό 톡해 λ°°ν¬λ˜λŠ” 앱은 App Sandboxλ₯Ό μ±„νƒν•΄μ•Όν•©λ‹ˆλ‹€.

iOSμ—μ„œ Sandbox의 μ—­ν• 

 

λ³΄ν˜Έκ°€ ν•„μš”ν•œ 어린아이듀을 μœ„ν•΄ λͺ¨λž˜ν†΅μ—μ„œλ§Œ 놀도둝 ν•˜λŠ” SandBoxμ—μ„œ μœ λž˜ν•œ App SandBoxλŠ” λ³΄μ•ˆμ„ μœ„ν•œ Apple의 μ ‘κ·Ό μ œμ–΄ 기술둜, iOS μ•±κ³Ό 파일 μ‹œμŠ€ν…œμ˜ μƒν˜Έ μž‘μš©μ„ μ•±μ˜ μƒŒλ“œλ°•μŠ€ 디렉터리 λ‚΄λΆ€ λ””λ ‰ν„°λ¦¬λ‘œ μ œν•œν•¨μœΌλ‘œμ¨ μ‹œμŠ€ν…œ λ¦¬μ†ŒμŠ€μ™€ μ‚¬μš©μž 데이터λ₯Ό λ³΄ν˜Έν•©λ‹ˆλ‹€. 즉, iOS 앱은 κ·Έ μ•±λ§Œμ˜ μƒŒλ“œλ°•μŠ€λ₯Ό 가지고 있고, ν•΄λ‹Ή 앱이 μžμ‹ μ˜ μƒŒλ“œλ°•μŠ€ λ‚΄λΆ€μ—μ„œ νŒŒμΌλ“€μ„ κ΄€λ¦¬ν•˜λŠ” 것은 자유둭게 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. (ν•˜μ§€λ§Œ, λ‹€λ₯Έ μ•±μ˜ 데이터에 λŒ€ν•œ 접근은 μ•‘μ„ΈμŠ€ κΆŒν•œ 없이 μ ‘κ·Ό λΆˆκ°€)

 

ν•˜λ‚˜μ˜ μƒŒλ“œλ°•μŠ€λŠ” μ—¬λŸ¬ λ””λ ‰ν† λ¦¬λ‘œ κ΅¬λΆ„λ˜μ–΄ κ΄€λ¦¬λ˜κ³ , 각 λ””λ ‰ν† λ¦¬λŠ” 고유의 역할이 μžˆμŠ΅λ‹ˆλ‹€. (μƒˆ μ•± μ„€μΉ˜ μ‹œ μ„€μΉ˜ ν”„λ‘œκ·Έλž¨μ€ μƒŒλ“œλ°•μŠ€ 디렉토리 내에 앱에 λŒ€ν•œ μ—¬λŸ¬ μ»¨ν…Œμ΄λ„ˆ 디렉토리λ₯Ό 생성)

각 μ˜μ—­μ˜ νŠΉμ„±

 

Bundle Container

  • App의 Bundle을 λ³΄μœ ν•˜μ—¬ 파일, info.plist, Resource등을 κ·Έλ£Ήν™”
  • Compile Source(.swift)κ°€ λ°”μ΄λ„ˆλ¦¬ ν˜•νƒœμ˜ μ‹€ν–‰ 파일둜 λ³€ν™˜λœλ‹€.
  • λΌμ΄λΈŒλŸ¬λ¦¬λŠ” ν”„λ ˆμž„ μ›Œν¬λ‘œ κ·Έλ£Ήν™” λœλ‹€.
  • μŠ€ν† λ¦¬λ³΄λ“œ, Xib, strings등이 λ³€ν™˜λœλ‹€.

Data Container (== App Data 폴더)

Documents

  • μ‚¬μš©μž 생성 μ½˜ν…μΈ  μ €μž₯
  • μ‚¬μš©μžκ°€ μˆ˜μ •/μΆ”κ°€/μ‚­μ œ κ°€λŠ₯ (ex. iTunes 파일 곡유 -> Finder)
  • μ‚¬μš©μžμ—κ²Œ λ…ΈμΆœ μ—¬λΆ€ 선택 κ°€λŠ₯
  • iCloud, iTunes λ°±μ—…

Documents/Inbox

  • μ™ΈλΆ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 전달 자료 μ €μž₯
  • Read, Delete κ°€λŠ₯, Create, Rewrite λΆˆκ°€
  • iCloud, iTunes λ°±μ—…

Library

  • μ‚¬μš©μž 데이터 μ™Έ μ €μž₯
  • μ‚¬μš©μžμ—κ²Œ 직접 λ…ΈμΆœ μ—†μŒν•˜μœ„ 디렉토리 생성 κ°€λŠ₯
  • iCloud, iTunes λ°±μ—…

Library/Application Support

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 생성 데이터 μ €μž₯
  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ΄€λ¦¬μš© 데이터 μ €μž₯
  • iCloud, iTunes λ°±μ—…

Library/Caches

  • 반볡 μ‚¬μš© μž„μ‹œ 데이터 μ €μž₯
  • λ””μŠ€ν¬ μš©λŸ‰ λΆ€μ‘± μ‹œ μ‹œμŠ€ν…œμ—μ„œ μžλ™ μ²­μ†Œ
  • 단, μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰ μ€‘μ—λŠ” μ‚­μ œν•˜μ§€ μ•ŠμŒ
  • μž¬μš”μ²­/μž¬μƒμ‚° κ°€λŠ₯ 데이터 μ €μž₯
  • iCloud, iTunes λ°±μ—… μ œμ™Έ

Library/Preferences

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„€μ • 데이터 μ €μž₯
  • 직접 μˆ˜μ • ꢌμž₯ν•˜μ§€ μ•ŠμŒ(UserDefaults, CFPreferences λ“± μ‚¬μš© ꢌμž₯)
  • iCloud, iTunes λ°±μ—…

Tmp

  • μž¬μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” μž„μ‹œ 데이터 μ €μž₯
  • μ‹œμŠ€ν…œμ΄ 주기적으둜 μ²­μ†Œ
  • 앱이 μ‹€ν–‰ 쀑일땐 μ²­μ†Œ X
  • iCloud, iTunes λ°±μ—… μ œμ™Έ

[참고 자료]

https://developer.apple.com/library/archive/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html

https://developer.apple.com/documentation/security/app_sandbox

https://odinios.tistory.com/8

https://hyunndyblog.tistory.com/149