ibm-bluemix-mobile-services/bms-clientsdk-swift-core

Can Not Build

Closed this issue · 4 comments

Using Xcode Version 8.2.1 (8C1002), Swift 3.0.2:

$ xcrun swift -version
Apple Swift version 3.0.2 (swiftlang-800.0.63 clang-800.0.42.1)
Target: x86_64-apple-macosx10.9

I am getting these errors when I add the url to my cartfile and run carthage update:

The following build commands failed:
	CompileSwift normal armv7k
	CompileSwiftSources normal armv7k com.apple.xcode.tools.swift.compiler
(2 failures)
/<PATH_TO_MY_PROJECT_DIRECTORY>/Carthage/Checkouts/bms-clientsdk-swift-core/Source/Network Requests/BaseRequest.swift:327:17: warning: instance method 'urlSession(_:task:willPerformHTTPRedirection:newRequest:completionHandler:)' nearly matches optional requirement 'urlSession(_:task:willPerformHTTPRedirection:newRequest:completionHandler:)' of protocol 'URLSessionTaskDelegate'
/<PATH_TO_MY_PROJECT_DIRECTORY>/Carthage/Checkouts/bms-clientsdk-swift-core/Source/Network Requests/BaseRequest.swift:255:52: error: cannot convert value of type 'Error?' to expected argument type 'NSError?'
/<PATH_TO_MY_PROJECT_DIRECTORY>/Carthage/Checkouts/bms-clientsdk-swift-core/Source/Network Requests/BaseRequest.swift:274:23: error: 'init' has been renamed to 'init(describing:)'
/<PATH_TO_MY_PROJECT_DIRECTORY>/Carthage/Checkouts/bms-clientsdk-swift-core/Source/Network Requests/BaseRequest.swift:335:65: error: 'init' has been renamed to 'init(describing:)'
/<PATH_TO_MY_PROJECT_DIRECTORY>/Carthage/Checkouts/bms-clientsdk-swift-core/Source/Network Requests/BMSUrlSession.swift:139:80: error: passing non-escaping parameter 'completionHandler' to function expecting an @escaping closure
/<PATH_TO_MY_PROJECT_DIRECTORY>/Carthage/Checkouts/bms-clientsdk-swift-core/Source/Network Requests/BMSUrlSession.swift:192:99: error: passing non-escaping parameter 'completionHandler' to function expecting an @escaping closure
/<PATH_TO_MY_PROJECT_DIRECTORY>/Carthage/Checkouts/bms-clientsdk-swift-core/Source/Network Requests/BMSUrlSession.swift:242:98: error: passing non-escaping parameter 'completionHandler' to function expecting an @escaping closure
/<PATH_TO_MY_PROJECT_DIRECTORY>/Carthage/Checkouts/bms-clientsdk-swift-core/Source/Network Requests/BMSUrlSession.swift:296:42: error: value of optional type 'Int?' not unwrapped; did you mean to use '!' or '?'?
/<PATH_TO_MY_PROJECT_DIRECTORY>/Carthage/Checkouts/bms-clientsdk-swift-core/Source/Network Requests/BMSUrlSession.swift:296:73: error: value of optional type 'Int?' not unwrapped; did you mean to use '!' or '?'?
/<PATH_TO_MY_PROJECT_DIRECTORY>/Carthage/Checkouts/bms-clientsdk-swift-core/Source/Network Requests/BMSUrlSession.swift:311:21: error: closure use of non-escaping parameter 'handleTask' may allow it to escape
/<PATH_TO_MY_PROJECT_DIRECTORY>/Carthage/Checkouts/bms-clientsdk-swift-core/Source/Network Requests/BMSUrlSession.swift:346:139: error: closure use of non-escaping parameter 'completionHandler' may allow it to escape
/<PATH_TO_MY_PROJECT_DIRECTORY>/Carthage/Checkouts/bms-clientsdk-swift-core/Source/Network Requests/Response.swift:66:38: error: cannot assign value of type '[AnyHashable : Any]?' to type '[NSObject : AnyObject]?'
/<PATH_TO_MY_PROJECT_DIRECTORY>/Carthage/Checkouts/bms-clientsdk-swift-core/Source/Network Requests/Response.swift:69:29: error: cannot assign value of type 'Data?' to type 'NSData?'
/<PATH_TO_MY_PROJECT_DIRECTORY>/Carthage/Checkouts/bms-clientsdk-swift-core/Source/Network Requests/Request.swift:56:28: error: cannot assign value of type 'Data?' to type 'NSData?'
/<PATH_TO_MY_PROJECT_DIRECTORY>/Carthage/Checkouts/bms-clientsdk-swift-core/Source/Network Requests/BMSUrlSessionDelegate.swift:54:10: warning: instance method 'urlSession(_:didReceive:completionHandler:)' nearly matches optional requirement 'urlSession(_:didReceive:completionHandler:)' of protocol 'URLSessionDelegate'
/<PATH_TO_MY_PROJECT_DIRECTORY>/Carthage/Checkouts/bms-clientsdk-swift-core/Source/Network Requests/BMSUrlSessionDelegate.swift:72:10: warning: instance method 'urlSession(_:task:willPerformHTTPRedirection:newRequest:completionHandler:)' nearly matches optional requirement 'urlSession(_:task:willPerformHTTPRedirection:newRequest:completionHandler:)' of protocol 'URLSessionTaskDelegate'
/<PATH_TO_MY_PROJECT_DIRECTORY>/Carthage/Checkouts/bms-clientsdk-swift-core/Source/Network Requests/BMSUrlSessionDelegate.swift:77:10: warning: instance method 'urlSession(_:task:didReceive:completionHandler:)' nearly matches optional requirement 'urlSession(_:task:didReceive:completionHandler:)' of protocol 'URLSessionTaskDelegate'
/<PATH_TO_MY_PROJECT_DIRECTORY>/Carthage/Checkouts/bms-clientsdk-swift-core/Source/Network Requests/BMSUrlSessionDelegate.swift:82:10: warning: instance method 'urlSession(_:task:needNewBodyStream:)' nearly matches optional requirement 'urlSession(_:task:needNewBodyStream:)' of protocol 'URLSessionTaskDelegate'
/<PATH_TO_MY_PROJECT_DIRECTORY>/Carthage/Checkouts/bms-clientsdk-swift-core/Source/Network Requests/BMSUrlSessionDelegate.swift:112:10: warning: instance method 'urlSession(_:dataTask:didReceive:completionHandler:)' nearly matches optional requirement 'urlSession(_:dataTask:didReceive:completionHandler:)' of protocol 'URLSessionDataDelegate'
/<PATH_TO_MY_PROJECT_DIRECTORY>/Carthage/Checkouts/bms-clientsdk-swift-core/Source/Network Requests/BMSUrlSessionDelegate.swift:151:10: warning: instance method 'urlSession(_:dataTask:willCacheResponse:completionHandler:)' nearly matches optional requirement 'urlSession(_:dataTask:willCacheResponse:completionHandler:)' of protocol 'URLSessionDataDelegate'
/<PATH_TO_MY_PROJECT_DIRECTORY>/Carthage/Checkouts/bms-clientsdk-swift-core/Source/Network Requests/BMSUrlSessionDelegate.swift:74:165: error: passing non-escaping parameter 'completionHandler' to function expecting an @escaping closure
/<PATH_TO_MY_PROJECT_DIRECTORY>/Carthage/Checkouts/bms-clientsdk-swift-core/Source/Network Requests/BMSUrlSessionDelegate.swift:84:106: error: passing non-escaping parameter 'completionHandler' to function expecting an @escaping closure
/<PATH_TO_MY_PROJECT_DIRECTORY>/Carthage/Checkouts/bms-clientsdk-swift-core/Source/Network Requests/BMSUrlSessionDelegate.swift:126:153: error: passing non-escaping parameter 'completionHandler' to function expecting an @escaping closure
/<PATH_TO_MY_PROJECT_DIRECTORY>/Carthage/Checkouts/bms-clientsdk-swift-core/Source/Network Requests/BMSUrlSessionDelegate.swift:131:140: error: passing non-escaping parameter 'completionHandler' to function expecting an @escaping closure
/<PATH_TO_MY_PROJECT_DIRECTORY>/Carthage/Checkouts/bms-clientsdk-swift-core/Source/Network Requests/BMSUrlSessionDelegate.swift:153:151: error: passing non-escaping parameter 'completionHandler' to function expecting an @escaping closure
A shell task (/usr/bin/xcrun xcodebuild -workspace /<PATH_TO_MY_PROJECT_DIRECTORY>/Carthage/Checkouts/bms-clientsdk-swift-core/BMSCore.xcworkspace -scheme BMSCore watchOS -configuration Release -sdk watchos ONLY_ACTIVE_ARCH=NO BITCODE_GENERATION_MODE=bitcode CODE_SIGNING_REQUIRED=NO CODE_SIGN_IDENTITY= CARTHAGE=YES clean build) failed with exit code 65:
** BUILD FAILED **


