orange-opensource/ouds-ios/ouds-ios-guide-migration

Claude Code and agent skill by orange-opensource/ouds-ios

Trust tier 2
  • community
LLM review pending
Source check pending

Checking that the SKILL.md file is still in the repository.

Use when the user wants to migrate OUDS iOS code from an older version (1.0.0 or later) to the current version (3.2.0 or higher), or when deprecated or removed OUDS APIs are detected in the codebase

Install

npx vskill@latest install orange-opensource/ouds-ios/ouds-ios-guide-migration

SKILL.md

Skill: ouds-ios-guide-migration

Migration guide from v1.0.0 to v3.2.0 (current). Covers all breaking changes and deprecated symbols. For full before/after examples, refer to MIGRATION.md in the project root.


Quick-reference: what changed, when

From → ToImpactKey changes
v1.0.0 → v1.1.0HighMultiple*Tokens → Multiple*Token; button border tokens shortened
v1.1.0 → v1.2.0HighTheme renamed: OrangeBusinessTools → OrangeCompact
v1.2.0 → v1.3.0LowoudsVerticalSizeClass removed; UnorderedIcon → UnorderedAsset
v1.3.0 → v1.4.0Lowouds-prefixed View methods removed; OUDSTabBar(selected:) → (selectedTab:)
v1.4.0 → v2.0.0HighToken renames (colors, elevations, sizes, badge, bar); charts provider renamed; toolbar action type enriched
v2.0.0 → v2.1.0LowComponent token spacePaddingBlockDensityCompactTopAlignmentTopText_container renamed
v2.0.0 → v2.2.0MediumOUDSBadge split into OUDSBadgeStandard, OUDSBadgeCount, OUDSBadgeIcon
v2.2.0 → v2.3.0LowOUDSIcon → OUDSImage; all icon: Image + flipIcon + renderingMode params replaced by OUDSImage
v2.3.0 → v3.0.0HighButton/tag/link component token renames (add Default suffix); icon.colorContentDefault removed; theme.controlItem → theme.listItem; OUDSLink.Indicator.back → .previous; OUDSChipPickerData.Layout.icon(icon:…) → .image(image:); .textAndIcon → .textAndImage; alert status .neutral(icon:)/.accent(icon:) → (image:); OUDSBadgeIcon status .neutral(icon:flipped:renderingMode:)/.accent(…) → (image: OUDSImage); forceOUDSLegacyTabBar → forceOUDSLegacyLayout; OUDSLegacyTabBarModifier → OUDSLegacyLayoutModifier; OUDSButton.Style.loading → .loading(); OUDSTag hasLoader: removed → use loadingLabel:/loadingKey: inits, now with optional progress:
v3.0.0 → v3.2.0LowOUDSListItemData — all 6 String/AttributedString initializers deprecated; new unified initializers init(label: Label, …) / init(label: some View, accessibilityLabel:, …) taking OUDSListItemData.Label + OUDSTextualContent (.raw / .localized / .rich) for description / overline / extraLabel / helperText. OUDSTextualContent becomes public @frozen; both it and Label conform to ExpressibleByStringLiteral. Label.text deprecated in favor of new Label.textual(OUDSTextualContent, isBold:). OUDSBulletList.Item — String / AttributedString / LocalizedStringKey initializers deprecated; new init(_: OUDSTextualContent, …). OUDSTextArea — HelperText.plain / .rich deprecated in favor of .textual(OUDSTextualContent); Status.error(message:) / .richError(message:) deprecated in favor of .textualError(message: OUDSTextualContent). OUDSPasswordInput — 4 initializers (helperText String? / AttributedString) deprecated; 2 new initializers taking helperText: OUDSTextualContent?. OUDSTextInput — 4 initializers (helperText String? / AttributedString) deprecated; 2 new initializers taking helperText: OUDSTextualContent?; Status.error(message:) / .richError(message:) deprecated in favor of .textualError(message:) (also used by OUDSPasswordInput). OUDSPinCodeInput — 3 initializers (helperText String? / AttributedString / helperText key: LocalizedStringKey) deprecated; 1 new initializer taking helperText: OUDSTextualContent?; Status.error(message:) / .richError(message:) deprecated in favor of .textualError(message: OUDSTextualContent). OUDSCheckboxItemIndeterminate — 2 initializers (errorText: String?) deprecated; 2 new initializers taking errorText: OUDSTextualContent?. OUDSSwitchItem, OUDSCheckboxItem and OUDSRadioItem — 4 initializers each (errorText String? / AttributedString) deprecated; 2 new initializers each taking errorText: OUDSTextualContent?. OUDSAlertMessage — 8 initializers (String / AttributedString description, [String] / [AttributedString] bulletList) deprecated; 2 new initializers (label: / _ key:) taking description: OUDSTextualContent? and bulletList: [OUDSTextualContent].

