[SwiftBeam #16] "iOS의 폐쇄성 극복하기" - 샌드박스 안에서 파일 꺼내기

2026. 6. 28. 20:48AI Product Building/SwiftBeam

반응형
SwiftBeam Series #16

"닫혀있는 사과의 정원"
iOS 샌드박스와 파일 접근

폐쇄적인 시스템에서 자유로운 공유 찾기

🍎 🔒 📦 📁

지난 편에서 안드로이드의 복잡한 권한 체계를 다루었다면, 오늘은 그 반대편에 있는 거대한 벽, iOS에 대해 이야기해보려 합니다. 애플의 iOS는 보안과 프라이버시를 위해 '샌드박스(Sandbox)'라는 매우 엄격한 시스템을 채택하고 있습니다. 모든 앱은 자신만의 독립된 섬(Container)에 갇혀 있으며, 옆 섬에 있는 파일조차 함부로 구경할 수 없죠. 파일 전송 앱인 SwiftBeam이 이 철저히 닫힌 정원에서 어떻게 파일을 꺼내고, 또 안전하게 심어두었는지 그 기술적 여정을 소개합니다.

1. "모든 앱은 외딴섬이다" - 샌드박스의 원리

iOS에서 앱을 설치하면 시스템은 해당 앱만을 위한 전용 디렉토리를 생성합니다. 앱은 이 영역 안에서는 자유롭게 파일을 만들고 지울 수 있지만, 그 밖의 영역은 원천적으로 차단됩니다. 안드로이드처럼 "전체 저장소 접근 권한" 같은 것은 존재하지도 않습니다.

이러한 구조는 보안상 매우 훌륭하지만, 여러 앱의 파일을 모아 전송해야 하는 SwiftBeam에게는 큰 숙제였습니다. "사용자가 보낼 파일을 어떻게 이 섬 밖에서 가져올 것인가?" 이것이 첫 번째 기술적 난관이었습니다.

2. 다리를 놓다: UIDocumentPicker와 공유 시트

섬 밖으로 나가는 유일한 방법은 시스템이 제공하는 정식 '통로'를 이용하는 것입니다. SwiftBeam은 UIDocumentPickerViewController(Flutter의 file_picker 패키지를 통해 추상화된)를 활용하여 사용자가 직접 파일을 선택하게 합니다.

사용자가 파일을 선택하는 순간, iOS 시스템은 해당 파일에 대한 임시 접근 권한(Security-scoped URL)을 SwiftBeam에게 부여합니다. 앱은 이 짧은 기회 동안 파일을 읽어 스트림으로 변환하고 네트워크로 쏘아 보냅니다. 사용자의 명시적인 '선택'이 보안의 빗장을 여는 유일한 열쇠가 되는 셈입니다.

3. "사진 한 장도 소중하게" - PHPicker와 권한 설정

사진과 비디오는 더욱 특별한 취급을 받습니다. iOS 14부터 도입된 PHPicker는 앱이 전체 사진첩 권한을 얻지 않고도 사용자가 선택한 사진만 안전하게 가져올 수 있게 해줍니다.

하지만 더 나은 경험을 위해 전체 사진 목록을 앱 내에서 보여주고 싶다면 NSPhotoLibraryUsageDescription과 같은 프라이버시 선언이 필수적입니다. SwiftBeam은 Info.plist 파일에 아주 정중하고 명확한 목적을 기재하여, 애플의 심사 가이드라인을 준수하면서도 사용자가 안심하고 권한을 부여할 수 있도록 유도했습니다. "당신의 추억을 다른 기기로 안전하게 옮기기 위해 사진첩 접근이 필요합니다"라는 진심 어린 문구와 함께 말이죠.

4. 받은 파일은 어디로 가나? - Files 앱과의 연동

보내는 것만큼 중요한 것이 '받는 것'입니다. 다른 기기에서 받은 파일을 iOS 기기 어디에 저장해야 사용자가 쉽게 찾을 수 있을까요? 앱의 비밀 폴더에 숨겨두면 사용자는 다른 앱에서 그 파일을 쓸 수 없습니다.

  • 💾 On My iPhone: SwiftBeam은 전송받은 파일을 Application Documents 디렉토리에 저장하면서, LSSupportsOpeningDocumentsInPlaceUIFileSharingEnabled 옵션을 활성화했습니다.
  • 📂 Files 앱 노출: 이 설정을 통해 사용자는 iOS 기본 '파일(Files)' 앱에서 SwiftBeam 폴더를 발견하고, 전송받은 파일을 즉시 확인하거나 다른 앱으로 공유할 수 있습니다.

닫힌 샌드박스 안에서도 외부와의 '공통 분모'를 찾아내어 사용성을 극대화한 전략입니다.

5. 제약 속에서 피어난 혁신

iOS 개발은 늘 제약과의 싸움입니다. 하지만 그 제약은 사용자의 안전을 보장하는 장치이기도 합니다. SwiftBeam은 이 샌드박스라는 규칙을 존중하면서도, 기술적인 우회로와 정식 API를 조화롭게 사용하여 에어드랍에 버금가는 매끄러운 경험을 만들어냈습니다.

안드로이드와 iOS라는 모바일의 양대 산맥을 모두 정복했습니다. 이제 우리는 시야를 더 넓혀볼 때입니다. 브라우저 하나만 있으면 어디서든 연결될 수 있을까요? 다음 편에서는 웹 기술의 한계에 도전하는 '웹(Web)에서도 가능할까? 브라우저의 한계와 도전'에 대해 이야기해보겠습니다.

다음 편 예고: [SwiftBeam #17] "웹(Web)에서도 가능할까?" - 브라우저의 한계와 도전

Apple의 까다로운 기준까지 충족시키는 Team M2Y의 섬세한 개발 철학!
사용자의 프라이버시와 편의성을 모두 잡은 다양한 앱들을 지금 확인해 보세요.

Team M2Y 프리미엄 앱 살펴보기 →
TAGS: iOS개발, 샌드박스, Sandbox, 파일접근권한, Info.plist, Flutter, 플러터, SwiftBeam, UIDocumentPicker, Files앱, 기술블로그, 개발일지
반응형