

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 자습서: 인증서 스토리지에 GitHub를 사용하여 CodeBuild에서 Fastlane을 사용한 Apple 코드 서명
<a name="sample-fastlane-github"></a>

[fastlane](https://docs.fastlane.tools/)은 iOS 및 Android 앱의 베타 배포 및 릴리스를 자동화하는 오픈 소스 자동화 도구로 널리 사용됩니다. 스크린샷 생성, 코드 서명 처리, 애플리케이션 릴리스와 같은 모든 지루한 작업을 처리합니다.

이 샘플은 GitHub를 인증서 및 프로비저닝 프로필의 스토리지로 사용하여 Mac 플릿에서 실행되는 CodeBuild 프로젝트에서 Fastlane을 사용하여 Apple 코드 서명을 설정하는 방법을 보여줍니다.

## 사전 조건
<a name="sample-fastlane-github-prerequisites"></a>

이 자습서를 완료하려면 먼저 다음과 같은 사전 조건을 설정해야 합니다.
+ 의 경우 AWS 계정
+ [Apple 개발자 계정](https://developer.apple.com/)
+ 인증서를 저장하기 위한 프라이빗 GitHub 리포지토리
+ 프로젝트에 설치된 fastlane - fastlane 설치 [가이드](https://docs.fastlane.tools/getting-started/ios/setup/)

## 1단계: 로컬 시스템에서 GitHub를 사용하여 Fastlane Match 설정
<a name="sample-fastlane-github-certificates"></a>

[Fastlane Match](https://docs.fastlane.tools/actions/match/)는 [Fastlane 도구](https://fastlane.tools/) 중 하나이며 로컬 개발 환경과 CodeBuild 모두에서 코드 서명을 위한 원활한 구성을 지원합니다. Fastlane Match는 모든 코드 서명 인증서와 프로비저닝 프로필을 Git 리포지토리/S3 버킷/Google 클라우드 스토리지에 저장하고, 필요한 경우 필요한 인증서와 프로필을 다운로드하여 설치합니다.

이 예제 구성에서는 스토리지용 Git 리포지토리를 설정하고 사용합니다.

****

1. 프로젝트에서 일치 항목 초기화:

   ```
   fastlane match init
   ```

1. 메시지가 표시되면 GitHub를 스토리지 모드로 선택합니다.

1. GitHub를 사용하도록 `*Matchfile*`을 업데이트합니다.

   ```
   git_url("https://github.com/your-username/your-certificate-repo.git")
   storage_mode("git")
   type("development") # The default type, can be: appstore, adhoc, enterprise or development
   ```

**참고**  
fastlane이 성공적으로 인증하고 복제할 수 있도록 Git 리포지토리에 HTTPS URL을 입력해야 합니다. 그렇지 않으면 일치 항목을 사용하려고 할 때 인증 오류가 표시될 수 있습니다.

## 2단계: Fastfile 설정
<a name="sample-fastlane-github-fastfile"></a>

다음 경로로 `Fastfile`을 생성하거나 업데이트합니다.

CodeBuild에서는 앱을 빌드하고 서명할 때마다 Fastlane Match를 실행해야 합니다. 이를 수행하는 가장 쉬운 방법은 앱을 빌드하는 경로에 `match` 작업을 추가하는 것입니다.

```
default_platform(:ios)

platform :ios do
  before_all do
    setup_ci
  end
  
  desc "Build and sign the app"
  lane :build do
    match(type: "appstore", readonly: true)
    gym(
      scheme: "YourScheme",
      export_method: "app-store"
    )
  end
end
```

**참고**  
일치 작업이 올바르게 작동하려면 `Fastfile`의 `before_all `섹션에 `setup_ci`를 추가해야 합니다. 이렇게 하면 적절한 권한이 있는 임시 Fastlane 키체인이 사용됩니다. 이를 사용하지 않으면 빌드 실패 또는 일관되지 않은 결과가 표시될 수 있습니다.

## 3단계: `fastlane match` 명령을 실행하여 각 인증서 및 프로필 생성
<a name="sample-fastlane-github-certificates"></a>

지정된 유형(예: 개발, 앱 스토어, 임시, 엔터프라이즈)에 대한 fastlane match 명령은 원격 스토어에서 사용할 수 없는 경우 인증서와 프로필을 생성합니다. 인증서와 프로필은 fastlane에서 GitHub에 저장합니다.

```
bundle exec fastlane match appstore
```

명령 실행은 대화식으로 이루어지며 fastlane은 인증서 복호화를 위한 암호 설정을 요청합니다.

## 4단계: 프로젝트에 대한 애플리케이션 파일 생성
<a name="sample-fastlane-github-appfile"></a>

프로젝트에 적합한 애플리케이션 파일을 생성하거나 추가합니다.

****

1. 프로젝트 빌드 요구 사항에 따라 [Gymfile](http://docs.fastlane.tools/actions/gym/#gymfile), [Appfile](http://docs.fastlane.tools/advanced/Appfile/), [Snapfile](http://docs.fastlane.tools/actions/snapshot/#snapfile), [Deliverfile](http://docs.fastlane.tools/actions/deliver/#editing-the-deliverfile)을 생성하거나 추가합니다.

1. 원격 리포지토리에 변경 사항을 커밋합니다.

## 5단계: Secrets Manager에서 환경 변수 생성
<a name="sample-fastlane-github-secrets"></a>

fastlane 세션 쿠키 및 일치하는 암호를 저장하기 위한 보안 암호 3개를 생성합니다. Secrets Manager에서 보안 암호를 생성하는 방법에 대한 자세한 내용은 [AWS Secrets Manager 보안 암호 생성](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)을 참조하세요.

****

1. 다음과 같이 fastlane 세션 쿠키에 액세스합니다.

   1. 보안 암호 키 - `FASTLANE_SESSION`

   1. 보안 암호 값 - 로컬 시스템에서 다음 명령을 실행하여 생성된 세션 쿠키입니다.
**참고**  
이 값은 `~/.fastlane/spaceship/my_appleid_username/cookie` 로컬 파일에서 인증 후 사용할 수 있습니다.

      ```
      fastlane spaceauth -u <Apple_account>
      ```

1. Fastlane Match 암호 - Fastlane Match가 Git 리포지토리에 저장된 인증서와 프로필을 해독하도록 하려면 일치 설정 단계에서 구성한 암호화 암호를 CodeBuild 프로젝트의 환경 변수에 추가해야 합니다.

   1. 보안 암호 키 - `MATCH_PASSWORD`

   1. 보안 암호 값 - `<match passphrase to decrypt certificates>` 3단계에서 인증서를 생성하는 동안 암호가 설정됩니다.

1. Fastlane `MATCH_GIT_BASIC_AUTHORIZATION` - *일치*에 대한 기본 권한 부여를 설정합니다.

   1. 보안 암호 키: 

      `MATCH_GIT_BASIC_AUTHORIZATION`

   1. 보안 암호 값 - 값은 `username:password` 형식의 사용자 이름 및 개인 액세스 토큰(PAT)의 base64 인코딩 문자열이어야 합니다. 다음 명령을 사용하여 생성할 수 있습니다.

      ```
      echo -n your_github_username:your_personal_access_token | base64
      ```

      GitHub 콘솔의 **프로필 > 설정 > 개발자 설정 > 개인 액세스 토큰**에서 PAT를 생성할 수 있습니다. 자세한 내용은 [https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens) 가이드를 참조하세요.

**참고**  
Secrets Manager에서 위의 보안 암호를 생성할 때는 `/CodeBuild/` 접두사를 사용하여 보안 암호 이름을 지정해야 합니다.

## 6단계: 컴퓨팅 플릿 생성
<a name="sample-fastlane-github-fleet"></a>

프로젝트의 컴퓨팅 플릿을 생성합니다.

****

1. 콘솔에서 CodeBuild로 이동하여 새 컴퓨팅 플릿을 생성합니다.

1. `macOS`를 운영 체제로 선택하고 적절한 컴퓨팅 유형과 이미지를 선택합니다.

## 7단계: CodeBuild에서 프로젝트 생성
<a name="sample-fastlane-github-project"></a>

CodeBuild에서 프로젝트를 생성합니다.

****

1. [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home) AWS CodeBuild 콘솔을 엽니다.

1. 빌드 프로젝트를 생성합니다. 자세한 내용은 [빌드 프로젝트 만들기(콘솔)](create-project.md#create-project-console) 및 [빌드 실행(콘솔)](run-build-console.md) 섹션을 참조하세요.

1. 소스 공급자(예: GitHub, CodeCommit)를 설정합니다. 이는 iOS 프로젝트 소스 리포지토리이며 인증서 리포지토리가 아닙니다.

1.  **환경**에서 다음과 같이 합니다.
   + **예약 용량**을 선택합니다.
   + **플릿**에서 위에서 생성한 플릿을 선택합니다.
   + CodeBuild가 자동으로 생성할 서비스 역할의 이름을 입력합니다.
   + 아래 환경 변수를 제공합니다.
     + 이름: `MATCH_PASSWORD`, 값: *<secrets arn>*, 유형: Secrets Manager(MATCH\$1PASSWORD의 경우 5단계에서 생성된 보안 암호 ARN)
     + 이름: `FASTLANE_SESSION`, 값: *<secrets arn>*, 유형: Secrets Manager(FASTLANE\$1SESSION의 경우 5단계에서 생성된 보안 암호 ARN)
     + 이름: `MATCH_GIT_BASIC_AUTHORIZATION`, 값: *<secrets ARN>*, 유형: Secrets Manager Secrets ARN(`MATCH_GIT_BASIC_AUTHORIZATION`의 경우 5단계에서 생성됨)

1. **Buildspec**에서 다음을 추가합니다.

   ```
   version: 0.2
   
   phases:
     install:
       commands:
         - gem install bundler
         - bundle install
     build:
       commands:
         - echo "Building and signing the app..."
         - bundle exec fastlane build
     post_build:
       commands:
         - echo "Build completed on date"
   
   artifacts:
     files:
       - '*/.ipa'
     name: app-$(date +%Y-%m-%d)
   ```

## 8단계: 빌드 실행
<a name="sample-fastlane-github-run"></a>

빌드를 실행합니다. CodeBuild에서 빌드 상태 및 로그를 검토할 수 있습니다.

작업이 완료되면 작업 로그를 볼 수 있습니다.

## 문제 해결
<a name="sample-fastlane-github-troubleshooting"></a>
+ GitHub 리포지토리에 액세스하는 데 문제가 발생하면 개인 액세스 토큰과 MATCH\$1GIT\$1BASIC\$1AUTHORIZATION 환경 변수를 다시 확인합니다.
+ 인증서 복호화에 문제가 발생하면 MATCH\$1PASSWORD 환경 변수에서 올바른 암호를 설정해야 합니다.
+ 코드 서명 문제의 경우 Apple Developer 계정에 필요한 인증서 및 프로필이 있고 Xcode 프로젝트의 번들 식별자가 프로비저닝 프로필의 번들 식별자와 일치하는지 확인합니다.

## 보안 고려 사항
<a name="sample-fastlane-github-considerations"></a>

다음은 이 자습서의 보안 고려 사항입니다.
+ 인증서용 GitHub 리포지토리를 비공개로 유지하고 액세스를 정기적으로 감사합니다.
+ 를 사용하여 MATCH\$1PASSWORD 및 FASTLANE\$1SESSION과 같은 민감한 정보를 AWS Secrets Manager 저장하는 것이 좋습니다.

이 샘플은 인증서 스토리지용 GitHub를 통해 CodeBuild에서 Fastlane을 사용하여 iOS 코드 서명을 위한 설정을 제공합니다. 특정 프로젝트 요구 사항 및 CodeBuild 환경에 따라 일부 단계를 조정해야 할 수 있습니다. 이 접근 방식은 AWS 서비스를 활용하여 AWS 에코시스템 내에서 보안 및 통합을 강화합니다.