This article originally appeared in TidBITS on 2014-10-15 at 11:23 a.m.
The permanent URL for this article is: http://tidbits.com/article/15122
Include images: Off

Transmit for iOS 8 Provides File Transfer Everywhere

by Glenn Fleishman

Despite the existence of Box, Dropbox, and myriad other cloud-based file synchronization services, many of us wind up with files stored hither and yon on more traditional Internet file servers. A Web server may require SFTP to upload attachments referenced by HTML pages. We may be using Amazon’s Simple Storage Service (S3) to deal with assets that are pushed out through Amazon’s CloudFront content distribution network. Or perhaps we need to manage files on a WebDAV server for access by iOS apps.

In Mac OS X, Transmit has been my preferred file-transfer app for the last few years, offering a high degree of sophistication that has improved over time, especially with some of Amazon S3’s many peculiarities (see “Transmit 4 Improves on File Transfers [1],” 21 January 2011). For instance, upload a CSS file to S3 without sending a Content-Type header of text/css and it may not be fed out correctly to Web browsers; Transmit added a way to handle that a few years ago.

When I heard that Transmit was coming to iOS, I initially thought it might be a bit of a goof; the makers, Panic, are known for humor. There are already plenty of server-access apps of varying kinds for iOS, and Transmit’s strength on the Mac is largely related to it being file-transfer glue, enabling users to preview, open, edit, and manage files stored on a variety of remote servers. But I quickly realized that iOS 8’s addition of extension support meant that Transmit’s capabilities would be available throughout iOS without explicit integration by other app developers.

Transmit iOS [2] ($9.99 in the App Store [3]) is a powerhouse tool for anyone who needs to access remote files within iOS apps and who previously spent inordinate amounts of time moving things around and employing workarounds to access them. (Transmit does not include Dropbox support, which is integrated directly into many iOS apps.)

Files as a Service -- Since I’m ancient, I remember when FTP (File Transfer Protocol) was the only option to move files to and from a server. It has since been joined by many others, but remains surprisingly common. As with the Mac version of Transmit, the iOS version supports plain, unencrypted FTP (Bad, bad, bad! Get your hosts to upgrade!), as well as two forms of secured FTP [4]: the now-deprecated implicit SSL, which uses a different port and encrypts everything using TLS/SSL certificate-based key exchange and encryption; and FTP with TLS/SSL, also known as explicit SSL, which uses the same port as a regular FTP connection.

Transmit can also create connections with the widely available SFTP [5] (Secure FTP), which uses SSH for encryption; WebDAV [6], a file-service standard with both open and secured versions that uses HTTP for interactions; and Amazon S3 [7], the online retailer’s vast storage farm, as well as DreamHost’s S3-compatible DreamObjects [8] service.

[image link] [9]

You can add connections manually or import settings from Transmit for Mac OS X. While Panic has developed its own synchronization feature called Panic Sync [10] that’s already built into Transmit iOS, it hasn’t yet updated the Mac version. (Transmit’s site has all the details about how data ownership and encryption keys for Panic Sync are handled.) When Transmit 5 for Mac ships, you’ll be able to keep all your connections and other settings up to date with no effort. You can currently sync between Transmit iOS running on multiple iOS devices.

Until Transmit 5 comes out, you must work through a simple six-step process to export your connections from Transmit for Mac and then import the file into Transmit iOS. Panic has posted the steps [11] in its FAQ. For security’s sake, passwords are not transferred, so you’ll need to enter them again. 1Password is a big help if you also have that installed (see “1Password 5 Touches New Heights in iOS 8 [12],” 1 October 2014, for more about 1Password’s new iOS version).

Transmit’s user interface is divided into Local and Remote screens. The Local screen shows files and folders stored in the app. You can transfer files into the app from remote servers or from other apps using iOS’s Share button functionality.

[image link] [13]

The Remote screen is where you manage servers and connect to them. Tap the + button and you can pick the type of server and enter credentials, paths, and other details. I won’t run through that here, as it’s both simple and well-documented elsewhere.

Local and Remote views have most features in common. Tap a folder to navigate down into it, and swipe right to jump up one directory level. Tap a hierarchical indented view (in the upper left) to pick a level to jump up to.

Once viewing a directory, you can tap the + button to add an empty file, create a folder for grouping, pull in an image from your photos, take a picture or shoot a video, or import from iCloud Drive.

[image link] [14]

