macOS 앱스토어 제출 삽질기
macOS 앱스토어 제출 삽질기
MP4 파일의 moov atom을 앞으로 옮겨주는 간단한 macOS 앱을 만들었다. “Fast-start” 최적화라고 불리는 것. 웹에서 영상 스트리밍 시 바로 재생되게 해준다.
앱 자체는 하루 만에 만들었는데, 앱스토어 제출이 예상보다 오래 걸렸다.
Fastlane 설정
수동으로 앱스토어 제출하는 건 너무 귀찮다. Fastlane을 사용했다.
# 초기 설정
fastlane init
Fastfile
default_platform(:mac)
platform :mac do
desc "Build and upload to App Store Connect"
lane :release do
# 버전 증가
increment_build_number
# 앱 빌드
build_mac_app(
scheme: "QuickMoov",
export_method: "app-store",
output_directory: "./build"
)
# 앱스토어 커넥트 업로드
upload_to_app_store(
skip_screenshots: true,
skip_metadata: false,
precheck_include_in_app_purchases: false
)
end
end
암호화 플래그
앱을 업로드하면 이런 질문이 나온다:
“Does your app use encryption?”
HTTPS 사용해도 “Yes”를 선택해야 하나? 헷갈린다.
결론: 표준 HTTPS만 사용하면 No. 하지만 매번 물어보는 게 귀찮으니 Info.plist에 미리 설정.
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
이 플래그가 있으면 업로드 시 질문을 건너뛴다.
데모 모드
앱 심사 시 리뷰어가 앱을 테스트한다. 문제는 리뷰어가 테스트 파일을 가지고 있지 않다는 것.
해결: 데모 모드
앱 실행 시 --demo 플래그가 있으면 샘플 파일을 자동으로 로드.
// main.swift 또는 AppDelegate
if CommandLine.arguments.contains("--demo") {
// 번들에 포함된 샘플 파일 로드
DemoMode.shared.activate()
}
앱 심사 시 “Notes for Reviewer”에 이렇게 적었다:
Launch the app with
--demoflag to load sample files automatically.
스크린샷 자동화
앱스토어에 올릴 스크린샷을 매번 수동으로 찍기 귀찮다. Fastlane snapshot으로 자동화.
# Snapfile
devices([
"Mac"
])
languages([
"en-US",
"ko"
])
scheme("QuickMoovScreenshots")
output_directory("./screenshots")
clear_previous_screenshots(true)
UI 테스트로 스크린샷 캡처
// QuickMoovScreenshotsUITests.swift
func testCaptureScreenshots() {
let app = XCUIApplication()
app.launchArguments = ["--demo"]
app.launch()
// 메인 화면
snapshot("01_MainScreen")
// 파일 분석 화면
app.buttons["Analyze"].click()
snapshot("02_AnalysisResult")
// 변환 완료 화면
app.buttons["Optimize"].click()
sleep(2)
snapshot("03_OptimizationComplete")
}
실행:
fastlane snapshot
영어, 한국어 스크린샷이 자동으로 생성된다.
메타데이터 관리
앱 이름, 설명, 키워드 등을 코드로 관리.
fastlane/metadata/
├── en-US/
│ ├── name.txt
│ ├── description.txt
│ ├── keywords.txt
│ ├── privacy_url.txt
│ └── support_url.txt
└── ko/
├── name.txt
├── description.txt
└── keywords.txt
description.txt 예시
QuickMoov optimizes your video files for web streaming.
Features:
• Move moov atom to the beginning (fast-start)
• Remove unnecessary free atoms
• Reduce file size
• Drag and drop interface
• Supports MP4, MOV, M4V, M4A, 3GP
Perfect for content creators, web developers, and anyone who shares videos online.
업로드 시 자동으로 반영:
fastlane deliver
개인정보 처리방침
앱스토어에 올리려면 개인정보 처리방침 URL이 필요하다. 개인 정보를 수집하지 않아도.
GitHub Pages로 간단하게 만들었다:
# Privacy Policy
QuickMoov does not collect any personal data.
The app processes video files locally on your device.
No data is transmitted to external servers.
Last updated: January 28, 2026
URL: https://github.com/kyungw00k/quickmoov/blob/main/PRIVACY.md
전체 제출 흐름
# 1. 버전 업데이트 (Xcode에서)
# 2. 빌드 및 업로드
fastlane release
# 3. App Store Connect에서 심사 제출
# (자동화도 가능하지만 수동으로 최종 확인)
삽질 정리
| 문제 | 해결 |
|---|---|
| 암호화 질문 반복 |
ITSAppUsesNonExemptEncryption 플래그 |
| 리뷰어 테스트 파일 없음 |
--demo 플래그로 데모 모드 |
| 스크린샷 수동 캡처 | Fastlane snapshot + UI 테스트 |
| 메타데이터 관리 | fastlane/metadata 폴더 |
| 개인정보 처리방침 | GitHub에 PRIVACY.md |
결론
Fastlane 설정만 해두면 이후 업데이트는 편하다.
# 버전 올리고
# fastlane release
# 끝
하지만 처음 설정하는 데 반나절 정도 걸렸다. 스크린샷 자동화가 가장 삽질이 많았다.
앱 만드는 것보다 앱스토어 제출이 더 오래 걸릴 수 있다.