Converting RealmSwift to Xcode9 / Swift 4

Xcode:    9.0 GM (9A235)
Swift: 4.0
Carthage: 0.25.0
(tried on 2017/9/12)

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 the problem is RealmSwift doesn’t take measures against Swift 4.

So let me share how I fixed it.

Thanks in advance (Japanese)


Before that, confirm the xcodebuild version.

$ sudo xcode-select -s /Applications/
$ xcodebuild -version
Xcode 9.0
Build version 9A235
  1. Change swift version to 4

select TARGETS then move to Build Settings > Swift Language Version.
Choose Swift 4.

2. Build RealmSwift by yourself

a. For now, download RealmSwift manually

$ git clone --recursive
$ cd realm-cocoa
$ git checkout v2.10.0

b. fetch submodule

# at root of realm-cocoa directory
$ git submodule update --init

c. build using script, passing argument by devices you want

# build will fail if you forget previous step
$ REALM_SWIFT_VERSION=4.0 sh ios-swift

It takes time.

※ Or you can choose the other devices.

$ REALM_SWIFT_VERSION=4.0 sh osx-swift
$ REALM_SWIFT_VERSION=4.0 sh watchos-swift
$ REALM_SWIFT_VERSION=4.0 sh tvos-swift

d. Gotcha! binaries will be produced in the directory realm-cocoa/build/ios/swift-4.0.

You only have to replace the old frameworks with the new stuffs.

Well done! Mission completed.

That’s it!

In my private projects, Conversion to Swift 4 was easy (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.