CtrlK
BlogDocsLog inGet started
Tessl Logo

ivan-magda/uikit-expert

Write, review, or improve UIKit code following best practices for view controller lifecycle, Auto Layout, collection views, navigation, animation, memory management, and modern iOS 18–26 APIs. Use when building new UIKit features, refactoring existing views or view controllers, reviewing code quality, adopting modern UIKit patterns (diffable data sources, compositional layout, cell configuration), or bridging UIKit with SwiftUI. Does not cover SwiftUI-only code.

96

1.23x
Quality

100%

Does it follow best practices?

Impact

96%

1.23x

Average score across 9 eval scenarios

SecuritybySnyk

Passed

No known issues

Overview
Quality
Evals
Security
Files

criteria.jsonevals/scenario-3/

{
  "context": "Tests whether the agent uses modern UICollectionView APIs correctly: stable identifiers in diffable data source snapshots, type-safe CellRegistration stored as a property, the correct initial-load and update methods, compositional layout, and configuration-based cell styling with state-driven background handling.",
  "type": "weighted_checklist",
  "checklist": [
    {
      "name": "Stable snapshot IDs",
      "description": "The diffable data source snapshot stores Contact IDs (e.g., UUID or Int) as item identifiers, NOT full Contact model structs",
      "max_score": 14
    },
    {
      "name": "CellRegistration stored property",
      "description": "UICollectionView.CellRegistration is stored as a lazy property (or instance property) on the view controller, NOT created inside the cell provider closure",
      "max_score": 14
    },
    {
      "name": "No string-based dequeue",
      "description": "Does NOT use string-based register/dequeue methods (register(_:forCellWithReuseIdentifier:) / dequeueReusableCell(withReuseIdentifier:for:))",
      "max_score": 10
    },
    {
      "name": "Initial load method",
      "description": "Uses applySnapshotUsingReloadData(_:) (or applySnapshotUsingReloadData(_:completion:)) for the initial population of the collection view",
      "max_score": 12
    },
    {
      "name": "reconfigureItems for update",
      "description": "The updateContact method uses reconfigureItems(_:) on the snapshot (not reloadItems) to update a contact's name",
      "max_score": 12
    },
    {
      "name": "Compositional layout",
      "description": "Uses UICollectionViewCompositionalLayout (not UICollectionViewFlowLayout or a custom layout subclass)",
      "max_score": 10
    },
    {
      "name": "UIContentConfiguration for content",
      "description": "Uses UIContentConfiguration (e.g., UIListContentConfiguration) to set cell content (name/email text) rather than directly setting cell.textLabel or subview labels",
      "max_score": 10
    },
    {
      "name": "configurationUpdateHandler for selection",
      "description": "Uses configurationUpdateHandler on the cell to apply background styling based on selection/highlight state, rather than overriding isSelected or setSelected(_:animated:)",
      "max_score": 10
    },
    {
      "name": "Unique item identifiers",
      "description": "The 20 mock contacts all have distinct IDs — no duplicate identifiers in the initial snapshot",
      "max_score": 8
    }
  ]
}

SKILL.md

tile.json