AgentSkillsCN

swift-development

全面的 Swift 开发,用于构建、测试和部署 iOS/macOS 应用程序。当 Claude 需要以下操作时使用:(1) 从命令行构建 Swift 包或 Xcode 项目;(2) 使用 XCTest 或 Swift Testing 框架运行测试;(3) 使用 simctl 管理 iOS 模拟器;(4) 处理代码签名、配置文件和应用分发;(5) 使用 SwiftFormat/SwiftLint 格式化或 lint Swift 代码;(6) 使用 Swift Package Manager (SPM);(7) 实现 Swift 6 并发模式(async/await、actors、Sendable);(8) 使用 MVVM 架构创建 SwiftUI 视图;(9) 设置 Core Data 或 SwiftData 持久化,或任何其他 Swift/iOS/macOS 开发任务。

SKILL.md
--- frontmatter
name: swift-development
description: >
  Comprehensive Swift development for building, testing, and deploying iOS/macOS applications.
  Use when Claude needs to: (1) Build Swift packages or Xcode projects from command line,
  (2) Run tests with XCTest or Swift Testing framework, (3) Manage iOS simulators with simctl,
  (4) Handle code signing, provisioning profiles, and app distribution, (5) Format or lint
  Swift code with SwiftFormat/SwiftLint, (6) Work with Swift Package Manager (SPM),
  (7) Implement Swift 6 concurrency patterns (async/await, actors, Sendable),
  (8) Create SwiftUI views with MVVM architecture, (9) Set up Core Data or SwiftData persistence,
  or any other Swift/iOS/macOS development tasks.

Swift Development

Prerequisites

  • macOS with Xcode 15+ installed (Xcode 16+ for Swift 6)
  • Xcode Command Line Tools: xcode-select --install
  • Verify: xcodebuild -version and swift --version

Quick Start

New Swift Package

bash
# Use the included script for full setup
./scripts/new_package.sh MyLibrary --type library --ios --macos

# Or manually
swift package init --type library --name MyLibrary

Build and Test

bash
# SPM packages
swift build
swift test

# Xcode projects
xcodebuild -workspace App.xcworkspace -scheme App \
    -destination 'platform=iOS Simulator,name=iPhone 15' build

# Use included script for common options
./scripts/run_tests.sh --parallel --coverage

Format and Lint

bash
# Use included script
./scripts/format_and_lint.sh Sources/

# Check mode (CI)
./scripts/format_and_lint.sh --check

Simulator Management

bash
# Use included script
./scripts/simulator.sh list
./scripts/simulator.sh boot "iPhone 15"
./scripts/simulator.sh screenshot
./scripts/simulator.sh dark

Core Workflows

Building iOS Apps

bash
# Debug build for simulator
xcodebuild -workspace App.xcworkspace -scheme App \
    -destination 'platform=iOS Simulator,name=iPhone 15' \
    build

# Release archive
xcodebuild archive \
    -workspace App.xcworkspace -scheme App \
    -archivePath ./build/App.xcarchive \
    -configuration Release

# Export IPA (use templates from assets/ExportOptions/)
xcodebuild -exportArchive \
    -archivePath ./build/App.xcarchive \
    -exportPath ./build/export \
    -exportOptionsPlist assets/ExportOptions/app-store.plist

Testing

bash
# All tests
xcodebuild test -workspace App.xcworkspace -scheme App \
    -destination 'platform=iOS Simulator,name=iPhone 15'

# Specific test
xcodebuild test -only-testing:AppTests/MyTestClass/testMethod

# With coverage
xcodebuild test -enableCodeCoverage YES \
    -resultBundlePath ./TestResults.xcresult

App Installation

bash
# Install on booted simulator
xcrun simctl install booted ./Build/Products/Debug-iphonesimulator/App.app

# Launch
xcrun simctl launch booted com.company.app

Official Documentation

Reference Links (for humans)

These are Apple's official documentation links for manual browsing:

Note: Apple's documentation sites are JavaScript SPAs and cannot be fetched programmatically with WebFetch. Use GitHub-based sources below instead.

WebFetch-Compatible Sources (Raw GitHub URLs)

Always use raw.githubusercontent.com URLs — regular github.com URLs return garbled HTML/JSON.

Base URL prefix: https://raw.githubusercontent.com/apple

Swift Testing (/swift-testing/main/):

