---
title: "iOS Application Testing Strategies at Shopify"
description: "Shopify describes an iOS testing strategy for a monorepo containing multiple app projects and evolving through hundreds of weekly commits. The approach covers Models, Views, ViewModels, View Controllers, and user workflows with tests matched to each component’s role: regular unit tests for business rules, snapshot tests for visual behavior, and XCUITest UI automation for user-facing flows. UI automation selects elements through accessibility labels or strings, which can also improve accessibility for visually impaired users, while manual testing remains necessary for some animation and rendering issues. The article recommends a test pyramid because slower tests require more human effort and maintenance, and says suites must evolve as business requirements change."
---

# iOS Application Testing Strategies at Shopify

[Shopify](https://yomu.fyi/company/shopify) · Uzziah Eyee · Jan 15, 2019

**Type:** Explainer

## Summary

Shopify describes an iOS testing strategy for a monorepo containing multiple app projects and evolving through hundreds of weekly commits. The approach covers Models, Views, ViewModels, View Controllers, and user workflows with tests matched to each component’s role: regular unit tests for business rules, snapshot tests for visual behavior, and XCUITest UI automation for user-facing flows. UI automation selects elements through accessibility labels or strings, which can also improve accessibility for visually impaired users, while manual testing remains necessary for some animation and rendering issues. The article recommends a test pyramid because slower tests require more human effort and maintenance, and says suites must evolve as business requirements change.

## Context

The strategy is presented in the context of Shopify’s monorepo architecture, where multiple app projects share one Git repository and hundreds of commits arrive each week. Testing at multiple levels is used to identify and fix regression bugs quickly.

## Approach / What changed

Tests are assigned to the application hierarchy: regular unit tests verify model rules and other small behaviors; snapshot tests compare recorded images for Views and View Controllers; ViewModel tests check UI state and validation logic; and XCUITest UI automation simulates actions across user workflows. Core user-facing features are decomposed into automatable steps, which are then composed into feature tests. Manual testing remains for issues such as animation glitches and rendering bugs.

## Takeaways

- Models use regular unit tests to verify business rules, such as selecting the first default address as a Customer’s billingAddress when multiple addresses exist.
- Snapshot tests record a view or View Controller image and fail when later output differs, capturing design decisions for edge cases such as long text and state-dependent controls.
- The test pyramid favors many fast, maintainable unit tests and fewer targeted UI automation or manual tests; manual effort and maintenance increase as execution moves upward.

## FAQ

### Why are different test types used for different iOS components?

The components have different responsibilities and test costs. Unit tests check business rules, snapshots check visual behavior and composition, and UI automation checks complete user-facing workflows; slower tests require more human effort and maintenance.

### Can UI automation replace manual testing completely?

No. The article says the available tools are not mature enough to exclude manual testing entirely. Animation glitches and rendering bugs may still be discovered only through manual testing, although UI automation is increasingly used to replace manual tests.

### How do UI tests support accessibility?

UI tests select elements by accessibility label or string rather than relying on the app’s internal structure. Those labels are also read aloud when iOS accessibility features are enabled, so writing these tests can improve accessibility.

**Tags:** [Accessibility](https://yomu.fyi/topic/accessibility), [iOS](https://yomu.fyi/topic/ios), [Testing](https://yomu.fyi/topic/testing)

- Source: [Shopify](https://shopify.engineering/ios-application-testing-strategies-at-shopify)
- Source URL: https://shopify.engineering/ios-application-testing-strategies-at-shopify
- Ingested by Yomu: 2026-09-17T14:06:21.455Z

[Read original post](https://shopify.engineering/ios-application-testing-strategies-at-shopify)
