diff --git a/Sources/AgentRequestParser/main.swift b/Sources/AgentRequestParser/main.swift
deleted file mode 100644
index 0105e8f..0000000
--- a/Sources/AgentRequestParser/main.swift
+++ /dev/null
@@ -1,55 +0,0 @@
-import XPC
-import SecretAgentKit
-import OSLog
-
-private let logger = Logger(subsystem: "com.maxgoedjen.secretive.secretagent.AgentRequestParser", category: "Parser")
-
-func handleRequest(_ request: XPCListener.IncomingSessionRequest) -> XPCListener.IncomingSessionRequest.Decision {
- logger.log("Parser received inbound request")
- return request.accept { xpcMessage in
- xpcMessage.handoffReply(to: .global(qos: .userInteractive)) {
- logger.log("Parser accepted inbound request")
- handle(with: xpcMessage)
- }
- }
-}
-
-func handle(with xpcMessage: XPCReceivedMessage) {
- do {
- let parser = SSHAgentInputParser()
- let result = try parser.parse(data: xpcMessage.wrappedDecode())
- logger.log("Parser parsed message as type \(result.debugDescription)")
- xpcMessage.reply(result)
- } catch {
- logger.error("Parser failed with error \(error)")
- xpcMessage.reply(error)
- }
-}
-
-extension XPCReceivedMessage {
-
- func wrappedDecode() throws(SSHAgentInputParser.AgentParsingError) -> Data {
- do {
- return try decode(as: Data.self)
- } catch {
- throw SSHAgentInputParser.AgentParsingError.invalidData
- }
- }
-
-}
-
-do {
- if #available(macOS 26.0, *) {
- _ = try XPCListener(
- service: "com.maxgoedjen.Secretive.AgentRequestParser",
- requirement: .isFromSameTeam(),
- incomingSessionHandler: handleRequest(_:)
- )
- } else {
- _ = try XPCListener(service: "com.maxgoedjen.Secretive.AgentRequestParser", incomingSessionHandler: handleRequest(_:))
- }
- logger.log("Parser initialized")
- dispatchMain()
-} catch {
- logger.error("Failed to create parser, error: \(error)")
-}
diff --git a/Sources/Packages/Sources/Brief/Updater.swift b/Sources/Packages/Sources/Brief/Updater.swift
index 7491378..950fa19 100644
--- a/Sources/Packages/Sources/Brief/Updater.swift
+++ b/Sources/Packages/Sources/Brief/Updater.swift
@@ -47,7 +47,7 @@ import XPCWrappers
/// Manually trigger an update check.
public func checkForUpdates() async throws {
- let session = try XPCTypedSession<[Release], Never>(serviceName: "com.maxgoedjen.Secretive.ReleasesDownloader")
+ let session = try XPCTypedSession<[Release], Never>(serviceName: "com.maxgoedjen.Secretive.SecretiveUpdater")
await evaluate(releases: try await session.send())
session.complete()
}
diff --git a/Sources/Packages/Sources/XPCWrappers/XPCProtocol.swift b/Sources/Packages/Sources/XPCWrappers/XPCProtocol.swift
new file mode 100644
index 0000000..9691c31
--- /dev/null
+++ b/Sources/Packages/Sources/XPCWrappers/XPCProtocol.swift
@@ -0,0 +1,14 @@
+import Foundation
+
+@objc protocol _XPCProtocol: Sendable {
+ func process(_ data: Data, with reply: @Sendable @escaping (Data?, Error?) -> Void)
+}
+
+public protocol XPCProtocol: Sendable {
+
+ associatedtype Input: Codable
+ associatedtype Output: Codable
+
+ func process(_ data: Input) async throws -> Output
+
+}
diff --git a/Sources/Packages/Sources/XPCWrappers/XPCServiceDelegate.swift b/Sources/Packages/Sources/XPCWrappers/XPCServiceDelegate.swift
new file mode 100644
index 0000000..5108ed2
--- /dev/null
+++ b/Sources/Packages/Sources/XPCWrappers/XPCServiceDelegate.swift
@@ -0,0 +1,70 @@
+import Foundation
+
+public final class XPCServiceDelegate: NSObject, NSXPCListenerDelegate {
+
+ private let exportedObject: ErasedXPCProtocol
+
+ public init(exportedObject: XPCProtocolType) {
+ self.exportedObject = ErasedXPCProtocol(exportedObject)
+ }
+
+ public func listener(_ listener: NSXPCListener, shouldAcceptNewConnection newConnection: NSXPCConnection) -> Bool {
+ newConnection.exportedInterface = NSXPCInterface(with: (any _XPCProtocol).self)
+ let exportedObject = exportedObject
+ newConnection.exportedObject = exportedObject
+ newConnection.setCodeSigningRequirement("anchor apple generic and certificate leaf[subject.OU] = Z72PRUAWF6")
+ newConnection.resume()
+ return true
+ }
+}
+
+@objc private final class ErasedXPCProtocol: NSObject, _XPCProtocol {
+
+ let _process: @Sendable (Data, @Sendable @escaping (Data?, (any Error)?) -> Void) -> Void
+
+ public init(_ exportedObject: XPCProtocolType) {
+ _process = { data, reply in
+ Task { [reply] in
+ do {
+ let decoded = try JSONDecoder().decode(XPCProtocolType.Input.self, from: data)
+ let result = try await exportedObject.process(decoded)
+ let encoded = try JSONEncoder().encode(result)
+ reply(encoded, nil)
+ } catch {
+ if let error = error as? Codable & Error {
+ reply(nil, NSError(error))
+ } else {
+ reply(nil, error)
+ }
+ }
+ }
+ }
+ }
+
+ func process(_ data: Data, with reply: @Sendable @escaping (Data?, (any Error)?) -> Void) {
+ _process(data, reply)
+ }
+
+
+}
+
+extension NSError {
+
+ private enum Constants {
+ static let domain = "com.maxgoedjen.secretive.xpcwrappers"
+ static let code = -1
+ static let dataKey = "underlying"
+ }
+
+ @nonobjc convenience init(_ error: ErrorType) {
+ let encoded = try? JSONEncoder().encode(error)
+ self.init(domain: Constants.domain, code: Constants.code, userInfo: [Constants.dataKey: encoded as Any])
+ }
+
+ @nonobjc public func underlying(as errorType: ErrorType.Type) -> ErrorType? {
+ guard domain == Constants.domain && code == Constants.code, let data = userInfo[Constants.dataKey] as? Data else { return nil }
+ return try? JSONDecoder().decode(ErrorType.self, from: data)
+ }
+
+}
+
diff --git a/Sources/Packages/Sources/XPCWrappers/XPCTypedSession.swift b/Sources/Packages/Sources/XPCWrappers/XPCTypedSession.swift
new file mode 100644
index 0000000..5dd87a0
--- /dev/null
+++ b/Sources/Packages/Sources/XPCWrappers/XPCTypedSession.swift
@@ -0,0 +1,54 @@
+import Foundation
+
+public struct XPCTypedSession: Sendable {
+
+ private nonisolated(unsafe) let connection: NSXPCConnection
+ private var proxy: _XPCProtocol
+
+ public init(serviceName: String, warmup: Bool = false) throws {
+ connection = NSXPCConnection(serviceName: serviceName)
+ connection.remoteObjectInterface = NSXPCInterface(with: (any _XPCProtocol).self)
+ connection.setCodeSigningRequirement("anchor apple generic and certificate leaf[subject.OU] = Z72PRUAWF6")
+ connection.resume()
+ guard let proxy = connection.remoteObjectProxy as? _XPCProtocol else { fatalError() }
+ self.proxy = proxy
+ if warmup {
+ Task { [self] in
+ _ = try? await send()
+ }
+ }
+ }
+
+ public func send(_ message: some Encodable = Data()) async throws -> ResponseType {
+ let encoded = try JSONEncoder().encode(message)
+ return try await withCheckedThrowingContinuation { continuation in
+ proxy.process(encoded) { data, error in
+ do {
+ if let error {
+ throw error
+ }
+ guard let data else {
+ throw NoDataError()
+ }
+ let decoded = try JSONDecoder().decode(ResponseType.self, from: data)
+ continuation.resume(returning: decoded)
+ } catch {
+ if let typed = (error as NSError).underlying(as: ErrorType.self) {
+ continuation.resume(throwing: typed)
+ } else {
+ continuation.resume(throwing: error)
+ }
+ }
+ }
+ }
+ }
+
+
+ public func complete() {
+ connection.invalidate()
+ }
+
+ public struct NoDataError: Error {}
+
+}
+
diff --git a/Sources/Packages/Sources/XPCWrappers/XPCWrappers.swift b/Sources/Packages/Sources/XPCWrappers/XPCWrappers.swift
deleted file mode 100644
index 21515eb..0000000
--- a/Sources/Packages/Sources/XPCWrappers/XPCWrappers.swift
+++ /dev/null
@@ -1,49 +0,0 @@
-import Foundation
-
-public struct XPCTypedSession: Sendable {
-
- private let session: XPCSession
-
- public init(serviceName: String, warmup: Bool = false) throws {
- if #available(macOS 26.0, *) {
- session = try XPCSession(xpcService: serviceName, requirement: .isFromSameTeam())
- } else {
- session = try XPCSession(xpcService: serviceName)
- }
- if warmup {
- Task { [self] in
- _ = try? await send()
- }
- }
- }
-
- public func send(_ message: some Encodable = Data()) async throws -> ResponseType {
- try await withCheckedThrowingContinuation { continuation in
- do {
- try session.send(message) { result in
- switch result {
- case .success(let message):
- if let result = try? message.decode(as: ResponseType.self) {
- continuation.resume(returning: result)
- } else if let error = try? message.decode(as: ErrorType.self) {
- continuation.resume(throwing: error)
- } else {
- continuation.resume(throwing: UnknownMessageError())
- }
- case .failure(let error):
- continuation.resume(throwing: error)
- }
- }
- } catch {
- continuation.resume(throwing: error)
- }
- }
- }
-
- public func complete() {
- session.cancel(reason: "Done")
- }
-
-}
-
-public struct UnknownMessageError: Error, Codable {}
diff --git a/Sources/ReleasesDownloader/main.swift b/Sources/ReleasesDownloader/main.swift
deleted file mode 100644
index 622e0bf..0000000
--- a/Sources/ReleasesDownloader/main.swift
+++ /dev/null
@@ -1,44 +0,0 @@
-import XPC
-import OSLog
-import Brief
-
-private let logger = Logger(subsystem: "com.maxgoedjen.secretive.ReleasesDownloader", category: "ReleasesDownloader")
-
-enum Constants {
- static let updateURL = URL(string: "https://api.github.com/repos/maxgoedjen/secretive/releases")!
-}
-
-func handleRequest(_ request: XPCListener.IncomingSessionRequest) -> XPCListener.IncomingSessionRequest.Decision {
- logger.log("ReleasesDownloader received inbound request")
- return request.accept { xpcDictionary in
- xpcDictionary.handoffReply(to: .global(qos: .userInteractive)) {
- logger.log("ReleasesDownloader accepted inbound request")
- Task {
- do {
- let (data, _) = try await URLSession.shared.data(from: Constants.updateURL)
- let releases = try JSONDecoder().decode([Release].self, from: data)
- xpcDictionary.reply(releases)
- } catch {
- logger.error("ReleasesDownloader failed with unknown error \(error)")
- xpcDictionary.reply([] as [Release])
- }
- }
- }
- }
-}
-
-do {
- if #available(macOS 26.0, *) {
- _ = try XPCListener(
- service: "com.maxgoedjen.Secretive.ReleasesDownloader",
- requirement: .isFromSameTeam(),
- incomingSessionHandler: handleRequest(_:)
- )
- } else {
- _ = try XPCListener(service: "com.maxgoedjen.Secretive.ReleasesDownloader", incomingSessionHandler: handleRequest(_:))
- }
- logger.log("ReleasesDownloader initialized")
- dispatchMain()
-} catch {
- logger.error("Failed to create ReleasesDownloader, error: \(error)")
-}
diff --git a/Sources/SecretAgent/XPCInputParser.swift b/Sources/SecretAgent/XPCInputParser.swift
index 40ff327..3253bd9 100644
--- a/Sources/SecretAgent/XPCInputParser.swift
+++ b/Sources/SecretAgent/XPCInputParser.swift
@@ -9,7 +9,7 @@ public final class XPCAgentInputParser: SSHAgentInputParserProtocol {
private let session: XPCTypedSession
public init() throws {
- session = try XPCTypedSession(serviceName: "com.maxgoedjen.Secretive.AgentRequestParser", warmup: true)
+ session = try XPCTypedSession(serviceName: "com.maxgoedjen.Secretive.SecretAgentInputParser", warmup: true)
}
public func parse(data: Data) async throws -> SSHAgent.Request {
diff --git a/Sources/AgentRequestParser/Info.plist b/Sources/SecretAgentInputParser/Info.plist
similarity index 100%
rename from Sources/AgentRequestParser/Info.plist
rename to Sources/SecretAgentInputParser/Info.plist
diff --git a/Sources/SecretAgentInputParser/SecretAgentInputParser.swift b/Sources/SecretAgentInputParser/SecretAgentInputParser.swift
new file mode 100644
index 0000000..cc0c8fd
--- /dev/null
+++ b/Sources/SecretAgentInputParser/SecretAgentInputParser.swift
@@ -0,0 +1,17 @@
+import Foundation
+import OSLog
+import XPCWrappers
+import SecretAgentKit
+
+final class SecretAgentInputParser: NSObject, XPCProtocol {
+
+ private let logger = Logger(subsystem: "com.maxgoedjen.secretive.SecretAgentInputParser", category: "SecretAgentInputParser")
+
+ func process(_ data: Data) async throws -> SSHAgent.Request {
+ let parser = SSHAgentInputParser()
+ let result = try parser.parse(data: data)
+ logger.log("Parser parsed message as type \(result.debugDescription)")
+ return result
+ }
+
+}
diff --git a/Sources/SecretAgentInputParser/main.swift b/Sources/SecretAgentInputParser/main.swift
new file mode 100644
index 0000000..5e039ca
--- /dev/null
+++ b/Sources/SecretAgentInputParser/main.swift
@@ -0,0 +1,7 @@
+import Foundation
+import XPCWrappers
+
+let delegate = XPCServiceDelegate(exportedObject: SecretAgentInputParser())
+let listener = NSXPCListener.service()
+listener.delegate = delegate
+listener.resume()
diff --git a/Sources/Secretive.xcodeproj/project.pbxproj b/Sources/Secretive.xcodeproj/project.pbxproj
index 0ec373d..00031a7 100644
--- a/Sources/Secretive.xcodeproj/project.pbxproj
+++ b/Sources/Secretive.xcodeproj/project.pbxproj
@@ -21,17 +21,10 @@
5008C23E2E525D8900507AC2 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 5008C23D2E525D8200507AC2 /* Localizable.xcstrings */; };
5008C2402E52792400507AC2 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 50617D8623FCE48E0099B055 /* Assets.xcassets */; };
5008C2412E52D18700507AC2 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 5008C23D2E525D8200507AC2 /* Localizable.xcstrings */; };
- 500F04EB2E6CDEB0001CF06E /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 500F04E82E6CDEB0001CF06E /* main.swift */; };
- 500F04EF2E6CDEF4001CF06E /* SecretAgentKit in Frameworks */ = {isa = PBXBuildFile; productRef = 500F04EE2E6CDEF4001CF06E /* SecretAgentKit */; };
- 500F04F02E6CDF20001CF06E /* AgentRequestParser.xpc in Embed XPC Services */ = {isa = PBXBuildFile; fileRef = 500F04D72E6CDEAB001CF06E /* AgentRequestParser.xpc */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
501421622781262300BBAA70 /* Brief in Frameworks */ = {isa = PBXBuildFile; productRef = 501421612781262300BBAA70 /* Brief */; };
501421652781268000BBAA70 /* SecretAgent.app in CopyFiles */ = {isa = PBXBuildFile; fileRef = 50A3B78A24026B7500D209EA /* SecretAgent.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
50153E20250AFCB200525160 /* UpdateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50153E1F250AFCB200525160 /* UpdateView.swift */; };
50153E22250DECA300525160 /* SecretListItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50153E21250DECA300525160 /* SecretListItemView.swift */; };
- 501577C82E6BC5B4004A37D0 /* ReleasesDownloader.xpc in Embed XPC Services */ = {isa = PBXBuildFile; fileRef = 501577BD2E6BC5B4004A37D0 /* ReleasesDownloader.xpc */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
- 501577CF2E6BC5D4004A37D0 /* ReleasesDownloader.xpc in Embed XPC Services */ = {isa = PBXBuildFile; fileRef = 501577BD2E6BC5B4004A37D0 /* ReleasesDownloader.xpc */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
- 501577DA2E6BC5F3004A37D0 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 501577D62E6BC5F3004A37D0 /* main.swift */; };
- 501577DF2E6BC647004A37D0 /* Brief in Frameworks */ = {isa = PBXBuildFile; productRef = 501577DE2E6BC647004A37D0 /* Brief */; };
501578132E6C0479004A37D0 /* XPCInputParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 501578122E6C0479004A37D0 /* XPCInputParser.swift */; };
5018F54F24064786002EB505 /* Notifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5018F54E24064786002EB505 /* Notifier.swift */; };
504788EC2E680DC800B4556F /* URLs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 504788EB2E680DC400B4556F /* URLs.swift */; };
@@ -51,8 +44,17 @@
5066A6C82516FE6E004B5A36 /* CopyableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5066A6C72516FE6E004B5A36 /* CopyableView.swift */; };
506772C72424784600034DED /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 506772C62424784600034DED /* Credits.rtf */; };
506772C92425BB8500034DED /* NoStoresView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 506772C82425BB8500034DED /* NoStoresView.swift */; };
- 50692C5B2E6EB8D40043C7BB /* LaunchConstraints.coderequirement in Resources */ = {isa = PBXBuildFile; fileRef = 50692C5A2E6EB8D40043C7BB /* LaunchConstraints.coderequirement */; };
- 50692BA62E6D5CC90043C7BB /* InternetAccessPolicy.plist in Resources */ = {isa = PBXBuildFile; fileRef = 50692BA52E6D5CC90043C7BB /* InternetAccessPolicy.plist */; };
+ 50692D1D2E6FDB880043C7BB /* SecretiveUpdater.xpc in Embed XPC Services */ = {isa = PBXBuildFile; fileRef = 50692D122E6FDB880043C7BB /* SecretiveUpdater.xpc */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
+ 50692D282E6FDB8D0043C7BB /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50692D242E6FDB8D0043C7BB /* main.swift */; };
+ 50692D2D2E6FDC000043C7BB /* XPCWrappers in Frameworks */ = {isa = PBXBuildFile; productRef = 50692D2C2E6FDC000043C7BB /* XPCWrappers */; };
+ 50692D2F2E6FDC2B0043C7BB /* SecretiveUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50692D2E2E6FDC290043C7BB /* SecretiveUpdater.swift */; };
+ 50692D312E6FDC390043C7BB /* Brief in Frameworks */ = {isa = PBXBuildFile; productRef = 50692D302E6FDC390043C7BB /* Brief */; };
+ 50692E5B2E6FF9D20043C7BB /* SecretAgentInputParser.xpc in Embed XPC Services */ = {isa = PBXBuildFile; fileRef = 50692E502E6FF9D20043C7BB /* SecretAgentInputParser.xpc */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
+ 50692E682E6FF9E20043C7BB /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50692E632E6FF9E20043C7BB /* main.swift */; };
+ 50692E692E6FF9E20043C7BB /* SecretAgentInputParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50692E642E6FF9E20043C7BB /* SecretAgentInputParser.swift */; };
+ 50692E6C2E6FFA510043C7BB /* SecretAgentKit in Frameworks */ = {isa = PBXBuildFile; productRef = 50692E6B2E6FFA510043C7BB /* SecretAgentKit */; };
+ 50692E6D2E6FFA5F0043C7BB /* SecretiveUpdater.xpc in Embed XPC Services */ = {isa = PBXBuildFile; fileRef = 50692D122E6FDB880043C7BB /* SecretiveUpdater.xpc */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
+ 50692E702E6FFA6E0043C7BB /* SecretAgentInputParser.xpc in Embed XPC Services */ = {isa = PBXBuildFile; fileRef = 50692E502E6FF9D20043C7BB /* SecretAgentInputParser.xpc */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
5079BA0F250F29BF00EA86F4 /* StoreListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5079BA0E250F29BF00EA86F4 /* StoreListView.swift */; };
508A58AA241E06B40069DC07 /* PreviewUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = 508A58A9241E06B40069DC07 /* PreviewUpdater.swift */; };
508A58B3241ED2180069DC07 /* AgentStatusChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 508A58B2241ED2180069DC07 /* AgentStatusChecker.swift */; };
@@ -74,13 +76,6 @@
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
- 500F04F12E6CDF20001CF06E /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 50617D7723FCE48D0099B055 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 500F04D62E6CDEAB001CF06E;
- remoteInfo = AgentRequestParser;
- };
50142166278126B500BBAA70 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 50617D7723FCE48D0099B055 /* Project object */;
@@ -88,20 +83,6 @@
remoteGlobalIDString = 50A3B78924026B7500D209EA;
remoteInfo = SecretAgent;
};
- 501577C62E6BC5B4004A37D0 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 50617D7723FCE48D0099B055 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 501577BC2E6BC5B4004A37D0;
- remoteInfo = ReleasesDownloader;
- };
- 501577D02E6BC5D4004A37D0 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 50617D7723FCE48D0099B055 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 501577BC2E6BC5B4004A37D0;
- remoteInfo = ReleasesDownloader;
- };
501577D32E6BC5DD004A37D0 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 50617D7723FCE48D0099B055 /* Project object */;
@@ -109,6 +90,34 @@
remoteGlobalIDString = 501577BC2E6BC5B4004A37D0;
remoteInfo = ReleasesDownloader;
};
+ 50692D1B2E6FDB880043C7BB /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 50617D7723FCE48D0099B055 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 50692D112E6FDB880043C7BB;
+ remoteInfo = SecretiveUpdater;
+ };
+ 50692E592E6FF9D20043C7BB /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 50617D7723FCE48D0099B055 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 50692E4F2E6FF9D20043C7BB;
+ remoteInfo = SecretAgentInputParser;
+ };
+ 50692E6E2E6FFA5F0043C7BB /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 50617D7723FCE48D0099B055 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 50692D112E6FDB880043C7BB;
+ remoteInfo = SecretiveUpdater;
+ };
+ 50692E712E6FFA6E0043C7BB /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 50617D7723FCE48D0099B055 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 50692E4F2E6FF9D20043C7BB;
+ remoteInfo = SecretAgentInputParser;
+ };
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
@@ -118,7 +127,8 @@
dstPath = "$(CONTENTS_FOLDER_PATH)/XPCServices";
dstSubfolderSpec = 16;
files = (
- 501577C82E6BC5B4004A37D0 /* ReleasesDownloader.xpc in Embed XPC Services */,
+ 50692D1D2E6FDB880043C7BB /* SecretiveUpdater.xpc in Embed XPC Services */,
+ 50692E5B2E6FF9D20043C7BB /* SecretAgentInputParser.xpc in Embed XPC Services */,
);
name = "Embed XPC Services";
runOnlyForDeploymentPostprocessing = 0;
@@ -129,8 +139,8 @@
dstPath = "$(CONTENTS_FOLDER_PATH)/XPCServices";
dstSubfolderSpec = 16;
files = (
- 500F04F02E6CDF20001CF06E /* AgentRequestParser.xpc in Embed XPC Services */,
- 501577CF2E6BC5D4004A37D0 /* ReleasesDownloader.xpc in Embed XPC Services */,
+ 50692E6D2E6FFA5F0043C7BB /* SecretiveUpdater.xpc in Embed XPC Services */,
+ 50692E702E6FFA6E0043C7BB /* SecretAgentInputParser.xpc in Embed XPC Services */,
);
name = "Embed XPC Services";
runOnlyForDeploymentPostprocessing = 0;
@@ -173,14 +183,8 @@
50033AC227813F1700253856 /* BundleIDs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BundleIDs.swift; sourceTree = ""; };
5003EF39278005C800DF2006 /* Packages */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = Packages; sourceTree = ""; };
5008C23D2E525D8200507AC2 /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; name = Localizable.xcstrings; path = Packages/Resources/Localizable.xcstrings; sourceTree = SOURCE_ROOT; };
- 500F04D72E6CDEAB001CF06E /* AgentRequestParser.xpc */ = {isa = PBXFileReference; explicitFileType = "wrapper.xpc-service"; includeInIndex = 0; path = AgentRequestParser.xpc; sourceTree = BUILT_PRODUCTS_DIR; };
- 500F04E72E6CDEB0001CF06E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 500F04E82E6CDEB0001CF06E /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; };
50153E1F250AFCB200525160 /* UpdateView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpdateView.swift; sourceTree = ""; };
50153E21250DECA300525160 /* SecretListItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecretListItemView.swift; sourceTree = ""; };
- 501577BD2E6BC5B4004A37D0 /* ReleasesDownloader.xpc */ = {isa = PBXFileReference; explicitFileType = "wrapper.xpc-service"; includeInIndex = 0; path = ReleasesDownloader.xpc; sourceTree = BUILT_PRODUCTS_DIR; };
- 501577D52E6BC5F3004A37D0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 501577D62E6BC5F3004A37D0 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; };
501578122E6C0479004A37D0 /* XPCInputParser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XPCInputParser.swift; sourceTree = ""; };
5018F54E24064786002EB505 /* Notifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Notifier.swift; sourceTree = ""; };
504788EB2E680DC400B4556F /* URLs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLs.swift; sourceTree = ""; };
@@ -203,8 +207,15 @@
5066A6C72516FE6E004B5A36 /* CopyableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CopyableView.swift; sourceTree = ""; };
506772C62424784600034DED /* Credits.rtf */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; path = Credits.rtf; sourceTree = ""; };
506772C82425BB8500034DED /* NoStoresView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoStoresView.swift; sourceTree = ""; };
- 50692C5A2E6EB8D40043C7BB /* LaunchConstraints.coderequirement */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = LaunchConstraints.coderequirement; sourceTree = ""; };
50692BA52E6D5CC90043C7BB /* InternetAccessPolicy.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = InternetAccessPolicy.plist; sourceTree = ""; };
+ 50692D122E6FDB880043C7BB /* SecretiveUpdater.xpc */ = {isa = PBXFileReference; explicitFileType = "wrapper.xpc-service"; includeInIndex = 0; path = SecretiveUpdater.xpc; sourceTree = BUILT_PRODUCTS_DIR; };
+ 50692D232E6FDB8D0043C7BB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ 50692D242E6FDB8D0043C7BB /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; };
+ 50692D2E2E6FDC290043C7BB /* SecretiveUpdater.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecretiveUpdater.swift; sourceTree = ""; };
+ 50692E502E6FF9D20043C7BB /* SecretAgentInputParser.xpc */ = {isa = PBXFileReference; explicitFileType = "wrapper.xpc-service"; includeInIndex = 0; path = SecretAgentInputParser.xpc; sourceTree = BUILT_PRODUCTS_DIR; };
+ 50692E622E6FF9E20043C7BB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ 50692E632E6FF9E20043C7BB /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; };
+ 50692E642E6FF9E20043C7BB /* SecretAgentInputParser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecretAgentInputParser.swift; sourceTree = ""; };
5079BA0E250F29BF00EA86F4 /* StoreListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreListView.swift; sourceTree = ""; };
508A58A9241E06B40069DC07 /* PreviewUpdater.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreviewUpdater.swift; sourceTree = ""; };
508A58AB241E121B0069DC07 /* Config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Config.xcconfig; sourceTree = ""; };
@@ -231,22 +242,6 @@
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
- 500F04D42E6CDEAB001CF06E /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 500F04EF2E6CDEF4001CF06E /* SecretAgentKit in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 501577BA2E6BC5B4004A37D0 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 501577DF2E6BC647004A37D0 /* Brief in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
50617D7C23FCE48D0099B055 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
@@ -258,6 +253,23 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ 50692D0F2E6FDB880043C7BB /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 50692D2D2E6FDC000043C7BB /* XPCWrappers in Frameworks */,
+ 50692D312E6FDC390043C7BB /* Brief in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 50692E4D2E6FF9D20043C7BB /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 50692E6C2E6FFA510043C7BB /* SecretAgentKit in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
50A3B78724026B7500D209EA /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
@@ -281,25 +293,6 @@
path = Helpers;
sourceTree = "";
};
- 500F04E92E6CDEB0001CF06E /* AgentRequestParser */ = {
- isa = PBXGroup;
- children = (
- 500F04E72E6CDEB0001CF06E /* Info.plist */,
- 500F04E82E6CDEB0001CF06E /* main.swift */,
- );
- path = AgentRequestParser;
- sourceTree = "";
- };
- 501577D92E6BC5F3004A37D0 /* ReleasesDownloader */ = {
- isa = PBXGroup;
- children = (
- 501577D52E6BC5F3004A37D0 /* Info.plist */,
- 50692BA52E6D5CC90043C7BB /* InternetAccessPolicy.plist */,
- 501577D62E6BC5F3004A37D0 /* main.swift */,
- );
- path = ReleasesDownloader;
- sourceTree = "";
- };
504788ED2E681EB200B4556F /* Styles */ = {
isa = PBXGroup;
children = (
@@ -356,9 +349,9 @@
5003EF39278005C800DF2006 /* Packages */,
50617D8123FCE48E0099B055 /* Secretive */,
50A3B78B24026B7500D209EA /* SecretAgent */,
- 501577D92E6BC5F3004A37D0 /* ReleasesDownloader */,
- 500F04E92E6CDEB0001CF06E /* AgentRequestParser */,
508A58AF241E144C0069DC07 /* Config */,
+ 50692D272E6FDB8D0043C7BB /* SecretiveUpdater */,
+ 50692E662E6FF9E20043C7BB /* SecretAgentInputParser */,
50617D8023FCE48E0099B055 /* Products */,
5099A08B240243730062B6F2 /* Frameworks */,
);
@@ -369,8 +362,8 @@
children = (
50617D7F23FCE48E0099B055 /* Secretive.app */,
50A3B78A24026B7500D209EA /* SecretAgent.app */,
- 501577BD2E6BC5B4004A37D0 /* ReleasesDownloader.xpc */,
- 500F04D72E6CDEAB001CF06E /* AgentRequestParser.xpc */,
+ 50692D122E6FDB880043C7BB /* SecretiveUpdater.xpc */,
+ 50692E502E6FF9D20043C7BB /* SecretAgentInputParser.xpc */,
);
name = Products;
sourceTree = "";
@@ -386,7 +379,6 @@
50617D8E23FCE48E0099B055 /* Info.plist */,
508BF28D25B4F005009EFB7E /* InternetAccessPolicy.plist */,
50617D8F23FCE48E0099B055 /* Secretive.entitlements */,
- 50692C5A2E6EB8D40043C7BB /* LaunchConstraints.coderequirement */,
506772C62424784600034DED /* Credits.rtf */,
5008C23D2E525D8200507AC2 /* Localizable.xcstrings */,
50617D8823FCE48E0099B055 /* Preview Content */,
@@ -405,6 +397,27 @@
path = "Preview Content";
sourceTree = "";
};
+ 50692D272E6FDB8D0043C7BB /* SecretiveUpdater */ = {
+ isa = PBXGroup;
+ children = (
+ 50692D232E6FDB8D0043C7BB /* Info.plist */,
+ 50692BA52E6D5CC90043C7BB /* InternetAccessPolicy.plist */,
+ 50692D242E6FDB8D0043C7BB /* main.swift */,
+ 50692D2E2E6FDC290043C7BB /* SecretiveUpdater.swift */,
+ );
+ path = SecretiveUpdater;
+ sourceTree = "";
+ };
+ 50692E662E6FF9E20043C7BB /* SecretAgentInputParser */ = {
+ isa = PBXGroup;
+ children = (
+ 50692E622E6FF9E20043C7BB /* Info.plist */,
+ 50692E632E6FF9E20043C7BB /* main.swift */,
+ 50692E642E6FF9E20043C7BB /* SecretAgentInputParser.swift */,
+ );
+ path = SecretAgentInputParser;
+ sourceTree = "";
+ };
508A58AF241E144C0069DC07 /* Config */ = {
isa = PBXGroup;
children = (
@@ -470,46 +483,6 @@
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
- 500F04D62E6CDEAB001CF06E /* AgentRequestParser */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 500F04E22E6CDEAB001CF06E /* Build configuration list for PBXNativeTarget "AgentRequestParser" */;
- buildPhases = (
- 500F04D32E6CDEAB001CF06E /* Sources */,
- 500F04D42E6CDEAB001CF06E /* Frameworks */,
- 500F04D52E6CDEAB001CF06E /* Resources */,
- );
- buildRules = (
- );
- dependencies = (
- );
- name = AgentRequestParser;
- packageProductDependencies = (
- 500F04EE2E6CDEF4001CF06E /* SecretAgentKit */,
- );
- productName = AgentRequestParser;
- productReference = 500F04D72E6CDEAB001CF06E /* AgentRequestParser.xpc */;
- productType = "com.apple.product-type.xpc-service";
- };
- 501577BC2E6BC5B4004A37D0 /* ReleasesDownloader */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 501577CE2E6BC5B4004A37D0 /* Build configuration list for PBXNativeTarget "ReleasesDownloader" */;
- buildPhases = (
- 501577B92E6BC5B4004A37D0 /* Sources */,
- 501577BA2E6BC5B4004A37D0 /* Frameworks */,
- 501577BB2E6BC5B4004A37D0 /* Resources */,
- );
- buildRules = (
- );
- dependencies = (
- );
- name = ReleasesDownloader;
- packageProductDependencies = (
- 501577DE2E6BC647004A37D0 /* Brief */,
- );
- productName = ReleasesDownloader;
- productReference = 501577BD2E6BC5B4004A37D0 /* ReleasesDownloader.xpc */;
- productType = "com.apple.product-type.xpc-service";
- };
50617D7E23FCE48D0099B055 /* Secretive */ = {
isa = PBXNativeTarget;
buildConfigurationList = 50617D9D23FCE48E0099B055 /* Build configuration list for PBXNativeTarget "Secretive" */;
@@ -525,7 +498,8 @@
);
dependencies = (
50142167278126B500BBAA70 /* PBXTargetDependency */,
- 501577C72E6BC5B4004A37D0 /* PBXTargetDependency */,
+ 50692D1C2E6FDB880043C7BB /* PBXTargetDependency */,
+ 50692E5A2E6FF9D20043C7BB /* PBXTargetDependency */,
);
name = Secretive;
packageProductDependencies = (
@@ -538,6 +512,47 @@
productReference = 50617D7F23FCE48E0099B055 /* Secretive.app */;
productType = "com.apple.product-type.application";
};
+ 50692D112E6FDB880043C7BB /* SecretiveUpdater */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 50692D1F2E6FDB880043C7BB /* Build configuration list for PBXNativeTarget "SecretiveUpdater" */;
+ buildPhases = (
+ 50692D0E2E6FDB880043C7BB /* Sources */,
+ 50692D0F2E6FDB880043C7BB /* Frameworks */,
+ 50692D102E6FDB880043C7BB /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = SecretiveUpdater;
+ packageProductDependencies = (
+ 50692D2C2E6FDC000043C7BB /* XPCWrappers */,
+ 50692D302E6FDC390043C7BB /* Brief */,
+ );
+ productName = SecretiveUpdater;
+ productReference = 50692D122E6FDB880043C7BB /* SecretiveUpdater.xpc */;
+ productType = "com.apple.product-type.xpc-service";
+ };
+ 50692E4F2E6FF9D20043C7BB /* SecretAgentInputParser */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 50692E5D2E6FF9D20043C7BB /* Build configuration list for PBXNativeTarget "SecretAgentInputParser" */;
+ buildPhases = (
+ 50692E4C2E6FF9D20043C7BB /* Sources */,
+ 50692E4D2E6FF9D20043C7BB /* Frameworks */,
+ 50692E4E2E6FF9D20043C7BB /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = SecretAgentInputParser;
+ packageProductDependencies = (
+ 50692E6B2E6FFA510043C7BB /* SecretAgentKit */,
+ );
+ productName = SecretAgentInputParser;
+ productReference = 50692E502E6FF9D20043C7BB /* SecretAgentInputParser.xpc */;
+ productType = "com.apple.product-type.xpc-service";
+ };
50A3B78924026B7500D209EA /* SecretAgent */ = {
isa = PBXNativeTarget;
buildConfigurationList = 50A3B79A24026B7600D209EA /* Build configuration list for PBXNativeTarget "SecretAgent" */;
@@ -551,9 +566,9 @@
buildRules = (
);
dependencies = (
- 501577D12E6BC5D4004A37D0 /* PBXTargetDependency */,
501577D42E6BC5DD004A37D0 /* PBXTargetDependency */,
- 500F04F22E6CDF20001CF06E /* PBXTargetDependency */,
+ 50692E6F2E6FFA5F0043C7BB /* PBXTargetDependency */,
+ 50692E722E6FFA6E0043C7BB /* PBXTargetDependency */,
);
name = SecretAgent;
packageProductDependencies = (
@@ -578,15 +593,15 @@
LastUpgradeCheck = 2600;
ORGANIZATIONNAME = "Max Goedjen";
TargetAttributes = {
- 500F04D62E6CDEAB001CF06E = {
- CreatedOnToolsVersion = 26.0;
- };
- 501577BC2E6BC5B4004A37D0 = {
- CreatedOnToolsVersion = 26.0;
- };
50617D7E23FCE48D0099B055 = {
CreatedOnToolsVersion = 11.3;
};
+ 50692D112E6FDB880043C7BB = {
+ CreatedOnToolsVersion = 26.0;
+ };
+ 50692E4F2E6FF9D20043C7BB = {
+ CreatedOnToolsVersion = 26.0;
+ };
50A3B78924026B7500D209EA = {
CreatedOnToolsVersion = 11.4;
};
@@ -616,28 +631,13 @@
targets = (
50617D7E23FCE48D0099B055 /* Secretive */,
50A3B78924026B7500D209EA /* SecretAgent */,
- 501577BC2E6BC5B4004A37D0 /* ReleasesDownloader */,
- 500F04D62E6CDEAB001CF06E /* AgentRequestParser */,
+ 50692D112E6FDB880043C7BB /* SecretiveUpdater */,
+ 50692E4F2E6FF9D20043C7BB /* SecretAgentInputParser */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
- 500F04D52E6CDEAB001CF06E /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 501577BB2E6BC5B4004A37D0 /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 50692BA62E6D5CC90043C7BB /* InternetAccessPolicy.plist in Resources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
50617D7D23FCE48D0099B055 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
@@ -646,11 +646,24 @@
5008C23E2E525D8900507AC2 /* Localizable.xcstrings in Resources */,
50617D8723FCE48E0099B055 /* Assets.xcassets in Resources */,
506772C72424784600034DED /* Credits.rtf in Resources */,
- 50692C5B2E6EB8D40043C7BB /* LaunchConstraints.coderequirement in Resources */,
508BF28E25B4F005009EFB7E /* InternetAccessPolicy.plist in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
+ 50692D102E6FDB880043C7BB /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 50692E4E2E6FF9D20043C7BB /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
50A3B78824026B7500D209EA /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
@@ -666,22 +679,6 @@
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
- 500F04D32E6CDEAB001CF06E /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 500F04EB2E6CDEB0001CF06E /* main.swift in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 501577B92E6BC5B4004A37D0 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 501577DA2E6BC5F3004A37D0 /* main.swift in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
50617D7B23FCE48D0099B055 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
@@ -721,6 +718,24 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ 50692D0E2E6FDB880043C7BB /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 50692D2F2E6FDC2B0043C7BB /* SecretiveUpdater.swift in Sources */,
+ 50692D282E6FDB8D0043C7BB /* main.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 50692E4C2E6FF9D20043C7BB /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 50692E682E6FF9E20043C7BB /* main.swift in Sources */,
+ 50692E692E6FF9E20043C7BB /* SecretAgentInputParser.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
50A3B78624026B7500D209EA /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
@@ -734,31 +749,35 @@
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
- 500F04F22E6CDF20001CF06E /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 500F04D62E6CDEAB001CF06E /* AgentRequestParser */;
- targetProxy = 500F04F12E6CDF20001CF06E /* PBXContainerItemProxy */;
- };
50142167278126B500BBAA70 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 50A3B78924026B7500D209EA /* SecretAgent */;
targetProxy = 50142166278126B500BBAA70 /* PBXContainerItemProxy */;
};
- 501577C72E6BC5B4004A37D0 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 501577BC2E6BC5B4004A37D0 /* ReleasesDownloader */;
- targetProxy = 501577C62E6BC5B4004A37D0 /* PBXContainerItemProxy */;
- };
- 501577D12E6BC5D4004A37D0 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 501577BC2E6BC5B4004A37D0 /* ReleasesDownloader */;
- targetProxy = 501577D02E6BC5D4004A37D0 /* PBXContainerItemProxy */;
- };
501577D42E6BC5DD004A37D0 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
- target = 501577BC2E6BC5B4004A37D0 /* ReleasesDownloader */;
targetProxy = 501577D32E6BC5DD004A37D0 /* PBXContainerItemProxy */;
};
+ 50692D1C2E6FDB880043C7BB /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 50692D112E6FDB880043C7BB /* SecretiveUpdater */;
+ targetProxy = 50692D1B2E6FDB880043C7BB /* PBXContainerItemProxy */;
+ };
+ 50692E5A2E6FF9D20043C7BB /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 50692E4F2E6FF9D20043C7BB /* SecretAgentInputParser */;
+ targetProxy = 50692E592E6FF9D20043C7BB /* PBXContainerItemProxy */;
+ };
+ 50692E6F2E6FFA5F0043C7BB /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 50692D112E6FDB880043C7BB /* SecretiveUpdater */;
+ targetProxy = 50692E6E2E6FFA5F0043C7BB /* PBXContainerItemProxy */;
+ };
+ 50692E722E6FFA6E0043C7BB /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 50692E4F2E6FF9D20043C7BB /* SecretAgentInputParser */;
+ targetProxy = 50692E712E6FFA6E0043C7BB /* PBXContainerItemProxy */;
+ };
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
@@ -773,228 +792,6 @@
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
- 500F04E32E6CDEAB001CF06E /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
- CODE_SIGN_IDENTITY = "Apple Development";
- CODE_SIGN_STYLE = Automatic;
- COMBINE_HIDPI_IMAGES = YES;
- CURRENT_PROJECT_VERSION = 1;
- DEVELOPMENT_TEAM = Z72PRUAWF6;
- ENABLE_APP_SANDBOX = YES;
- ENABLE_HARDENED_RUNTIME = YES;
- GCC_C_LANGUAGE_STANDARD = gnu17;
- GENERATE_INFOPLIST_FILE = YES;
- INFOPLIST_FILE = AgentRequestParser/Info.plist;
- INFOPLIST_KEY_CFBundleDisplayName = AgentRequestParser;
- INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Max Goedjen. All rights reserved.";
- LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
- MACOSX_DEPLOYMENT_TARGET = 14.0;
- MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = com.maxgoedjen.Secretive.AgentRequestParser;
- PRODUCT_NAME = "$(TARGET_NAME)";
- REGISTER_APP_GROUPS = YES;
- SKIP_INSTALL = YES;
- STRING_CATALOG_GENERATE_SYMBOLS = YES;
- SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
- SWIFT_APPROACHABLE_CONCURRENCY = YES;
- SWIFT_EMIT_LOC_STRINGS = YES;
- SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
- SWIFT_VERSION = 5.0;
- };
- name = Debug;
- };
- 500F04E42E6CDEAB001CF06E /* Test */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
- "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-";
- CODE_SIGN_STYLE = Automatic;
- COMBINE_HIDPI_IMAGES = YES;
- CURRENT_PROJECT_VERSION = 1;
- ENABLE_APP_SANDBOX = YES;
- ENABLE_HARDENED_RUNTIME = YES;
- GCC_C_LANGUAGE_STANDARD = gnu17;
- GENERATE_INFOPLIST_FILE = YES;
- INFOPLIST_FILE = AgentRequestParser/Info.plist;
- INFOPLIST_KEY_CFBundleDisplayName = AgentRequestParser;
- INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Max Goedjen. All rights reserved.";
- LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
- MACOSX_DEPLOYMENT_TARGET = 14.0;
- MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = com.maxgoedjen.Secretive.AgentRequestParser;
- PRODUCT_NAME = "$(TARGET_NAME)";
- REGISTER_APP_GROUPS = YES;
- SKIP_INSTALL = YES;
- STRING_CATALOG_GENERATE_SYMBOLS = YES;
- SWIFT_APPROACHABLE_CONCURRENCY = YES;
- SWIFT_EMIT_LOC_STRINGS = YES;
- SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
- SWIFT_VERSION = 5.0;
- };
- name = Test;
- };
- 500F04E52E6CDEAB001CF06E /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
- CODE_SIGN_IDENTITY = "Developer ID Application";
- CODE_SIGN_STYLE = Manual;
- COMBINE_HIDPI_IMAGES = YES;
- CURRENT_PROJECT_VERSION = 1;
- DEVELOPMENT_TEAM = "";
- "DEVELOPMENT_TEAM[sdk=macosx*]" = Z72PRUAWF6;
- ENABLE_APP_SANDBOX = YES;
- ENABLE_HARDENED_RUNTIME = YES;
- GCC_C_LANGUAGE_STANDARD = gnu17;
- GENERATE_INFOPLIST_FILE = YES;
- INFOPLIST_FILE = AgentRequestParser/Info.plist;
- INFOPLIST_KEY_CFBundleDisplayName = AgentRequestParser;
- INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Max Goedjen. All rights reserved.";
- LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
- MACOSX_DEPLOYMENT_TARGET = 14.0;
- MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = com.maxgoedjen.Secretive.AgentRequestParser;
- PRODUCT_NAME = "$(TARGET_NAME)";
- PROVISIONING_PROFILE_SPECIFIER = "";
- REGISTER_APP_GROUPS = YES;
- SKIP_INSTALL = YES;
- STRING_CATALOG_GENERATE_SYMBOLS = YES;
- SWIFT_APPROACHABLE_CONCURRENCY = YES;
- SWIFT_EMIT_LOC_STRINGS = YES;
- SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
- SWIFT_VERSION = 5.0;
- };
- name = Release;
- };
- 501577CA2E6BC5B4004A37D0 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
- CODE_SIGN_IDENTITY = "Apple Development";
- CODE_SIGN_STYLE = Automatic;
- COMBINE_HIDPI_IMAGES = YES;
- CURRENT_PROJECT_VERSION = 1;
- DEVELOPMENT_TEAM = Z72PRUAWF6;
- ENABLE_APP_SANDBOX = YES;
- ENABLE_HARDENED_RUNTIME = YES;
- ENABLE_INCOMING_NETWORK_CONNECTIONS = NO;
- ENABLE_OUTGOING_NETWORK_CONNECTIONS = YES;
- ENABLE_RESOURCE_ACCESS_AUDIO_INPUT = NO;
- ENABLE_RESOURCE_ACCESS_BLUETOOTH = NO;
- ENABLE_RESOURCE_ACCESS_CALENDARS = NO;
- ENABLE_RESOURCE_ACCESS_CAMERA = NO;
- ENABLE_RESOURCE_ACCESS_CONTACTS = NO;
- ENABLE_RESOURCE_ACCESS_LOCATION = NO;
- ENABLE_RESOURCE_ACCESS_PRINTING = NO;
- ENABLE_RESOURCE_ACCESS_USB = NO;
- GCC_C_LANGUAGE_STANDARD = gnu17;
- GENERATE_INFOPLIST_FILE = YES;
- INFOPLIST_FILE = ReleasesDownloader/Info.plist;
- INFOPLIST_KEY_CFBundleDisplayName = ReleasesDownloader;
- INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Max Goedjen. All rights reserved.";
- LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
- MACOSX_DEPLOYMENT_TARGET = 14.0;
- MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = com.maxgoedjen.Secretive.ReleasesDownloader;
- PRODUCT_NAME = "$(TARGET_NAME)";
- REGISTER_APP_GROUPS = YES;
- SKIP_INSTALL = YES;
- STRING_CATALOG_GENERATE_SYMBOLS = YES;
- SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
- SWIFT_APPROACHABLE_CONCURRENCY = YES;
- SWIFT_EMIT_LOC_STRINGS = YES;
- SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
- SWIFT_VERSION = 5.0;
- };
- name = Debug;
- };
- 501577CB2E6BC5B4004A37D0 /* Test */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
- "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
- CODE_SIGN_STYLE = Automatic;
- COMBINE_HIDPI_IMAGES = YES;
- CURRENT_PROJECT_VERSION = 1;
- DEVELOPMENT_TEAM = Z72PRUAWF6;
- ENABLE_APP_SANDBOX = YES;
- ENABLE_HARDENED_RUNTIME = YES;
- ENABLE_INCOMING_NETWORK_CONNECTIONS = NO;
- ENABLE_OUTGOING_NETWORK_CONNECTIONS = YES;
- ENABLE_RESOURCE_ACCESS_AUDIO_INPUT = NO;
- ENABLE_RESOURCE_ACCESS_BLUETOOTH = NO;
- ENABLE_RESOURCE_ACCESS_CALENDARS = NO;
- ENABLE_RESOURCE_ACCESS_CAMERA = NO;
- ENABLE_RESOURCE_ACCESS_CONTACTS = NO;
- ENABLE_RESOURCE_ACCESS_LOCATION = NO;
- ENABLE_RESOURCE_ACCESS_PRINTING = NO;
- ENABLE_RESOURCE_ACCESS_USB = NO;
- GCC_C_LANGUAGE_STANDARD = gnu17;
- GENERATE_INFOPLIST_FILE = YES;
- INFOPLIST_FILE = ReleasesDownloader/Info.plist;
- INFOPLIST_KEY_CFBundleDisplayName = ReleasesDownloader;
- INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Max Goedjen. All rights reserved.";
- LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
- MACOSX_DEPLOYMENT_TARGET = 14.0;
- MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = com.maxgoedjen.Secretive.ReleasesDownloader;
- PRODUCT_NAME = "$(TARGET_NAME)";
- REGISTER_APP_GROUPS = YES;
- SKIP_INSTALL = YES;
- STRING_CATALOG_GENERATE_SYMBOLS = YES;
- SWIFT_APPROACHABLE_CONCURRENCY = YES;
- SWIFT_EMIT_LOC_STRINGS = YES;
- SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
- SWIFT_VERSION = 5.0;
- };
- name = Test;
- };
- 501577CC2E6BC5B4004A37D0 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
- CODE_SIGN_IDENTITY = "Developer ID Application";
- "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Developer ID Application";
- CODE_SIGN_STYLE = Manual;
- COMBINE_HIDPI_IMAGES = YES;
- CURRENT_PROJECT_VERSION = 1;
- DEVELOPMENT_TEAM = "";
- "DEVELOPMENT_TEAM[sdk=macosx*]" = Z72PRUAWF6;
- ENABLE_APP_SANDBOX = YES;
- ENABLE_HARDENED_RUNTIME = YES;
- ENABLE_INCOMING_NETWORK_CONNECTIONS = NO;
- ENABLE_OUTGOING_NETWORK_CONNECTIONS = YES;
- ENABLE_RESOURCE_ACCESS_AUDIO_INPUT = NO;
- ENABLE_RESOURCE_ACCESS_BLUETOOTH = NO;
- ENABLE_RESOURCE_ACCESS_CALENDARS = NO;
- ENABLE_RESOURCE_ACCESS_CAMERA = NO;
- ENABLE_RESOURCE_ACCESS_CONTACTS = NO;
- ENABLE_RESOURCE_ACCESS_LOCATION = NO;
- ENABLE_RESOURCE_ACCESS_PRINTING = NO;
- ENABLE_RESOURCE_ACCESS_USB = NO;
- GCC_C_LANGUAGE_STANDARD = gnu17;
- GENERATE_INFOPLIST_FILE = YES;
- INFOPLIST_FILE = ReleasesDownloader/Info.plist;
- INFOPLIST_KEY_CFBundleDisplayName = ReleasesDownloader;
- INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Max Goedjen. All rights reserved.";
- LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
- MACOSX_DEPLOYMENT_TARGET = 14.0;
- MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = com.maxgoedjen.Secretive.ReleasesDownloader;
- PRODUCT_NAME = "$(TARGET_NAME)";
- PROVISIONING_PROFILE_SPECIFIER = "";
- REGISTER_APP_GROUPS = YES;
- SKIP_INSTALL = YES;
- STRING_CATALOG_GENERATE_SYMBOLS = YES;
- SWIFT_APPROACHABLE_CONCURRENCY = YES;
- SWIFT_EMIT_LOC_STRINGS = YES;
- SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
- SWIFT_VERSION = 5.0;
- };
- name = Release;
- };
50617D9B23FCE48E0099B055 /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 508A58AB241E121B0069DC07 /* Config.xcconfig */;
@@ -1065,6 +862,7 @@
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_TREAT_WARNINGS_AS_ERRORS = YES;
SWIFT_VERSION = 6.0;
};
name = Debug;
@@ -1132,6 +930,7 @@
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_OPTIMIZATION_LEVEL = "-O";
+ SWIFT_TREAT_WARNINGS_AS_ERRORS = YES;
SWIFT_VERSION = 6.0;
};
name = Release;
@@ -1164,7 +963,6 @@
ENABLE_RESOURCE_ACCESS_PRINTING = NO;
ENABLE_RESOURCE_ACCESS_USB = NO;
INFOPLIST_FILE = Secretive/Info.plist;
- LAUNCH_CONSTRAINT_RESPONSIBLE = "$(SRCROOT)/Secretive/LaunchConstraints.coderequirement";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
@@ -1205,7 +1003,6 @@
ENABLE_RESOURCE_ACCESS_PRINTING = NO;
ENABLE_RESOURCE_ACCESS_USB = NO;
INFOPLIST_FILE = Secretive/Info.plist;
- LAUNCH_CONSTRAINT_RESPONSIBLE = "$(SRCROOT)/Secretive/LaunchConstraints.coderequirement";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
@@ -1218,6 +1015,225 @@
};
name = Release;
};
+ 50692D202E6FDB880043C7BB /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
+ CODE_SIGN_IDENTITY = "Apple Development";
+ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
+ CODE_SIGN_STYLE = Automatic;
+ COMBINE_HIDPI_IMAGES = YES;
+ CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = Z72PRUAWF6;
+ ENABLE_APP_SANDBOX = YES;
+ ENABLE_HARDENED_RUNTIME = YES;
+ ENABLE_INCOMING_NETWORK_CONNECTIONS = NO;
+ ENABLE_OUTGOING_NETWORK_CONNECTIONS = YES;
+ ENABLE_RESOURCE_ACCESS_AUDIO_INPUT = NO;
+ ENABLE_RESOURCE_ACCESS_BLUETOOTH = NO;
+ ENABLE_RESOURCE_ACCESS_CALENDARS = NO;
+ ENABLE_RESOURCE_ACCESS_CAMERA = NO;
+ ENABLE_RESOURCE_ACCESS_CONTACTS = NO;
+ ENABLE_RESOURCE_ACCESS_LOCATION = NO;
+ ENABLE_RESOURCE_ACCESS_PRINTING = NO;
+ ENABLE_RESOURCE_ACCESS_USB = NO;
+ GCC_C_LANGUAGE_STANDARD = gnu17;
+ GENERATE_INFOPLIST_FILE = YES;
+ INFOPLIST_FILE = SecretiveUpdater/Info.plist;
+ INFOPLIST_KEY_CFBundleDisplayName = SecretiveUpdater;
+ INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Max Goedjen. All rights reserved.";
+ LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
+ MACOSX_DEPLOYMENT_TARGET = 26.0;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = com.maxgoedjen.Secretive.SecretiveUpdater;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ REGISTER_APP_GROUPS = YES;
+ SKIP_INSTALL = YES;
+ STRING_CATALOG_GENERATE_SYMBOLS = YES;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
+ SWIFT_APPROACHABLE_CONCURRENCY = YES;
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
+ SWIFT_VERSION = 5.0;
+ };
+ name = Debug;
+ };
+ 50692D212E6FDB880043C7BB /* Test */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
+ CODE_SIGN_STYLE = Automatic;
+ COMBINE_HIDPI_IMAGES = YES;
+ CURRENT_PROJECT_VERSION = 1;
+ ENABLE_APP_SANDBOX = YES;
+ ENABLE_HARDENED_RUNTIME = YES;
+ ENABLE_INCOMING_NETWORK_CONNECTIONS = NO;
+ ENABLE_OUTGOING_NETWORK_CONNECTIONS = YES;
+ ENABLE_RESOURCE_ACCESS_AUDIO_INPUT = NO;
+ ENABLE_RESOURCE_ACCESS_BLUETOOTH = NO;
+ ENABLE_RESOURCE_ACCESS_CALENDARS = NO;
+ ENABLE_RESOURCE_ACCESS_CAMERA = NO;
+ ENABLE_RESOURCE_ACCESS_CONTACTS = NO;
+ ENABLE_RESOURCE_ACCESS_LOCATION = NO;
+ ENABLE_RESOURCE_ACCESS_PRINTING = NO;
+ ENABLE_RESOURCE_ACCESS_USB = NO;
+ GCC_C_LANGUAGE_STANDARD = gnu17;
+ GENERATE_INFOPLIST_FILE = YES;
+ INFOPLIST_FILE = SecretiveUpdater/Info.plist;
+ INFOPLIST_KEY_CFBundleDisplayName = SecretiveUpdater;
+ INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Max Goedjen. All rights reserved.";
+ LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
+ MACOSX_DEPLOYMENT_TARGET = 26.0;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = com.maxgoedjen.Secretive.SecretiveUpdater;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ REGISTER_APP_GROUPS = YES;
+ SKIP_INSTALL = YES;
+ STRING_CATALOG_GENERATE_SYMBOLS = YES;
+ SWIFT_APPROACHABLE_CONCURRENCY = YES;
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
+ SWIFT_VERSION = 5.0;
+ };
+ name = Test;
+ };
+ 50692D222E6FDB880043C7BB /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
+ CODE_SIGN_IDENTITY = "Developer ID Application";
+ CODE_SIGN_STYLE = Manual;
+ COMBINE_HIDPI_IMAGES = YES;
+ CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = "";
+ "DEVELOPMENT_TEAM[sdk=macosx*]" = Z72PRUAWF6;
+ ENABLE_APP_SANDBOX = YES;
+ ENABLE_HARDENED_RUNTIME = YES;
+ ENABLE_INCOMING_NETWORK_CONNECTIONS = NO;
+ ENABLE_OUTGOING_NETWORK_CONNECTIONS = YES;
+ ENABLE_RESOURCE_ACCESS_AUDIO_INPUT = NO;
+ ENABLE_RESOURCE_ACCESS_BLUETOOTH = NO;
+ ENABLE_RESOURCE_ACCESS_CALENDARS = NO;
+ ENABLE_RESOURCE_ACCESS_CAMERA = NO;
+ ENABLE_RESOURCE_ACCESS_CONTACTS = NO;
+ ENABLE_RESOURCE_ACCESS_LOCATION = NO;
+ ENABLE_RESOURCE_ACCESS_PRINTING = NO;
+ ENABLE_RESOURCE_ACCESS_USB = NO;
+ GCC_C_LANGUAGE_STANDARD = gnu17;
+ GENERATE_INFOPLIST_FILE = YES;
+ INFOPLIST_FILE = SecretiveUpdater/Info.plist;
+ INFOPLIST_KEY_CFBundleDisplayName = SecretiveUpdater;
+ INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Max Goedjen. All rights reserved.";
+ LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
+ MACOSX_DEPLOYMENT_TARGET = 26.0;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = com.maxgoedjen.Secretive.SecretiveUpdater;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ PROVISIONING_PROFILE_SPECIFIER = "";
+ REGISTER_APP_GROUPS = YES;
+ SKIP_INSTALL = YES;
+ STRING_CATALOG_GENERATE_SYMBOLS = YES;
+ SWIFT_APPROACHABLE_CONCURRENCY = YES;
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
+ SWIFT_VERSION = 5.0;
+ };
+ name = Release;
+ };
+ 50692E5E2E6FF9D20043C7BB /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
+ CODE_SIGN_IDENTITY = "Apple Development";
+ CODE_SIGN_STYLE = Automatic;
+ COMBINE_HIDPI_IMAGES = YES;
+ CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = Z72PRUAWF6;
+ ENABLE_APP_SANDBOX = YES;
+ ENABLE_HARDENED_RUNTIME = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu17;
+ GENERATE_INFOPLIST_FILE = YES;
+ INFOPLIST_FILE = SecretAgentInputParser/Info.plist;
+ INFOPLIST_KEY_CFBundleDisplayName = SecretAgentInputParser;
+ INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Max Goedjen. All rights reserved.";
+ LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
+ MACOSX_DEPLOYMENT_TARGET = 26.0;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = com.maxgoedjen.Secretive.SecretAgentInputParser;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ REGISTER_APP_GROUPS = YES;
+ SKIP_INSTALL = YES;
+ STRING_CATALOG_GENERATE_SYMBOLS = YES;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
+ SWIFT_APPROACHABLE_CONCURRENCY = YES;
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
+ SWIFT_VERSION = 5.0;
+ };
+ name = Debug;
+ };
+ 50692E5F2E6FF9D20043C7BB /* Test */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
+ CODE_SIGN_STYLE = Automatic;
+ COMBINE_HIDPI_IMAGES = YES;
+ CURRENT_PROJECT_VERSION = 1;
+ ENABLE_APP_SANDBOX = YES;
+ ENABLE_HARDENED_RUNTIME = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu17;
+ GENERATE_INFOPLIST_FILE = YES;
+ INFOPLIST_FILE = SecretAgentInputParser/Info.plist;
+ INFOPLIST_KEY_CFBundleDisplayName = SecretAgentInputParser;
+ INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Max Goedjen. All rights reserved.";
+ LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
+ MACOSX_DEPLOYMENT_TARGET = 26.0;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = com.maxgoedjen.Secretive.SecretAgentInputParser;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ REGISTER_APP_GROUPS = YES;
+ SKIP_INSTALL = YES;
+ STRING_CATALOG_GENERATE_SYMBOLS = YES;
+ SWIFT_APPROACHABLE_CONCURRENCY = YES;
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
+ SWIFT_VERSION = 5.0;
+ };
+ name = Test;
+ };
+ 50692E602E6FF9D20043C7BB /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
+ CODE_SIGN_IDENTITY = "Developer ID Application";
+ CODE_SIGN_STYLE = Manual;
+ COMBINE_HIDPI_IMAGES = YES;
+ CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = "";
+ "DEVELOPMENT_TEAM[sdk=macosx*]" = Z72PRUAWF6;
+ ENABLE_APP_SANDBOX = YES;
+ ENABLE_HARDENED_RUNTIME = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu17;
+ GENERATE_INFOPLIST_FILE = YES;
+ INFOPLIST_FILE = SecretAgentInputParser/Info.plist;
+ INFOPLIST_KEY_CFBundleDisplayName = SecretAgentInputParser;
+ INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Max Goedjen. All rights reserved.";
+ LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
+ MACOSX_DEPLOYMENT_TARGET = 26.0;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = com.maxgoedjen.Secretive.SecretAgentInputParser;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ PROVISIONING_PROFILE_SPECIFIER = "";
+ REGISTER_APP_GROUPS = YES;
+ SKIP_INSTALL = YES;
+ STRING_CATALOG_GENERATE_SYMBOLS = YES;
+ SWIFT_APPROACHABLE_CONCURRENCY = YES;
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
+ SWIFT_VERSION = 5.0;
+ };
+ name = Release;
+ };
508A5914241EF1A00069DC07 /* Test */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 508A58AB241E121B0069DC07 /* Config.xcconfig */;
@@ -1288,6 +1304,7 @@
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_TREAT_WARNINGS_AS_ERRORS = YES;
SWIFT_VERSION = 6.0;
};
name = Test;
@@ -1318,7 +1335,6 @@
ENABLE_RESOURCE_ACCESS_PRINTING = NO;
ENABLE_RESOURCE_ACCESS_USB = NO;
INFOPLIST_FILE = Secretive/Info.plist;
- LAUNCH_CONSTRAINT_RESPONSIBLE = "$(SRCROOT)/Secretive/LaunchConstraints.coderequirement";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
@@ -1352,7 +1368,6 @@
ENABLE_RESOURCE_ACCESS_PRINTING = NO;
ENABLE_RESOURCE_ACCESS_USB = NO;
INFOPLIST_FILE = SecretAgent/Info.plist;
- LAUNCH_CONSTRAINT_RESPONSIBLE = "$(SRCROOT)/Secretive/LaunchConstraints.coderequirement";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
@@ -1388,7 +1403,6 @@
ENABLE_RESOURCE_ACCESS_PRINTING = NO;
ENABLE_RESOURCE_ACCESS_USB = NO;
INFOPLIST_FILE = SecretAgent/Info.plist;
- LAUNCH_CONSTRAINT_RESPONSIBLE = "$(SRCROOT)/Secretive/LaunchConstraints.coderequirement";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
@@ -1425,7 +1439,6 @@
ENABLE_RESOURCE_ACCESS_PRINTING = NO;
ENABLE_RESOURCE_ACCESS_USB = NO;
INFOPLIST_FILE = SecretAgent/Info.plist;
- LAUNCH_CONSTRAINT_RESPONSIBLE = "$(SRCROOT)/Secretive/LaunchConstraints.coderequirement";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
@@ -1441,26 +1454,6 @@
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
- 500F04E22E6CDEAB001CF06E /* Build configuration list for PBXNativeTarget "AgentRequestParser" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 500F04E32E6CDEAB001CF06E /* Debug */,
- 500F04E42E6CDEAB001CF06E /* Test */,
- 500F04E52E6CDEAB001CF06E /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 501577CE2E6BC5B4004A37D0 /* Build configuration list for PBXNativeTarget "ReleasesDownloader" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 501577CA2E6BC5B4004A37D0 /* Debug */,
- 501577CB2E6BC5B4004A37D0 /* Test */,
- 501577CC2E6BC5B4004A37D0 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
50617D7A23FCE48D0099B055 /* Build configuration list for PBXProject "Secretive" */ = {
isa = XCConfigurationList;
buildConfigurations = (
@@ -1481,6 +1474,26 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
+ 50692D1F2E6FDB880043C7BB /* Build configuration list for PBXNativeTarget "SecretiveUpdater" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 50692D202E6FDB880043C7BB /* Debug */,
+ 50692D212E6FDB880043C7BB /* Test */,
+ 50692D222E6FDB880043C7BB /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 50692E5D2E6FF9D20043C7BB /* Build configuration list for PBXNativeTarget "SecretAgentInputParser" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 50692E5E2E6FF9D20043C7BB /* Debug */,
+ 50692E5F2E6FF9D20043C7BB /* Test */,
+ 50692E602E6FF9D20043C7BB /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
50A3B79A24026B7600D209EA /* Build configuration list for PBXNativeTarget "SecretAgent" */ = {
isa = XCConfigurationList;
buildConfigurations = (
@@ -1526,18 +1539,22 @@
isa = XCSwiftPackageProductDependency;
productName = SmartCardSecretKit;
};
- 500F04EE2E6CDEF4001CF06E /* SecretAgentKit */ = {
- isa = XCSwiftPackageProductDependency;
- productName = SecretAgentKit;
- };
501421612781262300BBAA70 /* Brief */ = {
isa = XCSwiftPackageProductDependency;
productName = Brief;
};
- 501577DE2E6BC647004A37D0 /* Brief */ = {
+ 50692D2C2E6FDC000043C7BB /* XPCWrappers */ = {
+ isa = XCSwiftPackageProductDependency;
+ productName = XPCWrappers;
+ };
+ 50692D302E6FDC390043C7BB /* Brief */ = {
isa = XCSwiftPackageProductDependency;
productName = Brief;
};
+ 50692E6B2E6FFA510043C7BB /* SecretAgentKit */ = {
+ isa = XCSwiftPackageProductDependency;
+ productName = SecretAgentKit;
+ };
/* End XCSwiftPackageProductDependency section */
};
rootObject = 50617D7723FCE48D0099B055 /* Project object */;
diff --git a/Sources/Secretive/LaunchConstraints.coderequirement b/Sources/Secretive/LaunchConstraints.coderequirement
deleted file mode 100644
index c0e0dd6..0000000
--- a/Sources/Secretive/LaunchConstraints.coderequirement
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
- team-identifier
- Z72PRUAWF6
-
-
diff --git a/Sources/ReleasesDownloader/Info.plist b/Sources/SecretiveUpdater/Info.plist
similarity index 100%
rename from Sources/ReleasesDownloader/Info.plist
rename to Sources/SecretiveUpdater/Info.plist
diff --git a/Sources/ReleasesDownloader/InternetAccessPolicy.plist b/Sources/SecretiveUpdater/InternetAccessPolicy.plist
similarity index 100%
rename from Sources/ReleasesDownloader/InternetAccessPolicy.plist
rename to Sources/SecretiveUpdater/InternetAccessPolicy.plist
diff --git a/Sources/SecretiveUpdater/SecretiveUpdater.swift b/Sources/SecretiveUpdater/SecretiveUpdater.swift
new file mode 100644
index 0000000..998fd31
--- /dev/null
+++ b/Sources/SecretiveUpdater/SecretiveUpdater.swift
@@ -0,0 +1,17 @@
+import Foundation
+import OSLog
+import XPCWrappers
+import Brief
+
+final class SecretiveUpdater: NSObject, XPCProtocol {
+
+ enum Constants {
+ static let updateURL = URL(string: "https://api.github.com/repos/maxgoedjen/secretive/releases")!
+ }
+
+ func process(_: Data) async throws -> [Release] {
+ let (data, _) = try await URLSession.shared.data(from: Constants.updateURL)
+ return try JSONDecoder().decode([Release].self, from: data)
+ }
+
+}
diff --git a/Sources/SecretiveUpdater/main.swift b/Sources/SecretiveUpdater/main.swift
new file mode 100644
index 0000000..f3676f5
--- /dev/null
+++ b/Sources/SecretiveUpdater/main.swift
@@ -0,0 +1,7 @@
+import Foundation
+import XPCWrappers
+
+let delegate = XPCServiceDelegate(exportedObject: SecretiveUpdater())
+let listener = NSXPCListener.service()
+listener.delegate = delegate
+listener.resume()