-
-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Add more traits to Package.swift #1341
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Package.swift
Outdated
|
|
||
| let applePlatforms: [PackageDescription.Platform] = [.iOS, .macOS, .watchOS, .tvOS, .visionOS] | ||
| let sqlcipherTraitBuildSettingCondition: BuildSettingCondition? = .when(platforms: applePlatforms, traits: ["SQLCipher"]) | ||
| let cSettings: [CSetting] = [.define("SQLITE_HAS_CODEC", to: nil, sqlcipherTraitBuildSettingCondition)] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@R4N does this define actually need to be set? There are no C files to be compiled in this project.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, in the sqlite3.h header that SQLCipher exposes, we'll need that other c flag to enable sqlite3_key* and sqlite3_rekey*. If you remove it, you should see errors along the lines of:
Cannot find 'sqlite3_key_v2' in scope
Cannot find 'sqlite3_rekey_v2' in scope
| description: "Enables SQLCipher encryption when a key is supplied to Connection"), | ||
| .trait(name: "SwiftToolchainCSQLite", | ||
| description: "Uses the SQLite from SwiftToolchain") | ||
| .default(enabledTraits: ["SystemSQLite"]) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Use caution with relying on default enabledTraits. Xcode UI still hasn't caught up and doesn't respect the default enabled traits. All the swift command line commands work properly with it, but for direct Xcode integrators it won't work. I'd recommend leaving the desired default as "trait-less" so that it works out of the box when adding the package in the Xcode UI.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks, yes I'm hesitant about this. Right now it should be OK because the defines in the code don't check explicitly for this:
#if StandaloneSQLite
import sqlite3
#elseif SQLCipher
import SQLCipher
#elseif SwiftToolchainCSQLite
import SwiftToolchainCSQLite
#else
import SQLite3 // SystemSQLite
#endifBut if it's not needed maybe it's safer to leave this out (for now, until Xcode catches up)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oh yes, excellent. That looks good to me. I should have looked closer at the rest of the commit for the adjusted import conditional prior to commenting.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
FYI, this is unrelated, but thought I'd mention it to you:
Since I started using the package with the SQLCipher changes (without using the trait),I keep seeing the warning
binary target 'SQLCipher' could not be mapped to an artifact with expected name 'SQLCipher'
in the logs during package resolve (just a warning, it seems).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is that integrating into an Xcode project using the Xcode interface to add the package, calling swift package resolve from within the SQLite.swift folder, or consuming it as referenced from another Package.swift?
If it's using the Xcode interface, which version of Xcode are you using?
I tried using Xcode 26.2 consuming the package on the simplify-trait branch both from a local checkout and referencing it from the GitHub url, but didn't see that warning in Resolve Packages.
I wonder if resetting the package caches in Xcode would help at all via File > Packages > Reset Package Caches if you haven't tried that yet?
Running swift package resolve --very-verbose from the SQLite.swift checkout simplify-trait branch didn't produce the warning for me either.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It was from within Xcode (16.4), when updating packages. I've tried to reproduce it, but it's gone now, probably just some temporary thing. If it turns up again I'll let you know.
Instead of guessing the right configuration based on the platform, we should use traits to configure SQLite.swift. The consuming packages can then do the guessing (if needed) and enable the right configuration themselves.