Post

Replies

Boosts

Views

Activity

Application shows Alert-popup to use Push to Talk framework
Hello All, I am getting following popup for our application, Question, What does it actually mean? We are using following VoIP entitlements, i) com.apple.developer.pushkit.unrestricted-voip ii) com.apple.developer.pushkit.unrestricted-voip.ptt We are getting this popup in iOS 16. Earlier we did not get this popup. SDK version we are using is 16.2 How long can we use these entitlements? What will happen if we do not update to new Push to Talk framework? Thanks.
1
0
868
May ’23
Starting recording from background for a VoIP application.
After searching for a few days, i have come to know that iOS doesn't allow recording in background. Through recording continues when it has started in foreground and goes to background. Came to know that, "This is a new a privacy protection restriction introduced in 12.4" When trying to start recording from background, we get “AVAudioSession.ErrorCode.cannotStartRecording” error. What do i need: our application needs to starts recording audio and transmit it while in background when user presses an external button i.e. PTT button of a BLE device. It seems there are several similar issue posted in this forum but neither could i find any plausible solution nor got any specific documentation from Apple. Requesting to help me out or at least please provide me a specific documentation stating "background recording is not possible". And if any workaround exists, please suggest. P.S. we are using **AVAudioSession.sharedInstance().setCategory(.playAndRecord, mode: .spokenAudio, options: [.mixWithOthers, .allowBluetooth, .allowBluetoothA2DP, .duckOthers]) **
0
0
958
Feb ’23
Failure to set AVAudioSession category from background routes audio to random ports, iOS 16
We have a VOIP application. We are setting AudioSession category on appLaunch. Need to support A2Dp profiles. do { try AVAudioSession.sharedInstance().setCategory(.playAndRecord, mode: .spokenAudio, options: [.mixWithOthers, .allowBluetooth, .allowBluetoothA2DP, .duckOthers]) try AVAudioSession.sharedInstance().setActive(true) MCXLogVerbose("[Audio] [App] AVAudioSession activation to playAndRecord SUCCESSFUL") } catch { MCXLogVerbose("[Audio] [App] AVAudioSession activation to playAndRecord FAILED") } We also have a framework which handles everything regarding networking, audio capturing, transmission etc. Apart from the application side, we also need to change category according to necessities. Everything works fine while application is in foreground. But in background state. it seems category can't be set. ERROR: "AVAudioSession.ErrorCode.cannotInterruptOthers", meaning another session is active(i guess). But i could not find any. As a result, incoming audio sometimes plays at receiver or speaker or airpod randomly, after a single failure. We are trying to switch category between playAndrecord and playback. do { try AVAudioSession.sharedInstance().setCategory(.playback, mode: .spokenAudio, options: [.mixWithOthers, .duckOthers]) try AVAudioSession.sharedInstance().setActive(true) MCXLogVerbose("[Audio] [App] AVAudioSession activation to playback SUCCESSFUL") } catch { MCXLogVerbose("[Audio] [App] AVAudioSession activation to playback FAILED") } ** Few confusions here, Why does it not fail while in foreground? Why simple straightforward demo application can set category from background without any failure? It seems iOS15 doesn't create audio routing errors even if session had failed to change its category. Whats changed? Am i missing any subtle steps to follow? Also airplay shows wrong port as selected. **
0
1
1.5k
Feb ’23
Detect and implementation details for eSIM in iPhone
I need to identify LTE/5G mobile data is connected through which SIM if there is multiple SIM in iPhone. I need below information: How to programmatically detect MCC and MNC code of eSIM in iPhone? If there is 2 SIM in iPhone. Let's say, one is Verizon physical SIM and AT&T eSIM. how can I identify whether internet mobile data is connected through AT&T eSIM or Verizon physical SIM? Please help me to get this informations.
8
0
4.1k
Oct ’22
PushToTalk Framework: requesting clarifications
Hi, We have already developed a PTT app and it uses PTT entitlement for VOIP APNS. I am having some difficulties understanding how to integrate the pushToTalk framework. It would be very helpful if you kindly clarify my concerns. How will I get a channel UUID? When will it be created? Are the channel and session same? Suppose group A is active, and a high priority group B call comes in between, will group A channel be interrupted? How this scenario will be handled? I am assuming that, in the case of an incoming call, APNS will go to each participant of a channel, but to create an audio session and transmission, I will still need to communicate with my own server explicitly. Can you please share the detailed process?
1
1
1.3k
Aug ’22
File descriptor (FD) value increase problem in BSD Socket API calling in iOS
We are getting file descriptor (FD) value using the below BSD socket API in iOS 13.0+ devices. fd = ::socket(ipVer == V4 ? PF_INET : PF_INET6, SOCK_STREAM, 0); In our app, we use this to create a TLS connection in regular intervals, and we always close the previous connection before executing this. in this situation, we found sometimes the same FD value was returned in a subsequent execution of this socket API. Like FD value is getting value 27 in subsequent execution, But sometimes it keeps increasing and it exceeds 1024 value which is making socket execution blocked. What is the logic in iOS for setting this FD value? Even though we close the previous socket why FD value keep on increasing? Is there any way to control the MAX FD value, as it will never exceed 1000? Is there any relation with server and client connection time period, which may cause the FD value increase on the client-side in each new set of TLS connections by using the socket method even though the previous socket was closed? Note: https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/FD_SET.2.html The default size FD_SETSIZE (currently 1024) is somewhat smaller than the current kernel limit to the number of open files. However, in order to accommodate programs that might potentially use a larger number of open files with select, it is possible to increase this size within a program by providing a larger definition of FD_SETSIZE before the inclusion of <sys/types.h>. How to increase the limit of FD_SETSIZE beyond 1024 through overriding the FD_SetSize defined in the sys/types.h?
4
0
2.1k
Feb ’22
Client Hello was initiated for TLS connection
After 3 way handshake complete of TCP connection, TLS connection was not initiated. Client Hello was not available in wireshark or no failure. Success case: [Client][TCP][SYN] -> [Server][TCP][SYN, ACK] -> [Client][TCP][ACK] -> [Client][TLS][Client Hello] -> TLS established Fail case 1: In case of fail case always started with Encrypted Alert Client IP 49347 Server IP 5080 TLSv1.2 91 Encrypted Alert -->> Unknown Encrypted Alert generated. Transport Layer Security TLSv1.2 Record Layer: Encrypted Alert Content Type: Alert (21) Version: TLS 1.2 (0x0303) Length: 26 Alert Message: Encrypted Alert Client IP 49347 Server IP 5080 TCP 60 49347 → 5080 [FIN, ACK] Seq=1651544 Ack=583068 Win=65535 Len=0 Server IP 5080 Client IP 49347 TCP 60 5080 → 49347 [ACK] Seq=583068 Ack=1651544 Win=65535 Len=0 Server IP 5080 Client IP 49347 TCP 60 5080 → 49347 [FIN, ACK] Seq=583068 Ack=1651544 Win=65535 Len=0 Server IP 5080 Client IP 49347 TCP 60 5080 → 49347 [ACK] Seq=583069 Ack=1651545 Win=65535 Len=0 Client IP 49347 Server IP 5080 TCP 60 [TCP Retransmission] 49347 → 5080 [FIN, ACK] Seq=1651544 Ack=583069 Win=65535 Len=0 Server IP 5080 Client IP 49347 TCP 60 [TCP Dup ACK 292970#1] 5080 → 49347 [ACK] Seq=583069 Ack=1651545 Win=65535 Len=0 Client IP 50201 Server IP 5080 TCP 84 50201 → 5080 [SYN, ECN, CWR] Seq=0 Win=65535 Len=0 MSS=1340 WS=64 TSval=1315484363 TSecr=0 SACK_PERM=1 Server IP 5080 Client IP 50201 TCP 68 5080 → 50201 [SYN, ACK, ECN] Seq=0 Ack=1 Win=21440 Len=0 MSS=1440 SACK_PERM=1 Client IP 50201 Server IP 5080 TCP 60 50201 → 5080 [ACK] Seq=1 Ack=1 Win=65535 Len=0 --->>> Client is not sending client hello to setup TLS connection. Server IP 5080 Client IP 50201 TCP 60 5080 → 50201 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0 Fail case 2: In case of fail case always started with Encrypted Alert Client IP 50493 Server IP 5080 TLSv1.2 91 Encrypted Alert -->> Unknown Encrypted Alert generated. Transport Layer Security TLSv1.2 Record Layer: Encrypted Alert Content Type: Alert (21) Version: TLS 1.2 (0x0303) Length: 26 Alert Message: Encrypted Alert Client IP 50493 Server IP 5080 TCP 60 50493 → 5080 [FIN, ACK] Seq=39328 Ack=38304 Win=65535 Len=0 Server IP 5080 Client IP 50493 TCP 60 5080 → 50493 [ACK] Seq=38304 Ack=39328 Win=59839 Len=0 Server IP 5080 Client IP 50493 TCP 60 5080 → 50493 [FIN, ACK] Seq=38304 Ack=39328 Win=59839 Len=0 Server IP 5080 Client IP 50493 TCP 60 5080 → 50493 [ACK] Seq=38305 Ack=39329 Win=59839 Len=0 Client IP 50493 Server IP 5080 TCP 60 [TCP Retransmission] 50493 → 5080 [FIN, ACK] Seq=39328 Ack=38305 Win=65535 Len=0 Server IP 5080 Client IP 50493 TCP 60 [TCP Dup ACK 183#1] 5080 → 50493 [ACK] Seq=38305 Ack=39329 Win=59839 Len=0 Client IP 50495 Server IP 5080 TCP 84 50495 → 5080 [SYN] Seq=0 Win=65535 Len=0 MSS=1282 WS=64 TSval=222259839 TSecr=0 SACK_PERM=1 Server IP 5080 Client IP 50495 TCP 68 5080 → 50495 [SYN, ACK] Seq=0 Ack=1 Win=20512 Len=0 MSS=1440 SACK_PERM=1 Client IP 50495 Server IP 5080 TCP 60 50495 → 5080 [ACK] Seq=1 Ack=1 Win=65535 Len=0 --->>> Client is not sending client hello to setup TLS connection. Server IP 5080 Client IP 50495 TCP 60 5080 → 50495 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0
3
0
2k
Jan ’22
HTTP request failure with -1009 error code
I am developing one voIP application in which I have to register to the server every 60 minutes. Register consists of two parts, HTTP request to web server. Some other tasks in another server. During initial login, I am getting access token and refresh token. Access token has a validity of 48 hours. Every one hour I get push notifications from server for which I have to do registration. Also I request for access token using refresh token on the push notifications I get on 45th, 46th and 47th hours so that my access token remain valid. Everything works fine. Access token, login, register to server. After 48 hours getting Access token using Refresh token also works good most of the time. But sometimes for getting access token using refresh token I am getting the following error, Error Domain=org.openid.appauth.general Code=-5 "Connection error making token request to ‘’: The Internet connection appears to be offline.." UserInfo={NSLocalizedDescription=Connection error making token request to ‘**/mga/sps/oauth/oauth20/token': The Internet connection appears to be offline.., NSUnderlyingError=0x28991fc90 {Error Domain=NSURLErrorDomain Code=-1009 "The Internet connection appears to be offline." UserInfo={_kCFStreamErrorCodeKey=50, NSUnderlyingError=0x28991fa50 {Error Domain=kCFErrorDomainCFNetwork Code=-1009 "(null)" UserInfo={_NSURLErrorNWPathKey=satisfied (Path is satisfied), interface: pdp_ip0[lte], ipv4, ipv6, dns, expensive, _kCFStreamErrorCodeKey=50, _kCFStreamErrorDomainKey=1}}, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask .<9>, _NSURLErrorRelatedURLSessionTaskErrorKey=(     "LocalDataTask .<9>" ), NSLocalizedDescription=The Internet connection appears to be offline., NSErrorFailingURLStringKey=/mga/sps/oauth/oauth20/token, NSErrorFailingURLKey=****/mga/sps/oauth/oauth20/token, _kCFStreamErrorDomainKey=1}}}) I am not sure why I am getting this error. I am sure internet was available on my device at that time. Because I am getting success response for other registration tasks at that time (FYI, I request for access token using refresh token for the last 3 pushes I get i.e, 45th, 46th and 47th hours). Did someone run into this issue before. Please suggest me why I am getting this error and how to get rid of it. I am using iOS 13+ devices.
0
0
1.5k
Jan ’22
BGTaskScheduler not working properly
I am developing one application which has to perform some network operation time to time. I am not using push notifications. I am using BGTaskScheduler to perform some background operations but it does not seem to be working consistently all the time. I got BGTask callback on 30 minutes, sometimes on 9 minutes and sometimes even not at all. When user force kill the app does BGTaskScheduler work? Doesn’t it work when battery power is low? Can someone provide enough informations when it does or does not work.
3
0
1.8k
Jan ’22
SSL failure when using NSURLSession
For our network application we are trying to connect to different servers located in different places. We are using the following code, let urlString = //url string let url = URL.init(string: urlString) session = URLSession(configuration: .default, delegate: myDelegate, delegateQueue: nil) var request = URLRequest.init(url: url) //request configuration goes here, And finally calling this api, let task = session?.dataTask(with: request) { (data, response, error) {} task.resume() We are trying to fetch server certificate and using that certificate we are trying to connect to the server but out of 6 servers 1 server certificate is getting this following SSL error (Error Domain=NSURLErrorDomain Code=-1200 "An SSL error has occurred and a secure connection to the server cannot be made." UserInfo={NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?, _kCFStreamErrorDomainKey=3, NSErrorPeerCertificateChainKey=( "&lt;cert(0x103150000) s: /URL/ i: DigiCert SHA2 Secure Server CA&gt;", "&lt;cert(0x103150a00) s: DigiCert SHA2 Secure Server CA i: DigiCert Global Root CA&gt;" ), NSErrorClientCertificateStateKey=0, NSErrorFailingURLKey=/URL/, NSErrorFailingURLStringKey=/URL/, NSUnderlyingError=0x281c387b0 {Error Domain=kCFErrorDomainCFNetwork Code=-1200 "(null)" UserInfo={_kCFStreamPropertySSLClientCertificateState=0, kCFStreamPropertySSLPeerTrust=&lt;SecTrustRef: 0x282267a20&gt;, _kCFNetworkCFStreamSSLErrorOriginalValue=-9802, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9802, kCFStreamPropertySSLPeerCertificates=( "&lt;cert(0x103150000) s: /URL/ i: DigiCert SHA2 Secure Server CA&gt;", "&lt;cert(0x103150a00) s: DigiCert SHA2 Secure Server CA i: DigiCert Global Root CA&gt;" )} We are wondering what might have gone wrong. Can someone please help me with this.
1
0
1.6k
Nov ’21
UDP socket bind fail after returning from suspened state
For UDP socket creating and binding we are using below: bool UDPSocket::Create() {   int retval = 0;   struct timeval sTime;   sTime.tv_sec = 0;   sTime.tv_usec = 100000;   if (mstLocalAddr.m_bIsIPV6)     mSockfd = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP);   else     mSockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);   if (mSockfd == -1) {     MLog("Socket create failed, errno: %d", errno);     return false;   }       if (setsockopt(mSockfd, SOL_SOCKET, SO_REUSEPORT, reinterpret_cast<char*>(&sTime), sizeof(struct timeval)) != 0) {     MLog("Socket setsockopt() failed");     return false;   }   if (mstLocalAddr.m_bIsIPV6) {     retval = bind(mSockfd, (struct sockaddr*)&(mstLocalAddr.u.m_stIPV6Addr), sizeof(sockaddr_in6));   } else {     retval = bind(mSockfd, (struct sockaddr*)&(mstLocalAddr.u.m_stIPV4Addr), sizeof(sockaddr_in));   }   if (retval != 0) { printf("Socket Bind failed:%d", errno);      return false;   }   MLog("Socket Create and Bind success");   return true; } Normally it works fine, but sometimes in the suspended state of the application when we try to create and bind socket on a certain port lets say 6355, mSockfd and setsockopt was successful, but bind return socket error[49] - Can't assign requested address. Network Interface is pdp_ip0 or utunX and active, and through that interface other traffic like HTTP, SIP is working fine after coming back from the suspended state. Only problem is sometimes udp socket bind is getting failed.
1
0
1.5k
Aug ’21