From c4a668c900f8ebb4ebfb9f2114c68229e4f65359 Mon Sep 17 00:00:00 2001 From: Fredrik Karlsson Date: Wed, 5 Jun 2019 15:28:11 +0200 Subject: [PATCH] Add support for SPM and migrate to Swift 5 --- .circleci/config.yml | 16 ++--- MapboxSpeech.xcodeproj/project.pbxproj | 58 ++++++++---------- Package.swift | 32 ++++++++++ .../MapboxSpeech}/Info.plist | 0 .../MapboxSpeech}/MBSpeechOptions.swift | 0 .../MapboxSpeech}/MapboxSpeech.h | 0 .../MapboxSpeech}/MapboxSpeech.swift | 0 Sources/MapboxSpeechCLI/main.swift | 27 ++++++++ .../MapboxSpeechTests}/Info.plist | 0 .../MapboxSpeechTests}/MapboxVoiceTests.swift | 0 .../fixtures/hello.mp3 | Bin 11 files changed, 93 insertions(+), 40 deletions(-) create mode 100644 Package.swift rename {MapboxSpeech => Sources/MapboxSpeech}/Info.plist (100%) rename {MapboxSpeech => Sources/MapboxSpeech}/MBSpeechOptions.swift (100%) rename {MapboxSpeech => Sources/MapboxSpeech}/MapboxSpeech.h (100%) rename {MapboxSpeech => Sources/MapboxSpeech}/MapboxSpeech.swift (100%) create mode 100644 Sources/MapboxSpeechCLI/main.swift rename {MapboxSpeechTests => Tests/MapboxSpeechTests}/Info.plist (100%) rename {MapboxSpeechTests => Tests/MapboxSpeechTests}/MapboxVoiceTests.swift (100%) rename {MapboxSpeechTests => Tests}/fixtures/hello.mp3 (100%) diff --git a/.circleci/config.yml b/.circleci/config.yml index 4c8e45e..1761dfc 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -5,14 +5,9 @@ workflows: default: jobs: - ios-build-test + - spm step-library: - - &prepare - run: - name: Prepare - command: | - if [ $(carthage outdated | grep -cF "latest Carthage version") -eq 0 ]; then brew update && brew upgrade carthage; fi - - &install-dependencies run: name: Install Dependencies @@ -46,14 +41,19 @@ step-library: jobs: ios-build-test: macos: - xcode: "10.1.0" + xcode: "10.2.1" environment: HOMEBREW_NO_AUTO_UPDATE: 0 steps: - checkout - - *prepare - *install-dependencies - *ios-build-test - *macos-build-test - *tvos-build-test - *watchos-build + spm: + macos: + xcode: "10.2.1" + steps: + - checkout + - run: swift build diff --git a/MapboxSpeech.xcodeproj/project.pbxproj b/MapboxSpeech.xcodeproj/project.pbxproj index 6612b3f..8e06de1 100644 --- a/MapboxSpeech.xcodeproj/project.pbxproj +++ b/MapboxSpeech.xcodeproj/project.pbxproj @@ -168,7 +168,8 @@ C54F53681F6C758C00BFCC66 /* MBSpeechOptions.swift */, C54F53501F6C754D00BFCC66 /* Info.plist */, ); - path = MapboxSpeech; + name = MapboxSpeech; + path = Sources/MapboxSpeech; sourceTree = ""; }; C54F53591F6C754D00BFCC66 /* MapboxSpeechTests */ = { @@ -178,7 +179,8 @@ C54F535A1F6C754D00BFCC66 /* MapboxVoiceTests.swift */, C54F535C1F6C754D00BFCC66 /* Info.plist */, ); - path = MapboxSpeechTests; + name = MapboxSpeechTests; + path = Tests/MapboxSpeechTests; sourceTree = ""; }; C5569E671FD9E97300D9B7AC /* Frameworks */ = { @@ -196,7 +198,8 @@ children = ( C5569E6C1FD9EEE100D9B7AC /* hello.mp3 */, ); - path = fixtures; + name = fixtures; + path = ../fixtures; sourceTree = ""; }; /* End PBXGroup section */ @@ -385,10 +388,12 @@ }; DAE3527222420CE900A3FF9C = { CreatedOnToolsVersion = 10.1; + LastSwiftMigration = 1020; ProvisioningStyle = Automatic; }; DAE3527A22420CEA00A3FF9C = { CreatedOnToolsVersion = 10.1; + LastSwiftMigration = 1020; ProvisioningStyle = Automatic; }; DAE35295224213ED00A3FF9C = { @@ -407,10 +412,11 @@ }; buildConfigurationList = C54F53461F6C754D00BFCC66 /* Build configuration list for PBXProject "MapboxSpeech" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, + Base, ); mainGroup = C54F53421F6C754D00BFCC66; productRefGroup = C54F534D1F6C754D00BFCC66 /* Products */; @@ -623,6 +629,7 @@ SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_SWIFT3_OBJC_INFERENCE = Off; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; @@ -679,6 +686,7 @@ SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_SWIFT3_OBJC_INFERENCE = Off; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; @@ -696,7 +704,7 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 5; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = MapboxSpeech/Info.plist; + INFOPLIST_FILE = Sources/MapboxSpeech/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.mapbox.MapboxSpeech; @@ -704,7 +712,6 @@ SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_SWIFT3_OBJC_INFERENCE = Off; - SWIFT_VERSION = 4.0; }; name = Debug; }; @@ -718,14 +725,13 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 5; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = MapboxSpeech/Info.plist; + INFOPLIST_FILE = Sources/MapboxSpeech/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.mapbox.MapboxSpeech; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; SWIFT_SWIFT3_OBJC_INFERENCE = Off; - SWIFT_VERSION = 4.0; }; name = Release; }; @@ -740,13 +746,12 @@ "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/iOS", ); - INFOPLIST_FILE = MapboxSpeechTests/Info.plist; + INFOPLIST_FILE = Tests/MapboxSpeechTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks $(PROJECT_DIR)/Carthage/Build/iOS @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.Mapbox.MapboxSpeechTests; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_SWIFT3_OBJC_INFERENCE = Off; - SWIFT_VERSION = 4.0; }; name = Debug; }; @@ -761,13 +766,12 @@ "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/iOS", ); - INFOPLIST_FILE = MapboxSpeechTests/Info.plist; + INFOPLIST_FILE = Tests/MapboxSpeechTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks $(PROJECT_DIR)/Carthage/Build/iOS @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.Mapbox.MapboxSpeechTests; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_SWIFT3_OBJC_INFERENCE = Off; - SWIFT_VERSION = 4.0; }; name = Release; }; @@ -788,7 +792,7 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_VERSION = A; GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = MapboxSpeech/Info.plist; + INFOPLIST_FILE = Sources/MapboxSpeech/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; @@ -797,7 +801,6 @@ PRODUCT_NAME = MapboxSpeech; SDKROOT = macosx; SKIP_INSTALL = YES; - SWIFT_VERSION = 4.0; }; name = Debug; }; @@ -818,7 +821,7 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_VERSION = A; GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = MapboxSpeech/Info.plist; + INFOPLIST_FILE = Sources/MapboxSpeech/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; MTL_FAST_MATH = YES; @@ -826,7 +829,6 @@ PRODUCT_NAME = MapboxSpeech; SDKROOT = macosx; SKIP_INSTALL = YES; - SWIFT_VERSION = 4.0; }; name = Release; }; @@ -846,14 +848,13 @@ "$(PROJECT_DIR)/Carthage/Build/Mac", ); GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = MapboxSpeechTests/Info.plist; + INFOPLIST_FILE = Tests/MapboxSpeechTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks $(PROJECT_DIR)/Carthage/Build/Mac"; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.mapbox.MapboxSpeechTests; PRODUCT_NAME = MapboxSpeechTests; SDKROOT = macosx; - SWIFT_VERSION = 4.0; }; name = Debug; }; @@ -873,13 +874,12 @@ "$(PROJECT_DIR)/Carthage/Build/Mac", ); GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = MapboxSpeechTests/Info.plist; + INFOPLIST_FILE = Tests/MapboxSpeechTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks $(PROJECT_DIR)/Carthage/Build/Mac"; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.mapbox.MapboxSpeechTests; PRODUCT_NAME = MapboxSpeechTests; SDKROOT = macosx; - SWIFT_VERSION = 4.0; }; name = Release; }; @@ -897,7 +897,7 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = MapboxSpeech/Info.plist; + INFOPLIST_FILE = Sources/MapboxSpeech/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; @@ -906,7 +906,6 @@ PRODUCT_NAME = MapboxSpeech; SDKROOT = appletvos; SKIP_INSTALL = YES; - SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 9.0; }; @@ -926,7 +925,7 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = MapboxSpeech/Info.plist; + INFOPLIST_FILE = Sources/MapboxSpeech/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_FAST_MATH = YES; @@ -934,7 +933,6 @@ PRODUCT_NAME = MapboxSpeech; SDKROOT = appletvos; SKIP_INSTALL = YES; - SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 9.0; }; @@ -953,14 +951,13 @@ "$(PROJECT_DIR)/Carthage/Build/tvOS", ); GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = MapboxSpeechTests/Info.plist; + INFOPLIST_FILE = Tests/MapboxSpeechTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks $(PROJECT_DIR)/Carthage/Build/tvOS"; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.mapbox.MapboxSpeechTests; PRODUCT_NAME = MapboxSpeechTests; SDKROOT = appletvos; - SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 9.0; }; @@ -979,13 +976,12 @@ "$(PROJECT_DIR)/Carthage/Build/tvOS", ); GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = MapboxSpeechTests/Info.plist; + INFOPLIST_FILE = Tests/MapboxSpeechTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks $(PROJECT_DIR)/Carthage/Build/tvOS"; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.mapbox.MapboxSpeechTests; PRODUCT_NAME = MapboxSpeechTests; SDKROOT = appletvos; - SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 9.0; }; @@ -1006,7 +1002,7 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = MapboxSpeech/Info.plist; + INFOPLIST_FILE = Sources/MapboxSpeech/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; @@ -1015,7 +1011,6 @@ PRODUCT_NAME = MapboxSpeech; SDKROOT = watchos; SKIP_INSTALL = YES; - SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = 4; WATCHOS_DEPLOYMENT_TARGET = 2.0; }; @@ -1036,7 +1031,7 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = MapboxSpeech/Info.plist; + INFOPLIST_FILE = Sources/MapboxSpeech/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_FAST_MATH = YES; @@ -1044,7 +1039,6 @@ PRODUCT_NAME = MapboxSpeech; SDKROOT = watchos; SKIP_INSTALL = YES; - SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = 4; WATCHOS_DEPLOYMENT_TARGET = 2.0; }; diff --git a/Package.swift b/Package.swift new file mode 100644 index 0000000..c58d1c7 --- /dev/null +++ b/Package.swift @@ -0,0 +1,32 @@ +// swift-tools-version:5.0 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +let package = Package( + name: "MapboxSpeech", + products: [ + // Products define the executables and libraries produced by a package, and make them visible to other packages. + .library( + name: "MapboxSpeech", + targets: ["MapboxSpeech"]), + .executable( + name: "MapboxSpeechCLI", + targets: ["MapboxSpeechCLI"]), + ], + dependencies: [ + // Dependencies declare other packages that this package depends on. + // .package(url: /* package url */, from: "1.0.0"), + ], + targets: [ + // Targets are the basic building blocks of a package. A target can define a module or a test suite. + // Targets can depend on other targets in this package, and on products in packages which this package depends on. + .target( + name: "MapboxSpeech", + dependencies: []), + .testTarget( + name: "MapboxSpeechTests", + dependencies: ["MapboxSpeech"]), + .target(name: "MapboxSpeechCLI", dependencies: ["MapboxSpeech"]) + ] +) diff --git a/MapboxSpeech/Info.plist b/Sources/MapboxSpeech/Info.plist similarity index 100% rename from MapboxSpeech/Info.plist rename to Sources/MapboxSpeech/Info.plist diff --git a/MapboxSpeech/MBSpeechOptions.swift b/Sources/MapboxSpeech/MBSpeechOptions.swift similarity index 100% rename from MapboxSpeech/MBSpeechOptions.swift rename to Sources/MapboxSpeech/MBSpeechOptions.swift diff --git a/MapboxSpeech/MapboxSpeech.h b/Sources/MapboxSpeech/MapboxSpeech.h similarity index 100% rename from MapboxSpeech/MapboxSpeech.h rename to Sources/MapboxSpeech/MapboxSpeech.h diff --git a/MapboxSpeech/MapboxSpeech.swift b/Sources/MapboxSpeech/MapboxSpeech.swift similarity index 100% rename from MapboxSpeech/MapboxSpeech.swift rename to Sources/MapboxSpeech/MapboxSpeech.swift diff --git a/Sources/MapboxSpeechCLI/main.swift b/Sources/MapboxSpeechCLI/main.swift new file mode 100644 index 0000000..5cde7bb --- /dev/null +++ b/Sources/MapboxSpeechCLI/main.swift @@ -0,0 +1,27 @@ +import Foundation +import MapboxSpeech +import AVFoundation + + +guard CommandLine.arguments.count >= 2 else { + print("Nothing to say?") + exit(0) +} + +guard let token = ProcessInfo.processInfo.environment["MAPBOX_ACCESS_TOKEN"] else { + print("MAPBOX_ACCESS_TOKEN not found") + exit(0) +} + +let text = CommandLine.arguments[1] +let options = SpeechOptions(text: text) +var speech = SpeechSynthesizer(accessToken: token) + +let url = speech.url(forSynthesizing: options) +print("URL: \(url)") +let data = try! Data(contentsOf: url) +print("Data: \(data)") +let player = try! AVAudioPlayer(data: data) +player.play() +RunLoop.main.run(until: Date().addingTimeInterval(player.duration)) + diff --git a/MapboxSpeechTests/Info.plist b/Tests/MapboxSpeechTests/Info.plist similarity index 100% rename from MapboxSpeechTests/Info.plist rename to Tests/MapboxSpeechTests/Info.plist diff --git a/MapboxSpeechTests/MapboxVoiceTests.swift b/Tests/MapboxSpeechTests/MapboxVoiceTests.swift similarity index 100% rename from MapboxSpeechTests/MapboxVoiceTests.swift rename to Tests/MapboxSpeechTests/MapboxVoiceTests.swift diff --git a/MapboxSpeechTests/fixtures/hello.mp3 b/Tests/fixtures/hello.mp3 similarity index 100% rename from MapboxSpeechTests/fixtures/hello.mp3 rename to Tests/fixtures/hello.mp3