관리 메뉴

찹모찌의 기록일지

내 앨범이 너에게 닿기를: 서버 없이 앨범 전달받기 본문

iOS

내 앨범이 너에게 닿기를: 서버 없이 앨범 전달받기

찹모찌 2024. 3. 15. 19:23

'NostalgiAlbum' 앱을 만들 때, 서버가 존재하지 않고 로컬에서만 동작하는 앱을 커스텀 파일 확장자 'nost'로 추출해 share sheet를 활용하여 앨범 공유 기능을 만든 이야기를 담고 있습니다.

 

처음으로 만든 iOS 앱은 앨범 앱으로, 사진을 내용과 함께 기록하고 앨범으로 저장할 수 있는 앱이다.

https://apps.apple.com/kr/app/nostalgialbum/id6448299485

 

‎NostalgiAlbum

‎당신만의 앨범을 만들고 추억을 간직하세요. 사진에 그 때 느꼈던 감정을 기록해보세요. 친구들과 앨범을 공유하며 추억을 나눠요. [1] 앨범 만들기 - 앨범 표지를 NostalgiAlbum만의 표지를 사용

apps.apple.com

https://app-in-app-le.github.io/nostalgialbum/NostalgiAlbum.html

 

NostalgiAlbum

💡 App Description 앨범을 만들고 추억을 간직하고 싶은 사진들을 넣어 제목, 내용과 함께 꾸밀 수 있습니다. 앨범을 다른 사람들과 공유하며 추억을 나눌 수 있습니다. 앨범 표지, 글꼴, 테마 색을

app-in-app-le.github.io

(앱 스토어, 지원 홈페이지 링크)

 

NostalgiAlbum은 서버가 존재하지 않고 사진과 내용을 로컬 저장소에 기록하여 사용한다.

앨범의 내용을 저장하고 불러오는 구조

앨범에 사진과 내용을 기록하던 도중 내 앨범을 다른 사람과 나눌 수 있다면 좋겠다는 생각이 들었다. 근데 로컬에 저장하는 파일을 어떻게 다른 사람에게 넘겨줄 수 있을까? 서버 없이도 공유할 수 있는 방법은 없을까? 폴더를 어떻게 다른 사람에게 넘겨주지?

 

앨범 앱을 공유해보자 그런데 어떻게?

앨범을 어떻게 넘겨줄 수 있을까?

내 앱에서도 앨범 폴더를 통해 앨범을 사용하고 있으니 폴더를 그대로 넘겨주면 되지 않을까라는 생각을 했다. 그런데 폴더를 어떻게 넘겨줄 수 있지? iOS 샌드박스가 이런 방식을 허용할까? 여러모로 힘든 방법임에 분명했다(불가능에 가까울지도).

그렇다면 다른 앱에서는 공유 기능을 어떤 방식으로 사용하는지 되새겨볼 필요가 있었다.

iOS activity views or share sheet

iOS에서는 share sheet를 통해 파일을 주고받는다. 저장을 할 수도 있고, 메시지 앱이나 각종 메신저를 활용할 수도 있다.

앨범을 share sheet를 이용해서 보낸다면 어떨까?

총 두 가지 정도의 방법을 고민했다.

첫번째로 NostalgiAlbum에서 탐색기처럼 파일을 찾고, 그 파일을 열어 앨범을 추가하는 것이다.

그러나 이 방법은 사용자 경험에서 별로 좋지 못하다는 생각이 들었다. 주고받을 때, 파일을 다운로드하고, 그걸 또다시 앱을 켜서 파일을 찾아서, 앨범을 추가해야 한다는 과정이 좋은 방법으로는 느껴지지 않았다.

그렇다면 어떤 방법이 좋을까? 문득 pdf파일을 pdf 리더 앱으로 열던 기억이 떠올랐다. NostalgiAlbum에도 적용할 수 있지 않을까?

결국 정한 방법은 파일을 열 때 NostalgiAlbum으로 열어 자동적으로 앨범이 추가될 수 있도록 하면 어떨까?

공유 앨범 파일과 NostalgiAlbum 연결하기

앨범 폴더 자체를 공유하기는 쉽지 않을 것이다. 폴더 자체를 보내는 것도 문제겠지만, 그 폴더가 앨범 폴더라는 것을 알 방법이 없다. 그러면 폴더를 압축해서 하나의 파일로 보내는 방법은 어떨까? 파일 자체를 추출할 수는 있겠지만 마찬가지로 해당 파일이 앨범 폴더라는 것을 알 방법이 없다. 따라서 nost라는 확장자를 가진 파일을 만들어 nost라는 파일을 열 때 NostalgiAlbum으로 열 수 있도록 할 것이다.

앨범 파일로 추출하는 과정

물론 단순 확장자를 .nost로 바꾼 파일이 열리면 안 되기 때문에 파일을 변경하는 과정에서 특수 문자를 넣어 NostalgiAlbum인 것을 확인할 수 있도록 했다.

NostalgiAlbum의 공유 과정

앨범에서 공유 버튼을 누르면 nost 파일을 생성해 share sheet의 activityItems에 넣는다. 그걸 카카오톡과 같은 메신저에 넣어 보낼 수 있다. 그 후 nost 파일을 NostalgiAlbum으로 열게 되면

AppDelegate의 

func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any]) -> Bool

메서드에서 해당 파일의 url을 확인, 파일 검사를 한 후, nost 파일을 다시 압축해제 하여 앨범을 추가할 수 있는 화면을 띄운다.

이러한 방식으로 서버 없이 다른 메신저 앱을 이용해 앨범을 공유할 수 있었다. 이제 앨범을 카카오톡으로 서로 주고 받으며 신나게 얘기하면 끝!

 

첫 iOS 앱이다 보니 그 때는 안 보였던 여러 개선 부분들이 보이는데(굳이 txt파일을?? 이 때는 json의 존재를 몰랐다) 이러한 부분들을 고쳐나가 보고 싶다.