AirMessage Server, implemented natively in Swift

Last update: May 12, 2022

AirMessage Server

AirMessage for Android and AirMessage for web connected to AirMessage Server

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

AirMessage Server requires Xcode 12+ to build, as well as Node.js and OpenSSL.

To generate a universal OpenSSL binary to link, run Configure.command in the OpenSSL directory.

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:

  • AirMessage/AuthSite/secrets.default.js > AirMessage/AuthSite/secrets.js
  • AirMessage/Secrets.default.xcconfig > AirMessage/Secrets.xcconfig

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 [email protected].

GitHub

https://github.com/airmessage/airmessage-server-next
Comments
  • 1. Call status check script not working

    As I said in #2 , I wasn't able to complete a call previously due to lack of physical camera. I have one now, but FaceTime still refuses to work. When trying to do a FaceTime call, before even connecting or declining, the following error happens:

    AppleScript Error -1719: System Events got an error: Can't get scroll area 2 of window 1 of process "FaceTime". Invalid index.

    I glanced over the code and it seems that it is trying to get the sidebar (scroll area) that is not present here because the call has not yet started. When the error happens, this is the view of the desktop computer:

    CleanShot 2022-03-17 at 18 27 47@2x


    System Details

    • Mac mini (M1, 2020) w/ 8GB RAM
    • Headless (aka no display attached)
    • Camera: Logitech 720p webcam (it is detected in FaceTime, the black view is because I wrapped it in a cloth)
    • AirMessage Server: 4.0.0-alpha7 (build 36)
    Reviewed by andre4ik3 at 2022-03-17 15:35
  • 2. Sending Files Hangs in Monterey

    Hi, awesome work with AirMessage! Just wanted to open an issue for this since it's just come up for me after upgrading macOS...

    It seems that while AirMessage server is perfectly functional sending plain text messages, while sending files, the message in question just endlessly hangs until eventually getting a "Failed to Send" error from iMessage. It appears this may already be known but wanted to let the author know that AirMessage is impacted.

    My solution for now is just to downgrade macOS to Big Sur.

    Reviewed by eliellis at 2022-01-31 15:41
  • 3. 12.3.1 - server 3.4.1 image/audio/video sending/encoding issues

    UPDATE: forget everything, I went for alpha 8 and everything sends correctly. Great job!

    Hi there,

    Cool piece of software, like it. Installed it and the android app. It only syncs 4-5 conversations from the whole bunch but it's fine, will deal with that later.

    The main issue is only text goes through. I tried to send a picture, a video, and an audio message. All 3 display a progress bar in messages that is never ending.

    In the logs I see airmessage attempting to convert the amr to aaf but it fails or something goes wrong because the file that makes it into messages is an amr.

    Images attached are in an odd encapsulation or sending method, they appear as regular files that cannot be previewed. However, if I double click that file and then drag & drop it from preview back to the same conversation it sends as a normal JPEG with preview, normally.

    Videos I have not been able to send, they never finish sending.

    My suggestion would be to either bundle an ffmpeg or require it to convert to an idevice-friendly mp4 format, and maybe do an image conversion with apple's own utility (I forget the name) before sending it out. That way it would be consistent with what you are attempting to do with audio (amr->aaf)

    latest.log.zip

    image-fails-to-send

    • just noticed I'm in the wrong repo, sorry, please move to legacy
    Reviewed by working-name at 2022-05-05 14:15
  • 4. Duplicate messages

    Not sure if this is the android app or the server but anywho, submitting it here.

    When the android app loses connection which happens several hundred times per day while connected to my local wifi (that's because the fallback is the intranet address?), it sometimes decides to just send me the same notification over and over again. When I open the android up, I get 2 copies of the same messages - send and received. Then on the next notification I get 3 copies, and then 4. Haven't seen 5 yet, fingers crossed! 🤞

    Reviewed by working-name at 2022-05-16 17:20
  • 5. AirMessage not receiving FaceTime Calls

    Hi, There is an issue of not receiving FaceTime calls on AirMessage. I can receive the call on facetime it self but the call never shows in air message app or web.

    Reviewed by kushmittal2009 at 2022-05-06 15:25
  • 6. Facetime "crashes"

    Seems that Facetime eventually stops responding and the camera goes dead. I'm not sure if others experienced this but I have to restart facetime. I wonder if having the camera going 24 hours per day eventually causes an issue. Maybe minimizing Facetime at the end of a call might help this situation or even closing the app?

    Reviewed by larsdennert at 2022-04-18 21:13
  • 7. Sync issue in create outgoing facetime?

    tell application "System Events" tell process "FaceTime" --Click the "New FaceTime" button set createButton to button 2 of window 1 click createButton DO YOU NEED A DELAY OR CHECK FOR EXIST HERE? SEEMS ANYTIME YOU WANT TO CREATE A WINDOW OBJECT YOU ARE NOT GUARANTEED OF THE TIMING IN A THREADED OS IS MY THOUGHT. THE SHEET MAY NOT YET EXIST WHEN YOU TRY TO GET IT. --Get the sheet set createSheet to sheet 1 of window 1

    		--Focus the input field
    		set inputField to text field 1 of createSheet
    		set focused of inputField to true
    
    Reviewed by larsdennert at 2022-03-26 17:16
  • 8. Arbitrary delay issues with slow macs

    In get facetime link SEE TEXT IN CAPS. Examine get new facetime link for the same robustness.

    ell application "System Events" tell process "FaceTime" --Open sidebar repeat with buttonEl in buttons of window 1 if (exists attribute "AXIdentifier" of buttonEl) and (value of attribute "AXIdentifier" of buttonEl = "toggleSidebarButton") then click buttonEl end if end repeat

    	--Wait for sidebar to open
    	delay 1 BETTER TO REPEAT TEST FOR EXIST SIDE BAR BUTTON
    	
    	--Clear the clipboard
    	set the clipboard to ""
    
    	--Click "share link" button BETTER TO INCLUDE THIS IN REPEAT SECTION BELOW IN CASE THE CLICK DIDNT GO
    	set linkButton to button 2 of last group of list 1 of list 1 of scroll area 2 of window 1
    	click linkButton
    	delay 0.1
    	click menu item 1 of menu of linkButton
    	
    	repeat
    		if the clipboard is not ""
    			return the clipboard as string
    		end if
    		delay 0.1
    	end repeat
    end tell
    

    end tell

    Reviewed by larsdennert at 2022-03-26 16:53
Related tags
Simple camera application for iOS that uploads pictures to WebDAV server or Dropbox quickly. Available on the AppStore.
Simple camera application for iOS that uploads pictures to WebDAV server or Dropbox quickly. Available on the AppStore.

Upupu Simple camera application for iOS that uploads pictures to WebDAV server or Dropbox quickly. Also available on the AppStore. Features Easy and f

Apr 26, 2022
The frontend (phone) code for the e-mission server

e-mission phone app This is the phone component of the e-mission system. ✨ This has now been upgraded to cordova [email protected] and [email protected] (details)

Mar 27, 2022
API surface for Swift plug-ins using the Swift Plugin Manager

SwiftPlugin The minimal API surface required for the Swift Plugin Manager to create instances from a loaded plugin. Additional documentation and refer

Mar 25, 2022
Contentful.swift : Swift Delivery SDK for Contentful
Contentful.swift : Swift Delivery SDK for Contentful

contentful.swift - Swift Delivery SDK for Contentful Swift SDK for the Contentfu

Jan 6, 2022
Swift Package Manager command plugin for Swift-DocC

Swift-DocC Plugin The Swift-DocC plugin is a Swift Package Manager command plugin that supports building documentation for SwiftPM libraries and execu

May 10, 2022
Agrume - 🍋 An iOS image viewer written in Swift with support for multiple images.
Agrume - 🍋 An iOS image viewer written in Swift with support for multiple images.

Agrume An iOS image viewer written in Swift with support for multiple images. Requirements Swift 5.0 iOS 9.0+ Xcode 10.2+ Installation Use Swift Packa

May 4, 2022
BlockiesSwift - Unique blocky identicons generator for Swift
BlockiesSwift - Unique blocky identicons generator for Swift

⚗️ BlockiesSwift This library is a Swift implementation of the Ethereum fork of Blockies which is intended to be used in iOS, watchOS, tvOS and macOS

Apr 29, 2022
FacebookImagePicker is Facebook album photo picker written in Swift.
FacebookImagePicker is Facebook album photo picker written in Swift.

Features • Installation • Usage • Translation • License GBHFacebookImagePicker is Facebook's album photo picker written in Swift, built to provide a s

Apr 10, 2022
GPUImage 2 is a BSD-licensed Swift framework for GPU-accelerated video and image processing.
GPUImage 2 is a BSD-licensed Swift framework for GPU-accelerated video and image processing.

GPUImage 2 Brad Larson http://www.sunsetlakesoftware.com @bradlarson [email protected] Overview GPUImage 2 is the second generation of th

May 18, 2022
GPUImage 3 is a BSD-licensed Swift framework for GPU-accelerated video and image processing using Metal.
GPUImage 3 is a BSD-licensed Swift framework for GPU-accelerated video and image processing using Metal.

GPUImage 3 Janie Clayton http://redqueengraphics.com @RedQueenCoder Brad Larson http://www.sunsetlakesoftware.com @bradlarson [email protected]

May 23, 2022
A lightweight generic cache for iOS written in Swift with extra love for images.
A lightweight generic cache for iOS written in Swift with extra love for images.

Haneke is a lightweight generic cache for iOS and tvOS written in Swift 4. It's designed to be super-simple to use. Here's how you would initalize a J

May 11, 2022
A lightweight and fast image loader for iOS written in Swift.

ImageLoader ImageLoader is an instrument for asynchronous image loading written in Swift. It is a lightweight and fast image loader for iOS. Features

Mar 7, 2022
A Swift implementation of fastimage. Supports PNG, GIF, and JPEG.
A Swift implementation of fastimage. Supports PNG, GIF, and JPEG.

ImageScout ImageScout is a Swift implementation of fastimage. It allows you to find the size and type of a remote image by downloading as little as po

Apr 11, 2022
A Swift client library for generating URLs with imgix

imgix-swift is a client library for generating image URLs with imgix. Written in Swift, but can be used with Objective-C codebases as well. Installati

Mar 1, 2022
Kingfisher is a powerful, pure-Swift library for downloading and caching images from the web
Kingfisher is a powerful, pure-Swift library for downloading and caching images from the web

Kingfisher is a powerful, pure-Swift library for downloading and caching images from the web. It provides you a chance to use a pure-Swift way to work

May 19, 2022
🍁🥓 Lightweight and fast Swift library for image downloading, caching and transformations
🍁🥓 Lightweight and fast Swift library for image downloading, caching and transformations

MapleBacon Introduction MapleBacon is a lightweight and fast Swift library for downloading and caching images. Example The folder Example contains a s

Mar 19, 2022
An image download extension of the image view written in Swift for iOS, tvOS and macOS.
An image download extension of the image view written in Swift for iOS, tvOS and macOS.

Moa, an image downloader written in Swift for iOS, tvOS and macOS Moa is an image download library written in Swift. It allows to download and show an

Feb 4, 2022
❄️ SVG in Swift
❄️  SVG in Swift

Snowflake ❤️ Support my apps ❤️ Push Hero - pure Swift native macOS application to test push notifications PastePal - Pasteboard, note and shortcut ma

May 16, 2022
Fabulous Image Processing in Swift
Fabulous Image Processing in Swift

Toucan is a Swift library that provides a clean, quick API for processing images. It greatly simplifies the production of images, supporting resizing,

May 16, 2022