iOS에서 각 앱은 독립된 환경(샌드박스) 안에서 실행되며, 다른 앱이나 시스템 자원에 직접 접근하지
못하도록 격리
앱마다 고유한 파일 시스템 디렉토리만 접근 가능하며, 시스템 파일이나 다른 앱에 데이터는 접근 할 수 없음
| 제약사항 | 설명 |
|---|---|
| 다른 앱의 파일 접근 불가 | 파일 공유, 메모리 접근 제한 |
| 시스템 API 사용 제한 | jailbreak 없이 특정 API 접근 불가 |
| 앱 간 직접적인 메모리 공유 불가 | 앱 간 직접적인 통신 어려움 |
| 리소스 공유 제한 | 공유 파일 저장, DB 접근 제한 |
| 외부 파일 접근 시 권한 필요 | 예: 사진 접근은 Info.plist 권한 필요 |
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>myapp</string>
</array>
</dict>
</array>
if let url = URL(string: "myapp://open?id=123") {
UIApplication.shared.open(url)
}
등록된 앱이 설치되어 있으면 실행되고, URL 파라메터로 데이터 전달 가능
| 항목 | 설명 |
|---|---|
| 검증 없는 실행 위험 | 악의적 앱이 조작된 URL을 보낼 수 있음 |
| 인증 정보 노출 위험 | URL에 민감 정보(id, token 등) 담으면 노출 위험 |
| 미등록 스킴 호출 | 앱이 설치되지 않았을 경우 대응 필요 |
앱 그룹은 개발자 계정 하의 앱 또는 앱 확장(App Extension)간에 공유 컨테이너(container)를
생성하여 데이터를 공유할 수 있게 해주는 기능
let sharedDefaults = UserDefaults(suiteName: "group.com.example.shared")
sharedDefaults?.set("Hello", forKey: "message")
| 데이터 유형 | 적합 여부 | 이유 |
|---|---|---|
| 간단한 값 (String, Bool 등) | ✅ 매우 적합 | UserDefaults(suiteName:)로 공유 |
| JSON, 설정 파일 | ✅ 적합 | FileManager로 읽기/쓰기 |
| 대용량 파일 (영상, 이미지 등) | ⚠️ 제한적 | 파일 I/O는 가능하나, 성능 및 저장소 용량 고려 필요. 임시 저장 용도로만 권장 |
| 기술 요소 | 역할 / 목적 | 제약 또는 고려사항 |
|---|---|---|
| 샌드박스 | 앱 격리로 보안과 안정성 확보 | 앱 간 직접 접근 불가 |
| URL 스킴 | 앱 실행 및 데이터 전달 | 보안 검증 필수 |
| App Group | 동일 개발자 앱/확장 간 파일 공유 | 사전 설정 필요, 대용량 사용 주의 |
| App Extension | 앱 기능 확장(위젯, 공유 등) | App Group으로만 공유 가능 |