[Xcode 11] swift package generate-xcodeproj with RealmSwift dependency does not build.
An Xcode 11 project which is generated from an executable-type Swift Package which has RealmSwift as a dependency does not build.
The following issues have been reported as SwiftPM bugs:
- Swift Bug Reporter SR-11789:
generate-xcodeproj
does not preserve quotes in.define(...)
- Swift Bug Reporter SR-11790:
generate-xcodeproj
fails to provide.headerSearchPath(โฆ)
includes - See also: GitHub realm/realm-swift/issues/6345: [Xcode 11] swift package generate-xcodeproj with RealmSwift dependency does not build.
Log file: log-swift_build.txt, log-generation-xcode-build.txt
Configuration:
- Xcode 11.2.1 (11B500)
- Swift 5.1.2 (swiftlang-1100.0.278 clang-1100.0.33.9)
- swift-tools-version:5.1
- macOS Mojave 10.14.6 (18G1012)
Steps:
-
Setup an executable type Swift Package with RealmSwift as a dependency.
- Example Package.swift
- GitHub repository
marc-medley/RealmSPMXcode
is an example Swift Package with RealmSwift as a dependency.
-
Verify build from the command line on has only a few warnings.
swift build
# RealmSPMXcode/.build/checkouts/realm-cocoa/Realm/RLMRealm.mm:135:17:
# warning: method definition for 'privilegesForRealm' not found [-Wincomplete-implementation]
# @implementation RLMRealm {
# RealmSPMXcode/.build/checkouts/realm-cocoa/include/Realm/RLMRealm.h:658:1:
# note: method 'privilegesForRealm' declared here
# - (struct RLMRealmPrivileges)privilegesForRealm;
## ... snip ...
# warnings generated.
# [139/139] Linking RealmSPMXcode
- Generate an Xcode 11 project from the Swift Package.
swift package generate-xcodeproj
# generated: ./RealmSPMXcode.xcodeproj
open RealmSPMXcode.xcodeproj/
- Build in Xcode with "My Mac" as the target.
Workaround: Edit RealmCore 5.23.5/realm/util/terminate.cpp to remove the REALM_VER_CHUNK
expansion related error:
REALM_NORETURN void terminate(const char* message, const char* file, long line) noexcept
{
std::stringstream ss;
// ss << file << ":" << line << ": " REALM_VER_CHUNK " " << message << '\n'; // :BEFORE:
ss << file << ":" << line << ": [realm-core-5.23.5] " << message << '\n'; // :AFTER:
terminate_internal(ss);
}
After the about workaround more errors occur:
Notice that .build/checkouts/realm-cocoa/Realm/ObjectStore/src/impl/results_notifier.hpp and .build/checkouts/realm-cocoa/Realm/ObjectStore/src/impl/results_notifier.cpp are in the same directly.
Next attempted workaround ...
// #include "impl/results_notifier.hpp"
#include "results_notifier.hpp"
... leads to yet more errors: