[swift-evolution] [Draft] Expanding Build Configuration Tests for Simulator and Device targets
Erica Sadun
erica at ericasadun.com
Mon Mar 14 13:29:06 CDT 2016
Gist: https://gist.github.com/erica/6c3892fe603659b6e5ab
Feedback, corrections, suggestions requested and welcome. Thanks, -- Erica
Expanding Build Configuration Tests for Simulator and Device targets
Proposal: SE-00XX
Author(s): Erica Sadun <http://github.com/erica>
Status: TBD
Review manager: TBD
<https://gist.github.com/erica/6c3892fe603659b6e5ab#introduction>Introduction
This proposal introduces a build configuration test to differentiate device and simulator builds. This test represent a common categorization requirement for Metal, Keychain, and AVFoundation Camera code.
This proposal was discussed on-list in the Expanding Build Configuration Tests for Simulator and Device targets <applewebdata://E091D50D-DE8F-40D6-9BFD-E493DCEAA4F4> thread.
<https://gist.github.com/erica/6c3892fe603659b6e5ab#motivation>Motivation
Swift target detection is unnecessarily complicated and error prone as they're based on testing for target architectures that may potentially change over time. Making simulator detection dependent on a mismatch between architecture and the operating system shows an obvious gap in the current build configuration test suite.
// Test for a simulator destination
#if (arch(i386) || arch(x86_64)) && (!os(OSX))
print("Simulator")
#else
print("Device")
#endif
// More restrictive test for iOS simulator
// Adjust the os test for watchOS, tvOS
#if (arch(i386) || arch(x86_64)) && os(iOS)
// iOS simulator code
#endif
<https://gist.github.com/erica/6c3892fe603659b6e5ab#detail-design>Detail Design
This proposal adds #if target(simulator) and #if target(device) to distinguish whether application code is compiled to run in a simulated environment or on a device. Code running on desktop systems are considered to be on-device.
<https://gist.github.com/erica/6c3892fe603659b6e5ab#impact-on-existing-code>Impact on Existing Code
This proposal does not impact existing code. As it is unnecessarily complicated to craft fixits that look for common test patterns, I recommend only that the new configurations be mentioned in release notes and added to the Using Swift with Cocoa and Objective-C document.
<https://gist.github.com/erica/6c3892fe603659b6e5ab#current-art>Current Art
Swift currently supports the following configuration tests:
The literals true and false
The os() function that tests for OSX, iOS, watchOS, tvOS, and Linux
The arch() function that tests for x86_64, arm, arm64, and i386
The swift() function that tests for specific Swift language releases, e.g. swift(>=2.2)
<https://gist.github.com/erica/6c3892fe603659b6e5ab#alternatives-considered>Alternatives Considered
There are no alternatives considered.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160314/85afffeb/attachment.html>
More information about the swift-evolution
mailing list