一键导入
xcode-config
Xcode Build Configuration (.xcconfig) を管理します。Use when ユーザーが「xcconfig設定して」「ビルド設定変更して」「環境変数管理して」と言ったとき。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Xcode Build Configuration (.xcconfig) を管理します。Use when ユーザーが「xcconfig設定して」「ビルド設定変更して」「環境変数管理して」と言ったとき。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | xcode-config |
| description | Xcode Build Configuration (.xcconfig) を管理します。Use when ユーザーが「xcconfig設定して」「ビルド設定変更して」「環境変数管理して」と言ったとき。 |
Xcode Build Configuration (.xcconfig ファイル) の作成・管理するスキルです。Debug/Release の設定分離、環境変数管理、ビルド設定の一元管理をサポートします。
✅ ビルド設定をファイルで管理(Git管理可能)
✅ Debug/Release で異なる設定を簡単に切り替え
✅ APIキー、URLなどの環境変数を一元管理
✅ Xcode GUI での設定ミスを防ぐ
✅ チーム全体で設定を統一
まず、プロジェクトの現在の設定を確認します:
# プロジェクトファイルを確認
find . -name "*.xcodeproj" -maxdepth 2
# 既存の xcconfig ファイルを確認
find . -name "*.xcconfig" -type f
Xcode で確認:
# Config ディレクトリを作成
mkdir -p Config
# xcconfig ファイルを作成
touch Config/Debug.xcconfig
touch Config/Release.xcconfig
touch Config/Shared.xcconfig # オプション: 共通設定
全ビルド構成で共通の設定:
// Config/Shared.xcconfig
// MARK: - Swift Settings
SWIFT_VERSION = 5.9
SWIFT_OPTIMIZATION_LEVEL = -Onone
// MARK: - iOS Deployment
IPHONEOS_DEPLOYMENT_TARGET = 17.0
// MARK: - Code Signing
CODE_SIGN_STYLE = Automatic
DEVELOPMENT_TEAM = YOUR_TEAM_ID
// MARK: - Common Bundle Settings
PRODUCT_BUNDLE_IDENTIFIER = com.yourcompany.$(PRODUCT_NAME:rfc1034identifier)
開発用の設定:
// Config/Debug.xcconfig
#include "Shared.xcconfig"
// MARK: - Configuration
CONFIGURATION = Debug
// MARK: - App Settings
PRODUCT_NAME = $(TARGET_NAME)
PRODUCT_BUNDLE_IDENTIFIER = com.yourcompany.$(PRODUCT_NAME:rfc1034identifier).debug
// MARK: - Versioning
MARKETING_VERSION = 1.0.0
CURRENT_PROJECT_VERSION = 1
// MARK: - API Keys (Development)
API_BASE_URL = https:/$()/dev.api.example.com
API_KEY = dev_api_key_12345
// MARK: - AdMob (Test IDs)
ADMOB_APP_ID = ca-app-pub-3940256099942544~1458002511
ADMOB_BANNER_ID = ca-app-pub-3940256099942544/2934735716
// MARK: - Build Settings
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG
GCC_PREPROCESSOR_DEFINITIONS = DEBUG=1
// MARK: - Optimization
SWIFT_OPTIMIZATION_LEVEL = -Onone
GCC_OPTIMIZATION_LEVEL = 0
// MARK: - Debug Flags
ENABLE_TESTABILITY = YES
DEBUG_INFORMATION_FORMAT = dwarf-with-dsym
本番用の設定:
// Config/Release.xcconfig
#include "Shared.xcconfig"
// MARK: - Configuration
CONFIGURATION = Release
// MARK: - App Settings
PRODUCT_NAME = $(TARGET_NAME)
PRODUCT_BUNDLE_IDENTIFIER = com.yourcompany.$(PRODUCT_NAME:rfc1034identifier)
// MARK: - Versioning
MARKETING_VERSION = 1.0.0
CURRENT_PROJECT_VERSION = 1
// MARK: - API Keys (Production)
API_BASE_URL = https:/$()/api.example.com
API_KEY = prod_api_key_67890
// MARK: - AdMob (Production IDs)
ADMOB_APP_ID = ca-app-pub-XXXXXXXXXXXX~YYYYYYYYYY
ADMOB_BANNER_ID = ca-app-pub-XXXXXXXXXXXX/ZZZZZZZZZZ
// MARK: - Build Settings
SWIFT_ACTIVE_COMPILATION_CONDITIONS = RELEASE
// MARK: - Optimization
SWIFT_OPTIMIZATION_LEVEL = -O
SWIFT_COMPILATION_MODE = wholemodule
GCC_OPTIMIZATION_LEVEL = s
// MARK: - Release Flags
ENABLE_TESTABILITY = NO
DEBUG_INFORMATION_FORMAT = dwarf-with-dsym
VALIDATE_PRODUCT = YES
xcconfig を正しく機能させるため、ターゲットの設定をクリア:
Info.plist で xcconfig の変数を参照:
<!-- Info.plist -->
<key>CFBundleDisplayName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleShortVersionString</key>
<string>$(MARKETING_VERSION)</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<!-- カスタム変数 -->
<key>APIBaseURL</key>
<string>$(API_BASE_URL)</string>
<key>GADApplicationIdentifier</key>
<string>$(ADMOB_APP_ID)</string>
// Config.swift
enum Config {
static let apiBaseURL: String = {
guard let urlString = Bundle.main.object(forInfoDictionaryKey: "APIBaseURL") as? String else {
fatalError("APIBaseURL not found in Info.plist")
}
return urlString
}()
static let apiKey: String = {
guard let key = Bundle.main.object(forInfoDictionaryKey: "APIKey") as? String else {
fatalError("APIKey not found in Info.plist")
}
return key
}()
static let isDebug: Bool = {
#if DEBUG
return true
#else
return false
#endif
}()
}
// 使用例
let url = "\(Config.apiBaseURL)/users"
#if DEBUG
let apiURL = "https://dev.api.example.com"
#else
let apiURL = "https://api.example.com"
#endif
# Debug ビルド
xcodebuild -project YourApp.xcodeproj \
-scheme YourApp \
-configuration Debug \
-showBuildSettings | grep -E "PRODUCT_BUNDLE_IDENTIFIER|MARKETING_VERSION|API_BASE_URL"
# Release ビルド
xcodebuild -project YourApp.xcodeproj \
-scheme YourApp \
-configuration Release \
-showBuildSettings | grep -E "PRODUCT_BUNDLE_IDENTIFIER|MARKETING_VERSION|API_BASE_URL"
期待される出力:
Debug:
PRODUCT_BUNDLE_IDENTIFIER = com.yourcompany.YourApp.debug
MARKETING_VERSION = 1.0.0
API_BASE_URL = https://dev.api.example.com
Release:
PRODUCT_BUNDLE_IDENTIFIER = com.yourcompany.YourApp
MARKETING_VERSION = 1.0.0
API_BASE_URL = https://api.example.com
ユーザーが言うこと: "AdMobのIDをDebugとReleaseで分けたい"
実行されること:
$(ADMOB_APP_ID) を参照結果: Debug ビルドでは Test ID、Release ビルドでは Production ID が使用される
ユーザーが言うこと: "開発環境と本番環境でAPIのURLを切り替えたい"
実行されること:
API_BASE_URL を定義APIBaseURL キーを追加Bundle.main.object(forInfoDictionaryKey:) で取得結果: ビルド構成によって自動的に適切な API URL が使用される
ユーザーが言うこと: "バージョン番号を xcconfig で管理したい"
実行されること:
MARKETING_VERSION と CURRENT_PROJECT_VERSION を定義$(MARKETING_VERSION) を参照結果: バージョン番号を xcconfig ファイルで一元管理できる
ユーザーが言うこと: "Dev、Staging、Productionの3つの環境が欲しい"
実行されること:
Config/Dev.xcconfig, Config/Staging.xcconfig, Config/Production.xcconfig を作成結果: 3つの環境を簡単に切り替えられる
原因: ターゲットの Build Settings で値が上書きされている
解決方法:
$(VARIABLE_NAME) が展開されない原因: Info.plist のフォーマットが正しくない、または変数名のタイポ
解決方法:
# ビルド設定を確認
xcodebuild -showBuildSettings | grep VARIABLE_NAME
# Info.plist の値を確認
/usr/libexec/PlistBuddy -c "Print :KeyName" Info.plist
原因: #include で読み込んだファイルと設定が重複
解決方法:
Shared.xcconfig(共通設定)
├── Debug.xcconfig(#include "Shared.xcconfig")
└── Release.xcconfig(#include "Shared.xcconfig")
Unable to load contents of file list原因: xcconfig ファイルがターゲットに追加されている
解決方法:
原因: Info.plist のプロパティが User-Defined として認識されていない
解決方法:
INFOPLIST_OTHER_PREPROCESSOR_FLAGS = -traditional
references/config-variables.md を参照⚠️ APIキーや秘密情報を xcconfig に直接書かない
.gitignore に追加するか、環境変数から読み込む// Secrets.xcconfig (Gitignore対象)
API_KEY = $(API_KEY_ENV)
✅ 本番用の秘密情報の管理方法:
.xcconfig.template をリポジトリに保存# .gitignore
Config/Secrets.xcconfig
# リポジトリには Secrets.xcconfig.template を保存
// MARK: - API Settings
// MARK: - Build Settings
API_BASE_URL ✅apiBaseUrl ❌SUPPORTED_LANGUAGES = en ja zh
// 他の変数を参照
BASE_BUNDLE_ID = com.yourcompany
PRODUCT_BUNDLE_IDENTIFIER = $(BASE_BUNDLE_ID).$(PRODUCT_NAME:rfc1034identifier)
// 環境変数を参照
API_KEY = $(API_KEY_FROM_ENV)
// システム変数を参照
OUTPUT_PATH = $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
# GitHub Actions example
- name: Update xcconfig
run: |
echo "API_KEY = ${{ secrets.API_KEY }}" >> Config/Secrets.xcconfig
echo "API_BASE_URL = ${{ secrets.API_URL }}" >> Config/Secrets.xcconfig
- name: Build
run: |
xcodebuild -configuration Release \
-xcconfig Config/Release.xcconfig \
build
# すべてのビルド設定を表示
xcodebuild -showBuildSettings
# 特定の変数を確認
xcodebuild -showBuildSettings | grep PRODUCT_BUNDLE_IDENTIFIER
# xcconfig の構文チェック(エラーがあればビルドで確認)
xcodebuild -project YourApp.xcodeproj -showBuildSettings > /dev/null
iOSシミュレーターをコンピューターユースで視覚的にテストします。スクリーンショットを撮影してUI要素を確認し、座標ベースでタップ・スワイプ操作を行いテスト結果を報告します。Use when ユーザーが「シミュレーターでテストして」「iOSシミュレーターを視覚的にテストして」「computer useでシミュレーターを操作して」「シミュレーターの画面確認して」と言ったとき。
Xcode MCP(mcpbridge)を Claude Code に追加します。Use when ユーザーが「Xcode MCP入れて」「シミュレーター操作できるようにして」「mcpbridge設定して」と言ったとき。
xcodebuildとfastlaneでiOSアプリをビルド・アーカイブし、App Store/TestFlightに申請します。Use when ユーザーが「TestFlightにアップして」「App Storeに申請して」「リリースして」と言ったとき。
Step-by-step release checklist for ClipKit iOS app submission to TestFlight and App Store. Use when preparing release, uploading to TestFlight, submitting to App Store, bumping version, or creating a release.
このプロジェクトで実際に踏んだ iOS 開発の落とし穴と対策。CoreData, AVFoundation, AVAudioSession など。CoreData の設定変更・新機能追加・マイグレーション対応時に必ず参照すること。
Step-by-step release checklist for Smart Player iOS app submission to App Store. Use when preparing release, updating version, submitting to App Store, or mentioning App Store submission.