Swift Package Manager - UIKit Dependency
I have a Package.swift in my project like:
import PackageDescription
let package = Package(
name: "ProjectName",
dependencies: [
.Package(url: "https://github.com/example/repo.git", majorVersion: 0)
]
)
When I run swift build
I get errors like…
/project/Packages/WebViewController.swift:1:8: error: no such module 'UIKit'
import UIKit
^
Where should I tell the swift package manager where to find UIKit?
Solution 1:
You have to change some swiftc options to build the project against proper sdk and target
swift build -Xswiftc "-sdk" -Xswiftc "`xcrun --sdk iphonesimulator --show-sdk-path`" -Xswiftc "-target" -Xswiftc "x86_64-apple-ios13.0-simulator"
Solution 2:
Currently Swift Package Manager has full Xcode support. I was able to get around this error by specifying in my Package.swift manifest that the platform was iOS.
let package = Package(
name: "MyPackage",
platforms: [
.iOS(.v8)
],
Then you can open the Package.swift file in Xcode and it will just work.
Solution 3:
Make it work without limit the platforms:
You should select an iOS-based target to make it available:
If you leave it selecting macOS (by default), you will get the error.
Limit to a specific platform
if you want your package to be available only for specific platforms (for example only for iOS), you should specify the platform in the package.swift
file:
let package = Package(
name: "MyLibrary",
platforms: [
.iOS(.v10)
],
products: [
,,,
Support Multiplatform
If you need your framework to be available on multiple platforms, don't forget to check the availability of the imported framework like:
#if canImport(UIKit)
import UIKit
#endif