feat(ios): W0 scaffold + day-1 spike + WireProtocol frozen contract + TestSupport doubles
T-iOS-1: ios/ XcodeGen project (iOS 17, Swift 6 strict concurrency, ATS per PLAN §5.2), 5 SPM package shells, CI skeleton T-iOS-2: Origin spike vs real server — URLSessionWebSocketTask custom Origin CONFIRMED (no Starscream); 16MiB replay + EMSGSIZE(40) errno correction written back to plan T-iOS-3: WireProtocol frozen contract, 59 tests, 100% line coverage, cross-impl vectors vs src/protocol.ts via tsx T-iOS-4: FakeTransport/FakeClock/FakeHTTPTransport doubles Verify: independent agent re-ran all acceptance — 6/6 PASS
This commit is contained in:
24
ios/Packages/SessionCore/Package.swift
Normal file
24
ios/Packages/SessionCore/Package.swift
Normal file
@@ -0,0 +1,24 @@
|
||||
// swift-tools-version: 6.0
|
||||
// T-iOS-1 scaffold shell. SessionEngine / ReconnectMachine / PingScheduler /
|
||||
// GateState / AwayDigest / URLSessionTermTransport land in W1–W2 tasks.
|
||||
// Dependency direction is strictly downward: SessionCore → WireProtocol only.
|
||||
import PackageDescription
|
||||
|
||||
let package = Package(
|
||||
name: "SessionCore",
|
||||
platforms: [.iOS(.v17), .macOS(.v14)],
|
||||
products: [
|
||||
.library(name: "SessionCore", targets: ["SessionCore"]),
|
||||
],
|
||||
dependencies: [
|
||||
.package(path: "../WireProtocol"),
|
||||
],
|
||||
targets: [
|
||||
.target(
|
||||
name: "SessionCore",
|
||||
dependencies: [.product(name: "WireProtocol", package: "WireProtocol")]
|
||||
),
|
||||
.testTarget(name: "SessionCoreTests", dependencies: ["SessionCore"]),
|
||||
],
|
||||
swiftLanguageModes: [.v6]
|
||||
)
|
||||
@@ -0,0 +1,13 @@
|
||||
import WireProtocol
|
||||
|
||||
/// T-iOS-1 scaffold placeholder.
|
||||
///
|
||||
/// Real modules land in their owning tasks: ReconnectMachine + PingScheduler
|
||||
/// (T-iOS-5), GateState + AwayDigest (T-iOS-6), URLSessionTermTransport
|
||||
/// (T-iOS-9), SessionEngine + SessionEvent (T-iOS-10), KeyByteMap (T-iOS-11).
|
||||
public enum SessionCorePackage {
|
||||
/// Package identity marker consumed by the scaffold smoke test.
|
||||
public static let packageName = "SessionCore"
|
||||
/// Proves the single allowed dependency edge (SessionCore → WireProtocol) compiles.
|
||||
public static let contractPackageName = WireProtocolPackage.packageName
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
import Testing
|
||||
import SessionCore
|
||||
|
||||
@Test("脚手架:SessionCore 包可编译且依赖边 SessionCore→WireProtocol 成立")
|
||||
func sessionCorePackageIsImportableAndDependsOnWireProtocol() {
|
||||
// Arrange / Act
|
||||
let name = SessionCorePackage.packageName
|
||||
let contract = SessionCorePackage.contractPackageName
|
||||
|
||||
// Assert
|
||||
#expect(name == "SessionCore")
|
||||
#expect(contract == "WireProtocol")
|
||||
}
|
||||
Reference in New Issue
Block a user