Codename One Adds Native VoIP and VPN Support
Codename One introduces PR #5604 and #5693, bringing cross-platform VoIP push handling and managed VPN capabilities via its build server architecture.

Stock photo for illustration only, not from the actual event
- Codename One officially adds cross-platform support for VoIP and VPN features.
- The build server automatically compiles and configures necessary native extensions.
- Package boundaries prevent unused native code from triggering Apple App Store rejections.
Back in 2019, open-source framework Codename One—which builds native iOS, Android, desktop, and web apps from Java or Kotlin—drew a firm line against supporting VoIP because the native integration setup was too demanding for the project at the time.
Features like VoIP and VPN do not live neatly inside a standard application process. On iOS, a VoIP push can arrive before the application initializes a Java listener, yet CallKit demands that incoming calls reach the lock screen immediately. Android presents similar requirements through ConnectionService, VpnManager, and VpnService.

Stock photo for illustration only, not from the actual event

Stock photo for illustration only, not from the actual event
To overcome this, Codename One leverages its build system. Because builders already assemble the native product, they can dynamically alter its shape based on the Java packages the application actually utilizes, linking frameworks and injecting required permissions automatically through PR #5604 and PR #5693.
Enabling cross-platform runtimes to handle complex native lifecycle hooks and system extensions via a centralized build server addresses a fundamental limitation in multiplatform app development, sparing engineering teams from maintaining separate native build pipelines.
Furthermore, isolating features into specific packages—such as com.codename1.call.session and com.codename1.call.voip—ensures that applications only compile the native machinery they actually require, helping developers avoid Apple App Store rejections tied to unused background entitlements.
Source: Dev.to
Found something wrong in this article? Report an issue with this article
Comments
Leave a Comment