mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2024-12-17 17:20:21 +01:00
file provider: making service work
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>XPCService</key>
|
||||
<dict>
|
||||
<key>ServiceType</key>
|
||||
<string>Application</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -0,0 +1,4 @@
|
||||
//
|
||||
// Use this file to import your target's public headers that you would like to expose to Swift.
|
||||
//
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
//
|
||||
// MyService.h
|
||||
// MyService
|
||||
//
|
||||
// Created by Evgeny on 01/06/2022.
|
||||
// Copyright © 2022 SimpleX Chat. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import "MyServiceProtocol.h"
|
||||
|
||||
// This object implements the protocol which we have defined. It provides the actual behavior for the service. It is 'exported' by the service to make it available to the process hosting the service over an NSXPCConnection.
|
||||
@interface MyService : NSObject <MyServiceProtocol>
|
||||
@end
|
||||
@@ -0,0 +1,19 @@
|
||||
//
|
||||
// MyService.m
|
||||
// MyService
|
||||
//
|
||||
// Created by Evgeny on 01/06/2022.
|
||||
// Copyright © 2022 SimpleX Chat. All rights reserved.
|
||||
//
|
||||
|
||||
#import "MyService.h"
|
||||
|
||||
@implementation MyService
|
||||
|
||||
// This implements the example protocol. Replace the body of this class with the implementation of this service's protocol.
|
||||
- (void)upperCaseString:(NSString *)aString withReply:(void (^)(NSString *))reply {
|
||||
NSString *response = [aString uppercaseString];
|
||||
reply(response);
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,16 @@
|
||||
//
|
||||
// MyService.swift
|
||||
// MyService
|
||||
//
|
||||
// Created by Evgeny on 01/06/2022.
|
||||
// Copyright © 2022 SimpleX Chat. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
class MyService: NSObject, MyServiceProtocol {
|
||||
func upperCaseString(_ string: String, withReply reply: @escaping (String) -> Void) {
|
||||
let response = string.uppercased()
|
||||
reply(response)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
//
|
||||
// MyServiceDelegate.swift
|
||||
// MyService
|
||||
//
|
||||
// Created by Evgeny on 01/06/2022.
|
||||
// Copyright © 2022 SimpleX Chat. All rights reserved.
|
||||
//
|
||||
|
||||
// MyServiceDelegate.swift
|
||||
import Foundation
|
||||
|
||||
class MyServiceDelegate: NSObject, NSXPCListenerDelegate {
|
||||
func listener(_ listener: NSXPCListener, shouldAcceptNewConnection newConnection: NSXPCConnection) -> Bool {
|
||||
let exportedObject = MyService()
|
||||
newConnection.exportedInterface = NSXPCInterface(with: MyServiceProtocol.self)
|
||||
newConnection.exportedObject = exportedObject
|
||||
newConnection.resume()
|
||||
return true
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
//
|
||||
// MyServiceProtocol.h
|
||||
// MyService
|
||||
//
|
||||
// Created by Evgeny on 01/06/2022.
|
||||
// Copyright © 2022 SimpleX Chat. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
// The protocol that this service will vend as its API. This header file will also need to be visible to the process hosting the service.
|
||||
@protocol MyServiceProtocol
|
||||
|
||||
// Replace the API of this protocol with an API appropriate to the service you are vending.
|
||||
- (void)upperCaseString:(NSString *)aString withReply:(void (^)(NSString *))reply;
|
||||
|
||||
@end
|
||||
|
||||
/*
|
||||
To use the service from an application or other process, use NSXPCConnection to establish a connection to the service by doing something like this:
|
||||
|
||||
_connectionToService = [[NSXPCConnection alloc] initWithServiceName:@"chat.simplex.MyService"];
|
||||
_connectionToService.remoteObjectInterface = [NSXPCInterface interfaceWithProtocol:@protocol(MyServiceProtocol)];
|
||||
[_connectionToService resume];
|
||||
|
||||
Once you have a connection to the service, you can use it like this:
|
||||
|
||||
[[_connectionToService remoteObjectProxy] upperCaseString:@"hello" withReply:^(NSString *aString) {
|
||||
// We have received a response. Update our text field, but do it on the main thread.
|
||||
NSLog(@"Result string was: %@", aString);
|
||||
}];
|
||||
|
||||
And, when you are finished with the service, clean up the connection like this:
|
||||
|
||||
[_connectionToService invalidate];
|
||||
*/
|
||||
@@ -0,0 +1,14 @@
|
||||
//
|
||||
// MyServiceProtocol.swift
|
||||
// MyService
|
||||
//
|
||||
// Created by Evgeny on 01/06/2022.
|
||||
// Copyright © 2022 SimpleX Chat. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
@objc public protocol MyServiceProtocol {
|
||||
func upperCaseString(_ string: String, withReply reply: @escaping (String) -> Void)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
//
|
||||
// main.m
|
||||
// MyService
|
||||
//
|
||||
// Created by Evgeny on 01/06/2022.
|
||||
// Copyright © 2022 SimpleX Chat. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import "MyService.h"
|
||||
|
||||
@interface ServiceDelegate : NSObject <NSXPCListenerDelegate>
|
||||
@end
|
||||
|
||||
@implementation ServiceDelegate
|
||||
|
||||
- (BOOL)listener:(NSXPCListener *)listener shouldAcceptNewConnection:(NSXPCConnection *)newConnection {
|
||||
// This method is where the NSXPCListener configures, accepts, and resumes a new incoming NSXPCConnection.
|
||||
|
||||
// Configure the connection.
|
||||
// First, set the interface that the exported object implements.
|
||||
newConnection.exportedInterface = [NSXPCInterface interfaceWithProtocol:@protocol(MyServiceProtocol)];
|
||||
|
||||
// Next, set the object that the connection exports. All messages sent on the connection to this service will be sent to the exported object to handle. The connection retains the exported object.
|
||||
MyService *exportedObject = [MyService new];
|
||||
newConnection.exportedObject = exportedObject;
|
||||
|
||||
// Resuming the connection allows the system to deliver more incoming messages.
|
||||
[newConnection resume];
|
||||
|
||||
// Returning YES from this method tells the system that you have accepted this connection. If you want to reject the connection for some reason, call -invalidate on the connection and return NO.
|
||||
return YES;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
int main(int argc, const char *argv[])
|
||||
{
|
||||
// Create the delegate for the service.
|
||||
ServiceDelegate *delegate = [ServiceDelegate new];
|
||||
|
||||
// Set up the one NSXPCListener for this service. It will handle all incoming connections.
|
||||
NSXPCListener *listener = [NSXPCListener serviceListener];
|
||||
listener.delegate = delegate;
|
||||
|
||||
// Resuming the serviceListener starts this service. This method does not return.
|
||||
[listener resume];
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
//
|
||||
// main.swift
|
||||
// MyService
|
||||
//
|
||||
// Created by Evgeny on 01/06/2022.
|
||||
// Copyright © 2022 SimpleX Chat. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
import Foundation
|
||||
|
||||
let delegate = MyServiceDelegate()
|
||||
let listener = NSXPCListener.service()
|
||||
listener.delegate = delegate
|
||||
listener.resume()
|
||||
@@ -0,0 +1,96 @@
|
||||
//
|
||||
// FPService.swift
|
||||
// SimpleX Service
|
||||
//
|
||||
// Created by Evgeny on 01/06/2022.
|
||||
// Copyright © 2022 SimpleX Chat. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import FileProvider
|
||||
import SimpleX_Service
|
||||
|
||||
let SIMPLEX_SERVICE_NAME = NSFileProviderServiceName("group.chat.simplex.app.service")
|
||||
//let SERVICE_PROXY_ITEM = "chat.simplex.service:/123"
|
||||
//let SERVICE_PROXY_ITEM_URL = URL(string: SERVICE_PROXY_ITEM)!
|
||||
//let SERVICE_PROXY_ITEM_ID = NSFileProviderItemIdentifier(SERVICE_PROXY_ITEM)
|
||||
|
||||
@objc public protocol SimpleXFPServiceProtocol {
|
||||
func upperCaseString(_ string: String, withReply reply: @escaping (String) -> Void)
|
||||
}
|
||||
|
||||
class EnumObserver: NSObject, NSFileProviderEnumerationObserver {
|
||||
func didEnumerate(_ updatedItems: [NSFileProviderItemProtocol]) {
|
||||
|
||||
}
|
||||
|
||||
func finishEnumerating(upTo nextPage: NSFileProviderPage?) {
|
||||
|
||||
}
|
||||
|
||||
func finishEnumeratingWithError(_ error: Error) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
func testFPService() {
|
||||
logger.debug("testFPService get services")
|
||||
let manager = NSFileProviderManager.default
|
||||
// TODO try access file
|
||||
logger.debug("testFPService NSFileProviderManager.documentStorageURL \(manager.documentStorageURL, privacy: .public)")
|
||||
// manager.getUserVisibleURL(for: SERVICE_PROXY_ITEM_ID) { url, error in
|
||||
// logger.debug("testFPService NSFileProviderManager.getUserVisibleURL \(url, privacy: .public)")
|
||||
// return
|
||||
FileManager.default.getFileProviderServicesForItem(at: URL(string: "\(manager.documentStorageURL)123")!) { (services, error) in
|
||||
|
||||
// Check to see if an error occurred.
|
||||
guard error == nil else {
|
||||
logger.debug("testFPService error getting service")
|
||||
print(error!)
|
||||
// Handle the error here...
|
||||
return
|
||||
}
|
||||
|
||||
if let desiredService = services?[SIMPLEX_SERVICE_NAME] {
|
||||
logger.debug("testFPService has desiredService")
|
||||
|
||||
// The named service is available for the item at the provided URL.
|
||||
// To use the service, get the connection object.
|
||||
desiredService.getFileProviderConnection(completionHandler: { (connectionOrNil, connectionError) in
|
||||
|
||||
guard connectionError == nil else {
|
||||
// Handle the error here...
|
||||
return
|
||||
}
|
||||
|
||||
guard let connection = connectionOrNil else {
|
||||
// No connection object found.
|
||||
return
|
||||
}
|
||||
|
||||
// Set the remote interface.
|
||||
connection.remoteObjectInterface = NSXPCInterface(with: SimpleXFPServiceProtocol.self)
|
||||
|
||||
// Start the connection.
|
||||
connection.resume()
|
||||
|
||||
// Get the proxy object.
|
||||
let rawProxy = connection.remoteObjectProxyWithErrorHandler({ (errorAccessingRemoteObject) in
|
||||
// Handle the error here...
|
||||
})
|
||||
|
||||
// Cast the proxy object to the interface's protocol.
|
||||
guard let proxy = rawProxy as? SimpleXFPServiceProtocol else {
|
||||
// If the interface is set up properly, this should never fail.
|
||||
fatalError("*** Unable to cast \(rawProxy) to a DesiredProtocol instance ***")
|
||||
}
|
||||
|
||||
logger.debug("testFPService calling service")
|
||||
proxy.upperCaseString("hello to service", withReply: { reply in
|
||||
logger.debug("testFPService reply from service \(reply)")
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
// }
|
||||
}
|
||||
@@ -27,6 +27,11 @@ struct SimpleXApp: App {
|
||||
UserDefaults.standard.register(defaults: appDefaults)
|
||||
BGManager.shared.register()
|
||||
NtfManager.shared.registerCategories()
|
||||
|
||||
// test service comms
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
|
||||
testFPService()
|
||||
}
|
||||
}
|
||||
|
||||
var body: some Scene {
|
||||
|
||||
@@ -13,10 +13,16 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator {
|
||||
var enumeratedItemIdentifier: NSFileProviderItemIdentifier
|
||||
|
||||
init(enumeratedItemIdentifier: NSFileProviderItemIdentifier) {
|
||||
logger.debug("FileProviderExtension FileProviderEnumerator.init")
|
||||
self.enumeratedItemIdentifier = enumeratedItemIdentifier
|
||||
super.init()
|
||||
}
|
||||
|
||||
func identifierForItemAtURL(_ url: URL, completionHandler: @escaping (NSFileProviderItemIdentifier) -> Void) {
|
||||
// logger.debug("FileProviderExtension.identifierForItemAtURL")
|
||||
completionHandler(SERVICE_PROXY_ITEM_ID)
|
||||
}
|
||||
|
||||
func invalidate() {
|
||||
// TODO: perform invalidation of server connection if necessary
|
||||
}
|
||||
|
||||
@@ -7,16 +7,28 @@
|
||||
//
|
||||
|
||||
import FileProvider
|
||||
import OSLog
|
||||
|
||||
let logger = Logger()
|
||||
var serviceListener = NSXPCListener.service()
|
||||
var listenerDelegate = SimpleXFPServiceDelegate()
|
||||
|
||||
class FileProviderExtension: NSFileProviderExtension {
|
||||
|
||||
var fileManager = FileManager()
|
||||
|
||||
|
||||
override init() {
|
||||
logger.debug("FileProviderExtension.init")
|
||||
super.init()
|
||||
|
||||
let manager = NSFileProviderManager.default
|
||||
logger.debug("FileProviderExtension.init NSFileProviderManager \(manager.documentStorageURL, privacy: .public)")
|
||||
|
||||
serviceListener.delegate = listenerDelegate
|
||||
Task { serviceListener.resume() }
|
||||
}
|
||||
|
||||
override func item(for identifier: NSFileProviderItemIdentifier) throws -> NSFileProviderItem {
|
||||
logger.debug("FileProviderExtension.item")
|
||||
// resolve the given identifier to a record in the model
|
||||
|
||||
// TODO: implement the actual lookup
|
||||
@@ -24,6 +36,7 @@ class FileProviderExtension: NSFileProviderExtension {
|
||||
}
|
||||
|
||||
override func urlForItem(withPersistentIdentifier identifier: NSFileProviderItemIdentifier) -> URL? {
|
||||
logger.debug("FileProviderExtension.urlForItem")
|
||||
// resolve the given identifier to a file on disk
|
||||
guard let item = try? item(for: identifier) else {
|
||||
return nil
|
||||
@@ -32,11 +45,17 @@ class FileProviderExtension: NSFileProviderExtension {
|
||||
// in this implementation, all paths are structured as <base storage directory>/<item identifier>/<item file name>
|
||||
let manager = NSFileProviderManager.default
|
||||
let perItemDirectory = manager.documentStorageURL.appendingPathComponent(identifier.rawValue, isDirectory: true)
|
||||
|
||||
|
||||
logger.debug("FileProviderExtension.urlForItem NSFileProviderManager \(manager.documentStorageURL, privacy: .public)")
|
||||
|
||||
return perItemDirectory.appendingPathComponent(item.filename, isDirectory:false)
|
||||
}
|
||||
|
||||
override func persistentIdentifierForItem(at url: URL) -> NSFileProviderItemIdentifier? {
|
||||
logger.debug("FileProviderExtension.persistentIdentifierForItem")
|
||||
// if url == SERVICE_PROXY_ITEM_URL { return SERVICE_PROXY_ITEM_ID }
|
||||
return SERVICE_PROXY_ITEM_ID
|
||||
|
||||
// resolve the given URL to a persistent identifier using a database
|
||||
let pathComponents = url.pathComponents
|
||||
|
||||
@@ -48,6 +67,7 @@ class FileProviderExtension: NSFileProviderExtension {
|
||||
}
|
||||
|
||||
override func providePlaceholder(at url: URL, completionHandler: @escaping (Error?) -> Void) {
|
||||
logger.debug("FileProviderExtension.providePlaceholder")
|
||||
guard let identifier = persistentIdentifierForItem(at: url) else {
|
||||
completionHandler(NSFileProviderError(.noSuchItem))
|
||||
return
|
||||
@@ -64,6 +84,13 @@ class FileProviderExtension: NSFileProviderExtension {
|
||||
}
|
||||
|
||||
override func startProvidingItem(at url: URL, completionHandler: @escaping ((_ error: Error?) -> Void)) {
|
||||
logger.debug("FileProviderExtension.startProvidingItem")
|
||||
completionHandler(nil)
|
||||
// if url == SERVICE_PROXY_ITEM_URL {
|
||||
// completionHandler(nil)
|
||||
// return
|
||||
// }
|
||||
|
||||
// Should ensure that the actual file is in the position returned by URLForItemWithIdentifier:, then call the completion handler
|
||||
|
||||
/* TODO:
|
||||
@@ -95,6 +122,7 @@ class FileProviderExtension: NSFileProviderExtension {
|
||||
|
||||
|
||||
override func itemChanged(at url: URL) {
|
||||
logger.debug("FileProviderExtension.itemChanged")
|
||||
// Called at some point after the file has changed; the provider may then trigger an upload
|
||||
|
||||
/* TODO:
|
||||
@@ -106,6 +134,7 @@ class FileProviderExtension: NSFileProviderExtension {
|
||||
}
|
||||
|
||||
override func stopProvidingItem(at url: URL) {
|
||||
logger.debug("FileProviderExtension.stopProvidingItem")
|
||||
// Called after the last claim to the file has been released. At this point, it is safe for the file provider to remove the content file.
|
||||
// Care should be taken that the corresponding placeholder file stays behind after the content file has been deleted.
|
||||
|
||||
@@ -141,6 +170,8 @@ class FileProviderExtension: NSFileProviderExtension {
|
||||
// MARK: - Enumeration
|
||||
|
||||
override func enumerator(for containerItemIdentifier: NSFileProviderItemIdentifier) throws -> NSFileProviderEnumerator {
|
||||
logger.debug("FileProviderExtension.enumerator")
|
||||
|
||||
let maybeEnumerator: NSFileProviderEnumerator? = nil
|
||||
if (containerItemIdentifier == NSFileProviderItemIdentifier.rootContainer) {
|
||||
// TODO: instantiate an enumerator for the container root
|
||||
@@ -156,5 +187,4 @@ class FileProviderExtension: NSFileProviderExtension {
|
||||
}
|
||||
return enumerator
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<key>NSExtensionFileProviderDocumentGroup</key>
|
||||
<string>group.chat.simplex.app</string>
|
||||
<key>NSExtensionFileProviderSupportsEnumeration</key>
|
||||
<true/>
|
||||
<false/>
|
||||
<key>NSExtensionPointIdentifier</key>
|
||||
<string>com.apple.fileprovider-nonui</string>
|
||||
<key>NSExtensionPrincipalClass</key>
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
//
|
||||
// SimpleXFPService.swift
|
||||
// SimpleX Service
|
||||
//
|
||||
// Created by Evgeny on 01/06/2022.
|
||||
// Copyright © 2022 SimpleX Chat. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import FileProvider
|
||||
|
||||
let SIMPLEX_SERVICE_NAME = NSFileProviderServiceName("group.chat.simplex.app.service")
|
||||
//let SERVICE_PROXY_ITEM = "chat.simplex.service:/123"
|
||||
//let SERVICE_PROXY_ITEM_URL = URL(string: SERVICE_PROXY_ITEM)!
|
||||
let SERVICE_PROXY_ITEM_ID = NSFileProviderItemIdentifier("123")
|
||||
|
||||
class SimpleXFPService: SimpleXFPServiceProtocol {
|
||||
// override var name: NSFileProviderServiceName { SIMPLEX_SERVICE_NAME }
|
||||
//
|
||||
// override func getFileProviderConnection(completionHandler: @escaping (NSXPCConnection?, Error?) -> Void) {
|
||||
// logger.debug("FileProviderExtension SimpleXFPService.getFileProviderConnection")
|
||||
// completionHandler(NSXPCConnection(listenerEndpoint: serviceListener.endpoint), nil)
|
||||
// }
|
||||
|
||||
func upperCaseString(_ string: String, withReply reply: @escaping (String) -> Void) {
|
||||
logger.debug("FileProviderExtension SimpleXFPService.upperCaseString")
|
||||
let response = string.uppercased()
|
||||
reply(response)
|
||||
}
|
||||
}
|
||||
|
||||
@objc public protocol SimpleXFPServiceProtocol {
|
||||
func upperCaseString(_ string: String, withReply reply: @escaping (String) -> Void)
|
||||
}
|
||||
|
||||
class SimpleXFPServiceDelegate: NSObject, NSXPCListenerDelegate {
|
||||
func listener(_ listener: NSXPCListener, shouldAcceptNewConnection newConnection: NSXPCConnection) -> Bool {
|
||||
logger.debug("FileProviderExtension SimpleXFPServiceDelegate.listener")
|
||||
newConnection.exportedInterface = NSXPCInterface(with: SimpleXFPServiceProtocol.self)
|
||||
newConnection.exportedObject = SimpleXFPService()
|
||||
newConnection.resume()
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
extension FileProviderExtension: NSFileProviderServiceSource {
|
||||
override func supportedServiceSources(for itemIdentifier: NSFileProviderItemIdentifier) throws -> [NSFileProviderServiceSource] {
|
||||
logger.debug("FileProviderExtension.supportedServiceSources")
|
||||
return [self]
|
||||
}
|
||||
|
||||
var serviceName: NSFileProviderServiceName { SIMPLEX_SERVICE_NAME }
|
||||
|
||||
func makeListenerEndpoint() throws -> NSXPCListenerEndpoint {
|
||||
logger.debug("FileProviderExtension.makeListenerEndpoint")
|
||||
return serviceListener.endpoint
|
||||
}
|
||||
}
|
||||
@@ -26,5 +26,9 @@
|
||||
<string>fetch</string>
|
||||
<string>remote-notification</string>
|
||||
</array>
|
||||
<key>UIFileSharingEnabled</key>
|
||||
<string>YES</string>
|
||||
<key>LSSupportsOpeningDocumentsInPlace</key>
|
||||
<string>YES</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
@@ -23,7 +23,17 @@
|
||||
5C1CAA1A2847C5C8009E5C72 /* FileProviderExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C1CAA192847C5C8009E5C72 /* FileProviderExtension.swift */; };
|
||||
5C1CAA1C2847C5C8009E5C72 /* FileProviderItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C1CAA1B2847C5C8009E5C72 /* FileProviderItem.swift */; };
|
||||
5C1CAA1E2847C5C8009E5C72 /* FileProviderEnumerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C1CAA1D2847C5C8009E5C72 /* FileProviderEnumerator.swift */; };
|
||||
5C1CAA232847C5C8009E5C72 /* SimpleX Service.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 5C1CAA152847C5C8009E5C72 /* SimpleX Service.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
||||
5C1CAA282847D7C0009E5C72 /* SimpleXFPService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C1CAA272847D7C0009E5C72 /* SimpleXFPService.swift */; };
|
||||
5C1CAA322847DDA0009E5C72 /* SimpleXServiceProtocol.docc in Sources */ = {isa = PBXBuildFile; fileRef = 5C1CAA312847DDA0009E5C72 /* SimpleXServiceProtocol.docc */; };
|
||||
5C1CAA332847DDA0009E5C72 /* SimpleXServiceProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C1CAA302847DDA0009E5C72 /* SimpleXServiceProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
5C1CAA562847EBC0009E5C72 /* MyService.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C1CAA552847EBC0009E5C72 /* MyService.m */; };
|
||||
5C1CAA582847EBC0009E5C72 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C1CAA572847EBC0009E5C72 /* main.m */; };
|
||||
5C1CAA5F2847EC81009E5C72 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C1CAA5E2847EC81009E5C72 /* main.swift */; };
|
||||
5C1CAA612847EC9C009E5C72 /* MyService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C1CAA602847EC9C009E5C72 /* MyService.swift */; };
|
||||
5C1CAA632847ECC6009E5C72 /* MyServiceDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C1CAA622847ECC6009E5C72 /* MyServiceDelegate.swift */; };
|
||||
5C1CAA652847ED13009E5C72 /* MyServiceProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C1CAA642847ED13009E5C72 /* MyServiceProtocol.swift */; };
|
||||
5C1CAA662847F5BD009E5C72 /* FPService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C1CAA3B2847DE88009E5C72 /* FPService.swift */; };
|
||||
5C1CAA672848168A009E5C72 /* SimpleX Service.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 5C1CAA152847C5C8009E5C72 /* SimpleX Service.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
||||
5C2E260727A2941F00F70299 /* SimpleXAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C2E260627A2941F00F70299 /* SimpleXAPI.swift */; };
|
||||
5C2E260B27A30CFA00F70299 /* ChatListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C2E260A27A30CFA00F70299 /* ChatListView.swift */; };
|
||||
5C2E260F27A30FDC00F70299 /* ChatView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C2E260E27A30FDC00F70299 /* ChatView.swift */; };
|
||||
@@ -121,7 +131,7 @@
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
5C1CAA212847C5C8009E5C72 /* PBXContainerItemProxy */ = {
|
||||
5C1CAA682848168A009E5C72 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 5CA059BE279559F40002BEB4 /* Project object */;
|
||||
proxyType = 1;
|
||||
@@ -176,7 +186,7 @@
|
||||
dstPath = "";
|
||||
dstSubfolderSpec = 13;
|
||||
files = (
|
||||
5C1CAA232847C5C8009E5C72 /* SimpleX Service.appex in Embed App Extensions */,
|
||||
5C1CAA672848168A009E5C72 /* SimpleX Service.appex in Embed App Extensions */,
|
||||
5CE2BA9D284555F500EC33A6 /* SimpleX NSE.appex in Embed App Extensions */,
|
||||
);
|
||||
name = "Embed App Extensions";
|
||||
@@ -205,6 +215,22 @@
|
||||
5C1CAA1D2847C5C8009E5C72 /* FileProviderEnumerator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileProviderEnumerator.swift; sourceTree = "<group>"; };
|
||||
5C1CAA1F2847C5C8009E5C72 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
5C1CAA202847C5C8009E5C72 /* SimpleX_Service.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = SimpleX_Service.entitlements; sourceTree = "<group>"; };
|
||||
5C1CAA272847D7C0009E5C72 /* SimpleXFPService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimpleXFPService.swift; sourceTree = "<group>"; };
|
||||
5C1CAA2E2847DDA0009E5C72 /* SimpleXServiceProtocol.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SimpleXServiceProtocol.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
5C1CAA302847DDA0009E5C72 /* SimpleXServiceProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SimpleXServiceProtocol.h; sourceTree = "<group>"; };
|
||||
5C1CAA312847DDA0009E5C72 /* SimpleXServiceProtocol.docc */ = {isa = PBXFileReference; lastKnownFileType = folder.documentationcatalog; path = SimpleXServiceProtocol.docc; sourceTree = "<group>"; };
|
||||
5C1CAA3B2847DE88009E5C72 /* FPService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FPService.swift; sourceTree = "<group>"; };
|
||||
5C1CAA512847EBC0009E5C72 /* MyService.xpc */ = {isa = PBXFileReference; explicitFileType = "wrapper.xpc-service"; includeInIndex = 0; path = MyService.xpc; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
5C1CAA532847EBC0009E5C72 /* MyServiceProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MyServiceProtocol.h; sourceTree = "<group>"; };
|
||||
5C1CAA542847EBC0009E5C72 /* MyService.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MyService.h; sourceTree = "<group>"; };
|
||||
5C1CAA552847EBC0009E5C72 /* MyService.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MyService.m; sourceTree = "<group>"; };
|
||||
5C1CAA572847EBC0009E5C72 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
|
||||
5C1CAA592847EBC0009E5C72 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
5C1CAA5D2847EC81009E5C72 /* MyService-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "MyService-Bridging-Header.h"; sourceTree = "<group>"; };
|
||||
5C1CAA5E2847EC81009E5C72 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = "<group>"; };
|
||||
5C1CAA602847EC9C009E5C72 /* MyService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyService.swift; sourceTree = "<group>"; };
|
||||
5C1CAA622847ECC6009E5C72 /* MyServiceDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyServiceDelegate.swift; sourceTree = "<group>"; };
|
||||
5C1CAA642847ED13009E5C72 /* MyServiceProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyServiceProtocol.swift; sourceTree = "<group>"; };
|
||||
5C2E260627A2941F00F70299 /* SimpleXAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimpleXAPI.swift; sourceTree = "<group>"; };
|
||||
5C2E260A27A30CFA00F70299 /* ChatListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatListView.swift; sourceTree = "<group>"; };
|
||||
5C2E260E27A30FDC00F70299 /* ChatView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatView.swift; sourceTree = "<group>"; };
|
||||
@@ -314,6 +340,20 @@
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
5C1CAA2B2847DDA0009E5C72 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
5C1CAA4E2847EBC0009E5C72 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
5CA059C7279559F40002BEB4 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
@@ -376,12 +416,39 @@
|
||||
5C1CAA192847C5C8009E5C72 /* FileProviderExtension.swift */,
|
||||
5C1CAA1B2847C5C8009E5C72 /* FileProviderItem.swift */,
|
||||
5C1CAA1D2847C5C8009E5C72 /* FileProviderEnumerator.swift */,
|
||||
5C1CAA272847D7C0009E5C72 /* SimpleXFPService.swift */,
|
||||
5C1CAA1F2847C5C8009E5C72 /* Info.plist */,
|
||||
5C1CAA202847C5C8009E5C72 /* SimpleX_Service.entitlements */,
|
||||
);
|
||||
path = "SimpleX Service";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
5C1CAA2F2847DDA0009E5C72 /* SimpleXServiceProtocol */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
5C1CAA302847DDA0009E5C72 /* SimpleXServiceProtocol.h */,
|
||||
5C1CAA312847DDA0009E5C72 /* SimpleXServiceProtocol.docc */,
|
||||
);
|
||||
path = SimpleXServiceProtocol;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
5C1CAA522847EBC0009E5C72 /* MyService */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
5C1CAA5E2847EC81009E5C72 /* main.swift */,
|
||||
5C1CAA602847EC9C009E5C72 /* MyService.swift */,
|
||||
5C1CAA622847ECC6009E5C72 /* MyServiceDelegate.swift */,
|
||||
5C1CAA642847ED13009E5C72 /* MyServiceProtocol.swift */,
|
||||
5C1CAA532847EBC0009E5C72 /* MyServiceProtocol.h */,
|
||||
5C1CAA542847EBC0009E5C72 /* MyService.h */,
|
||||
5C1CAA552847EBC0009E5C72 /* MyService.m */,
|
||||
5C1CAA572847EBC0009E5C72 /* main.m */,
|
||||
5C1CAA592847EBC0009E5C72 /* Info.plist */,
|
||||
5C1CAA5D2847EC81009E5C72 /* MyService-Bridging-Header.h */,
|
||||
);
|
||||
path = MyService;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
5C2E260D27A30E2400F70299 /* Views */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -439,7 +506,6 @@
|
||||
5C764E87279CBC8E000C6508 /* Model */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
5CDCAD7128188CEB00503DA2 /* Shared */,
|
||||
5C764E88279CBCB3000C6508 /* ChatModel.swift */,
|
||||
5C2E260627A2941F00F70299 /* SimpleXAPI.swift */,
|
||||
5C35CFC727B2782E00FB6C6D /* BGManager.swift */,
|
||||
@@ -476,7 +542,9 @@
|
||||
5CE2BA692845308900EC33A6 /* SimpleXChat */,
|
||||
5CDCAD462818589900503DA2 /* SimpleX NSE */,
|
||||
5C1CAA182847C5C8009E5C72 /* SimpleX Service */,
|
||||
5C1CAA2F2847DDA0009E5C72 /* SimpleXServiceProtocol */,
|
||||
5CA059DA279559F40002BEB4 /* Tests iOS */,
|
||||
5C1CAA522847EBC0009E5C72 /* MyService */,
|
||||
5CA059CB279559F40002BEB4 /* Products */,
|
||||
5C764E7A279C71D4000C6508 /* Frameworks */,
|
||||
);
|
||||
@@ -488,6 +556,7 @@
|
||||
5CA059C3279559F40002BEB4 /* SimpleXApp.swift */,
|
||||
5C36027227F47AD5009F19D9 /* AppDelegate.swift */,
|
||||
5CA059C4279559F40002BEB4 /* ContentView.swift */,
|
||||
5C1CAA3B2847DE88009E5C72 /* FPService.swift */,
|
||||
5C764E87279CBC8E000C6508 /* Model */,
|
||||
5C2E260D27A30E2400F70299 /* Views */,
|
||||
5CA059C5279559F40002BEB4 /* Assets.xcassets */,
|
||||
@@ -504,6 +573,8 @@
|
||||
5CDCAD452818589900503DA2 /* SimpleX NSE.appex */,
|
||||
5CE2BA682845308900EC33A6 /* SimpleXChat.framework */,
|
||||
5C1CAA152847C5C8009E5C72 /* SimpleX Service.appex */,
|
||||
5C1CAA2E2847DDA0009E5C72 /* SimpleXServiceProtocol.framework */,
|
||||
5C1CAA512847EBC0009E5C72 /* MyService.xpc */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
@@ -574,22 +645,15 @@
|
||||
5CDCAD462818589900503DA2 /* SimpleX NSE */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
5CDCAD5128186DE400503DA2 /* SimpleX NSE.entitlements */,
|
||||
5CDCAD472818589900503DA2 /* NotificationService.swift */,
|
||||
5CDCAD492818589900503DA2 /* Info.plist */,
|
||||
5CB0BA892826CB3A00B3292C /* Localizable.strings */,
|
||||
5CB0BA862826CB3A00B3292C /* InfoPlist.strings */,
|
||||
5CDCAD492818589900503DA2 /* Info.plist */,
|
||||
5CDCAD5128186DE400503DA2 /* SimpleX NSE.entitlements */,
|
||||
);
|
||||
path = "SimpleX NSE";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
5CDCAD7128188CEB00503DA2 /* Shared */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
);
|
||||
path = Shared;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
5CE2BA692845308900EC33A6 /* SimpleXChat */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -642,6 +706,14 @@
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXHeadersBuildPhase section */
|
||||
5C1CAA292847DDA0009E5C72 /* Headers */ = {
|
||||
isa = PBXHeadersBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
5C1CAA332847DDA0009E5C72 /* SimpleXServiceProtocol.h in Headers */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
5CE2BA632845308900EC33A6 /* Headers */ = {
|
||||
isa = PBXHeadersBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
@@ -671,6 +743,41 @@
|
||||
productReference = 5C1CAA152847C5C8009E5C72 /* SimpleX Service.appex */;
|
||||
productType = "com.apple.product-type.app-extension";
|
||||
};
|
||||
5C1CAA2D2847DDA0009E5C72 /* SimpleXServiceProtocol */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 5C1CAA382847DDA0009E5C72 /* Build configuration list for PBXNativeTarget "SimpleXServiceProtocol" */;
|
||||
buildPhases = (
|
||||
5C1CAA292847DDA0009E5C72 /* Headers */,
|
||||
5C1CAA2A2847DDA0009E5C72 /* Sources */,
|
||||
5C1CAA2B2847DDA0009E5C72 /* Frameworks */,
|
||||
5C1CAA2C2847DDA0009E5C72 /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = SimpleXServiceProtocol;
|
||||
productName = SimpleXServiceProtocol;
|
||||
productReference = 5C1CAA2E2847DDA0009E5C72 /* SimpleXServiceProtocol.framework */;
|
||||
productType = "com.apple.product-type.framework";
|
||||
};
|
||||
5C1CAA502847EBC0009E5C72 /* MyService */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 5C1CAA5A2847EBC0009E5C72 /* Build configuration list for PBXNativeTarget "MyService" */;
|
||||
buildPhases = (
|
||||
5C1CAA4D2847EBC0009E5C72 /* Sources */,
|
||||
5C1CAA4E2847EBC0009E5C72 /* Frameworks */,
|
||||
5C1CAA4F2847EBC0009E5C72 /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = MyService;
|
||||
productName = MyService;
|
||||
productReference = 5C1CAA512847EBC0009E5C72 /* MyService.xpc */;
|
||||
productType = "com.apple.product-type.xpc-service";
|
||||
};
|
||||
5CA059C9279559F40002BEB4 /* SimpleX (iOS) */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 5CA059F3279559F40002BEB4 /* Build configuration list for PBXNativeTarget "SimpleX (iOS)" */;
|
||||
@@ -686,7 +793,7 @@
|
||||
dependencies = (
|
||||
5CE2BA6F2845308900EC33A6 /* PBXTargetDependency */,
|
||||
5CE2BA9F284555F500EC33A6 /* PBXTargetDependency */,
|
||||
5C1CAA222847C5C8009E5C72 /* PBXTargetDependency */,
|
||||
5C1CAA692848168A009E5C72 /* PBXTargetDependency */,
|
||||
);
|
||||
name = "SimpleX (iOS)";
|
||||
packageProductDependencies = (
|
||||
@@ -764,6 +871,13 @@
|
||||
5C1CAA142847C5C8009E5C72 = {
|
||||
CreatedOnToolsVersion = 13.3;
|
||||
};
|
||||
5C1CAA2D2847DDA0009E5C72 = {
|
||||
CreatedOnToolsVersion = 13.3;
|
||||
};
|
||||
5C1CAA502847EBC0009E5C72 = {
|
||||
CreatedOnToolsVersion = 13.3;
|
||||
LastSwiftMigration = 1330;
|
||||
};
|
||||
5CA059C9279559F40002BEB4 = {
|
||||
CreatedOnToolsVersion = 13.2.1;
|
||||
LastSwiftMigration = 1320;
|
||||
@@ -803,6 +917,8 @@
|
||||
5CE2BA672845308900EC33A6 /* SimpleXChat */,
|
||||
5CDCAD442818589900503DA2 /* SimpleX NSE */,
|
||||
5C1CAA142847C5C8009E5C72 /* SimpleX Service */,
|
||||
5C1CAA2D2847DDA0009E5C72 /* SimpleXServiceProtocol */,
|
||||
5C1CAA502847EBC0009E5C72 /* MyService */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
@@ -815,6 +931,20 @@
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
5C1CAA2C2847DDA0009E5C72 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
5C1CAA4F2847EBC0009E5C72 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
5CA059C8279559F40002BEB4 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
@@ -857,12 +987,34 @@
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
5C1CAA282847D7C0009E5C72 /* SimpleXFPService.swift in Sources */,
|
||||
5C1CAA1A2847C5C8009E5C72 /* FileProviderExtension.swift in Sources */,
|
||||
5C1CAA1C2847C5C8009E5C72 /* FileProviderItem.swift in Sources */,
|
||||
5C1CAA1E2847C5C8009E5C72 /* FileProviderEnumerator.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
5C1CAA2A2847DDA0009E5C72 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
5C1CAA322847DDA0009E5C72 /* SimpleXServiceProtocol.docc in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
5C1CAA4D2847EBC0009E5C72 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
5C1CAA582847EBC0009E5C72 /* main.m in Sources */,
|
||||
5C1CAA652847ED13009E5C72 /* MyServiceProtocol.swift in Sources */,
|
||||
5C1CAA632847ECC6009E5C72 /* MyServiceDelegate.swift in Sources */,
|
||||
5C1CAA612847EC9C009E5C72 /* MyService.swift in Sources */,
|
||||
5C1CAA562847EBC0009E5C72 /* MyService.m in Sources */,
|
||||
5C1CAA5F2847EC81009E5C72 /* main.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
5CA059C6279559F40002BEB4 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
@@ -924,6 +1076,7 @@
|
||||
5CEACCED27DEA495000BD591 /* MsgContentView.swift in Sources */,
|
||||
5C764E89279CBCB3000C6508 /* ChatModel.swift in Sources */,
|
||||
5C971E1D27AEBEF600C8A3CE /* ChatInfoView.swift in Sources */,
|
||||
5C1CAA662847F5BD009E5C72 /* FPService.swift in Sources */,
|
||||
5CC1C99527A6CF7F000D9FF6 /* ShareSheet.swift in Sources */,
|
||||
5C5E5D3B2824468B00B0488A /* ActiveCallView.swift in Sources */,
|
||||
5C2E260727A2941F00F70299 /* SimpleXAPI.swift in Sources */,
|
||||
@@ -978,10 +1131,10 @@
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXTargetDependency section */
|
||||
5C1CAA222847C5C8009E5C72 /* PBXTargetDependency */ = {
|
||||
5C1CAA692848168A009E5C72 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = 5C1CAA142847C5C8009E5C72 /* SimpleX Service */;
|
||||
targetProxy = 5C1CAA212847C5C8009E5C72 /* PBXContainerItemProxy */;
|
||||
targetProxy = 5C1CAA682848168A009E5C72 /* PBXContainerItemProxy */;
|
||||
};
|
||||
5CA059D9279559F40002BEB4 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
@@ -1048,7 +1201,7 @@
|
||||
buildSettings = {
|
||||
CODE_SIGN_ENTITLEMENTS = "SimpleX Service/SimpleX_Service.entitlements";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
CURRENT_PROJECT_VERSION = 49;
|
||||
DEVELOPMENT_TEAM = 5NN7GUYB6T;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_FILE = "SimpleX Service/Info.plist";
|
||||
@@ -1060,7 +1213,7 @@
|
||||
"@executable_path/Frameworks",
|
||||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.0;
|
||||
MARKETING_VERSION = 2.2;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "chat.simplex.app.SimpleX-Service";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SDKROOT = iphoneos;
|
||||
@@ -1076,7 +1229,7 @@
|
||||
buildSettings = {
|
||||
CODE_SIGN_ENTITLEMENTS = "SimpleX Service/SimpleX_Service.entitlements";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
CURRENT_PROJECT_VERSION = 49;
|
||||
DEVELOPMENT_TEAM = 5NN7GUYB6T;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_FILE = "SimpleX Service/Info.plist";
|
||||
@@ -1088,7 +1241,7 @@
|
||||
"@executable_path/Frameworks",
|
||||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.0;
|
||||
MARKETING_VERSION = 2.2;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "chat.simplex.app.SimpleX-Service";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SDKROOT = iphoneos;
|
||||
@@ -1100,6 +1253,136 @@
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
5C1CAA392847DDA0009E5C72 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
APPLICATION_EXTENSION_API_ONLY = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEFINES_MODULE = YES;
|
||||
DEVELOPMENT_TEAM = 5NN7GUYB6T;
|
||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||
DYLIB_CURRENT_VERSION = 1;
|
||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2022 SimpleX Chat. All rights reserved.";
|
||||
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
"@loader_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = chat.simplex.SimpleXServiceProtocol;
|
||||
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
||||
SDKROOT = iphoneos;
|
||||
SKIP_INSTALL = YES;
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
VERSION_INFO_PREFIX = "";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
5C1CAA3A2847DDA0009E5C72 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
APPLICATION_EXTENSION_API_ONLY = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEFINES_MODULE = YES;
|
||||
DEVELOPMENT_TEAM = 5NN7GUYB6T;
|
||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||
DYLIB_CURRENT_VERSION = 1;
|
||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2022 SimpleX Chat. All rights reserved.";
|
||||
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
"@loader_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = chat.simplex.SimpleXServiceProtocol;
|
||||
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
||||
SDKROOT = iphoneos;
|
||||
SKIP_INSTALL = YES;
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
VALIDATE_PRODUCT = YES;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
VERSION_INFO_PREFIX = "";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
5C1CAA5B2847EBC0009E5C72 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEVELOPMENT_TEAM = 5NN7GUYB6T;
|
||||
ENABLE_HARDENED_RUNTIME = YES;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_FILE = MyService/Info.plist;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = MyService;
|
||||
INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2022 SimpleX Chat. All rights reserved.";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/../Frameworks",
|
||||
"@loader_path/../Frameworks",
|
||||
);
|
||||
MACOSX_DEPLOYMENT_TARGET = 12.2;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = chat.simplex.MyService;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SDKROOT = macosx;
|
||||
SKIP_INSTALL = YES;
|
||||
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "MyService/MyService-Bridging-Header.h";
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 5.0;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
5C1CAA5C2847EBC0009E5C72 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEVELOPMENT_TEAM = 5NN7GUYB6T;
|
||||
ENABLE_HARDENED_RUNTIME = YES;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_FILE = MyService/Info.plist;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = MyService;
|
||||
INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2022 SimpleX Chat. All rights reserved.";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/../Frameworks",
|
||||
"@loader_path/../Frameworks",
|
||||
);
|
||||
MACOSX_DEPLOYMENT_TARGET = 12.2;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = chat.simplex.MyService;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SDKROOT = macosx;
|
||||
SKIP_INSTALL = YES;
|
||||
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "MyService/MyService-Bridging-Header.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
5CA059F1279559F40002BEB4 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
@@ -1524,6 +1807,24 @@
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
5C1CAA382847DDA0009E5C72 /* Build configuration list for PBXNativeTarget "SimpleXServiceProtocol" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
5C1CAA392847DDA0009E5C72 /* Debug */,
|
||||
5C1CAA3A2847DDA0009E5C72 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
5C1CAA5A2847EBC0009E5C72 /* Build configuration list for PBXNativeTarget "MyService" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
5C1CAA5B2847EBC0009E5C72 /* Debug */,
|
||||
5C1CAA5C2847EBC0009E5C72 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
5CA059C1279559F40002BEB4 /* Build configuration list for PBXProject "SimpleX" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
|
||||
@@ -18,7 +18,9 @@ public let maxImageSize: Int64 = 236700
|
||||
public let maxFileSize: Int64 = 8000000
|
||||
|
||||
func getDocumentsDirectory() -> URL {
|
||||
// FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
|
||||
// let url = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
|
||||
// print(url)
|
||||
// return url
|
||||
FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.chat.simplex.app")!
|
||||
}
|
||||
|
||||
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
# ``SimpleXServiceProtocol``
|
||||
|
||||
<!--@START_MENU_TOKEN@-->Summary<!--@END_MENU_TOKEN@-->
|
||||
|
||||
## Overview
|
||||
|
||||
<!--@START_MENU_TOKEN@-->Text<!--@END_MENU_TOKEN@-->
|
||||
|
||||
## Topics
|
||||
|
||||
### <!--@START_MENU_TOKEN@-->Group<!--@END_MENU_TOKEN@-->
|
||||
|
||||
- <!--@START_MENU_TOKEN@-->``Symbol``<!--@END_MENU_TOKEN@-->
|
||||
@@ -0,0 +1,19 @@
|
||||
//
|
||||
// SimpleXServiceProtocol.h
|
||||
// SimpleXServiceProtocol
|
||||
//
|
||||
// Created by Evgeny on 01/06/2022.
|
||||
// Copyright © 2022 SimpleX Chat. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
//! Project version number for SimpleXServiceProtocol.
|
||||
FOUNDATION_EXPORT double SimpleXServiceProtocolVersionNumber;
|
||||
|
||||
//! Project version string for SimpleXServiceProtocol.
|
||||
FOUNDATION_EXPORT const unsigned char SimpleXServiceProtocolVersionString[];
|
||||
|
||||
// In this header, you should import all the public headers of your framework using statements like #import <SimpleXServiceProtocol/PublicHeader.h>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user