Skip to content

v1.11.3

Choose a tag to compare

@TranHoaiHung TranHoaiHung released this 19 Mar 08:42
· 37 commits to main since this release

Crash Fixes (Crashlytics top crashes — ~503 crashes eliminated)

  • NSRangeException crash (OMIEndpoint.h, Crash #2/#7/#8 — 255 crashes) — OMIEndpointStateString macro had 3 elements but enum had 4 (OMIEndpointClosing). objectAtIndex:3 on 3-element array → crash. Fixed: added "OMIEndpointClosing" + safe bounds check returns "Unknown" for any future out-of-range values.

  • EXC_BAD_ACCESS pjmedia_codec_mgr_enum_codecs (OMIEndpoint.m, OMICallStats.m, Crash #3 — 72 crashes) — pjsua_enum_codecs() called with NULL codec_mgr during VoIP push cold start. 4 call sites missing NULL guard (1 already had it). Fixed: added pjsua_get_pjmedia_endpt() + pjmedia_endpt_get_codec_mgr() NULL check before every pjsua_enum_codecs call.

  • PushKit VoIP kill by iOS (VoIPPushHandler.m, Crash #4 — 85 crashes) — Duplicate VoIP push detection (FIX PUSH-1) called completion() without reportNewIncomingCall → iOS killed app. Fixed: duplicate push path now calls reportAndEndDummyCallWithCompletion to satisfy PushKit requirement.

  • pjsip_timer_init_session crash (OMICallManager.m, Crash #5 — 91 crashes) — startCallToNumberNoReg created PJSIP session while endpoint transitioning to Closing state → session pool corrupt → crash. Fixed: added pjsua_get_state() != PJSUA_STATE_RUNNING guard before call creation.

Call Handling

  • OMIHaveAnotherCall false positive (OmiClient.m) — getNewestCall != nil rejected new calls even when existing call was already disconnected/disconnecting (PJSIP cleanup delay). Most common customer complaint. Fixed: added callState check — only reject if existing call is truly active (not disconnected/disconnecting).

  • OMIHaveAnotherCall diagnostic logging (OmiClient.m) — All 3 HaveAnotherCall exit paths now log full context (SIP user, endpoint state, all active calls with uuid/state/phone/createDate) and auto-upload log file. Search [HaveAnotherCall] on server to diagnose.

Audio

  • AUDIO-STORM speaker toggle fix (OMIEndpoint.m) — Toggle speaker caused ~30 audio underflows in 0.3s → AUDIO-STORM detector killed the call. Fixed: increased threshold from 30→60 and decreased window from 2s→0.5s. Speaker switch (~30 underflows) stays below threshold, real network death (100+ underflows) still detected.

Sample App

  • CallingView timer not starting (ViewController.m) — Outgoing call: CallingView presented at CALLING state, then CONFIRMED created a NEW CallingView → timer reset to 0. Fixed: CONFIRMED reuses existing CallingView, only updates callUUID. Incoming call: CallingView presented AT CONFIRMED → missed CONFIRMED notification. Fixed: startCallTimer called in present completion block.