Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

ユーザー作業の一覧 (初回リリース前: 配布・App Store・CloudKit の作業と実機での確認)

Đang mở
#72 4 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
5/5
Thời gian dự kiến
Hơn một tuần
Mức phù hợp với người mới
25/100
Loại issue
Tính năng
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
git, github, github-actions, ios, macos, swift

Hướng nghiên cứu

Start by reading documents/macos-distribution.md and documents/cloudkit-production-schema.md, then inspect the release workflow and the fastlane/metadata/, fastlane/screenshots/, and fastlane/creative_assets/ paths named here. Run the listed integration and device checks, including make test-integration where applicable. Done means the release prerequisites, distribution steps, CloudKit setup, and real-device checks are completed or explicitly recorded.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

初回リリースまでに bannzai がやることを、この 1 つの issue にまとめる。これまで分かれていた #15 (公開前チェックリスト) と #16 (ユーザー作業の一覧) の未完了項目を 2026-09-28 時点で移し、両 issue は close した。今後の追記はこの issue にコメントで行う。

  • 取り組み: SecChain の初回リリース (ロードマップ: #1)
  • 上から順に進めると、後の項目の前提が揃う。「リリースの作業」が済まないとリリースできない。「実機・実環境での確認」はリリース前にまとめて 1 回行う

リリースの作業

1. macOS 配布 (GitHub Releases の DMG と Homebrew cask)
  • release workflow 用の GitHub Secrets 5 件を登録する (2026-09-28 に gh secret list で未登録を確認)。agent ができない理由: Developer ID Application 証明書と秘密鍵の .p12 書き出しとパスワードの設定、App Store Connect API key の選択は本人にしかできない。実行方法: DEVELOPER_ID_APPLICATION_P12_BASE64 / DEVELOPER_ID_APPLICATION_P12_PASSWORD / ASC_API_KEY_ID / ASC_API_KEY_ISSUER_ID / ASC_API_KEY_P8_BASE64 を https://github.com/bannzai/SecChain/blob/main/documents/macos-distribution.md#repository-secrets のコマンドで登録する
  • 最初のリリースのタグ v0.1.0 を push する (前提: 上の Secrets。2026-09-28 時点で Release は 0 件)。agent ができない理由: 公開する時期は本人が決める (指示があれば agent が実行する)。実行方法: git fetch origin・git tag v0.1.0 origin/main・git push origin v0.1.0
  • リリースに添付された secchain.rb を bannzai/homebrew-tap の Casks/ に追加し、tap の audit.yml に bannzai/tap/secchain を足す (前提: v0.1.0 のリリース。2026-09-28 時点で tap の Casks/ は puts.rb だけ)。agent ができない理由: 別リポジトリへの公開操作で、リリースの後にしか行えない (指示があれば agent が実行する)。実行方法: https://github.com/bannzai/SecChain/blob/main/documents/macos-distribution.md#updating-the-homebrew-tap
2. 遠隔承認の CloudKit スキーマ
  • 遠隔承認のレコード型を CloudKit の production 環境に反映する。agent ができない理由: CloudKit Console (Web UI) の操作で、反映したレコード型は production から消せない。Developer ID 版の macOS app・CLI と App Store 版の iOS app は production しか使えないため、反映しないと遠隔承認が動かない。実行方法: https://github.com/bannzai/SecChain/blob/main/documents/cloudkit-production-schema.md (反映の前に development から DoctorProbe を消す)
3. App Store (iOS app)
  • App Store Connect に iOS app のアプリレコードを作る。agent ができない理由: App Store Connect の Web UI 操作。実行方法: https://appstoreconnect.apple.com/apps で bundle ID com.bannzai.SecChain、名前 SecChain、主要言語は英語で作成する
  • App Store Connect API key を発行し、ローカルの環境変数に設定する (1. の Secrets と同じ key でよい)。agent ができない理由: key の発行は Web UI 操作で、.p8 の値の入手は本人にしかできない。実行方法: https://appstoreconnect.apple.com/access/integrations/api で発行し、ASC_API_KEY_ID / ASC_API_KEY_ISSUER_ID / ASC_API_KEY_P8_BASE64 (base64 -i AuthKey_XXXX.p8 の値) と FASTLANE_USER / FASTLANE_TEAM_ID / FASTLANE_ITC_TEAM_ID を .envrc に設定する (fastlane/Appfile のコメント参照)
  • product page header と search results アセットを入稿する (前提: アプリレコード。任意のアセットで、リリースは止めない)。agent ができない理由: App Store Connect の Web UI 操作。実行方法: アプリの Asset Library または対象バージョンの creative assets に fastlane/creative_assets/product_page_header.png と fastlane/creative_assets/search_results.png をアップロードする

アプリレコードと API key が揃えば、次は agent が実行できる (ユーザー作業ではない): メタデータ (英語・日本語) とスクリーンショット (fastlane/metadata/・fastlane/screenshots/、生成済み) のアップロード、Support URL・Privacy Policy URL の登録、App Privacy (収集データなし、fastlane/app_privacy_details.json) の適用。

4. 本人が決めること
  • GitHub Sponsors を有効にするか決める (リリースは止めない。支援を受ける場合だけ)。agent ができない理由: 本人確認と受取口座の登録が要る。実行方法: https://github.com/sponsors

実機・実環境での確認

実装はすべて済んでいて、agent の Simulator・ユニットテスト・make test-integration では確かめられない部分だけを残している。移した元の記述は #15 のコメントにある。

同期と保護レベル
  • Mac 2 台 (同じ Apple Account・iCloud Keychain 有効) で、片方で登録した同期 Secret がもう片方の secchain list と app に現れる
  • Mac で登録した同期 Secret が iPhone の iOS app に現れ、iOS で更新した値が Mac の secchain run に反映される
  • iOS app で Secret を追加し、Mac の secchain list に現れる (iOS → Mac の方向)
  • 「この端末のみ」と device-bound の Secret が他の端末に現れない
  • iCloud Keychain を無効にした Mac でも、ローカルの登録・run が動く
  • confirm の Secret を含む secchain run で Touch ID のプロンプトが出て、キャンセルするとコマンドが実行されない
  • device-bound の Secret を含む secchain run で OS のプロンプトが出る
  • SSH 接続から confirm / device-bound の Secret を読もうとすると、値を読まずに認証エラーになる
  • 対話端末で secchain set <NAME> を実行すると値の入力が画面に表示されず、保存した値が secchain run の子プロセスに渡る
  • iOS app で値の表示を要求し、Face ID / Touch ID を通した後に値が出る
  • device-bound の Secret を environment へ移せる: secchain set DEVICE_BOUND_CHECK --level device-bound (ダミー値) → secchain env migrate local DEVICE_BOUND_CHECK で確認が 1 回だけ出て Moved DEVICE_BOUND_CHECK ... to the environment local. になり、secchain run --env local --only DEVICE_BOUND_CHECK -- sh -c 'test -n "$DEVICE_BOUND_CHECK"' が確認の後に exit 0。最後に secchain delete DEVICE_BOUND_CHECK --env local
配布物
  • 公証済み DMG を別の Mac にダウンロードして、Gatekeeper にブロックされずに起動できる
  • GitHub Releases の SecChain-0.1.0.dmg から /Applications に入れた app の同梱 CLI で、ダミー値の set → run が動き、値がどこにも表示されない (手順は #15 の 2026-09-16 のコメント)
  • Homebrew cask (brew install --cask bannzai/tap/secchain) で入れた secchain が app の Secret を読める
  • アプリアイコン (macOS / iOS) の実機での見え方
遠隔承認 (iPhone と Mac の往復)

前提: CloudKit スキーマの反映 (上の 2.) と、Face ID を登録し iCloud にサインインした iPhone。

  • DEBUG ビルドの「Run Remote Approval Checks」で、Face ID を要求する Secure Enclave の鍵の作成と、Face ID なしで署名を拒むことが ok になる
  • 同じ画面の CloudKit の項目 (レコードとサブスクリプションの保存・取得・削除) が ok になる
  • iPhone のペアリング画面で鍵ができ、アプリを終了して起動し直しても同じ照合番号が出る
  • secchain pair が iPhone と同じ照合番号 (4 桁 3 組) を表示し、目で確かめてから Touch ID / パスワードで登録できる
  • ペアリング画面の「この iPhone」の名前が、Mac の secchain pair の一覧の名前と一致する (機種名になる想定。見分けられるかを確認)
  • secchain pair confirm-on-iphone on / off が Touch ID / パスワードを要求し、secchain pair status の表示が変わる
  • confirm の Secret の secchain run --approve-remotely で iPhone に通知が届く (届くまでの秒数を記録する)。通知のタップで承認画面がその依頼で開き、SecChain を開いたままでもバナーが出る
  • Face ID を通して承認すると Mac の run が続行する。承認のたびに Face ID が出る (1 回の認証が使い回されない)
  • 承認画面の Secrets に、各 Secret の名前と「<scope 名> scope」(リポジトリ自身のものは「repository scope」) が出る。secchain set <NAME> --scope <name> --approve-remotely (confirm の Secret の更新) でも「 scope」が出る
  • iPhone で拒否すると run が「拒否された」と分かるエラーで終わり、Secret を読まない。2 分待つと期限切れのエラーになる (認証失敗と同じ終了コード)
  • 待機中に Mac で Ctrl-C を押すと、iPhone を開いた時にその依頼が一覧から消える
  • SSH 越しの secchain run (ペアリング済み) が、ローカルのプロンプトを出せないことを検出して iPhone に切り替わり、承認で通る。先に ~/.ssh/authorized_keys に鍵を置き、ssh localhost '/Applications/SecChain.app/Contents/Helpers/secchain.app/Contents/MacOS/secchain doctor' の LocalAuthentication refuses to authenticate when it may not show a prompt の行の LAError コードが -1004 であることも見る (-1004 以外なら切り替えの条件を足す必要があるので、この issue にコメントする)
  • Touch ID の無い Mac で、パスワード入力の代わりに iPhone の承認を使える
  • 「ペアリングをやり直す」で照合番号が変わり、やり直す前にペアリング済みだった Mac の run が承認を受け付けなくなる (その Mac で secchain pair をやり直すと通る)
  • 「ペアリングを解除」した後、secchain pair を実行した Mac にこの iPhone の鍵が出なくなる。secchain pair remove が Touch ID / パスワードを要求し、その後はローカルのプロンプトに戻る
  • Developer ID 署名・公証済みのビルドと App Store / TestFlight 版 (production の CloudKit) でも、上と同じ往復になる

移さなかった項目

  • #15「紹介サイト・プライバシーポリシー・サポートページの公開 URL が 200 を返す」: 2026-09-28 に agent が確認して 3 つとも 200 (https://bannzai.github.io/SecChain/、/privacy/、/support/)
  • #15「README のインストール手順が公開済みの Release と cask を指している」: リリース後に agent が確認できる
  • #15「iOS app の設定画面等からプライバシーポリシーとサポートへ到達できる」: 2026-09-28 時点で iOS app にリンクが無い。ユーザー作業ではなく実装が要るため、別 issue で扱う
  • #15「App Store の Support URL・Privacy Policy URL・App Privacy」「スクリーンショットとメタデータ」: 素材は揃っていて、アップロードと登録はアプリレコードと API key の後に agent が行う (上の 3. の注記)
  • #16「App Store スクリーンショットの訴求内容を決める」: PR #52 で 7 枚を生成済み
  • #16「Gemini API のスペンドキャップ」: PR #61 でヘッダー画像を作成済みのため不要
  • #16「release workflow 用の GitHub Secrets を登録する」(body): 同じ issue のコメントで具体化された 5 件の項目にまとめた
  • #16「CloudKit コンテナの作成と割り当て」: agent の操作で済んだ (#16 のコメント)

セッション再開

cd /Users/bannzai/worktrees/bannzai/SecChain/issue-70
claude --resume 3380f118-10d7-491c-b81c-c358743f802a
Ngôn ngữ chính
Swift
Star
0
Fork
0
Merge trung bình
16 giờ 55 phút
Pull request đã merge (30 ngày)
24

Chuẩn bị môi trường

  • Không có Dockerfile hay tệp Docker Compose
  • Có mẫu pull request
  • Không có hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của bannzai/SecChain

Tất cả issue của bannzai/SecChain

Issue tương tự

Thêm issue về Swift

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.