Build Information
Successful build of Revnix, reference v1.11.0 (095c4f), with Swift 6.2 for macOS (SPM) on 30 Oct 2026 12:36:38 UTC.
Swift 6 data race errors: 0
Build Command
env DEVELOPER_DIR=/Applications/Xcode-26.3.0.app xcrun swift build --arch arm64Build Log
========================================
RunAll
========================================
Builder version: 5.1.4
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/Oth-tech/RevnixSDK-iOS.git
Reference: v1.11.0
Initialized empty Git repository in /Users/admin/builder/spi-builder-workspace/.git/
From https://github.com/Oth-tech/RevnixSDK-iOS
* tag v1.11.0 -> FETCH_HEAD
HEAD is now at 095c4f1 Merge pull request #70 from Oth-tech/release/v1.11.0
Cloned https://github.com/Oth-tech/RevnixSDK-iOS.git
Revision (git rev-parse @):
095c4f1e0427cc482d7b791dcb919723cac1a0eb
SPI manifest file found: $PWD/.spi.yml
SUCCESS checkout https://github.com/Oth-tech/RevnixSDK-iOS.git at v1.11.0
========================================
Build
========================================
Selected platform: macosSpm
Swift version: 6.2
Building package at path: $PWD
https://github.com/Oth-tech/RevnixSDK-iOS.git
Running build ...
env DEVELOPER_DIR=/Applications/Xcode-26.3.0.app xcrun swift build --arch arm64
Building for debugging...
[0/3] Write sources
[0/3] Copying PrivacyInfo.xcprivacy
[2/3] Write swift-version--3CB7CFEC50E0D141.txt
[4/21] Compiling Revnix Storage.swift
[5/21] Compiling Revnix StoreKitGlue.swift
[6/21] Compiling Revnix Tracking.swift
[7/22] Compiling Revnix resource_bundle_accessor.swift
[8/22] Compiling Revnix RevnixError.swift
[9/22] Compiling Revnix RevnixPaywallBlockView.swift
[10/22] Compiling Revnix PaywallLocalization.swift
[11/22] Compiling Revnix PaywallRenderRules.swift
[12/22] Compiling Revnix RevnixClient.swift
[13/22] Compiling Revnix RevnixConfig.swift
[14/22] Compiling Revnix PaywallBlockGeometry.swift
/Users/admin/builder/spi-builder-workspace/Sources/Revnix/PaywallBlocks.swift:347:71: warning: conditional downcast from 'String?' to 'String' does nothing
345 | let c = try decoder.container(keyedBy: CodingKeys.self)
346 | icon = try? c.decodeIfPresent(String.self, forKey: .icon)
347 | title = (try? c.decodeIfPresent(String.self, forKey: .title)) as? String ?? ""
| `- warning: conditional downcast from 'String?' to 'String' does nothing
348 | description = try? c.decodeIfPresent(String.self, forKey: .description)
349 | }
/Users/admin/builder/spi-builder-workspace/Sources/Revnix/PaywallBlocks.swift:544:69: warning: conditional downcast from 'String?' to 'String' does nothing
542 | return
543 | }
544 | let id = (try? c.decodeIfPresent(String.self, forKey: .id)) as? String ?? ""
| `- warning: conditional downcast from 'String?' to 'String' does nothing
545 | let style = try? c.decodeIfPresent(BlockStyle.self, forKey: .style)
546 | func string(_ key: Keys) -> String? { (try? c.decodeIfPresent(String.self, forKey: key)) ?? nil }
/Users/admin/builder/spi-builder-workspace/Sources/Revnix/PaywallBlocks.swift:573:83: warning: conditional downcast from '[ListItem]?' to '[ListItem]' does nothing
571 | ))
572 | case "list":
573 | let items = (try? c.decodeIfPresent([ListItem].self, forKey: .items)) as? [ListItem] ?? []
| `- warning: conditional downcast from '[ListItem]?' to '[ListItem]' does nothing
574 | self = .list(ListBlock(
575 | id: id, items: items, iconColor: string(.iconColor), style: style,
/Users/admin/builder/spi-builder-workspace/Sources/Revnix/PaywallBlocks.swift:606:93: warning: conditional downcast from '[PaywallBlock]?' to '[PaywallBlock]' does nothing
604 | ))
605 | case "card":
606 | let children = (try? c.decodeIfPresent([PaywallBlock].self, forKey: .children)) as? [PaywallBlock] ?? []
| `- warning: conditional downcast from '[PaywallBlock]?' to '[PaywallBlock]' does nothing
607 | let columns = (try? c.decodeIfPresent(Int.self, forKey: .columns)) as? Int
608 | let index = (try? c.decodeIfPresent(Int.self, forKey: .packageIndex)) as? Int
/Users/admin/builder/spi-builder-workspace/Sources/Revnix/PaywallBlocks.swift:607:80: warning: conditional downcast from 'Int?' to 'Int' does nothing
605 | case "card":
606 | let children = (try? c.decodeIfPresent([PaywallBlock].self, forKey: .children)) as? [PaywallBlock] ?? []
607 | let columns = (try? c.decodeIfPresent(Int.self, forKey: .columns)) as? Int
| `- warning: conditional downcast from 'Int?' to 'Int' does nothing
608 | let index = (try? c.decodeIfPresent(Int.self, forKey: .packageIndex)) as? Int
609 | self = .card(CardBlock(
/Users/admin/builder/spi-builder-workspace/Sources/Revnix/PaywallBlocks.swift:608:83: warning: conditional downcast from 'Int?' to 'Int' does nothing
606 | let children = (try? c.decodeIfPresent([PaywallBlock].self, forKey: .children)) as? [PaywallBlock] ?? []
607 | let columns = (try? c.decodeIfPresent(Int.self, forKey: .columns)) as? Int
608 | let index = (try? c.decodeIfPresent(Int.self, forKey: .packageIndex)) as? Int
| `- warning: conditional downcast from 'Int?' to 'Int' does nothing
609 | self = .card(CardBlock(
610 | id: id, layout: string(.layout), autoAdvance: int(.autoAdvance), repeatMode: string(.repeat),
/Users/admin/builder/spi-builder-workspace/Sources/Revnix/PaywallBlocks.swift:817:73: warning: conditional downcast from 'Int?' to 'Int' does nothing
815 | }
816 | self.screens = screens
817 | version = ((try? c.decodeIfPresent(Int.self, forKey: .version)) as? Int) ?? 1
| `- warning: conditional downcast from 'Int?' to 'Int' does nothing
818 | layout = try? c.decodeIfPresent(String.self, forKey: .layout)
819 | // `background` is a plain string in the original form and an object in
/Users/admin/builder/spi-builder-workspace/Sources/Revnix/PaywallBlocks.swift:826:80: warning: conditional downcast from 'String?' to 'String' does nothing
824 | backgroundSpec = spec
825 | background = revnixBackgroundGround(spec) ?? "#000000"
826 | textColor = ((try? c.decodeIfPresent(String.self, forKey: .textColor)) as? String) ?? "#FFFFFF"
| `- warning: conditional downcast from 'String?' to 'String' does nothing
827 | accent = ((try? c.decodeIfPresent(String.self, forKey: .accent)) as? String) ?? "#6478ff"
828 | accentInk = ((try? c.decodeIfPresent(String.self, forKey: .accentInk)) as? String) ?? "#FFFFFF"
/Users/admin/builder/spi-builder-workspace/Sources/Revnix/PaywallBlocks.swift:827:74: warning: conditional downcast from 'String?' to 'String' does nothing
825 | background = revnixBackgroundGround(spec) ?? "#000000"
826 | textColor = ((try? c.decodeIfPresent(String.self, forKey: .textColor)) as? String) ?? "#FFFFFF"
827 | accent = ((try? c.decodeIfPresent(String.self, forKey: .accent)) as? String) ?? "#6478ff"
| `- warning: conditional downcast from 'String?' to 'String' does nothing
828 | accentInk = ((try? c.decodeIfPresent(String.self, forKey: .accentInk)) as? String) ?? "#FFFFFF"
829 | fontFamily = try? c.decodeIfPresent(String.self, forKey: .fontFamily)
/Users/admin/builder/spi-builder-workspace/Sources/Revnix/PaywallBlocks.swift:828:80: warning: conditional downcast from 'String?' to 'String' does nothing
826 | textColor = ((try? c.decodeIfPresent(String.self, forKey: .textColor)) as? String) ?? "#FFFFFF"
827 | accent = ((try? c.decodeIfPresent(String.self, forKey: .accent)) as? String) ?? "#6478ff"
828 | accentInk = ((try? c.decodeIfPresent(String.self, forKey: .accentInk)) as? String) ?? "#FFFFFF"
| `- warning: conditional downcast from 'String?' to 'String' does nothing
829 | fontFamily = try? c.decodeIfPresent(String.self, forKey: .fontFamily)
830 | // REV-271: a malformed table costs the translations, never the
[15/22] Compiling Revnix PaywallBlocks.swift
/Users/admin/builder/spi-builder-workspace/Sources/Revnix/PaywallBlocks.swift:347:71: warning: conditional downcast from 'String?' to 'String' does nothing
345 | let c = try decoder.container(keyedBy: CodingKeys.self)
346 | icon = try? c.decodeIfPresent(String.self, forKey: .icon)
347 | title = (try? c.decodeIfPresent(String.self, forKey: .title)) as? String ?? ""
| `- warning: conditional downcast from 'String?' to 'String' does nothing
348 | description = try? c.decodeIfPresent(String.self, forKey: .description)
349 | }
/Users/admin/builder/spi-builder-workspace/Sources/Revnix/PaywallBlocks.swift:544:69: warning: conditional downcast from 'String?' to 'String' does nothing
542 | return
543 | }
544 | let id = (try? c.decodeIfPresent(String.self, forKey: .id)) as? String ?? ""
| `- warning: conditional downcast from 'String?' to 'String' does nothing
545 | let style = try? c.decodeIfPresent(BlockStyle.self, forKey: .style)
546 | func string(_ key: Keys) -> String? { (try? c.decodeIfPresent(String.self, forKey: key)) ?? nil }
/Users/admin/builder/spi-builder-workspace/Sources/Revnix/PaywallBlocks.swift:573:83: warning: conditional downcast from '[ListItem]?' to '[ListItem]' does nothing
571 | ))
572 | case "list":
573 | let items = (try? c.decodeIfPresent([ListItem].self, forKey: .items)) as? [ListItem] ?? []
| `- warning: conditional downcast from '[ListItem]?' to '[ListItem]' does nothing
574 | self = .list(ListBlock(
575 | id: id, items: items, iconColor: string(.iconColor), style: style,
/Users/admin/builder/spi-builder-workspace/Sources/Revnix/PaywallBlocks.swift:606:93: warning: conditional downcast from '[PaywallBlock]?' to '[PaywallBlock]' does nothing
604 | ))
605 | case "card":
606 | let children = (try? c.decodeIfPresent([PaywallBlock].self, forKey: .children)) as? [PaywallBlock] ?? []
| `- warning: conditional downcast from '[PaywallBlock]?' to '[PaywallBlock]' does nothing
607 | let columns = (try? c.decodeIfPresent(Int.self, forKey: .columns)) as? Int
608 | let index = (try? c.decodeIfPresent(Int.self, forKey: .packageIndex)) as? Int
/Users/admin/builder/spi-builder-workspace/Sources/Revnix/PaywallBlocks.swift:607:80: warning: conditional downcast from 'Int?' to 'Int' does nothing
605 | case "card":
606 | let children = (try? c.decodeIfPresent([PaywallBlock].self, forKey: .children)) as? [PaywallBlock] ?? []
607 | let columns = (try? c.decodeIfPresent(Int.self, forKey: .columns)) as? Int
| `- warning: conditional downcast from 'Int?' to 'Int' does nothing
608 | let index = (try? c.decodeIfPresent(Int.self, forKey: .packageIndex)) as? Int
609 | self = .card(CardBlock(
/Users/admin/builder/spi-builder-workspace/Sources/Revnix/PaywallBlocks.swift:608:83: warning: conditional downcast from 'Int?' to 'Int' does nothing
606 | let children = (try? c.decodeIfPresent([PaywallBlock].self, forKey: .children)) as? [PaywallBlock] ?? []
607 | let columns = (try? c.decodeIfPresent(Int.self, forKey: .columns)) as? Int
608 | let index = (try? c.decodeIfPresent(Int.self, forKey: .packageIndex)) as? Int
| `- warning: conditional downcast from 'Int?' to 'Int' does nothing
609 | self = .card(CardBlock(
610 | id: id, layout: string(.layout), autoAdvance: int(.autoAdvance), repeatMode: string(.repeat),
/Users/admin/builder/spi-builder-workspace/Sources/Revnix/PaywallBlocks.swift:817:73: warning: conditional downcast from 'Int?' to 'Int' does nothing
815 | }
816 | self.screens = screens
817 | version = ((try? c.decodeIfPresent(Int.self, forKey: .version)) as? Int) ?? 1
| `- warning: conditional downcast from 'Int?' to 'Int' does nothing
818 | layout = try? c.decodeIfPresent(String.self, forKey: .layout)
819 | // `background` is a plain string in the original form and an object in
/Users/admin/builder/spi-builder-workspace/Sources/Revnix/PaywallBlocks.swift:826:80: warning: conditional downcast from 'String?' to 'String' does nothing
824 | backgroundSpec = spec
825 | background = revnixBackgroundGround(spec) ?? "#000000"
826 | textColor = ((try? c.decodeIfPresent(String.self, forKey: .textColor)) as? String) ?? "#FFFFFF"
| `- warning: conditional downcast from 'String?' to 'String' does nothing
827 | accent = ((try? c.decodeIfPresent(String.self, forKey: .accent)) as? String) ?? "#6478ff"
828 | accentInk = ((try? c.decodeIfPresent(String.self, forKey: .accentInk)) as? String) ?? "#FFFFFF"
/Users/admin/builder/spi-builder-workspace/Sources/Revnix/PaywallBlocks.swift:827:74: warning: conditional downcast from 'String?' to 'String' does nothing
825 | background = revnixBackgroundGround(spec) ?? "#000000"
826 | textColor = ((try? c.decodeIfPresent(String.self, forKey: .textColor)) as? String) ?? "#FFFFFF"
827 | accent = ((try? c.decodeIfPresent(String.self, forKey: .accent)) as? String) ?? "#6478ff"
| `- warning: conditional downcast from 'String?' to 'String' does nothing
828 | accentInk = ((try? c.decodeIfPresent(String.self, forKey: .accentInk)) as? String) ?? "#FFFFFF"
829 | fontFamily = try? c.decodeIfPresent(String.self, forKey: .fontFamily)
/Users/admin/builder/spi-builder-workspace/Sources/Revnix/PaywallBlocks.swift:828:80: warning: conditional downcast from 'String?' to 'String' does nothing
826 | textColor = ((try? c.decodeIfPresent(String.self, forKey: .textColor)) as? String) ?? "#FFFFFF"
827 | accent = ((try? c.decodeIfPresent(String.self, forKey: .accent)) as? String) ?? "#6478ff"
828 | accentInk = ((try? c.decodeIfPresent(String.self, forKey: .accentInk)) as? String) ?? "#FFFFFF"
| `- warning: conditional downcast from 'String?' to 'String' does nothing
829 | fontFamily = try? c.decodeIfPresent(String.self, forKey: .fontFamily)
830 | // REV-271: a malformed table costs the translations, never the
[16/22] Compiling Revnix Models.swift
[17/22] Compiling Revnix PaywallBackground.swift
[18/22] Compiling Revnix DeviceFacts.swift
[19/22] Compiling Revnix ImplicitPlacements.swift
[20/22] Compiling Revnix RevnixPaywallView.swift
[21/22] Compiling Revnix Skan.swift
[22/22] Emitting module Revnix
Build complete! (12.82s)
Build complete.
{
"dependencies" : [
],
"manifest_display_name" : "Revnix",
"name" : "Revnix",
"path" : "/Users/admin/builder/spi-builder-workspace",
"platforms" : [
{
"name" : "ios",
"version" : "16.0"
},
{
"name" : "macos",
"version" : "13.0"
},
{
"name" : "tvos",
"version" : "16.0"
},
{
"name" : "watchos",
"version" : "9.0"
}
],
"products" : [
{
"name" : "Revnix",
"targets" : [
"Revnix"
],
"type" : {
"library" : [
"automatic"
]
}
}
],
"targets" : [
{
"c99name" : "RevnixTests",
"module_type" : "SwiftTarget",
"name" : "RevnixTests",
"path" : "Tests/RevnixTests",
"resources" : [
{
"path" : "/Users/admin/builder/spi-builder-workspace/Tests/RevnixTests/Resources/Revnix.storekit",
"rule" : {
"copy" : {
}
}
},
{
"path" : "/Users/admin/builder/spi-builder-workspace/Tests/RevnixTests/Resources/paywall-background-wire.json",
"rule" : {
"copy" : {
}
}
},
{
"path" : "/Users/admin/builder/spi-builder-workspace/Tests/RevnixTests/Resources/paywall-selection-wire.json",
"rule" : {
"copy" : {
}
}
}
],
"sources" : [
"AttributionTests.swift",
"DeepLinkPrivacyTests.swift",
"ImplicitPlacementTests.swift",
"PaywallBackgroundTests.swift",
"PaywallBlockFillTests.swift",
"PaywallBlockGeometryTests.swift",
"PaywallBlockTests.swift",
"PaywallLocalizationTests.swift",
"PaywallSelectionWireTests.swift",
"PreviewTests.swift",
"PrivacyManifestTests.swift",
"RevnixClientTests.swift",
"SkanTests.swift",
"StoreKitIntegrationTests.swift",
"TrackingTests.swift"
],
"target_dependencies" : [
"Revnix"
],
"type" : "test"
},
{
"c99name" : "Revnix",
"module_type" : "SwiftTarget",
"name" : "Revnix",
"path" : "Sources/Revnix",
"product_memberships" : [
"Revnix"
],
"resources" : [
{
"path" : "/Users/admin/builder/spi-builder-workspace/Sources/Revnix/PrivacyInfo.xcprivacy",
"rule" : {
"copy" : {
}
}
}
],
"sources" : [
"DeviceFacts.swift",
"ImplicitPlacements.swift",
"Models.swift",
"PaywallBackground.swift",
"PaywallBlockGeometry.swift",
"PaywallBlocks.swift",
"PaywallLocalization.swift",
"PaywallRenderRules.swift",
"RevnixClient.swift",
"RevnixConfig.swift",
"RevnixError.swift",
"RevnixPaywallBlockView.swift",
"RevnixPaywallView.swift",
"Skan.swift",
"Storage.swift",
"StoreKitGlue.swift",
"Tracking.swift"
],
"type" : "library"
}
],
"tools_version" : "5.9"
}
Done.