Test Generator
gustavscirulis/snapgrid
Generate test templates for unit tests, integration tests, and UI tests using Swift Testing and XCTest.
Write tests, add test coverage, unit test, or add missing tests for Bitwarden iOS.
$ npx skills add bitwarden/ios --skill testing-ios-code -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install bitwarden/ios testing-ios-code --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/bitwarden/ios.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/testing-ios-code .claude/skills/testing-ios-code && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "testing-ios-code" agent skill from https://github.com/bitwarden/ios/tree/main/.claude/skills/testing-ios-code into .claude/skills/testing-ios-code/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "testing-ios-code", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/bitwarden/ios/tree/main/.claude/skills/testing-ios-codeType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add bitwarden/ios --skill testing-ios-code -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install bitwarden/ios testing-ios-code --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/bitwarden/ios.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/testing-ios-code .agents/skills/testing-ios-code && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "testing-ios-code" agent skill from https://github.com/bitwarden/ios/tree/main/.claude/skills/testing-ios-code into .agents/skills/testing-ios-code/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "testing-ios-code", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add bitwarden/ios --skill testing-ios-code -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install bitwarden/ios testing-ios-code --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/bitwarden/ios.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/testing-ios-code .cursor/skills/testing-ios-code && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "testing-ios-code" agent skill from https://github.com/bitwarden/ios/tree/main/.claude/skills/testing-ios-code into .cursor/skills/testing-ios-code/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "testing-ios-code", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/bitwarden/ios.git --path .claude/skills/testing-ios-code--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add bitwarden/ios --skill testing-ios-code -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install bitwarden/ios testing-ios-code --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/bitwarden/ios.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/testing-ios-code .gemini/skills/testing-ios-code && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "testing-ios-code" agent skill from https://github.com/bitwarden/ios/tree/main/.claude/skills/testing-ios-code into .gemini/skills/testing-ios-code/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "testing-ios-code", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install bitwarden/ios testing-ios-codeInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add bitwarden/ios --skill testing-ios-code -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/bitwarden/ios.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/testing-ios-code .github/skills/testing-ios-code && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "testing-ios-code" agent skill from https://github.com/bitwarden/ios/tree/main/.claude/skills/testing-ios-code into .github/skills/testing-ios-code/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "testing-ios-code", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add bitwarden/ios --skill testing-ios-code -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install bitwarden/ios testing-ios-code --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/bitwarden/ios.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/testing-ios-code .opencode/skills/testing-ios-code && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "testing-ios-code" agent skill from https://github.com/bitwarden/ios/tree/main/.claude/skills/testing-ios-code into .opencode/skills/testing-ios-code/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "testing-ios-code", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
testing-ios-codeWrite tests, add test coverage, unit test, or add missing tests for Bitwarden iOS.
Testing iOS Code is an agent skill from bitwarden/ios, published by the product's own GitHub organization. Write tests, add test coverage, unit test, or add missing tests for Bitwarden iOS. Use when asked to "write tests", "add test coverage", "test this", "unit test", "add tests for", "missing tests", or when creating test files for new implementations.
Its SKILL.md is about 1.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 11 other files, including reference files (for example `examples/coordinator-test-example.md`, `examples/coordinator-test-swift-testing-example.md` and `examples/processor-test-example.md`).
It sits in Testing & QA, covering Test generation, Unit testing and Test coverage. It works with iOS. The repository describes itself as: Bitwarden mobile apps (Password Manager and Authenticator) for iOS. The licence is GPL-3.0.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 59bbfb3. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are swift).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Testing iOS Code loads about 1.8k tokens when it runs, and up to ~3.2k if it reads all its reference files. Until then it costs about 67 tokens; SKILL.md has 585 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from bitwarden/ios at commit 59bbfb3, republished under its GPL-3.0 licence (© bitwarden). 585 words, ~1,791 tokens.
.claude/skills/testing-ios-code/SKILL.md (or your agent's skills folder). This skill also uses 9 other files; get the full folder from GitHub.Use this skill to write tests following Bitwarden iOS patterns.
Read Docs/Testing.md — it is the authoritative source for test structure, naming, templates, decision matrix, and simulator configuration.
| Scenario | Framework | Why |
|---|---|---|
| New test file | Swift Testing | Preferred for all new tests |
| Existing XCTest file | XCTest | Don't mix frameworks in one file |
| ViewInspector tests | XCTest | ViewInspector requires XCTest |
| Snapshot tests | XCTest | SnapshotTesting requires BitwardenTestCase |
Choose the right test type based on what you're testing:
| What | Test type | XCTest example | Swift Testing example |
|---|---|---|---|
| Processor actions/effects/state | Unit test | examples/processor-test-example.md | examples/processor-test-swift-testing-example.md |
| Coordinator navigation/routes | Unit test | examples/coordinator-test-example.md | examples/coordinator-test-swift-testing-example.md |
| View interactions (buttons, toggles) | ViewInspector test | examples/view-test-example.md | — (use XCTest) |
| View appearance | Snapshot test (disabletest_ prefix) | examples/view-test-example.md | — (use XCTest) |
| Service/repository business logic | Unit test | examples/service-test-example.md | examples/service-test-swift-testing-example.md |
Use a struct with init() — no teardown needed, value types are discarded after each test:
@MainActor
struct FeatureProcessorTests {
let coordinator: MockCoordinator<FeatureRoute, FeatureEvent>
let services: MockServiceContainer
let subject: FeatureProcessor
init() {
coordinator = MockCoordinator()
services = ServiceContainer.withMocks()
subject = FeatureProcessor(
coordinator: coordinator.asAnyCoordinator(),
services: services,
state: FeatureState(),
)
}
}Use a class subclassing BitwardenTestCase with setUp()/tearDown():
class FeatureProcessorTests: BitwardenTestCase {
var coordinator: MockCoordinator<FeatureRoute, FeatureEvent>!
var services: MockServiceContainer!
var subject: FeatureProcessor!
override func setUp() {
super.setUp()
coordinator = MockCoordinator()
services = ServiceContainer.withMocks()
subject = FeatureProcessor(
coordinator: coordinator.asAnyCoordinator(),
services: services,
state: FeatureState(),
)
}
override func tearDown() {
super.tearDown()
coordinator = nil
services = nil
subject = nil
}
}See examples/ for complete patterns per test type.
| Framework | Pattern | Example |
|---|---|---|
| Swift Testing | @Test func <functionName>_<behavior>() | @Test func perform_appeared_loadsData() async |
| XCTest | func test_<functionName>_<behavior>() | func test_perform_appeared_loadsData() async |
| XCTest | Swift Testing |
|---|---|
XCTAssertEqual(a, b) | #expect(a == b) |
XCTAssertTrue(x) | #expect(x == true) or #expect(x) |
XCTAssertNil(x) | #expect(x == nil) |
XCTAssertNotNil(x) | #expect(x != nil) |
XCTUnwrap(x) | try #require(x) |
XCTAssertThrowsError | #expect(throws:) { ... } |
Processor tests — test both paths:
receive(_:) actions: assert subject.state mutationsperform(_:) effects: await subject.perform(.effect), then assert state or coordinator callsService tests — test:
View tests — test (XCTest only):
processor.dispatchedActions.last (sync)processor.effects.lastTest files must live alongside implementation files:
BitwardenShared/UI/Auth/Login/LoginProcessor.swift
BitwardenShared/UI/Auth/Login/LoginProcessorTests.swift ← same directoryNew protocols need mocks:
// sourcery: AutoMockable as a trailing comment on the protocol declaration line./Scripts/generate-mocks.sh <Framework> where <Framework> matches the target (e.g. BitwardenShared, AuthenticatorShared, BitwardenKit, AuthenticatorBridgeKit) — requires BUILD_DIR, see script headerSee references/mock-generation.md for full details.
CipherView fixtures belong in the shared BitwardenSdk+<Area>Fixtures.swift file for the domain the model belongs to (e.g. CipherView.cardFixture()), not co-located inside an individual test file. Pick the file by area and framework: Vault models go in …/UI/Vault/PreviewContent/BitwardenSdk+VaultFixtures.swift, Auth models in …/Core/Auth/Services/TestHelpers/BitwardenSdk+AuthFixtures.swift, Tools models in …/Core/Tools/Extensions/TestHelpers/BitwardenSdk+ToolsFixtures.swift, and so on — under BitwardenShared for Password Manager or the AuthenticatorShared counterpart for Authenticator. Add new reusable fixtures to the matching file (create the area's fixtures file if one doesn't exist yet).<Type>Tests+<Feature>.swift extensions (e.g. AddEditItemProcessorTests+DriversLicense.swift), and author the new file in Swift Testing.MockProcessor/Store in setUp, then assertSnapshot(of: subject.navStackWrapped, as:) per state (all prefixed disabletest_); see AddEditSendItemView+SnapshotTests.swift. This is required for new views, which use #Preview macros that the snapshot harness cannot enumerate. (2) Iterate PreviewProvider._allPreviews, which is sometimes the better path for views that still expose a PreviewProvider. When a view could go either way, use the AskUserQuestion tool to let the user choose rather than deciding unilaterally — offer (a) instantiate the view directly and (b) iterate PreviewProvider._allPreviews, noting that direct instantiation is required if the view only exposes #Preview macros.© bitwarden, GPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 9 other files (references) in .claude/skills/testing-ios-code of bitwarden/ios.
Open the folder on GitHubat commit 59bbfb3
Testing iOS Code next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Testing iOS Code this skillbitwarden/ios | 694 | — | ~1.8k | Automated safety check: Pass | GPL-3.0 | |
| Test Generatorgustavscirulis/snapgrid | 117 | 1 repos | ~2.7k | Automated safety check: Notes | Custom licence | |
| OpenROAD Module Test AdderThe-OpenROAD-Project/OpenROAD | 3.2k | — | ~1.8k | Automated safety check: Pass | BSD-3-Clause | |
| Caliber Testingcaliber-ai-org/ai-setup | 1.3k | — | ~3.2k | Automated safety check: Pass | MIT | |
| Test Coverage Reviewareed1192/finance-news-aggregator | 149 | — | ~2.6k | Automated safety check: Pass | MIT | |
| Write Testsgrafana/synthetic-monitoring-app | 171 | — | ~1.2k | Automated safety check: Pass | AGPL-3.0 |
gustavscirulis/snapgrid
Generate test templates for unit tests, integration tests, and UI tests using Swift Testing and XCTest.
The-OpenROAD-Project/OpenROAD
Adds integration or unit tests to an OpenROAD module: writes the Tcl test, generates golden files and registers it in both CMake and Bazel.
caliber-ai-org/ai-setup
Writes Vitest tests following project patterns: tests/ directories, vi.mock() for module mocking with vi.hoisted() for test-time factories, global LLM mock from src/test/setup.ts, environment…
areed1192/finance-news-aggregator
Audit, plan, write, and verify unit tests for Python projects using pytest.
grafana/synthetic-monitoring-app
Write Jest integration and unit tests for the Grafana Synthetic Monitoring app using React Testing Library, MSW, and src/test helpers.
openplayerjs/openplayerjs
Write or extend Jest tests for OpenPlayerJS to this repo's exact conventions — makeCore factories, typed internals handles instead of as any, media property mocking, fake timers, ads/vast mocks, and…
bitwarden/ios
Build the Bitwarden iOS app, capture all compiler and lint warnings, categorize them into Swift 6 concurrency vs actionable, and interactively fix the actionable ones.
bitwarden/ios
Build the project, run tests, lint, format, spell check, generate mocks, or verify the build passes for Bitwarden iOS.
bitwarden/ios
Convert a hand-written bespoke mock to a Sourcery AutoMockable-generated mock.
bitwarden/ios
Evaluates a bitwarden/ios "Update SDK to" PR against the sdk-swift commit range for compile-time, runtime and serialization breaking changes, maps affected symbols to iOS call sites, and applies…
bitwarden/ios
Diagnose and fix flaky (intermittently failing) tests in Bitwarden iOS.
bitwarden/ios
Implement, write code, add a new screen, create a feature, new view, new processor, or wire up a new service in Bitwarden iOS.
Works with
Categories
Write tests, add test coverage, unit test, or add missing tests for Bitwarden iOS. Testing iOS Code is an agent skill from bitwarden/ios, published by the product's own GitHub organization. Write tests, add test coverage, unit test, or add missing tests for Bitwarden iOS.
Testing iOS Code fits situations like: asked to write tests; add test coverage; creating test files for new implementations.
Run `npx skills add bitwarden/ios --skill testing-ios-code -a claude-code`. Or copy the skill folder (.claude/skills/testing-ios-code in bitwarden/ios) into .claude/skills/testing-ios-code in your project. Claude Code loads it when a task matches its description.
Run `npx skills add bitwarden/ios --skill testing-ios-code -a codex`. Or copy the skill folder (.claude/skills/testing-ios-code in bitwarden/ios) into .agents/skills/testing-ios-code in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add bitwarden/ios --skill testing-ios-code -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/testing-ios-code, .gemini/skills/testing-ios-code, .github/skills/testing-ios-code and .opencode/skills/testing-ios-code in your project.
SKILL.md names no scripts, command-line tools or credentials: Testing iOS Code is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Testing iOS Code is published under the GPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.8k tokens (SKILL.md is roughly 7.2k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.4k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Testing iOS Code: Test Generator (gustavscirulis/snapgrid, 117 stars), OpenROAD Module Test Adder (The-OpenROAD-Project/OpenROAD, 3.2k stars), Caliber Testing (caliber-ai-org/ai-setup, 1.3k stars) and Test Coverage Review (areed1192/finance-news-aggregator, 149 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
bitwarden (a GitHub organization, an official publisher) maintains it in bitwarden/ios, which has 694 GitHub stars. The repository holds 11 skills in this directory. The repository was last updated on October 6, 2026.
Source: bitwarden/ios on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.