Phase 5 iOS: Set up macOS build environment and CI for iOS app #7

Open
opened 2026-06-18 14:58:34 +00:00 by mohlec · 0 comments
Owner

Goal

Build and distribute the Slash iOS app (IPA → TestFlight → App Store) mirroring the existing Android CI pipeline.

Hard blocker: macOS machine required

Forgejo runner on CT#139 is Linux only — Xcode will not run on it. A macOS machine is required. Options:

  1. NCW marketing dept Mac — already has Apple developer accounts; fastest path (recommended first step)
  2. Mac Mini/Studio on-prem — add a macOS Forgejo runner; full self-hosted CI
  3. Hosted macOS CI (MacStadium, Codemagic, etc.) — pay-per-minute, no hardware needed

Once a Mac is available, register it as a Forgejo runner with label macos and the build workflow can target it.

Build requirements

Requirement Detail
Xcode 16+ macOS 15 host, iOS 16.0 minimum deployment target
Node 22.14.0 Same as Android build
CocoaPods pod install required before build (Podfile present)
Fastlane 2.71.0+ iOS build/deploy lanes already defined in fastlane/Fastfile
Apple Developer account Code signing certs + provisioning profiles via Fastlane match
App Store Connect API key IOS_API_ISSUER_ID, IOS_API_KEY, IOS_API_KEY_ID secrets for TestFlight
Fastlane match git repo Private repo storing signing certs (MATCH_GIT_URL + MATCH_PASSWORD secrets)

What is already done

All NCW branding changes from ncw/main apply to iOS automatically (shared JS/TS code):

  • App name: Slash (strings.xml is Android-only — iOS equivalent needs updating in Xcode project)
  • Default server: https://chat.ncwcom.com (assets/base/config.json — shared)
  • Bundle ID: needs updating in Xcode project from com.mattermost.rnbetacom.ncwcom.slash
  • App icons: ios/Mattermost/Images.xcassets/AppIcon.appiconset/ — still Mattermost compass; replace with Slash/NCW icon

Tasks

  • Decide on macOS build environment (marketing dept Mac / on-prem / hosted)
  • Register Mac as Forgejo runner with label macos
  • Update Xcode project bundle ID to com.ncwcom.slash
  • Replace app icons in ios/Mattermost/Images.xcassets/AppIcon.appiconset/ with NCW/Slash assets
  • Update iOS display name in Xcode project (CFBundleDisplayNameSlash)
  • Set up Fastlane match repo with NCW Apple Developer signing certs
  • Add Forgejo Actions secrets: IOS_API_ISSUER_ID, IOS_API_KEY, IOS_API_KEY_ID, MATCH_GIT_URL, MATCH_PASSWORD
  • Create .forgejo/workflows/build-ios.yml mirroring the Android workflow
  • First TestFlight build passes
  • Submit to App Store under NCW developer account

Notes

  • Apple Developer account management: NCW marketing dept
  • AGPL-3 source link required in App Store listing description or support URL
  • Bundle ID com.ncwcom.slash must match across Xcode project, provisioning profile, and App Store Connect listing
## Goal Build and distribute the Slash iOS app (IPA → TestFlight → App Store) mirroring the existing Android CI pipeline. ## Hard blocker: macOS machine required Forgejo runner on CT#139 is Linux only — Xcode will not run on it. A macOS machine is required. Options: 1. **NCW marketing dept Mac** — already has Apple developer accounts; fastest path (recommended first step) 2. **Mac Mini/Studio on-prem** — add a macOS Forgejo runner; full self-hosted CI 3. **Hosted macOS CI** (MacStadium, Codemagic, etc.) — pay-per-minute, no hardware needed Once a Mac is available, register it as a Forgejo runner with label `macos` and the build workflow can target it. ## Build requirements | Requirement | Detail | |-------------|--------| | Xcode 16+ | macOS 15 host, iOS 16.0 minimum deployment target | | Node 22.14.0 | Same as Android build | | CocoaPods | `pod install` required before build (Podfile present) | | Fastlane 2.71.0+ | iOS build/deploy lanes already defined in `fastlane/Fastfile` | | Apple Developer account | Code signing certs + provisioning profiles via Fastlane `match` | | App Store Connect API key | `IOS_API_ISSUER_ID`, `IOS_API_KEY`, `IOS_API_KEY_ID` secrets for TestFlight | | Fastlane `match` git repo | Private repo storing signing certs (`MATCH_GIT_URL` + `MATCH_PASSWORD` secrets) | ## What is already done All NCW branding changes from `ncw/main` apply to iOS automatically (shared JS/TS code): - App name: `Slash` (strings.xml is Android-only — iOS equivalent needs updating in Xcode project) - Default server: `https://chat.ncwcom.com` (assets/base/config.json — shared) - Bundle ID: needs updating in Xcode project from `com.mattermost.rnbeta` → `com.ncwcom.slash` - App icons: `ios/Mattermost/Images.xcassets/AppIcon.appiconset/` — still Mattermost compass; replace with Slash/NCW icon ## Tasks - [ ] Decide on macOS build environment (marketing dept Mac / on-prem / hosted) - [ ] Register Mac as Forgejo runner with label `macos` - [ ] Update Xcode project bundle ID to `com.ncwcom.slash` - [ ] Replace app icons in `ios/Mattermost/Images.xcassets/AppIcon.appiconset/` with NCW/Slash assets - [ ] Update iOS display name in Xcode project (`CFBundleDisplayName` → `Slash`) - [ ] Set up Fastlane `match` repo with NCW Apple Developer signing certs - [ ] Add Forgejo Actions secrets: `IOS_API_ISSUER_ID`, `IOS_API_KEY`, `IOS_API_KEY_ID`, `MATCH_GIT_URL`, `MATCH_PASSWORD` - [ ] Create `.forgejo/workflows/build-ios.yml` mirroring the Android workflow - [ ] First TestFlight build passes - [ ] Submit to App Store under NCW developer account ## Notes - Apple Developer account management: NCW marketing dept - AGPL-3 source link required in App Store listing description or support URL - Bundle ID `com.ncwcom.slash` must match across Xcode project, provisioning profile, and App Store Connect listing
Sign in to join this conversation.
No labels
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
slash/slash-mobile#7
No description provided.