Redwing is a native macOS Webex client foundation. It uses the local
webex-swift-sdk package for OAuth, Keychain-backed account storage, realtime
connection state, Spaces, Messages, and threaded message snapshots.
The current app is read-only. It provides:
- A Webex setup flow for one active account
- A native Spaces -> Messages -> Threads lane surface
- A menu bar attention feed
- A shared realtime Webex connection
- Diagnostics and status reporting for local testing
- macOS 26.4 or newer with Xcode installed
- The
redwing.xcodeprojproject in this repository - The local SDK checkout at:
/Users/harriche/gits/github.com/mechaHarry/webex-swift-sdkThe SDK remote is:
[email protected]:mechaHarry/webex-swift-sdk.gitIf Xcode cannot resolve webex-swift-sdk, make sure that local checkout exists
at the path above or update the package reference in Xcode.
Update the app version in one place:
Redwing/Config/Version.xcconfigREDWING_SEMVER is the release version source of truth. The app and test
bundle plists consume it through Xcode build settings for both
CFBundleShortVersionString and CFBundleVersion.
Use MAJOR.MINOR.PATCH without a leading v; the release script creates the
signed git tag as v<REDWING_SEMVER>.
List the available schemes:
xcodebuild -list -project redwing.xcodeprojBuild the app locally:
xcodebuild build \
-project redwing.xcodeproj \
-scheme Redwing \
-destination 'platform=macOS' \
-derivedDataPath /private/tmp/redwing-local \
CODE_SIGNING_ALLOWED=NORun the test suite:
xcodebuild test \
-project redwing.xcodeproj \
-scheme Redwing \
-destination 'platform=macOS' \
-derivedDataPath /private/tmp/redwing-local-tests \
CODE_SIGNING_ALLOWED=NOOpen the project in Xcode:
open redwing.xcodeprojSelect the Redwing scheme, then run the app with Product > Run.
To open a command-line build directly, first run the build command above, then:
open /private/tmp/redwing-local/Build/Products/Debug/Redwing.appOn first launch, Redwing shows Webex setup. Enter:
- Client ID
- Client secret
- Redirect URI, defaulting to
http://127.0.0.1:8282/oauth/callback - Scopes including
spark:all spark:kms
After authorization, the app loads Spaces, Messages, thread details when a threaded message is selected, and attention items in the menu bar.
- Secrets are stored through the SDK-backed Keychain store.
- The app is sandboxed and has network client entitlement enabled.
- UI code is native SwiftUI/AppKit and does not call Webex REST directly.
Create only the local versioned zip and checksum:
./release.sh --package-onlyRun the full release flow:
GITHUB_TOKEN=... ./release.shThe script reads REDWING_SEMVER, builds the Release app, writes
dist/Redwing-<version>-macos-<arch>.zip and .sha256, creates and verifies a
signed tag named v<version>, pushes it, creates a GitHub release with generated
notes, uploads both assets, and publishes the release. By default it passes
CODE_SIGNING_ALLOWED=NO to Xcode; set CODE_SIGNING_ALLOWED=YES when the
project has a working signing team/certificate configured.