[swift-users] How to 'import' 3rd-party frameworks and files when using the /usr/bin/swift REPL
hengist.podd at nuggle.uk
Fri Sep 23 10:04:24 CDT 2016
I'm working on a new "AppleScript" (Apple event) bridge, SwiftAutomation
<https://bitbucket.org/hhas/swiftae>, and while the code's done bar
cleaning and testing, I've gotten stuck on how to write a step-by-step
tutorial for it.
As I understand it, the recommended way to provide user tutorials is as
one or more Playgrounds embedded within the Xcode project itself, as
that gives them automatic access to the project's framework products,
Source files, etc, and the tutorial text itself included as `//!` comments.
However, Playgrounds have one giant limitation: each time the user adds
or changes ONE line of code, ALL OF THE CODE in the playground is
automatically re-executed. That's not a problem when the code doesn't
have any external side-effects, but it's a deal killer here: repeatedly
sending a `make` command will spawn multiple extra TextEdit documents;
repeatedly sending a `delete` command could wipe too many files in
Finder, and so on. Switching the playground to manual execution doesn't
really help either, since the point of a step-by-step tutorial is to
enter one line at a time and see what it does before moving on to the
next step. So Playgrounds are a non-starter for this kind of use -
unless I've missed something?
Luckily, Swift also provides an old-school interactive REPL at
`/usr/bin/swift`, which allows Swift code to be entered and executed in
traditional single-line mode, while also preserving any variable
assignments for reuse in later lines. Thus the user can safely `make` a
new TextEdit document on line 1, modify its contents on line 2, and save
and close it on line 3, and TextEdit will perform each of these steps
immediately and only once. However, I can't figure out how to make the
`swift ...` command do the following:
1. Import the `SwiftAutomation.framework` from my Xcode project (since
Swift 3 still doesn't allow us to build standalone frameworks for
installing into `~/Library`).
2. Read and compile additional Swift source files (`TextEditGlue.swift`,
`FinderGlue.swift`, etc) from my Xcode project, so that those files'
classes are also available for use when the REPL starts.
Can the `swift` command do both these things (I don't mind if it takes a
couple seconds to launch while it compiles the glue files), and if it
can what is the magical incantation for doing so?
More information about the swift-users