Resync dev into nucleic/trunk after promotion

# Conflicts:
#	cloud/nucleic-edge/wrangler.jsonc
#	ios/NucleicRemote/NucleicRemote.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
This commit is contained in:
Nucleic
2026-06-27 13:44:15 -07:00
9 changed files with 84 additions and 31 deletions
+2 -2
View File
@@ -7,7 +7,7 @@
Note: `method = app-store-connect` is the current name (Xcode 15.3+). On older Xcode use Note: `method = app-store-connect` is the current name (Xcode 15.3+). On older Xcode use
`app-store` instead. Signing is automatic — Xcode manages the distribution profile for team `app-store` instead. Signing is automatic — Xcode manages the distribution profile for team
3XPAYVD6BP (needs an "Apple Distribution" cert + the App ID registered; see signing/README.md). L7UDTQ6F5W (needs an "Apple Distribution" cert + the App ID registered; see signing/README.md).
--> -->
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"> <plist version="1.0">
@@ -17,7 +17,7 @@
<key>destination</key> <key>destination</key>
<string>upload</string> <string>upload</string>
<key>teamID</key> <key>teamID</key>
<string>3XPAYVD6BP</string> <string>L7UDTQ6F5W</string>
<key>signingStyle</key> <key>signingStyle</key>
<string>automatic</string> <string>automatic</string>
<key>uploadSymbols</key> <key>uploadSymbols</key>
@@ -8,9 +8,11 @@
/* Begin PBXBuildFile section */ /* Begin PBXBuildFile section */
BF00000000000000000001 /* NucleicProtocol in Frameworks */ = {isa = PBXBuildFile; productRef = PD00000000000000000001 /* NucleicProtocol */; }; BF00000000000000000001 /* NucleicProtocol in Frameworks */ = {isa = PBXBuildFile; productRef = PD00000000000000000001 /* NucleicProtocol */; };
E7313E872FEF723300717105 /* app-logo-file.icon in Resources */ = {isa = PBXBuildFile; fileRef = E7313E862FEF723300717105 /* app-logo-file.icon */; };
/* End PBXBuildFile section */ /* End PBXBuildFile section */
/* Begin PBXFileReference section */ /* Begin PBXFileReference section */
E7313E862FEF723300717105 /* app-logo-file.icon */ = {isa = PBXFileReference; lastKnownFileType = folder.iconcomposer.icon; path = "app-logo-file.icon"; sourceTree = "<group>"; };
FR00000000000000000001 /* NucleicRemote.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = NucleicRemote.app; sourceTree = BUILT_PRODUCTS_DIR; }; FR00000000000000000001 /* NucleicRemote.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = NucleicRemote.app; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */ /* End PBXFileReference section */
@@ -52,6 +54,7 @@
children = ( children = (
SG00000000000000000001 /* NucleicRemote */, SG00000000000000000001 /* NucleicRemote */,
GR00000000000000000002 /* Products */, GR00000000000000000002 /* Products */,
E7313E862FEF723300717105 /* app-logo-file.icon */,
); );
sourceTree = "<group>"; sourceTree = "<group>";
}; };
@@ -131,6 +134,7 @@
isa = PBXResourcesBuildPhase; isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
E7313E872FEF723300717105 /* app-logo-file.icon in Resources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@@ -183,14 +187,17 @@
BC00000000000000000003 /* Debug */ = { BC00000000000000000003 /* Debug */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = "app-logo-file";
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1; CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 3XPAYVD6BP; DEVELOPMENT_TEAM = L7UDTQ6F5W;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = NucleicRemote/Info.plist; INFOPLIST_FILE = NucleicRemote/Info.plist;
INFOPLIST_KEY_NSCameraUsageDescription = "Scan the pairing QR code shown on your Mac.";
INFOPLIST_KEY_NSLocalNetworkUsageDescription = "Connect to your Mac running Nucleic on the local network.";
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
INFOPLIST_KEY_UILaunchScreen_Generation = YES; INFOPLIST_KEY_UILaunchScreen_Generation = YES;
INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
@@ -199,9 +206,14 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0; MARKETING_VERSION = 0.1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.nucleic.remote; PRODUCT_BUNDLE_IDENTIFIER = "xyz.blakeslee.nucleic-remote";
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2"; TARGETED_DEVICE_FAMILY = "1,2";
@@ -211,14 +223,17 @@
BC00000000000000000004 /* Release */ = { BC00000000000000000004 /* Release */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = "app-logo-file";
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1; CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 3XPAYVD6BP; DEVELOPMENT_TEAM = L7UDTQ6F5W;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = NucleicRemote/Info.plist; INFOPLIST_FILE = NucleicRemote/Info.plist;
INFOPLIST_KEY_NSCameraUsageDescription = "Scan the pairing QR code shown on your Mac.";
INFOPLIST_KEY_NSLocalNetworkUsageDescription = "Connect to your Mac running Nucleic on the local network.";
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
INFOPLIST_KEY_UILaunchScreen_Generation = YES; INFOPLIST_KEY_UILaunchScreen_Generation = YES;
INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
@@ -227,9 +242,14 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0; MARKETING_VERSION = 0.1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.nucleic.remote; PRODUCT_BUNDLE_IDENTIFIER = "xyz.blakeslee.nucleic-remote";
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2"; TARGETED_DEVICE_FAMILY = "1,2";
@@ -1,5 +1,5 @@
{ {
"originHash" : "23696d531d06a404cce2a1fb94c41e467624549bade00f7f85d0fc1f4c513c6a", "originHash" : "997519e7bf6b3bb52f6f766bab10b0bf950c6beb140aa897dc50ba77eaaa5801",
"pins" : [ "pins" : [
{ {
"identity" : "async-http-client", "identity" : "async-http-client",
@@ -24,8 +24,8 @@
"kind" : "remoteSourceControl", "kind" : "remoteSourceControl",
"location" : "https://github.com/grpc/grpc-swift-2.git", "location" : "https://github.com/grpc/grpc-swift-2.git",
"state" : { "state" : {
"revision" : "28cdd63ef88583ddc67d7bb179eab46fab465ce9", "revision" : "21fe69ab7ce0e87ac089534733c52f037e74a3eb",
"version" : "2.4.2" "version" : "2.4.1"
} }
}, },
{ {
@@ -33,8 +33,8 @@
"kind" : "remoteSourceControl", "kind" : "remoteSourceControl",
"location" : "https://github.com/grpc/grpc-swift-nio-transport.git", "location" : "https://github.com/grpc/grpc-swift-nio-transport.git",
"state" : { "state" : {
"revision" : "2ca31f06658ed288a2560e23ad649acbb3d6b3a3", "revision" : "e7d463749f9037b047dcd6da4e633718ddc432b8",
"version" : "2.9.0" "version" : "2.8.0"
} }
}, },
{ {
@@ -42,8 +42,8 @@
"kind" : "remoteSourceControl", "kind" : "remoteSourceControl",
"location" : "https://github.com/grpc/grpc-swift-protobuf.git", "location" : "https://github.com/grpc/grpc-swift-protobuf.git",
"state" : { "state" : {
"revision" : "176c5a434fd76f6f479848d1a8f7d44967534168", "revision" : "b05885fa9bdd88f1eab2e7162f1ee81340b0da33",
"version" : "2.4.1" "version" : "2.4.0"
} }
}, },
{ {
@@ -105,8 +105,8 @@
"kind" : "remoteSourceControl", "kind" : "remoteSourceControl",
"location" : "https://github.com/apple/swift-certificates.git", "location" : "https://github.com/apple/swift-certificates.git",
"state" : { "state" : {
"revision" : "eaa10d47d19919979dd8df22ff4fd6349b1108d4", "revision" : "bde8ca32a096825dfce37467137c903418c1893d",
"version" : "1.19.2" "version" : "1.19.1"
} }
}, },
{ {
@@ -168,8 +168,8 @@
"kind" : "remoteSourceControl", "kind" : "remoteSourceControl",
"location" : "https://github.com/apple/swift-log.git", "location" : "https://github.com/apple/swift-log.git",
"state" : { "state" : {
"revision" : "a878e7f8f46cfc0e1125e565b5c08e7d5272dc9a", "revision" : "92448c359f00ebe36ae97d3bd9086f13c7692b5a",
"version" : "1.14.0" "version" : "1.13.2"
} }
}, },
{ {
@@ -177,8 +177,8 @@
"kind" : "remoteSourceControl", "kind" : "remoteSourceControl",
"location" : "https://github.com/apple/swift-nio.git", "location" : "https://github.com/apple/swift-nio.git",
"state" : { "state" : {
"revision" : "cd3e1152083706d77b223fb29110e590efcc70c0", "revision" : "77b84ac2cd2ac9e4ac67d19f045fd5b434f56967",
"version" : "2.101.2" "version" : "2.101.0"
} }
}, },
{ {
@@ -63,7 +63,7 @@ enum HeartbeatReporter {
// MARK: - Anonymous install id (Keychain; separate from the Noise identity) // MARK: - Anonymous install id (Keychain; separate from the Noise identity)
private static let installAccount = "com.nucleic.remote.installid" private static let installAccount = "xyz.blakeslee.nucleic.remote.installid"
private static func installID() -> String { private static func installID() -> String {
if let data = keychainRead(installAccount), let id = String(data: data, encoding: .utf8) { if let data = keychainRead(installAccount), let id = String(data: data, encoding: .utf8) {
-4
View File
@@ -2,10 +2,6 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"> <plist version="1.0">
<dict> <dict>
<key>NSCameraUsageDescription</key>
<string>Scan the pairing QR code shown on your Mac.</string>
<key>NSLocalNetworkUsageDescription</key>
<string>Connect to your Mac running Nucleic on the local network.</string>
<key>NSBonjourServices</key> <key>NSBonjourServices</key>
<array> <array>
<string>_nucleic._tcp</string> <string>_nucleic._tcp</string>
@@ -17,7 +17,7 @@ struct PairedHost: Codable, Equatable {
/// Loads/persists this device's long-term `DeviceIdentity` (Keychain) and the pinned host /// Loads/persists this device's long-term `DeviceIdentity` (Keychain) and the pinned host
/// (UserDefaults). The identity is generated once on first launch and reused thereafter. /// (UserDefaults). The identity is generated once on first launch and reused thereafter.
enum IdentityStore { enum IdentityStore {
private static let keychainAccount = "com.nucleic.remote.identity" private static let keychainAccount = "xyz.blakeslee.nucleic.remote.identity"
private static let pairedHostKey = "nucleic.pairedHost" private static let pairedHostKey = "nucleic.pairedHost"
private static let deviceIDKey = "nucleic.deviceID" private static let deviceIDKey = "nucleic.deviceID"
@@ -4,8 +4,8 @@ import NucleicProtocol
import os import os
/// Filterable scanner diagnostics — in Console.app / Xcode, filter by subsystem /// Filterable scanner diagnostics — in Console.app / Xcode, filter by subsystem
/// `com.nucleic.remote` (category `scanner`) or search the "📷" marker. /// `xyz.blakeslee.nucleic.remote` (category `scanner`) or search the "📷" marker.
private let scannerLog = Logger(subsystem: "com.nucleic.remote", category: "scanner") private let scannerLog = Logger(subsystem: "xyz.blakeslee.nucleic.remote", category: "scanner")
/// Why the live camera feed isn't showing, so the scanner never sits on a silent black screen. /// Why the live camera feed isn't showing, so the scanner never sits on a silent black screen.
enum ScannerCameraState: Equatable { enum ScannerCameraState: Equatable {
Binary file not shown.

After

Width:  |  Height:  |  Size: 977 KiB

@@ -0,0 +1,37 @@
{
"fill" : "system-light",
"groups" : [
{
"hidden" : false,
"layers" : [
{
"glass" : false,
"hidden" : false,
"image-name" : "logo-v1-dark 2.png",
"name" : "logo-v1-dark 2",
"position" : {
"scale" : 0.25,
"translation-in-points" : [
0,
0
]
}
}
],
"shadow" : {
"kind" : "neutral",
"opacity" : 0.6
},
"translucency" : {
"enabled" : true,
"value" : 0.2
}
}
],
"supported-platforms" : {
"circles" : [
"watchOS"
],
"squares" : "shared"
}
}