Closed kashifshaikh closed 7 years ago
It looks like it's due to the swift version detection in a framework. I saw this happen in my frameworks, and looked at the "*-swift.h" header and this was the first line:
// Generated by Apple Swift version 4.0 effective-3.2 (swiftlang-900.0.43 clang-900.0.22.8)
while swift --version
prints out
Apple Swift version 4.0 (swiftlang-900.0.43 clang-900.0.22.8)
the 'effective' version has to do with swift running in 'swift 3.2' mode, while still being the 4.0 toolchain. The crux of the issue is that the 4.0 toolchain is effectively 2 different swift versions so there's no accurate way to know 'current version' of swift is. We'll likely have to introspect the 'SWIFT_VERSION' build setting in addition to 'swift --version'.
If the toolchain version is 4.0, but SWIFT_VERSION is 3.*, then we should equate that to '4.0 effective-3.2', otherwise 4.0
3.2 frameworks are binary compatible with 4.0 frameworks since they are both built by 4.0 compiler (they can be linked each other). So we should test against Swift compiler version, not Swift language version.
3.2 frameworks are binary compatible with 4.0 frameworks since they are both built by 4.0 compiler (they can be linked each other). So we should test against Swift compiler version, not Swift language version.
Yes. ☝️
We should be able to take whatever's inside the parentheses.
carthage version
: 0.23.0xcodebuild -version
: Xcode 9.0 Build version 9M136h--no-build
? no--no-use-binaries
? no--use-submodules
? no--cache-builds
? yesCartfile
Carthage Output
It will always rebuild framework - doesn't matter which package I choose.
With Xcode 8, cached builds works.