-
Notifications
You must be signed in to change notification settings - Fork 72
12월 모바일 블로그 포스팅 #256
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
12월 모바일 블로그 포스팅 #256
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
| 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`의 규칙이 적용되도록 한다. | ||
|
|
||
| ``` | ||
| * ProGard: 자바 코드를 최적화하고 난독화하는 도구이다. | ||
|
||
| 바이트코드(컴파일 된 코드) 최적화 및 사용하지 않는 명령어 감지, 난독화 기능으로 아이디어 & 알고리즘 숨김 | ||
| 안드로이드 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의 심사를 거쳐 출시된다. | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
어미 통일을 시키는 건 어떨까요?
e.g. 저장하는 공간이다. -> 저장하는 공간
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
넵!