Introduce core/ — a Rust crate owning the wire protocol (Message codec, SSE client, reconnect/backoff, send) behind a 4-method seam exported via UniFFI: Engine::new / start(handler) / send / stop. This is the single sync engine meant to back all clients; desktop links it directly, iOS binds an .xcframework, Android will bind an .aar. RTC mesh + the signal envelope are deliberately out of scope for v1 (SSE-only). Verified end-to-end against the live server: examples/roundtrip.rs has a subscriber engine receive a message published by a sender engine. iOS now links it: TetherStore drops TetherKit's TetherClient/SSEClient/ Message and drives tethercore.Engine instead (RoomIdentity still from TetherKit via selective import to avoid the Message name clash). The app builds and links the Rust staticlib for device. Artifacts (xcframework, Swift bindings) are generated by core/build-ios.sh and git-ignored; commit source + script, not the ~80MB static libs. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
377 lines
14 KiB
Plaintext
377 lines
14 KiB
Plaintext
// !$*UTF8*$!
|
|
{
|
|
archiveVersion = 1;
|
|
classes = {
|
|
};
|
|
objectVersion = 77;
|
|
objects = {
|
|
|
|
/* Begin PBXBuildFile section */
|
|
74D3E9952DD8E0913BE6B299 /* TetherApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = B59E41534347FCDEDED407D6 /* TetherApp.swift */; };
|
|
A0B34D3F9849F9BC614CC058 /* TetherStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7D1001BBAABF813AB29AD45 /* TetherStore.swift */; };
|
|
B00ECEE60ABBEFEDFF548750 /* TetherKit in Frameworks */ = {isa = PBXBuildFile; productRef = 214441C31F40D721B6B47F10 /* TetherKit */; };
|
|
CCA52ACB37EF809880064207 /* RoomView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F373509C266AF62E742C792A /* RoomView.swift */; };
|
|
EEEAB6E2132E74568361D04E /* TetherCore.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20AC83BF63EB7D2A826BFF91 /* TetherCore.xcframework */; };
|
|
FF510853346E00FA9D3B7552 /* tethercore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D5C7A947C4BBA8AF0381677 /* tethercore.swift */; };
|
|
/* End PBXBuildFile section */
|
|
|
|
/* Begin PBXFileReference section */
|
|
20AC83BF63EB7D2A826BFF91 /* TetherCore.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = TetherCore.xcframework; path = Vendor/TetherCore.xcframework; sourceTree = "<group>"; };
|
|
331B3970CED74956D9BE87FF /* TetherApp.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = TetherApp.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
41B6BEFA7CFACAAA3507391B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
|
|
6D5C7A947C4BBA8AF0381677 /* tethercore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = tethercore.swift; sourceTree = "<group>"; };
|
|
B59E41534347FCDEDED407D6 /* TetherApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TetherApp.swift; sourceTree = "<group>"; };
|
|
C4E3CFAF660DDE2C62CD1996 /* TetherKit */ = {isa = PBXFileReference; lastKnownFileType = folder; name = TetherKit; path = ../TetherKit; sourceTree = SOURCE_ROOT; };
|
|
D7D1001BBAABF813AB29AD45 /* TetherStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TetherStore.swift; sourceTree = "<group>"; };
|
|
F373509C266AF62E742C792A /* RoomView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomView.swift; sourceTree = "<group>"; };
|
|
/* End PBXFileReference section */
|
|
|
|
/* Begin PBXFrameworksBuildPhase section */
|
|
A97B508FAD5DC69149AA5DB8 /* Frameworks */ = {
|
|
isa = PBXFrameworksBuildPhase;
|
|
buildActionMask = 2147483647;
|
|
files = (
|
|
B00ECEE60ABBEFEDFF548750 /* TetherKit in Frameworks */,
|
|
EEEAB6E2132E74568361D04E /* TetherCore.xcframework in Frameworks */,
|
|
);
|
|
runOnlyForDeploymentPostprocessing = 0;
|
|
};
|
|
/* End PBXFrameworksBuildPhase section */
|
|
|
|
/* Begin PBXGroup section */
|
|
0565A8CEDDE5C5C0BE113DA3 /* Sources */ = {
|
|
isa = PBXGroup;
|
|
children = (
|
|
41B6BEFA7CFACAAA3507391B /* Info.plist */,
|
|
F373509C266AF62E742C792A /* RoomView.swift */,
|
|
B59E41534347FCDEDED407D6 /* TetherApp.swift */,
|
|
6D5C7A947C4BBA8AF0381677 /* tethercore.swift */,
|
|
D7D1001BBAABF813AB29AD45 /* TetherStore.swift */,
|
|
);
|
|
path = Sources;
|
|
sourceTree = "<group>";
|
|
};
|
|
47410593516FEA684761565A /* Frameworks */ = {
|
|
isa = PBXGroup;
|
|
children = (
|
|
20AC83BF63EB7D2A826BFF91 /* TetherCore.xcframework */,
|
|
);
|
|
name = Frameworks;
|
|
sourceTree = "<group>";
|
|
};
|
|
485FAD0A0B0809694D9B7B77 = {
|
|
isa = PBXGroup;
|
|
children = (
|
|
5EF696014E5E1F874C5B729B /* Packages */,
|
|
0565A8CEDDE5C5C0BE113DA3 /* Sources */,
|
|
47410593516FEA684761565A /* Frameworks */,
|
|
717BFFF9FC0CFF5C5EFFF376 /* Products */,
|
|
);
|
|
sourceTree = "<group>";
|
|
};
|
|
5EF696014E5E1F874C5B729B /* Packages */ = {
|
|
isa = PBXGroup;
|
|
children = (
|
|
C4E3CFAF660DDE2C62CD1996 /* TetherKit */,
|
|
);
|
|
name = Packages;
|
|
sourceTree = "<group>";
|
|
};
|
|
717BFFF9FC0CFF5C5EFFF376 /* Products */ = {
|
|
isa = PBXGroup;
|
|
children = (
|
|
331B3970CED74956D9BE87FF /* TetherApp.app */,
|
|
);
|
|
name = Products;
|
|
sourceTree = "<group>";
|
|
};
|
|
/* End PBXGroup section */
|
|
|
|
/* Begin PBXNativeTarget section */
|
|
AC341A4B4EDFDC4C3AD2F0C5 /* TetherApp */ = {
|
|
isa = PBXNativeTarget;
|
|
buildConfigurationList = 032827B25A14759DD2501508 /* Build configuration list for PBXNativeTarget "TetherApp" */;
|
|
buildPhases = (
|
|
6EF56AF088F40C274BCA5B54 /* Sources */,
|
|
A97B508FAD5DC69149AA5DB8 /* Frameworks */,
|
|
);
|
|
buildRules = (
|
|
);
|
|
dependencies = (
|
|
);
|
|
name = TetherApp;
|
|
packageProductDependencies = (
|
|
214441C31F40D721B6B47F10 /* TetherKit */,
|
|
);
|
|
productName = TetherApp;
|
|
productReference = 331B3970CED74956D9BE87FF /* TetherApp.app */;
|
|
productType = "com.apple.product-type.application";
|
|
};
|
|
/* End PBXNativeTarget section */
|
|
|
|
/* Begin PBXProject section */
|
|
76822E0F7563E5868E7A89FA /* Project object */ = {
|
|
isa = PBXProject;
|
|
attributes = {
|
|
BuildIndependentTargetsInParallel = YES;
|
|
LastUpgradeCheck = 1430;
|
|
TargetAttributes = {
|
|
AC341A4B4EDFDC4C3AD2F0C5 = {
|
|
DevelopmentTeam = "";
|
|
ProvisioningStyle = Automatic;
|
|
};
|
|
};
|
|
};
|
|
buildConfigurationList = EC9400412735B9FCCDE4DED9 /* Build configuration list for PBXProject "TetherApp" */;
|
|
developmentRegion = en;
|
|
hasScannedForEncodings = 0;
|
|
knownRegions = (
|
|
Base,
|
|
en,
|
|
);
|
|
mainGroup = 485FAD0A0B0809694D9B7B77;
|
|
minimizedProjectReferenceProxies = 1;
|
|
packageReferences = (
|
|
05E8667CA64523CECB82791D /* XCLocalSwiftPackageReference "../TetherKit" */,
|
|
);
|
|
preferredProjectObjectVersion = 77;
|
|
productRefGroup = 717BFFF9FC0CFF5C5EFFF376 /* Products */;
|
|
projectDirPath = "";
|
|
projectRoot = "";
|
|
targets = (
|
|
AC341A4B4EDFDC4C3AD2F0C5 /* TetherApp */,
|
|
);
|
|
};
|
|
/* End PBXProject section */
|
|
|
|
/* Begin PBXSourcesBuildPhase section */
|
|
6EF56AF088F40C274BCA5B54 /* Sources */ = {
|
|
isa = PBXSourcesBuildPhase;
|
|
buildActionMask = 2147483647;
|
|
files = (
|
|
CCA52ACB37EF809880064207 /* RoomView.swift in Sources */,
|
|
74D3E9952DD8E0913BE6B299 /* TetherApp.swift in Sources */,
|
|
A0B34D3F9849F9BC614CC058 /* TetherStore.swift in Sources */,
|
|
FF510853346E00FA9D3B7552 /* tethercore.swift in Sources */,
|
|
);
|
|
runOnlyForDeploymentPostprocessing = 0;
|
|
};
|
|
/* End PBXSourcesBuildPhase section */
|
|
|
|
/* Begin XCBuildConfiguration section */
|
|
34B8C4EB3F519898D07EFD9B /* Debug */ = {
|
|
isa = XCBuildConfiguration;
|
|
buildSettings = {
|
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
|
CODE_SIGN_IDENTITY = "iPhone Developer";
|
|
CODE_SIGN_STYLE = Automatic;
|
|
CURRENT_PROJECT_VERSION = 1;
|
|
DEVELOPMENT_TEAM = "";
|
|
FRAMEWORK_SEARCH_PATHS = (
|
|
"$(inherited)",
|
|
"\"Vendor\"",
|
|
);
|
|
GENERATE_INFOPLIST_FILE = YES;
|
|
INFOPLIST_FILE = Sources/Info.plist;
|
|
INFOPLIST_KEY_NSAppTransportSecurity = "";
|
|
INFOPLIST_KEY_NSLocalNetworkUsageDescription = "tether connects to your clipboard relay on the local network.";
|
|
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
|
|
LD_RUNPATH_SEARCH_PATHS = (
|
|
"$(inherited)",
|
|
"@executable_path/Frameworks",
|
|
);
|
|
MARKETING_VERSION = 0.1.0;
|
|
OTHER_LDFLAGS = "-framework Security -framework SystemConfiguration -lresolv";
|
|
PRODUCT_BUNDLE_IDENTIFIER = io.pecord.tether;
|
|
SDKROOT = iphoneos;
|
|
TARGETED_DEVICE_FAMILY = "1,2";
|
|
};
|
|
name = Debug;
|
|
};
|
|
370C8005542C3C6CA5C95685 /* Debug */ = {
|
|
isa = XCBuildConfiguration;
|
|
buildSettings = {
|
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
|
CLANG_ANALYZER_NONNULL = YES;
|
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
|
CLANG_CXX_LIBRARY = "libc++";
|
|
CLANG_ENABLE_MODULES = YES;
|
|
CLANG_ENABLE_OBJC_ARC = YES;
|
|
CLANG_ENABLE_OBJC_WEAK = YES;
|
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
|
CLANG_WARN_COMMA = YES;
|
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
|
CLANG_WARN_EMPTY_BODY = YES;
|
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
|
CLANG_WARN_INT_CONVERSION = YES;
|
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
|
COPY_PHASE_STRIP = NO;
|
|
DEBUG_INFORMATION_FORMAT = dwarf;
|
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
|
ENABLE_TESTABILITY = YES;
|
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
|
GCC_DYNAMIC_NO_PIC = NO;
|
|
GCC_NO_COMMON_BLOCKS = YES;
|
|
GCC_OPTIMIZATION_LEVEL = 0;
|
|
GCC_PREPROCESSOR_DEFINITIONS = (
|
|
"$(inherited)",
|
|
"DEBUG=1",
|
|
);
|
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
|
IPHONEOS_DEPLOYMENT_TARGET = 26.0;
|
|
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
|
MTL_FAST_MATH = YES;
|
|
ONLY_ACTIVE_ARCH = YES;
|
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
|
SDKROOT = iphoneos;
|
|
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
|
SWIFT_VERSION = 5.0;
|
|
};
|
|
name = Debug;
|
|
};
|
|
C43F83B7E47FEBE11D45EE58 /* Release */ = {
|
|
isa = XCBuildConfiguration;
|
|
buildSettings = {
|
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
|
CODE_SIGN_IDENTITY = "iPhone Developer";
|
|
CODE_SIGN_STYLE = Automatic;
|
|
CURRENT_PROJECT_VERSION = 1;
|
|
DEVELOPMENT_TEAM = "";
|
|
FRAMEWORK_SEARCH_PATHS = (
|
|
"$(inherited)",
|
|
"\"Vendor\"",
|
|
);
|
|
GENERATE_INFOPLIST_FILE = YES;
|
|
INFOPLIST_FILE = Sources/Info.plist;
|
|
INFOPLIST_KEY_NSLocalNetworkUsageDescription = "tether connects to your clipboard relay on the local network.";
|
|
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
|
|
LD_RUNPATH_SEARCH_PATHS = (
|
|
"$(inherited)",
|
|
"@executable_path/Frameworks",
|
|
);
|
|
MARKETING_VERSION = 0.1.0;
|
|
OTHER_LDFLAGS = "-framework Security -framework SystemConfiguration -lresolv";
|
|
PRODUCT_BUNDLE_IDENTIFIER = io.pecord.tether;
|
|
SDKROOT = iphoneos;
|
|
TARGETED_DEVICE_FAMILY = "1,2";
|
|
};
|
|
name = Release;
|
|
};
|
|
F5F0867AAFA961DC5B7FC432 /* Release */ = {
|
|
isa = XCBuildConfiguration;
|
|
buildSettings = {
|
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
|
CLANG_ANALYZER_NONNULL = YES;
|
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
|
CLANG_CXX_LIBRARY = "libc++";
|
|
CLANG_ENABLE_MODULES = YES;
|
|
CLANG_ENABLE_OBJC_ARC = YES;
|
|
CLANG_ENABLE_OBJC_WEAK = YES;
|
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
|
CLANG_WARN_COMMA = YES;
|
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
|
CLANG_WARN_EMPTY_BODY = YES;
|
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
|
CLANG_WARN_INT_CONVERSION = YES;
|
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
|
COPY_PHASE_STRIP = NO;
|
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
|
ENABLE_NS_ASSERTIONS = NO;
|
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
|
GCC_NO_COMMON_BLOCKS = YES;
|
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
|
IPHONEOS_DEPLOYMENT_TARGET = 26.0;
|
|
MTL_ENABLE_DEBUG_INFO = NO;
|
|
MTL_FAST_MATH = YES;
|
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
|
SDKROOT = iphoneos;
|
|
SWIFT_COMPILATION_MODE = wholemodule;
|
|
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
|
SWIFT_VERSION = 5.0;
|
|
};
|
|
name = Release;
|
|
};
|
|
/* End XCBuildConfiguration section */
|
|
|
|
/* Begin XCConfigurationList section */
|
|
032827B25A14759DD2501508 /* Build configuration list for PBXNativeTarget "TetherApp" */ = {
|
|
isa = XCConfigurationList;
|
|
buildConfigurations = (
|
|
34B8C4EB3F519898D07EFD9B /* Debug */,
|
|
C43F83B7E47FEBE11D45EE58 /* Release */,
|
|
);
|
|
defaultConfigurationIsVisible = 0;
|
|
defaultConfigurationName = Debug;
|
|
};
|
|
EC9400412735B9FCCDE4DED9 /* Build configuration list for PBXProject "TetherApp" */ = {
|
|
isa = XCConfigurationList;
|
|
buildConfigurations = (
|
|
370C8005542C3C6CA5C95685 /* Debug */,
|
|
F5F0867AAFA961DC5B7FC432 /* Release */,
|
|
);
|
|
defaultConfigurationIsVisible = 0;
|
|
defaultConfigurationName = Debug;
|
|
};
|
|
/* End XCConfigurationList section */
|
|
|
|
/* Begin XCLocalSwiftPackageReference section */
|
|
05E8667CA64523CECB82791D /* XCLocalSwiftPackageReference "../TetherKit" */ = {
|
|
isa = XCLocalSwiftPackageReference;
|
|
relativePath = ../TetherKit;
|
|
};
|
|
/* End XCLocalSwiftPackageReference section */
|
|
|
|
/* Begin XCSwiftPackageProductDependency section */
|
|
214441C31F40D721B6B47F10 /* TetherKit */ = {
|
|
isa = XCSwiftPackageProductDependency;
|
|
productName = TetherKit;
|
|
};
|
|
/* End XCSwiftPackageProductDependency section */
|
|
};
|
|
rootObject = 76822E0F7563E5868E7A89FA /* Project object */;
|
|
}
|