“frameit fastlane”을 검색해서 이 글을 찾았다면, 아마 App Store 스크린샷 생성을 자동화하려는 중일 것입니다. 이미 설정해 두었는데 벽에 부딪혔거나, 본격적으로 설정에 뛰어들기 전에 더 빠른 길은 없는지 가늠해 보고 있는 상황일 수도 있습니다.
이 글에서는 Fastlane frameit이 실제로 무엇을 해 주는지, 인디 개발자에게 어디서 마찰이 생기는지, 그리고 Marteso가 동일한 스크린샷 자동화 문제에 어떻게 다른 방식으로 접근하는지 다룹니다. 끝까지 읽고 나면 자신의 상황에 어떤 도구가 맞는지 판단할 만큼의 정보를 얻게 될 것입니다.
Fastlane frameit이 하는 일
Fastlane은 iOS와 Android 배포를 위한 오픈소스 자동화 툴킷입니다. 스크린샷 파이프라인은 두 개의 액션으로 구성됩니다.
snapshot은 Xcode UI 테스트를 통해 여러 시뮬레이터에서 스크린샷을 캡처합니다frameit은 캡처한 스크린샷을 App Store 제출용 디바이스 프레임으로 감쌉니다
Fastlane을 사용하는 전형적인 iOS 스크린샷 자동화 워크플로는 다음과 같습니다.
- 캡처하려는 모든 화면으로 이동하는 UI 테스트를 작성합니다
- snapshot과 frameit 레인을
Fastfile에 설정합니다 - 로컬에서
fastlane snapshot을 실행합니다(로케일 수에 따라 1회당 20~40분) fastlane frameit을 실행해 디바이스 베젤을 적용합니다- 각 로케일과 디바이스 크기별 출력물을 수작업으로 검토합니다
- 완성된 스크린샷을 App Store Connect에 업로드합니다
터미널에서 사는 개발자이고 이미 CI/CD 파이프라인을 갖추고 있다면, 이 워크플로는 충분히 잘 작동합니다. 전담 DevOps 역량이 있고 완전한 제어를 요구하는 팀에게는 사실상의 표준이기도 합니다.
Fastlane frameit이 인디 개발자에게 마찰을 일으키는 지점
설정 비용은 보기보다 큽니다. Fastlane을 돌리려면 Ruby, Xcode 시뮬레이터 구성, 프로비저닝 프로파일, 그리고 제대로 동작하는 Fastfile이 필요합니다. 더 나은 App Store 스크린샷을 원할 뿐인 1인 개발자에게 이는 스크린샷 한 장이 나오기도 전에 몇 시간짜리 환경 설정을 거쳐야 한다는 의미입니다.
지속적인 유지 비용은 더 큽니다. 디바이스 프레임은 iOS 릴리스마다 바뀝니다. Apple이 새 하드웨어를 출시할 때마다 기존 frameit 프레임 자산은 낡거나 정렬이 어긋납니다. gem을 업데이트하고, 자산 경로를 디버깅하고, 출력물이 제대로 보이는지 확인하려고 전체 파이프라인을 다시 돌립니다. 이런 일이 당신의 일정이 아니라 Apple의 일정에 맞춰 발생합니다.
현지화는 작업량을 몇 배로 늘립니다. 5개 언어와 3개 디바이스 크기를 지원하는 앱이라면 스크린샷 한 장당 15개의 출력 세트가 만들어집니다. 60개가 넘는 파일을 수작업으로 관리하고, 각 로케일에서 텍스트가 제대로 렌더링되는지 확인하고, 자신이 모르는 일본어나 독일어 출력물을 일일이 훑어보는 일. 이것이야말로 제출 전날 밤까지 미뤄지기 딱 좋은 작업입니다.
스크린샷 카피는 전적으로 수작업입니다. Fastlane이 캡처하는 것은 UI 테스트가 보여 주는 내용뿐입니다. 스크린샷 위에 올라가는 오버레이 텍스트, 헤드라인, 현지화된 홍보 문구를 작성하는 일은 도구 바깥에서 이루어집니다. 언어마다 다른 카피를 쓰고 싶다면, 이를 UI 테스트에 직접 넣거나 별도의 자산 파이프라인을 따로 관리해야 합니다.
이것들은 Fastlane의 버그가 아닙니다. Fastlane은 모든 단계를 직접 소유하고자 하는 개발자를 위해 만들어진 로우레벨 도구입니다. 그 대가로 모든 단계마다 당신의 시간과 유지보수가 들어갑니다.
Marteso가 다르게 하는 것
Marteso는 App Store 제출을 위해 특별히 설계된 노코드 스크린샷 자동화 플랫폼입니다. Fastlane frameit과 동일한 단계를 다루지만, 그 접근 방식은 거의 모든 지점에서 다릅니다.
설정: GitHub 저장소와 App Store Connect 계정을 Marteso UI를 통해 연결하기만 하면 됩니다. Ruby도, Fastfile도, 로컬 시뮬레이터 구성도 필요 없습니다. 대부분의 개발자가 30분 이내에 설정을 마칩니다.
트리거: GitHub에 푸시하세요. Marteso가 webhook을 받아 매니지드 클라우드 환경에서 UI 테스트를 실행합니다. 로컬에서는 아무것도 돌아가지 않습니다.
현지화 출력: 단 한 번의 테스트 실행으로, 지원하는 모든 App Store 언어에 대한 디바이스 프레임 스크린샷이 생성됩니다. 앱 문자열이 이미 현지화되어 있다면 추가 테스트 구성은 필요 없습니다. Marteso가 기존 문자열 파일을 사용해 로케일별 출력물을 자동으로 채웁니다.
AI 생성 스크린샷 카피: Marteso는 AI를 사용해 각 스크린샷의 오버레이 텍스트와 홍보 카피를 생성합니다. 최종 자산에 반영하기 전에 제안된 내용을 검토하고 편집할 수 있습니다. 백지 상태에서 시작하지 않아도 됩니다.
디바이스 프레임: Marteso가 관리합니다. Apple이 업데이트된 베젤을 갖춘 새 하드웨어를 출시하면, 플랫폼의 프레임이 자동으로 업데이트됩니다. gem 버전이나 자산 파일을 직접 관리할 필요가 없습니다.
릴리스를 혼자 돌리는 인디 개발자에게 그 차이는 속도만이 아닙니다. 릴리스 주기마다 발생하는 의사결정과 유지보수 작업의 “수” 자체가 달라집니다. Fastlane은 모든 구성 세부 사항을 당신이 직접 소유하도록 요구합니다. Marteso는 합리적인 기본값을 제공하고, 중요한 부분만 덮어쓸 수 있게 합니다.
나란히 비교
| Fastlane frameit | Marteso | |
|---|---|---|
| 설정 시간 | 2~4시간(Ruby, Fastfile, 시뮬레이터 구성) | 30분 미만(GitHub와 ASC 연결) |
| 실행 위치 | 로컬 머신 또는 수동 구성한 CI | 완전 매니지드 클라우드 파이프라인 |
| 디바이스 프레임 유지보수 | 수작업(iOS 릴리스마다 gem 업데이트) | 자동 |
| 현지화 | 로케일별 테스트와 파일 수동 구성 | 기존 앱 문자열 파일에서 자동 |
| AI 생성 카피 | 없음 | 내장, 내보내기 전 검토 가능 |
| 가격 | 무료(오픈소스) | 무료 플랜 제공, 규모가 큰 앱을 위한 유료 플랜 |
| 요구 역량 | 터미널과 Ruby에 익숙해야 함 | CLI 불필요 |
| 커스터마이징 | 모든 단계를 프로그래밍 방식으로 완전 제어 | 대시보드 UI를 통한 구성 |
Fastlane을 써야 하는 사람
Fastlane frameit이 올바른 선택이 되는 경우는, 이미 CI에 Fastlane 인프라가 갖춰진 팀에 속해 있거나, 파이프라인을 유지보수하는 DevOps 엔지니어가 있거나, 스크린샷 생성을 프로그래밍 방식으로 완전히 제어해야 할 때입니다. 동작하는 Fastfile이 있고 그것을 유지보수하는 일이 업무인 사람이 있다면, 굳이 갈아탈 이유가 없습니다.
특이한 스크린샷 요구 사항이 있는 경우에도 Fastlane이 더 잘 맞습니다. 표준에서 벗어난 시뮬레이터 플로, 커스텀 프레임 자산, 또는 매니지드 플랫폼이 지원하지 못하는 방식으로 테스트 시점에 주입된 데이터에 의존하는 스크린샷 워크플로 같은 경우입니다.
Marteso를 써야 하는 사람
Marteso는 커스텀 파이프라인을 구축하고 유지보수하지 않고도 정확하고 현지화된 스크린샷을 얻고자 하는 인디 iOS 개발자를 위해 만들어졌습니다. 1인 개발자이거나 소규모 팀이고, 설정 마찰이 너무 커서 스크린샷 작업이 계속 미뤄진다면, Marteso가 그 마찰을 없애 줍니다.
매니지드 파이프라인은 완전한 구성 제어를 내주는 대신 릴리스마다 시간을 되돌려받는다는 뜻입니다. 한두 명이 출시하는 대부분의 인디 앱에게 이는 명료한 트레이드오프입니다. 스크린샷 작업이 미뤄지지 않고 일정대로 마무리됩니다.
직접 사용해 보기
Marteso에는 app.marteso.com([email protected] / demo1234)에 데모 환경이 있어, 스크린샷 생성, 메타데이터 편집, App Store Connect 제출을 포함한 전체 릴리스 워크플로를 처음부터 끝까지 둘러볼 수 있습니다. 데모에는 실제 앱이 사용되므로, 거기서 보는 스크린샷 자동화 출력물은 프로덕션 실행이 만들어 내는 결과와 동일한 수준입니다.