ActionCable is a new WebSockets server being released with Rails 5 which makes it easy to add real-time features to your app. This Swift client makes it dead-simple to connect with that server, abstracting away everything except what you need to get going.
This is maintained and is being used in production in the About Shout app. It is built in iOS 12.2 with Swfit 5 on Xcode 10.3 and used against a Rails 5.1.4 server hosted on Heroku.
To install, simply:
Add the following line to your Podfile
and run pod install
pod 'ActionCableClient', :git => 'https://github.com/Verdad/Swift-ActionCableClient.git', :branch => 'master'
Add the following to your Cartfile
and run carthage update
as normal.
github "Verdad/Swift-ActionCableClient"
import ActionCableClient
self.client = ActionCableClient(url: URL(string: "ws://domain.tld/cable")!)
// Connect!
client.connect()
client.onConnected = {
print("Connected!")
}
client.onDisconnected = {(error: Error?) in
print("Disconnected!")
}
// Create the Room Channel
let roomChannel = client.create("RoomChannel") //The channel name must match the class name on the server
// More advanced usage
let room_identifier = ["room_id" : identifier]
let roomChannel = client.create("RoomChannel", identifier: room_identifier, autoSubscribe: true, bufferActions: true)
// Receive a message from the server. Typically a Dictionary.
roomChannel.onReceive = { (JSON : Any?, error : ErrorType?) in
print("Received", JSON, error)
}
// A channel has successfully been subscribed to.
roomChannel.onSubscribed = {
print("Yay!")
}
// A channel was unsubscribed, either manually or from a client disconnect.
roomChannel.onUnsubscribed = {
print("Unsubscribed")
}
// The attempt at subscribing to a channel was rejected by the server.
roomChannel.onRejected = {
print("Rejected")
}
// Send an action
roomChannel["speak"](["message": "Hello, World!"])
// Alternate less magical way:
roomChannel.action("speak", ["message": "Hello, World!"])
// Note: The `speak` action must be defined already on the server
// ActionCable can be picky about origins, so if you
// need it can be set here.
client.origin = "https://domain.tld/"
// If you need any sort of authentication, you
// will not have cookies like you do in the browser,
// so set any headers here.
//
// These are available in the `Connection`
// on the server side.
client.headers = [
"Authorization": "sometoken"
]
client.onPing = {
}
For more documentation, see the wiki
Starscream: The underlying WebSocket library.
Cameron McCord, [email protected]
Daniel Rhodes, [email protected]
ActionCableClient is available under the MIT license. See the LICENSE file for more info.