Build Information
Successful build of Revnix, reference main (1ef8e2), with Swift 6.4 for macOS (SPM) on 1 Nov 2026 05:23:48 UTC.
Swift 6 data race errors: 0
Build Command
env DEVELOPER_DIR=/Applications/Xcode-27.0.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: main
Initialized empty Git repository in /Users/admin/builder/spi-builder-workspace/.git/
From https://github.com/Oth-tech/RevnixSDK-iOS
* branch main -> FETCH_HEAD
* [new branch] main -> origin/main
HEAD is now at 1ef8e2a Merge pull request #71 from Oth-tech/docs-audit
Cloned https://github.com/Oth-tech/RevnixSDK-iOS.git
Revision (git rev-parse @):
1ef8e2aec6b695f6d1af3acbce89ea39d7ab4bff
SPI manifest file found: $PWD/.spi.yml
SUCCESS checkout https://github.com/Oth-tech/RevnixSDK-iOS.git at main
========================================
ResolveProductDependencies
========================================
Resolving dependencies ...
{
"identity": ".resolve-product-dependencies",
"name": "resolve-dependencies",
"url": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies",
"version": "unspecified",
"path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies",
"traits": [
"default"
],
"dependencies": [
{
"identity": "revnixsdk-ios",
"name": "Revnix",
"url": "https://github.com/Oth-tech/RevnixSDK-iOS.git",
"version": "unspecified",
"path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies/.build/checkouts/RevnixSDK-iOS",
"traits": [
"default"
],
"dependencies": [
]
}
]
}
Fetching https://github.com/Oth-tech/RevnixSDK-iOS.git
[1/758] Fetching revnixsdk-ios
Fetched https://github.com/Oth-tech/RevnixSDK-iOS.git (1.26s)
Creating working copy for https://github.com/Oth-tech/RevnixSDK-iOS.git
Working copy of https://github.com/Oth-tech/RevnixSDK-iOS.git resolved at main (1ef8e2a)
warning: '.resolve-product-dependencies': dependency 'revnixsdk-ios' is not used by any target
Found 0 product dependencies
========================================
Build
========================================
Selected platform: macosSpm
Swift version: 6.4
Building package at path: $PWD
https://github.com/Oth-tech/RevnixSDK-iOS.git
Running build ...
env DEVELOPER_DIR=/Applications/Xcode-27.0.0.app xcrun swift build --arch arm64
Building for debugging...
[Pre-planning 1 / 124]
[Planning deferred tasks]
[42 / 55] Revnix_Revnix
[46 / 55]
[47 / 56] Revnix
[57 / 150]
[61 / 150]
[69 / 150]
[71 / 150]
[72 / 150]
[77 / 150]
[79 / 150]
[81 / 150]
[85 / 150]
[90 / 150]
[93 / 150]
[95 / 150]
[96 / 150]
[108 / 150]
[116 / 150]
[117 / 150]
[122 / 150]
[127 / 150]
[128 / 150]
[141 / 150] Revnix
[142 / 150] Revnix
[147 / 150] Revnix
Build complete! (17.17 sec)
/Users/admin/builder/spi-builder-workspace/Sources/Revnix/PaywallBlocks.swift:347:71: [1;33mwarning: [1;39mconditional downcast from 'String?' to 'String' does nothing[0;0m
[0;36m345 |[0;0m let c = try decoder.container(keyedBy: CodingKeys.self)
[0;36m346 |[0;0m icon = try? c.decodeIfPresent(String.self, forKey: .icon)
[0;36m347 |[0;0m title = [4;39m(try? c.decodeIfPresent(String.self, forKey: .title))[0;0m as? [4;39mString[0;0m ?? ""
[0;36m|[0;0m `- [1;33mwarning: [1;39mconditional downcast from 'String?' to 'String' does nothing[0;0m
[0;36m348 |[0;0m description = try? c.decodeIfPresent(String.self, forKey: .description)
[0;36m349 |[0;0m }
/Users/admin/builder/spi-builder-workspace/Sources/Revnix/PaywallBlocks.swift:544:69: [1;33mwarning: [1;39mconditional downcast from 'String?' to 'String' does nothing[0;0m
[0;36m542 |[0;0m return
[0;36m543 |[0;0m }
[0;36m544 |[0;0m let id = [4;39m(try? c.decodeIfPresent(String.self, forKey: .id))[0;0m as? [4;39mString[0;0m ?? ""
[0;36m|[0;0m `- [1;33mwarning: [1;39mconditional downcast from 'String?' to 'String' does nothing[0;0m
[0;36m545 |[0;0m let style = try? c.decodeIfPresent(BlockStyle.self, forKey: .style)
[0;36m546 |[0;0m 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: [1;33mwarning: [1;39mconditional downcast from '[ListItem]?' to '[ListItem]' does nothing[0;0m
[0;36m571 |[0;0m ))
[0;36m572 |[0;0m case "list":
[0;36m573 |[0;0m let items = [4;39m(try? c.decodeIfPresent([ListItem].self, forKey: .items))[0;0m as? [4;39m[ListItem][0;0m ?? []
[0;36m|[0;0m `- [1;33mwarning: [1;39mconditional downcast from '[ListItem]?' to '[ListItem]' does nothing[0;0m
[0;36m574 |[0;0m self = .list(ListBlock(
[0;36m575 |[0;0m id: id, items: items, iconColor: string(.iconColor), style: style,
/Users/admin/builder/spi-builder-workspace/Sources/Revnix/PaywallBlocks.swift:606:93: [1;33mwarning: [1;39mconditional downcast from '[PaywallBlock]?' to '[PaywallBlock]' does nothing[0;0m
[0;36m604 |[0;0m ))
[0;36m605 |[0;0m case "card":
[0;36m606 |[0;0m let children = [4;39m(try? c.decodeIfPresent([PaywallBlock].self, forKey: .children))[0;0m as? [4;39m[PaywallBlock][0;0m ?? []
[0;36m|[0;0m `- [1;33mwarning: [1;39mconditional downcast from '[PaywallBlock]?' to '[PaywallBlock]' does nothing[0;0m
[0;36m607 |[0;0m let columns = (try? c.decodeIfPresent(Int.self, forKey: .columns)) as? Int
[0;36m608 |[0;0m let index = (try? c.decodeIfPresent(Int.self, forKey: .packageIndex)) as? Int
/Users/admin/builder/spi-builder-workspace/Sources/Revnix/PaywallBlocks.swift:607:80: [1;33mwarning: [1;39mconditional downcast from 'Int?' to 'Int' does nothing[0;0m
[0;36m605 |[0;0m case "card":
[0;36m606 |[0;0m let children = (try? c.decodeIfPresent([PaywallBlock].self, forKey: .children)) as? [PaywallBlock] ?? []
[0;36m607 |[0;0m let columns = [4;39m(try? c.decodeIfPresent(Int.self, forKey: .columns))[0;0m as? [4;39mInt[0;0m
[0;36m|[0;0m `- [1;33mwarning: [1;39mconditional downcast from 'Int?' to 'Int' does nothing[0;0m
[0;36m608 |[0;0m let index = (try? c.decodeIfPresent(Int.self, forKey: .packageIndex)) as? Int
[0;36m609 |[0;0m self = .card(CardBlock(
/Users/admin/builder/spi-builder-workspace/Sources/Revnix/PaywallBlocks.swift:608:83: [1;33mwarning: [1;39mconditional downcast from 'Int?' to 'Int' does nothing[0;0m
[0;36m606 |[0;0m let children = (try? c.decodeIfPresent([PaywallBlock].self, forKey: .children)) as? [PaywallBlock] ?? []
[0;36m607 |[0;0m let columns = (try? c.decodeIfPresent(Int.self, forKey: .columns)) as? Int
[0;36m608 |[0;0m let index = [4;39m(try? c.decodeIfPresent(Int.self, forKey: .packageIndex))[0;0m as? [4;39mInt[0;0m
[0;36m|[0;0m `- [1;33mwarning: [1;39mconditional downcast from 'Int?' to 'Int' does nothing[0;0m
[0;36m609 |[0;0m self = .card(CardBlock(
[0;36m610 |[0;0m id: id, layout: string(.layout), autoAdvance: int(.autoAdvance), repeatMode: string(.repeat),
/Users/admin/builder/spi-builder-workspace/Sources/Revnix/PaywallBlocks.swift:817:73: [1;33mwarning: [1;39mconditional downcast from 'Int?' to 'Int' does nothing[0;0m
[0;36m815 |[0;0m }
[0;36m816 |[0;0m self.screens = screens
[0;36m817 |[0;0m version = ([4;39m(try? c.decodeIfPresent(Int.self, forKey: .version))[0;0m as? [4;39mInt[0;0m) ?? 1
[0;36m|[0;0m `- [1;33mwarning: [1;39mconditional downcast from 'Int?' to 'Int' does nothing[0;0m
[0;36m818 |[0;0m layout = try? c.decodeIfPresent(String.self, forKey: .layout)
[0;36m819 |[0;0m // `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: [1;33mwarning: [1;39mconditional downcast from 'String?' to 'String' does nothing[0;0m
[0;36m824 |[0;0m backgroundSpec = spec
[0;36m825 |[0;0m background = revnixBackgroundGround(spec) ?? "#000000"
[0;36m826 |[0;0m textColor = ([4;39m(try? c.decodeIfPresent(String.self, forKey: .textColor))[0;0m as? [4;39mString[0;0m) ?? "#FFFFFF"
[0;36m|[0;0m `- [1;33mwarning: [1;39mconditional downcast from 'String?' to 'String' does nothing[0;0m
[0;36m827 |[0;0m accent = ((try? c.decodeIfPresent(String.self, forKey: .accent)) as? String) ?? "#6478ff"
[0;36m828 |[0;0m accentInk = ((try? c.decodeIfPresent(String.self, forKey: .accentInk)) as? String) ?? "#FFFFFF"
/Users/admin/builder/spi-builder-workspace/Sources/Revnix/PaywallBlocks.swift:827:74: [1;33mwarning: [1;39mconditional downcast from 'String?' to 'String' does nothing[0;0m
[0;36m825 |[0;0m background = revnixBackgroundGround(spec) ?? "#000000"
[0;36m826 |[0;0m textColor = ((try? c.decodeIfPresent(String.self, forKey: .textColor)) as? String) ?? "#FFFFFF"
[0;36m827 |[0;0m accent = ([4;39m(try? c.decodeIfPresent(String.self, forKey: .accent))[0;0m as? [4;39mString[0;0m) ?? "#6478ff"
[0;36m|[0;0m `- [1;33mwarning: [1;39mconditional downcast from 'String?' to 'String' does nothing[0;0m
[0;36m828 |[0;0m accentInk = ((try? c.decodeIfPresent(String.self, forKey: .accentInk)) as? String) ?? "#FFFFFF"
[0;36m829 |[0;0m fontFamily = try? c.decodeIfPresent(String.self, forKey: .fontFamily)
/Users/admin/builder/spi-builder-workspace/Sources/Revnix/PaywallBlocks.swift:828:80: [1;33mwarning: [1;39mconditional downcast from 'String?' to 'String' does nothing[0;0m
[0;36m826 |[0;0m textColor = ((try? c.decodeIfPresent(String.self, forKey: .textColor)) as? String) ?? "#FFFFFF"
[0;36m827 |[0;0m accent = ((try? c.decodeIfPresent(String.self, forKey: .accent)) as? String) ?? "#6478ff"
[0;36m828 |[0;0m accentInk = ([4;39m(try? c.decodeIfPresent(String.self, forKey: .accentInk))[0;0m as? [4;39mString[0;0m) ?? "#FFFFFF"
[0;36m|[0;0m `- [1;33mwarning: [1;39mconditional downcast from 'String?' to 'String' does nothing[0;0m
[0;36m829 |[0;0m fontFamily = try? c.decodeIfPresent(String.self, forKey: .fontFamily)
[0;36m830 |[0;0m // REV-271: a malformed table costs the translations, never the
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.