Environment
Xcode: 9.0 GM Seed (9A235)
Swift: 4.0
Carthage: 0.25.0
(tried on 2017/9/12 PDT)
Introduction
In your existing Xcode project, you might see this error if you convert swift version to 4.
Usually I must be able to use it through Carthage, but now I couldn’t.
It seems that the problem is RealmSwift doesn’t take measures against Swift 4 yet for Carthage.
So let me share how I fixed it.
This is just a workaround, I think the situation will turn better soon.
Thanks in advance
https://stackoverflow.com/questions/44640852/how-can-i-use-realm-with-swift-4
https://ja.stackoverflow.com/questions/28951/realm%E3%81%8Cbuild-%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84
Solution
Before that, confirm the xcodebuild version.
$ sudo xcode-select -s /Applications/Xcode9.app
$ xcodebuild -version
Xcode 9.0
Build version 9A235
1) Change swift version to 4
select TARGETS then move to Build Settings > Swift Language Version.
Then choose Swift 4.
2) Build RealmSwift by yourself
For now, download RealmSwift manually
$ git clone --recursive https://github.com/realm/realm-cocoa.git
$ cd realm-cocoa
$ git checkout v2.10.0
fetch submodule
// at root of realm-cocoa directory
$ git submodule update --init
build using script, passing argument by devices you want
// build will fail if you forget the previous step
$ REALM_SWIFT_VERSION=4.0 sh build.sh ios-swift
It takes time.
※ Or you can choose the other devices.
// this is optional
$ REALM_SWIFT_VERSION=4.0 sh build.sh osx-swift
$ REALM_SWIFT_VERSION=4.0 sh build.sh watchos-swift
$ REALM_SWIFT_VERSION=4.0 sh build.sh tvos-swift
Gotcha! frameworks are produced in the directory realm-cocoa/build/ios/swift-4.0
.
You only have to replace the old frameworks with the new stuff.
Well done! Error disappeared.
Mission completed.
That's it!
In my small private projects, Conversion to Swift 4 was easy (Luckily I only have to fix NSAttributedStringKey and add @objc annotation before keyword dynamic
. Xcode9 taught me everything I should do.)
Thanks for reading! Happy coding.