Zero-setup P2P file transfer between Macs and iOS devices

Related tags

Files Ares
Overview

🚀 Ares

Zero-setup* P2P file transfer between Macs and iOS devices

Ares is a service that I built in under 24 hours, winning first place at HackED 2016 during the University of Alberta's ECE Week.

Presentation Slides

⚠️ Ares is a proof-of-concept tech demo. It is neither secure nor bug-free enough to be used in production. ⚠️

* Zero-setup refers to the lack of setup when sending or receiving a file (e.g. opening the AirDrop tab in a Finder window, opening an email client, browsing for files in Dropbox for iOS, etc.), not the initial process of installing and setting up the Ares apps

Motivation

The existing options for trasferring a file from a Mac to an iOS device (or vice versa) are clumsy or simply unreliable. I Commonly used methods like emailing a file to yourself or using Dropbox are inconvenient because the data has to be uploaded to an intermediary before it can be received by the target device. Apple's own AirDrop is often very unreliable, and the UX is less than ideal. Why do I have to open AirDrop in a Finder tab and wait for the devices to discover each other, which sometimes doesn't happen, in order to start a file transfer?

Ares is a technology demo that shows how much more streamlined the entire process could be.

Using Ares

Ares Usage

Setting Up

Back-end

I will not be providing a hosted service that can be used directly at this time due to security concerns. You are free to set up your own instance of the back-end, which is a Node.js application that was built to be deployed using Heroku and MongoLab. Follow these steps to deploy your own Ares server instance:

Heroku
  1. Fork the repository and clone it
  2. Set up APNS, copy the key.pem and cert.pem files (named exactly that way) to the /server directory, and commit them
  3. With the Heroku Toolbelt installed, run the following commands from the root directory of the repository:
$ heroku login
$ heroku create
$ heroku addons:create mongolab:sandbox
$ heroku config:set APP_SECRET=$(uuidgen)
$ git subtree push --prefix server heroku master
Running Locally
$ cd server
$ npm install
$ export MONGOLAB_URI=$(heroku config:get MONGOLAB_URI)
$ export APP_SECRET=$(heroku config:get APP_SECRET)
$ node index.js

Replace the MONGOLAB_URI and APP_SECRET definitions with your own values if you did not deploy the application on Heroku.

iOS and Mac apps

Both the iOS and Mac application targets are set up in client/Ares.xcodeproj. The iOS-specific code is in the client/iOS directory, and the Mac-specific code is in client/Mac. client/AresKit contains the source for AresKit, a cross platform framework containing all of the code shared between the iOS and Mac clients.

Before building and running the apps, the DefaultAPIURL in client/AresKit/Client.swift will need to be changed to point to the URL for your Heroku instance, which can be obtained by running heroku apps:info.

Future Ideas

  • Bidirectional file transfer: iOS → Mac transfers in addition to the Mac → iOS transfer implemented currently
  • A full file manager in the iOS app that lets you view and catalogue files that were previously downloaded over Ares
  • Multiple simultaneous file transfers
  • Better security in verifying origins and the integrity of delivered payloads
  • Fallback to uploading files to a storage server when P2P communication is not available
  • iOS action extension for sending content from 3rd party apps via Ares

Contact

License

Ares is licensed under the MIT License. See LICENSE for more information.

You might also like...
🎹 MIDIKit extension for SMF (Standard MIDI File)

🔌 SMF (Standard MIDI File) Extension for MIDIKit This extension adds abstractions for reading and writing Standard MIDI Files. Getting Started Add MI

ZipArchive is a simple utility class for zipping and unzipping files on iOS, macOS and tvOS.

SSZipArchive ZipArchive is a simple utility class for zipping and unzipping files on iOS, macOS and tvOS. Unzip zip files; Unzip password protected zi

FileManager replacement for Local, iCloud and Remote (WebDAV/FTP/Dropbox/OneDrive) files -- Swift
FileManager replacement for Local, iCloud and Remote (WebDAV/FTP/Dropbox/OneDrive) files -- Swift

This Swift library provide a swifty way to deal with local and remote files and directories in a unified way. This library provides implementaion of W

Swift framework for zipping and unzipping files.
Swift framework for zipping and unzipping files.

Zip A Swift framework for zipping and unzipping files. Simple and quick to use. Built on top of minizip. Usage Import Zip at the top of the Swift file

NP-Open-House-Setup - Automated setup utility and instructions for Friction booth at NP Open House 2022

Friction Setup Setup Instructions Friction setup Start up the iMac Give it a cou

Automated Apple Music Lossless Sample Rate Switching for Audio Devices on Macs.
Automated Apple Music Lossless Sample Rate Switching for Audio Devices on Macs.

LosslessSwitcher switches your current audio device's sample rate to match the currently playing lossless song on your Apple Music app, automatically.

This component allows for the transfer of data items between collection views through drag and drop
This component allows for the transfer of data items between collection views through drag and drop

Drag and Drop Collection Views Written for Swift 4.0, it is an implementation of Dragging and Dropping data across multiple UICollectionViews. Try it

This component allows for the transfer of data items between collection views through drag and drop
This component allows for the transfer of data items between collection views through drag and drop

Drag and Drop Collection Views Written for Swift 4.0, it is an implementation of Dragging and Dropping data across multiple UICollectionViews. Try it

Impervious is a privacy and security-focused browser with native DANE support and a decentralized p2p light client.

Impervious iOS The first browser with support for native DNS-Based Authentication of Named Entities (DANE) with true downgrade protection, and the fir

Beacon is a privacy and security-focused browser with native DANE support and a decentralized p2p light client.

Beacon iOS The first browser with support for native DNS-Based Authentication of Named Entities (DANE) with true downgrade protection, and the first b

Capacitor File Opener. The plugin is able to open a file given the mimeType and the file uri
Capacitor File Opener. The plugin is able to open a file given the mimeType and the file uri

Capacitor File Opener. The plugin is able to open a file given the mimeType and the file uri. This plugin is similar to cordova-plugin-file-opener2 without installation support.

Software Dummy Display Adapter for Apple Silicon Macs to Have Custom HiDPI Resolutions.
Software Dummy Display Adapter for Apple Silicon Macs to Have Custom HiDPI Resolutions.

BetterDummy Dummy Display for Apple Silicon Macs to achieve custom resolutions. About M1 macs tend to have issues with custom resolutions. Notoriously

DDC Library for Apple Silicon Macs

AppleSiliconDDC DDC Library for Apple Silicon Macs Usage Upcoming... For sample implementation take a look at the source code of MonitorControl (as Ar

Tool for running macOS guest virtual machines in macOS 12 host or higher on M1 arm64 Macs

macosvm macosvm is a command line tool which allows creating and running of virtual machines on macOS 12 (Monterey) using the new Virtualization frame

A CLI utility to check or uncheck Open Using Rosetta preference for Apple Silicon macs.
A CLI utility to check or uncheck Open Using Rosetta preference for Apple Silicon macs.

SetArchPrefForURL A CLI utility to "check" or "uncheck" "Open Using Rosetta" preference for Apple Silicon macs. Usage: SetArchPrefForURL path-to-the-

An example of using the GPU on M1 arm64 Macs for basic compute functions

M1-GPU-Compute Using Swift and Apple's Metal API to utilize the GPUs on M1 equipped Macs Adding Two Arrays CPUs perform computations sequentially, wai

Switshot is a game media manager helps you transfer your game media from Nintendo Switch to your phone, and manage your media just few taps.
Switshot is a game media manager helps you transfer your game media from Nintendo Switch to your phone, and manage your media just few taps.

Switshot is a game media manager helps you transfer your game media from Nintendo Switch to your phone, and manage your media just few taps.

Discover, download, compile & launch different image processing & style transfer CoreML models on iOS.
Discover, download, compile & launch different image processing & style transfer CoreML models on iOS.

⚠️ ⚠️ ⚠️ IMPORTANT: I'm no longer maintaining Awesome-ML. Awesome ML is an iOS app that is made to demonstrate different image processing CoreML model

Budget - Income, Expense & Transfer Tracker + Budgeting app for iOS made with SwiftUI.

Budget Income, Expense & Transfer Tracker + Budgeting app for iOS made with SwiftUI. Roadmap This is a work in progress. I'm working on the following

Comments
  • WiFi Direct with iOS/Android/OSX support

    WiFi Direct with iOS/Android/OSX support

    I really like this concept! I don't like the fact that it needs to go over the network.

    It'd be a lot better to support WiFi Direct with pairing over Bluetooth LE/NFC/QR code. It'd also be bidirectional automatically and the protocol is cross platform compatible. Any thoughts?

    opened by avaidyam 1
Releases(0.1)
Owner
Indragie Karunaratne
Indragie Karunaratne
FileExplorer is a powerful iOS file browser that allows its users to choose and remove files and/or directories

FileExplorer (iOS 9.0+) ?? Project created and maintained by Rafał Augustyniak. You can find me on twitter (@RaAugustyniak). Introduction FileExplorer

Rafał Augustyniak 717 Dec 19, 2022
zip file I/O library for iOS, macOS and tvOS

ZipZap is a zip file I/O library for iOS, macOS and tvOS. The zip file is an ideal container for compound Objective-C documents. Zip files are widely

Glen Low 1.2k Dec 27, 2022
FileKit is a Swift framework that allows for simple and expressive file management.

FileKit is a Swift framework that allows for simple and expressive file management.

Nikolai Vazquez 2.2k Jan 7, 2023
A micro-framework for observing file changes, both local and remote. Helpful in building developer tools.

KZFileWatchers Wouldn't it be great if we could adjust feeds and configurations of our native apps without having to sit back to Xcode, change code, r

Krzysztof Zabłocki 1k Dec 19, 2022
File management and path analysis for Swift

Pathos offers cross-platform virtual file system APIs for Swift. Pathos is implement from ground-up with on each OS's native API. It has zero dependen

Daniel Duan 104 Nov 19, 2022
RavynOS File manager built in Cocoa/Appkit and ObjC

Filer A file manager and re-implementation of macOS's Finder. A key component of ravynOS, Filer is the first application you see after you start ravyn

RavynSoft 8 Oct 3, 2022
NV_MVVM-C is a template file generator. This can reduce the time taken to write the boilerplate code and create the files.

NV_MVVM-C Template, is an MVVM-C Boilerplate generator which will help you generate all the necessary files for your project architected in MVVM-C.

Nikhil Vinod 9 Sep 6, 2022
'Root' filesystem File Provider extension for iOS.

RootFSProvider This sample project was previously available on on Patreon. It is written in Objective-C, and has not been updated for newer APIs since

Steven Troughton-Smith 14 Sep 24, 2022
Finder-style iOS file browser written in Swift

FileBrowser iOS Finder-style file browser in Swift 4.0 with search, file previews and 3D touch. Simple and quick to use. Features ✨ Features ?? Browse

Roy Marmelstein 1.5k Dec 16, 2022
SwiftXLSX - A library focused creating Excel spreadsheet (XLSX) files directly on mobile devices

SwiftXLSX Excel spreadsheet (XLSX) format writer on pure SWIFT. SwiftXLSX is a l

null 19 Dec 13, 2022