iOS

[iOS] App SandBox

yujaehui 2024. 8. 20. 00:36

πŸ“¦ SandBoxλž€

운영체제의 컀널 μˆ˜μ€€μ—μ„œ μ‹œν–‰λ˜λŠ” μ ‘κ·Ό μ œμ–΄ 기술둜, μ™ΈλΆ€ ν”„λ‘œκ·Έλž¨μ΄ 보호된 μ˜μ—­μ—μ„œ λ™μž‘ν•˜κ²Œ ν•˜μ—¬ μ‹œμŠ€ν…œμ΄ λΆ€μ •ν•˜κ²Œ λ™μž‘λ˜λŠ” 것을 λ§‰λŠ” λ³΄μ•ˆ ν˜•νƒœμž…λ‹ˆλ‹€.
iOSμ—μ„œλŠ” 각 앱이 μ„€μΉ˜λ  λ•Œλ§ˆλ‹€ μƒŒλ“œλ°•μŠ€ 곡간이 μƒμ„±λ˜μ–΄, ν•΄λ‹Ή 앱이 ν•„μš”ν•œ 데이터λ₯Ό μ €μž₯ν•˜κ³  λ‹€λ₯Έ μ•±κ³Όμ˜ 데이터 곡유λ₯Ό μ œν•œν•©λ‹ˆλ‹€.
App Storeμ—μ„œ μœ ν†΅λ˜λŠ” App듀은 λͺ¨λ‘ App SandBoxλ₯Ό μ μš©μ‹œμΌœμ•Όλ§Œ ν•©λ‹ˆλ‹€.


πŸ§ͺ μƒŒλ“œλ°•μŠ€κ°€ μ μš©λ˜μ§€ μ•Šμ€ μ•±μ˜ 경우

μƒŒλ“œλ°•μŠ€κ°€ μ μš©λ˜μ§€ μ•Šμ€ 앱은 μ‹€ν–‰ν•˜λŠ” μ‚¬μš©μžμ™€ λ™μΌν•œ λͺ¨λ“  κΆŒν•œμ„ 가지며, μ‚¬μš©μžκ°€ μ ‘κ·Όν•  수 μžˆλŠ” λͺ¨λ“  λ¦¬μ†ŒμŠ€μ— μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.
λ”°λΌμ„œ, ν•΄λ‹Ή μ•±μ΄λ‚˜ μ—°κ²°λœ ν”„λ ˆμž„μ›Œν¬μ— λ³΄μ•ˆ ν—ˆμ μ΄ λ°œμƒν•˜λ©΄ ν•΄μ»€λŠ” 이λ₯Ό μ•…μš©ν•˜μ—¬ 앱을 μ œμ–΄ν•˜κ³ , μ•±μ—μ„œ μ ‘κ·Ό κ°€λŠ₯ν•œ λ¦¬μ†ŒμŠ€μ—λ„ μ ‘κ·Όν•˜μ—¬ λͺ¨λ“  μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


πŸ› οΈ μƒŒλ“œλ°•μŠ€ μ „λž΅

  1. μ‹œμŠ€ν…œκ³Όμ˜ μƒν˜Έ μž‘μš© 방식 μ •μ˜: 앱이 μ‹œμŠ€ν…œκ³Ό μƒν˜Έ μž‘μš©ν•˜λŠ” 방식을 λͺ…ν™•νžˆ μ„€λͺ…ν•˜μ—¬, μ‹œμŠ€ν…œμ΄ μž‘μ—… μ™„λ£Œμ— ν•„μš”ν•œ μ ‘κ·Ό κΆŒν•œλ§Œμ„ 앱에 λΆ€μ—¬ν•˜λ„λ‘ ν•©λ‹ˆλ‹€
  2. μ‚¬μš©μž μƒν˜Έ μž‘μš©μ„ ν†΅ν•œ μΆ”κ°€ κΆŒν•œ λΆ€μ—¬: μ•± μ‚¬μš©μžκ°€ μ—΄κΈ° 및 μ €μž₯ λŒ€ν™”μƒμž, λ“œλž˜κ·Έ μ•€ λ“œλ‘­ λ“±μ˜ μΉœμˆ™ν•œ μ‚¬μš©μž μƒν˜Έ μž‘μš©μ„ 톡해 앱에 μΆ”κ°€ μ ‘κ·Ό κΆŒν•œμ„ 투λͺ…ν•˜κ²Œ λΆ€μ—¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ§Žμ€ 앱을 μ‚¬μš©ν•˜λ©΄μ„œ λ³΄λŠ” μ € μ•ŒλŸΏ 창을 톡해 μΆ”κ°€ μ ‘κ·Ό κΆŒν•œμ„ λΆ€μ—¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


