install
source · Clone the upstream repo
git clone https://github.com/ComeOnOliver/skillshub
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ComeOnOliver/skillshub "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/michaelboeding/skills/add-to-xcode" ~/.claude/skills/comeonoliver-skillshub-add-to-xcode && rm -rf "$T"
manifest:
skills/michaelboeding/skills/add-to-xcode/SKILL.mdsource content
Add to Xcode
⚠️ MANDATORY: Run After Creating Source Files
Every time you create a
, .swift
, .m
, .mm
, .c
, or .cpp
file in an Xcode project, you MUST run:.h
ruby ${CLAUDE_PLUGIN_ROOT}/skills/add-to-xcode/scripts/add_to_xcode.rb <filepath>
If you skip this step:
- ❌ File will NOT appear in Xcode's navigator
- ❌ File will NOT compile with the app
- ❌ User will have to manually add it
Quick Reference
# ALWAYS do this after creating any source file: # Use subshell to get latest version (handles multiple cached versions) ruby "$(ls -1d ~/.claude/plugins/cache/michaelboeding-skills/skills/*/skills/add-to-xcode/scripts/add_to_xcode.rb 2>/dev/null | sort -V | tail -1)" NewFile.swift
Supported File Types
| Extension | Added to Compile Sources |
|---|---|
| ✅ Yes |
| ✅ Yes |
| ✅ Yes |
| ✅ Yes |
| ✅ Yes |
| ❌ No (reference only) |
Workflow
Step 1: Create the file normally
# Example: Create a new Swift file cat > Sources/Features/MyFeature.swift << 'EOF' import Foundation class MyFeature { // Implementation } EOF
Step 2: Add to Xcode project
ruby ${CLAUDE_PLUGIN_ROOT}/skills/add-to-xcode/scripts/add_to_xcode.rb Sources/Features/MyFeature.swift
Output:
✓ Added Sources/Features/MyFeature.swift to MyApp.xcodeproj (target: MyApp)
What the Script Does
- Finds the
- Searches current directory and parents.xcodeproj - Creates group hierarchy - Matches the file's directory structure
- Adds file reference - Registers with the project
- Adds to build target - Source files (
,.swift
,.m
,.mm
,.c
) are added to the first target's compile sources.cpp
Requirements
Ruby with the
xcodeproj gem:
gem install xcodeproj
Examples
Adding a new Swift file
# Create the file cat > MyApp/ViewModels/ProfileViewModel.swift << 'EOF' import SwiftUI @Observable class ProfileViewModel { var name: String = "" var email: String = "" } EOF # Add to Xcode ruby ${CLAUDE_PLUGIN_ROOT}/skills/add-to-xcode/scripts/add_to_xcode.rb MyApp/ViewModels/ProfileViewModel.swift
Adding a header file
# Create header cat > MyApp/Bridge/MyApp-Bridging-Header.h << 'EOF' #import <SomeLibrary/SomeLibrary.h> EOF # Add to Xcode (headers are added but not to compile sources) ruby ${CLAUDE_PLUGIN_ROOT}/skills/add-to-xcode/scripts/add_to_xcode.rb MyApp/Bridge/MyApp-Bridging-Header.h
Adding Objective-C files
# Create implementation cat > MyApp/Legacy/LegacyManager.m << 'EOF' #import "LegacyManager.h" @implementation LegacyManager // Implementation @end EOF # Add to Xcode ruby ${CLAUDE_PLUGIN_ROOT}/skills/add-to-xcode/scripts/add_to_xcode.rb MyApp/Legacy/LegacyManager.m
Agent Integration
When working in an Xcode project, agents should:
- Check for
before creating source files.xcodeproj - Create the file using standard file creation
- Run add_to_xcode.rb immediately after file creation
# Pattern for agents: # 1. Create file cat > NewFile.swift << 'EOF' // content EOF # 2. Register with Xcode ruby ${CLAUDE_PLUGIN_ROOT}/skills/add-to-xcode/scripts/add_to_xcode.rb NewFile.swift
Troubleshooting
"No .xcodeproj found"
- Make sure you're running from within the Xcode project directory or a subdirectory
"gem not found: xcodeproj"
- Install with:
gem install xcodeproj - On macOS with system Ruby, you may need:
sudo gem install xcodeproj
File added but not compiling
- Check that the file extension is recognized (
,.swift
,.m
,.mm
,.c
).cpp - Verify the target exists and has a source build phase
- Header files (
) are not added to compile sources (this is correct).h
Related Skills
| Skill | Use Case |
|---|---|
| Convert iOS code to Android |
| Convert Android code to iOS |