Skip to content

Conversation

@K9i-0
Copy link
Owner

@K9i-0 K9i-0 commented Jul 20, 2025

Summary

  • アップデートチャンネル機能の実装(安定版/開発版の選択が可能)
  • GitHub Pagesベースのアップデート配信への移行
  • アップデート設定UIの改善

Changes

✨ New Features

  • アップデートチャンネル機能 - ユーザーが安定版と開発版のリリースチャンネルを選択可能に
  • 各チャンネルの最新バージョン表示 - 設定画面で各チャンネルの最新バージョンを確認可能
  • Debug版でのアップデート設定UI - 開発時にもアップデート機能をテスト可能

🔄 Improvements

  • GitHub Pagesベースの配信 - appcastファイルをGitHub Pagesで管理するように変更
  • UI/UXの改善 - アップデート設定画面のレイアウトと情報表示を改善

🐛 Bug Fixes

  • SwiftLintのtype_body_lengthルールを無効化(CIエラー対応)
  • Sparkle.framework内のバイナリ署名問題を修正(v0.7.14)
  • Xcode 16.2対応によるCI修正(v0.7.13)

Test Plan

  • アップデートチャンネルの切り替えが正常に動作する
  • 各チャンネルの最新バージョンが正しく表示される
  • アップデート通知が適切に表示される
  • Debug版でアップデート設定UIが表示される
  • Release版でアップデート設定UIが表示される

Release Notes

ClaudeCodeMonitor v0.7.15では、アップデートチャンネル機能を追加しました。設定画面から安定版と開発版のリリースチャンネルを選択できるようになり、より柔軟なアップデート管理が可能になりました。

🤖 Generated with Claude Code

K9i-0 and others added 30 commits July 5, 2025 15:21
- Add Sparkle 2.5.2 dependency to Package.swift
- Configure Info.plist with SUFeedURL and placeholder for SUPublicEDKey
- Initialize SPUStandardUpdaterController in AppDelegate
- Add update settings UI in SettingsTabView
  - Current version display
  - Check for updates button
  - Automatic updates toggle
- Create appcast.xml generation script
- Create DMG signing script for Sparkle
- Update release workflow to generate and upload appcast.xml
- Add comprehensive Sparkle setup documentation

