

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 教學課程：使用 GitHub 在 CodeBuild 中使用 Fastlane 簽署 Apple 程式碼以進行憑證儲存
<a name="sample-fastlane-github"></a>

[fastlane](https://docs.fastlane.tools/) 是熱門的開放原始碼自動化工具，可自動化 iOS 和 Android 應用程式的 Beta 版部署和版本。它會處理所有繁瑣的任務，例如產生螢幕擷取畫面、處理程式碼簽署，以及釋出您的應用程式。

此範例示範如何在在 Mac 機群上執行的 CodeBuild 專案中使用 Fastlane 設定 Apple 程式碼簽署，並將 GitHub 做為憑證和佈建設定檔的儲存體。

## 先決條件
<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. 更新您的 `*Matchfile*` 以使用 GitHub：

   ```
   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
   ```

**注意**  
請務必輸入 Git 儲存庫的 HTTPS URL，以便 Fastlane 成功驗證和複製。否則，當您嘗試使用配對時，可能會看到身分驗證錯誤。

## 步驟 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
```

**注意**  
請務必`setup_ci`將 新增至 中的 `before_all `區段，`Fastfile`配對動作才能正常運作。這可確保使用具有適當許可的暫時 Fastlane 金鑰鏈。如果不使用此功能，您可能會看到建置失敗或結果不一致。

## 步驟 3：執行 `fastlane match`命令來產生個別的憑證和設定檔
<a name="sample-fastlane-github-certificates"></a>

指定類型 （即開發、應用程式存放區、臨機操作、企業） 的 fastlane 比對命令會在遠端存放區中無法使用時產生憑證和設定檔。憑證和設定檔將由 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 工作階段 Cookie 和相符的複雜密碼。如需在 Secrets Manager 中建立秘密的詳細資訊，請參閱[建立 AWS Secrets Manager 秘密](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)。

****

1. 存取您的 Fastlane 工作階段 Cookie，如下所示。

   1. 私密金鑰 - `FASTLANE_SESSION`

   1. 秘密值 - 在本機電腦上執行下列命令所產生的工作階段 Cookie。
**注意**  
在本機檔案中進行身分驗證後，即可使用此值：`~/.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. 秘密值 - 值應該是您的使用者名稱和個人存取字符 (PAT) 的 base64 編碼字串，格式為 `username:password`。您可以使用下列命令產生它：

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

      您可以在**設定檔 > 設定 > 開發人員設定 > 個人存取字符**的 GitHub 主控台上產生 PAT。如需詳細資訊，請參閱下列指南：https：//[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：//[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.  在 **Environment (環境)** 中：
   + 選擇**預留容量**。
   + 針對**機群**，選取上面建立的機群。
   + 提供 CodeBuild 為您建立的服務角色名稱。
   + 提供下列環境變數。
     + 名稱：`MATCH_PASSWORD`、值：*<secrets arn>*、類型：Secrets Manager （在步驟 5 中為 MATCH\$1PASSWORD 建立的秘密 ARN)
     + 名稱：`FASTLANE_SESSION`、值：*<secrets arn>*、類型：Secrets Manager （在步驟 5 中為 FASTLANE\$1SESSION 建立的秘密 ARN)
     + 名稱：`MATCH_GIT_BASIC_AUTHORIZATION`、值：*<secrets ARN>*、類型：Secrets Manager Secrets ARN （在步驟 5 為 建立`MATCH_GIT_BASIC_AUTHORIZATION`)

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 儲存庫保持私有，並定期稽核存取權。
+ 考慮使用 AWS Secrets Manager 來儲存敏感資訊，例如 MATCH\$1PASSWORD 和 FASTLANE\$1SESSION。

此範例提供使用 GitHub 進行憑證儲存的 CodeBuild 中 Fastlane 的 iOS 程式碼簽署設定。您可能需要根據您的特定專案需求和 CodeBuild 環境來調整一些步驟。此方法利用 AWS 服務在 AWS 生態系統中增強安全性和整合。