diff --git a/.github/workflows/swift.yml b/.github/workflows/swift.yml new file mode 100644 index 00000000..d96fb492 --- /dev/null +++ b/.github/workflows/swift.yml @@ -0,0 +1,19 @@ +name: Swift + +on: + push: + branches: [ "master", "development" ] + pull_request: + branches: [ "master", "development" ] + +jobs: + build: + + runs-on: macos-latest + + steps: + - uses: actions/checkout@v3 + - name: Build + run: swift build -v + - name: Run tests + run: swift test -v diff --git a/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata b/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..919434a6 --- /dev/null +++ b/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index b90dafc5..00000000 --- a/.travis.yml +++ /dev/null @@ -1,18 +0,0 @@ -language: objective-c -xcode_project: Socket.IO-Client-Swift.xcodeproj # path to your xcodeproj folder -xcode_scheme: SocketIO-Mac -osx_image: xcode12.2 -branches: - only: - - master - - development -before_install: - # - brew update - # - brew outdated xctool || brew upgrade xctool - # - brew outdated carthage || brew upgrade carthage - - carthage update --platform macosx -script: - - xcodebuild -project Socket.IO-Client-Swift.xcodeproj -scheme SocketIO build test -quiet -# - xcodebuild -project Socket.IO-Client-Swift.xcodeproj -scheme SocketIO build-for-testing -quiet -# - xctool -project Socket.IO-Client-Swift.xcodeproj -scheme SocketIO run-tests --parallelize - - swift test diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b496c25..6f0469a8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +# v16.1.0 + +- Remove support for iOS 11. +- Update to Starscream 4.0.6 + # v16.0.0 - Removed Objective-C support. It's time for you to embrace Swift. diff --git a/Cartfile b/Cartfile index c9ec3353..a3c32e56 100644 --- a/Cartfile +++ b/Cartfile @@ -1 +1 @@ -github "emersonsoftware/Starscream" "master" +github "daltoniam/Starscream" "4.0.8" diff --git a/Cartfile.resolved b/Cartfile.resolved index c9ec3353..a3c32e56 100644 --- a/Cartfile.resolved +++ b/Cartfile.resolved @@ -1 +1 @@ -github "emersonsoftware/Starscream" "master" +github "daltoniam/Starscream" "4.0.8" diff --git a/Package.resolved b/Package.resolved index 2c23fa5a..cebbce98 100644 --- a/Package.resolved +++ b/Package.resolved @@ -5,9 +5,9 @@ "package": "Starscream", "repositoryURL": "https://github.com/emersonsoftware/Starscream", "state": { - "branch": "master", - "revision": "098f4fba787f43b27cb0db77464c52443cf7d3df", - "version": null + "branch": null, + "revision": "c6bfd1af48efcc9a9ad203665db12375ba6b145a", + "version": "4.0.8" } } ] diff --git a/Package.swift b/Package.swift index bfcbf7a0..3eb325cc 100644 --- a/Package.swift +++ b/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:5.3 +// swift-tools-version:5.4 import PackageDescription @@ -8,7 +8,7 @@ let package = Package( .library(name: "SocketIO", targets: ["SocketIO"]) ], dependencies: [ - .package(url: "https://github.com/emersonsoftware/Starscream", .branch("master")), + .package(url: "https://github.com/daltoniam/Starscream", from: "4.0.8"), ], targets: [ .target(name: "SocketIO", dependencies: ["Starscream"]), diff --git a/Socket.IO-Client-Swift.podspec b/Socket.IO-Client-Swift.podspec index 60e68527..243071f0 100644 --- a/Socket.IO-Client-Swift.podspec +++ b/Socket.IO-Client-Swift.podspec @@ -1,7 +1,7 @@ Pod::Spec.new do |s| s.name = "Socket.IO-Client-Swift" s.module_name = "SocketIO" - s.version = "16.0.1" + s.version = "16.1.0" s.summary = "Socket.IO-client for iOS and OS X" s.description = <<-DESC Socket.IO-client for iOS and OS X. @@ -11,21 +11,21 @@ Pod::Spec.new do |s| s.homepage = "https://github.com/socketio/socket.io-client-swift" s.license = { :type => 'MIT' } s.author = { "Erik" => "nuclear.ace@gmail.com" } - s.ios.deployment_target = '10.0' + s.ios.deployment_target = '11.0' s.osx.deployment_target = '10.13' - s.tvos.deployment_target = '10.0' + s.tvos.deployment_target = '12.0' s.watchos.deployment_target = '5.0' s.requires_arc = true s.source = { :git => "https://github.com/socketio/socket.io-client-swift.git", - :tag => 'v16.0.1', + :tag => 'v16.1.0', :submodules => true } s.swift_version = "5" s.pod_target_xcconfig = { - 'SWIFT_VERSION' => '5.0' + 'SWIFT_VERSION' => '5.4' } s.source_files = "Source/SocketIO/**/*.swift", "Source/SocketIO/*.swift" - s.dependency "Starscream", "~> 4.0" + s.dependency "Starscream", "~> 4.0.6" end diff --git a/Socket.IO-Client-Swift.xcodeproj/project.pbxproj b/Socket.IO-Client-Swift.xcodeproj/project.pbxproj index b832920b..85ae50d7 100644 --- a/Socket.IO-Client-Swift.xcodeproj/project.pbxproj +++ b/Socket.IO-Client-Swift.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -19,9 +19,9 @@ 1C686BE71F869AFD007D8627 /* SocketParserTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C686BD71F869AF1007D8627 /* SocketParserTest.swift */; }; 1C686BE81F869AFD007D8627 /* SocketNamespacePacketTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C686BD81F869AF1007D8627 /* SocketNamespacePacketTest.swift */; }; 572EF2431B51F18A00EEBB58 /* SocketIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 572EF2381B51F18A00EEBB58 /* SocketIO.framework */; }; + 579C7D4C2731B487009F8A2F /* Starscream.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 579C7D4B2731B487009F8A2F /* Starscream.xcframework */; }; 6CA08A981D615C0B0061FD2A /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6CA08A971D615C0B0061FD2A /* Security.framework */; }; 74BF53581F894326004972D8 /* SocketIO.h in Headers */ = {isa = PBXBuildFile; fileRef = 572EF23C1B51F18A00EEBB58 /* SocketIO.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74D0F5961F8053950037C4DC /* Starscream.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9432E00B1F77F883006AF628 /* Starscream.framework */; }; 74DA21741F09440F009C19EE /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 74DA21731F09440F009C19EE /* libz.tbd */; }; 74DA217C1F09457B009C19EE /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 74DA21731F09440F009C19EE /* libz.tbd */; }; DD52B048C71D724ABBD18C71 /* SocketTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD52BDC9E66AADA2CC5E8246 /* SocketTypes.swift */; }; @@ -75,18 +75,15 @@ 572EF23B1B51F18A00EEBB58 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 572EF23C1B51F18A00EEBB58 /* SocketIO.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SocketIO.h; sourceTree = ""; }; 572EF2421B51F18A00EEBB58 /* SocketIO-Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "SocketIO-Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; + 579C7D4B2731B487009F8A2F /* Starscream.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = Starscream.xcframework; path = Carthage/Build/Starscream.xcframework; sourceTree = ""; }; 6CA08A951D615C040061FD2A /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; 6CA08A971D615C0B0061FD2A /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; 6CA08A991D615C140061FD2A /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS9.2.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; - 749FA19F1F8112E7002FBB30 /* Starscream.framework.dSYM */ = {isa = PBXFileReference; lastKnownFileType = wrapper.dsym; name = Starscream.framework.dSYM; path = Carthage/Build/Mac/Starscream.framework.dSYM; sourceTree = ""; }; 749FA1A11F811408002FBB30 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 74D0F58D1F804FED0037C4DC /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.0.sdk/usr/lib/libz.tbd; sourceTree = DEVELOPER_DIR; }; 74DA21731F09440F009C19EE /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; 74DA217D1F0945E9009C19EE /* libcommonCrypto.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libcommonCrypto.tbd; path = usr/lib/system/libcommonCrypto.tbd; sourceTree = SDKROOT; }; 9432E0061F77F7CA006AF628 /* SSLSecurity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SSLSecurity.swift; sourceTree = ""; }; - 9432E0091F77F87D006AF628 /* Starscream.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Starscream.framework; path = Carthage/Build/iOS/Starscream.framework; sourceTree = ""; }; - 9432E00B1F77F883006AF628 /* Starscream.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Starscream.framework; path = Carthage/Build/Mac/Starscream.framework; sourceTree = ""; }; - 9432E00D1F77F889006AF628 /* Starscream.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Starscream.framework; path = Carthage/Build/tvOS/Starscream.framework; sourceTree = ""; }; DD52B078DB0A3C3D1BB507CD /* SocketIOClientOption.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SocketIOClientOption.swift; sourceTree = ""; }; DD52B09F7984E730513AB7E5 /* SocketAckManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SocketAckManager.swift; sourceTree = ""; }; DD52B1D9BC4AE46D38D827DE /* SocketIOStatus.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SocketIOStatus.swift; sourceTree = ""; }; @@ -120,8 +117,8 @@ buildActionMask = 2147483647; files = ( 74DA21741F09440F009C19EE /* libz.tbd in Frameworks */, + 579C7D4C2731B487009F8A2F /* Starscream.xcframework in Frameworks */, 6CA08A981D615C0B0061FD2A /* Security.framework in Frameworks */, - 74D0F5961F8053950037C4DC /* Starscream.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -231,11 +228,8 @@ isa = PBXGroup; children = ( 749FA1A11F811408002FBB30 /* Foundation.framework */, - 749FA19F1F8112E7002FBB30 /* Starscream.framework.dSYM */, + 579C7D4B2731B487009F8A2F /* Starscream.xcframework */, 74D0F58D1F804FED0037C4DC /* libz.tbd */, - 9432E0091F77F87D006AF628 /* Starscream.framework */, - 9432E00B1F77F883006AF628 /* Starscream.framework */, - 9432E00D1F77F889006AF628 /* Starscream.framework */, 74DA217D1F0945E9009C19EE /* libcommonCrypto.tbd */, 74DA21731F09440F009C19EE /* libz.tbd */, 6CA08A9E1D615C340061FD2A /* tvOS */, @@ -350,9 +344,9 @@ isa = PBXNativeTarget; buildConfigurationList = 572EF24B1B51F18A00EEBB58 /* Build configuration list for PBXNativeTarget "SocketIO" */; buildPhases = ( + 572EF2351B51F18A00EEBB58 /* Headers */, 572EF2331B51F18A00EEBB58 /* Sources */, 572EF2341B51F18A00EEBB58 /* Frameworks */, - 572EF2351B51F18A00EEBB58 /* Headers */, 572EF2361B51F18A00EEBB58 /* Resources */, ); buildRules = ( @@ -517,7 +511,6 @@ 572EF2121B51F12F00EEBB58 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - BITCODE_GENERATION_MODE = bitcode; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -537,37 +530,11 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "Mac Developer"; - ENABLE_BITCODE = YES; - "ENABLE_BITCODE[sdk=macosx*]" = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; - "FRAMEWORK_SEARCH_PATHS[sdk=appletvos*]" = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/tvOS", - ); - "FRAMEWORK_SEARCH_PATHS[sdk=appletvsimulator*]" = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/tvOS", - ); - "FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]" = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); - "FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]" = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); - "FRAMEWORK_SEARCH_PATHS[sdk=macosx*]" = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/Mac", - ); - "FRAMEWORK_SEARCH_PATHS[sdk=watchos*]" = ( - "$(PROJECT_DIR)/Carthage/Build/watchOS", - "$(inherited)", - ); - "FRAMEWORK_SEARCH_PATHS[sdk=watchsimulator*]" = ( - "$(PROJECT_DIR)/Carthage/Build/watchOS", + FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/", ); GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; @@ -577,14 +544,14 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MACOSX_DEPLOYMENT_TARGET = 10.14; ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = SocketIO; - SUPPORTED_PLATFORMS = "macosx appletvsimulator appletvos iphonesimulator iphoneos watchos watchsimulator"; + SUPPORTED_PLATFORMS = "macosx appletvsimulator appletvos iphonesimulator iphoneos watchos watchsimulator xrsimulator xros"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; - TVOS_DEPLOYMENT_TARGET = 10.0; + TVOS_DEPLOYMENT_TARGET = 12.0; VALID_ARCHS = "i386 x86_64 armv7 armv7s arm64 armv7k"; WATCHOS_DEPLOYMENT_TARGET = 7.0; }; @@ -593,7 +560,6 @@ 572EF2131B51F12F00EEBB58 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - BITCODE_GENERATION_MODE = bitcode; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -613,36 +579,10 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "Mac Developer"; - ENABLE_BITCODE = YES; - "ENABLE_BITCODE[sdk=macosx*]" = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; - "FRAMEWORK_SEARCH_PATHS[sdk=appletvos*]" = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/tvOS", - ); - "FRAMEWORK_SEARCH_PATHS[sdk=appletvsimulator*]" = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/tvOS", - ); - "FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]" = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); - "FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]" = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/iOS", - ); - "FRAMEWORK_SEARCH_PATHS[sdk=macosx*]" = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build/Mac", - ); - "FRAMEWORK_SEARCH_PATHS[sdk=watchos*]" = ( - "$(PROJECT_DIR)/Carthage/Build/watchOS", - "$(inherited)", - ); - "FRAMEWORK_SEARCH_PATHS[sdk=watchsimulator*]" = ( - "$(PROJECT_DIR)/Carthage/Build/watchOS", + FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/", ); GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -651,13 +591,14 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MACOSX_DEPLOYMENT_TARGET = 10.14; PRODUCT_NAME = SocketIO; - SUPPORTED_PLATFORMS = "macosx appletvsimulator appletvos iphonesimulator iphoneos watchos watchsimulator"; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SUPPORTED_PLATFORMS = "macosx appletvsimulator appletvos iphonesimulator iphoneos watchos watchsimulator xrsimulator xros"; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; SWIFT_VERSION = 5.0; - TVOS_DEPLOYMENT_TARGET = 10.0; + TVOS_DEPLOYMENT_TARGET = 12.0; VALID_ARCHS = "i386 x86_64 armv7 armv7s arm64 armv7k"; WATCHOS_DEPLOYMENT_TARGET = 7.0; }; @@ -666,6 +607,7 @@ 572EF24C1B51F18A00EEBB58 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; ALWAYS_SEARCH_USER_PATHS = NO; APPLICATION_EXTENSION_API_ONLY = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; @@ -690,8 +632,6 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - "ENABLE_BITCODE[sdk=macosx*]" = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; FRAMEWORK_SEARCH_PATHS = "$(inherited)"; @@ -712,8 +652,16 @@ GCC_WARN_UNUSED_VARIABLE = YES; INFOPLIST_FILE = SocketIO/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@loader_path/../Frameworks", + ); LIBRARY_SEARCH_PATHS = "$(inherited)"; MACOSX_DEPLOYMENT_TARGET = 10.10; MTL_ENABLE_DEBUG_INFO = YES; @@ -722,11 +670,14 @@ SDKROOT = macosx; SKIP_INSTALL = YES; SUPPORTED_PLATFORMS = "$(inherited)"; + SUPPORTS_MACCATALYST = YES; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; SWIFT_INCLUDE_PATHS = ""; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_SWIFT3_OBJC_INFERENCE = Default; SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2,3,4"; + TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; TVOS_DEPLOYMENT_TARGET = 10.0; VALID_ARCHS = "$(inherited)"; VERSIONING_SYSTEM = "apple-generic"; @@ -737,6 +688,7 @@ 572EF24D1B51F18A00EEBB58 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; ALWAYS_SEARCH_USER_PATHS = NO; APPLICATION_EXTENSION_API_ONLY = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; @@ -761,8 +713,6 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - "ENABLE_BITCODE[sdk=macosx*]" = NO; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; @@ -778,8 +728,16 @@ GCC_WARN_UNUSED_VARIABLE = YES; INFOPLIST_FILE = SocketIO/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@loader_path/../Frameworks", + ); LIBRARY_SEARCH_PATHS = "$(inherited)"; MACOSX_DEPLOYMENT_TARGET = 10.10; MTL_ENABLE_DEBUG_INFO = NO; @@ -787,10 +745,13 @@ SDKROOT = macosx; SKIP_INSTALL = YES; SUPPORTED_PLATFORMS = "$(inherited)"; + SUPPORTS_MACCATALYST = YES; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; SWIFT_INCLUDE_PATHS = ""; SWIFT_SWIFT3_OBJC_INFERENCE = Default; SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2,3,4"; + TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; TVOS_DEPLOYMENT_TARGET = 10.0; VALID_ARCHS = "$(inherited)"; VERSIONING_SYSTEM = "apple-generic"; @@ -819,7 +780,6 @@ COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_BITCODE = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ( "$(DEVELOPER_FRAMEWORKS_DIR)", @@ -862,8 +822,15 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; INFOPLIST_FILE = SocketIO/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks @loader_path/../Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = ( + "@executable_path/../Frameworks", + "@loader_path/../Frameworks", + ); LIBRARY_SEARCH_PATHS = "$(inherited)"; MACOSX_DEPLOYMENT_TARGET = 10.10; MTL_ENABLE_DEBUG_INFO = YES; @@ -901,7 +868,6 @@ COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_BITCODE = NO; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ( @@ -938,8 +904,15 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; INFOPLIST_FILE = SocketIO/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks @loader_path/../Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = ( + "@executable_path/../Frameworks", + "@loader_path/../Frameworks", + ); LIBRARY_SEARCH_PATHS = "$(inherited)"; MACOSX_DEPLOYMENT_TARGET = 10.10; MTL_ENABLE_DEBUG_INFO = NO; diff --git a/Source/SocketIO/Ack/SocketAckEmitter.swift b/Source/SocketIO/Ack/SocketAckEmitter.swift index 0a4eea77..0306f298 100644 --- a/Source/SocketIO/Ack/SocketAckEmitter.swift +++ b/Source/SocketIO/Ack/SocketAckEmitter.swift @@ -28,7 +28,7 @@ import Foundation /// A class that represents a waiting ack call. /// /// **NOTE**: You should not store this beyond the life of the event handler. -public final class SocketAckEmitter : NSObject { +public final class SocketAckEmitter: NSObject { private unowned let socket: SocketIOClient private let ackNum: Int @@ -101,7 +101,7 @@ public final class SocketAckEmitter : NSObject { /// ... /// } /// ``` -public final class OnAckCallback : NSObject { +public final class OnAckCallback: NSObject { private let ackNumber: Int private let binary: Bool private let items: [Any] @@ -136,8 +136,8 @@ public final class OnAckCallback : NSObject { guard seconds != 0 else { return } - socket.manager?.handleQueue.asyncAfter(deadline: DispatchTime.now() + seconds) {[weak socket] in - guard let socket = socket else { return } + socket.manager?.handleQueue.asyncAfter(deadline: DispatchTime.now() + seconds) {[weak socket, weak self] in + guard let socket = socket, let `self` = self else { return } socket.ackHandlers.timeoutAck(self.ackNumber) } diff --git a/Source/SocketIO/Client/SocketIOClientOption.swift b/Source/SocketIO/Client/SocketIOClientOption.swift index ac1a032b..545c210b 100644 --- a/Source/SocketIO/Client/SocketIOClientOption.swift +++ b/Source/SocketIO/Client/SocketIOClientOption.swift @@ -108,6 +108,9 @@ public enum SocketIOClientOption : ClientOption { /// Sets an NSURLSessionDelegate for the underlying engine. Useful if you need to handle self-signed certs. case sessionDelegate(URLSessionDelegate) + /// If passed `false`, the WebSocket stream will be configured with the useCustomEngine `false`. + case useCustomEngine(Bool) + /// The version of socket.io being used. This should match the server version. Default is 3. case version(SocketIOVersion) @@ -160,6 +163,8 @@ public enum SocketIOClientOption : ClientOption { description = "sessionDelegate" case .enableSOCKSProxy: description = "enableSOCKSProxy" + case .useCustomEngine: + description = "customEngine" case .version: description = "version" } @@ -213,6 +218,8 @@ public enum SocketIOClientOption : ClientOption { value = delegate case let .enableSOCKSProxy(enable): value = enable + case let .useCustomEngine(enable): + value = enable case let.version(versionNum): value = versionNum } diff --git a/Source/SocketIO/Engine/SocketEngine.swift b/Source/SocketIO/Engine/SocketEngine.swift index 991385c7..f95b828f 100644 --- a/Source/SocketIO/Engine/SocketEngine.swift +++ b/Source/SocketIO/Engine/SocketEngine.swift @@ -28,8 +28,10 @@ import Starscream /// The class that handles the engine.io protocol and transports. /// See `SocketEnginePollable` and `SocketEngineWebsocket` for transport specific methods. -open class SocketEngine: - NSObject, WebSocketDelegate, URLSessionDelegate, SocketEnginePollable, SocketEngineWebsocket, ConfigSettable { +open class SocketEngine: NSObject, WebSocketDelegate, URLSessionDelegate, + SocketEnginePollable, SocketEngineWebsocket, ConfigSettable { + + // MARK: Properties private static let logType = "SocketEngine" @@ -111,6 +113,9 @@ open class SocketEngine: /// The url for WebSockets. public private(set) var urlWebSocket = URL(string: "http://localhost/")! + /// When `false`, the WebSocket `stream` will be configured with the useCustomEngine `false`. + public private(set) var useCustomEngine = true + /// The version of engine.io being used. Default is three. public private(set) var version: SocketIOVersion = .three @@ -307,7 +312,7 @@ open class SocketEngine: includingCookies: session?.configuration.httpCookieStorage?.cookies(for: urlPollingWithSid) ) - ws = WebSocket(request: req, certPinner: certPinner, compressionHandler: compress ? WSCompression() : nil) + ws = WebSocket(request: req, certPinner: certPinner, compressionHandler: compress ? WSCompression() : nil, useCustomEngine: useCustomEngine) ws?.callbackQueue = engineQueue ws?.delegate = self @@ -624,6 +629,8 @@ open class SocketEngine: self.compress = true case .enableSOCKSProxy: self.enableSOCKSProxy = true + case let .useCustomEngine(enable): + self.useCustomEngine = enable case let .version(num): version = num default: @@ -742,11 +749,11 @@ extension SocketEngine { /// - Parameters: /// - event: WS Event /// - _: - public func didReceive(event: WebSocketEvent, client _: WebSocket) { + public func didReceive(event: Starscream.WebSocketEvent, client: Starscream.WebSocketClient) { switch event { case let .connected(headers): wsConnected = true - client?.engineDidWebsocketUpgrade(headers: headers) + self.client?.engineDidWebsocketUpgrade(headers: headers) websocketDidConnect() case .cancelled: wsConnected = false diff --git a/Tests/TestSocketIO/SocketMangerTest.swift b/Tests/TestSocketIO/SocketMangerTest.swift index f6473399..ced48fa3 100644 --- a/Tests/TestSocketIO/SocketMangerTest.swift +++ b/Tests/TestSocketIO/SocketMangerTest.swift @@ -59,7 +59,7 @@ class SocketMangerTest : XCTestCase { } - func testManagerDoesNotCallConnectWhenConnectingWithLessThanOneReconnect() { + func testManagerDoesNotCallConnectWhenConnectingWithLessThanOneReconnectOnDefault() { setUpSockets() let expect = expectation(description: "The manager should call not connect on the default socket") @@ -79,7 +79,7 @@ class SocketMangerTest : XCTestCase { waitForExpectations(timeout: 0.3) } - func testManagerCallConnectWhenConnectingAndMoreThanOneReconnect() { + func testManagerCallConnectWhenConnectingAndMoreThanOneReconnectOnDefault() { setUpSockets() let expect = expectation(description: "The manager should call connect on the default socket") @@ -97,7 +97,7 @@ class SocketMangerTest : XCTestCase { waitForExpectations(timeout: 0.8) } - func testManagerDoesNotCallConnectWhenConnectingWithLessThanOneReconnect() { + func testManagerDoesNotCallConnectWhenConnectingWithLessThanOneReconnectOnEngine() { setUpSockets() let expect = expectation(description: "The manager should not call connect on the engine") @@ -117,7 +117,7 @@ class SocketMangerTest : XCTestCase { waitForExpectations(timeout: 0.3) } - func testManagerCallConnectWhenConnectingAndMoreThanOneReconnect() { + func testManagerCallConnectWhenConnectingAndMoreThanOneReconnectOnEngine() { setUpSockets() let expect = expectation(description: "The manager should call connect on the engine")