From ios-team
Xcodeプロジェクトのアーキテクチャ設計・ビルド設定管理スキル。モジュール分割、ターゲット追加、依存関係整理、ビルド設定変更を支援。使用シーン:(1)「ビルド設定XXをYYに変更して」などのビルド設定変更リクエスト (2)「この機能を新しいモジュールに切り出して」などのモジュール分割リクエスト (3) 大きな機能追加時にモジュール構成やテスト可能性を検討する場合 (4)「Swift Packageを追加して」などの依存関係管理
npx claudepluginhub hiragram/claude-code-plugins --plugin ios-teamThis skill uses the workspace's default tool permissions.
Xcodeプロジェクトのアーキテクチャ設計とビルド設定を管理する。
Guides Xcode build workflows for iOS projects using execute_xcode_command tool. Covers builds, tests, cleans, schemes, xcodebuild output interpretation, and error troubleshooting.
Provides Xcode setup, SwiftData wiring, testing, debugging, profiling, and distribution guidance for iOS/Swift modular MVVM-C clinic projects. Use for app infrastructure and tooling.
Safely modifies Xcode projects to add Swift Packages and link files for iOS apps needing dependencies like Firebase or Alamofire.
Share bugs, ideas, or general feedback.
Xcodeプロジェクトのアーキテクチャ設計とビルド設定を管理する。
pbxproj MCPサーバーが利用可能。プロジェクト操作は直接ツールを呼び出して実行する。
情報取得:
get_project_info - プロジェクト概要list_targets - ターゲット一覧get_target_info - ターゲット詳細list_files / list_groups - ファイル・グループ構造list_configurations - ビルド構成一覧get_build_settings - ビルド設定取得list_build_phases - ビルドフェーズ一覧list_packages - Swift Package依存関係list_schemes / get_scheme_info - スキーム情報変更操作:
update_build_setting - ビルド設定変更add_file / remove_file - ファイル追加・削除add_group - グループ追加add_target / add_target_dependency - ターゲット追加・依存関係設定add_swift_package / add_local_package - パッケージ追加add_run_script / update_run_script - スクリプトフェーズ管理リクエスト受信
│
▼
┌─────────────────┐
│ リクエスト種別判定 │
└───────┬─────────┘
┌────┼────┬────────┐
▼ ▼ ▼ ▼
ビルド設定 モジュール 依存関係 アーキ
変更 分割 追加 レビュー
│ │ │ │
▼ ▼ ▼ ▼
現状確認 現状分析 互換性確認 構造分析
│ │ │ │
▼ ▼ ▼ ▼
変更実行 設計提案 追加実行 改善提案
│
▼
承認後実行
get_build_settings で現在値を確認list_configurations で対象構成を確認(Debug/Release等)update_build_setting で変更実行| 設定名 | 説明 | 典型的な値 |
|---|---|---|
SWIFT_VERSION | Swiftバージョン | 5.0, 6.0 |
IPHONEOS_DEPLOYMENT_TARGET | 最小iOS | 15.0, 17.0 |
PRODUCT_BUNDLE_IDENTIFIER | Bundle ID | com.example.app |
CODE_SIGN_STYLE | 署名方式 | Automatic, Manual |
SWIFT_STRICT_CONCURRENCY | 並行性チェック | minimal, targeted, complete |
ENABLE_TESTABILITY | テスト可能性 | YES (Debug), NO (Release) |
DEBUG_INFORMATION_FORMAT | デバッグ情報 | dwarf, dwarf-with-dsym |
SWIFT_OPTIMIZATION_LEVEL | 最適化レベル | -Onone, -O, -Osize |
詳細は references/build-settings.md を参照。
モジュール分割を検討すべき状況:
| 種別 | 用途 | 作成方法 |
|---|---|---|
| Swift Package (ローカル) | 推奨。シンプルな依存管理 | ファイルシステムで作成後 add_local_package |
| Framework | 動的リンク、リソース含む | add_target (product_type: framework) |
| Static Library | 静的リンク | add_target (product_type: staticLibrary) |
MyApp/
├── MyApp/ # メインアプリターゲット
│ ├── App/ # AppDelegate, SceneDelegate
│ ├── Features/ # 画面・機能別
│ └── Resources/ # Assets, Localizable
├── Packages/ # ローカルSwift Packages
│ ├── Core/ # 共通ユーティリティ
│ ├── Domain/ # ビジネスロジック
│ ├── Data/ # リポジトリ、API
│ └── UI/ # 共通UIコンポーネント
└── MyAppTests/ # テストターゲット
詳細は references/module-patterns.md を参照。
list_targets, list_files でプロジェクト構造把握add_target_dependency または add_local_package// ❌ テストしにくい
class OrderViewModel {
func placeOrder() {
let api = APIClient.shared // ハードコードされた依存
api.post("/orders", ...)
}
}
// ✅ テストしやすい
protocol OrderServiceProtocol {
func placeOrder(_ order: Order) async throws -> OrderResult
}
class OrderViewModel {
private let orderService: OrderServiceProtocol
init(orderService: OrderServiceProtocol) {
self.orderService = orderService
}
func placeOrder() async throws {
try await orderService.placeOrder(currentOrder)
}
}
// テスト時
class MockOrderService: OrderServiceProtocol {
var placeOrderResult: Result<OrderResult, Error> = .success(...)
func placeOrder(_ order: Order) async throws -> OrderResult {
try placeOrderResult.get()
}
}
add_swift_package:
repository_url: "https://github.com/xxx/yyy"
product_name: "ProductName"
target_name: "MyApp"
version: "1.0.0"
version_rule: "upToNextMajor" # or upToNextMinor, exact, branch, revision
Packages/MyModule/ にSwift Package構造を作成add_local_package でプロジェクトに追加| ファイル | 内容 |
|---|---|
references/build-settings.md | ビルド設定の詳細リファレンス |
references/module-patterns.md | モジュール分割パターンの詳細 |