Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions .idea/gdsc-university-of-seoul.github.io.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

197 changes: 197 additions & 0 deletions _posts/2022-12-21-how-to-release-mobile-app.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,197 @@
---
layout: post
title: "모바일 앱 배포하는 법"
authors: [hfjxjjd123]
tags: ["모바일 앱", "모바일 배포", "모바일 출시", "배포", "배포방식", "release build","Android","iOS"]
image: assets/images/post-release-mobile-app/appmarket.jpg
description: "모바일 앱 배포하는 법"
featured: true
---

# 배포란?
배포를 알아보기 전에 개발의 전반적인 맥락을 생각해보자.

개발자가 프로그래밍 할 때, 최종 목적이 무엇일까?
자신이 개발한 프로그램을 사람들이 쓰게하는 것이 아닐까?

개발자가 로컬환경에서 코딩 / 빌드 / 디버깅을 통해 프로그램을 완성했다면,
이제 완성된 프로그램을 다른 사람에게 나눠주고 싶을 것이다.
이렇게, <strong>완성된 프로그램을 사용자가 접근할 수 있는 환경에 배치하는 과정</strong>을 배포과정이라고 한다.

<br>

# 배포방식
배포방식에는 크게 Google Play, App Store와 같은 **앱 마켓플레이스**를 이용한 배포와 그 외의 **대체 배포방식**으로 나눌 수 있다.
참고로 IOS 기기는 앱 마켓플레이스를 이용한 다운로드만 가능하다.

두 방식 모두 출시용 앱을 배포해야 하므로 공통적으로 **release bulid**(배포용 빌드)를 거치게 된다.

이 글에선 대체 배포방식에 대해서 가볍게 알아보고,
마켓플레이스에 배포하기 위해 **배포용 빌드 및 테스트 과정**에서 신경써야 할 부분들을 정리해봤다.

<br>

# 🌐 대체 배포방식 (Android)

## 1. 이메일을 통한 앱 배포
앱을 출시하는 가장 쉽고 빠른 방법이다.

이메일에 첨부된 출시용 앱을 사용자가 Android 기기에서 열면 Android 시스템이 APK를 인식해서 앱을 설치할 수 있게 한다.
다만 설치를 위해선 기기 설정에서 '출처를 알 수 없는 앱 설치' 설정을 해야 한다.

이메일을 통한 앱 배포는 적은 수의 신뢰할 수 있는 사용자에게 전송하는 경우 편리하지만, 불법 복제와 무단 배포를 차단하기 어렵다.

<br>

## 2. 웹사이트를 통한 배포
웹사이트 또는 서버(개인/기업용 서버 등)에서도 앱을 다운로드하도록 제공할 수 있다.

출시용 APK 파일을 호스팅하고 사용자에게 다운로드 링크를 제공하면 된다.
마찬가지로 '출처를 알 수 없는 앱 설치' 설정이 되어 있어야 한다.

<br>

# 🌐 Google Play에 배포하기 (Android)

## ✔️ 런처 아이콘 추가하기
상표와 같이 사용되는 앱 고유의 아이콘 이미지를 추가한다.

<br>

## ✔️ Java keystore를 이용한 앱 서명

Java JDK에 `keystore` 파일을 생성한다.

`keystore` 참조에 관한 정보를 담은 `.properties` 파일을 프로젝트 경로에 추가한다.

Gradle에서 서명을 구성하기 위해서, `build.gradle` 파일을 수정하여 `.properties` 파일로부터 `keystore` 정보를 가져올 수 있도록 한다.

```
* keystore: 인증서 & 암호화에 사용되는 보안 인증서(개인키 등등)를 저장하는 공간
* .properties: 응용 프로그램에서 쓰이는 파라미터들을 저장(ex:language = English)하기 위한 파일의 확장자
* Gradle: 빌드 자동화 시스템(compile, test, packaging 등의 빌드 작업을 자동으로 수행)
* build.gradle: 파일을 빌드할 때 필요한 정보를 저장하는 공간
```

<br>

## ✔️ ProGuard 사용

`ProGuard`의 규칙을 명시한 `.pro` 파일을 만들어서 `ProGuard`를 적용할 때 쓸 규칙을 추가한다.

Gradle에서 `ProGuard`를 구성하기 위해, `build.gradle` 파일을 수정하여 Release Build 할 때 `ProGuard`의 규칙이 적용되도록 한다.

```
* ProGuard: 자바 코드를 최적화하고 난독화하는 도구 
바이트코드(컴파일 된 코드) 최적화 및 사용하지 않는 명령어 감지, 난독화 기능으로 아이디어 & 알고리즘 숨김
안드로이드 SDK의 한 부분으로 배포되며 Release Build 과정에서 실행
```

