PureXML/third_party/rules-swift/exp/verification.md

1.8 KiB

Verification

Final checklist before considering an ExtremePackaging change done.

When applying these rules, always:

  1. Check the current target structure matches the active manifest
    • Foundation: SharedModels, AppColors, AppFont
    • Design System: AppTheme
  2. Verify new targets follow naming conventions
  3. Ensure imports and declared dependencies flow from Apps to Features to Infrastructure to Foundation, never from a lower layer to a higher one
  4. Create test targets for all new source targets
  5. Update Package.swift using closure-with-local-variables pattern:
    • Define deps, allProducts, and targets using let variable: [Type] = { ... }() pattern
    • NEVER use inline array definitions
    • Use descriptive variable names for each dependency, product, and target
    • Group by purpose/layer with comment headers (// ---------- Header ----------)
    • Separate platform-specific code with #if os(iOS) || os(macOS)
  6. Run swift build to verify package integrity
  7. Verify Package.swift follows all formatting rules:
    • Trailing commas in arrays
    • Grouped dependencies (OpenAPI, Vapor, Apple-only)
    • Grouped products (base, appleOnly)
    • Grouped targets (modelTargets, apiTargets, uiTargets)
  8. Check platform separation in Package.swift uses #if os(), not #if canImport(). (Inside Swift source files, #if canImport(UIKit) / #if canImport(AppKit) is the correct idiom; the manifest is the only place canImport is forbidden.)
  9. Verify .when(platforms:) used for platform-specific dependencies within targets
  10. For font/resource targets:
    • Confirm .process() used for resources (NOT .copy())
    • Verify Bundle.module used (NOT Bundle.main)
    • Check CoreText registration implemented with error handling
    • Ensure registration called in app init before UI renders
    • Verify no Info.plist font registration used