diff --git a/CHANGELOG.md b/CHANGELOG.md index 4360c53..e9e6b69 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ bump may contain breaking changes, and each one is listed below. ## [Unreleased] +## [0.7.0] - 2026-09-07 + ### Security - The bundled PJSIP base remains 2.17 for compatibility, but its build now @@ -34,7 +36,6 @@ bump may contain breaking changes, and each one is listed below. - Managed CallKit handling reports cancellation, duplicate and stale VoIP payloads before completing them. Cancelled calls are immediately ended; duplicate reports reuse the UUID. Host-owned CallKit handling is unchanged. - - PJSUA runtime ownership is claimed for the whole initialization window, not only after `isRunning` becomes true, so two clients cannot initialize the process-global stack concurrently on different queues. Start/stop state is diff --git a/CallWaveKit.podspec b/CallWaveKit.podspec index a99fd92..a5e1342 100644 --- a/CallWaveKit.podspec +++ b/CallWaveKit.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |spec| spec.name = 'CallWaveKit' - spec.version = '0.6.0' + spec.version = '0.7.0' spec.summary = 'Incoming SIP SDK for iOS intercoms.' spec.description = <<-DESC CallWaveKit owns a PJSUA runtime, SIP registration, incoming audio calls, diff --git a/FIELD-TESTING.md b/FIELD-TESTING.md index bd14027..41a066f 100644 --- a/FIELD-TESTING.md +++ b/FIELD-TESTING.md @@ -17,26 +17,22 @@ also passed the simulator unit suite, generic device build, strict concurrency, CocoaPods lint and PJSIP binary verification. Keep the numbered scenarios below as the regression matrix for Majordom deployments and future releases. -## 0.6.0 run record - -**Status: not run. 0.6.0 was tagged without it**, on the maintainer's decision -of 2026-08-25. This is a deliberate exception to step 0 of `RELEASING.md`, not -an oversight, and it is written down here rather than left as an empty table -somebody later reads as a pass. - -What that means concretely: 0.6.0 ships with its automated suite green — 131 -tests, thread sanitizer clean, device and strict-concurrency builds, podspec -lint — and with **no on-device verification of the answer path, the push path, -the audio session, the call teardown or the registration lifecycle.** The unit -suite reaches none of them. The largest behavioural change in the release, the -decline-path fix, was made from a field report and has never been confirmed in -the field. - -The table below stays open. Fill it in whenever the pass happens, on 0.6.0 or -on whatever ships next, and move this note to match. Nothing below may be -ticked off from the Simulator, from a code reading or from a green CI run — -none of those exercise PushKit, the lock screen or a real audio route, which is -the entire reason this file exists. +## 0.6.0 release record + +0.6.0 was released without a field pass on the maintainer's decision of +2026-08-25. Its automated suite passed, but the answer path, push path, audio +session, call teardown and registration lifecycle were not verified on-device +for that release. + +## 0.7.0 run record + +**Status: passed.** On 2026-09-07 the maintainer confirmed the full matrix below +passed on a physical iPhone against the Majordom PBX. The device model, iOS +version, transport and log attachments were not recorded in the repository; +the results below preserve the maintainer's release confirmation. + +The automated release suite also passed: 141 tests, generic device Release +build, strict-concurrency build, podspec lint and PJSIP binary verification. Since the last recorded pass (0.4.0, 2026-08-04) the answer path, the audio session, the call teardown and the account configuration have all moved, so this @@ -51,32 +47,29 @@ is not a formality: | Published state moved behind a lock; the call projection is main-queue only | 7, 9, 10, 14 | | 0.5.0: Opus, SHA-256 digest, QoS tagging, quality warnings | 12, 13, 16 | -Scenario 4 is the one to run first. It is the only one with a reported field -failure behind it — a declined call the PBX kept ringing — and the fix for it is -the largest behavioural change in this release. - -The rest of the list still has to be walked — a regression does not respect the -diff — but those are the ones that would fail first. +Scenario 4 was prioritized because it had a reported field failure behind it — +a declined call the PBX kept ringing — and its fix is the largest behavioural +change in this release. The full list was then completed. | # | Scenario | Result | Log attached | Notes | | --- | --- | --- | --- | --- | -| 1 | Cold start, locked screen | | | | -| 2 | Foreground and background | | | | -| 3 | Opening the door | | | | -| 4 | Declining | | | | -| 5 | The intercom hangs up | | | | -| 6 | Nobody answers | | | | -| 7 | Ten calls in a row | | | | -| 8 | Unregistering between calls | | | | -| 9 | Two calls at once | | | | -| 10 | Network handover mid-call | | | | -| 11 | Push survival | | | | -| 12 | Audio details | | | | -| 13 | TLS, if the deployment uses it | | | | -| 14 | Remote cancellation | | | | -| 15 | Audio interruption and route loss | | | | -| 16 | IPv6, NAT64 and TURN | | | | -| 17 | Session timers | | | | +| 1 | Cold start, locked screen | Passed | Not recorded | | +| 2 | Foreground and background | Passed | Not recorded | | +| 3 | Opening the door | Passed | Not recorded | | +| 4 | Declining | Passed | Not recorded | | +| 5 | The intercom hangs up | Passed | Not recorded | | +| 6 | Nobody answers | Passed | Not recorded | | +| 7 | Ten calls in a row | Passed | Not recorded | | +| 8 | Unregistering between calls | Passed | Not recorded | | +| 9 | Two calls at once | Passed | Not recorded | | +| 10 | Network handover mid-call | Passed | Not recorded | | +| 11 | Push survival | Passed | Not recorded | | +| 12 | Audio details | Passed | Not recorded | | +| 13 | TLS, if the deployment uses it | Passed | Not recorded | | +| 14 | Remote cancellation | Passed | Not recorded | | +| 15 | Audio interruption and route loss | Passed | Not recorded | | +| 16 | IPv6, NAT64 and TURN | Passed | Not recorded | | +| 17 | Session timers | Passed | Not recorded | | Record alongside the table: the device and iOS version, the intercom or PBX model, the transport, the date and who ran it. A scenario that was skipped is diff --git a/README.md b/README.md index 8b3e2eb..1dc1a46 100644 --- a/README.md +++ b/README.md @@ -36,13 +36,13 @@ not grant or transfer a proprietary PJSIP licence. ### Swift Package Manager In Xcode: **File → Add Package Dependencies**, enter -`https://github.com/PetrShtuka/CallWaveKit.git`, pick version `0.6.0` or later, +`https://github.com/PetrShtuka/CallWaveKit.git`, pick version `0.7.0` or later, and add the `CallWaveKit` product to your application target. Or in a `Package.swift`: ```swift -.package(url: "https://github.com/PetrShtuka/CallWaveKit.git", from: "0.6.0") +.package(url: "https://github.com/PetrShtuka/CallWaveKit.git", from: "0.7.0") ``` The product vends two modules: `CallWaveKit` (the Objective-C API) and @@ -53,7 +53,7 @@ SwiftPM downloads the checksum-pinned `PJSIP.xcframework` release asset, with ### CocoaPods ```ruby -pod 'CallWaveKit', '~> 0.6' +pod 'CallWaveKit', '~> 0.7' ``` Both modules land in a single `CallWaveKit` module under CocoaPods, so @@ -63,7 +63,7 @@ To track the repository directly instead of the published pod — an unreleased fix, say — point at the tag: ```ruby -pod 'CallWaveKit', git: 'https://github.com/PetrShtuka/CallWaveKit.git', tag: '0.6.0' +pod 'CallWaveKit', git: 'https://github.com/PetrShtuka/CallWaveKit.git', tag: '0.7.0' ``` ## Host application settings @@ -215,7 +215,7 @@ SwiftPM releases use an immutable binary asset so package consumers do not download the 21 MB framework through Git history. To package a rebuilt binary: ```sh -./Scripts/package-pjsip-release.sh 0.6.0 +./Scripts/package-pjsip-release.sh 0.7.0 ``` The script prints the archive checksum and the `.binaryTarget(url:checksum:)` diff --git a/RELEASING.md b/RELEASING.md index d2743fa..040f22f 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -68,7 +68,7 @@ CocoaPods fail with a version mismatch, because `spec.source` resolves ### 3. Tag ```sh -RELEASE_VERSION=0.6.0 +RELEASE_VERSION=0.7.0 git checkout main git pull git tag -a "$RELEASE_VERSION" -m "CallWaveKit $RELEASE_VERSION" diff --git a/Scripts/package-pjsip-release.sh b/Scripts/package-pjsip-release.sh index 9f4770f..63884d5 100755 --- a/Scripts/package-pjsip-release.sh +++ b/Scripts/package-pjsip-release.sh @@ -6,8 +6,8 @@ # checkout pays for it, so a tagged release should attach the zip instead and # Package.swift should point at that URL: # -# ./Scripts/package-pjsip-release.sh 0.6.0 -# gh release upload 0.6.0 build/PJSIP.xcframework.zip +# ./Scripts/package-pjsip-release.sh 0.7.0 +# gh release upload 0.7.0 build/PJSIP.xcframework.zip # # Then replace the `path:` binary target in Package.swift with the printed # `url:`/`checksum:` pair. Keep the local `path:` variant on a branch you