相手のメッセージをコピーするだけで、最適な返信候補を3つ提案するiOSキーボードアプリです。
MessageApp/
├── MessageApp/ # App本体 (SwiftUI)
│ ├── App.swift
│ ├── Views/
│ │ ├── OnboardingView.swift
│ │ ├── HomeView.swift
│ │ ├── PreferencesView.swift
│ │ ├── HistoryView.swift
│ │ ├── SetupGuideView.swift
│ │ └── PrivacyView.swift
│ ├── Info.plist
│ └── MessageApp.entitlements
├── MessageKeyboard/ # Keyboard Extension (UIKit)
│ ├── KeyboardViewController.swift
│ ├── KeyboardStore.swift
│ ├── Views/
│ │ ├── TopBarView.swift
│ │ ├── ParamsView.swift
│ │ └── SuggestionCardView.swift
│ ├── Info.plist
│ └── MessageKeyboard.entitlements
└── Shared/ # 共有モジュール
├── Models/
│ ├── Preferences.swift
│ ├── Suggestion.swift
│ └── HistoryItem.swift
├── Services/
│ ├── AppGroupStorage.swift
│ ├── SuggestionService.swift
│ └── FallbackTemplates.swift
└── Networking/
└── APIClient.swift
- Xcodeを開き、File > New > Project を選択
- App テンプレートを選択
- 以下の設定で作成:
- Product Name:
MessageApp - Bundle Identifier:
com.yourcompany.messageapp - Interface: SwiftUI
- Language: Swift
- Product Name:
- File > New > Target を選択
- Custom Keyboard Extension を選択
- 以下の設定で追加:
- Product Name:
MessageKeyboard - Bundle Identifier:
com.yourcompany.messageapp.keyboard
- Product Name:
- 両方のターゲット(App, Keyboard Extension)で Signing & Capabilities を開く
- + Capability から App Groups を追加
- App Group ID を設定:
group.com.yourcompany.messageapp
このリポジトリのソースファイルをXcodeプロジェクトにドラッグ&ドロップしてください。
MessageApp/→ App本体ターゲットに追加MessageKeyboard/→ Keyboard Extensionターゲットに追加Shared/→ 両方のターゲットに追加(Target Membershipで両方にチェック)
Shared/Networking/APIClient.swift の baseURL を実際のAPIエンドポイントに変更:
static let baseURL = "https://your-api.example.com"Shared/Services/AppGroupStorage.swift の appGroupIdentifier を変更:
static let appGroupIdentifier = "group.com.yourcompany.messageapp"- シミュレータまたは実機でビルド&実行
- 設定 > 一般 > キーボード > キーボード > 新しいキーボードを追加 から「返信アシスト」を追加
- 「フルアクセスを許可」をオン
- メモアプリ等でキーボードを切り替えて動作確認
- クリップボード取り込み: 相手のメッセージをコピーして「取り込み」をタップ
- 返信生成: AIが最適な返信候補を3つ提案
- パラメータ調整: トーン(丁寧/ふつう/くだけ)、長さ、絵文字の有無
- 目的選択: 断り/謝罪/日程/催促/お礼/質問/了解
- 挿入/コピー: 候補をタップして入力欄に挿入またはコピー
- オフライン対応: 通信できない場合はテンプレートで代替
MIT License