1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

# 【Claude Code × XCode Build MCP】Claude CodeでmacOSタイマーアプリを3時間で開発 → App Store申請までの記録

Posted at

はじめに

Claude Codeと**MCP(Model Context Protocol)**を使って、ゼロからmacOSアプリを開発し、App Store申請までの実体験を記載。

開発したアプリ

GlassTimer(旧:HiTimer) - macOS用カウントダウンタイマーアプリ

項目 内容
プラットフォーム macOS 13.0以降
開発言語 SwiftUI
開発期間 約3時間
ステータス App Store審査中(2025/11/04時点)

圧倒的にシンプルなタイマーアプリで、
GlassTimer_2.png

時間が経過したら作業画面を覆ってタイムアップを通知してくれるもの。
GlassTimer_3.png


必要なもの

  • App Developerに登録する勇気(年99ドル)
  • Claude Code

これだけです。Claude Codeがあれば、開発経験がなくてもApp Store申請まで進められます。


Claude CodeとMCPとは?

Claude Code

Anthropic社のAIコーディングアシスタント(VS Code拡張機能を使用)
セットアップ方法:https://note.com/npaka/n/n3d754c78f439

MCP(Model Context Protocol)

LLMがツールと連携するためのオープンスタンダード

使用したMCPサーバー:

  • XcodeBuildMCP: Xcodeプロジェクト操作・ビルド・テスト
  • Obsidian MCP: 開発ログの記録
  • VOICEVOX MCP: 音声通知

今回のMVP:XcodeBuildMCP:
「プロジェクトを作って」と依頼するだけで、Xcodeプロジェクトの準備、ビルド設定し、特に、自分でビルドしてテストするのが凄まじいです。 - このMCPを設定しておくだけで、ビルドエラーが皆無になります。(エラーがあったら自分で治すので)。

URL: XcodeBuildMCP


開発フロー

ステージ 期間 内容 Claude Codeの活用
Stage 1: プロトタイプ 1時間 基本UI実装、タイマーロジック、円形プログレスバー 「円形プログレスバーを作って」→ 即座にSwiftUIコード生成
Stage 2: 機能拡張 1時間 マウススクロール設定、99:59:59対応、色変化、通知 段階的な要求追加に柔軟対応
Stage 3: Xcode移行 1時間 SPM→Xcodeプロジェクト移行 自動移行・設定完了
Stage 4: App Store準備 2時間 アイコン生成、ビルド設定、証明書設定、Privacy Policy作成 アイコン生成スクリプト自動生成
Stage 5: App Store審査、リジェクト対応 ←イマココ 審査対応、リジェクト理由の修正 リジェクト理由の分析と対応文の作成支援

具体例

Stage 1: プロトタイプ

依頼: 「円形のプログレスバーで残り時間を表示するタイマーを作って」

結果: Claude Codeが即座にSwiftUIコードを生成

Circle()
    .trim(from: 0, to: progress)
    .stroke(LinearGradient(...), style: StrokeStyle(lineWidth: 8))
    .rotationEffect(.degrees(-90))
    .animation(.linear, value: progress)

追加依頼: 「もう少し太くして」「色を変えて」→ 即座に反映

Stage 2: 機能拡張

依頼1: 「マウスホイールで時間を増減できるようにして」

結果: .onScrollWheel イベントハンドラを即座に生成

依頼2: 「スクロール量に応じて増減量を変えたい」

結果: ロジックを改善(速いスクロールは5分単位、普通は1分単位)

let amount = abs(delta) > 5 ? 300 : 60

Stage 3: Xcode移行

依頼: 「App Store申請できるようにXcodeプロジェクトに移行して」

結果:

  • Workspace + SPM Package構成を自動セットアップ
  • XCConfig、Hardened Runtime、App Sandbox設定を自動適用

Stage 4: App Store準備

依頼: 「App Store申請に必要なアイコンサイズを全部作って」

結果: アイコン生成スクリプトを自動生成(全10サイズ対応)

依頼: 「App Store申請に必要な設定を追加して」

結果: XCConfigにHardened Runtime、dSYM生成、カテゴリ設定などを自動追加

Stage 5: App Store審査対応

現在、App Store審査中です。リジェクトされた場合は、Claude Codeにリジェクト理由を見せて対応方法を相談し、修正・再提出します。


遭遇したトラブルと解決

トラブル 問題 Claude Codeの対応 結果
警告地獄 Xcode推奨設定の警告20項目 「警告を全部消して」→ Shared.xcconfigに自動追加 ✅ 警告完全解消
ビルドエラー アプリ名変更でHiTimer.app not found PRODUCT_NAMEPRODUCT_DISPLAY_NAMEの違いを即座に診断・修正 ✅ 即座に解決

トラブル1の詳細

問題: Xcode推奨設定の警告が大量発生

対応: Shared.xcconfigに以下を自動追加

ALWAYS_SEARCH_USER_PATHS = NO
USE_HEADERMAP = YES
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES
// ... 計15項目

トラブル2の詳細

問題: アプリ名をHiTimerGlassTimerに変更したらビルド失敗

修正:

PRODUCT_NAME = HiTimer        # ビルド時のファイル名
PRODUCT_DISPLAY_NAME = GlassTimer  # ユーザーに表示される名前

Claude Codeの実践的なコツ

1. 明確に伝える

悪い例 良い例
「タイマーを作って」 「macOS向けのカウントダウンタイマー。圧倒的に美しく、時間の儚さを表現。SwiftUIで実装、線形プログレスバー、常に最前面表示」
→ 誰にも刺さらないアプリができる → macOS特有の設定含む美しいタイマーができる

2. 段階的に要求を追加

  1. 「基本的なカウントダウンタイマーを実装」
  2. 「マウススクロールで時間調整」
  3. 「残り時間が少なくなったら色を赤く」

メリット: 各ステップで動作確認、文脈理解しやすい、問題特定が容易

3. UIが意図しない状況になったらキャプチャして指示

Claude Codeは画像も認識するので、「なんか違う」と思ったらキャプチャして画像で指示する

4. MCPサーバーを積極活用

  • XcodeBuildMCP: 「プロジェクトを作って」→ Xcodeプロジェクト自動生成、ビルド・テスト実行
  • VOICEVOX MCP: 作業の都度都度で音声で報告してくれる & 癒される
  • Obsidian MCP: 「今日の作業をまとめて」→ 自動で開発ログ生成

メリット: 作業の区切りが明確、自動ドキュメント化、開発の流れが記録される


App Store申請の補足

Privacy Policyページの作成

  • App Store申請にはPrivacy Policyページが必須です。STUDIOを使ってPrivacy Policyページを作成しました。

  • STUDIOを使えば、テンプレートから必要な情報を入力するだけで、App Store審査に通るPrivacy Policyページが簡単に作成できます。

  • https://studio.design/ja

分からないところはChatGPT Atlasを活用


1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?