fix(calls/ios): 8 defects that do not compile against CometChatCallsSDK 5.0.4 - #489

Open
ashfaqcometchat wants to merge 1 commit into
docs/skills-v5-tempfrom
docs/ios-v5-calls-corrections
Open

fix(calls/ios): 8 defects that do not compile against CometChatCallsSDK 5.0.4#489
ashfaqcometchat wants to merge 1 commit into
docs/skills-v5-tempfrom
docs/ios-v5-calls-corrections

Conversation

@ashfaqcometchat

Copy link
Copy Markdown
Contributor

Found while building the headless iOS calling skill (ENG-38735) by extracting every Swift fence under /calls/ios/** and type-checking it against the shippedCometChatCallsSDK 5.0.4 + CometChatSDK 4.1.7 frameworks.

Every defect is confirmed three ways: the live PR #482 preview, the shipped .swiftinterface, and the calls-core/ios-sdk source. Based on docs/skills-v5-temp because that is the branch whose preview I verified against.

The defects

#Page(s)DocumentedReality
D1audio-modes, events, recording, session-settings, custom-control-panel, migration-guide-v5 (17×)AudioModeTypeAudioMode — 0 hits in the interface and 0 in the binary's exported symbols (calls-core CallModels.swift:305)
D2ringing (2×)CometChat.CallStatusCometChat.callStatus — lowercase c (CometChatSDK 4.1.7 L549/L1816)
D3ringing, session-settings, join-session, idle-timeout, migration-guide-v5 (8×).setType(.video).setSessionType(.video)SessionSettingsBuilder has no setType
D4setupSPM URL …/cometchat-calls-sdk-ios404. Real repo: github.com/cometchat/calls-sdk-ios
D5setup (3×)region "us or eu"in is also valid — the SDK only guards region.length > 0, and the Chat docs already say us/eu/in
D6setup (2×).setAppId() / .setRegion()deprecated in 5.0.4 → .set(appID:) / .set(region:)
D7ringing (2×)call.callInitiator?.name(call.callInitiator as? User)?.namecallInitiator is AppEntity?; name is on User
D8migration-guide-v5CallAppSettings() + .set(appId:) under "No changes required"CallAppSettings has only init() — no setters. They are on CallAppSettingsBuilder, and it is set(appID:)

D1–D4, D7 and D8 do not compile. D6 compiles with a deprecation warning.

Worth a closer look

D8 is the most costly — it is in the v4→v5 migration guide, under a heading that says "No changes required. The init API is the same in v5." It is the first thing an upgrading developer copies, and it cannot build.

D1 was not a rename. The docs' example implements MediaEventsListener, whose real signature is onAudioModeChanged(audioMode: AudioMode) — so the parameter label was wrong too, along with the ObjC selector and the AudioModeType* constants. Swapping only the type name leaves the bodies broken (I did exactly that first, and caught it by recompiling).

D3 in migration-guide-v5 sits under the v5 tab, so it is presented as the new API, not as legacy for contrast.

Verification

  • All 8 classes return 0 across all 25 /calls/ios pages
  • The corrected fences type-check against the real frameworks
  • Of the 50 fences on the edited pages, the only remaining failures are snippet fragments referencing reader-supplied variables (authToken, sessionID, callViewContainer, listener instances) — expected in documentation, not defects

Deliberately not changed

Bare AudioMode first looked ambiguous — the symbol exists in both SDKs — but that was an artifact of my harness importing both. These pages import only the Calls SDK, so bare AudioMode is correct here. The ambiguity is real for an app doing 1:1 ringing (which needs both SDKs), so it is recorded in the skill rather than over-qualifying every page.

🤖 Generated with Claude Code

…DK 5.0.4
Found while building the headless iOS calling skill (ENG-38735) by extracting
every Swift fence under /calls/ios/** and type-checking it against the SHIPPED
CometChatCallsSDK 5.0.4 + CometChatSDK 4.1.7 frameworks. Each defect is
confirmed three ways: the live PR #482 preview, the shipped .swiftinterface, and
the calls-core/ios-sdk source.
D1 AudioModeType does not exist — 17 occurrences across 6 pages, including a
whole "AudioModeType Values" accordion. The real enum is AudioMode
(calls-core CallModels.swift:305); 0 hits in the interface AND 0 in the
binary's exported symbols. The fix is NOT a rename: the docs' example
implements MediaEventsListener, whose real signature is
onAudioModeChanged(audioMode: AudioMode) — so the parameter LABEL was wrong
too, along with the ObjC selector and the AudioModeType*Speaker constants.
D2 CometChat.CallStatus -> CometChat.callStatus (lowercase c). ringing x2.
rejectCall(sessionID:status:) takes CometChat.callStatus (CometChatSDK
4.1.7 L549/L1816). Swift is case-sensitive; the documented line cannot
compile.
D3 .setType(.video) -> .setSessionType(.video) — 8 occurrences across 5 pages.
SessionSettingsBuilder has no setType (calls-core
SessionSettingsBuilder.swift:120). Includes migration-guide-v5, where it sat
under the *v5* tab, i.e. presented as the new API.
D4 The SPM URL 404s. github.com/cometchat/cometchat-calls-sdk-ios returns 404;
the package is at github.com/cometchat/calls-sdk-ios (its Package.swift
declares name "CometChatCallsSDK"). This is step 2 of installation, so it
breaks before a reader writes a line of code.
D5 region documented as "us or eu" — `in` is also valid and is what several
live apps use. The SDK does not restrict it (calls-core CometChatCalls.swift
only guards region.length > 0), and the CHAT SDK docs already say
"us", "eu", "in". 3 occurrences.
D6 .setAppId()/.setRegion() are @available(deprecated) in 5.0.4 — "Use
set(appID:) instead" (calls-core CallAppSettingsBuilder.swift:70-78). Both
spellings are public, so this compiles with a warning rather than failing;
the docs should teach the supported pair.
D7 call.callInitiator?.name does not compile. callInitiator is AppEntity?
(CometChatSDK 4.1.7 L950) and `name` lives on User : AppEntity (L1864/1869),
so it needs a downcast. The ObjC variant has the same bug.
D8 The migration guide's init snippet says "No changes required" and then shows
CallAppSettings() followed by .set(appId:)/.set(region:). CallAppSettings has
ONLY init() — no setters at all (calls-core CallAppSettings.swift:12); the
setters are on CallAppSettingsBuilder, and it is set(appID:) with a capital
ID. Corrected to the builder + .build(), and verified to compile.
Verification: all 8 classes now return 0 across all 25 /calls/ios pages, and the
corrected fences type-check. Of the 50 fences on the edited pages, the only
remaining failures are snippet fragments referencing reader-supplied variables
(authToken, sessionID, callViewContainer, listener instances) — expected in
documentation, not defects.
NOT changed, deliberately: bare `AudioMode` was initially flagged as ambiguous,
but that was an artifact of the test harness importing BOTH SDKs. These pages
import only the Calls SDK, so bare AudioMode is correct here. The ambiguity is
real for an app doing 1:1 ringing (which needs both SDKs) and is recorded in the
skill instead of over-qualifying every page.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@ashfaqcometchat
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

fix(calls/ios): 8 defects that do not compile against CometChatCallsSDK 5.0.4 - #489

Open
ashfaqcometchat wants to merge 1 commit into
docs/skills-v5-tempfrom
docs/ios-v5-calls-corrections
Open

fix(calls/ios): 8 defects that do not compile against CometChatCallsSDK 5.0.4#489
ashfaqcometchat wants to merge 1 commit into
docs/skills-v5-tempfrom
docs/ios-v5-calls-corrections

Conversation

@ashfaqcometchat

Copy link
Copy Markdown
Contributor

Found while building the headless iOS calling skill (ENG-38735) by extracting every Swift fence under /calls/ios/** and type-checking it against the shippedCometChatCallsSDK 5.0.4 + CometChatSDK 4.1.7 frameworks.

Every defect is confirmed three ways: the live PR #482 preview, the shipped .swiftinterface, and the calls-core/ios-sdk source. Based on docs/skills-v5-temp because that is the branch whose preview I verified against.

The defects

#Page(s)DocumentedReality
D1audio-modes, events, recording, session-settings, custom-control-panel, migration-guide-v5 (17×)AudioModeTypeAudioMode — 0 hits in the interface and 0 in the binary's exported symbols (calls-core CallModels.swift:305)
D2ringing (2×)CometChat.CallStatusCometChat.callStatus — lowercase c (CometChatSDK 4.1.7 L549/L1816)
D3ringing, session-settings, join-session, idle-timeout, migration-guide-v5 (8×).setType(.video).setSessionType(.video)SessionSettingsBuilder has no setType
D4setupSPM URL …/cometchat-calls-sdk-ios404. Real repo: github.com/cometchat/calls-sdk-ios
D5setup (3×)region "us or eu"in is also valid — the SDK only guards region.length > 0, and the Chat docs already say us/eu/in
D6setup (2×).setAppId() / .setRegion()deprecated in 5.0.4 → .set(appID:) / .set(region:)
D7ringing (2×)call.callInitiator?.name(call.callInitiator as? User)?.namecallInitiator is AppEntity?; name is on User
D8migration-guide-v5CallAppSettings() + .set(appId:) under "No changes required"CallAppSettings has only init() — no setters. They are on CallAppSettingsBuilder, and it is set(appID:)

D1–D4, D7 and D8 do not compile. D6 compiles with a deprecation warning.

Worth a closer look

D8 is the most costly — it is in the v4→v5 migration guide, under a heading that says "No changes required. The init API is the same in v5." It is the first thing an upgrading developer copies, and it cannot build.

D1 was not a rename. The docs' example implements MediaEventsListener, whose real signature is onAudioModeChanged(audioMode: AudioMode) — so the parameter label was wrong too, along with the ObjC selector and the AudioModeType* constants. Swapping only the type name leaves the bodies broken (I did exactly that first, and caught it by recompiling).

D3 in migration-guide-v5 sits under the v5 tab, so it is presented as the new API, not as legacy for contrast.

Verification

  • All 8 classes return 0 across all 25 /calls/ios pages
  • The corrected fences type-check against the real frameworks
  • Of the 50 fences on the edited pages, the only remaining failures are snippet fragments referencing reader-supplied variables (authToken, sessionID, callViewContainer, listener instances) — expected in documentation, not defects

Deliberately not changed

Bare AudioMode first looked ambiguous — the symbol exists in both SDKs — but that was an artifact of my harness importing both. These pages import only the Calls SDK, so bare AudioMode is correct here. The ambiguity is real for an app doing 1:1 ringing (which needs both SDKs), so it is recorded in the skill rather than over-qualifying every page.

🤖 Generated with Claude Code

…DK 5.0.4
Found while building the headless iOS calling skill (ENG-38735) by extracting
every Swift fence under /calls/ios/** and type-checking it against the SHIPPED
CometChatCallsSDK 5.0.4 + CometChatSDK 4.1.7 frameworks. Each defect is
confirmed three ways: the live PR #482 preview, the shipped .swiftinterface, and
the calls-core/ios-sdk source.
D1 AudioModeType does not exist — 17 occurrences across 6 pages, including a
whole "AudioModeType Values" accordion. The real enum is AudioMode
(calls-core CallModels.swift:305); 0 hits in the interface AND 0 in the
binary's exported symbols. The fix is NOT a rename: the docs' example
implements MediaEventsListener, whose real signature is
onAudioModeChanged(audioMode: AudioMode) — so the parameter LABEL was wrong
too, along with the ObjC selector and the AudioModeType*Speaker constants.
D2 CometChat.CallStatus -> CometChat.callStatus (lowercase c). ringing x2.
rejectCall(sessionID:status:) takes CometChat.callStatus (CometChatSDK
4.1.7 L549/L1816). Swift is case-sensitive; the documented line cannot
compile.
D3 .setType(.video) -> .setSessionType(.video) — 8 occurrences across 5 pages.
SessionSettingsBuilder has no setType (calls-core
SessionSettingsBuilder.swift:120). Includes migration-guide-v5, where it sat
under the *v5* tab, i.e. presented as the new API.
D4 The SPM URL 404s. github.com/cometchat/cometchat-calls-sdk-ios returns 404;
the package is at github.com/cometchat/calls-sdk-ios (its Package.swift
declares name "CometChatCallsSDK"). This is step 2 of installation, so it
breaks before a reader writes a line of code.
D5 region documented as "us or eu" — `in` is also valid and is what several
live apps use. The SDK does not restrict it (calls-core CometChatCalls.swift
only guards region.length > 0), and the CHAT SDK docs already say
"us", "eu", "in". 3 occurrences.
D6 .setAppId()/.setRegion() are @available(deprecated) in 5.0.4 — "Use
set(appID:) instead" (calls-core CallAppSettingsBuilder.swift:70-78). Both
spellings are public, so this compiles with a warning rather than failing;
the docs should teach the supported pair.
D7 call.callInitiator?.name does not compile. callInitiator is AppEntity?
(CometChatSDK 4.1.7 L950) and `name` lives on User : AppEntity (L1864/1869),
so it needs a downcast. The ObjC variant has the same bug.
D8 The migration guide's init snippet says "No changes required" and then shows
CallAppSettings() followed by .set(appId:)/.set(region:). CallAppSettings has
ONLY init() — no setters at all (calls-core CallAppSettings.swift:12); the
setters are on CallAppSettingsBuilder, and it is set(appID:) with a capital
ID. Corrected to the builder + .build(), and verified to compile.
Verification: all 8 classes now return 0 across all 25 /calls/ios pages, and the
corrected fences type-check. Of the 50 fences on the edited pages, the only
remaining failures are snippet fragments referencing reader-supplied variables
(authToken, sessionID, callViewContainer, listener instances) — expected in
documentation, not defects.
NOT changed, deliberately: bare `AudioMode` was initially flagged as ambiguous,
but that was an artifact of the test harness importing BOTH SDKs. These pages
import only the Calls SDK, so bare AudioMode is correct here. The ambiguity is
real for an app doing 1:1 ringing (which needs both SDKs) and is recorded in the
skill instead of over-qualifying every page.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@ashfaqcometchat
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(calls/ios): 8 defects that do not compile against CometChatCallsSDK 5.0.4 - #489

Open
ashfaqcometchat wants to merge 1 commit into
docs/skills-v5-tempfrom
docs/ios-v5-calls-corrections
Open

fix(calls/ios): 8 defects that do not compile against CometChatCallsSDK 5.0.4#489
ashfaqcometchat wants to merge 1 commit into
docs/skills-v5-tempfrom
docs/ios-v5-calls-corrections

Conversation

@ashfaqcometchat

Copy link
Copy Markdown
Contributor

Found while building the headless iOS calling skill (ENG-38735) by extracting every Swift fence under /calls/ios/** and type-checking it against the shippedCometChatCallsSDK 5.0.4 + CometChatSDK 4.1.7 frameworks.

Every defect is confirmed three ways: the live PR #482 preview, the shipped .swiftinterface, and the calls-core/ios-sdk source. Based on docs/skills-v5-temp because that is the branch whose preview I verified against.

The defects

#Page(s)DocumentedReality
D1audio-modes, events, recording, session-settings, custom-control-panel, migration-guide-v5 (17×)AudioModeTypeAudioMode — 0 hits in the interface and 0 in the binary's exported symbols (calls-core CallModels.swift:305)
D2ringing (2×)CometChat.CallStatusCometChat.callStatus — lowercase c (CometChatSDK 4.1.7 L549/L1816)
D3ringing, session-settings, join-session, idle-timeout, migration-guide-v5 (8×).setType(.video).setSessionType(.video)SessionSettingsBuilder has no setType
D4setupSPM URL …/cometchat-calls-sdk-ios404. Real repo: github.com/cometchat/calls-sdk-ios
D5setup (3×)region "us or eu"in is also valid — the SDK only guards region.length > 0, and the Chat docs already say us/eu/in
D6setup (2×).setAppId() / .setRegion()deprecated in 5.0.4 → .set(appID:) / .set(region:)
D7ringing (2×)call.callInitiator?.name(call.callInitiator as? User)?.namecallInitiator is AppEntity?; name is on User
D8migration-guide-v5CallAppSettings() + .set(appId:) under "No changes required"CallAppSettings has only init() — no setters. They are on CallAppSettingsBuilder, and it is set(appID:)

D1–D4, D7 and D8 do not compile. D6 compiles with a deprecation warning.

Worth a closer look

D8 is the most costly — it is in the v4→v5 migration guide, under a heading that says "No changes required. The init API is the same in v5." It is the first thing an upgrading developer copies, and it cannot build.

D1 was not a rename. The docs' example implements MediaEventsListener, whose real signature is onAudioModeChanged(audioMode: AudioMode) — so the parameter label was wrong too, along with the ObjC selector and the AudioModeType* constants. Swapping only the type name leaves the bodies broken (I did exactly that first, and caught it by recompiling).

D3 in migration-guide-v5 sits under the v5 tab, so it is presented as the new API, not as legacy for contrast.

Verification

  • All 8 classes return 0 across all 25 /calls/ios pages
  • The corrected fences type-check against the real frameworks
  • Of the 50 fences on the edited pages, the only remaining failures are snippet fragments referencing reader-supplied variables (authToken, sessionID, callViewContainer, listener instances) — expected in documentation, not defects

Deliberately not changed

Bare AudioMode first looked ambiguous — the symbol exists in both SDKs — but that was an artifact of my harness importing both. These pages import only the Calls SDK, so bare AudioMode is correct here. The ambiguity is real for an app doing 1:1 ringing (which needs both SDKs), so it is recorded in the skill rather than over-qualifying every page.

🤖 Generated with Claude Code

…DK 5.0.4
Found while building the headless iOS calling skill (ENG-38735) by extracting
every Swift fence under /calls/ios/** and type-checking it against the SHIPPED
CometChatCallsSDK 5.0.4 + CometChatSDK 4.1.7 frameworks. Each defect is
confirmed three ways: the live PR #482 preview, the shipped .swiftinterface, and
the calls-core/ios-sdk source.
D1 AudioModeType does not exist — 17 occurrences across 6 pages, including a
whole "AudioModeType Values" accordion. The real enum is AudioMode
(calls-core CallModels.swift:305); 0 hits in the interface AND 0 in the
binary's exported symbols. The fix is NOT a rename: the docs' example
implements MediaEventsListener, whose real signature is
onAudioModeChanged(audioMode: AudioMode) — so the parameter LABEL was wrong
too, along with the ObjC selector and the AudioModeType*Speaker constants.
D2 CometChat.CallStatus -> CometChat.callStatus (lowercase c). ringing x2.
rejectCall(sessionID:status:) takes CometChat.callStatus (CometChatSDK
4.1.7 L549/L1816). Swift is case-sensitive; the documented line cannot
compile.
D3 .setType(.video) -> .setSessionType(.video) — 8 occurrences across 5 pages.
SessionSettingsBuilder has no setType (calls-core
SessionSettingsBuilder.swift:120). Includes migration-guide-v5, where it sat
under the *v5* tab, i.e. presented as the new API.
D4 The SPM URL 404s. github.com/cometchat/cometchat-calls-sdk-ios returns 404;
the package is at github.com/cometchat/calls-sdk-ios (its Package.swift
declares name "CometChatCallsSDK"). This is step 2 of installation, so it
breaks before a reader writes a line of code.
D5 region documented as "us or eu" — `in` is also valid and is what several
live apps use. The SDK does not restrict it (calls-core CometChatCalls.swift
only guards region.length > 0), and the CHAT SDK docs already say
"us", "eu", "in". 3 occurrences.
D6 .setAppId()/.setRegion() are @available(deprecated) in 5.0.4 — "Use
set(appID:) instead" (calls-core CallAppSettingsBuilder.swift:70-78). Both
spellings are public, so this compiles with a warning rather than failing;
the docs should teach the supported pair.
D7 call.callInitiator?.name does not compile. callInitiator is AppEntity?
(CometChatSDK 4.1.7 L950) and `name` lives on User : AppEntity (L1864/1869),
so it needs a downcast. The ObjC variant has the same bug.
D8 The migration guide's init snippet says "No changes required" and then shows
CallAppSettings() followed by .set(appId:)/.set(region:). CallAppSettings has
ONLY init() — no setters at all (calls-core CallAppSettings.swift:12); the
setters are on CallAppSettingsBuilder, and it is set(appID:) with a capital
ID. Corrected to the builder + .build(), and verified to compile.
Verification: all 8 classes now return 0 across all 25 /calls/ios pages, and the
corrected fences type-check. Of the 50 fences on the edited pages, the only
remaining failures are snippet fragments referencing reader-supplied variables
(authToken, sessionID, callViewContainer, listener instances) — expected in
documentation, not defects.
NOT changed, deliberately: bare `AudioMode` was initially flagged as ambiguous,
but that was an artifact of the test harness importing BOTH SDKs. These pages
import only the Calls SDK, so bare AudioMode is correct here. The ambiguity is
real for an app doing 1:1 ringing (which needs both SDKs) and is recorded in the
skill instead of over-qualifying every page.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@ashfaqcometchat
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(calls/ios): 8 defects that do not compile against CometChatCallsSDK 5.0.4 - #489

Open
ashfaqcometchat wants to merge 1 commit into
docs/skills-v5-tempfrom
docs/ios-v5-calls-corrections
Open

fix(calls/ios): 8 defects that do not compile against CometChatCallsSDK 5.0.4#489
ashfaqcometchat wants to merge 1 commit into
docs/skills-v5-tempfrom
docs/ios-v5-calls-corrections

Conversation

@ashfaqcometchat

Copy link
Copy Markdown
Contributor

Found while building the headless iOS calling skill (ENG-38735) by extracting every Swift fence under /calls/ios/** and type-checking it against the shippedCometChatCallsSDK 5.0.4 + CometChatSDK 4.1.7 frameworks.

Every defect is confirmed three ways: the live PR #482 preview, the shipped .swiftinterface, and the calls-core/ios-sdk source. Based on docs/skills-v5-temp because that is the branch whose preview I verified against.

The defects

#Page(s)DocumentedReality
D1audio-modes, events, recording, session-settings, custom-control-panel, migration-guide-v5 (17×)AudioModeTypeAudioMode — 0 hits in the interface and 0 in the binary's exported symbols (calls-core CallModels.swift:305)
D2ringing (2×)CometChat.CallStatusCometChat.callStatus — lowercase c (CometChatSDK 4.1.7 L549/L1816)
D3ringing, session-settings, join-session, idle-timeout, migration-guide-v5 (8×).setType(.video).setSessionType(.video)SessionSettingsBuilder has no setType
D4setupSPM URL …/cometchat-calls-sdk-ios404. Real repo: github.com/cometchat/calls-sdk-ios
D5setup (3×)region "us or eu"in is also valid — the SDK only guards region.length > 0, and the Chat docs already say us/eu/in
D6setup (2×).setAppId() / .setRegion()deprecated in 5.0.4 → .set(appID:) / .set(region:)
D7ringing (2×)call.callInitiator?.name(call.callInitiator as? User)?.namecallInitiator is AppEntity?; name is on User
D8migration-guide-v5CallAppSettings() + .set(appId:) under "No changes required"CallAppSettings has only init() — no setters. They are on CallAppSettingsBuilder, and it is set(appID:)

D1–D4, D7 and D8 do not compile. D6 compiles with a deprecation warning.

Worth a closer look

D8 is the most costly — it is in the v4→v5 migration guide, under a heading that says "No changes required. The init API is the same in v5." It is the first thing an upgrading developer copies, and it cannot build.

D1 was not a rename. The docs' example implements MediaEventsListener, whose real signature is onAudioModeChanged(audioMode: AudioMode) — so the parameter label was wrong too, along with the ObjC selector and the AudioModeType* constants. Swapping only the type name leaves the bodies broken (I did exactly that first, and caught it by recompiling).

D3 in migration-guide-v5 sits under the v5 tab, so it is presented as the new API, not as legacy for contrast.

Verification

  • All 8 classes return 0 across all 25 /calls/ios pages
  • The corrected fences type-check against the real frameworks
  • Of the 50 fences on the edited pages, the only remaining failures are snippet fragments referencing reader-supplied variables (authToken, sessionID, callViewContainer, listener instances) — expected in documentation, not defects

Deliberately not changed

Bare AudioMode first looked ambiguous — the symbol exists in both SDKs — but that was an artifact of my harness importing both. These pages import only the Calls SDK, so bare AudioMode is correct here. The ambiguity is real for an app doing 1:1 ringing (which needs both SDKs), so it is recorded in the skill rather than over-qualifying every page.

🤖 Generated with Claude Code

…DK 5.0.4
Found while building the headless iOS calling skill (ENG-38735) by extracting
every Swift fence under /calls/ios/** and type-checking it against the SHIPPED
CometChatCallsSDK 5.0.4 + CometChatSDK 4.1.7 frameworks. Each defect is
confirmed three ways: the live PR #482 preview, the shipped .swiftinterface, and
the calls-core/ios-sdk source.
D1 AudioModeType does not exist — 17 occurrences across 6 pages, including a
whole "AudioModeType Values" accordion. The real enum is AudioMode
(calls-core CallModels.swift:305); 0 hits in the interface AND 0 in the
binary's exported symbols. The fix is NOT a rename: the docs' example
implements MediaEventsListener, whose real signature is
onAudioModeChanged(audioMode: AudioMode) — so the parameter LABEL was wrong
too, along with the ObjC selector and the AudioModeType*Speaker constants.
D2 CometChat.CallStatus -> CometChat.callStatus (lowercase c). ringing x2.
rejectCall(sessionID:status:) takes CometChat.callStatus (CometChatSDK
4.1.7 L549/L1816). Swift is case-sensitive; the documented line cannot
compile.
D3 .setType(.video) -> .setSessionType(.video) — 8 occurrences across 5 pages.
SessionSettingsBuilder has no setType (calls-core
SessionSettingsBuilder.swift:120). Includes migration-guide-v5, where it sat
under the *v5* tab, i.e. presented as the new API.
D4 The SPM URL 404s. github.com/cometchat/cometchat-calls-sdk-ios returns 404;
the package is at github.com/cometchat/calls-sdk-ios (its Package.swift
declares name "CometChatCallsSDK"). This is step 2 of installation, so it
breaks before a reader writes a line of code.
D5 region documented as "us or eu" — `in` is also valid and is what several
live apps use. The SDK does not restrict it (calls-core CometChatCalls.swift
only guards region.length > 0), and the CHAT SDK docs already say
"us", "eu", "in". 3 occurrences.
D6 .setAppId()/.setRegion() are @available(deprecated) in 5.0.4 — "Use
set(appID:) instead" (calls-core CallAppSettingsBuilder.swift:70-78). Both
spellings are public, so this compiles with a warning rather than failing;
the docs should teach the supported pair.
D7 call.callInitiator?.name does not compile. callInitiator is AppEntity?
(CometChatSDK 4.1.7 L950) and `name` lives on User : AppEntity (L1864/1869),
so it needs a downcast. The ObjC variant has the same bug.
D8 The migration guide's init snippet says "No changes required" and then shows
CallAppSettings() followed by .set(appId:)/.set(region:). CallAppSettings has
ONLY init() — no setters at all (calls-core CallAppSettings.swift:12); the
setters are on CallAppSettingsBuilder, and it is set(appID:) with a capital
ID. Corrected to the builder + .build(), and verified to compile.
Verification: all 8 classes now return 0 across all 25 /calls/ios pages, and the
corrected fences type-check. Of the 50 fences on the edited pages, the only
remaining failures are snippet fragments referencing reader-supplied variables
(authToken, sessionID, callViewContainer, listener instances) — expected in
documentation, not defects.
NOT changed, deliberately: bare `AudioMode` was initially flagged as ambiguous,
but that was an artifact of the test harness importing BOTH SDKs. These pages
import only the Calls SDK, so bare AudioMode is correct here. The ambiguity is
real for an app doing 1:1 ringing (which needs both SDKs) and is recorded in the
skill instead of over-qualifying every page.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@ashfaqcometchat
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

fix(calls/ios): 8 defects that do not compile against CometChatCallsSDK 5.0.4 - #489

Open
ashfaqcometchat wants to merge 1 commit into
docs/skills-v5-tempfrom
docs/ios-v5-calls-corrections
Open

fix(calls/ios): 8 defects that do not compile against CometChatCallsSDK 5.0.4#489
ashfaqcometchat wants to merge 1 commit into
docs/skills-v5-tempfrom
docs/ios-v5-calls-corrections

Conversation

@ashfaqcometchat

Copy link
Copy Markdown
Contributor

Found while building the headless iOS calling skill (ENG-38735) by extracting every Swift fence under /calls/ios/** and type-checking it against the shippedCometChatCallsSDK 5.0.4 + CometChatSDK 4.1.7 frameworks.

Every defect is confirmed three ways: the live PR #482 preview, the shipped .swiftinterface, and the calls-core/ios-sdk source. Based on docs/skills-v5-temp because that is the branch whose preview I verified against.

The defects

#Page(s)DocumentedReality
D1audio-modes, events, recording, session-settings, custom-control-panel, migration-guide-v5 (17×)AudioModeTypeAudioMode — 0 hits in the interface and 0 in the binary's exported symbols (calls-core CallModels.swift:305)
D2ringing (2×)CometChat.CallStatusCometChat.callStatus — lowercase c (CometChatSDK 4.1.7 L549/L1816)
D3ringing, session-settings, join-session, idle-timeout, migration-guide-v5 (8×).setType(.video).setSessionType(.video)SessionSettingsBuilder has no setType
D4setupSPM URL …/cometchat-calls-sdk-ios404. Real repo: github.com/cometchat/calls-sdk-ios
D5setup (3×)region "us or eu"in is also valid — the SDK only guards region.length > 0, and the Chat docs already say us/eu/in
D6setup (2×).setAppId() / .setRegion()deprecated in 5.0.4 → .set(appID:) / .set(region:)
D7ringing (2×)call.callInitiator?.name(call.callInitiator as? User)?.namecallInitiator is AppEntity?; name is on User
D8migration-guide-v5CallAppSettings() + .set(appId:) under "No changes required"CallAppSettings has only init() — no setters. They are on CallAppSettingsBuilder, and it is set(appID:)

D1–D4, D7 and D8 do not compile. D6 compiles with a deprecation warning.

Worth a closer look

D8 is the most costly — it is in the v4→v5 migration guide, under a heading that says "No changes required. The init API is the same in v5." It is the first thing an upgrading developer copies, and it cannot build.

D1 was not a rename. The docs' example implements MediaEventsListener, whose real signature is onAudioModeChanged(audioMode: AudioMode) — so the parameter label was wrong too, along with the ObjC selector and the AudioModeType* constants. Swapping only the type name leaves the bodies broken (I did exactly that first, and caught it by recompiling).

D3 in migration-guide-v5 sits under the v5 tab, so it is presented as the new API, not as legacy for contrast.

Verification

  • All 8 classes return 0 across all 25 /calls/ios pages
  • The corrected fences type-check against the real frameworks
  • Of the 50 fences on the edited pages, the only remaining failures are snippet fragments referencing reader-supplied variables (authToken, sessionID, callViewContainer, listener instances) — expected in documentation, not defects

Deliberately not changed

Bare AudioMode first looked ambiguous — the symbol exists in both SDKs — but that was an artifact of my harness importing both. These pages import only the Calls SDK, so bare AudioMode is correct here. The ambiguity is real for an app doing 1:1 ringing (which needs both SDKs), so it is recorded in the skill rather than over-qualifying every page.

🤖 Generated with Claude Code

…DK 5.0.4
Found while building the headless iOS calling skill (ENG-38735) by extracting
every Swift fence under /calls/ios/** and type-checking it against the SHIPPED
CometChatCallsSDK 5.0.4 + CometChatSDK 4.1.7 frameworks. Each defect is
confirmed three ways: the live PR #482 preview, the shipped .swiftinterface, and
the calls-core/ios-sdk source.
D1 AudioModeType does not exist — 17 occurrences across 6 pages, including a
whole "AudioModeType Values" accordion. The real enum is AudioMode
(calls-core CallModels.swift:305); 0 hits in the interface AND 0 in the
binary's exported symbols. The fix is NOT a rename: the docs' example
implements MediaEventsListener, whose real signature is
onAudioModeChanged(audioMode: AudioMode) — so the parameter LABEL was wrong
too, along with the ObjC selector and the AudioModeType*Speaker constants.
D2 CometChat.CallStatus -> CometChat.callStatus (lowercase c). ringing x2.
rejectCall(sessionID:status:) takes CometChat.callStatus (CometChatSDK
4.1.7 L549/L1816). Swift is case-sensitive; the documented line cannot
compile.
D3 .setType(.video) -> .setSessionType(.video) — 8 occurrences across 5 pages.
SessionSettingsBuilder has no setType (calls-core
SessionSettingsBuilder.swift:120). Includes migration-guide-v5, where it sat
under the *v5* tab, i.e. presented as the new API.
D4 The SPM URL 404s. github.com/cometchat/cometchat-calls-sdk-ios returns 404;
the package is at github.com/cometchat/calls-sdk-ios (its Package.swift
declares name "CometChatCallsSDK"). This is step 2 of installation, so it
breaks before a reader writes a line of code.
D5 region documented as "us or eu" — `in` is also valid and is what several
live apps use. The SDK does not restrict it (calls-core CometChatCalls.swift
only guards region.length > 0), and the CHAT SDK docs already say
"us", "eu", "in". 3 occurrences.
D6 .setAppId()/.setRegion() are @available(deprecated) in 5.0.4 — "Use
set(appID:) instead" (calls-core CallAppSettingsBuilder.swift:70-78). Both
spellings are public, so this compiles with a warning rather than failing;
the docs should teach the supported pair.
D7 call.callInitiator?.name does not compile. callInitiator is AppEntity?
(CometChatSDK 4.1.7 L950) and `name` lives on User : AppEntity (L1864/1869),
so it needs a downcast. The ObjC variant has the same bug.
D8 The migration guide's init snippet says "No changes required" and then shows
CallAppSettings() followed by .set(appId:)/.set(region:). CallAppSettings has
ONLY init() — no setters at all (calls-core CallAppSettings.swift:12); the
setters are on CallAppSettingsBuilder, and it is set(appID:) with a capital
ID. Corrected to the builder + .build(), and verified to compile.
Verification: all 8 classes now return 0 across all 25 /calls/ios pages, and the
corrected fences type-check. Of the 50 fences on the edited pages, the only
remaining failures are snippet fragments referencing reader-supplied variables
(authToken, sessionID, callViewContainer, listener instances) — expected in
documentation, not defects.
NOT changed, deliberately: bare `AudioMode` was initially flagged as ambiguous,
but that was an artifact of the test harness importing BOTH SDKs. These pages
import only the Calls SDK, so bare AudioMode is correct here. The ambiguity is
real for an app doing 1:1 ringing (which needs both SDKs) and is recorded in the
skill instead of over-qualifying every page.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@ashfaqcometchat
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(calls/ios): 8 defects that do not compile against CometChatCallsSDK 5.0.4 - #489

Open
ashfaqcometchat wants to merge 1 commit into
docs/skills-v5-tempfrom
docs/ios-v5-calls-corrections
Open

fix(calls/ios): 8 defects that do not compile against CometChatCallsSDK 5.0.4#489
ashfaqcometchat wants to merge 1 commit into
docs/skills-v5-tempfrom
docs/ios-v5-calls-corrections

Conversation

@ashfaqcometchat

Copy link
Copy Markdown
Contributor

Found while building the headless iOS calling skill (ENG-38735) by extracting every Swift fence under /calls/ios/** and type-checking it against the shippedCometChatCallsSDK 5.0.4 + CometChatSDK 4.1.7 frameworks.

Every defect is confirmed three ways: the live PR #482 preview, the shipped .swiftinterface, and the calls-core/ios-sdk source. Based on docs/skills-v5-temp because that is the branch whose preview I verified against.

The defects

#Page(s)DocumentedReality
D1audio-modes, events, recording, session-settings, custom-control-panel, migration-guide-v5 (17×)AudioModeTypeAudioMode — 0 hits in the interface and 0 in the binary's exported symbols (calls-core CallModels.swift:305)
D2ringing (2×)CometChat.CallStatusCometChat.callStatus — lowercase c (CometChatSDK 4.1.7 L549/L1816)
D3ringing, session-settings, join-session, idle-timeout, migration-guide-v5 (8×).setType(.video).setSessionType(.video)SessionSettingsBuilder has no setType
D4setupSPM URL …/cometchat-calls-sdk-ios404. Real repo: github.com/cometchat/calls-sdk-ios
D5setup (3×)region "us or eu"in is also valid — the SDK only guards region.length > 0, and the Chat docs already say us/eu/in
D6setup (2×).setAppId() / .setRegion()deprecated in 5.0.4 → .set(appID:) / .set(region:)
D7ringing (2×)call.callInitiator?.name(call.callInitiator as? User)?.namecallInitiator is AppEntity?; name is on User
D8migration-guide-v5CallAppSettings() + .set(appId:) under "No changes required"CallAppSettings has only init() — no setters. They are on CallAppSettingsBuilder, and it is set(appID:)

D1–D4, D7 and D8 do not compile. D6 compiles with a deprecation warning.

Worth a closer look

D8 is the most costly — it is in the v4→v5 migration guide, under a heading that says "No changes required. The init API is the same in v5." It is the first thing an upgrading developer copies, and it cannot build.

D1 was not a rename. The docs' example implements MediaEventsListener, whose real signature is onAudioModeChanged(audioMode: AudioMode) — so the parameter label was wrong too, along with the ObjC selector and the AudioModeType* constants. Swapping only the type name leaves the bodies broken (I did exactly that first, and caught it by recompiling).

D3 in migration-guide-v5 sits under the v5 tab, so it is presented as the new API, not as legacy for contrast.

Verification

  • All 8 classes return 0 across all 25 /calls/ios pages
  • The corrected fences type-check against the real frameworks
  • Of the 50 fences on the edited pages, the only remaining failures are snippet fragments referencing reader-supplied variables (authToken, sessionID, callViewContainer, listener instances) — expected in documentation, not defects

Deliberately not changed

Bare AudioMode first looked ambiguous — the symbol exists in both SDKs — but that was an artifact of my harness importing both. These pages import only the Calls SDK, so bare AudioMode is correct here. The ambiguity is real for an app doing 1:1 ringing (which needs both SDKs), so it is recorded in the skill rather than over-qualifying every page.

🤖 Generated with Claude Code

…DK 5.0.4
Found while building the headless iOS calling skill (ENG-38735) by extracting
every Swift fence under /calls/ios/** and type-checking it against the SHIPPED
CometChatCallsSDK 5.0.4 + CometChatSDK 4.1.7 frameworks. Each defect is
confirmed three ways: the live PR #482 preview, the shipped .swiftinterface, and
the calls-core/ios-sdk source.
D1 AudioModeType does not exist — 17 occurrences across 6 pages, including a
whole "AudioModeType Values" accordion. The real enum is AudioMode
(calls-core CallModels.swift:305); 0 hits in the interface AND 0 in the
binary's exported symbols. The fix is NOT a rename: the docs' example
implements MediaEventsListener, whose real signature is
onAudioModeChanged(audioMode: AudioMode) — so the parameter LABEL was wrong
too, along with the ObjC selector and the AudioModeType*Speaker constants.
D2 CometChat.CallStatus -> CometChat.callStatus (lowercase c). ringing x2.
rejectCall(sessionID:status:) takes CometChat.callStatus (CometChatSDK
4.1.7 L549/L1816). Swift is case-sensitive; the documented line cannot
compile.
D3 .setType(.video) -> .setSessionType(.video) — 8 occurrences across 5 pages.
SessionSettingsBuilder has no setType (calls-core
SessionSettingsBuilder.swift:120). Includes migration-guide-v5, where it sat
under the *v5* tab, i.e. presented as the new API.
D4 The SPM URL 404s. github.com/cometchat/cometchat-calls-sdk-ios returns 404;
the package is at github.com/cometchat/calls-sdk-ios (its Package.swift
declares name "CometChatCallsSDK"). This is step 2 of installation, so it
breaks before a reader writes a line of code.
D5 region documented as "us or eu" — `in` is also valid and is what several
live apps use. The SDK does not restrict it (calls-core CometChatCalls.swift
only guards region.length > 0), and the CHAT SDK docs already say
"us", "eu", "in". 3 occurrences.
D6 .setAppId()/.setRegion() are @available(deprecated) in 5.0.4 — "Use
set(appID:) instead" (calls-core CallAppSettingsBuilder.swift:70-78). Both
spellings are public, so this compiles with a warning rather than failing;
the docs should teach the supported pair.
D7 call.callInitiator?.name does not compile. callInitiator is AppEntity?
(CometChatSDK 4.1.7 L950) and `name` lives on User : AppEntity (L1864/1869),
so it needs a downcast. The ObjC variant has the same bug.
D8 The migration guide's init snippet says "No changes required" and then shows
CallAppSettings() followed by .set(appId:)/.set(region:). CallAppSettings has
ONLY init() — no setters at all (calls-core CallAppSettings.swift:12); the
setters are on CallAppSettingsBuilder, and it is set(appID:) with a capital
ID. Corrected to the builder + .build(), and verified to compile.
Verification: all 8 classes now return 0 across all 25 /calls/ios pages, and the
corrected fences type-check. Of the 50 fences on the edited pages, the only
remaining failures are snippet fragments referencing reader-supplied variables
(authToken, sessionID, callViewContainer, listener instances) — expected in
documentation, not defects.
NOT changed, deliberately: bare `AudioMode` was initially flagged as ambiguous,
but that was an artifact of the test harness importing BOTH SDKs. These pages
import only the Calls SDK, so bare AudioMode is correct here. The ambiguity is
real for an app doing 1:1 ringing (which needs both SDKs) and is recorded in the
skill instead of over-qualifying every page.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@ashfaqcometchat
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(calls/ios): 8 defects that do not compile against CometChatCallsSDK 5.0.4 - #489

Open
ashfaqcometchat wants to merge 1 commit into
docs/skills-v5-tempfrom
docs/ios-v5-calls-corrections
Open

fix(calls/ios): 8 defects that do not compile against CometChatCallsSDK 5.0.4#489
ashfaqcometchat wants to merge 1 commit into
docs/skills-v5-tempfrom
docs/ios-v5-calls-corrections

Conversation

@ashfaqcometchat

Copy link
Copy Markdown
Contributor

Found while building the headless iOS calling skill (ENG-38735) by extracting every Swift fence under /calls/ios/** and type-checking it against the shippedCometChatCallsSDK 5.0.4 + CometChatSDK 4.1.7 frameworks.

Every defect is confirmed three ways: the live PR #482 preview, the shipped .swiftinterface, and the calls-core/ios-sdk source. Based on docs/skills-v5-temp because that is the branch whose preview I verified against.

The defects

#Page(s)DocumentedReality
D1audio-modes, events, recording, session-settings, custom-control-panel, migration-guide-v5 (17×)AudioModeTypeAudioMode — 0 hits in the interface and 0 in the binary's exported symbols (calls-core CallModels.swift:305)
D2ringing (2×)CometChat.CallStatusCometChat.callStatus — lowercase c (CometChatSDK 4.1.7 L549/L1816)
D3ringing, session-settings, join-session, idle-timeout, migration-guide-v5 (8×).setType(.video).setSessionType(.video)SessionSettingsBuilder has no setType
D4setupSPM URL …/cometchat-calls-sdk-ios404. Real repo: github.com/cometchat/calls-sdk-ios
D5setup (3×)region "us or eu"in is also valid — the SDK only guards region.length > 0, and the Chat docs already say us/eu/in
D6setup (2×).setAppId() / .setRegion()deprecated in 5.0.4 → .set(appID:) / .set(region:)
D7ringing (2×)call.callInitiator?.name(call.callInitiator as? User)?.namecallInitiator is AppEntity?; name is on User
D8migration-guide-v5CallAppSettings() + .set(appId:) under "No changes required"CallAppSettings has only init() — no setters. They are on CallAppSettingsBuilder, and it is set(appID:)

D1–D4, D7 and D8 do not compile. D6 compiles with a deprecation warning.

Worth a closer look

D8 is the most costly — it is in the v4→v5 migration guide, under a heading that says "No changes required. The init API is the same in v5." It is the first thing an upgrading developer copies, and it cannot build.

D1 was not a rename. The docs' example implements MediaEventsListener, whose real signature is onAudioModeChanged(audioMode: AudioMode) — so the parameter label was wrong too, along with the ObjC selector and the AudioModeType* constants. Swapping only the type name leaves the bodies broken (I did exactly that first, and caught it by recompiling).

D3 in migration-guide-v5 sits under the v5 tab, so it is presented as the new API, not as legacy for contrast.

Verification

  • All 8 classes return 0 across all 25 /calls/ios pages
  • The corrected fences type-check against the real frameworks
  • Of the 50 fences on the edited pages, the only remaining failures are snippet fragments referencing reader-supplied variables (authToken, sessionID, callViewContainer, listener instances) — expected in documentation, not defects

Deliberately not changed

Bare AudioMode first looked ambiguous — the symbol exists in both SDKs — but that was an artifact of my harness importing both. These pages import only the Calls SDK, so bare AudioMode is correct here. The ambiguity is real for an app doing 1:1 ringing (which needs both SDKs), so it is recorded in the skill rather than over-qualifying every page.

🤖 Generated with Claude Code

…DK 5.0.4
Found while building the headless iOS calling skill (ENG-38735) by extracting
every Swift fence under /calls/ios/** and type-checking it against the SHIPPED
CometChatCallsSDK 5.0.4 + CometChatSDK 4.1.7 frameworks. Each defect is
confirmed three ways: the live PR #482 preview, the shipped .swiftinterface, and
the calls-core/ios-sdk source.
D1 AudioModeType does not exist — 17 occurrences across 6 pages, including a
whole "AudioModeType Values" accordion. The real enum is AudioMode
(calls-core CallModels.swift:305); 0 hits in the interface AND 0 in the
binary's exported symbols. The fix is NOT a rename: the docs' example
implements MediaEventsListener, whose real signature is
onAudioModeChanged(audioMode: AudioMode) — so the parameter LABEL was wrong
too, along with the ObjC selector and the AudioModeType*Speaker constants.
D2 CometChat.CallStatus -> CometChat.callStatus (lowercase c). ringing x2.
rejectCall(sessionID:status:) takes CometChat.callStatus (CometChatSDK
4.1.7 L549/L1816). Swift is case-sensitive; the documented line cannot
compile.
D3 .setType(.video) -> .setSessionType(.video) — 8 occurrences across 5 pages.
SessionSettingsBuilder has no setType (calls-core
SessionSettingsBuilder.swift:120). Includes migration-guide-v5, where it sat
under the *v5* tab, i.e. presented as the new API.
D4 The SPM URL 404s. github.com/cometchat/cometchat-calls-sdk-ios returns 404;
the package is at github.com/cometchat/calls-sdk-ios (its Package.swift
declares name "CometChatCallsSDK"). This is step 2 of installation, so it
breaks before a reader writes a line of code.
D5 region documented as "us or eu" — `in` is also valid and is what several
live apps use. The SDK does not restrict it (calls-core CometChatCalls.swift
only guards region.length > 0), and the CHAT SDK docs already say
"us", "eu", "in". 3 occurrences.
D6 .setAppId()/.setRegion() are @available(deprecated) in 5.0.4 — "Use
set(appID:) instead" (calls-core CallAppSettingsBuilder.swift:70-78). Both
spellings are public, so this compiles with a warning rather than failing;
the docs should teach the supported pair.
D7 call.callInitiator?.name does not compile. callInitiator is AppEntity?
(CometChatSDK 4.1.7 L950) and `name` lives on User : AppEntity (L1864/1869),
so it needs a downcast. The ObjC variant has the same bug.
D8 The migration guide's init snippet says "No changes required" and then shows
CallAppSettings() followed by .set(appId:)/.set(region:). CallAppSettings has
ONLY init() — no setters at all (calls-core CallAppSettings.swift:12); the
setters are on CallAppSettingsBuilder, and it is set(appID:) with a capital
ID. Corrected to the builder + .build(), and verified to compile.
Verification: all 8 classes now return 0 across all 25 /calls/ios pages, and the
corrected fences type-check. Of the 50 fences on the edited pages, the only
remaining failures are snippet fragments referencing reader-supplied variables
(authToken, sessionID, callViewContainer, listener instances) — expected in
documentation, not defects.
NOT changed, deliberately: bare `AudioMode` was initially flagged as ambiguous,
but that was an artifact of the test harness importing BOTH SDKs. These pages
import only the Calls SDK, so bare AudioMode is correct here. The ambiguity is
real for an app doing 1:1 ringing (which needs both SDKs) and is recorded in the
skill instead of over-qualifying every page.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@ashfaqcometchat
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

fix(calls/ios): 8 defects that do not compile against CometChatCallsSDK 5.0.4 - #489

Open
ashfaqcometchat wants to merge 1 commit into
docs/skills-v5-tempfrom
docs/ios-v5-calls-corrections
Open

fix(calls/ios): 8 defects that do not compile against CometChatCallsSDK 5.0.4#489
ashfaqcometchat wants to merge 1 commit into
docs/skills-v5-tempfrom
docs/ios-v5-calls-corrections

Conversation

@ashfaqcometchat

Copy link
Copy Markdown
Contributor

Found while building the headless iOS calling skill (ENG-38735) by extracting every Swift fence under /calls/ios/** and type-checking it against the shippedCometChatCallsSDK 5.0.4 + CometChatSDK 4.1.7 frameworks.

Every defect is confirmed three ways: the live PR #482 preview, the shipped .swiftinterface, and the calls-core/ios-sdk source. Based on docs/skills-v5-temp because that is the branch whose preview I verified against.

The defects

#Page(s)DocumentedReality
D1audio-modes, events, recording, session-settings, custom-control-panel, migration-guide-v5 (17×)AudioModeTypeAudioMode — 0 hits in the interface and 0 in the binary's exported symbols (calls-core CallModels.swift:305)
D2ringing (2×)CometChat.CallStatusCometChat.callStatus — lowercase c (CometChatSDK 4.1.7 L549/L1816)
D3ringing, session-settings, join-session, idle-timeout, migration-guide-v5 (8×).setType(.video).setSessionType(.video)SessionSettingsBuilder has no setType
D4setupSPM URL …/cometchat-calls-sdk-ios404. Real repo: github.com/cometchat/calls-sdk-ios
D5setup (3×)region "us or eu"in is also valid — the SDK only guards region.length > 0, and the Chat docs already say us/eu/in
D6setup (2×).setAppId() / .setRegion()deprecated in 5.0.4 → .set(appID:) / .set(region:)
D7ringing (2×)call.callInitiator?.name(call.callInitiator as? User)?.namecallInitiator is AppEntity?; name is on User
D8migration-guide-v5CallAppSettings() + .set(appId:) under "No changes required"CallAppSettings has only init() — no setters. They are on CallAppSettingsBuilder, and it is set(appID:)

D1–D4, D7 and D8 do not compile. D6 compiles with a deprecation warning.

Worth a closer look

D8 is the most costly — it is in the v4→v5 migration guide, under a heading that says "No changes required. The init API is the same in v5." It is the first thing an upgrading developer copies, and it cannot build.

D1 was not a rename. The docs' example implements MediaEventsListener, whose real signature is onAudioModeChanged(audioMode: AudioMode) — so the parameter label was wrong too, along with the ObjC selector and the AudioModeType* constants. Swapping only the type name leaves the bodies broken (I did exactly that first, and caught it by recompiling).

D3 in migration-guide-v5 sits under the v5 tab, so it is presented as the new API, not as legacy for contrast.

Verification

  • All 8 classes return 0 across all 25 /calls/ios pages
  • The corrected fences type-check against the real frameworks
  • Of the 50 fences on the edited pages, the only remaining failures are snippet fragments referencing reader-supplied variables (authToken, sessionID, callViewContainer, listener instances) — expected in documentation, not defects

Deliberately not changed

Bare AudioMode first looked ambiguous — the symbol exists in both SDKs — but that was an artifact of my harness importing both. These pages import only the Calls SDK, so bare AudioMode is correct here. The ambiguity is real for an app doing 1:1 ringing (which needs both SDKs), so it is recorded in the skill rather than over-qualifying every page.

🤖 Generated with Claude Code

…DK 5.0.4
Found while building the headless iOS calling skill (ENG-38735) by extracting
every Swift fence under /calls/ios/** and type-checking it against the SHIPPED
CometChatCallsSDK 5.0.4 + CometChatSDK 4.1.7 frameworks. Each defect is
confirmed three ways: the live PR #482 preview, the shipped .swiftinterface, and
the calls-core/ios-sdk source.
D1 AudioModeType does not exist — 17 occurrences across 6 pages, including a
whole "AudioModeType Values" accordion. The real enum is AudioMode
(calls-core CallModels.swift:305); 0 hits in the interface AND 0 in the
binary's exported symbols. The fix is NOT a rename: the docs' example
implements MediaEventsListener, whose real signature is
onAudioModeChanged(audioMode: AudioMode) — so the parameter LABEL was wrong
too, along with the ObjC selector and the AudioModeType*Speaker constants.
D2 CometChat.CallStatus -> CometChat.callStatus (lowercase c). ringing x2.
rejectCall(sessionID:status:) takes CometChat.callStatus (CometChatSDK
4.1.7 L549/L1816). Swift is case-sensitive; the documented line cannot
compile.
D3 .setType(.video) -> .setSessionType(.video) — 8 occurrences across 5 pages.
SessionSettingsBuilder has no setType (calls-core
SessionSettingsBuilder.swift:120). Includes migration-guide-v5, where it sat
under the *v5* tab, i.e. presented as the new API.
D4 The SPM URL 404s. github.com/cometchat/cometchat-calls-sdk-ios returns 404;
the package is at github.com/cometchat/calls-sdk-ios (its Package.swift
declares name "CometChatCallsSDK"). This is step 2 of installation, so it
breaks before a reader writes a line of code.
D5 region documented as "us or eu" — `in` is also valid and is what several
live apps use. The SDK does not restrict it (calls-core CometChatCalls.swift
only guards region.length > 0), and the CHAT SDK docs already say
"us", "eu", "in". 3 occurrences.
D6 .setAppId()/.setRegion() are @available(deprecated) in 5.0.4 — "Use
set(appID:) instead" (calls-core CallAppSettingsBuilder.swift:70-78). Both
spellings are public, so this compiles with a warning rather than failing;
the docs should teach the supported pair.
D7 call.callInitiator?.name does not compile. callInitiator is AppEntity?
(CometChatSDK 4.1.7 L950) and `name` lives on User : AppEntity (L1864/1869),
so it needs a downcast. The ObjC variant has the same bug.
D8 The migration guide's init snippet says "No changes required" and then shows
CallAppSettings() followed by .set(appId:)/.set(region:). CallAppSettings has
ONLY init() — no setters at all (calls-core CallAppSettings.swift:12); the
setters are on CallAppSettingsBuilder, and it is set(appID:) with a capital
ID. Corrected to the builder + .build(), and verified to compile.
Verification: all 8 classes now return 0 across all 25 /calls/ios pages, and the
corrected fences type-check. Of the 50 fences on the edited pages, the only
remaining failures are snippet fragments referencing reader-supplied variables
(authToken, sessionID, callViewContainer, listener instances) — expected in
documentation, not defects.
NOT changed, deliberately: bare `AudioMode` was initially flagged as ambiguous,
but that was an artifact of the test harness importing BOTH SDKs. These pages
import only the Calls SDK, so bare AudioMode is correct here. The ambiguity is
real for an app doing 1:1 ringing (which needs both SDKs) and is recorded in the
skill instead of over-qualifying every page.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@ashfaqcometchat