Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
02588fd
fix: skip sentinel cache on Task cancellation to prevent false 'no ly…
tukuyomil032 Jun 4, 2026
eb55915
fix: center-align lyrics text by expanding Text to full container width
tukuyomil032 Jun 4, 2026
13128e6
fix: remove sentinel cache and album_name from search to restore lyri…
tukuyomil032 Jun 5, 2026
3c50e41
feat: add ATS exception for music.163.com (NetEase HTTP endpoint)
tukuyomil032 Jun 5, 2026
474e98e
fix: use empty Name field as Spotify ad indicator
tukuyomil032 Jun 5, 2026
de731a6
docs: add THIRD_PARTY_NOTICES.md for LyricsKit MPL-2.0
tukuyomil032 Jun 5, 2026
ef5d85c
feat: improve lyrics UI layout (Pattern D)
tukuyomil032 Jun 5, 2026
7add16b
feat: add LyricsKit fallback for lyrics not in LRCLIB
tukuyomil032 Jun 5, 2026
900a50a
fix: increase lyrics horizontal padding to prevent scaleEffect clipping
tukuyomil032 Jun 5, 2026
6225d24
fix: reject LyricsKit results with no Japanese characters for Japanes…
tukuyomil032 Jun 5, 2026
ee14423
fix: use uniform font weight to prevent line-wrap reflow on active state
tukuyomil032 Jun 5, 2026
5ce99fa
chore: bump MARKETING_VERSION to 0.3.0
tukuyomil032 Jun 5, 2026
7d87363
feat: add beta/stable detection to release workflow
tukuyomil032 Jun 5, 2026
1b4b27a
feat: support perch-beta.app build via PRODUCT_NAME for beta tags
tukuyomil032 Jun 5, 2026
c7c5674
fix: switch CI runner to macos-26 for Swift 6.2 support
tukuyomil032 Jun 5, 2026
4f09f69
fix: use macos-26 runner and support workflow_dispatch version input
tukuyomil032 Jun 5, 2026
0a956b9
fix: switch test.yml runner to macos-26 for Swift 6.2 support
tukuyomil032 Jun 5, 2026
1c32a54
fix: expose xcodebuild errors in CI logs
tukuyomil032 Jun 5, 2026
5cc40ec
fix: remove xcbeautify pipe to expose raw xcodebuild errors
tukuyomil032 Jun 5, 2026
bad1eae
fix: trust Swift macros (FrameworkToolbox) for Xcode 26 CI
tukuyomil032 Jun 5, 2026
e64120c
fix: skip package plugin/macro validation in Xcode 26 CI
tukuyomil032 Jun 5, 2026
0f9e0a6
chore: diagnose - raw xcodebuild output with -skipPackagePluginValida…
tukuyomil032 Jun 5, 2026
4f47ec9
fix: add -skipMacroValidation for Xcode 26 Swift macro trust in CI
tukuyomil032 Jun 5, 2026
623e51f
fix: rename perch.app to perch-beta.app post-archive instead of PRODU…
tukuyomil032 Jun 5, 2026
fb255e2
fix: derive x86_64 archive from universal via lipo (Swift Macro cross…
tukuyomil032 Jun 5, 2026
18a0fd1
fix: add tag_name to softprops/action-gh-release for workflow_dispatch
tukuyomil032 Jun 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ permissions:
jobs:
build:
name: Build
runs-on: macos-latest
runs-on: macos-26
timeout-minutes: 30

steps:
Expand Down Expand Up @@ -48,9 +48,11 @@ jobs:
-scheme perch \
-configuration Debug \
-destination 'platform=macOS' \
-skipPackagePluginValidation \
-skipMacroValidation \
CODE_SIGNING_ALLOWED=NO \
build \
2>&1 | xcbeautify --renderer github-actions
2>&1 | xcbeautify

lint:
name: Lint
Expand Down
135 changes: 93 additions & 42 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,18 @@ on:
tags:
- 'v*'
workflow_dispatch:
inputs:
version:
description: 'Release tag (e.g. v0.3.0-beta-1)'
required: true
type: string

permissions:
contents: write

jobs:
release:
runs-on: macos-15
runs-on: macos-26

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# GitHub Actions で利用可能な macOS ランナーイメージを確認
gh api /meta | jq -r '.actions_runner_images[] | select(.os == "macos") | .runner_image'

Repository: tukuyomil032/Perch

Length of output: 120


🌐 Web query:

GitHub Actions で利用可能な macOS ランナーの最新バージョンは何ですか?

💡 Result:

2026年6月5日時点で、GitHub Actionsで利用可能な最新のmacOSランナーは「macos-26」です[1][2]。 GitHub ActionsのGitHubホスト型ランナーにおけるmacOS環境は、Appleシリコン(arm64)およびIntel(x64)の両アーキテクチャで提供されており、以下のラベルで利用可能です[2]。 ・macos-26:標準のmacOSランナー(arm64)[1][2] ・macos-26-intel:標準のmacOSランナー(x64)[1][2] ・macos-26-large:Largeランナー(x64)[1][2] ・macos-26-xlarge:Extra-largeランナー(arm64)[1][2] これらのランナーイメージは、GitHubの公式リポジトリ(actions/runner-images)で継続的に更新されており、OSのバージョンはmacos-26.4が採用されています[3][4][5]。なお、古いmacOS 14ランナーイメージについては deprecation(非推奨)が開始されており、将来的にサポートが終了する予定であるため、最新のmacos-26への移行が推奨されています[3][6]。

Citations:


🏁 Script executed:

#!/bin/bash
set -euo pipefail
FILE=".github/workflows/release.yml"
if [ ! -f "$FILE" ]; then
  echo "Missing $FILE" >&2
  exit 1
fi
# show around the mentioned lines (line numbers in the review comment: 19 and 31)
sed -n '1,220p' "$FILE" | nl -ba | sed -n '1,220p'
echo "---- tail ----"
tail -n 80 "$FILE" | nl -ba -w2 -s': ' | head -n 120

Repository: tukuyomil032/Perch

Length of output: 105


🏁 Script executed:

#!/bin/bash
set -euo pipefail
FILE=".github/workflows/release.yml"
# Print with line numbers the regions around line 19 and 31, plus nearby logic.
for r in "1,60p" "15,45p" "55,120p" "120,220p"; do
  echo "==== $r ===="
  sed -n "$r" "$FILE" | nl -ba -w3 -s': ' 
done

Repository: tukuyomil032/Perch

Length of output: 139


🏁 Script executed:

#!/bin/bash
set -euo pipefail
FILE=".github/workflows/release.yml"

for r in "1,60p" "15,45p" "55,120p" "120,220p"; do
  echo "==== $r ===="
  sed -n "$r" "$FILE" | nl -ba -w3 -s': '
done

Repository: tukuyomil032/Perch

Length of output: 139


🏁 Script executed:

#!/bin/bash
set -euo pipefail
FILE=".github/workflows/release.yml"
sed -n '1,120p' "$FILE" | cat -n

Repository: tukuyomil032/Perch

Length of output: 4794


🏁 Script executed:

#!/bin/bash
set -euo pipefail
FILE=".github/workflows/release.yml"
echo "---- matches: inputs.version ----"
rg -n "inputs\.version|github\.event\.inputs\.version" "$FILE" || true
echo "---- matches: TAG= ----"
rg -n "TAG\s*=" "$FILE" || true
echo "---- matches: shell quoting around TAG ----"
rg -n "TAG.*\\$\\{\\{.*inputs\\.version" "$FILE" || true

Repository: tukuyomil032/Perch

Length of output: 372


🏁 Script executed:

#!/bin/bash
set -euo pipefail
FILE=".github/workflows/release.yml"
echo "---- show around line ~19 (runner) ----"
sed -n '10,35p' "$FILE" | cat -n

Repository: tukuyomil032/Perch

Length of output: 838


.github/workflows/release.ymlmacos-26 は問題なし、workflow_dispatchversion 入力をサニタイズ必須

  • runs-on: macos-26 は GitHub ホストランナーとして提供されているため、ランナー不存在による失敗懸念は不要です。
  • Resolve version ステップの TAG="${{ github.event.inputs.version }}" はユーザー入力が bash 内でコマンド置換等として解釈され得るため、version を厳密な正規表現で検証して不正入力を拒否してください(例:期待するタグ形式のみ許可)。
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/release.yml at line 19, The workflow accepts a raw
workflow_dispatch input named version and assigns it to TAG in the "Resolve
version" step; add strict validation to reject anything that doesn't match your
allowed tag pattern (e.g., semantic version or repo tag format) before using it
in bash. In the "Resolve version" step, validate github.event.inputs.version
against a strict regex (reject and fail the job if it doesn't match), and only
then assign it to TAG (avoid direct use of unvalidated input); reference the
workflow_dispatch input name version and the TAG variable to locate where to add
the check.

env:
SCHEME: perch
APP_NAME: perch
Expand All @@ -22,10 +27,25 @@ jobs:
- name: Resolve version
id: version
run: |
TAG="${GITHUB_REF_NAME:-v0.2.0}"
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
TAG="${{ github.event.inputs.version }}"
else
TAG="${GITHUB_REF_NAME}"
fi
VERSION="${TAG#v}"
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo "tag=$TAG" >> "$GITHUB_OUTPUT"
BASE_VERSION="${VERSION%%-*}"
if [[ "$VERSION" =~ -[a-zA-Z] ]]; then
IS_BETA=true
BUNDLE_NAME="perch-beta"
else
IS_BETA=false
BUNDLE_NAME="perch"
fi
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo "base_version=$BASE_VERSION" >> "$GITHUB_OUTPUT"
echo "tag=$TAG" >> "$GITHUB_OUTPUT"
echo "is_beta=$IS_BETA" >> "$GITHUB_OUTPUT"
echo "bundle_name=$BUNDLE_NAME" >> "$GITHUB_OUTPUT"

- name: Build arm64 archive
run: |
Expand All @@ -35,27 +55,15 @@ jobs:
-configuration Release \
-archivePath build/$APP_NAME-arm64.xcarchive \
-destination 'generic/platform=macOS' \
-skipPackagePluginValidation \
-skipMacroValidation \
ARCHS=arm64 \
ONLY_ACTIVE_ARCH=NO \
CODE_SIGN_IDENTITY="-" \
CODE_SIGNING_REQUIRED=NO \
CODE_SIGNING_ALLOWED=NO \
SKIP_INSTALL=NO 2>&1 | tail -5

- name: Build x86_64 archive
run: |
set -o pipefail
xcodebuild archive \
-scheme "$SCHEME" \
-configuration Release \
-archivePath build/$APP_NAME-x86_64.xcarchive \
-destination 'generic/platform=macOS' \
ARCHS=x86_64 \
ONLY_ACTIVE_ARCH=NO \
CODE_SIGN_IDENTITY="-" \
CODE_SIGNING_REQUIRED=NO \
CODE_SIGNING_ALLOWED=NO \
SKIP_INSTALL=NO 2>&1 | tail -5
MARKETING_VERSION="${{ steps.version.outputs.base_version }}" \
SKIP_INSTALL=NO 2>&1 | tail -100

- name: Build universal archive
run: |
Expand All @@ -65,28 +73,52 @@ jobs:
-configuration Release \
-archivePath build/$APP_NAME-universal.xcarchive \
-destination 'generic/platform=macOS' \
-skipPackagePluginValidation \
-skipMacroValidation \
"ARCHS=arm64 x86_64" \
ONLY_ACTIVE_ARCH=NO \
CODE_SIGN_IDENTITY="-" \
CODE_SIGNING_REQUIRED=NO \
CODE_SIGNING_ALLOWED=NO \
SKIP_INSTALL=NO 2>&1 | tail -5
MARKETING_VERSION="${{ steps.version.outputs.base_version }}" \
SKIP_INSTALL=NO 2>&1 | tail -100

- name: Create x86_64 archive from universal (lipo thin)
run: |
cp -Rp "build/$APP_NAME-universal.xcarchive" "build/$APP_NAME-x86_64.xcarchive"
find "build/$APP_NAME-x86_64.xcarchive/Products" -type f | while read f; do
if file "$f" | grep -q "Mach-O universal binary"; then
lipo "$f" -thin x86_64 -output "$f"
fi
done
echo "Created x86_64 archive from universal via lipo"

- name: Rename app bundle for beta
if: steps.version.outputs.is_beta == 'true'
run: |
for ARCH in arm64 x86_64 universal; do
SRC="build/$APP_NAME-${ARCH}.xcarchive/Products/Applications/perch.app"
DST="build/$APP_NAME-${ARCH}.xcarchive/Products/Applications/perch-beta.app"
mv "$SRC" "$DST"
echo "Renamed: perch.app → perch-beta.app (${ARCH})"
done

- name: Create DMGs
run: |
VERSION="${{ steps.version.outputs.version }}"
BUNDLE_NAME="${{ steps.version.outputs.bundle_name }}"
mkdir -p build/dmg

for ARCH in arm64 x86_64 universal; do
APP="build/$APP_NAME-${ARCH}.xcarchive/Products/Applications/$APP_NAME.app"
APP="build/$APP_NAME-${ARCH}.xcarchive/Products/Applications/${BUNDLE_NAME}.app"
STAGING="build/dmg-staging-${ARCH}"
rm -rf "$STAGING"
mkdir -p "$STAGING"
cp -R "$APP" "$STAGING/$APP_NAME.app"
cp -R "$APP" "$STAGING/${BUNDLE_NAME}.app"

codesign --force --deep --sign - --timestamp=none "$STAGING/$APP_NAME.app"
codesign --verify --deep --strict --verbose=4 "$STAGING/$APP_NAME.app"
if ! spctl --assess --type execute --verbose=4 "$STAGING/$APP_NAME.app"; then
codesign --force --deep --sign - --timestamp=none "$STAGING/${BUNDLE_NAME}.app"
codesign --verify --deep --strict --verbose=4 "$STAGING/${BUNDLE_NAME}.app"
if ! spctl --assess --type execute --verbose=4 "$STAGING/${BUNDLE_NAME}.app"; then
echo "::warning::spctl rejected ad-hoc signed app for ${ARCH}; continuing."
fi

Expand All @@ -99,28 +131,47 @@ jobs:
echo "Created: $APP_NAME-${VERSION}-${ARCH}.dmg"
done

- name: Compose release body
id: body
run: |
VERSION="${{ steps.version.outputs.version }}"
IS_BETA="${{ steps.version.outputs.is_beta }}"
BUNDLE_NAME="${{ steps.version.outputs.bundle_name }}"

if [ "$IS_BETA" = "true" ]; then
LABEL=" (beta)"
else
LABEL=""
fi

{
echo "body<<__BODY__"
echo "## Perch ${VERSION}${LABEL}"
echo ""
echo "### Install via Homebrew"
echo '```bash'
echo "brew tap tukuyomil032/tap"
echo "brew install --cask ${BUNDLE_NAME}"
echo '```'
echo ""
echo "### Direct Download"
echo "- **universal.dmg** (recommended) — Apple Silicon + Intel"
echo "- **arm64.dmg** — Apple Silicon only"
echo "- **x86_64.dmg** — Intel only"
echo ""
echo "> ⚠️ Not notarized by Apple. If Gatekeeper blocks it: right-click > Open > Open."
echo "__BODY__"
} >> "$GITHUB_OUTPUT"

- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ steps.version.outputs.tag }}
name: "Perch ${{ steps.version.outputs.version }}"
body: |
## Perch ${{ steps.version.outputs.version }} (beta)

