[파마비아] macOS 앱 배포 중 놓친 4가지 실수와 해결책

Mac 데스크톱 앱을 만들어 배포할 때 가장 위험한 것은 무언가 망가져도 알 수 없다는 점입니다. 사용자가 앱을 열 수 없거나, 설치 화면이 깨져 나가거나, 파일이 너무 커서 받지 못하는 상황이 조용히 일어나면 배포자는 며칠 뒤에야 문제를 발견합니다. 실제 배포 과정에서 겪었던 네 가지 장애와 각각을 막은 방법을 정리했습니다.

Apple 공증 없이 배포된 앱, 사용자가 열 수 없음

8월 25일부터 받은 Mac 앱이 전부 실행되지 않았습니다. “Apple은 이 앱에 악성 코드가 없음을 확인할 수 없습니다”라는 경고와 함께 휴지통으로 이동하는 창만 떴습니다. 나간 파일 4개가 모두 막혀 있었습니다.

원인은 빌드 방식을 바꾼 시점이었습니다.

GitHub Actions 비용을 줄이려고 Mac 빌드를 클라우드에서 로컬 컴퓨터로 옮겼는데, 클라우드 환경에서는 Developer ID 서명과 Apple 공증을 자동으로 진행했습니다. 반면 만든 로컬 스크립트는 임시 서명만 했습니다. 제대로 확인하지 않은 채 여러 번 배포했습니다.

이제는 Developer ID로 서명한 뒤 Apple 공증을 받고, 마지막 단계에서 정말 앱이 열리는지 검사합니다. 열리지 않으면 배포 자체를 중단합니다.

설치 화면이 회색 빈 배경으로 나간 이유

드래그해서 설치하는 아름다운 화면 대신 배경도 화살표도 없는 기본 회색 창만 배포하고 있었습니다.

사용한 도구가 Finder를 자동으로 조종해서 설치 창을 꾸미는 방식이었는데, 이 작업이 실패해도 오류 메시지 없이 성공한 척 넘어갔습니다. 설정 파일을 확인해보니 배경 항목이 없었습니다.

Finder를 거치지 않고 설정 파일을 직접 작성하는 방식으로 바꿨습니다. 생성 후 바로 열어서 배경이 제대로 붙었는지 확인하는 단계를 추가했습니다.

앱 용량이 1.1GB인 이유

배포 파일이 1.1GB였습니다. 사용자는 받는 데만 몇 분이 걸렸습니다.

앱 안에 torch(241MB), OpenCV(108MB) 같은 머신러닝 라이브러리가 통째로 포함돼 있었습니다. 우리 코드는 이 라이브러리를 한 줄도 사용하지 않았습니다. 3~4월에 다른 작업으로 설치한 패키지가 컴퓨터에 남아 있었고, 앱 패키징 도구가 “설치돼 있으니 포함해야 한다”고 판단해 전부 담았습니다.

이 프로젝트에 필요한 6개 라이브러리만 들어 있는 전용 환경을 만들었습니다. 1.1GB가 212MB로 줄었고, 배포 파일은 378MB에서 74MB가 됐습니다. 5분의 1 수준입니다. 다시 용량이 부풀어나면 빌드를 멈추게 설정했습니다.

새로고침 후 작성 중인 글이 모두 사라짐

크레딧으로 만든 채널별 초안을 손으로 수정했는데, 페이지를 새로고침하면 통째로 사라졌습니다.

제목, 원고, 채널 선택, 채널별 스타일, 초안 수정본을 모두 함께 자동 저장하도록 구조를 바꿨습니다. 각 글의 상태를 따로 보관해서 글 A를 쓰다가 글 B로 이동해도 A가 남습니다. 새로고침 직후면 물어보지 않고 복구하고, 시간이 지나면 “30분 전에 쓰던 글이 있어요 [이어서 쓰기]”라고 제안합니다.

조용한 실패를 찾아내는 것이 핵심

서명, 설치 화면, 저장 모두 실패해도 아무 경고 없이 진행된다는 게 공통점이었습니다.

이제 모든 빌드와 배포 단계 마지막에 검사를 추가했습니다. 정말 작동하는지 확인하고, 문제가 있으면 배포를 멈춥니다.

그 외 함께 개선한 부분

  • 클라우드 저장 비용 누수 — 무료 한도는 0.5GB인데 7.8GB를 사용 중이었습니다. 빌드 결과물이 릴리스마다 270MB씩 쌓여 118개가 됐습니다. 전부 삭제하고 보관 기간을 90일에서 7일로 단축했습니다.
  • 채널 스타일 용어 설명 부족 — ‘후기체’가 무엇인지 선택 창에서 알 수 없었습니다. 각 스타일을 카드로 펼쳐 설명과 3줄 예시를 함께 보여주도록 변경했습니다.
  • AI 처리 강제 — 원고를 그대로 올리고 싶은 경우가 있는데 AI 처리를 거쳐야 했습니다. ‘원고 그대로’ 옵션을 추가해 크레딧 0으로 그대로 배포할 수 있게 했습니다.
  • 화면 기준 불일치 — 웹은 보라색, 앱은 남색, 편집기는 회색을 사용해 일관성이 없었습니다. 색, 크기, 간격, 아이콘 규칙을 하나의 문서로 정리하고 거기서만 값을 가져오게 했습니다.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *