Drop TetherKit's TetherClient/SSEClient/Message from the macOS app; drive tethercore.Engine instead (RoomIdentity still from TetherKit via selective import). The Mac now gets direct P2P over the RTC data channel for free, and the native Swift app is no longer a parallel wire-protocol implementation. Background NSPasteboard polling (auto-send on copy) and write-on-receive are preserved. Feed UI moves to a FeedItem view-model (RTC messages carry ts=0 → fall back to local time). Verified end-to-end against the live server: RECEIVE (bus → Mac pasteboard via pbpaste) and SEND (pbcopy → bus) both confirmed. Generalize core/build-ios.sh → build-apple.sh: builds iOS device + sim + macOS arm64 into one TetherCore.xcframework and vendors it into both apps. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
375 lines
14 KiB
Plaintext
375 lines
14 KiB
Plaintext
// !$*UTF8*$!
|
|
{
|
|
archiveVersion = 1;
|
|
classes = {
|
|
};
|
|
objectVersion = 77;
|
|
objects = {
|
|
|
|
/* Begin PBXBuildFile section */
|
|
5AE0D6380E8D23C337DD0EB0 /* TetherKit in Frameworks */ = {isa = PBXBuildFile; productRef = 7A65056F38679ECD9498103E /* TetherKit */; };
|
|
9386BB2E2BBBCF245A7E605D /* MacTetherStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 010C4E8B3DC255487AE12A75 /* MacTetherStore.swift */; };
|
|
9617ED2468FED9FC38A37FD8 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 826E98E1B2A0C7A9AC4ED879 /* ContentView.swift */; };
|
|
B41AF236C08FA6BD15F00807 /* TetherCore.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = EF6782E994649B6E18C307E8 /* TetherCore.xcframework */; };
|
|
C18BF415C7B42C5FF3235F5E /* tethercore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A8D10256F25095F3FF5047E /* tethercore.swift */; };
|
|
CB143A31027F3CDB3CF5E894 /* MenuView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDF5D8809D1EC415AB35059B /* MenuView.swift */; };
|
|
E1F3C377CB6A58F791A83EAA /* MacTetherApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EA7FA20BA797A0117F705E7 /* MacTetherApp.swift */; };
|
|
/* End PBXBuildFile section */
|
|
|
|
/* Begin PBXFileReference section */
|
|
010C4E8B3DC255487AE12A75 /* MacTetherStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MacTetherStore.swift; sourceTree = "<group>"; };
|
|
2EA7FA20BA797A0117F705E7 /* MacTetherApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MacTetherApp.swift; sourceTree = "<group>"; };
|
|
6C53AB32EB02089B09AD31D6 /* MacTetherApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MacTetherApp.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
6F7F88910D568FDE283249B4 /* TetherKit */ = {isa = PBXFileReference; lastKnownFileType = folder; name = TetherKit; path = ../TetherKit; sourceTree = SOURCE_ROOT; };
|
|
7D193BC76AB5D363A4CB1F6C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
|
|
826E98E1B2A0C7A9AC4ED879 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
|
|
8A8D10256F25095F3FF5047E /* tethercore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = tethercore.swift; sourceTree = "<group>"; };
|
|
BDF5D8809D1EC415AB35059B /* MenuView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuView.swift; sourceTree = "<group>"; };
|
|
EF6782E994649B6E18C307E8 /* TetherCore.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = TetherCore.xcframework; path = Vendor/TetherCore.xcframework; sourceTree = "<group>"; };
|
|
/* End PBXFileReference section */
|
|
|
|
/* Begin PBXFrameworksBuildPhase section */
|
|
2E5F624BEFA01FFDE63654A3 /* Frameworks */ = {
|
|
isa = PBXFrameworksBuildPhase;
|
|
buildActionMask = 2147483647;
|
|
files = (
|
|
5AE0D6380E8D23C337DD0EB0 /* TetherKit in Frameworks */,
|
|
B41AF236C08FA6BD15F00807 /* TetherCore.xcframework in Frameworks */,
|
|
);
|
|
runOnlyForDeploymentPostprocessing = 0;
|
|
};
|
|
/* End PBXFrameworksBuildPhase section */
|
|
|
|
/* Begin PBXGroup section */
|
|
B17B25DB8865282691E0B024 /* Products */ = {
|
|
isa = PBXGroup;
|
|
children = (
|
|
6C53AB32EB02089B09AD31D6 /* MacTetherApp.app */,
|
|
);
|
|
name = Products;
|
|
sourceTree = "<group>";
|
|
};
|
|
C74C31B92D5DD6D8CCD0F873 /* Frameworks */ = {
|
|
isa = PBXGroup;
|
|
children = (
|
|
EF6782E994649B6E18C307E8 /* TetherCore.xcframework */,
|
|
);
|
|
name = Frameworks;
|
|
sourceTree = "<group>";
|
|
};
|
|
D08DCB1AE8C0173418D178ED /* Sources */ = {
|
|
isa = PBXGroup;
|
|
children = (
|
|
826E98E1B2A0C7A9AC4ED879 /* ContentView.swift */,
|
|
7D193BC76AB5D363A4CB1F6C /* Info.plist */,
|
|
2EA7FA20BA797A0117F705E7 /* MacTetherApp.swift */,
|
|
010C4E8B3DC255487AE12A75 /* MacTetherStore.swift */,
|
|
BDF5D8809D1EC415AB35059B /* MenuView.swift */,
|
|
8A8D10256F25095F3FF5047E /* tethercore.swift */,
|
|
);
|
|
path = Sources;
|
|
sourceTree = "<group>";
|
|
};
|
|
E0AC15A5A587EEB6DB5D715F /* Packages */ = {
|
|
isa = PBXGroup;
|
|
children = (
|
|
6F7F88910D568FDE283249B4 /* TetherKit */,
|
|
);
|
|
name = Packages;
|
|
sourceTree = "<group>";
|
|
};
|
|
E91265DF5258B5F642EBDFEC = {
|
|
isa = PBXGroup;
|
|
children = (
|
|
E0AC15A5A587EEB6DB5D715F /* Packages */,
|
|
D08DCB1AE8C0173418D178ED /* Sources */,
|
|
C74C31B92D5DD6D8CCD0F873 /* Frameworks */,
|
|
B17B25DB8865282691E0B024 /* Products */,
|
|
);
|
|
sourceTree = "<group>";
|
|
};
|
|
/* End PBXGroup section */
|
|
|
|
/* Begin PBXNativeTarget section */
|
|
DF53DF6A402A0F4985D125E6 /* MacTetherApp */ = {
|
|
isa = PBXNativeTarget;
|
|
buildConfigurationList = 04A5EC9A9899CC4040F690F3 /* Build configuration list for PBXNativeTarget "MacTetherApp" */;
|
|
buildPhases = (
|
|
45D151270EEF801923C101BE /* Sources */,
|
|
2E5F624BEFA01FFDE63654A3 /* Frameworks */,
|
|
);
|
|
buildRules = (
|
|
);
|
|
dependencies = (
|
|
);
|
|
name = MacTetherApp;
|
|
packageProductDependencies = (
|
|
7A65056F38679ECD9498103E /* TetherKit */,
|
|
);
|
|
productName = MacTetherApp;
|
|
productReference = 6C53AB32EB02089B09AD31D6 /* MacTetherApp.app */;
|
|
productType = "com.apple.product-type.application";
|
|
};
|
|
/* End PBXNativeTarget section */
|
|
|
|
/* Begin PBXProject section */
|
|
75142B138CD13CB28DFE8614 /* Project object */ = {
|
|
isa = PBXProject;
|
|
attributes = {
|
|
BuildIndependentTargetsInParallel = YES;
|
|
LastUpgradeCheck = 1430;
|
|
TargetAttributes = {
|
|
DF53DF6A402A0F4985D125E6 = {
|
|
DevelopmentTeam = "";
|
|
ProvisioningStyle = Automatic;
|
|
};
|
|
};
|
|
};
|
|
buildConfigurationList = 0C5288A62A776D2D55345DF0 /* Build configuration list for PBXProject "MacTetherApp" */;
|
|
developmentRegion = en;
|
|
hasScannedForEncodings = 0;
|
|
knownRegions = (
|
|
Base,
|
|
en,
|
|
);
|
|
mainGroup = E91265DF5258B5F642EBDFEC;
|
|
minimizedProjectReferenceProxies = 1;
|
|
packageReferences = (
|
|
AECCD2CEB9003CD2BFF2B541 /* XCLocalSwiftPackageReference "../TetherKit" */,
|
|
);
|
|
preferredProjectObjectVersion = 77;
|
|
productRefGroup = B17B25DB8865282691E0B024 /* Products */;
|
|
projectDirPath = "";
|
|
projectRoot = "";
|
|
targets = (
|
|
DF53DF6A402A0F4985D125E6 /* MacTetherApp */,
|
|
);
|
|
};
|
|
/* End PBXProject section */
|
|
|
|
/* Begin PBXSourcesBuildPhase section */
|
|
45D151270EEF801923C101BE /* Sources */ = {
|
|
isa = PBXSourcesBuildPhase;
|
|
buildActionMask = 2147483647;
|
|
files = (
|
|
9617ED2468FED9FC38A37FD8 /* ContentView.swift in Sources */,
|
|
E1F3C377CB6A58F791A83EAA /* MacTetherApp.swift in Sources */,
|
|
9386BB2E2BBBCF245A7E605D /* MacTetherStore.swift in Sources */,
|
|
CB143A31027F3CDB3CF5E894 /* MenuView.swift in Sources */,
|
|
C18BF415C7B42C5FF3235F5E /* tethercore.swift in Sources */,
|
|
);
|
|
runOnlyForDeploymentPostprocessing = 0;
|
|
};
|
|
/* End PBXSourcesBuildPhase section */
|
|
|
|
/* Begin XCBuildConfiguration section */
|
|
405AB20151E495DF641A394F /* 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;
|
|
MACOSX_DEPLOYMENT_TARGET = 14.0;
|
|
MTL_ENABLE_DEBUG_INFO = NO;
|
|
MTL_FAST_MATH = YES;
|
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
|
SDKROOT = macosx;
|
|
SWIFT_COMPILATION_MODE = wholemodule;
|
|
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
|
SWIFT_VERSION = 5.0;
|
|
};
|
|
name = Release;
|
|
};
|
|
A601B9B6C923845A753ABA8D /* 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;
|
|
MACOSX_DEPLOYMENT_TARGET = 14.0;
|
|
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
|
MTL_FAST_MATH = YES;
|
|
ONLY_ACTIVE_ARCH = YES;
|
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
|
SDKROOT = macosx;
|
|
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
|
SWIFT_VERSION = 5.0;
|
|
};
|
|
name = Debug;
|
|
};
|
|
A95D061C896899435D7681DC /* Debug */ = {
|
|
isa = XCBuildConfiguration;
|
|
buildSettings = {
|
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
|
CODE_SIGN_STYLE = Automatic;
|
|
COMBINE_HIDPI_IMAGES = YES;
|
|
CURRENT_PROJECT_VERSION = 1;
|
|
DEVELOPMENT_TEAM = "";
|
|
FRAMEWORK_SEARCH_PATHS = (
|
|
"$(inherited)",
|
|
"\"Vendor\"",
|
|
);
|
|
GENERATE_INFOPLIST_FILE = YES;
|
|
INFOPLIST_FILE = Sources/Info.plist;
|
|
INFOPLIST_KEY_NSAppTransportSecurity = "";
|
|
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.mac;
|
|
SDKROOT = macosx;
|
|
};
|
|
name = Debug;
|
|
};
|
|
ED576A3E5FACC81E9E95AA23 /* Release */ = {
|
|
isa = XCBuildConfiguration;
|
|
buildSettings = {
|
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
|
CODE_SIGN_STYLE = Automatic;
|
|
COMBINE_HIDPI_IMAGES = YES;
|
|
CURRENT_PROJECT_VERSION = 1;
|
|
DEVELOPMENT_TEAM = "";
|
|
FRAMEWORK_SEARCH_PATHS = (
|
|
"$(inherited)",
|
|
"\"Vendor\"",
|
|
);
|
|
GENERATE_INFOPLIST_FILE = YES;
|
|
INFOPLIST_FILE = Sources/Info.plist;
|
|
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.mac;
|
|
SDKROOT = macosx;
|
|
};
|
|
name = Release;
|
|
};
|
|
/* End XCBuildConfiguration section */
|
|
|
|
/* Begin XCConfigurationList section */
|
|
04A5EC9A9899CC4040F690F3 /* Build configuration list for PBXNativeTarget "MacTetherApp" */ = {
|
|
isa = XCConfigurationList;
|
|
buildConfigurations = (
|
|
A95D061C896899435D7681DC /* Debug */,
|
|
ED576A3E5FACC81E9E95AA23 /* Release */,
|
|
);
|
|
defaultConfigurationIsVisible = 0;
|
|
defaultConfigurationName = Debug;
|
|
};
|
|
0C5288A62A776D2D55345DF0 /* Build configuration list for PBXProject "MacTetherApp" */ = {
|
|
isa = XCConfigurationList;
|
|
buildConfigurations = (
|
|
A601B9B6C923845A753ABA8D /* Debug */,
|
|
405AB20151E495DF641A394F /* Release */,
|
|
);
|
|
defaultConfigurationIsVisible = 0;
|
|
defaultConfigurationName = Debug;
|
|
};
|
|
/* End XCConfigurationList section */
|
|
|
|
/* Begin XCLocalSwiftPackageReference section */
|
|
AECCD2CEB9003CD2BFF2B541 /* XCLocalSwiftPackageReference "../TetherKit" */ = {
|
|
isa = XCLocalSwiftPackageReference;
|
|
relativePath = ../TetherKit;
|
|
};
|
|
/* End XCLocalSwiftPackageReference section */
|
|
|
|
/* Begin XCSwiftPackageProductDependency section */
|
|
7A65056F38679ECD9498103E /* TetherKit */ = {
|
|
isa = XCSwiftPackageProductDependency;
|
|
productName = TetherKit;
|
|
};
|
|
/* End XCSwiftPackageProductDependency section */
|
|
};
|
|
rootObject = 75142B138CD13CB28DFE8614 /* Project object */;
|
|
}
|