├── kandji-demo
├── Assets.xcassets
│ ├── Contents.json
│ ├── AccentColor.colorset
│ │ └── Contents.json
│ └── AppIcon.appiconset
│ │ └── Contents.json
├── Preview Content
│ └── Preview Assets.xcassets
│ │ └── Contents.json
├── kandji_demoApp.swift
├── kandji_demo.entitlements
└── ContentView.swift
├── README.md
├── filexpc
├── XpcProtocol.swift
├── Info.plist
├── filexpc.entitlements
├── XpcProtocolClass.swift
└── main.swift
├── kandji-demo.xcodeproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
├── xcuserdata
│ └── twodayslate.xcuserdatad
│ │ └── xcschemes
│ │ └── xcschememanagement.plist
└── project.pbxproj
├── kandji-demoUITests
├── kandji_demoUITestsLaunchTests.swift
└── kandji_demoUITests.swift
└── kandji-demoTests
└── kandji_demoTests.swift
/kandji-demo/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/kandji-demo/Preview Content/Preview Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # kandji-demo
2 |
3 | An advanced threat detection application that uses intelligent AI algorithms to expose dangerous files on your system.
4 |
--------------------------------------------------------------------------------
/filexpc/XpcProtocol.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | @objc(XpcProtocol) protocol XpcProtocol {
4 | func uppercase(_ string: String, withReply: ((String)->Void))
5 | }
6 |
--------------------------------------------------------------------------------
/kandji-demo.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/kandji-demo/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/kandji-demo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/filexpc/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | XPCService
6 |
7 | ServiceType
8 | Application
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/kandji-demo/kandji_demoApp.swift:
--------------------------------------------------------------------------------
1 | //
2 | // kandji_demoApp.swift
3 | // kandji-demo
4 | //
5 | // Created by Zachary Gorak on 9/23/21.
6 | //
7 |
8 | import SwiftUI
9 |
10 | @main
11 | struct kandji_demoApp: App {
12 | var body: some Scene {
13 | WindowGroup {
14 | ContentView()
15 | }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/kandji-demo.xcodeproj/xcuserdata/twodayslate.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | kandji-demo.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 | xpc.xcscheme_^#shared#^_
13 |
14 | orderHint
15 | 1
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/filexpc/filexpc.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.security.app-sandbox
6 |
7 | com.apple.security.assets.movies.read-write
8 |
9 | com.apple.security.assets.music.read-write
10 |
11 | com.apple.security.assets.pictures.read-write
12 |
13 | com.apple.security.files.downloads.read-write
14 |
15 | com.apple.security.files.user-selected.read-write
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/kandji-demo/kandji_demo.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.security.app-sandbox
6 |
7 | com.apple.security.assets.movies.read-only
8 |
9 | com.apple.security.assets.music.read-only
10 |
11 | com.apple.security.assets.pictures.read-only
12 |
13 | com.apple.security.files.downloads.read-only
14 |
15 | com.apple.security.files.user-selected.read-only
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/filexpc/XpcProtocolClass.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | class XpcProtocolClass: XpcProtocol {
4 | // https://stackoverflow.com/a/50035059/193772
5 | func uppercase(_ string: String, withReply: ((String) -> Void)) {
6 |
7 | let task = Process()
8 | let pipe = Pipe()
9 |
10 | task.standardOutput = pipe
11 | task.standardError = pipe
12 | task.arguments = ["-c", "file '\(string)'"]
13 | task.launchPath = "/bin/zsh"
14 | task.launch()
15 |
16 | let data = pipe.fileHandleForReading.readDataToEndOfFile()
17 | let output = String(data: data, encoding: .utf8)!
18 |
19 | withReply(output)
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/filexpc/main.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ImageDownloaderMain.swift
3 | // ImageDownloader
4 | //
5 | // Created by Daniel Eggert on 22/06/2014.
6 | // Copyright (c) 2014 objc.io. All rights reserved.
7 | //
8 | import Foundation
9 |
10 |
11 |
12 | class ServiceDelegate : NSObject, NSXPCListenerDelegate {
13 | func listener(_ listener: NSXPCListener, shouldAcceptNewConnection newConnection: NSXPCConnection) -> Bool {
14 | newConnection.exportedInterface = NSXPCInterface(with: XpcProtocol.self)
15 | let exportedObject = XpcProtocolClass()
16 | newConnection.exportedObject = exportedObject
17 | newConnection.resume()
18 | return true
19 | }
20 | }
21 |
22 |
23 | // Create the listener and resume it:
24 | //
25 | let delegate = ServiceDelegate()
26 | let listener = NSXPCListener.service()
27 | listener.delegate = delegate;
28 | listener.resume()
29 |
--------------------------------------------------------------------------------
/kandji-demoUITests/kandji_demoUITestsLaunchTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // kandji_demoUITestsLaunchTests.swift
3 | // kandji-demoUITests
4 | //
5 | // Created by Zachary Gorak on 9/23/21.
6 | //
7 |
8 | import XCTest
9 |
10 | class kandji_demoUITestsLaunchTests: XCTestCase {
11 |
12 | override class var runsForEachTargetApplicationUIConfiguration: Bool {
13 | true
14 | }
15 |
16 | override func setUpWithError() throws {
17 | continueAfterFailure = false
18 | }
19 |
20 | func testLaunch() throws {
21 | let app = XCUIApplication()
22 | app.launch()
23 |
24 | // Insert steps here to perform after app launch but before taking a screenshot,
25 | // such as logging into a test account or navigating somewhere in the app
26 |
27 | let attachment = XCTAttachment(screenshot: app.screenshot())
28 | attachment.name = "Launch Screen"
29 | attachment.lifetime = .keepAlways
30 | add(attachment)
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/kandji-demoTests/kandji_demoTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // kandji_demoTests.swift
3 | // kandji-demoTests
4 | //
5 | // Created by Zachary Gorak on 9/23/21.
6 | //
7 |
8 | import XCTest
9 | @testable import kandji_demo
10 |
11 | class kandji_demoTests: XCTestCase {
12 |
13 | override func setUpWithError() throws {
14 | // Put setup code here. This method is called before the invocation of each test method in the class.
15 | }
16 |
17 | override func tearDownWithError() throws {
18 | // Put teardown code here. This method is called after the invocation of each test method in the class.
19 | }
20 |
21 | func testExample() throws {
22 | // This is an example of a functional test case.
23 | // Use XCTAssert and related functions to verify your tests produce the correct results.
24 | }
25 |
26 | func testPerformanceExample() throws {
27 | // This is an example of a performance test case.
28 | self.measure {
29 | // Put the code you want to measure the time of here.
30 | }
31 | }
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/kandji-demo/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "mac",
5 | "scale" : "1x",
6 | "size" : "16x16"
7 | },
8 | {
9 | "idiom" : "mac",
10 | "scale" : "2x",
11 | "size" : "16x16"
12 | },
13 | {
14 | "idiom" : "mac",
15 | "scale" : "1x",
16 | "size" : "32x32"
17 | },
18 | {
19 | "idiom" : "mac",
20 | "scale" : "2x",
21 | "size" : "32x32"
22 | },
23 | {
24 | "idiom" : "mac",
25 | "scale" : "1x",
26 | "size" : "128x128"
27 | },
28 | {
29 | "idiom" : "mac",
30 | "scale" : "2x",
31 | "size" : "128x128"
32 | },
33 | {
34 | "idiom" : "mac",
35 | "scale" : "1x",
36 | "size" : "256x256"
37 | },
38 | {
39 | "idiom" : "mac",
40 | "scale" : "2x",
41 | "size" : "256x256"
42 | },
43 | {
44 | "idiom" : "mac",
45 | "scale" : "1x",
46 | "size" : "512x512"
47 | },
48 | {
49 | "idiom" : "mac",
50 | "scale" : "2x",
51 | "size" : "512x512"
52 | }
53 | ],
54 | "info" : {
55 | "author" : "xcode",
56 | "version" : 1
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/kandji-demoUITests/kandji_demoUITests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // kandji_demoUITests.swift
3 | // kandji-demoUITests
4 | //
5 | // Created by Zachary Gorak on 9/23/21.
6 | //
7 |
8 | import XCTest
9 |
10 | class kandji_demoUITests: XCTestCase {
11 |
12 | override func setUpWithError() throws {
13 | // Put setup code here. This method is called before the invocation of each test method in the class.
14 |
15 | // In UI tests it is usually best to stop immediately when a failure occurs.
16 | continueAfterFailure = false
17 |
18 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
19 | }
20 |
21 | override func tearDownWithError() throws {
22 | // Put teardown code here. This method is called after the invocation of each test method in the class.
23 | }
24 |
25 | func testExample() throws {
26 | // UI tests must launch the application that they test.
27 | let app = XCUIApplication()
28 | app.launch()
29 |
30 | // Use recording to get started writing UI tests.
31 | // Use XCTAssert and related functions to verify your tests produce the correct results.
32 | }
33 |
34 | func testLaunchPerformance() throws {
35 | if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 7.0, *) {
36 | // This measures how long it takes to launch your application.
37 | measure(metrics: [XCTApplicationLaunchMetric()]) {
38 | XCUIApplication().launch()
39 | }
40 | }
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/kandji-demo/ContentView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ContentView.swift
3 | // kandji-demo
4 | //
5 | // Created by Zachary Gorak on 9/23/21.
6 | //
7 |
8 | import SwiftUI
9 | import ApplicationServices
10 |
11 | struct SidebarView: View {
12 | @Binding var folder: String
13 | @Binding var files: [FileItem]
14 |
15 | var body: some View {
16 | List {
17 | HStack(alignment: .center) {
18 | Text("Folder").font(.headline).foregroundColor(.secondary)
19 | Spacer()
20 | Button(action: {
21 | self.reload()
22 | }, label: {
23 | Image(systemName: "arrow.clockwise")
24 | })
25 | }
26 | DisclosureGroup(content: {
27 | HStack {
28 | Text("Files")
29 | Spacer()
30 | Text("\(self.files.count)")
31 | }
32 | HStack {
33 | Text("Safe")
34 | Spacer()
35 | Text("\(self.files.filter({$0.isSafe}).count)")
36 | }
37 |
38 | }, label: {
39 | TextField(FileManager.default.homeDirectoryForCurrentUser.absoluteString, text: $folder)
40 | })
41 |
42 | }.listStyle(SidebarListStyle())
43 | }
44 |
45 |
46 | private func reload() {
47 |
48 | }
49 | }
50 |
51 | struct FileItem: CodablEquatable, Identifiable {
52 | var id: String {
53 | return self.path + self.cmd
54 | }
55 |
56 | var path: String
57 | var cmd: String
58 |
59 | var isSafe: Bool {
60 | if cmd.contains("image") {
61 | return true
62 | }
63 |
64 | return false
65 | }
66 | }
67 |
68 | class FileObserver: ObservableObject {
69 | var path: String? = nil
70 | var xpcProtocol: XpcProtocol? = nil
71 |
72 | @Published var files = [FileItem]()
73 |
74 | @Published var error: Error? = nil
75 |
76 | static var connection: NSXPCConnection = {
77 | let connection = NSXPCConnection(serviceName: "com.twodayslate.kandji-demo.filexpc")
78 | connection.remoteObjectInterface = NSXPCInterface(with: XpcProtocol.self)
79 | connection.resume()
80 |
81 | return connection
82 | }()
83 |
84 | init() {
85 | self.xpcProtocol = (FileObserver.connection.synchronousRemoteObjectProxyWithErrorHandler({
86 | error in
87 | print(error)
88 | }) as? XpcProtocol)
89 | }
90 |
91 | func update(path: String) {
92 | self.path = path
93 |
94 | self.error = nil
95 | self.files.removeAll()
96 |
97 | guard let path = self.path else {
98 | return
99 | }
100 |
101 |
102 | do {
103 | let directory = try FileManager.default.contentsOfDirectory(atPath: path)
104 |
105 | for file in directory {
106 | let full_path = URL(fileURLWithPath: file, relativeTo: URL(string: "file://" + path)).path
107 | self.xpcProtocol?.uppercase(full_path) { ans in
108 | self.files.append(FileItem(path: full_path, cmd: ans))
109 | }
110 | }
111 | } catch {
112 | self.error = error
113 | }
114 |
115 |
116 | }
117 | }
118 |
119 | struct ContentView: View {
120 | @AppStorage("path") var path: String = FileManager.default.urls(for: .downloadsDirectory, in: .userDomainMask)[0].path
121 |
122 | @StateObject var fileObserver = FileObserver()
123 |
124 | var body: some View {
125 | NavigationView {
126 | SidebarView(folder: $path, files: self.$fileObserver.files)
127 | if let err = self.fileObserver.error {
128 | Text("\(err.localizedDescription)")
129 | } else {
130 | List {
131 | ForEach(self.fileObserver.files) { file in
132 | HStack {
133 | if file.isSafe {
134 | Text("\(file.path)").foregroundColor(.green)
135 | } else {
136 | Text("\(file.cmd)").foregroundColor(.red)
137 | }
138 | }
139 | }
140 | }
141 | }
142 | }.toolbar {
143 | ToolbarItem(placement: .navigation) {
144 | Button(action: toggleSidebar, label: { // 1
145 | Image(systemName: "sidebar.leading")
146 | })
147 | }
148 | }
149 | .onAppear {
150 | self.fileObserver.update(path: self.path)
151 | }
152 | .onChange(of: self.path) { val in
153 | self.fileObserver.update(path: val)
154 | }
155 | }
156 |
157 | /// https://sarunw.com/posts/how-to-toggle-sidebar-in-macos/
158 | private func toggleSidebar() {
159 | #if os(iOS)
160 | #else
161 | NSApp.keyWindow?.firstResponder?.tryToPerform(#selector(NSSplitViewController.toggleSidebar(_:)), with: nil)
162 | #endif
163 | }
164 | }
165 |
166 | struct ContentView_Previews: PreviewProvider {
167 | static var previews: some View {
168 | ContentView()
169 | }
170 | }
171 |
--------------------------------------------------------------------------------
/kandji-demo.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 55;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | F651873426FD4CAB009CDF69 /* kandji_demoApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = F651873326FD4CAB009CDF69 /* kandji_demoApp.swift */; };
11 | F651873626FD4CAB009CDF69 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F651873526FD4CAB009CDF69 /* ContentView.swift */; };
12 | F651873826FD4CAE009CDF69 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F651873726FD4CAE009CDF69 /* Assets.xcassets */; };
13 | F651873B26FD4CAE009CDF69 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F651873A26FD4CAE009CDF69 /* Preview Assets.xcassets */; };
14 | F651874626FD4CAE009CDF69 /* kandji_demoTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F651874526FD4CAE009CDF69 /* kandji_demoTests.swift */; };
15 | F651875026FD4CAE009CDF69 /* kandji_demoUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F651874F26FD4CAE009CDF69 /* kandji_demoUITests.swift */; };
16 | F651875226FD4CAE009CDF69 /* kandji_demoUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F651875126FD4CAE009CDF69 /* kandji_demoUITestsLaunchTests.swift */; };
17 | F651876D26FD4CC2009CDF69 /* filexpc.xpc in Embed XPC Services */ = {isa = PBXBuildFile; fileRef = F651876226FD4CC2009CDF69 /* filexpc.xpc */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
18 | F6518784270287C8009CDF69 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6518782270287C8009CDF69 /* main.swift */; };
19 | F65187862702885D009CDF69 /* XpcProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = F651877E27028616009CDF69 /* XpcProtocol.swift */; };
20 | F65187892702890A009CDF69 /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = F651876A26FD4CC2009CDF69 /* Info.plist */; };
21 | F651878A2702895F009CDF69 /* XpcProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = F651877E27028616009CDF69 /* XpcProtocol.swift */; };
22 | F651878C2702917F009CDF69 /* XpcProtocolClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = F651878B2702917F009CDF69 /* XpcProtocolClass.swift */; };
23 | F651878D2702917F009CDF69 /* XpcProtocolClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = F651878B2702917F009CDF69 /* XpcProtocolClass.swift */; };
24 | /* End PBXBuildFile section */
25 |
26 | /* Begin PBXContainerItemProxy section */
27 | F651874226FD4CAE009CDF69 /* PBXContainerItemProxy */ = {
28 | isa = PBXContainerItemProxy;
29 | containerPortal = F651872826FD4CAB009CDF69 /* Project object */;
30 | proxyType = 1;
31 | remoteGlobalIDString = F651872F26FD4CAB009CDF69;
32 | remoteInfo = "kandji-demo";
33 | };
34 | F651874C26FD4CAE009CDF69 /* PBXContainerItemProxy */ = {
35 | isa = PBXContainerItemProxy;
36 | containerPortal = F651872826FD4CAB009CDF69 /* Project object */;
37 | proxyType = 1;
38 | remoteGlobalIDString = F651872F26FD4CAB009CDF69;
39 | remoteInfo = "kandji-demo";
40 | };
41 | F651876B26FD4CC2009CDF69 /* PBXContainerItemProxy */ = {
42 | isa = PBXContainerItemProxy;
43 | containerPortal = F651872826FD4CAB009CDF69 /* Project object */;
44 | proxyType = 1;
45 | remoteGlobalIDString = F651876126FD4CC2009CDF69;
46 | remoteInfo = xpc;
47 | };
48 | /* End PBXContainerItemProxy section */
49 |
50 | /* Begin PBXCopyFilesBuildPhase section */
51 | F651877126FD4CC2009CDF69 /* Embed XPC Services */ = {
52 | isa = PBXCopyFilesBuildPhase;
53 | buildActionMask = 2147483647;
54 | dstPath = "$(CONTENTS_FOLDER_PATH)/XPCServices";
55 | dstSubfolderSpec = 16;
56 | files = (
57 | F651876D26FD4CC2009CDF69 /* filexpc.xpc in Embed XPC Services */,
58 | );
59 | name = "Embed XPC Services";
60 | runOnlyForDeploymentPostprocessing = 0;
61 | };
62 | /* End PBXCopyFilesBuildPhase section */
63 |
64 | /* Begin PBXFileReference section */
65 | F651873026FD4CAB009CDF69 /* kandji-demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "kandji-demo.app"; sourceTree = BUILT_PRODUCTS_DIR; };
66 | F651873326FD4CAB009CDF69 /* kandji_demoApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = kandji_demoApp.swift; sourceTree = ""; };
67 | F651873526FD4CAB009CDF69 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; };
68 | F651873726FD4CAE009CDF69 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
69 | F651873A26FD4CAE009CDF69 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; };
70 | F651873C26FD4CAE009CDF69 /* kandji_demo.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = kandji_demo.entitlements; sourceTree = ""; };
71 | F651874126FD4CAE009CDF69 /* kandji-demoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "kandji-demoTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
72 | F651874526FD4CAE009CDF69 /* kandji_demoTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = kandji_demoTests.swift; sourceTree = ""; };
73 | F651874B26FD4CAE009CDF69 /* kandji-demoUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "kandji-demoUITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
74 | F651874F26FD4CAE009CDF69 /* kandji_demoUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = kandji_demoUITests.swift; sourceTree = ""; };
75 | F651875126FD4CAE009CDF69 /* kandji_demoUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = kandji_demoUITestsLaunchTests.swift; sourceTree = ""; };
76 | F651876226FD4CC2009CDF69 /* filexpc.xpc */ = {isa = PBXFileReference; explicitFileType = "wrapper.xpc-service"; includeInIndex = 0; path = filexpc.xpc; sourceTree = BUILT_PRODUCTS_DIR; };
77 | F651876A26FD4CC2009CDF69 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
78 | F651877E27028616009CDF69 /* XpcProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XpcProtocol.swift; sourceTree = ""; };
79 | F6518782270287C8009CDF69 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; };
80 | F651878B2702917F009CDF69 /* XpcProtocolClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XpcProtocolClass.swift; sourceTree = ""; };
81 | F651878E270292A5009CDF69 /* filexpc.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = filexpc.entitlements; sourceTree = ""; };
82 | /* End PBXFileReference section */
83 |
84 | /* Begin PBXFrameworksBuildPhase section */
85 | F651872D26FD4CAB009CDF69 /* Frameworks */ = {
86 | isa = PBXFrameworksBuildPhase;
87 | buildActionMask = 2147483647;
88 | files = (
89 | );
90 | runOnlyForDeploymentPostprocessing = 0;
91 | };
92 | F651873E26FD4CAE009CDF69 /* Frameworks */ = {
93 | isa = PBXFrameworksBuildPhase;
94 | buildActionMask = 2147483647;
95 | files = (
96 | );
97 | runOnlyForDeploymentPostprocessing = 0;
98 | };
99 | F651874826FD4CAE009CDF69 /* Frameworks */ = {
100 | isa = PBXFrameworksBuildPhase;
101 | buildActionMask = 2147483647;
102 | files = (
103 | );
104 | runOnlyForDeploymentPostprocessing = 0;
105 | };
106 | F651875F26FD4CC2009CDF69 /* Frameworks */ = {
107 | isa = PBXFrameworksBuildPhase;
108 | buildActionMask = 2147483647;
109 | files = (
110 | );
111 | runOnlyForDeploymentPostprocessing = 0;
112 | };
113 | /* End PBXFrameworksBuildPhase section */
114 |
115 | /* Begin PBXGroup section */
116 | F651872726FD4CAB009CDF69 = {
117 | isa = PBXGroup;
118 | children = (
119 | F651873226FD4CAB009CDF69 /* kandji-demo */,
120 | F651874426FD4CAE009CDF69 /* kandji-demoTests */,
121 | F651874E26FD4CAE009CDF69 /* kandji-demoUITests */,
122 | F651876326FD4CC2009CDF69 /* filexpc */,
123 | F651873126FD4CAB009CDF69 /* Products */,
124 | );
125 | sourceTree = "";
126 | };
127 | F651873126FD4CAB009CDF69 /* Products */ = {
128 | isa = PBXGroup;
129 | children = (
130 | F651873026FD4CAB009CDF69 /* kandji-demo.app */,
131 | F651874126FD4CAE009CDF69 /* kandji-demoTests.xctest */,
132 | F651874B26FD4CAE009CDF69 /* kandji-demoUITests.xctest */,
133 | F651876226FD4CC2009CDF69 /* filexpc.xpc */,
134 | );
135 | name = Products;
136 | sourceTree = "";
137 | };
138 | F651873226FD4CAB009CDF69 /* kandji-demo */ = {
139 | isa = PBXGroup;
140 | children = (
141 | F651873326FD4CAB009CDF69 /* kandji_demoApp.swift */,
142 | F651873526FD4CAB009CDF69 /* ContentView.swift */,
143 | F651873726FD4CAE009CDF69 /* Assets.xcassets */,
144 | F651873C26FD4CAE009CDF69 /* kandji_demo.entitlements */,
145 | F651873926FD4CAE009CDF69 /* Preview Content */,
146 | );
147 | path = "kandji-demo";
148 | sourceTree = "";
149 | };
150 | F651873926FD4CAE009CDF69 /* Preview Content */ = {
151 | isa = PBXGroup;
152 | children = (
153 | F651873A26FD4CAE009CDF69 /* Preview Assets.xcassets */,
154 | );
155 | path = "Preview Content";
156 | sourceTree = "";
157 | };
158 | F651874426FD4CAE009CDF69 /* kandji-demoTests */ = {
159 | isa = PBXGroup;
160 | children = (
161 | F651874526FD4CAE009CDF69 /* kandji_demoTests.swift */,
162 | );
163 | path = "kandji-demoTests";
164 | sourceTree = "";
165 | };
166 | F651874E26FD4CAE009CDF69 /* kandji-demoUITests */ = {
167 | isa = PBXGroup;
168 | children = (
169 | F651874F26FD4CAE009CDF69 /* kandji_demoUITests.swift */,
170 | F651875126FD4CAE009CDF69 /* kandji_demoUITestsLaunchTests.swift */,
171 | );
172 | path = "kandji-demoUITests";
173 | sourceTree = "";
174 | };
175 | F651876326FD4CC2009CDF69 /* filexpc */ = {
176 | isa = PBXGroup;
177 | children = (
178 | F651878E270292A5009CDF69 /* filexpc.entitlements */,
179 | F651877E27028616009CDF69 /* XpcProtocol.swift */,
180 | F6518782270287C8009CDF69 /* main.swift */,
181 | F651878B2702917F009CDF69 /* XpcProtocolClass.swift */,
182 | F651876A26FD4CC2009CDF69 /* Info.plist */,
183 | );
184 | path = filexpc;
185 | sourceTree = "";
186 | };
187 | /* End PBXGroup section */
188 |
189 | /* Begin PBXNativeTarget section */
190 | F651872F26FD4CAB009CDF69 /* kandji-demo */ = {
191 | isa = PBXNativeTarget;
192 | buildConfigurationList = F651875526FD4CAE009CDF69 /* Build configuration list for PBXNativeTarget "kandji-demo" */;
193 | buildPhases = (
194 | F651872C26FD4CAB009CDF69 /* Sources */,
195 | F651872D26FD4CAB009CDF69 /* Frameworks */,
196 | F651872E26FD4CAB009CDF69 /* Resources */,
197 | F651877126FD4CC2009CDF69 /* Embed XPC Services */,
198 | );
199 | buildRules = (
200 | );
201 | dependencies = (
202 | F651876C26FD4CC2009CDF69 /* PBXTargetDependency */,
203 | );
204 | name = "kandji-demo";
205 | productName = "kandji-demo";
206 | productReference = F651873026FD4CAB009CDF69 /* kandji-demo.app */;
207 | productType = "com.apple.product-type.application";
208 | };
209 | F651874026FD4CAE009CDF69 /* kandji-demoTests */ = {
210 | isa = PBXNativeTarget;
211 | buildConfigurationList = F651875826FD4CAE009CDF69 /* Build configuration list for PBXNativeTarget "kandji-demoTests" */;
212 | buildPhases = (
213 | F651873D26FD4CAE009CDF69 /* Sources */,
214 | F651873E26FD4CAE009CDF69 /* Frameworks */,
215 | F651873F26FD4CAE009CDF69 /* Resources */,
216 | );
217 | buildRules = (
218 | );
219 | dependencies = (
220 | F651874326FD4CAE009CDF69 /* PBXTargetDependency */,
221 | );
222 | name = "kandji-demoTests";
223 | productName = "kandji-demoTests";
224 | productReference = F651874126FD4CAE009CDF69 /* kandji-demoTests.xctest */;
225 | productType = "com.apple.product-type.bundle.unit-test";
226 | };
227 | F651874A26FD4CAE009CDF69 /* kandji-demoUITests */ = {
228 | isa = PBXNativeTarget;
229 | buildConfigurationList = F651875B26FD4CAE009CDF69 /* Build configuration list for PBXNativeTarget "kandji-demoUITests" */;
230 | buildPhases = (
231 | F651874726FD4CAE009CDF69 /* Sources */,
232 | F651874826FD4CAE009CDF69 /* Frameworks */,
233 | F651874926FD4CAE009CDF69 /* Resources */,
234 | );
235 | buildRules = (
236 | );
237 | dependencies = (
238 | F651874D26FD4CAE009CDF69 /* PBXTargetDependency */,
239 | );
240 | name = "kandji-demoUITests";
241 | productName = "kandji-demoUITests";
242 | productReference = F651874B26FD4CAE009CDF69 /* kandji-demoUITests.xctest */;
243 | productType = "com.apple.product-type.bundle.ui-testing";
244 | };
245 | F651876126FD4CC2009CDF69 /* filexpc */ = {
246 | isa = PBXNativeTarget;
247 | buildConfigurationList = F651876E26FD4CC2009CDF69 /* Build configuration list for PBXNativeTarget "filexpc" */;
248 | buildPhases = (
249 | F651875E26FD4CC2009CDF69 /* Sources */,
250 | F651875F26FD4CC2009CDF69 /* Frameworks */,
251 | F651876026FD4CC2009CDF69 /* Resources */,
252 | );
253 | buildRules = (
254 | );
255 | dependencies = (
256 | );
257 | name = filexpc;
258 | productName = xpc;
259 | productReference = F651876226FD4CC2009CDF69 /* filexpc.xpc */;
260 | productType = "com.apple.product-type.xpc-service";
261 | };
262 | /* End PBXNativeTarget section */
263 |
264 | /* Begin PBXProject section */
265 | F651872826FD4CAB009CDF69 /* Project object */ = {
266 | isa = PBXProject;
267 | attributes = {
268 | BuildIndependentTargetsInParallel = 1;
269 | LastSwiftUpdateCheck = 1300;
270 | LastUpgradeCheck = 1300;
271 | TargetAttributes = {
272 | F651872F26FD4CAB009CDF69 = {
273 | CreatedOnToolsVersion = 13.0;
274 | };
275 | F651874026FD4CAE009CDF69 = {
276 | CreatedOnToolsVersion = 13.0;
277 | TestTargetID = F651872F26FD4CAB009CDF69;
278 | };
279 | F651874A26FD4CAE009CDF69 = {
280 | CreatedOnToolsVersion = 13.0;
281 | TestTargetID = F651872F26FD4CAB009CDF69;
282 | };
283 | F651876126FD4CC2009CDF69 = {
284 | CreatedOnToolsVersion = 13.0;
285 | LastSwiftMigration = 1300;
286 | };
287 | };
288 | };
289 | buildConfigurationList = F651872B26FD4CAB009CDF69 /* Build configuration list for PBXProject "kandji-demo" */;
290 | compatibilityVersion = "Xcode 13.0";
291 | developmentRegion = en;
292 | hasScannedForEncodings = 0;
293 | knownRegions = (
294 | en,
295 | Base,
296 | );
297 | mainGroup = F651872726FD4CAB009CDF69;
298 | productRefGroup = F651873126FD4CAB009CDF69 /* Products */;
299 | projectDirPath = "";
300 | projectRoot = "";
301 | targets = (
302 | F651872F26FD4CAB009CDF69 /* kandji-demo */,
303 | F651874026FD4CAE009CDF69 /* kandji-demoTests */,
304 | F651874A26FD4CAE009CDF69 /* kandji-demoUITests */,
305 | F651876126FD4CC2009CDF69 /* filexpc */,
306 | );
307 | };
308 | /* End PBXProject section */
309 |
310 | /* Begin PBXResourcesBuildPhase section */
311 | F651872E26FD4CAB009CDF69 /* Resources */ = {
312 | isa = PBXResourcesBuildPhase;
313 | buildActionMask = 2147483647;
314 | files = (
315 | F651873B26FD4CAE009CDF69 /* Preview Assets.xcassets in Resources */,
316 | F651873826FD4CAE009CDF69 /* Assets.xcassets in Resources */,
317 | );
318 | runOnlyForDeploymentPostprocessing = 0;
319 | };
320 | F651873F26FD4CAE009CDF69 /* Resources */ = {
321 | isa = PBXResourcesBuildPhase;
322 | buildActionMask = 2147483647;
323 | files = (
324 | );
325 | runOnlyForDeploymentPostprocessing = 0;
326 | };
327 | F651874926FD4CAE009CDF69 /* Resources */ = {
328 | isa = PBXResourcesBuildPhase;
329 | buildActionMask = 2147483647;
330 | files = (
331 | );
332 | runOnlyForDeploymentPostprocessing = 0;
333 | };
334 | F651876026FD4CC2009CDF69 /* Resources */ = {
335 | isa = PBXResourcesBuildPhase;
336 | buildActionMask = 2147483647;
337 | files = (
338 | F65187892702890A009CDF69 /* Info.plist in Resources */,
339 | );
340 | runOnlyForDeploymentPostprocessing = 0;
341 | };
342 | /* End PBXResourcesBuildPhase section */
343 |
344 | /* Begin PBXSourcesBuildPhase section */
345 | F651872C26FD4CAB009CDF69 /* Sources */ = {
346 | isa = PBXSourcesBuildPhase;
347 | buildActionMask = 2147483647;
348 | files = (
349 | F651878C2702917F009CDF69 /* XpcProtocolClass.swift in Sources */,
350 | F651878A2702895F009CDF69 /* XpcProtocol.swift in Sources */,
351 | F651873626FD4CAB009CDF69 /* ContentView.swift in Sources */,
352 | F651873426FD4CAB009CDF69 /* kandji_demoApp.swift in Sources */,
353 | );
354 | runOnlyForDeploymentPostprocessing = 0;
355 | };
356 | F651873D26FD4CAE009CDF69 /* Sources */ = {
357 | isa = PBXSourcesBuildPhase;
358 | buildActionMask = 2147483647;
359 | files = (
360 | F651874626FD4CAE009CDF69 /* kandji_demoTests.swift in Sources */,
361 | );
362 | runOnlyForDeploymentPostprocessing = 0;
363 | };
364 | F651874726FD4CAE009CDF69 /* Sources */ = {
365 | isa = PBXSourcesBuildPhase;
366 | buildActionMask = 2147483647;
367 | files = (
368 | F651875226FD4CAE009CDF69 /* kandji_demoUITestsLaunchTests.swift in Sources */,
369 | F651875026FD4CAE009CDF69 /* kandji_demoUITests.swift in Sources */,
370 | );
371 | runOnlyForDeploymentPostprocessing = 0;
372 | };
373 | F651875E26FD4CC2009CDF69 /* Sources */ = {
374 | isa = PBXSourcesBuildPhase;
375 | buildActionMask = 2147483647;
376 | files = (
377 | F6518784270287C8009CDF69 /* main.swift in Sources */,
378 | F651878D2702917F009CDF69 /* XpcProtocolClass.swift in Sources */,
379 | F65187862702885D009CDF69 /* XpcProtocol.swift in Sources */,
380 | );
381 | runOnlyForDeploymentPostprocessing = 0;
382 | };
383 | /* End PBXSourcesBuildPhase section */
384 |
385 | /* Begin PBXTargetDependency section */
386 | F651874326FD4CAE009CDF69 /* PBXTargetDependency */ = {
387 | isa = PBXTargetDependency;
388 | target = F651872F26FD4CAB009CDF69 /* kandji-demo */;
389 | targetProxy = F651874226FD4CAE009CDF69 /* PBXContainerItemProxy */;
390 | };
391 | F651874D26FD4CAE009CDF69 /* PBXTargetDependency */ = {
392 | isa = PBXTargetDependency;
393 | target = F651872F26FD4CAB009CDF69 /* kandji-demo */;
394 | targetProxy = F651874C26FD4CAE009CDF69 /* PBXContainerItemProxy */;
395 | };
396 | F651876C26FD4CC2009CDF69 /* PBXTargetDependency */ = {
397 | isa = PBXTargetDependency;
398 | target = F651876126FD4CC2009CDF69 /* filexpc */;
399 | targetProxy = F651876B26FD4CC2009CDF69 /* PBXContainerItemProxy */;
400 | };
401 | /* End PBXTargetDependency section */
402 |
403 | /* Begin XCBuildConfiguration section */
404 | F651875326FD4CAE009CDF69 /* Debug */ = {
405 | isa = XCBuildConfiguration;
406 | buildSettings = {
407 | ALWAYS_SEARCH_USER_PATHS = NO;
408 | CLANG_ANALYZER_NONNULL = YES;
409 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
410 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
411 | CLANG_CXX_LIBRARY = "libc++";
412 | CLANG_ENABLE_MODULES = YES;
413 | CLANG_ENABLE_OBJC_ARC = YES;
414 | CLANG_ENABLE_OBJC_WEAK = YES;
415 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
416 | CLANG_WARN_BOOL_CONVERSION = YES;
417 | CLANG_WARN_COMMA = YES;
418 | CLANG_WARN_CONSTANT_CONVERSION = YES;
419 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
420 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
421 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
422 | CLANG_WARN_EMPTY_BODY = YES;
423 | CLANG_WARN_ENUM_CONVERSION = YES;
424 | CLANG_WARN_INFINITE_RECURSION = YES;
425 | CLANG_WARN_INT_CONVERSION = YES;
426 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
427 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
428 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
429 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
430 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
431 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
432 | CLANG_WARN_STRICT_PROTOTYPES = YES;
433 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
434 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
435 | CLANG_WARN_UNREACHABLE_CODE = YES;
436 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
437 | COPY_PHASE_STRIP = NO;
438 | DEBUG_INFORMATION_FORMAT = dwarf;
439 | ENABLE_STRICT_OBJC_MSGSEND = YES;
440 | ENABLE_TESTABILITY = YES;
441 | GCC_C_LANGUAGE_STANDARD = gnu11;
442 | GCC_DYNAMIC_NO_PIC = NO;
443 | GCC_NO_COMMON_BLOCKS = YES;
444 | GCC_OPTIMIZATION_LEVEL = 0;
445 | GCC_PREPROCESSOR_DEFINITIONS = (
446 | "DEBUG=1",
447 | "$(inherited)",
448 | );
449 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
450 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
451 | GCC_WARN_UNDECLARED_SELECTOR = YES;
452 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
453 | GCC_WARN_UNUSED_FUNCTION = YES;
454 | GCC_WARN_UNUSED_VARIABLE = YES;
455 | MACOSX_DEPLOYMENT_TARGET = 11.3;
456 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
457 | MTL_FAST_MATH = YES;
458 | ONLY_ACTIVE_ARCH = YES;
459 | SDKROOT = macosx;
460 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
461 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
462 | };
463 | name = Debug;
464 | };
465 | F651875426FD4CAE009CDF69 /* Release */ = {
466 | isa = XCBuildConfiguration;
467 | buildSettings = {
468 | ALWAYS_SEARCH_USER_PATHS = NO;
469 | CLANG_ANALYZER_NONNULL = YES;
470 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
471 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
472 | CLANG_CXX_LIBRARY = "libc++";
473 | CLANG_ENABLE_MODULES = YES;
474 | CLANG_ENABLE_OBJC_ARC = YES;
475 | CLANG_ENABLE_OBJC_WEAK = YES;
476 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
477 | CLANG_WARN_BOOL_CONVERSION = YES;
478 | CLANG_WARN_COMMA = YES;
479 | CLANG_WARN_CONSTANT_CONVERSION = YES;
480 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
481 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
482 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
483 | CLANG_WARN_EMPTY_BODY = YES;
484 | CLANG_WARN_ENUM_CONVERSION = YES;
485 | CLANG_WARN_INFINITE_RECURSION = YES;
486 | CLANG_WARN_INT_CONVERSION = YES;
487 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
488 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
489 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
490 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
491 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
492 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
493 | CLANG_WARN_STRICT_PROTOTYPES = YES;
494 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
495 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
496 | CLANG_WARN_UNREACHABLE_CODE = YES;
497 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
498 | COPY_PHASE_STRIP = NO;
499 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
500 | ENABLE_NS_ASSERTIONS = NO;
501 | ENABLE_STRICT_OBJC_MSGSEND = YES;
502 | GCC_C_LANGUAGE_STANDARD = gnu11;
503 | GCC_NO_COMMON_BLOCKS = YES;
504 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
505 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
506 | GCC_WARN_UNDECLARED_SELECTOR = YES;
507 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
508 | GCC_WARN_UNUSED_FUNCTION = YES;
509 | GCC_WARN_UNUSED_VARIABLE = YES;
510 | MACOSX_DEPLOYMENT_TARGET = 11.3;
511 | MTL_ENABLE_DEBUG_INFO = NO;
512 | MTL_FAST_MATH = YES;
513 | SDKROOT = macosx;
514 | SWIFT_COMPILATION_MODE = wholemodule;
515 | SWIFT_OPTIMIZATION_LEVEL = "-O";
516 | };
517 | name = Release;
518 | };
519 | F651875626FD4CAE009CDF69 /* Debug */ = {
520 | isa = XCBuildConfiguration;
521 | buildSettings = {
522 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
523 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
524 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
525 | CODE_SIGN_ENTITLEMENTS = "kandji-demo/kandji_demo.entitlements";
526 | CODE_SIGN_IDENTITY = "Apple Development";
527 | CODE_SIGN_STYLE = Automatic;
528 | COMBINE_HIDPI_IMAGES = YES;
529 | CURRENT_PROJECT_VERSION = 1;
530 | DEVELOPMENT_ASSET_PATHS = "\"kandji-demo/Preview Content\"";
531 | DEVELOPMENT_TEAM = C6L3992RFB;
532 | ENABLE_HARDENED_RUNTIME = YES;
533 | ENABLE_PREVIEWS = YES;
534 | GENERATE_INFOPLIST_FILE = YES;
535 | INFOPLIST_KEY_NSHumanReadableCopyright = "";
536 | LD_RUNPATH_SEARCH_PATHS = (
537 | "$(inherited)",
538 | "@executable_path/../Frameworks",
539 | );
540 | MACOSX_DEPLOYMENT_TARGET = 11.0;
541 | MARKETING_VERSION = 1.0;
542 | PRODUCT_BUNDLE_IDENTIFIER = "com.twodayslate.kandji-demo";
543 | PRODUCT_NAME = "$(TARGET_NAME)";
544 | SWIFT_EMIT_LOC_STRINGS = YES;
545 | SWIFT_VERSION = 5.0;
546 | };
547 | name = Debug;
548 | };
549 | F651875726FD4CAE009CDF69 /* Release */ = {
550 | isa = XCBuildConfiguration;
551 | buildSettings = {
552 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
553 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
554 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
555 | CODE_SIGN_ENTITLEMENTS = "kandji-demo/kandji_demo.entitlements";
556 | CODE_SIGN_IDENTITY = "Apple Development";
557 | CODE_SIGN_STYLE = Automatic;
558 | COMBINE_HIDPI_IMAGES = YES;
559 | CURRENT_PROJECT_VERSION = 1;
560 | DEVELOPMENT_ASSET_PATHS = "\"kandji-demo/Preview Content\"";
561 | DEVELOPMENT_TEAM = "";
562 | ENABLE_HARDENED_RUNTIME = YES;
563 | ENABLE_PREVIEWS = YES;
564 | GENERATE_INFOPLIST_FILE = YES;
565 | INFOPLIST_KEY_NSHumanReadableCopyright = "";
566 | LD_RUNPATH_SEARCH_PATHS = (
567 | "$(inherited)",
568 | "@executable_path/../Frameworks",
569 | );
570 | MACOSX_DEPLOYMENT_TARGET = 11.0;
571 | MARKETING_VERSION = 1.0;
572 | PRODUCT_BUNDLE_IDENTIFIER = "com.twodayslate.kandji-demo";
573 | PRODUCT_NAME = "$(TARGET_NAME)";
574 | SWIFT_EMIT_LOC_STRINGS = YES;
575 | "SWIFT_OBJC_BRIDGING_HEADER[arch=*]" = "";
576 | SWIFT_VERSION = 5.0;
577 | };
578 | name = Release;
579 | };
580 | F651875926FD4CAE009CDF69 /* Debug */ = {
581 | isa = XCBuildConfiguration;
582 | buildSettings = {
583 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
584 | BUNDLE_LOADER = "$(TEST_HOST)";
585 | CODE_SIGN_STYLE = Automatic;
586 | COMBINE_HIDPI_IMAGES = YES;
587 | CURRENT_PROJECT_VERSION = 1;
588 | DEVELOPMENT_TEAM = C6L3992RFB;
589 | GENERATE_INFOPLIST_FILE = YES;
590 | LD_RUNPATH_SEARCH_PATHS = (
591 | "$(inherited)",
592 | "@executable_path/../Frameworks",
593 | "@loader_path/../Frameworks",
594 | );
595 | MACOSX_DEPLOYMENT_TARGET = 11.0;
596 | MARKETING_VERSION = 1.0;
597 | PRODUCT_BUNDLE_IDENTIFIER = "com.twodayslate.kandji-demoTests";
598 | PRODUCT_NAME = "$(TARGET_NAME)";
599 | SWIFT_EMIT_LOC_STRINGS = NO;
600 | SWIFT_VERSION = 5.0;
601 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/kandji-demo.app/Contents/MacOS/kandji-demo";
602 | };
603 | name = Debug;
604 | };
605 | F651875A26FD4CAE009CDF69 /* Release */ = {
606 | isa = XCBuildConfiguration;
607 | buildSettings = {
608 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
609 | BUNDLE_LOADER = "$(TEST_HOST)";
610 | CODE_SIGN_STYLE = Automatic;
611 | COMBINE_HIDPI_IMAGES = YES;
612 | CURRENT_PROJECT_VERSION = 1;
613 | DEVELOPMENT_TEAM = C6L3992RFB;
614 | GENERATE_INFOPLIST_FILE = YES;
615 | LD_RUNPATH_SEARCH_PATHS = (
616 | "$(inherited)",
617 | "@executable_path/../Frameworks",
618 | "@loader_path/../Frameworks",
619 | );
620 | MACOSX_DEPLOYMENT_TARGET = 11.0;
621 | MARKETING_VERSION = 1.0;
622 | PRODUCT_BUNDLE_IDENTIFIER = "com.twodayslate.kandji-demoTests";
623 | PRODUCT_NAME = "$(TARGET_NAME)";
624 | SWIFT_EMIT_LOC_STRINGS = NO;
625 | SWIFT_VERSION = 5.0;
626 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/kandji-demo.app/Contents/MacOS/kandji-demo";
627 | };
628 | name = Release;
629 | };
630 | F651875C26FD4CAE009CDF69 /* Debug */ = {
631 | isa = XCBuildConfiguration;
632 | buildSettings = {
633 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
634 | CODE_SIGN_STYLE = Automatic;
635 | COMBINE_HIDPI_IMAGES = YES;
636 | CURRENT_PROJECT_VERSION = 1;
637 | DEVELOPMENT_TEAM = C6L3992RFB;
638 | GENERATE_INFOPLIST_FILE = YES;
639 | LD_RUNPATH_SEARCH_PATHS = (
640 | "$(inherited)",
641 | "@executable_path/../Frameworks",
642 | "@loader_path/../Frameworks",
643 | );
644 | MARKETING_VERSION = 1.0;
645 | PRODUCT_BUNDLE_IDENTIFIER = "com.twodayslate.kandji-demoUITests";
646 | PRODUCT_NAME = "$(TARGET_NAME)";
647 | SWIFT_EMIT_LOC_STRINGS = NO;
648 | SWIFT_VERSION = 5.0;
649 | TEST_TARGET_NAME = "kandji-demo";
650 | };
651 | name = Debug;
652 | };
653 | F651875D26FD4CAE009CDF69 /* Release */ = {
654 | isa = XCBuildConfiguration;
655 | buildSettings = {
656 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
657 | CODE_SIGN_STYLE = Automatic;
658 | COMBINE_HIDPI_IMAGES = YES;
659 | CURRENT_PROJECT_VERSION = 1;
660 | DEVELOPMENT_TEAM = C6L3992RFB;
661 | GENERATE_INFOPLIST_FILE = YES;
662 | LD_RUNPATH_SEARCH_PATHS = (
663 | "$(inherited)",
664 | "@executable_path/../Frameworks",
665 | "@loader_path/../Frameworks",
666 | );
667 | MARKETING_VERSION = 1.0;
668 | PRODUCT_BUNDLE_IDENTIFIER = "com.twodayslate.kandji-demoUITests";
669 | PRODUCT_NAME = "$(TARGET_NAME)";
670 | SWIFT_EMIT_LOC_STRINGS = NO;
671 | SWIFT_VERSION = 5.0;
672 | TEST_TARGET_NAME = "kandji-demo";
673 | };
674 | name = Release;
675 | };
676 | F651876F26FD4CC2009CDF69 /* Debug */ = {
677 | isa = XCBuildConfiguration;
678 | buildSettings = {
679 | CLANG_ENABLE_MODULES = YES;
680 | CODE_SIGN_ENTITLEMENTS = filexpc/filexpc.entitlements;
681 | CODE_SIGN_STYLE = Automatic;
682 | COMBINE_HIDPI_IMAGES = YES;
683 | CURRENT_PROJECT_VERSION = 1;
684 | DEVELOPMENT_TEAM = C6L3992RFB;
685 | ENABLE_HARDENED_RUNTIME = YES;
686 | GENERATE_INFOPLIST_FILE = YES;
687 | INFOPLIST_FILE = filexpc/Info.plist;
688 | INFOPLIST_KEY_CFBundleDisplayName = filexpc;
689 | INFOPLIST_KEY_NSHumanReadableCopyright = "";
690 | LD_RUNPATH_SEARCH_PATHS = (
691 | "$(inherited)",
692 | "@executable_path/../Frameworks",
693 | "@loader_path/../Frameworks",
694 | );
695 | MARKETING_VERSION = 1.0;
696 | PRODUCT_BUNDLE_IDENTIFIER = "com.twodayslate.kandji-demo.filexpc";
697 | PRODUCT_NAME = "$(TARGET_NAME)";
698 | SKIP_INSTALL = YES;
699 | SWIFT_EMIT_LOC_STRINGS = YES;
700 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
701 | SWIFT_VERSION = 5.0;
702 | };
703 | name = Debug;
704 | };
705 | F651877026FD4CC2009CDF69 /* Release */ = {
706 | isa = XCBuildConfiguration;
707 | buildSettings = {
708 | CLANG_ENABLE_MODULES = YES;
709 | CODE_SIGN_ENTITLEMENTS = filexpc/filexpc.entitlements;
710 | CODE_SIGN_STYLE = Automatic;
711 | COMBINE_HIDPI_IMAGES = YES;
712 | CURRENT_PROJECT_VERSION = 1;
713 | DEVELOPMENT_TEAM = C6L3992RFB;
714 | ENABLE_HARDENED_RUNTIME = YES;
715 | GENERATE_INFOPLIST_FILE = YES;
716 | INFOPLIST_FILE = filexpc/Info.plist;
717 | INFOPLIST_KEY_CFBundleDisplayName = filexpc;
718 | INFOPLIST_KEY_NSHumanReadableCopyright = "";
719 | LD_RUNPATH_SEARCH_PATHS = (
720 | "$(inherited)",
721 | "@executable_path/../Frameworks",
722 | "@loader_path/../Frameworks",
723 | );
724 | MARKETING_VERSION = 1.0;
725 | PRODUCT_BUNDLE_IDENTIFIER = "com.twodayslate.kandji-demo.filexpc";
726 | PRODUCT_NAME = "$(TARGET_NAME)";
727 | SKIP_INSTALL = YES;
728 | SWIFT_EMIT_LOC_STRINGS = YES;
729 | SWIFT_VERSION = 5.0;
730 | };
731 | name = Release;
732 | };
733 | /* End XCBuildConfiguration section */
734 |
735 | /* Begin XCConfigurationList section */
736 | F651872B26FD4CAB009CDF69 /* Build configuration list for PBXProject "kandji-demo" */ = {
737 | isa = XCConfigurationList;
738 | buildConfigurations = (
739 | F651875326FD4CAE009CDF69 /* Debug */,
740 | F651875426FD4CAE009CDF69 /* Release */,
741 | );
742 | defaultConfigurationIsVisible = 0;
743 | defaultConfigurationName = Release;
744 | };
745 | F651875526FD4CAE009CDF69 /* Build configuration list for PBXNativeTarget "kandji-demo" */ = {
746 | isa = XCConfigurationList;
747 | buildConfigurations = (
748 | F651875626FD4CAE009CDF69 /* Debug */,
749 | F651875726FD4CAE009CDF69 /* Release */,
750 | );
751 | defaultConfigurationIsVisible = 0;
752 | defaultConfigurationName = Release;
753 | };
754 | F651875826FD4CAE009CDF69 /* Build configuration list for PBXNativeTarget "kandji-demoTests" */ = {
755 | isa = XCConfigurationList;
756 | buildConfigurations = (
757 | F651875926FD4CAE009CDF69 /* Debug */,
758 | F651875A26FD4CAE009CDF69 /* Release */,
759 | );
760 | defaultConfigurationIsVisible = 0;
761 | defaultConfigurationName = Release;
762 | };
763 | F651875B26FD4CAE009CDF69 /* Build configuration list for PBXNativeTarget "kandji-demoUITests" */ = {
764 | isa = XCConfigurationList;
765 | buildConfigurations = (
766 | F651875C26FD4CAE009CDF69 /* Debug */,
767 | F651875D26FD4CAE009CDF69 /* Release */,
768 | );
769 | defaultConfigurationIsVisible = 0;
770 | defaultConfigurationName = Release;
771 | };
772 | F651876E26FD4CC2009CDF69 /* Build configuration list for PBXNativeTarget "filexpc" */ = {
773 | isa = XCConfigurationList;
774 | buildConfigurations = (
775 | F651876F26FD4CC2009CDF69 /* Debug */,
776 | F651877026FD4CC2009CDF69 /* Release */,
777 | );
778 | defaultConfigurationIsVisible = 0;
779 | defaultConfigurationName = Release;
780 | };
781 | /* End XCConfigurationList section */
782 | };
783 | rootObject = F651872826FD4CAB009CDF69 /* Project object */;
784 | }
785 |
--------------------------------------------------------------------------------