Tapping a file reveals all available details, including a preview for supported media and document types (Transmit even renders HTML!); tap Open in Transmit to pull up a full-screen or scrollable preview. For large remote files, you have to wait until the file is retrieved to view or play back. Tap Permissions to change access control.

[image link] [15]

Further down, you can tap:

You can also copy the path, move a file within its server or local storage, duplicate it, or delete it. (All these options depend on proper permissions to allow you to do so, of course.)

Tap the Eject button at the lower right to exit the file server view in Remote.

Working with Robust Security -- We should rightly expect well-implemented security from Panic, especially for an app that, if lost and improperly locked down, could expose lots of remote assets. The company obliges, as always. For starters, as noted above, exporting favorites omits passwords, and the design of Panic Sync enables secure exchange among your devices.

While you can type or paste passwords, the integration with 1Password makes everything better. When setting up a connection that you’ve already added to 1Password, or when entering a password for a favorited item you imported, you can tap the key icon in the password field to get it from 1Password. Panic has clearly made room for integration with other password apps, such as LastPass, as 1Password appears in a list. Tap 1Password in the list, and then tap the icon in the sheet that appears to display a list of appropriate passwords.

Because of iOS sandboxing and 1Password’s current approach, 1Password displays only those passwords that match the domain name of the currently selected server in Transmit iOS. Thus, if you’re using a server that doesn’t have a domain name associated with it, or if you’ve stored credentials in 1Password without also adding the domain name (like s3.amazonaws.com for Amazon S3), 1Password won’t know which passwords to fill in. You can work around this by creating a Login entry that has its Web Page field set to the domain of the remote server, and the credentials in the username and password fields. (S3 uses an access string and a key, which correspond.)

Many SSH users like to bypass the username/password login by stashing a public key on the remote server. This works with SFTP as well, and Transmit iOS supports this feature, which can be set up natively in Mac OS X, and it doesn’t require extra configuration. (If you have no idea what I’m talking about, read this explanation [16]! It’s a nifty shortcut with a different set of security issues.)

In Transmit’s Settings screen, tap Keys, and then tap the + button. You can generate a new key, or import one from the Pasteboard (copied from another app), from a locally stored file, or via the File Transfer tab in iTunes. (For this last option, connect your iOS device to iTunes, click the Apps button in iTunes’s top toolbar, select Transmit in the File Sharing list, and then drag the keys into the right pane.)

[image link] [17]

For instance, I wanted to use my SSH key to connect to one of my servers. I followed these steps in Transmit iOS to import id_rsa, the public/private key file used by SSH.

  1. Create a connection to my MacBook Air via SFTP. (See Panic’s FAQ [18] for those steps.)

  2. Tap View Options and enable Hidden Files.

  3. Tap the .ssh directory, where SSH keys are stored.

  4. Select id_rsa, and tap Download to Documents.

  5. Tap Settings > Keys.

  6. In Keys, tap the + button and then Import from Local.

  7. Select id_rsa to import it. (Note: In Transmit iOS 1.0.1, the import succeeded, but reported as failed.)

  8. Give the id_rsa key file a unique name to differentiate it from any others. Tap it and then tap its name, at which point you can modify it and tap Done.

Once you’ve imported the SSH key, you can use it when making and saving a secure connection. Connect to a remote server, tap the key icon in the Password field, and choose Keys from the drop-down list, which lets you pick among stored SSH keys. Once you select a key, the Password field name changes to Key and the key icon switches from gray to blue. Remember to tap Save when done to store this connection.

To set up how you secure all this data within Transmit iOS, tap Settings > Touch ID & Passcode. (For devices without Touch ID, the option just reads Passcode.) You can opt for a duration up to 30 minutes after which a passcode is required, and choose a “complex” code that’s not just the four-digit PIN otherwise required. Enable Touch ID, and the passcode is bypassed in favor of a fingerprint, regardless of how you access Transmit.

Panic has put in a failsafe, too. If Erase Data is enabled in Settings > Touch ID & Passcode, the app will delete its local set of files, settings, and passwords after 10 failed passcode attempts. As long as you have synced your data or have backups of your keys and passwords, it’s a good option to turn on. Remember that physical coercion will likely render all Touch ID and passcode security moot — don’t depend on it if you traffic in truly sensitive information.

Sharing To and From -- The app by itself works well for viewing files, but that’s all preamble for using Transmit with other apps through iOS 8’s Share and Document Picker capabilities. Any iOS app that includes support for either or both can work with Transmit iOS. Share pushes a file to Transmit; Document Picker pulls one from Transmit.

