Agent skill

Wjs Publishing Testflight

by jianshuo in jianshuo/claude-skills

为 iOS 项目配置 fastlane + GitHub Actions,实现推送 main 分支自动构建并上传 TestFlight。参考实现:Cathier 项目。触发词:「testflight」「fastlane」「自动构建」「CI TestFlight」「/wjs-publishing-testflight」。

MITAuto-check: notesMobile

Install Wjs Publishing Testflight

skills CLI
$ npx skills add jianshuo/claude-skills --skill wjs-publishing-testflight -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install jianshuo/claude-skills wjs-publishing-testflight --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/jianshuo/claude-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/wjs-publishing-testflight .claude/skills/wjs-publishing-testflight && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
wjs-publishing-testflight
GitHub stars
131
Token cost
~3.4k tokens
SKILL.md length
256 words
Files
1
Skills in repo
38
Repo updated
First seen
Licence
MIT

At a glance

为 iOS 项目配置 fastlane + GitHub Actions,实现推送 main 分支自动构建并上传 TestFlight。参考实现:Cathier 项目。触发词:「testflight」「fastlane」「自动构建」「CI TestFlight」「/wjs-publishing-testflight」。

  • Works in 5 steps: 初始化 fastlane → 文件内容 → GitHub Actions Workflow → …
  • Tasks that involve App store release
  • SKILL.md covers 前置信息(所有项目通用), 工作流逻辑, Step 1 — 初始化 fastlane and Step 2 — 文件内容, plus 6 more sections
  • Calls bundle, gh and git; reaches github.com and rubygems.org; needs ASC_API_KEY_ID and MATCH_PASSWORD

What it does

Wjs Publishing Testflight is an agent skill from jianshuo/claude-skills. 为 iOS 项目配置 fastlane + GitHub Actions,实现推送 main 分支自动构建并上传 TestFlight。参考实现:Cathier 项目。触发词:「testflight」「fastlane」「自动构建」「CI TestFlight」「/wjs-publishing-testflight」。

Its SKILL.md is about 3.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Mobile, covering App store release. It works with App Store Connect, GitHub Actions and iOS. The repository describes itself as: 13 Claude Code skills for video production (transcribe / translate / dub / multicam / subtitles / reframe) + WeChat publishing. Compatible with Claude Code, OpenAI Codex CLI… The licence is MIT.

When your agent uses it

  • Tasks that involve App store release

Example prompts

  • “/wjs-publishing-testflight”

Workflow steps

5 steps, taken from the step headings in SKILL.md.

  1. 初始化 fastlane
  2. 文件内容
  3. GitHub Actions Workflow
  4. GitHub Secrets
  5. 验证

What it can do on your machine

Read from SKILL.md and the folder at commit b2690f5. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • bundle
    • gh
    • git

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • github.com
    • rubygems.org

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • ASC_API_KEY_ID
    • MATCH_PASSWORD

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Wjs Publishing Testflight loads about 3.4k tokens when it runs. Until then it costs about 47 tokens; SKILL.md has 256 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~47
When it runs · the whole SKILL.md, loaded when a task matches
~3.4k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteRuns commands with sudoSKILL.md:330
    run: sudo xcode-select -s /Applications/Xcode_26.2.app

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from jianshuo/claude-skills at commit b2690f5, republished under its MIT licence (© jianshuo). 256 words, ~3,449 tokens.

