Skip to content
Plugins

language plugin

ios

`ios` is a Syrus plugin gem for iOS and Swift validation that must run on native macOS workers. It lives at `plugins/ios/` and contributes typed grader declarations rather than scheduler special cases.

ios

ios is a Syrus plugin gem for iOS and Swift validation that must run on native macOS workers. It lives at plugins/ios/ and contributes typed grader declarations rather than scheduler special cases.

What it provides

Extension pointWhat it does
:prepare_detectorDetects root Package.swift, Xcode workspaces/projects, and Swift source layouts. It contributes swift package resolve only for root Swift packages; Xcode dependency resolution remains explicit because it needs the repository's workspace/project and scheme choice.
:grader_typeExpands type: xcodebuild and type: swiftpm entries into shell-backed grader steps with macOS/Xcode capability metadata, isolated DerivedData or SwiftPM build paths, timeout defaults, and structured artifact metadata.

Typed grader examples

Xcode simulator tests:

grade:
  - type: xcodebuild
    workspace: MobileApp.xcworkspace
    scheme: MobileApp
    destination: "platform=iOS Simulator,name=iPhone 16,OS=latest"
    derived_data_path: .syrus/DerivedData/mobile
    result_bundle_path: build/syrus/MobileApp.xcresult
    junit_output: build/syrus/junit/mobile.xml
    timeout_minutes: 45

Swift Package Manager tests:

prepare:
  - swift package resolve

grade:
  - type: swiftpm
    package_path: Packages/Shared
    build_path: .syrus/DerivedData/shared
    timeout_minutes: 20

Both grader types default to:

capabilities:
  os: macos
  arch: arm64
  toolchain: xcode
  runtime: ios_simulator

Override capabilities: only when the target truly runs on a different worker class, such as a pure Swift package that is intentionally validated on Linux.

Loading the plugin

The plugin registers itself via a Rails engine to_prepare hook once gem "ios", path: "plugins/ios" is bundled.

Running tests

From the repo root:

bin/rspec plugins/ios/spec