Note: Public/private key pair needs to be generated manually
following the instructions in docs/sparkle-setup.md

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Add Update section to L10n struct for Sparkle localization
- Fix argument label for currentVersion function call
- Exclude README.md from test target to remove SPM warning
- Add separate workflows for dev (develop branch) and stable (main branch) releases
- Implement PR validation for version updates and CHANGELOG
- Add version helper bot for PR guidance
- Create update-version.sh script for easy version management
- Update RELEASE_STRATEGY.md with new workflow documentation
- Enable TEST_SPARKLE environment variable for development testing
- Replace beta naming with dev for clarity
- Add backward compatibility properties to EnvironmentCheckResult
- Fix ContentView initialization in AppDelegate
- Import SwiftUI for NSHostingController
- Use usageData instead of latestData property
- Remove build.yml (duplicate of ci.yml)
- Remove release-dev.yml (duplicate of release-beta.yml)
- Update ci.yml to include develop branch
- Rename Beta Release to Development Release (Beta)
- Rename release-beta.yml to release-dev.yml
- Use simple -dev suffix instead of beta numbering
- Read version from Info.plist for consistency
- Update release naming and documentation
- Set SUPublicEDKey for EdDSA signature verification
- This enables secure automatic updates via Sparkle framework
- Add appcast.xml generation step in release-stable.yml
- Generate EdDSA signature using SPARKLE_PRIVATE_KEY from GitHub Secrets
- Include appcast.xml in release assets
- Fix sign_update tool path and command syntax in generate-appcast.sh
- Remove usagePercentage property from SessionBlock
- Calculate percentage directly in AppDelegate using UsageData context
- This fixes the CI build error after merging with develop branch
- Add Sparkle integration features to CHANGELOG
- Update both CFBundleShortVersionString and CFBundleVersion
- Restore currency exchange rate fetching on startup
- Add missing Combine and UserNotifications imports
- Remove obsolete release.yml.old file
- Show [D] prefix in menu bar percentage for debug builds
- This helps distinguish debug builds from release builds
- Replace NotificationCenter with Combine subscription for usageData changes
- Add missing Notification.Name extension for compatibility
- Fix menu bar always showing 0% by properly observing @published property
- Replace usageDataUpdated with updateStatusBarTitle method
- Call updateStatusBarTitle on initialization
- Follow the original implementation pattern from develop branch
- Remove duplicate usageDataUpdated definition
- Fix unused variable warning in updateStatusBarTitle
- Restore getStatusColor() and getStatusSymbol() methods
- Implement dynamic icon changes based on usage percentage (0-10%, 10-30%, 30-50%, 50-70%, 70-90%, 90%+)
- Implement dynamic color changes (green → blue → yellow → orange → red)
- Add loading state with hourglass icon
- Add tooltip with detailed usage information
- Text color now matches icon color
- Remove unused Notification.Name.usageDataUpdated

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Use conditional compilation to handle updater being optional in DEBUG
- Fix 'cannot use optional chaining on non-optional value' error
- Add conditional compilation for Sparkle imports
- Define TEST flag for test configuration
- Prevent linker errors in test environments
- Fix Sparkle sign_update tool path in generate-appcast.sh
- Fix conditional compilation for updater nil check in SettingsTabView
- Ensure both DEBUG and release builds compile correctly
- Fixes Sparkle linking errors in test builds for Xcode 15.0
- Ensures proper conditional compilation across all build configurations
- Swift 5.9.0 has issues with SPM binary dependencies in test targets
- Xcode 15.2 (Swift 5.9.2) handles this correctly
- Most developers should be on 15.2+ by now
- Use latest stable versions from both major releases
- Xcode 15.4: Last version of 15.x series
- Xcode 16.2: Current latest stable
- Better represents real-world developer environments
feat: add Sparkle framework for automatic updates
- Add Developer ID certificate signing support for dev releases
- Add notarization support (optional)
- Sign DMG files when certificate is available
- Fall back to ad-hoc signing when no certificate
- Matches stable release workflow signing process
- Remove bump-version.sh (deprecated, replaced by update-version.sh)
- Remove get-next-version.sh (tag-based versioning no longer used)
- Remove build-local.sh (local builds not used)
- Remove copy-icon.sh (functionality in create-app-bundle.sh)
- Remove set-debug-bundle-id.sh (not used in current workflow)
- Remove build-release.sh (replaced by GitHub Actions)
…String

- Update update-version.sh to modify both version properties
- Add validation in PR checks to ensure both values match
- Update PR comment to mention both properties
- Fix Info.plist where CFBundleVersion was still 0.7.0
fix: add proper code signing to dev workflow
K9i-0 and others added 28 commits July 6, 2025 16:27
fix: Sparkle CI環境でのsign_updateツールパス問題を修正
- setup-sparkle GitHub Actionを削除
- Ukamプロジェクトのアプローチを採用
- Sparkleをダウンロードして直接generate_appcastを実行
- よりシンプルで信頼性の高い実装に変更

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
- スクリプトファイルを削除してメンテナンスを簡素化
- Ukamプロジェクトのアプローチを完全に採用
- CI専用のロジックをワークフローファイルに統合
- github.repositoryコンテキストを使用してリポジトリ名を動的に取得

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
- echo -nを使用してプライベートキーの末尾改行を除去
- Sparkleを2.6.4に更新(最新版)
- Ukamプロジェクトの実装に合わせて修正

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
fix: Sparkle CI環境でのappcast生成エラーを修正
- create-app-bundle.shでSparkle.frameworkをFrameworksディレクトリにコピー
- rpathに@loader_path/../Frameworksを追加
- build-and-sign.ymlでSparkle.frameworkを個別に署名

