Perplexity has rolled out a substantial iOS update for its Comet AI browser, adding phone‑number actions, a refined iPad sidebar, persistent search‑result state, and more. The article breaks down each new feature, the SDK and OS requirements, and the migration steps for developers maintaining cross‑platform versions of the app.

What’s new in the Comet iOS update?
Perplexity announced an eight‑point upgrade to its Comet AI browser for iPhone and iPad. The headline features read like a checklist for everyday power users, but each item also carries implications for the codebase, especially if you’re shipping a companion Android version or a macOS client.
| New feature | User benefit | Developer impact |
|---|---|---|
| Phone‑number actions – tap‑to‑call, FaceTime, Message, or save to Contacts | One‑tap communication from any web page | Requires Contacts and CallKit permissions; update Info.plist with NSContactsUsageDescription and NSPhoneNumberUsageDescription. |
| Polished iPad sidebar – smoother slide animation, layout that respects window size | More native‑feel multitasking on larger screens | Sidebar now uses UISplitViewController with preferredDisplayMode = .oneBesideSecondary. Ensure you test on iPadOS 18+ where the new UISplitViewControllerStyle is available. |
| Finance Deep Dive in a tab – long‑form analysis opens as a real browser tab | Users can keep research separate from chat context | New CometTab class replaces the previous modal view. Add it to your UITabBarController hierarchy and handle state restoration via scene(_:willConnectTo:options:). |
| Search results remember their place – context persists when switching tabs | No lost scroll position, smoother workflow | Persist scroll offset in UserDefaults keyed by URL hash. For Android, mirror this with SharedPreferences. |
| Drag images into the assistant – drop a picture from any tab | Visual queries become a single gesture | Implement UIDropInteraction on the assistant view. Remember to request NSPhotoLibraryAddUsageDescription if you later allow saving. |
| Omni‑box adapts to the page – eliminates flicker when moving between light/dark sites | Consistent UI, less eye strain | Use overrideUserInterfaceStyle on the omni‑box view controller and listen for traitCollectionDidChange. |
| Recently Closed stays cleared – "Clear All" persists across restarts | Cleaner privacy experience | Store the cleared flag in the app’s sandboxed container; clear the Core Data store on launch if the flag is set. |
| Deleted threads stay deleted – opening an old link no longer resurrects a thread | Predictable chat history | Mark thread entities with a deletedAt timestamp and filter them out in all fetch requests. |
Beyond the headline items, Perplexity lists a handful of stability fixes: crash‑safe data clearing, sharper favicons, and refined bottom controls on iPhone. Those are largely internal, but they hint at a broader push toward iOS 18 compatibility.
SDK versions and platform requirements
The update targets iOS 17.0 as a minimum, but several new UI components (the animated sidebar and drag‑and‑drop support) only work on iOS 18.0 and later. The App Store metadata now lists:
- Minimum OS: iOS 17.0
- Target SDK: iOS 18.0
- Xcode: 16.1 or newer (required for the new
UISplitViewControllerStyleAPIs) - Swift: 6.0
If you maintain a parallel Android build, the corresponding changes map to:
- minSdkVersion: 26 (Android 8.0) – unchanged
- targetSdkVersion: 35 (Android 15) – to align with the latest platform behaviours
- Android Studio: Flamingo 2024.2.1 or newer
- Kotlin: 2.0
The iPad sidebar overhaul uses the UISplitViewController API that was refreshed in iOS 18. For devices stuck on iOS 17, the app falls back to the legacy UISplitViewController style, which means you should keep both code paths guarded by if #available(iOS 18, *) checks.
Cross‑platform considerations
State persistence
Both iOS and Android now keep scroll position and tab state across app restarts. The pattern Perplexity uses – a lightweight JSON blob stored in UserDefaults/SharedPreferences – is portable. If you already have a custom persistence layer (e.g., Realm or Core Data), you can still serialize the JSON into a single field to avoid schema migrations.
Drag‑and‑drop image input
iOS leverages the native UIDropInteraction. Android’s counterpart is the View.OnDragListener combined with the new android:dragAndDropMode="image" attribute introduced in API 35. Implementing a shared abstraction layer (e.g., a CometImageInput interface) lets you route the platform‑specific callbacks to the same AI‑request builder.
Permissions model
The new phone‑number actions require explicit user consent on both platforms. On Android, you’ll need android.permission.CALL_PHONE and READ_CONTACTS. Because the feature is optional, guard the UI with a runtime permission request and hide the actions if the user declines.
Migration checklist for existing Comet developers
- Update Xcode & SDK – Switch the project’s Base SDK to iOS 18.0 and set the Deployment Target to 17.0.
- Add new permissions – Insert the four
NS*UsageDescriptionkeys intoInfo.plistand update the Android manifest with the CALL_PHONE and READ_CONTACTS permissions. - Replace modal finance view – Refactor the old
FinanceModalViewControllerinto aCometTabsubclass. Register it with theUITabBarControllerand ensurescene(_:continue:)can restore it from a deep link. - Implement drag‑and‑drop – Add a
UIDropInteractionto the assistant view and mirror the logic in the Android module usingView.OnDragListener. - Persist UI state – Store scroll offsets and tab order in a JSON file; test that the data survives a forced quit (
kill -9). - Test on iPadOS 17 – Verify the fallback sidebar layout works; use the Simulator to toggle the iOS version.
- Run UI tests – Update XCTest and Espresso suites to cover the new phone‑number actions and the "Clear All" persistence.
- Publish – Bump the version to 2.4.0 (or higher) in both App Store Connect and Google Play Console, and include the new change log.
Bottom line
Perplexity’s eight‑point refresh is more than a UI polish; it introduces new system integrations that force developers to rethink permissions, state handling, and cross‑platform abstractions. By aligning your code with the iOS 18 SDK and mirroring the drag‑and‑drop and permission flows on Android, you can ship a consistent experience across devices while keeping the app ready for future platform updates.
You can grab the latest build from the App Store.
Related reading:

Comments
Please log in or register to join the discussion