<br>

## ✔️ 앱 manifest 검토하기
Android 빌드 도구, Android 운영체제 및 Google Play에 앱에 관한 필수정보를 담고있는 `manifest` 파일(`.xml`)을 검토하여 올바른 값을 포함하고 있는지 확인한다.

<br>

## ✔️ 빌드 구성 검토하기
올바른 빌드 구성을 위하여 `build.gradle` 파일을 검토하고 올바른 값들을 포함하는지 확인한다.

<br>

## ✔️ 앱 번들 빌드하기(추천)
규칙에 따라 구성한 앱의 코드와 리소스를 서명된 AAB(안드로이드 앱 번들)로 빌드한다.
(안드로이드 스튜디오, 커맨드 창 등 이용)

```
* APK: 안드로이드 응용 프로그램 패키지(프로그램 압축파일)
* AAB: 앱의 모든 컴파일된 코드 및 리소스를 포함하며 APK 생성 및 서명을 Google Play에 맡기는 게시 형식,
각 기기 설정에 맞게 최적화된 APK를 Google Play가 생성해서 제공
```

<br>

## ✔️ 앱 번들 테스트하기
방법1: 번들 도구를 이용한 오프라인 테스트
`GitHub`에서 `bundletool`을 다운받는다.
앱 번들로부터 APK 세트를 생성한다.
연결된 기기로 APK를 배포한다.

방법2: 구글 플레이를 이용한 온라인 테스트

테스트 할 번들을 구글 플레이에 업로드한다.
내부 테스트 트랙을 사용하거나, 알파 or 베타 채널로 프로덕션 배포 이전에 테스트한다.

<br>

## ✔️ Google Play 스토어에 출시하기
`Play Console`에서 앱을 등록한다.

앱 정보를 설정한다(예: 로그인 유무 설정, 연령 설정 등).

스토어에 등록될 정보들을 설정한다(예: 연락처, 앱 카테고리, 앱 사진 등).

프로덕션 탭에서 앱과 AAB를 등록해서 프로덕션 버전을 만든다.

프로덕션 트랙으로 출시하면 Google의 심사를 거쳐 출시된다.

```
* Play Console: Google Play 앱 관리, 테스트 및 개선 기능 등을 제공하는 서비스
```

<br>

# 🌐 App Store에 배포하기 (iOS)

## ✔️ 번들 ID 등록하기
iOS 개발자 계정에서 새로운 Apple 번들 ID를 만든다(개발자 계정 App IDs에서).

앱 서비스 정보를 입력한 후 번들 ID를 등록한다.

`App Store Connect`에서 앱 정보, 번들 ID를 입력하여 앱 레코드를 생성한다.

```
* App Store Connect: App Store에서 판매하는 앱을 제출하고 관리하는 데 사용하는 웹 기반 도구 모음
```

<br>

## ✔️ Xcode 프로젝트 설정하기

`Xcode`를 열고 (프로젝트) > General 탭에서 버전, 빌드, 적합 UI 설정 등의 정보를 입력한다.

project editor에서 런치 스크린을 설정한다.

usage description을 명시한다.
```
* launch screen(= splash screen): 앱이 실행 시작될 때 즉시 나타났다 바뀌는 화면
* usage description: 앱(달력, 연락처 등)이나 자원(카메라, 마이크 등)에 대한 접근여부를 기술해놓은 것
```

<br>

## ✔️ 앱 아이콘 추가하기
App Store에서 보여질 앱 고유의 아이콘 이미지를 추가한다.

<br>

## ✔️ 빌드 아카이브 생성 및 업로드하기
`Xcode`에서 배포용 빌드로 빌드한다.

Product > Archive 탭에서 배포용 빌드된 앱의 유효성을 검사한다(by `Validate App`).

배포용 빌드된 아카이브를 App Store Connect에 업로드한다(by `Distribute App`).

<br>

## ✔️ TestFilght에 앱 배포하기
빌드된 앱을 테스트해보기 위해서 `TestFilght`를 사용할 수 있다.
```
* TestFilght: 모바일 앱(iOS)의 무선 설치 및 테스트를 위한 온라인 서비스
내부/외부 테스터에게 빌드를 보내서 앱을 테스트해 볼 수 있다.
```

<br>

## ✔️ 앱스토어에 앱 출시하기
`App Store Connect`를 통해 제출하게 되면 Apple의 심사를 거쳐 출시된다.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.