### Install via Homebrew
```bash
brew tap tukuyomil032/tap
brew install --cask perch
```

### Direct Download
- **universal.dmg** (recommended) — Apple Silicon + Intel
- **arm64.dmg** — Apple Silicon only
- **x86_64.dmg** — Intel only

> ⚠️ Not notarized by Apple. If Gatekeeper blocks it: right-click > Open > Open.
body: ${{ steps.body.outputs.body }}
files: |
build/dmg/${{ env.APP_NAME }}-${{ steps.version.outputs.version }}-arm64.dmg
build/dmg/${{ env.APP_NAME }}-${{ steps.version.outputs.version }}-x86_64.dmg
build/dmg/${{ env.APP_NAME }}-${{ steps.version.outputs.version }}-universal.dmg
draft: false
prerelease: false
prerelease: ${{ steps.version.outputs.is_beta == 'true' }}
6 changes: 4 additions & 2 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ permissions:
jobs:
test:
name: Unit Tests
runs-on: macos-latest
runs-on: macos-26
timeout-minutes: 30

steps:
Expand Down Expand Up @@ -49,6 +49,8 @@ jobs:
-configuration Debug \
-destination 'platform=macOS' \
-skip-testing:perchUITests \
-skipPackagePluginValidation \
-skipMacroValidation \
CODE_SIGNING_ALLOWED=NO \
test \
2>&1 | xcbeautify --renderer github-actions
2>&1 | xcbeautify
8 changes: 8 additions & 0 deletions THIRD_PARTY_NOTICES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Third-Party Notices