🎯 μƒŒλ“œλ°•μŠ€ 원칙

μƒŒλ“œλ°•μŠ€λŠ” μ•±λ³„λ‘œ λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ μ ‘κ·Ό κΆŒν•œμ„ μ œν•œν•˜μ—¬, κ³΅κ²©μžκ°€ 앱에 μ•…μ˜μ μœΌλ‘œ μ ‘κ·Όν•˜λ”λΌλ„ μ‚¬μš©μž λ°μ΄ν„°μ˜ λ„λ‚œ 및 μ‚­μ œμ™€ μ‹œμŠ€ν…œ ν•˜λ“œμ›¨μ–΄ 해킹에 λŒ€ν•œ λ§ˆμ§€λ§‰ 방어선을 μ œκ³΅ν•©λ‹ˆλ‹€.
iOS 앱은 λ‹€μŒκ³Ό 같은 λ¦¬μ†ŒμŠ€λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•œ μ˜λ„λ₯Ό λͺ…μ‹œν•΄μ•Ό ν•©λ‹ˆλ‹€

  • ν•˜λ“œμ›¨μ–΄ (카메라, 마이크, USB, ν”„λ¦°ν„°)
  • λ„€νŠΈμ›Œν¬ μ—°κ²°
  • μ•± 데이터 (μΊ˜λ¦°λ”, μœ„μΉ˜, μ—°λ½μ²˜)
  • μ‚¬μš©μž 파일 (λ‹€μš΄λ‘œλ“œ, μŒμ•…, μ˜ν™” λ“±)

앱이 μ΄λŸ¬ν•œ λ¦¬μ†ŒμŠ€μ— μ ‘κ·Όν•˜λ €λ©΄ μ‚¬μš©μžμ—κ²Œ κΆŒν•œμ„ μš”μ²­ν•΄μ•Ό ν•˜λ©°, κΆŒν•œμ„ ν—ˆμš©ν•˜μ§€ μ•ŠμœΌλ©΄ λŸ°νƒ€μž„ μ‹œμ μ— μ‹œμŠ€ν…œμ— μ˜ν•΄ λ¦¬μ†ŒμŠ€ 접근이 μ œν•œλ©λ‹ˆλ‹€.


🧱 μƒŒλ“œλ°•μŠ€ ꡬ쑰