Download SKILL.mdSave it as .claude/skills/wjs-publishing-testflight/SKILL.md (or your agent's skills folder).
name
wjs-publishing-testflight
description
为 iOS 项目配置 fastlane + GitHub Actions,实现推送 main 分支自动构建并上传 TestFlight。参考实现:Cathier 项目。触发词:「testflight」「fastlane」「自动构建」「CI TestFlight」「/wjs-publishing-testflight」。

wjs-publishing-testflight

为 iOS 项目接入 fastlane + GitHub Actions,推送 main → 自动构建 → TestFlight。参考实现是 Cathier 项目(github.com/jianshuo/Cathier)。

前置信息(所有项目通用)

项目值
Apple IDjianshuo@hotmail.com
Team ID97XBW2A43H
ITC Team ID97847885
ASC API Key IDS6363V64RS
ASC Issuer ID69a6de82-56b6-47e3-e053-5b8c7c11a4d1
ASC API Key 文件iCloud 重要文档目录下的 .p8 文件(见 [[apple-developer-credentials]])
Match certs repo 格式https://github.com/jianshuo/<APP>-certs.git

工作流逻辑

git push → main
    ↓
GitHub Actions (macos-15, Xcode 26.2)
    ↓
fastlane beta
    ├─ 查询 ASC 最新 build number → 加 1
    ├─ match(readonly,拉 appstore 证书)
    ├─ increment_build_number
    ├─ build_app (app-store export)
    ├─ build_num % 10 == 0 → 自动 App Store 提审(bump marketing version)
    ├─ pbxproj MARKETING_VERSION > 最新 release/* tag → 手动 bump → 提审
    └─ 否则 → upload_to_testflight + 打 testflight/<build_num> tag

Auto-release 规则(Cathier 的约定,新项目可自定):

  • 每第 10 个 build(build_num % 10 == 0)自动 bump minor 版本并提交 App Store
  • 或开发者手动改 pbxproj 的 MARKETING_VERSION 并推送
  • CI 永远不 commit pbxproj,不 push main

Step 1 — 初始化 fastlane

bash
cd /path/to/YourApp
bundle init
echo 'gem "fastlane"' >> Gemfile
bundle install
bundle exec fastlane init

Step 2 — 文件内容

fastlane/Appfile
ruby
app_identifier("com.YOUR_BUNDLE_ID")
apple_id("jianshuo@hotmail.com")
itc_team_id("97847885")
team_id("97XBW2A43H")
fastlane/Matchfile
ruby
git_url("https://github.com/jianshuo/YOUR_APP-certs.git")
storage_mode("git")
type("development")

先跑一次建立证书仓库(本地):

bash
bundle exec fastlane match init
bundle exec fastlane match appstore
bundle exec fastlane match development
fastlane/Fastfile

以下是完整 Fastfile,复制后把 BUNDLE_ID 替换为真实值:

ruby
require "set"

default_platform(:ios)

BUNDLE_ID = "com.YOUR_BUNDLE_ID"

platform :ios do

  def next_build_number(api_key:)
    latest = latest_testflight_build_number(
      api_key:            api_key,
      app_identifier:     BUNDLE_ID,
      initial_build_number: 0
    )
    latest + 1
  end

  def guard_not_in_review
    require "spaceship"
    app = Spaceship::ConnectAPI::App.find(BUNDLE_ID)
    UI.user_error!("App not found on App Store Connect") unless app
    versions = app.get_app_store_versions(filter: { platform: "IOS" })
    versions.each do |v|
      if v.app_version_state == "IN_REVIEW"
        UI.user_error!("Version #{v.version_string} is IN_REVIEW — wait for review to finish.")
      end
    end
  end

  def push_release_notes_via_spaceship(notes:)
    require "spaceship"
    app = Spaceship::ConnectAPI::App.find(BUNDLE_ID)
    version = app.get_edit_app_store_version(platform: "IOS")
    UI.user_error!("No edit-state App Store Version found") unless version
    localizations = version.get_app_store_version_localizations
    localizations.each do |loc|
      text = notes[loc.locale] || notes[loc.locale.split("-").first] || notes["default"]
      next if text.nil? || text.empty?
      loc.update(attributes: { whats_new: text })
    end
  end

  def upload_and_submit_for_review(api_key:, app_version:)
    upload_to_app_store(
      api_key:                    api_key,
      app_version:                app_version,
      skip_metadata:              true,
      skip_screenshots:           true,
      submit_for_review:          false,
      run_precheck_before_submit: false,
    )
    push_release_notes_via_spaceship(notes: build_release_notes)
    upload_to_app_store(
      api_key:                    api_key,
      app_version:                app_version,
      skip_metadata:              true,
      skip_screenshots:           true,
      skip_binary_upload:         true,
      submit_for_review:          true,
      automatic_release:          true,
      reject_if_possible:         true,
      run_precheck_before_submit: false,
      submission_information: {
        add_id_info_uses_idfa:             false,
        export_compliance_uses_encryption: false,
      },
    )
  end

  def sign_and_build(api_key:, build_num:, scheme: "YOUR_SCHEME")
    match(
      type:                "appstore",
      readonly:            true,
      git_basic_authorization: Base64.strict_encode64(ENV["MATCH_GIT_BASIC_AUTH"]),
      api_key:             api_key
    )
    increment_build_number(build_number: build_num)
    build_app(
      scheme:        scheme,
      export_method: "app-store",
      xcargs: "CODE_SIGN_STYLE=Manual CODE_SIGN_IDENTITY='Apple Distribution' PROVISIONING_PROFILE_SPECIFIER='match AppStore #{BUNDLE_ID}'",
      export_options: {
        provisioningProfiles: { BUNDLE_ID => "match AppStore #{BUNDLE_ID}" }
      }
    )
  end

  def build_release_notes
    last_tag = `git tag --list 'release/*' --sort=-version:refname 2>/dev/null | head -1`.strip
    raw = last_tag.empty? ?
      `git log -10 --pretty=format:"- %s"`.strip :
      `git log #{last_tag}..HEAD --pretty=format:"- %s"`.strip
    commits = raw.gsub(/<[^>]*>/, "").gsub(/[ \t]+/, " ").strip
    en = commits.empty? ? "Bug fixes and performance improvements." : "What's new:\n#{commits}"
    zh = commits.empty? ? "修复 bug 和性能改进。" : "更新内容:\n#{commits}"
    { "default" => en, "en-US" => en, "zh-Hans" => zh }
  end

  def bump_minor(version)
    parts = version.to_s.split(".")
    major = parts[0].to_i
    minor = (parts[1] || "0").to_i + 1
    minor > 9 ? "#{major + 1}.0" : "#{major}.#{minor}"
  end

  def set_marketing_version(version)
    require "xcodeproj"
    project_path = File.expand_path("../YOUR_APP.xcodeproj", __dir__)
    project = Xcodeproj::Project.open(project_path)
    project.targets.select { |t| t.name == "YOUR_SCHEME" }.each do |target|
      target.build_configurations.each do |c|
        c.build_settings["MARKETING_VERSION"] = version
      end
    end
    project.save
  end

  desc "Build and upload to TestFlight (auto-detects App Store release)."
  lane :beta do
    setup_ci
    api_key = app_store_connect_api_key(
      key_id:                ENV["ASC_API_KEY_ID"],
      issuer_id:             ENV["ASC_API_ISSUER_ID"],
      key_content:           ENV["ASC_API_KEY_CONTENT"],
      is_key_content_base64: true,
      duration:              1200,
      in_house:              false
    )
    build_num       = next_build_number(api_key: api_key)
    last_tag        = `git tag --list 'release/*' --sort=-version:refname 2>/dev/null | head -1`.strip
    last_released   = last_tag.sub(%r{^release/}, "")
    pbxproj_version = get_version_number(xcodeproj: "YOUR_APP.xcodeproj", target: "YOUR_SCHEME")
    auto_release    = (build_num % 10).zero?

    if auto_release
      highest = [pbxproj_version, last_released].reject(&:empty?)
                                                 .max_by { |v| Gem::Version.new(v) }
      current_version = bump_minor(highest)
      set_marketing_version(current_version)
      is_release = true
    else
      current_version = pbxproj_version
      is_release = last_released.empty? ||
                   Gem::Version.new(current_version) > Gem::Version.new(last_released)
    end

    sign_and_build(api_key: api_key, build_num: build_num)

    if is_release
      guard_not_in_review
      upload_and_submit_for_review(api_key: api_key, app_version: current_version)
      sh("git tag release/#{current_version} || true")
      sh("git push origin release/#{current_version} || true")
    else
      last_t = `git describe --tags --abbrev=0 2>/dev/null`.strip
      commits = last_t.empty? ?
        `git log -10 --pretty=format:"• %s"`.strip :
        `git log #{last_t}..HEAD --pretty=format:"• %s"`.strip
      commits = "• No notable changes" if commits.empty?
      upload_to_testflight(
        api_key:                           api_key,
        skip_waiting_for_build_processing: false,
        distribute_external:               false,
        notify_external_testers:           false,
        changelog:                         "Build #{build_num}\n\nWhat changed:\n#{commits}"
      )
      sh("git tag testflight/#{build_num} || true")
    end
  end

  desc "Bump MARKETING_VERSION (2.2→2.3). Commit pbxproj + push → next CI run submits to review."
  lane :bump do
    current     = get_version_number(xcodeproj: "YOUR_APP.xcodeproj", target: "YOUR_SCHEME")
    new_version = bump_minor(current)
    set_marketing_version(new_version)
    UI.success("Bumped: #{current} → #{new_version}")
    UI.message("Now: git add *.xcodeproj/project.pbxproj && git commit && git push origin main")
  end

  desc "Explicit App Store release (bypasses auto-detection)."
  lane :release do
    setup_ci
    api_key = app_store_connect_api_key(
      key_id:                ENV["ASC_API_KEY_ID"],
      issuer_id:             ENV["ASC_API_ISSUER_ID"],
      key_content:           ENV["ASC_API_KEY_CONTENT"],
      is_key_content_base64: true,
      duration:              1200,
      in_house:              false
    )
    build_num   = next_build_number(api_key: api_key)
    app_version = get_version_number(xcodeproj: "YOUR_APP.xcodeproj", target: "YOUR_SCHEME")
    sign_and_build(api_key: api_key, build_num: build_num)
    guard_not_in_review
    upload_and_submit_for_review(api_key: api_key, app_version: app_version)
  end

end
Gemfile
ruby
source "https://rubygems.org"
gem "fastlane"

Run bundle install then commit Gemfile.lock.

Step 3 — GitHub Actions Workflow

Save as .github/workflows/build.yml:

yaml
name: Build & Deploy

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]
  workflow_dispatch:
    inputs:
      destination:
        description: 'Deploy target'
        required: true
        default: 'testflight'
        type: choice
        options:
          - testflight
          - appstore

jobs:
  build:
    runs-on: macos-15

    steps:
      - uses: actions/checkout@v6
        with:
          fetch-depth: 0        # full history for commit log in changelog
          fetch-tags: true
          token: ${{ secrets.FEEDBACK_PAT }}

      - name: Select Xcode
        run: sudo xcode-select -s /Applications/Xcode_26.2.app

      - name: Show Xcode info
        run: xcodebuild -version

      - name: Set up Ruby
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: '3.2'
          bundler-cache: true

      # PRs: build only (verify it compiles, no signing)
      - name: Build for verification
        if: github.event_name == 'pull_request'
        run: |
          xcodebuild build \
            -project YOUR_APP.xcodeproj \
            -scheme YOUR_SCHEME \
            -destination 'generic/platform=iOS' \
            -skipPackagePluginValidation \
            CODE_SIGNING_ALLOWED=NO

      # Push to main → TestFlight (or App Store if auto/manual release)
      - name: Run fastlane
        if: github.event_name != 'pull_request'
        env:
          MATCH_PASSWORD:       ${{ secrets.MATCH_PASSWORD }}
          MATCH_GIT_BASIC_AUTH: ${{ secrets.MATCH_GIT_BASIC_AUTH }}
          ASC_API_KEY_ID:       ${{ secrets.ASC_API_KEY_ID }}
          ASC_API_ISSUER_ID:    ${{ secrets.ASC_API_ISSUER_ID }}
          ASC_API_KEY_CONTENT:  ${{ secrets.ASC_API_KEY_CONTENT }}
        run: |
          DEST="${{ github.event.inputs.destination }}"
          if [ "$DEST" = "appstore" ]; then
            bundle exec fastlane release
          else
            bundle exec fastlane beta
          fi

      - name: Push tags
        if: success() && github.event_name != 'pull_request'
        run: git push --tags || true

Step 4 — GitHub Secrets

Run these once per repo (REPO=jianshuo/YOUR_APP):

bash
REPO=jianshuo/YOUR_APP

# 1. match encryption password (same as your local match password)
echo "YOUR_MATCH_PASSWORD" | gh secret set MATCH_PASSWORD --repo $REPO

# 2. base64(username:PAT) for certs repo access
echo -n "jianshuo:YOUR_GITHUB_PAT" | base64 | gh secret set MATCH_GIT_BASIC_AUTH --repo $REPO

# 3. ASC API key (same key across all apps)
echo "S6363V64RS" | gh secret set ASC_API_KEY_ID --repo $REPO
echo "69a6de82-56b6-47e3-e053-5b8c7c11a4d1" | gh secret set ASC_API_ISSUER_ID --repo $REPO
cat ~/path/to/AuthKey_S6363V64RS.p8 | base64 | gh secret set ASC_API_KEY_CONTENT --repo $REPO

# 4. GitHub PAT (needs repo + workflow scopes) for checkout with tag push
echo "YOUR_GITHUB_PAT" | gh secret set FEEDBACK_PAT --repo $REPO

ASC API Key 文件位置:见 [[apple-developer-credentials]],在 iCloud 重要文档目录。

Step 5 — 验证

  1. 推一个空 commit:git commit --allow-empty -m "trigger CI" && git push
  2. 看 Actions tab:github.com/jianshuo/YOUR_APP/actions
  3. 首次成功后 TestFlight 里会出现新 build

日常操作

操作命令
触发 TestFlight buildgit push origin main(任何 commit)
手动提审 App StoreGitHub Actions → Run workflow → 选 appstore
本地 bump 版本 → 下次 CI 提审bundle exec fastlane bump → commit pbxproj → push
强制立即提审bundle exec fastlane release(本地跑,需本地证书)

替换清单

新项目复制上面文件后,全局替换:

占位符替换为
YOUR_BUNDLE_ID实际 bundle identifier
YOUR_APPrepo/文件名,如 Cathier
YOUR_SCHEMEXcode scheme 名

常见问题

现象原因解决
No matching provisioning profiles foundmatch 未跑或 certs repo 空本地跑 bundle exec fastlane match appstore
401 Unauthorized on ASCASC API Key 内容有误或过期重新 base64 encode .p8 写入 secret
build number 没递增MATCH_GIT_BASIC_AUTH 未设置导致 match 失败中断检查 secret 格式(base64 无换行)
tag push 失败FEEDBACK_PAT 权限不够PAT 需要 repo + workflow scope
IN_REVIEW 报错版本正在审核等审核结束或取消后再触发 release

© jianshuo, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in wjs-publishing-testflight of jianshuo/claude-skills.

Open the folder on GitHubat commit b2690f5

Compare with similar skills

Wjs Publishing Testflight next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Wjs Publishing Testflight compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Wjs Publishing Testflight this skilljianshuo/claude-skills131—~3.4kAutomated safety check: NotesMIT
iOS App Store SubmitZestfulPulse/ios-app-store-submit142—~4.7kAutomated safety check: PassMIT
Releasearul28/ADE114—~17kAutomated safety check: PassAGPL-3.0
CI CD Setuprshankras/claude-code-apple-skills787—~1.5kAutomated safety check: NotesMIT
App Store Release Flowrorkai/app-store-connect-cli-skills1.1k2 repos~2kAutomated safety check: PassMIT
App Store Submission Healthrorkai/app-store-connect-cli-skills1.1k2 repos~2.2kAutomated safety check: PassMIT

Similar skills

  • iOS App Store Submit

    ZestfulPulse/ios-app-store-submit

    Build, sign, and submit a Flutter/iOS app to the App Store Connect — covers Xcode archive/export, code signing (including headless-Mac keychain workarounds), the asc CLI for App Store Connect…

    142 GitHub stars~4.7k tokensUpdated 9 days ago
    MobileAuto-check passed
  • Release

    arul28/ADE

    ADE release conductor: detect whether desktop, iOS, and/or the Cloudflare web tier actually changed, bump desktop patch versions, keep iOS marketing versions fixed while bumping build numbers, ship…

    114 GitHub stars~17k tokensUpdated today
    MobileAuto-check passed
  • CI CD Setup

    rshankras/claude-code-apple-skills

    Generate CI/CD configuration for automated builds, tests, and distribution of iOS/macOS apps.

    787 GitHub stars~1.5k tokensUpdated 2 mo ago
    DevOps & CloudAuto-check: notes
  • App Store Release Flow

    rorkai/app-store-connect-cli-skills

    Orchestrates App Store releases with the asc CLI: staging a version, uploading or building, publishing and submitting for review, with dry-run and confirmation gates.

    1.1k GitHub starsUsed in 2 repos~2k tokens
    MobileAuto-check passed
  • App Store Submission Health

    rorkai/app-store-connect-cli-skills

    Diagnoses why an App Store version cannot be submitted or is stuck in review, using the asc CLI for validation, repair routing, status checks and retry decisions.

    1.1k GitHub starsUsed in 2 repos~2.2k tokens
    MobileAuto-check passed
  • App Store Preflight Skills

    truongduy2611/app-store-preflight-skills

    Scan an iOS/macOS Xcode project for common App Store rejection patterns before submission.

    1.4k GitHub stars~1.4k tokensUpdated 4 mo ago
    MobileAuto-check passed

More from jianshuo/claude-skills

All 38 skills in this repo
  • Wjs Segmenting Video

    jianshuo/claude-skills

    A skill your agent uses when the user has a long-form video (interview / lecture / podcast / conversation) and a transcript SRT, and wants to extract 3–6 stand-alone topical short clips from it.

    131 GitHub stars~3.5k tokensUpdated 1 mo ago
    Auto-check passed
  • Wjs Uploading Video

    jianshuo/claude-skills

    Upload one or many videos to YouTube. An agent skill from jianshuo/claude-skills.

    131 GitHub stars~2.1k tokensUpdated 1 mo ago
    Auto-check passed
  • Wjs Converting Wp To Hugo

    jianshuo/claude-skills

    A skill your agent uses when migrating a WordPress site to a Hugo static site on GitHub Pages from a WXR export (.xml) plus the wp-content/uploads folder — preserving /archives/<id/ URLs, localizing…

    131 GitHub stars~1.8k tokensUpdated 1 mo ago
    Auto-check passed
  • Wjs Burning Subtitles

    jianshuo/claude-skills

    A skill your agent uses when the user has a video + an SRT and wants the subtitles either burned into the pixels (libass, always-visible) or soft-muxed as a togglable track.

    131 GitHub stars~3k tokensUpdated 1 mo ago
    Auto-check passed
  • Wjs Cleaning Spam

    jianshuo/claude-skills

    A skill your agent uses when the user complains about spam on his X/Twitter posts — 同城面付 / 寻固炮 / 线下上门 / 免费破处 这类引流号在他推文下刷的 emoji 垃圾回复 — and wants them removed.

    131 GitHub stars~532 tokensUpdated 1 mo ago
    Auto-check passed
  • Wjs Creating Video Book

    jianshuo/claude-skills

    A skill your agent uses when the user wants a book turned into YouTube chapter videos — 每章用 VoiceDrop 读书的有声书 mp3 做音轨,配 GPT Image 2 画面和中心思想大字,输出 1920×1080 横屏视频发 YouTube。Triggers — "把这本书做成视频"…

    131 GitHub stars~1.8k tokensUpdated 1 mo ago
    Auto-check passed

Categories

Questions about Wjs Publishing Testflight

What does Wjs Publishing Testflight do?

为 iOS 项目配置 fastlane + GitHub Actions,实现推送 main 分支自动构建并上传 TestFlight。参考实现:Cathier 项目。触发词:「testflight」「fastlane」「自动构建」「CI TestFlight」「/wjs-publishing-testflight」。. Wjs Publishing Testflight is an agent skill from jianshuo/claude-skills.

When should I use Wjs Publishing Testflight?

Wjs Publishing Testflight fits situations like: tasks that involve App store release.

How do I install Wjs Publishing Testflight in Claude Code?

Run `npx skills add jianshuo/claude-skills --skill wjs-publishing-testflight -a claude-code`. Or copy the skill folder (wjs-publishing-testflight in jianshuo/claude-skills) into .claude/skills/wjs-publishing-testflight in your project. Claude Code loads it when a task matches its description.

How do I install Wjs Publishing Testflight in Codex?

Run `npx skills add jianshuo/claude-skills --skill wjs-publishing-testflight -a codex`. Or copy the skill folder (wjs-publishing-testflight in jianshuo/claude-skills) into .agents/skills/wjs-publishing-testflight in your project. Codex loads it when a task matches its description.

Can I use Wjs Publishing Testflight in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jianshuo/claude-skills --skill wjs-publishing-testflight -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/wjs-publishing-testflight, .gemini/skills/wjs-publishing-testflight, .github/skills/wjs-publishing-testflight and .opencode/skills/wjs-publishing-testflight in your project.

What does Wjs Publishing Testflight need to run?

Going by SKILL.md and its folder, Wjs Publishing Testflight needs the command-line tools its instructions call (bundle, gh and git) and credentials named ASC_API_KEY_ID and MATCH_PASSWORD.

Does Wjs Publishing Testflight access the network?

SKILL.md names 2 domains. In commands or code: github.com and rubygems.org; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.

Is Wjs Publishing Testflight safe to install?

Our automated static check of SKILL.md found notes only (runs commands with sudo), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Wjs Publishing Testflight use?

Wjs Publishing Testflight is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Wjs Publishing Testflight use?

About 3.4k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Wjs Publishing Testflight?

Skills that share tags, products or a category with Wjs Publishing Testflight: iOS App Store Submit (ZestfulPulse/ios-app-store-submit, 142 stars), Release (arul28/ADE, 114 stars), CI CD Setup (rshankras/claude-code-apple-skills, 787 stars) and App Store Release Flow (rorkai/app-store-connect-cli-skills, 1.1k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Wjs Publishing Testflight?

jianshuo (a GitHub user) maintains it in jianshuo/claude-skills, which has 131 GitHub stars. The repository holds 38 skills in this directory. The repository was last updated on August 20, 2026.

Source: jianshuo/claude-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.