## LyricsKit

- Source: https://github.com/MxIris-LyricsX-Project/LyricsKit
- License: Mozilla Public License 2.0 (MPL-2.0)
- Copyright: ddddxxx and LyricsX project contributors
- License text: https://www.mozilla.org/en-US/MPL/2.0/
29 changes: 23 additions & 6 deletions perch.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
BA0A72422FCEBA4F00F08C06 /* InMemoryLogging in Frameworks */ = {isa = PBXBuildFile; productRef = BA0A72412FCEBA4F00F08C06 /* InMemoryLogging */; };
BA0A72442FCEBA4F00F08C06 /* Logging in Frameworks */ = {isa = PBXBuildFile; productRef = BA0A72432FCEBA4F00F08C06 /* Logging */; };
BA0A72472FCEBA7600F08C06 /* KeyboardShortcuts in Frameworks */ = {isa = PBXBuildFile; productRef = BA0A72462FCEBA7600F08C06 /* KeyboardShortcuts */; };
BA0A724A2FCEBABC00F08C06 /* LyricsKit in Frameworks */ = {isa = PBXBuildFile; productRef = BA0A72492FCEBABC00F08C06 /* LyricsKit */; };
/* End PBXBuildFile section */

/* Begin PBXContainerItemProxy section */
Expand Down Expand Up @@ -62,6 +63,7 @@
BA0A723D2FCEBA1A00F08C06 /* Defaults in Frameworks */,
BA0A72422FCEBA4F00F08C06 /* InMemoryLogging in Frameworks */,
BA0A72472FCEBA7600F08C06 /* KeyboardShortcuts in Frameworks */,
BA0A724A2FCEBABC00F08C06 /* LyricsKit in Frameworks */,
BA0A72442FCEBA4F00F08C06 /* Logging in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
Expand Down Expand Up @@ -127,6 +129,7 @@
BA0A72412FCEBA4F00F08C06 /* InMemoryLogging */,
BA0A72432FCEBA4F00F08C06 /* Logging */,
BA0A72462FCEBA7600F08C06 /* KeyboardShortcuts */,
BA0A72492FCEBABC00F08C06 /* LyricsKit */,
);
productName = perch;
productReference = BA0A707E2FCD694B00F08C06 /* perch.app */;
Expand Down Expand Up @@ -215,6 +218,7 @@
BA0A723B2FCEBA1A00F08C06 /* XCRemoteSwiftPackageReference "Defaults" */,
BA0A72402FCEBA4F00F08C06 /* XCRemoteSwiftPackageReference "swift-log" */,
BA0A72452FCEBA7600F08C06 /* XCRemoteSwiftPackageReference "KeyboardShortcuts" */,
BA0A72482FCEBABC00F08C06 /* XCRemoteSwiftPackageReference "LyricsKit" */,
);
preferredProjectObjectVersion = 77;
productRefGroup = BA0A707F2FCD694B00F08C06 /* Products */;
Expand Down Expand Up @@ -429,7 +433,7 @@
"$(inherited)",
"@executable_path/../Frameworks",
);
MARKETING_VERSION = 0.2.0;
MARKETING_VERSION = 0.3.0;
PRODUCT_BUNDLE_IDENTIFIER = com.tukuyomi032.perch;
PRODUCT_NAME = "$(TARGET_NAME)";
STRING_CATALOG_GENERATE_SYMBOLS = YES;
Expand Down Expand Up @@ -460,7 +464,7 @@
"$(inherited)",
"@executable_path/../Frameworks",
);
MARKETING_VERSION = 0.2.0;
MARKETING_VERSION = 0.3.0;
PRODUCT_BUNDLE_IDENTIFIER = com.tukuyomi032.perch;
PRODUCT_NAME = "$(TARGET_NAME)";
STRING_CATALOG_GENERATE_SYMBOLS = YES;
Expand All @@ -481,7 +485,7 @@
DEVELOPMENT_TEAM = Q9CTDZWWR9;
GENERATE_INFOPLIST_FILE = YES;
MACOSX_DEPLOYMENT_TARGET = 14.0;
MARKETING_VERSION = 0.2.0;
MARKETING_VERSION = 0.3.0;
PRODUCT_BUNDLE_IDENTIFIER = com.tukuyomi032.perchTests;
PRODUCT_NAME = "$(TARGET_NAME)";
STRING_CATALOG_GENERATE_SYMBOLS = NO;
Expand All @@ -502,7 +506,7 @@
DEVELOPMENT_TEAM = Q9CTDZWWR9;
GENERATE_INFOPLIST_FILE = YES;
MACOSX_DEPLOYMENT_TARGET = 14.0;
MARKETING_VERSION = 0.2.0;
MARKETING_VERSION = 0.3.0;
PRODUCT_BUNDLE_IDENTIFIER = com.tukuyomi032.perchTests;
PRODUCT_NAME = "$(TARGET_NAME)";
STRING_CATALOG_GENERATE_SYMBOLS = NO;
Expand All @@ -521,7 +525,7 @@
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = Q9CTDZWWR9;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 0.2.0;
MARKETING_VERSION = 0.3.0;
PRODUCT_BUNDLE_IDENTIFIER = com.tukuyomi032.perchUITests;
PRODUCT_NAME = "$(TARGET_NAME)";
STRING_CATALOG_GENERATE_SYMBOLS = NO;
Expand All @@ -540,7 +544,7 @@
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = Q9CTDZWWR9;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 0.2.0;
MARKETING_VERSION = 0.3.0;
PRODUCT_BUNDLE_IDENTIFIER = com.tukuyomi032.perchUITests;
PRODUCT_NAME = "$(TARGET_NAME)";
STRING_CATALOG_GENERATE_SYMBOLS = NO;
Expand Down Expand Up @@ -618,6 +622,14 @@
minimumVersion = 2.4.0;
};
};
BA0A72482FCEBABC00F08C06 /* XCRemoteSwiftPackageReference "LyricsKit" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/MxIris-LyricsX-Project/LyricsKit";
requirement = {
kind = upToNextMajorVersion;
minimumVersion = 1.9.0;
};
};
/* End XCRemoteSwiftPackageReference section */

/* Begin XCSwiftPackageProductDependency section */
Expand All @@ -641,6 +653,11 @@
package = BA0A72452FCEBA7600F08C06 /* XCRemoteSwiftPackageReference "KeyboardShortcuts" */;
productName = KeyboardShortcuts;
};
BA0A72492FCEBABC00F08C06 /* LyricsKit */ = {
isa = XCSwiftPackageProductDependency;
package = BA0A72482FCEBABC00F08C06 /* XCRemoteSwiftPackageReference "LyricsKit" */;
productName = LyricsKit;
};
/* End XCSwiftPackageProductDependency section */
};
rootObject = BA0A70762FCD694B00F08C06 /* Project object */;
Expand Down
Loading
Loading