diff --git a/.travis.yml b/.travis.yml
index 6186e58..f2d271a 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -3,7 +3,12 @@ matrix:
- os: osx
language: generic
# Xcode version implicitly defines the Swift version to be used on macOS.
- osx_image: xcode8.2
+ osx_image: xcode8.3
+
+ - os: osx
+ language: generic
+ # Xcode version implicitly defines the Swift version to be used on macOS.
+ osx_image: xcode9
- os: linux
language: generic
@@ -22,7 +27,7 @@ matrix:
#
# You can use tags to select a specific Swift version if the
# image supports it, e.g. "swift:3.0.2" or "swift:latest".
- DOCKER_IMAGE="swift:3.0.2"
+ DOCKER_IMAGE="swift:3.1"
script:
- chmod ugo+x ./scripts/travis-build-script.sh
diff --git a/Configs/SortedArray.plist b/Configs/SortedArray.plist
index 3c7646a..80f8e2f 100644
--- a/Configs/SortedArray.plist
+++ b/Configs/SortedArray.plist
@@ -15,7 +15,7 @@
CFBundlePackageType
FMWK
CFBundleShortVersionString
- 0.3
+ 0.5
CFBundleSignature
????
CFBundleVersion
diff --git a/Package.swift b/Package.swift
index e3ce275..be4e43e 100644
--- a/Package.swift
+++ b/Package.swift
@@ -1,11 +1,14 @@
+// swift-tools-version:3.1
import PackageDescription
/// Provides the `SortedArray` type, an array that keeps its elements
/// sorted according to a given sort predicate.
///
/// - Author: Ole Begemann
+/// - Seealso: https://github.com/ole/SortedArray
/// - Seealso: https://blog/2017/02/sorted-array/
///
let package = Package(
- name: "SortedArray"
+ name: "SortedArray",
+ swiftLanguageVersions: [3, 4]
)
diff --git a/README.md b/README.md
index 9c722f5..e5bcde1 100644
--- a/README.md
+++ b/README.md
@@ -1,12 +1,12 @@
# SortedArray
-A sorted array type written in Swift 3.0.
+A sorted array type for Swift 3.1+ and 4.0+.
Provides the `SortedArray` type, an array that keeps its elements sorted according to a given sort predicate.
Written by Ole Begemann, February 2017.
-For more info, see my accompanying [blog article](https://oleb.net/blog/2017/02/sorted-array/).
+For more info, see the [GitHub repo](https://github.com/ole/SortedArray) and my accompanying [blog article](https://oleb.net/blog/2017/02/sorted-array/).
## Status
@@ -14,6 +14,8 @@ For more info, see my accompanying [blog article](https://oleb.net/blog/2017/02/
## Supported Platforms
+Supports Swift versions 3.1, 3.2, and 4.0. Not compatible with Swift 3.0. The last version compatible with Swift 3.0 is v0.4.
+
Since the code has no dependencies other than the Swift standard library (it doesn't even use Foundation), it should work on all platforms where Swift is available.
I tested it on macOS, iOS, tvOS, and Linux.
diff --git a/SortedArray.xcodeproj/project.pbxproj b/SortedArray.xcodeproj/project.pbxproj
index 5377865..04e4355 100644
--- a/SortedArray.xcodeproj/project.pbxproj
+++ b/SortedArray.xcodeproj/project.pbxproj
@@ -334,36 +334,36 @@
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0720;
- LastUpgradeCheck = 0810;
+ LastUpgradeCheck = 0900;
ORGANIZATIONNAME = SortedArray;
TargetAttributes = {
52D6D97B1BEFF229002C0205 = {
CreatedOnToolsVersion = 7.1;
- LastSwiftMigration = 0800;
+ LastSwiftMigration = 0900;
};
52D6D9851BEFF229002C0205 = {
CreatedOnToolsVersion = 7.1;
- LastSwiftMigration = 0800;
+ LastSwiftMigration = 0900;
};
52D6D9E11BEFFF6E002C0205 = {
CreatedOnToolsVersion = 7.1;
- LastSwiftMigration = 0800;
+ LastSwiftMigration = 0900;
};
52D6D9EF1BEFFFBE002C0205 = {
CreatedOnToolsVersion = 7.1;
- LastSwiftMigration = 0800;
+ LastSwiftMigration = 0900;
};
52D6DA0E1BF000BD002C0205 = {
CreatedOnToolsVersion = 7.1;
- LastSwiftMigration = 0800;
+ LastSwiftMigration = 0900;
};
DD7502791C68FCFC006590AF = {
CreatedOnToolsVersion = 7.2.1;
- LastSwiftMigration = 0800;
+ LastSwiftMigration = 0900;
};
DD75028C1C690C7A006590AF = {
CreatedOnToolsVersion = 7.2.1;
- LastSwiftMigration = 0800;
+ LastSwiftMigration = 0900;
};
};
};
@@ -531,14 +531,20 @@
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
@@ -582,14 +588,20 @@
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
@@ -610,6 +622,7 @@
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_VERSION = 3.0;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
@@ -636,7 +649,6 @@
PRODUCT_BUNDLE_IDENTIFIER = "com.olebegemann.SortedArray-iOS";
PRODUCT_NAME = SortedArray;
SKIP_INSTALL = YES;
- SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 3.0;
};
name = Debug;
@@ -658,7 +670,6 @@
PRODUCT_BUNDLE_IDENTIFIER = "com.olebegemann.SortedArray-iOS";
PRODUCT_NAME = SortedArray;
SKIP_INSTALL = YES;
- SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_VERSION = 3.0;
};
name = Release;
@@ -671,7 +682,6 @@
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "com.SortedArray.SortedArray-iOS-Tests";
PRODUCT_NAME = "$(TARGET_NAME)";
- SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 3.0;
};
name = Debug;
@@ -684,7 +694,6 @@
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "com.SortedArray.SortedArray-iOS-Tests";
PRODUCT_NAME = "$(TARGET_NAME)";
- SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_VERSION = 3.0;
};
name = Release;
@@ -727,7 +736,6 @@
PRODUCT_NAME = SortedArray;
SDKROOT = watchos;
SKIP_INSTALL = YES;
- SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_VERSION = 3.0;
TARGETED_DEVICE_FAMILY = 4;
WATCHOS_DEPLOYMENT_TARGET = 2.0;
@@ -772,7 +780,6 @@
PRODUCT_NAME = SortedArray;
SDKROOT = appletvos;
SKIP_INSTALL = YES;
- SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_VERSION = 3.0;
TARGETED_DEVICE_FAMILY = 3;
TVOS_DEPLOYMENT_TARGET = 9.0;
@@ -821,7 +828,6 @@
PRODUCT_NAME = SortedArray;
SDKROOT = macosx;
SKIP_INSTALL = YES;
- SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_VERSION = 3.0;
};
name = Release;
@@ -852,7 +858,6 @@
PRODUCT_BUNDLE_IDENTIFIER = "com.SortedArray.SortedArray-macOS-Tests";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macosx;
- SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_VERSION = 3.0;
};
name = Release;
@@ -878,7 +883,6 @@
PRODUCT_BUNDLE_IDENTIFIER = "com.SortedArray.SortedArray-tvOS-Tests";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = appletvos;
- SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_VERSION = 3.0;
TVOS_DEPLOYMENT_TARGET = 9.1;
};
diff --git a/SortedArray.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/SortedArray.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
new file mode 100644
index 0000000..3ddf867
--- /dev/null
+++ b/SortedArray.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
@@ -0,0 +1,8 @@
+
+
+
+
+ BuildSystemType
+ Latest
+
+
diff --git a/SortedArray.xcodeproj/xcshareddata/xcschemes/SortedArray-iOS.xcscheme b/SortedArray.xcodeproj/xcshareddata/xcschemes/SortedArray-iOS.xcscheme
index 4a06f1f..dcb61f3 100644
--- a/SortedArray.xcodeproj/xcshareddata/xcschemes/SortedArray-iOS.xcscheme
+++ b/SortedArray.xcodeproj/xcshareddata/xcschemes/SortedArray-iOS.xcscheme
@@ -1,6 +1,6 @@
@@ -56,6 +57,7 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+ language = ""
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
diff --git a/SortedArray.xcodeproj/xcshareddata/xcschemes/SortedArray-macOS.xcscheme b/SortedArray.xcodeproj/xcshareddata/xcschemes/SortedArray-macOS.xcscheme
index 66015d1..9afe86f 100644
--- a/SortedArray.xcodeproj/xcshareddata/xcschemes/SortedArray-macOS.xcscheme
+++ b/SortedArray.xcodeproj/xcshareddata/xcschemes/SortedArray-macOS.xcscheme
@@ -1,6 +1,6 @@
@@ -56,6 +57,7 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+ language = ""
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
diff --git a/SortedArray.xcodeproj/xcshareddata/xcschemes/SortedArray-tvOS.xcscheme b/SortedArray.xcodeproj/xcshareddata/xcschemes/SortedArray-tvOS.xcscheme
index 16e837d..d99aaa9 100644
--- a/SortedArray.xcodeproj/xcshareddata/xcschemes/SortedArray-tvOS.xcscheme
+++ b/SortedArray.xcodeproj/xcshareddata/xcschemes/SortedArray-tvOS.xcscheme
@@ -1,6 +1,6 @@
@@ -56,6 +57,7 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+ language = ""
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
diff --git a/SortedArray.xcodeproj/xcshareddata/xcschemes/SortedArray-watchOS.xcscheme b/SortedArray.xcodeproj/xcshareddata/xcschemes/SortedArray-watchOS.xcscheme
index 713456b..fbd4855 100644
--- a/SortedArray.xcodeproj/xcshareddata/xcschemes/SortedArray-watchOS.xcscheme
+++ b/SortedArray.xcodeproj/xcshareddata/xcschemes/SortedArray-watchOS.xcscheme
@@ -1,6 +1,6 @@
@@ -37,6 +38,7 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+ language = ""
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
diff --git a/Tests/SortedArrayTests/SortedArrayTests.swift b/Tests/SortedArrayTests/SortedArrayTests.swift
index fac7172..89041be 100644
--- a/Tests/SortedArrayTests/SortedArrayTests.swift
+++ b/Tests/SortedArrayTests/SortedArrayTests.swift
@@ -12,7 +12,11 @@ class SortedArrayTests: XCTestCase {
func testLinuxTestSuiteIncludesAllTests() {
#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS)
- let darwinTestCount = Int(SortedArrayTests.defaultTestSuite().testCaseCount)
+ #if swift(>=4.0)
+ let darwinTestCount = SortedArrayTests.defaultTestSuite.testCaseCount
+ #else
+ let darwinTestCount = Int(SortedArrayTests.defaultTestSuite().testCaseCount)
+ #endif
let linuxTestCount = SortedArrayTests.allTests.count
XCTAssertEqual(linuxTestCount, darwinTestCount, "allTests (used for testing on Linux) is missing \(darwinTestCount - linuxTestCount) tests")
#endif
diff --git a/scripts/travis-build-script.sh b/scripts/travis-build-script.sh
index df2fed6..85d4ac3 100644
--- a/scripts/travis-build-script.sh
+++ b/scripts/travis-build-script.sh
@@ -4,17 +4,22 @@
# . Supports testing Swift Package Manager
# packages on macOS and Linux.
+set -ue -o pipefail
+
echo "Running on OS: ${TRAVIS_OS_NAME}"
if [[ "${TRAVIS_OS_NAME}" == "osx" ]]; then
# macOS
# 1. Test using Swift Package Manager
- swift build --clean
+ swift --version
+ swift package clean
swift build
- swift test
+ swift test --parallel
# 2. Test using xcodebuild
- set -o pipefail
+ xcodebuild -version
+ xcodebuild -showsdks
+ instruments -s devices
xcodebuild test -scheme SortedArray-macOS | xcpretty
xcodebuild test -scheme SortedArray-iOS -destination "platform=iOS Simulator,name=iPhone 7,OS=10.1" | xcpretty
xcodebuild test -scheme SortedArray-tvOS -destination "platform=tvOS Simulator,name=Apple TV 1080p" | xcpretty
@@ -25,9 +30,9 @@ elif [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then
echo "Using Docker image: ${DOCKER_IMAGE}"
# Download the Docker container. This is not strictly necessary since
# docker run would automatically download a missing container.
- docker pull ${DOCKER_IMAGE}
+ docker pull "${DOCKER_IMAGE}"
# Share the current directory (where Travis checked out the repository)
# with the Docker container.
# Then, in the container, cd into that directory and run the tests.
- docker run --volume "$(pwd):/root/repo" ${DOCKER_IMAGE} /bin/bash -c "cd /root/repo; swift build --clean; swift build; swift test"
+ docker run --volume "$(pwd):/package" "${DOCKER_IMAGE}" /bin/bash -c "cd /package; swift --version; swift package clean; swift build; swift test --parallel"
fi