The following build commands failed:
	CompileSwift normal armv7k
	CompileSwiftSources normal armv7k com.apple.xcode.tools.swift.compiler
(2 failures)

I'm not an expert, but it looks like the SDK and the latest Swift version do not agree on the (as of Swift 3.0, updated) use of @escaping/@nonescape...

Hi @nicolas-miari,

I tried to reproduce this myself in a new iOS app, but I did not encounter this issue. I built with the Xcode 8.2.1 command line tools, and confirmed that Carthage is building with Swift 3.0.2.

I looked in the source code for BMSCore, and found that the errors in your carthage update output do not match up with the same lines in the source code for the latest version of BMSCore (2.3.1). I think Carthage is downloading an outdated version of BMSCore for you.

When doing carthage update, your output should look something like this:

*** Fetching bms-clientsdk-swift-core
*** Fetching bms-clientsdk-swift-analytics-api
*** Checking out bms-clientsdk-swift-analytics-api at "2.2.0"
*** Checking out bms-clientsdk-swift-core at "2.3.1"
*** xcodebuild output can be found in /var/folders/b4/5f5jy27d15736_bnm9zh79hc0000gn/T/carthage-xcodebuild.9J9HoH.log
*** Building scheme "BMSAnalyticsAPI iOS" in BMSAnalyticsAPI.xcodeproj
*** Building scheme "BMSAnalyticsAPI watchOS" in BMSAnalyticsAPI.xcodeproj
*** Building scheme "BMSCore iOS" in BMSCore.xcworkspace
*** Building scheme "BMSCore watchOS" in BMSCore.xcworkspace

Can you tell me what version of BMSCore is being downloaded by Carthage? Also, can you attach a .zip of your Carthage/Checkouts/bms-clientsdk-swift-core folder, so I can take a look at the issues there?

Hi Anthony

My cartfile has this line:

github "ibm-bluemix-mobile-services/bms-clientsdk-swift-push" ~> 1.0

This is the folder you asked:
bms-clientsdk-swift-core.zip

Oops, where did I get that ~> 1.0 from?! The GitHub page for bms-clientsdk-swift-push suggests to just use:

github "ibm-bluemix-mobile-services/bms-clientsdk-swift-push"

...and now that I removed the version specifier, Carthage is checking out version 3.1.0:

*** Checking out bms-clientsdk-swift-push at "3.1.0"

...and builds without problem. My bad...

I'm getting a lot of build warnings regarding the deprecation of BaseRequest and "No rule to process module.modulemap" files, but that's for another issue I guess.

I'll close this one.

Glad you figured it out! Don't worry about those warnings regarding BaseRequest and module.modulemap. Those are expected.