미니 안드로이드 ios 파일 관련 api만 모아봤습니다
- idsr
- 조회 수 2261
- 2022.06.02. 09:49
계속 관련글 쓰고는 있는데 한번 꽂히니 찾게 되네요
써드파티 관점에서 기기내 파일시스템 접근 방법을 한번 살펴봤습니다.
안드로이드의 경우 제일 큰 변화라면 Q부터 적용된 Scoped Storage이후 파일 접근 방식이 ios와 유사해 졌습니다.
Scoped Storage 핵심은 외부 저장소에 모든 접근 권한을 줬던 기존방식과 다르게 다른 앱에 할당된 공간 접근은 금지 된다는 점입니다
Q 이후 타겟 앱의 경우 보통 세가지 방법이 가능하게 됩니다
1. 전체 파일 접근 권한 (파일 관리, 도큐멘트 관리 앱들에 권장되는 권한)
2. MediaStore 접근 (사진, 동영상, 음악, 다운로드)
3. StorageAccessFramework- 밑 도큐멘트 피커로 접근이라 생각하시면 됩니다
AllFilesAccess: Manage all files on a storage device | Android Developers
MediaStore:공유 저장소의 미디어 파일에 액세스 | Android 개발자 | Android Developers
Storage Access Framework: 저장소 액세스 프레임워크를 사용하여 파일 열기 | Android 개발자 | Android Developers
DocumentsProvider: DocumentsProvider | Android Developers
파일 관리 앱 같은 경우 모든 파일에 권한을 부여하는 앱의 경우 All Files Access 권한 (모든 파일 접근 권한)
MediaStore의 겅우 사진,음악 권한 팝업
여기서 미디어 폴더 판별 기준은 다음과 같습니다
DocumentsProvider의 경우 다음과 같은 파일 피커로 접근한다고 생각하시면됩니다
시스템 파일 피커를 통해서 소통하는 방식은 ios 파일앱 선택과 유사하다 보시면 됩니다.
iOS의 경우
DocumentPicker: Apple Developer Documentation
UIDocumentPickerViewController : Apple Developer Documentation
일반적으로 파일 선택하는 팝업 입니다. 도큐멘테이션보면 최대한 파일 복사해 가는것은 지양하라고 합니다
FileProvider: Apple Developer Documentation
드라이브등 파일앱에 붙는 경우입니다 (파일앱 사이드바)
MediaPicker: Apple Developer Documentation
PhotosPicker: Apple Developer Documentation
MediaPicker의 경우 음악 라이브러리, PhotosPicker의 경우 사진 라이브러리에 해당됩니다
사진 라이브러리으 경우
아이클라우드와 로컬 사진 라이브러리만 보게 되어 있습니다.
보시면 알겠지만 둘다 미디어를 라이브러리로 묶어 처리하는 부분, 파일 피커를 통한 파일 접근/폴더 접근 권한 부여, 다른 앱 저장소 접근 방지등 대부분 비슷하게 구현되어있습니다
차이점이라면 ios쪽 미디어 라이브러리의 경우 내부 공간의 파일 형태의 미디어를 취급하지 않는다는 점인데 보통 사진 관련 불만이신 분들은 이부분일듯 합니다
안드로이드처럼 다운로드 같은 특정 폴더는 사진 라이브러리 추가던가 맥처럼 ios 음악라이브러리를 음악 파일로 추가할수 있도록 변경되는게 필요할듯 합니다 (뭐든 파일과 라이브러리 따로 놀지는 않는 방향이 필요하긴 합니다)
구글쪽에선 저 도큐멘트 피커가 아직도 마시멜로 수준 인터페이스인데 외부 클라우드 제공자 보이는거도 파일앱으로 통합시키고 저 피커도 좀 다듬어 주면 좋겠네요
++ 추가
ashell에서 로컬에 보이는 앱 공간이 정확히 어디인가 한번 파봤습니다
예전에 탈옥해보신분이면 어딘지 감 오시리라 예상됩니다. 저기 링크 심볼릭 걸어둔거 같습니다
그리고 폴더 접근 권한 주는경우 ios에서 어디까지 읽나 봤더니
(내 아이폰 공간 전부 권한 줬을 때)
앱 공간 폴더들 (앱 아이콘 있는거) 제외하고는 다 접근 가능합니다