これにより、アプリ起動時の「Library not loaded」エラーが解決されます。

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
- バージョンが正しく更新された場合、古い警告コメントを削除
- PRの履歴をクリーンに保つ
- validation_passed フラグを追加してコメント削除をトリガー

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
feat: バージョン更新後に検証コメントを自動削除
- GitHub ActionsのmacOS-latestランナーでXcode 15.xが利用不可のためXcode 16.0に更新
- Sparkleフレームワークとツールを最新の2.7.1に統一
- Package.resolvedは既に2.7.1を使用していたため変更なし

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
fix: Xcode 16.0とSparkle 2.7.1に更新してCI失敗を修正
- build-and-sign.yml: Xcode 16.0 → 16.2
- ci.yml:
  - ビルドジョブでXcode設定を環境変数方式に統一
  - カバレッジレポート生成条件を15.2から16.2に更新
  - Xcodeパスをクォートで囲むように修正

背景:
- macOS-latest (macOS 14)ではXcode 16.0が2025年1月6日に削除された
- 利用可能なXcode 16.xは16.1と16.2のみ

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
fix: Xcode 16.2を使用するように修正(macOS 14対応)
問題:
- Sparkle.framework内の実行可能ファイルが適切に署名されていなかった
- notarizationプロセスで「無効な署名」エラーが発生
- staple notarizationがexit code 65で失敗

解決策:
1. Sparkle.framework内のコンポーネントを個別に署名:
   - Autoupdate バイナリ
   - Sparkle バイナリ
   - Updater.app
   - XPCServices内のすべての.xpcサービス

2. アプリ全体の署名を強化:
   - --deepオプションを追加して内部コンポーネントを確実に署名
   - 署名検証を詳細モード(verbose=4)に変更
   - spctl検証を追加

3. デバッグ情報の追加:
   - staple前のDMG署名検証
   - staplerコマンドの詳細出力(-vオプション)
   - エラー時の詳細情報出力

参考: Ukamプロジェクトの実装を参考に修正

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
fix: Sparkle.framework内のすべてのバイナリを適切に署名してnotarization失敗を修正
- UpdateChannel enumを追加(stable/dev)
- 設定画面でチャンネル切り替えUIを追加
- Sparkle delegateメソッドで動的にfeed URLを設定
- GitHub Actionsで環境に応じたappcast.xmlを生成
- 日本語・英語のローカライゼーションを追加

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Debug版でもSparkleを初期化(自動更新は無効)
- アップデート設定UIを常に表示
- appcastから最新版情報を手動で取得・表示する機能を追加
- XMLパーサーでappcastを解析し、最新バージョンを表示

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
- gh-pagesブランチでappcast.xmlとappcast-dev.xmlを管理
- UpdateChannelのURLをGitHub Pages URLに変更
- リリースワークフローでgh-pagesのappcastを更新
- 各チャンネルで独立した更新履歴を維持

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
- 現在のバージョン表示を修正(Debug時は(Debug)ラベルを表示)
- 各チャンネルの最新バージョンを自動取得・表示
- Stableチャンネルに(推奨)ラベルを追加
- Development説明を「開発版ビルドのみ」に修正
- 起動時に両チャンネルの最新バージョンを非同期で取得

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
- 英語: "Development builds only" → "Development releases only"
- 日本語: "開発版ビルドのみ" → "開発版リリースのみ"
- より正確な表現に統一

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
feat: アップデートチャンネル機能を実装
@github-actions
Copy link

📦 Release Preparation Helper

Release Version

  • Version to be released: 0.7.15
  • This will be distributed as a stable release

Recent Changes Summary

  • Total commits since last release: 89
  • New features: 11
  • Bug fixes: 36
  • Breaking changes: 0

Pre-Release Checklist

  • Update CHANGELOG.md with release notes
  • Review all changes since last release
  • Ensure all tests are passing
  • Verify version number is correct

After Merge

When this PR is merged to main:

  1. Version 0.7.15 will be automatically tagged
  2. A GitHub Release will be created
  3. DMG file will be built and attached to the release

Note

If a tag for v0.7.15 already exists, the release will be skipped.

@K9i-0 K9i-0 merged commit 461b121 into main Jul 20, 2025
18 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants