• Stars
    star
    133
  • Rank 272,600 (Top 6 %)
  • Language
    Swift
  • License
    MIT License
  • Created almost 9 years ago
  • Updated almost 9 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Zero-setup P2P file transfer between Macs and iOS devices

🚀 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.

More Repositories

1

InAppViewDebugger

A UIView debugger (like Reveal or Xcode) that can be embedded in an app for on-device view debugging
Swift
1,871
star
2

CocoaMarkdown

Markdown parsing and rendering for iOS and OS X
Objective-C
1,200
star
3

INAppStoreWindow

NSWindow subclass with a highly customizable title bar and traffic lights
Objective-C
1,064
star
4

DominantColor

Finding dominant colors of an image using k-means clustering
Swift
959
star
5

MarkdownTextView

Rich Markdown editing control for iOS
Swift
686
star
6

SwiftAutoLayout

Tiny Swift DSL for Autolayout
Swift
655
star
7

SNRHUDKit

Code drawn AppKit HUD interface elements
Objective-C
326
star
8

swiftrsrc

Resource code generation tool for Swift
Swift
290
star
9

INDANCSClient

Objective-C Apple Notification Center Service Client
Objective-C
252
star
10

INPopoverController

A customizable popover controller for OS X
Objective-C
196
star
11

SNRSearchIndex

SearchKit backed search for Core Data
Objective-C
190
star
12

Unzip

iOS 8 Action Extension for browsing ZIP files
Objective-C
165
star
13

NSUserNotificationPrivate

Private API showcase for NSUserNotification on OS X
Objective-C
152
star
14

SNRMusicKit

All-in-one framework for browsing and playing music from various sources on iOS and OS X
Objective-C
150
star
15

WWDC-2014

Scholarship submission for WWDC 2014
Objective-C
146
star
16

INDockableWindow

A window to which other views can be "docked" to and separated into their own windows
Objective-C
114
star
17

INDLinkLabel

A simple, no frills UILabel subclass with support for links
Swift
82
star
18

SNRFetchedResultsController

Automatic Core Data change tracking for OS X (NSFetchedResultsController port)
Objective-C
81
star
19

INDSequentialTextSelectionManager

Sequential text selection for NSTextViews
Objective-C
74
star
20

OEGridView

High performance Core Animation-based grid view, originally from OpenEmu.
Objective-C
72
star
21

INDGIFPreviewDownloader

[iOS] Retrieves preview images for GIFs by downloading only the first frame
Objective-C
60
star
22

Chip8

CHIP-8 emulator and disassembler written in Swift
Swift
53
star
23

pdfcat

OS X utility for concatenating PDF files
Swift
49
star
24

ReactiveXPC

Signals across process boundaries
Swift
36
star
25

ObjectiveKVDB

Objective-C wrapper for kvdb (https://github.com/dinhviethoa/kvdb)
Objective-C
33
star
26

SwiftTableViews

Type-safe Table Views with Swift
Swift
33
star
27

AlamofireRACExtensions

ReactiveCocoa Swift extensions for Alamofire
Swift
32
star
28

Dial

The beginnings of a replacement Contacts app for iOS.
Objective-C
30
star
29

ReactiveBLE

ReactiveCocoa wrapper for communicating with BLE devices using CoreBluetooth
Objective-C
29
star
30

INSOCKSServer

SOCKS5 proxy server implementation in Objective-C
Objective-C
27
star
31

LiveWebPreview

Web development tool for automatically refreshing a page when the content changes.
Objective-C
20
star
32

SNRLastFMEngine

[DEPRECATED] A modern block-based Objective-C interface to the Last.fm API
Objective-C
19
star
33

AttributedString.swift

Swift library that adds type safety and string interpolation support to NSAttributedString
Swift
18
star
34

INKeychainAccess

[DEPRECATED] Objective-C Keychain Services Wrapper for OS X and iOS
Objective-C
17
star
35

tecs

Projects for The Elements of Computing Systems by Nisan and Schocken
Assembly
15
star
36

INTrafficLightsDisabler

SIMBL plugin to hide the traffic lights on Mac OS X
Objective-C
14
star
37

pebble-lifx

Pebble controller for LIFX bulbs. UAlberta CompE Club Hackathon 2014 project.
Objective-C
11
star
38

xcode-themes

Color themes for Xcode 4 and 5
6
star
39

radars

Apple Radars filed for OS X and iOS.
Objective-C
5
star
40

indragiek.github.com

http://indragie.com
HTML
3
star
41

arduino-copter

Copter game for Arduino + Adafruit TFT
C++
2
star
42

writing

Things that I write
2
star
43

advent-of-code-2020

My Rust solutions for https://adventofcode.com
Rust
1
star
44

bootstrap-no-responsive

Compiled Bootstrap with responsive features disabled
1
star