Skip to content
This repository has been archived by the owner on Jul 2, 2022. It is now read-only.

AirMessage's message relay server for Mac

License

Notifications You must be signed in to change notification settings

airmessage/airmessage-server-legacy

Repository files navigation

AirMessage Server

This version of AirMessage Server is no longer maintained. Please see airmessage/airmessage-server, which runs as a native macOS app.

AirMessage running on Microsoft Edge

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)

Getting started

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.

Building a signed app

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.

File structure outline

  • /src holds the regular Java source code and resources.
  • /connectauth holds a webpack page that is used for Firebase Authentication.

Building and running for AirMessage Connect

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.