7
1

Xcode Cloud で TestFlight の テストに関するメモを自動生成する

Last updated at Posted at 2023-12-17

こちらは、「GENDA Advent Calendar 2023」 18日目の記事です。

はじめに

Xcode Cloud からTestFlight にアップロードすると
一律「テストに関するメモはありません。」と表示されていて
どのビルドが何に対応しているかがわからないという課題がありました。
これを「テストに関するメモ」を自動生成して解決します。

動作環境

  • Xcode Cloud
  • TestFlight

が使える環境

コミットログを表示してみる

「テストに関するメモ」を表示させるには、TestFlight/WhatToTest.<LOCALE>.txt を作成する必要があります。

まずはAppleのサンプルを参考に動的にコミットログを出してみましょう。

  1. ci_post_xcodebuild.sh を作成します。

    ci_scripts/ci_post_xcodebuild.sh
    #!/bin/zsh
    #  ci_post_xcodebuild.sh
    
    if [[ -d "$CI_APP_STORE_SIGNED_APP_PATH" ]]; then
      TESTFLIGHT_DIR_PATH=../TestFlight
      mkdir $TESTFLIGHT_DIR_PATH
      git fetch --deepen 3 && git log -3 --pretty=format:"%s" >! $TESTFLIGHT_DIR_PATH/WhatToTest.en-US.txt
    fi
    
  2. 作成したスクリプトファイルに実行権限を与えます。

    chmod +x ci_post_clone.sh
    

これが

none.png

このように表示することができました。

Commit.png

PRのタイトルを表示する

次にPRからビルド実行された場合はPRのタイトルを出したいので修正していきます。

  1. Xcode Cloud の Environment に GITHUB_TOKEN を設定します。
    environment.png

  2. ci_post_clone.sh を作成してjqコマンドをインストールします。

    ci_scripts/ci_post_clone.sh
     #!/bin/zsh
     #  ci_post_clone.sh
    
     brew install jq
    
  3. ci_post_xcodebuild.sh にGithub API を使ってPRタイトルを取得する部分を追加していきます。

    ci_scripts/ci_post_xcodebuild.sh
    #!/bin/zsh
    #  ci_post_xcodebuild.sh
    
    WHAT_TO_TEST=""
    
    if [ -n "$CI_PULL_REQUEST_NUMBER" ]; then
      PR_INFO=$(curl -s \
        -H "Accept: application/vnd.github+json" \
        -H "Authorization: Bearer $GITHUB_TOKEN" \
        -H "X-GitHub-Api-Version: 2022-11-28" \
        "https://api.github.com/repos/$CI_PULL_REQUEST_TARGET_REPO/pulls/$CI_PULL_REQUEST_NUMBER")
      
      # https://stackoverflow.com/questions/52399819/invalid-string-control-characters-from-u0000-through-u001f-must-be-escaped-us
      PR_TITLE=$(printf '%s\n' "$PR_INFO" | jq -r '.title')
      WHAT_TO_TEST="[PR#$CI_PULL_REQUEST_NUMBER]\n$PR_TITLE\n"
    fi
    
    COMMIT=$(git fetch --deepen 3 && git log -3 --pretty=format:"%s")
    
    WHAT_TO_TEST=${WHAT_TO_TEST}"[COMMIT]\n$COMMIT"
    
    if [[ -d "$CI_APP_STORE_SIGNED_APP_PATH" ]]; then
      TESTFLIGHT_DIR_PATH=../TestFlight
      mkdir $TESTFLIGHT_DIR_PATH
      echo "$WHAT_TO_TEST" >! $TESTFLIGHT_DIR_PATH/WhatToTest.en-US.txt
    fi
    

無事PRのタイトルも出すことができました:v:
PR.png

良いTestFlightライフを:christmas_tree:

参考

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1