For instance, let’s say I’m in Tweetbot and a friend posts a photo of her dog looking particularly adorable that I want to save to my Mac using iOS 8’s Share tool. Here are the steps I’d follow:

    [image link] [19]

  1. I touch and hold on the image, and a Share sheet pops up.

  2. In the list of apps at the top, Transmit appears. I tap it.

  3. If I’m past Transmit’s Touch ID timeout, I authenticate with my fingerprint.

  4. The Local/Remote Servers list appears, from which I can select any configured item or local storage in Transmit iOS.

  5. Let’s say I want to push this image to my MacBook Air. I tap the MacBook’s item in my stored list, and navigate to the folder in which I want to store it.

  6. Now I tap Upload, and the file is transferred.

On the Document Picker side of things, let’s say I want to add a file to Dropbox from my Amazon S3 account while I’m out and about. The latest version of Dropbox supports Document Picker, although you have to do a bit of configuration first.

    [image link] [20]

  1. In Dropbox, tap the More button at upper right, and tap Add Files.

  2. The first time you do this after installing Transmit, you need to tap More, and then enable Transmit in the Manage Storage Providers screen to appear in the list. Once you do, Transmit appears whenever you tap Add Files in the future.

  3. Tap More > Add Files > Transmit, and the Transmit picker view appears. As with sharing, you can use any preconfigured Transmit connection, such as an Amazon S3 account.

I can then, for instance, connect to an S3 server and select an image I’ve uploaded, after which it’s downloaded by Transmit and transferred to the Dropbox app, which immediately syncs it with the Dropbox servers.

With apps that allow editing documents, the Document Picker theoretically offers a round trip: when you select the file in the Document Picker, you can save your changed version back to the same source, using Transmit as a conduit. I wasn’t able to test this, since few apps have Document Picker support so far.

What’s Left to Come? -- As noted earlier, Panic Sync is terrific and works among iOS devices, but once Transmit 5 ships for the Mac, Panic Sync will dramatically improve moving connections and settings between Macs and iOS devices.

Many of the tweakier preferences available in the Mac version of Transmit aren’t yet available in Transmit iOS, and I imagine they will migrate in the future, based on demand. Most notable is setting default permissions for different server protocols based on file extensions. For instance, in the Mac version of Transmit, you can set .html files to be given World-readable and Owner-writable permissions when uploaded to an S3 server — that would be useful in Transmit iOS too. And, as noted earlier, I’d like to see Transmit iOS gain support for the Mac version’s custom S3 content headers.

These are minor omissions, and Transmit has immediately become an essential tool for me, in large part because it reduces my reliance on Dropbox as the hub through which I transfer files back and forth to iOS via my Mac. Dropbox remains useful, of course, but Transmit iOS enables me to cut out Dropbox as the middleman when I need to work with a file that’s not already in Dropbox or that lives on one of my many servers.

Along with Instapaper, 1Password, and the Swype keyboard, Transmit iOS makes working in iOS 8 a vastly more seamless experience than was possible in any previous version of iOS.

[1]: http://tidbits.com/article/11911
[2]: https://panic.com/transmit-ios/
[3]: https://itunes.apple.com/us/app/transmit-ios/id917432930?mt=8&at=10l5PW
[4]: http://en.wikipedia.org/wiki/FTPS
[5]: http://en.wikipedia.org/wiki/SSH_File_Transfer_Protocol
[6]: http://en.wikipedia.org/wiki/WebDAV
[7]: http://en.wikipedia.org/wiki/Amazon_S3
[8]: https://www.dreamhost.com/cloud/storage/
[9]: http://tidbits.com/resources/2014-10/transmit-ios-new-server-select-ftp.png
[10]: https://panic.com/sync/
[11]: https://panic.com/transmit-ios/#faq-importfavorites
[12]: http://tidbits.com/article/15091
[13]: http://tidbits.com/resources/2014-10/transmit-ios-remote-local-remote-sbs.jpg
[14]: http://tidbits.com/resources/2014-10/transmit-ios-remote-new-item.png
[15]: http://tidbits.com/resources/2014-10/transmit-ios-file-info.jpg
[16]: http://www.linuxproblem.org/art_9.html
[17]: http://tidbits.com/resources/2014-10/transmit-ios-new-key.png
[18]: https://panic.com/transmit-ios/#faq-macfiles
[19]: http://tidbits.com/resources/2014-10/transmit-ios-tweetbot-share.png
[20]: http://tidbits.com/resources/2014-10/transmit-ios-dropbox-steps.jpg