Latest posts from Codename One.
Blog

Pick One Contact Without Asking for the Address Book
A share screen needs one phone number. A delivery form needs one address. Neither feature needs a database of everybody the user knows. PR #5680 adds ContactPicker, a permission-free path that returns only the contacts and fields the user selects. It uses the Android 17 system Contact Picker, a narrow fallback on older Android versions, and Apple’s CNContactPickerViewController on iOS. For VoIP, VPN, native Mac and Windows work, OTP, billing, and the platform-watch process that found this gap, read the weekly overview. ...

We Stopped Waiting for Platform Changes to Find Us
For years, our warning system for Apple and Google changes was a developer whose build failed first. The community gave us excellent reports, but the sequence was backwards. A platform owner announced a deadline, time passed, an application hit the change, and only then did we trace it into the builder. This week we started a daily scheduled Codex task that reads official notices and checks them against Codename One. Its first useful results include Android 16 back handling in PR #5673 and the permission-safe Contact Picker in PR #5680. ...

Fill an SMS Verification Code Without Reading the Inbox
A six-digit text field should not need access to every message on a phone. PR #5642 adds one-time-code autofill, a country-aware phone-number field, and a complete verification component. iOS, Android, and the browser can offer the code through their protected autofill path. The application never receives the rest of the inbox. For the rest of this release, including native call management, VPN, AppKit, windows, and contacts, read the weekly overview. ...

A Mac App, Not an iOS App on a Mac
Mac Catalyst runs an iPad application on macOS. That was a useful bridge for Codename One, but it remained a bridge. Once we added multiple desktop windows, the missing desktop operations and rendering compromises stopped being edge cases. PR #5601 changes the default native Mac build to AppKit. The result is an NSApplication with NSWindow, NSMenu, NSTextInputClient, NSScreen, and a CAMetalLayer for each rendered window. It is a Mac application rather than an iOS application asking macOS to translate the experience. ...

A Dialog Can Now Be a Native Desktop Window
Last week’s native-window release could open an editor, inspector, and tool palette as separate operating-system windows. Then an ordinary Dialog.show() inside the inspector looked for the current Form and appeared on the wrong surface. That bug exposed every component that treated “top level” and “form” as synonyms. PR #5624 fixes those assumptions and adds something more visible: a Dialog can now become a real modal desktop window. ...

VoIP, VPN, and the Build System Behind Them
In 2019, a reader asked whether our WhatsApp clone included VoIP. I said no. It would require native integration, and the setup was too much for that project. For years, that was the line. VPN sat behind the same line. These features do not live neatly inside the application process. On iOS, a VoIP push can arrive before the application installs a Java listener, yet CallKit expects the incoming call to reach the lock screen on its deadline. A Call Directory integration is a separate extension executable with its own lifecycle and signing identity. Managed VPN adds Network Extension entitlements and profile rules. Android solves the same jobs through ConnectionService, VpnManager, VpnService, manifest declarations, and foreground-service rules. ...

Build Hints That Fail Before the Build Server
A bad configuration line can be worse than a failed build. If the build stays green while ignoring the setting, you usually discover the mistake in a generated native project or on a device. PR #5586 moves 87 common Codename One build hints into Java’s type system. A misspelled hint is now an unknown annotation attribute. A wrong value type or unsupported option stops at compilation instead of traveling to the build server as an inert string. ...

Rootless Jailbreak Detection: Updating the Signals, Not the Claim
ios.detectJailbreak=true did not fire on a device jailbroken with palera1n 2.1.1 in rootless mode. The build hint was wired correctly. The detector was asking questions that described the previous generation of jailbreaks. PR #5584 replaces that signal set. It recognizes rootless bootstraps, checks whether detection APIs disagree, inspects mounts and loaded images, and reruns the gate when the application returns from the background. ...

Watch Follow-Through: Complications, Tiles, and a Companion Wear APK
Last week’s wearable post ended with two conspicuous limits. Declaring a WATCH_* surface did not generate the native extension or service that puts it on a watch face. An Android companion build did not return a Wear APK beside the phone APK. PR #5583 closes both gaps. PR #5594 fixes two watchOS failures that appeared once the complete watch path ran. This is follow-through on the model we shipped last week, not a second wearable announcement. ...

UWB and Nearby Devices: Distance, Direction, Association, and Transport
Bluetooth can tell you that a device is probably nearby. Ultra-wideband can tell you that it is 42 centimeters away and 18 degrees to the right, until the person holding it turns and the direction disappears. That last clause is part of the API contract. Nearby hardware gives partial answers, permissions change by operating-system version, and Apple’s local transport cannot discover Google’s. PR #5589 exposes those boundaries through three packages under com.codename1.nearby. ...

Put App Documents in the System File Browser
An invoice, drawing, report, or project file can live inside an application for years without becoming a document the operating system understands. The user has to open the app before another app can preview or share it. PR #5607 adds com.codename1.documents. It publishes a selected, read-only document tree as a location in the iOS Files app and Android storage picker. The application decides which nodes exist, what they are called, and whether their bytes are local or fetched from a server. ...

One App, More Than One Native Window
Maven repository cutoff: update your POM today. August 28 is the day new Codename One releases stop going to Maven Central. PR #5611 makes the Codename One repository the only destination for new releases. Versions already on Central stay there, but the changes in this post and future updates resolve only from the Codename One repository. New projects already contain this configuration. Existing Maven projects need both blocks below because Maven resolves build plugins and ordinary dependencies from separate repository lists. ...