Migration workflow

  1. Detect — grep for deprecated symbols (commands below).
  2. Transform — apply the rules for the relevant version.
  3. Build — swift build must succeed with zero errors.
  4. Check warnings — swift build 2>&1 | grep -i deprecated must return nothing OUDS-related.
  5. Test — swift test must pass.

Detection grep commands

bash
# Breaking changes (v3.0.0)
grep -rn \
"theme\.controlItem\|icon\.colorContentDefault\|spaceInsetLoader\|\.sizeMaxHeightIconOnly\b\|\.sizeMinHeight\b\|\.sizeMinWidth\b\|\.sizeIcon\b\|\.sizeIconOnly\b\|\.sizeProgressIndicator\b\|\.spaceColumnGapIconChevron\b\|\.spaceColumnGapChevron\b\|\.spaceInsetIconOnly\b\|\.spacePaddingBlock\b\|\.spacePaddingInlineChevronEnd\b\|\.spacePaddingInlineChevronStart\b\|\.spacePaddingInlineEndIconStart\b\|\.spacePaddingInlineIconNone\b\|\.spacePaddingInlineStartIconEnd\b\|indicator: \.back\b\|forceOUDSLegacyTabBar\|OUDSLegacyTabBarModifier\|hasLoader:" \
--include="*.swift" .
# Active deprecations (v2.x)
grep -rn \
"OUDSBadge\b\|OUDSIcon\b\|icon: Image\|flipIcon\|renderingMode:\|spacePaddingBlockDensityCompactTopAlignmentTopText_container" \
--include="*.swift" .
# Removed symbols (v1.x era)
grep -rn \
"oudsVerticalSizeClass\|UnorderedIcon\|\.free(\|OUDSTabBar(selected:\|\.ouds[A-Z]\|Multiple.*Tokens\b\|OrangeBusinessTools\|buttonBorderRadius\|buttonBorderWidth" \
--include="*.swift" .

v1.0.0 → v1.1.0

OldNew
MultipleElevationCompositeRawTokensMultipleElevationCompositeRawToken
MultipleColorSemanticTokensMultipleColorSemanticToken
MultipleFontCompositeSemanticTokensMultipleFontCompositeSemanticToken
MultipleFontLetterSpacingSemanticTokensMultipleFontLetterSpacingSemanticToken
MultipleFontLineHeightSemanticTokensMultipleFontLineHeightSemanticToken
MultipleFontSizeSemanticTokensMultipleFontSizeSemanticToken
MultipleSizeSemanticTokensMultipleSizeSemanticToken
MultipleSpaceSemanticTokensMultipleSpaceSemanticToken
theme.button.buttonBorderRadiusDefaulttheme.button.borderRadiusDefault
theme.button.buttonBorderRadiusRoundedtheme.button.borderRadiusRounded
theme.button.buttonBorderRadiusSocialtheme.button.borderRadiusSocial
theme.button.buttonBorderWidthDefaulttheme.button.borderWidthDefault
theme.button.buttonBorderWidthDefaultInteractiontheme.button.borderWidthDefaultInteraction
theme.button.buttonBorderWidthDefaultInteractionMonotheme.button.borderWidthDefaultInteractionMono

v1.1.0 → v1.2.0

Replace everywhere: OUDSThemeOrangeBusinessTools → OUDSThemeOrangeCompact, OrangeBusinessToolsTheme → OrangeCompactTheme, OrangeBusinessTools → OrangeCompact.


v1.2.0 → v1.3.0

  • Remove all uses of @Environment(\.oudsVerticalSizeClass).
  • Rename OUDSBulletList.UnorderedIcon → OUDSBulletList.UnorderedAsset; case .free(…) → .icon(…).

