안드로이드와 iOS의 차이가 이렇게 클 줄은 처음엔 몰랐다. 하지만 개발을 진행하면서 점점 iOS에 대한 불편함이 쌓였고, 결국엔 거의 증오에 가까운 감정을 느낄 정도가 되었다. 그럼에도 불구하고, iOS의 엄격한 규정을 준수하며 개발을 완료해야 했기에, 본격적인 삽질을 시작하게 되었다.
특히, 두 플랫폼 간의 정책 차이와 기술적 제약으로 인해 같은 기능을 구현하는 데 있어 두 배 이상의 시간과 노력이 필요했다. 이런 과정을 통해 안드로이드의 유연성과 비교되는 iOS의 까다로움을 깊이 체감하게 되었다. 그래도 이 모든 과정을 헤쳐 나가는 것은 결국 내 몫이었다.
결국, 개발자란 환경 탓을 하기보다는 문제를 해결하며 앞으로 나아가는 사람이라는 것을 다시금 깨닫게 되었다.
내가 제일 먼저 시작한 방법은 iOS에서 파일을 공유하는 방식을 개선하는 것이었다. 특히, 파일을 어디에 저장할지 또는 어떻게 공유할지를 사용자가 직접 선택할 수 있도록 설계했다. 이를 위해 Flutter의
share_plus
라이브러리를 사용했다.아래는 내가 사용한 방식의 예시 코드다:
import 'package:share_plus/share_plus.dart'; Future<void> shareFile(String filePath) async { try { // 공유할 파일 경로를 전달 await Share.shareXFiles([XFile(filePath)], text: '파일을 공유합니다.'); print("파일 공유 성공!"); } catch (e) { // 오류 처리 print("파일 공유 중 오류 발생: $e"); } }
코드 설명
Share.shareXFiles
: iOS 및 Android에서 모두 사용할 수 있는 파일 공유 메서드로, 파일 경로와 함께 추가적인 텍스트를 전달할 수 있다.
XFile
객체: 공유할 파일을 지정하는 객체로, 로컬 파일 경로를 기반으로 생성한다.
- 오류 처리: 공유 중 발생할 수 있는 예외를
try-catch
로 처리하여 앱의 안정성을 높였다.
사용자 경험 개선
- 저장소 선택: iOS의 공유 시스템 특성상, 사용자가 파일을 직접 저장하거나 클라우드 서비스(예: iCloud, Google Drive 등)에 업로드할 수 있도록 선택의 폭을 넓혔다.
이 방식을 통해 iOS의 까다로운 파일 관리 정책을 우회하면서도, 사용자에게 직관적이고 유연한 파일 공유 기능을 제공할 수 있었다.
안드로이드의 경우, 위의 코드 예시처럼 내 파일 → 다운로드 폴더에 파일이 자동으로 저장되도록 설정하였다. 이를 통해 사용자가 저장 경로를 명확히 인지할 수 있고, 접근성도 높아진다.
import 'dart:io'; import 'package:path_provider/path_provider.dart'; String savePath; if (Platform.isAndroid) { // Android의 기본 다운로드 폴더 경로 savePath = "/storage/emulated/0/Download/$fileName"; } else if (Platform.isIOS) { // iOS에서는 앱 전용 문서 디렉토리에 저장 final directory = await getApplicationDocumentsDirectory(); savePath = "${directory.path}/$fileName"; } else { throw Exception("Unsupported platform"); } // 파일 저장 final file = File(savePath); await file.writeAsBytes(bytes);
주요 포인트
- 안드로이드 저장 경로:
- Android에서는
/storage/emulated/0/Download/
경로를 사용해 다운로드 폴더에 파일을 저장하도록 설정했다. - 이 경로는 대부분의 안드로이드 기기에서 표준으로 사용되는 공용 다운로드 디렉토리이다.
이점
- 안드로이드: 사용자가 쉽게 파일을 찾을 수 있도록 공용 디렉토리에 저장.
위 방법을 통해 플랫폼별로 파일 저장 문제를 해결할 수 있었고, 안드로이드에서는 사용자 친화적인 접근성을 확보했다.
Share article