AirMessage lets people use iMessage on the devices they like. AirMessage Server functions as the bridge between AirMessage client apps and iMessage by running as a service on a Mac computer.
Other AirMessage repositories: Android | Web | Connect (community)
To build AirMessage Server, you will need version 14+ of the JDK, as well as Node.js.
AirMessage Server uses Java, jOOQ (for database interactions), SWT (for UI), and Gradle (for builds).
AirMessage Server uses a configuration file to associate with online services like Firebase and Sentry. The app will not build without valid configuration files, so to get started quickly, you can copy the provided default files to use a pre-configured Firebase project, or you may provide your own Firebase configuration file:
connectauth/secrets.default.json
> connectauth/secrets.json
src/main/resources/secrets.default.properties
> src/main/resources/secrets.properties
src/main/resources/sentry.default.properties
> src/main/resources/sentry.properties
(no-op)AirMessage Server uses a combination of Gradle and a shell script to build the app (if someone is more experienced with Gradle, I'd love to move the build to be Gradle-only!) To run the app, run ./gradlew run
. To package the app, run ./buildAndSign.sh
.
Please note that the authentication screen for signing in to AirMessage Connect will likely not work unless the app is packaged due to Apple's App Transport Security restrictions.
To create a signed app, run buildAndSign.sh [signing identity] [account username] [account password] [team short name]
.
The command requires 4 arguments in order to be able to properly codesign and notarize the app:
[signing identity]
: Used with the codesign
command. Run security find-identity -v -p codesigning
to list codesign identities. Provide the full string value of the identity, like Developer ID Application: John Doe (DUCNFCN445)
.[account username]
: Used with altool
. The email address of an Apple ID with access to App Store Connect.[account password]
: Used with altool
. An app-specific password for the Apple ID.
Either the name of the Keychain entry of the password in the format of @keychain:ENTRY_NAME
, or in plaintext (not recommended).[team short name]
: Used with altool
. The short name of the team to use for signing. Run xcrun altool --list-providers -u "AC_USERNAME" -p "@keychain:ENTRY_NAME"
to list providers./src
holds the regular Java source code and resources./connectauth
holds a webpack page that is used for Firebase Authentication.In order to help developers get started quickly, we host a separate open-source version of AirMessage Connect at connect-open.airmessage.org
.
The default configuration is pre-configured to authenticate and connect to this server.
Since this version of AirMessage Connect is hosted in a separate environment from official servers, you will have to connect client apps to the same AirMessage Connect server.
We kindly ask that you do not use AirMessage's official Connect servers with any unofficial builds of AirMessage-compatible software.
Thank you for your interest in contributing to AirMessage! You're helping to shape the future of an open, secure messaging market. Should you have any questions, comments, or concerns, please shoot an email to hello@airmessage.org.