v1.3.0 → v1.4.0

RemovedReplacement
.oudsForegroundStyle(_:).foregroundStyle(_:)
.oudsForegroundColor(_:).foregroundColor(_:)
.oudsBackground(_:).background(_:)
.oudsAccentColor(_:).accentColor(_:)
.oudsShadow(_:).shadow(_:)
.oudsBorder(style:width:radius:color:).border(style:width:radius:color:)
.oudsColoredSurface(_:).coloredSurface(_:)
.oudsGridMargin(_:).gridMargin(_:)
.oudsRequestAccessibleFocus(_:).requestAccessibleFocus(_:)
.oudsRequestAccessibleFocus(_:for:).requestAccessibleFocus(_:for:)
.oudsHorizontalDivider(dividerColor:).horizontal(color:)
.oudsVerticalDivider(color:).vertical(color:)
OUDSTabBar(selected: 0, count: 3) { … }@State var selectedTab = 0; OUDSTabBar(selectedTab: $selectedTab, count: 3) { … }

v1.4.0 → v2.0.0

Renamed semantic tokens
OldNew
repositorySecondaryHigherrepositorySecondaryHigherHigh
overlayModalLight/Dark/overlayModalSheetLight/Dark/ (drop Modal, add Sheet)
xDefault, yDefault, blurDefault, spreadDefaultxElevated, yElevated, blurElevated, spreadElevated
colorDefaultLight/DarkcolorElevatedLight/Dark
All maxWidthType* sizesmaxWidth* (remove Type)
Badge spaceInsetspaceInsetMediumLarge
Bar colorActiveIndicator*colorCurrentIndicator*
Bar opacityActiveIndicator*, borderRadiusActiveIndicator*, sizeWidthActiveIndicator*same with Current
Removed tokens

Remove: blur160, opacityGrayLight80800, actionAccentLight/Dark/ (use colorAccent bar tokens), radio/checkbox sizeIndicator (use listItem.sizeControlIndicator), control item tokens: sizeMaxHeightAssetsContainer, sizeLoader, sizeErrorIcon, borderRadiusItemOnly, colorBgHover/Focus/Pressed/Loading*, colorContentLoader*, spacePaddingInlineErrorIcon*.

Other changes
  • theme.charts.* → theme.colorsCharts.*
  • OUDSToolBarItem.ActionType .icon case: add new badgeType slot in pattern matching.

v2.0.0 → v2.1.0

theme.controlItem.spacePaddingBlockDensityCompactTopAlignmentTopText_container → spacePaddingBlockDensityCompactTopAlignmentTopTextContainer


v2.0.0 → v2.2.0 — OUDSBadge split

OUDSBadge is deprecated. Identify the variant and replace:

If the call has…Use
count: parameterOUDSBadgeCount(count, accessibilityLabel:status:size:) — count is first unlabelled arg, type UInt8
status: of type StatusWithIcon (carries an icon)OUDSBadgeIcon(status:accessibilityLabel:size:)
NeitherOUDSBadgeStandard(accessibilityLabel:status:size:)

v2.2.0 → v2.3.0 — OUDSImage migration

Universal rule

All components that used icon: Image, flipIcon: Bool, renderingMode: as separate parameters now use OUDSImage:

icon: Image("x") → OUDSImage(asset: Image("x"))
flipIcon: true → OUDSImage(asset:, flipped: true) [omit if false]
renderingMode: .original → OUDSImage(asset:, renderingMode: .original) [omit if .template]
OUDSIcon → OUDSImage

OUDSIcon is a deprecated typealias. Global find-and-replace: OUDSIcon( → OUDSImage(.

Components index

This is the start of the file. Read the full SKILL.md on GitHub.

Security

  • Security scanPassed, 100 of 100Pattern checks on the skill's files.
  • Model reviewNot runA model review is scheduled for the next rescan.

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
34
Repository forks
9
7-day trend score
18

Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/orange-opensource/ouds-ios/ouds-ios-guide-migration/badge)](https://verified-skill.com/skills/orange-opensource/ouds-ios/ouds-ios-guide-migration)

Something wrong with this skill or its page? Tell us.