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