iOS Native
Building an iOS app instead? See the iOS native guide.
This guide walks you through setting up a RunnerHub pipeline for Swift Package Manager (SPM) projects. Build, test, and distribute your Swift packages with automated dependency caching.
Create .runnerhub/runnerhub.yml in your repository root:
name: Swift Package Buildplatform: ios
environment: xcode: "16.4"
triggers: - push - pull_request
steps: - name: Resolve dependencies run: swift package resolve
- name: Build run: swift build
- name: Run tests run: swift testThis pipeline builds your Swift package and runs all tests.
The basic pipeline works for most Swift packages. You can customize it:
swift test -v for verbose outputswift build -c releaseswift test --filter YourPackageTests.YourTestClass.runnerhub/runnerhub.yml to your repositoryHere’s a more comprehensive pipeline with multiple test steps:
name: Swift Package Build & Testplatform: ios
environment: xcode: "16.4"
triggers: - push - pull_request
steps: - name: Resolve dependencies run: swift package resolve
- name: Build (Debug) run: swift build
- name: Build (Release) run: swift build -c release
- name: Run tests run: swift test -v
- name: Run performance tests run: swift test --filter YourPackageTests.PerformanceTestsFor distribution, build with the Release configuration:
name: Swift Package Releaseplatform: ios
environment: xcode: "16.4"
triggers: - push
steps: - name: Build Release run: swift build -c releaseBuild for multiple platforms (iOS, macOS, etc.):
name: Swift Package Multi-Platformplatform: ios
environment: xcode: "16.4"
triggers: - push - pull_request
steps: - name: Resolve dependencies run: swift package resolve
- name: Build for macOS run: swift build -c debug
- name: Test on macOS run: swift test
- name: Build for iOS run: | swift build \ -c debug \ --destination generic/platform=iOSBuild documentation with DocC:
name: Swift Package with Docsplatform: ios
environment: xcode: "16.4"
triggers: - push - pull_request
steps: - name: Resolve dependencies run: swift package resolve
- name: Build run: swift build
- name: Run tests run: swift test
- name: Build documentation run: swift package generate-documentation
artifacts: - .build/**RunnerHub automatically caches:
.build/checkouts/).build/ directory)Your builds will be fast after the first run!
To update package dependencies:
- name: Update dependencies run: swift package updateOr update to specific versions:
- name: Update specific package run: swift package edit PackageName --revision <commit-hash>Generate code coverage reports:
name: Swift Package with Coverageplatform: ios
environment: xcode: "16.4"
triggers: - push - pull_request
steps: - name: Run tests with coverage run: swift test --enable-code-coverage
- name: Generate coverage report run: | xcrun llvm-cov export \ -format="lcov" \ .build/debug/YourPackagePackageTests.xctest/Contents/MacOS/YourPackagePackageTests \ -instr-profile=.build/debug/codecov/default.profdata > coverage.lcov
artifacts: - coverage.lcovAdd configuration via environment variables:
steps: - name: Build run: swift build env: CONFIGURATION: release ENABLE_TESTS: trueReference them in your Package.swift or build scripts.
Specify a Swift version (if needed):
- name: Check Swift version run: swift --version
- name: Build with specific tools run: swift buildAdd linting before building:
name: Swift Package Lint & Buildplatform: ios
environment: xcode: "16.4"
triggers: - push - pull_request
steps: - name: Resolve dependencies run: swift package resolve
- name: Format check run: swift run swiftformat --lint .
- name: Build run: swift build
- name: Run tests run: swift testIf your Swift package is in a subdirectory:
name: Swift Package Monorepoplatform: ios
environment: xcode: "16.4"
triggers: - push - pull_request
steps: - name: Build run: swift build working_directory: packages/MyPackage
- name: Test run: swift test working_directory: packages/MyPackageShow verbose output:
- name: Build verbose run: swift build -vList available targets:
- name: List targets run: swift package describeForce rebuild:
- name: Clean and build run: | rm -rf .build swift buildRun specific test target:
- name: Run specific tests run: swift test --filter PackageNameTestsiOS Native
Building an iOS app instead? See the iOS native guide.
iOS with Fastlane
Need automation? Check the Fastlane guide.
Pipeline Reference
Explore all YAML options in the pipeline reference.
Caching & Performance
Learn how RunnerHub caches dependencies in the caching guide.