iPhone (iOS) builds for testers #43

Open
opened 2026-10-05 19:27:11 +00:00 by robocub · 2 comments
Owner

Requested 2026-10-05: an iPhone build for testers.

Where things stand

  • Commet has never shipped on iOS. commet/ios/ is the stock Flutter Runner project. It still has bundle id chat.commet.commetapp and deployment target 11.0, and upstream CI has no iOS or macOS job. We'd be the first to build it.
  • The Rust library builds through cargokit, which supports iOS targets. media_kit, record, LiveKit and WebRTC all support iOS.
  • Android-only pieces must be kept off iOS: flutter_background, flutter_background_service, UnifiedPush.

What it needs

  1. A Mac to build on. iOS apps can only be compiled and signed with Xcode on macOS. Our build farm is all Linux. Running macOS in a VM on non-Apple hardware breaks Apple's licence, so that's out. Options:
    • Mac mini as a Forgejo runner (host mode, over Tailscale). A used M1/M2 or a new M4 mini works. One-time cost, fits the existing farm.
    • Hosted macOS CI: GitHub Actions macOS runners on a mirror of the repo (our own account, not Commet's), or Codemagic. No hardware, but builds run outside our farm.
    • Rented cloud Mac (AWS EC2 Mac has a 24 h minimum, Scaleway around €75 a month). Expensive for occasional builds.
  2. Apple Developer Program, $99/year. It's needed for TestFlight, the practical way to get builds to testers (90-day builds, up to 10,000 external testers after a light beta review). Without it, the only route is sideloading with AltStore/SideStore and a free Apple ID, which needs re-signing every 7 days.
  3. Porting work:
    • set the bundle id and a modern deployment target
    • pods, icons and entitlements
    • keep the Android-only plugins off iOS
    • an export-compliance answer for E2EE
    • signing in CI (fastlane match or an App Store Connect API key)
  4. Push notifications (separate, bigger). iOS has no UnifiedPush. Push needs:
    • an APNs key
    • a push gateway that speaks APNs, such as Sygnal
    • a Notification Service Extension to decrypt E2EE messages
      Ship a first build without push, which only gets messages while the app is open.

Proposed order

  1. Decide on build hardware and the developer account. These are operator decisions.
  2. Get a first unsigned simulator build, then a TestFlight build without push.
  3. Add push afterwards, as its own issue.

Filed with LLM assistance. This is a fork-only issue; never refile it on Commet's tracker.

Requested 2026-10-05: an iPhone build for testers. ## Where things stand - Commet has **never shipped on iOS**. `commet/ios/` is the stock Flutter Runner project. It still has bundle id `chat.commet.commetapp` and deployment target 11.0, and upstream CI has no iOS or macOS job. We'd be the first to build it. - The Rust library builds through cargokit, which supports iOS targets. media_kit, record, LiveKit and WebRTC all support iOS. - Android-only pieces must be kept off iOS: `flutter_background`, `flutter_background_service`, UnifiedPush. ## What it needs 1. **A Mac to build on.** iOS apps can only be compiled and signed with Xcode on macOS. Our build farm is all Linux. Running macOS in a VM on non-Apple hardware breaks Apple's licence, so that's out. Options: - Mac mini as a Forgejo runner (host mode, over Tailscale). A used M1/M2 or a new M4 mini works. One-time cost, fits the existing farm. - Hosted macOS CI: GitHub Actions macOS runners on a mirror of the repo (our own account, not Commet's), or Codemagic. No hardware, but builds run outside our farm. - Rented cloud Mac (AWS EC2 Mac has a 24 h minimum, Scaleway around €75 a month). Expensive for occasional builds. 2. **Apple Developer Program, $99/year.** It's needed for TestFlight, the practical way to get builds to testers (90-day builds, up to 10,000 external testers after a light beta review). Without it, the only route is sideloading with AltStore/SideStore and a free Apple ID, which needs re-signing every 7 days. 3. **Porting work:** - set the bundle id and a modern deployment target - pods, icons and entitlements - keep the Android-only plugins off iOS - an export-compliance answer for E2EE - signing in CI (fastlane match or an App Store Connect API key) 4. **Push notifications (separate, bigger).** iOS has no UnifiedPush. Push needs: - an APNs key - a push gateway that speaks APNs, such as Sygnal - a Notification Service Extension to decrypt E2EE messages Ship a first build without push, which only gets messages while the app is open. ## Proposed order 1. Decide on build hardware and the developer account. **These are operator decisions.** 2. Get a first unsigned simulator build, then a TestFlight build without push. 3. Add push afterwards, as its own issue. --- _Filed with LLM assistance. This is a fork-only issue; never refile it on Commet's tracker._
Author
Owner

On hold (operator, 2026-10-05). The Mac in the household is a work laptop, so it can't be used. The operator will look for a donated Mac. The Apple Developer Program fee is approved once there's a Mac to build on. There's no urgency: the main tester, Krayton, uses Android.

**On hold (operator, 2026-10-05).** The Mac in the household is a work laptop, so it can't be used. The operator will look for a donated Mac. The Apple Developer Program fee is approved once there's a Mac to build on. There's no urgency: the main tester, Krayton, uses Android.
Author
Owner

Starting point for later: upstream Commet has an unmerged platform/ios branch (mirrored here as origin/platform/ios). Its last commit is 0e4061f9, "minimum changes required to run", by Airyzz on 2025-12-22. Base the port on it instead of starting from the stock Runner project.

Starting point for later: upstream Commet has an unmerged `platform/ios` branch (mirrored here as `origin/platform/ios`). Its last commit is 0e4061f9, "minimum changes required to run", by Airyzz on 2025-12-22. Base the port on it instead of starting from the stock Runner project.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
robocub/vommet#43
No description provided.