- Fix BeaconShardPool: replace all 64 UUIDs to match Android + migration.sql (iOS had a completely different set of UUIDs — would cause shard resolution failures) - Add frames 3-6 disable to write sequence (16 → 24 steps, matches Android's DXSmartProvisioner.writeBeaconConfig() exactly) - Add CLAUDE.md with full project docs, API endpoints, protocol reference Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
108 lines
4.5 KiB
Swift
108 lines
4.5 KiB
Swift
import Foundation
|
|
import CoreLocation
|
|
|
|
/// Static list of Payfrit shard UUIDs for iBeacon scanning.
|
|
///
|
|
/// Apps scan for ALL these UUIDs. The backend handles resolution.
|
|
/// If we need more capacity, ship more UUIDs in a future app version.
|
|
enum BeaconShardPool {
|
|
|
|
/// All Payfrit shard UUIDs as strings (from BeaconShards database table).
|
|
/// Must match Android BeaconShardPool.kt and migration.sql exactly.
|
|
static let uuidStrings: [String] = [
|
|
"f7826da6-4fa2-4e98-8024-bc5b71e0893e",
|
|
"2f234454-cf6d-4a0f-adf2-f4911ba9ffa6",
|
|
"b9407f30-f5f8-466e-aff9-25556b57fe6d",
|
|
"e2c56db5-dffb-48d2-b060-d0f5a71096e0",
|
|
"d0d3fa86-ca76-45ec-9bd9-6af4fac1e268",
|
|
"a7ae2eb7-1f00-4168-b99b-a749bac36c92",
|
|
"8deefbb9-f738-4297-8040-96668bb44281",
|
|
"5a4bcfce-174e-4bac-a814-092978f50e04",
|
|
"74278bda-b644-4520-8f0c-720eaf059935",
|
|
"e7eb6d67-2b4f-4c1b-8b6e-8c3b3f5d8b9a",
|
|
"1f3c5d7e-9a2b-4c8d-ae6f-0b1c2d3e4f5a",
|
|
"a1b2c3d4-e5f6-4789-abcd-ef0123456789",
|
|
"98765432-10fe-4cba-9876-543210fedcba",
|
|
"deadbeef-cafe-4bab-dead-beefcafebabe",
|
|
"c0ffee00-dead-4bee-f000-ba5eba11fade",
|
|
"0a1b2c3d-4e5f-4a6b-7c8d-9e0f1a2b3c4d",
|
|
"12345678-90ab-4def-1234-567890abcdef",
|
|
"fedcba98-7654-4210-fedc-ba9876543210",
|
|
"abcd1234-ef56-4789-abcd-1234ef567890",
|
|
"11111111-2222-4333-4444-555566667777",
|
|
"88889999-aaaa-4bbb-cccc-ddddeeeeefff",
|
|
"01234567-89ab-4cde-f012-3456789abcde",
|
|
"a0a0a0a0-b1b1-4c2c-d3d3-e4e4e4e4f5f5",
|
|
"f0e0d0c0-b0a0-4908-0706-050403020100",
|
|
"13579bdf-2468-4ace-1357-9bdf2468ace0",
|
|
"fdb97531-eca8-4642-0fdb-97531eca8642",
|
|
"aabbccdd-eeff-4011-2233-445566778899",
|
|
"99887766-5544-4332-2110-ffeeddccbbaa",
|
|
"a1a2a3a4-b5b6-4c7c-8d9d-e0e1f2f3f4f5",
|
|
"5f4f3f2f-1f0f-4efe-dfcf-bfaf9f8f7f6f",
|
|
"00112233-4455-4667-7889-9aabbccddeef",
|
|
"feeddccb-baa9-4887-7665-5443322110ff",
|
|
"1a2b3c4d-5e6f-4a0b-1c2d-3e4f5a6b7c8d",
|
|
"d8c7b6a5-9483-4726-1504-f3e2d1c0b9a8",
|
|
"0f1e2d3c-4b5a-4697-8879-6a5b4c3d2e1f",
|
|
"f1e2d3c4-b5a6-4978-8697-a5b4c3d2e1f0",
|
|
"12ab34cd-56ef-4789-0abc-def123456789",
|
|
"987654fe-dcba-4098-7654-321fedcba098",
|
|
"abcdef01-2345-4678-9abc-def012345678",
|
|
"876543fe-dcba-4210-9876-543fedcba210",
|
|
"0a0b0c0d-0e0f-4101-1121-314151617181",
|
|
"91a1b1c1-d1e1-4f10-2030-405060708090",
|
|
"a0b1c2d3-e4f5-4a6b-7c8d-9e0f1a2b3c4d",
|
|
"d4c3b2a1-0f9e-48d7-c6b5-a49382716050",
|
|
"50607080-90a0-4b0c-0d0e-0f1011121314",
|
|
"14131211-100f-4e0d-0c0b-0a0908070605",
|
|
"a1b2c3d4-e5f6-4718-293a-4b5c6d7e8f90",
|
|
"09f8e7d6-c5b4-4a39-2817-0615f4e3d2c1",
|
|
"11223344-5566-4778-899a-abbccddeeff0",
|
|
"ffeeddc0-bbaa-4988-7766-554433221100",
|
|
"a1a1b2b2-c3c3-4d4d-e5e5-f6f6a7a7b8b8",
|
|
"b8b8a7a7-f6f6-4e5e-5d4d-4c3c3b2b2a1a",
|
|
"12341234-5678-4567-89ab-89abcdefcdef",
|
|
"fedcfedc-ba98-4ba9-8765-87654321d321",
|
|
"0a1a2a3a-4a5a-4a6a-7a8a-9aaabacadaea",
|
|
"eadacaba-aa9a-48a7-a6a5-a4a3a2a1a0af",
|
|
"01020304-0506-4708-090a-0b0c0d0e0f10",
|
|
"100f0e0d-0c0b-4a09-0807-060504030201",
|
|
"aabbccdd-1122-4334-4556-6778899aabbc",
|
|
"cbba9988-7766-4554-4332-2110ddccbbaa",
|
|
"f0f1f2f3-f4f5-4f6f-7f8f-9fafbfcfdfef",
|
|
"efdfcfbf-af9f-48f7-f6f5-f4f3f2f1f0ee",
|
|
"a0a1a2a3-a4a5-4a6a-7a8a-9a0b1b2b3b4b",
|
|
"4b3b2b1b-0a9a-48a7-a6a5-a4a3a2a1a0ff"
|
|
]
|
|
|
|
/// All Payfrit shard UUIDs as UUID objects.
|
|
static let uuids: [UUID] = uuidStrings.compactMap { UUID(uuidString: $0) }
|
|
|
|
/// Check if a UUID is a Payfrit shard.
|
|
static func isPayfrit(_ uuid: UUID) -> Bool {
|
|
return uuids.contains(uuid)
|
|
}
|
|
|
|
/// Check if a UUID string is a Payfrit shard.
|
|
static func isPayfrit(_ uuidString: String) -> Bool {
|
|
guard let uuid = UUID(uuidString: uuidString) else { return false }
|
|
return isPayfrit(uuid)
|
|
}
|
|
|
|
/// Create CLBeaconRegions for all Payfrit shards (for ranging).
|
|
static func createRegions() -> [CLBeaconRegion] {
|
|
return uuids.enumerated().map { index, uuid in
|
|
CLBeaconRegion(uuid: uuid, identifier: "payfrit-shard-\(index)")
|
|
}
|
|
}
|
|
|
|
/// Create a CLBeaconRegion for a specific business (for background monitoring).
|
|
static func createBusinessRegion(uuid: UUID, major: UInt16) -> CLBeaconRegion {
|
|
return CLBeaconRegion(
|
|
uuid: uuid,
|
|
major: CLBeaconMajorValue(major),
|
|
identifier: "payfrit-business-\(major)"
|
|
)
|
|
}
|
|
}
|