μƒŒλ“œλ°•μŠ€λŠ” 앱에 λŒ€ν•œ 파일, λ„€νŠΈμ›Œν¬ λ¦¬μ†ŒμŠ€, ν™˜κ²½μ„€μ •, ν•˜λ“œμ›¨μ–΄ 등에 λŒ€ν•œ 접근을 μ œν•œν•˜λŠ” μ„ΈλΆ„ν™”λœ μ œμ–΄ μ§‘ν•©μž…λ‹ˆλ‹€.
iOS의 각 앱은 μƒŒλ“œλ°•μŠ€ν™”λ˜μ–΄ 있으며, 앱을 μ‚¬μš©ν•˜λŠ” μ‚¬μš©μžλŠ” ν•΄λ‹Ή μ•±μ˜ μƒŒλ“œλ°•μŠ€ λ‚΄λΆ€ λ°μ΄ν„°λ§Œ μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.
λ”°λΌμ„œ κ°œλ°œμžλŠ” μ•±μ—μ„œ μ‚¬μš©λ˜λŠ” 데이터λ₯Ό 기기에 μ €μž₯ν•΄μ•Ό ν•  ν•„μš”κ°€ μžˆλ‹€λ©΄ μƒŒλ“œλ°•μŠ€ λ‚΄λΆ€μ˜ 디렉터리에 데이터λ₯Ό μ €μž₯ν•΄μ•Ό ν•©λ‹ˆλ‹€. 

  1. λ²ˆλ“€ μ»¨ν…Œμ΄λ„ˆ(Bundle Container): μ•±μ˜ μ‹€ν–‰ 파일과 κ΄€λ ¨ λ¦¬μ†ŒμŠ€λ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€.
  2. 데이터 μ»¨ν…Œμ΄λ„ˆ(Data Container): μ•± 및 μ‚¬μš©μž 데이터λ₯Ό λ³΄μœ ν•˜λ©°, λ‹€μŒκ³Ό 같은 ν•˜μœ„ λ””λ ‰ν„°λ¦¬λ‘œ λ‚˜λ‰©λ‹ˆλ‹€
    • Documents: 앱을 톡해 μƒμ„±λœ λ¬Έμ„œλ‚˜ 데이터λ₯Ό μ €μž₯ν•˜λ©°, κ°œλ°œμžμ™€ μ‚¬μš©μžκ°€ λͺ¨λ‘ μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • Library: μ‚¬μš©μž 데이터 파일과 μž„μ‹œ νŒŒμΌμ„ μ œμ™Έν•œ λͺ¨λ“  νŒŒμΌμ„ κ΄€λ¦¬ν•˜λ©°, μ™ΈλΆ€λ‘œ λ…ΈμΆœλ˜μ§€ μ•Šμ•„μ•Ό ν•˜λŠ” νŒŒμΌμ„ μ €μž₯ν•©λ‹ˆλ‹€.
    • Temp: 앱이 μ‹€ν–‰λ˜λŠ” λ™μ•ˆλ§Œ μž μ‹œ μ €μž₯ν•  ν•„μš”κ°€ μžˆλŠ” μž„μ‹œ 파일 μ €μž₯ κ³΅κ°„μž…λ‹ˆλ‹€.
  3. iCloud μ»¨ν…Œμ΄λ„ˆ(iCloud Container): λŸ°νƒ€μž„ μ‹œμ μ— 접근을 μš”μ²­ν•  수 μžˆλŠ” μΆ”κ°€ μ»¨ν…Œμ΄λ„ˆ λ””λ ‰ν„°λ¦¬μž…λ‹ˆλ‹€. 

πŸ“² μ•± κ°„ 데이터 곡유 방법

μƒŒλ“œλ°•μŠ€ ν™˜κ²½μ—μ„œ μ•± κ°„μ˜ 데이터 κ³΅μœ λŠ” μ—„κ²©ν•˜κ²Œ ν†΅μ œλ˜λ©°, 일반적으둜 λ‹€μŒκ³Ό 같은 방법을 톡해 μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€.

  • URL μŠ€ν‚΄(URL Scheme) μ‚¬μš©: 앱이 νŠΉμ • URL μŠ€ν‚΄μ„ λ“±λ‘ν•˜μ—¬ λ‹€λ₯Έ 앱이 ν•΄λ‹Ή μŠ€ν‚΄μ„ 톡해 데이터λ₯Ό μ „λ‹¬ν•˜κ±°λ‚˜ μš”μ²­ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • UIPasteboard ν™œμš©: 곡용 ν΄λ¦½λ³΄λ“œμΈ UIPasteboardλ₯Ό μ‚¬μš©ν•˜μ—¬ μ•± 간에 ν…μŠ€νŠΈ, 이미지 λ“±μ˜ 데이터λ₯Ό κ³΅μœ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ•± κ·Έλ£Ή(App Groups) μ„€μ •: 같은 κ°œλ°œμžκ°€ λ§Œλ“  μ•±λ“€ 간에 곡용 μ»¨ν…Œμ΄λ„ˆλ₯Ό μ„€μ •ν•˜μ—¬ 데이터λ₯Ό κ³΅μœ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό μœ„ν•΄μ„œλŠ” ν•΄λ‹Ή 앱듀이 λ™μΌν•œ μ•± 그룹에 속해 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

'iOS' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[iOS] Debuggging, LLDB  (0) 2024.11.12
[iOS] Debugging, Breakpoint  (0) 2024.08.26
[iOS] App's life cycle  (0) 2024.08.20