ResourcePath
READMEREADME.md
Defining TestsSources/Testing/Testing.docc/DefiningTests.md
Organizing TestsSources/Testing/Testing.docc/OrganizingTests.md
ExpectationsSources/Testing/Testing.docc/Expectations.md
Parameterized TestingSources/Testing/Testing.docc/ParameterizedTesting.md
Traits OverviewSources/Testing/Testing.docc/Traits.md
Trait ReferenceSources/Testing/Testing.docc/Traits/Trait.md
Adding TagsSources/Testing/Testing.docc/AddingTags.md
Adding CommentsSources/Testing/Testing.docc/AddingComments.md
Associating BugsSources/Testing/Testing.docc/AssociatingBugs.md
Bug IdentifiersSources/Testing/Testing.docc/BugIdentifiers.md
AttachmentsSources/Testing/Testing.docc/Attachments.md
Enabling/Disabling TestsSources/Testing/Testing.docc/EnablingAndDisabling.md
Limiting Execution TimeSources/Testing/Testing.docc/LimitingExecutionTime.md
ParallelizationSources/Testing/Testing.docc/Parallelization.md
Exit TestingSources/Testing/Testing.docc/exit-testing.md
Known IssuesSources/Testing/Testing.docc/known-issues.md
Testing Async CodeSources/Testing/Testing.docc/testing-asynchronous-code.md
Testing for ErrorsSources/Testing/Testing.docc/testing-for-errors-in-swift-code.md
Migrating from XCTestSources/Testing/Testing.docc/MigratingFromXCTest.md
Vision & DesignDocumentation/Vision.md
CLI DebuggingDocumentation/CommandlineDebugging.md
Environment VariablesDocumentation/EnvironmentVariables.md

Other Swift Packages:

ResourceFull Raw URL
Swift Async Algorithmshttps://raw.githubusercontent.com/apple/swift-async-algorithms/main/README.md
Swift Collectionshttps://raw.githubusercontent.com/apple/swift-collections/main/README.md

For Swift Evolution proposals, construct the raw URL from the proposal number: https://raw.githubusercontent.com/apple/swift-evolution/main/proposals/NNNN-proposal-name.md

Example: https://raw.githubusercontent.com/apple/swift-evolution/main/proposals/0409-access-level-on-imports.md

For directory discovery (finding proposal numbers, doc file names): use WebSearch instead of WebFetch — directory listings on GitHub are not parseable.

When to Fetch Documentation

Use WebFetch with raw GitHub URLs in these situations:

  1. Swift Testing: When you need details on @Test, #expect, #require, traits, or parameterized tests
  2. Swift Evolution: When checking accepted proposals for new language features
  3. Framework Details: When implementing features from Apple's open-source Swift packages
  4. Uncertainty: When you're unsure about current API patterns or best practices

URL conversion rule: Replace github.com/{owner}/{repo}/blob/{branch}/ with raw.githubusercontent.com/{owner}/{repo}/{branch}/

Fallback: If WebFetch fails on a raw URL, use WebSearch with the query site:github.com/apple {topic} to discover the correct file path, then construct the raw URL.

Example prompt for WebFetch: "Extract the main features, macros, and usage examples from this documentation"


Reference Files

Detailed documentation for specific topics:

TopicFile
SwiftUI patternsreferences/swiftui-patterns.md
Testing patternsreferences/testing-patterns.md
Swift 6 concurrencyreferences/concurrency.md
Architecture patternsreferences/architecture.md
Best practicesreferences/best-practices.md
Swift Package Managerreferences/spm.md
xcodebuild commandsreferences/xcodebuild.md
Simulator controlreferences/simctl.md
Code signingreferences/code-signing.md
CI/CD setupreferences/cicd.md
Troubleshootingreferences/troubleshooting.md

Included Scripts

ScriptPurpose
scripts/new_package.shCreate new Swift package with config files
scripts/run_tests.shRun tests with common options
scripts/format_and_lint.shFormat and lint Swift code
scripts/simulator.shQuick simulator management

Asset Templates

AssetPurpose
assets/Package.swift.templateSwift package template
assets/.swiftformatSwiftFormat configuration
assets/.swiftlint.ymlSwiftLint configuration
assets/ExportOptions/Archive export plist templates

Quick Reference

Essential Commands

TaskCommand
Build packageswift build
Build releaseswift build -c release
Run testsswift test
Update depsswift package update
List simulatorsxcrun simctl list devices
Boot simulatorxcrun simctl boot "iPhone 15"
Install appxcrun simctl install booted ./App.app
Format codeswiftformat .
Lint codeswiftlint

Common Destinations

bash
# iOS Simulator
-destination 'platform=iOS Simulator,name=iPhone 15'

# macOS
-destination 'platform=macOS'

# Generic iOS (for archives)
-destination 'generic/platform=iOS'