diff --git a/bitchat.xcodeproj/project.pbxproj b/bitchat.xcodeproj/project.pbxproj index 3b59b2f9..72ab5d37 100644 --- a/bitchat.xcodeproj/project.pbxproj +++ b/bitchat.xcodeproj/project.pbxproj @@ -10,9 +10,10 @@ 0245710AEAA58AD0A1425234 /* OptimizedBloomFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB043CA5EEB9AC8B07D61E97 /* OptimizedBloomFilter.swift */; }; 0DAFF1DDE9BA83FF648D5AB3 /* BitchatMessageTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FA8FF26ABDC1C642A8C7AE5 /* BitchatMessageTests.swift */; }; 10E68BB889356219189E38EC /* BitchatApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF625BB3AD919322C01A46B2 /* BitchatApp.swift */; }; + 17901751FD8010AFC8E750F2 /* bitchatShareExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 61F92EBA29C47C0FCC482F1F /* bitchatShareExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 1D9674FA5F998503831DC281 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A08E03AA0C63E97C91749AEC /* ContentView.swift */; }; 1F48A8CEEE9399D1EBD08F0C /* OptimizedBloomFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB043CA5EEB9AC8B07D61E97 /* OptimizedBloomFilter.swift */; }; - 230B11C5BF035D35638B21C8 /* PasswordProtectedRoomTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB12482E4AD78B861C538449 /* PasswordProtectedRoomTests.swift */; }; + 24F17B1446E13F42652B7B08 /* PasswordProtectedChannelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 036A1A705AAF9EC21F4354BE /* PasswordProtectedChannelTests.swift */; }; 2E71E320EA921498C57E023B /* BitchatMessageTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FA8FF26ABDC1C642A8C7AE5 /* BitchatMessageTests.swift */; }; 4274B6016F755946FBF2513E /* MessageRetentionService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67A85BFDDE65B4CD8BDF6DDB /* MessageRetentionService.swift */; }; 4B747085D07A1BCE0F5BA612 /* BinaryProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2136C3E22D02D4A8DBE7EAB /* BinaryProtocol.swift */; }; @@ -32,7 +33,10 @@ 8F0BFC2D2B2A5E7B70C3B485 /* BinaryProtocolTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53D535D9CE0B875F47402290 /* BinaryProtocolTests.swift */; }; 8F737CE0435792CC2AD65FCB /* KeychainManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 136696FC4436A02D98CE6A77 /* KeychainManager.swift */; }; 923027D6F2F417AFA2488127 /* BitchatProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 229F17B68CFF7AB1BC91C847 /* BitchatProtocol.swift */; }; + 9269B4230187A9EA969BEDB7 /* PasswordProtectedChannelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 036A1A705AAF9EC21F4354BE /* PasswordProtectedChannelTests.swift */; }; 92D34E7A07C990C8A815B0CE /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A08E03AA0C63E97C91749AEC /* ContentView.swift */; }; + 97BC7E9FAB24FFE643DB5EB2 /* bitchatShareExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 61F92EBA29C47C0FCC482F1F /* bitchatShareExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 9C7D287C8E67AAE576A5ECB7 /* ShareViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1B378C16594575FCC7F9C75 /* ShareViewController.swift */; }; ABAF130D88561F4A646F0430 /* AppInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 763E0DBA9492A654FC0CDCB9 /* AppInfoView.swift */; }; AD11E46940D742AEAF547EB2 /* AppInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 763E0DBA9492A654FC0CDCB9 /* AppInfoView.swift */; }; ADC66F95FBD513B10411ADB3 /* MessagePaddingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DE9CDF66D4E52D268851048 /* MessagePaddingTests.swift */; }; @@ -49,7 +53,6 @@ DDA1DFAB1FF7AADE52DC0F53 /* EncryptionService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DC1563390A15C042D059CF9 /* EncryptionService.swift */; }; F00B713D5053617FB5F3F1BE /* MessagePaddingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DE9CDF66D4E52D268851048 /* MessagePaddingTests.swift */; }; F455F011B3B648ADA233F998 /* BinaryProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2136C3E22D02D4A8DBE7EAB /* BinaryProtocol.swift */; }; - F4A689F5F34125AE1BFD5599 /* PasswordProtectedRoomTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB12482E4AD78B861C538449 /* PasswordProtectedRoomTests.swift */; }; FB8819B4C84FAFEF5C36B216 /* KeychainManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 136696FC4436A02D98CE6A77 /* KeychainManager.swift */; }; /* End PBXBuildFile section */ @@ -61,6 +64,20 @@ remoteGlobalIDString = AF077EA0474EDEDE2C72716C; remoteInfo = bitchat_iOS; }; + DCB3AD9121A64769FAD7BAD0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 475D96681D0EA0AE57A4E06E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 57CA17A36A2532A6CFF367BB; + remoteInfo = bitchatShareExtension; + }; + E35E7AF9854A2E72452DD34F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 475D96681D0EA0AE57A4E06E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 57CA17A36A2532A6CFF367BB; + remoteInfo = bitchatShareExtension; + }; FF470234EF8C6BB8865B80B5 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 475D96681D0EA0AE57A4E06E /* Project object */; @@ -70,7 +87,33 @@ }; /* End PBXContainerItemProxy section */ +/* Begin PBXCopyFilesBuildPhase section */ + 1AE5E5D867B14EFDBE2C8889 /* Embed Foundation Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + 97BC7E9FAB24FFE643DB5EB2 /* bitchatShareExtension.appex in Embed Foundation Extensions */, + ); + name = "Embed Foundation Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; + B6C356449BAE4E0F650565D1 /* Embed Foundation Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + 17901751FD8010AFC8E750F2 /* bitchatShareExtension.appex in Embed Foundation Extensions */, + ); + name = "Embed Foundation Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + /* Begin PBXFileReference section */ + 036A1A705AAF9EC21F4354BE /* PasswordProtectedChannelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasswordProtectedChannelTests.swift; sourceTree = ""; }; 03C57F452B55FD0FD8F51421 /* bitchatTests_macOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = bitchatTests_macOS.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 12B9C3EDF3BC73D3BC106DA4 /* DeliveryTracker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeliveryTracker.swift; sourceTree = ""; }; 136696FC4436A02D98CE6A77 /* KeychainManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeychainManager.swift; sourceTree = ""; }; @@ -78,9 +121,13 @@ 229F17B68CFF7AB1BC91C847 /* BitchatProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BitchatProtocol.swift; sourceTree = ""; }; 32F149C43D1915831B60FE09 /* CompressionUtil.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompressionUtil.swift; sourceTree = ""; }; 3448F84BF86A42A3CC4A9379 /* NotificationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationService.swift; sourceTree = ""; }; + 3668EEBB42FD4A24D5D83B7B /* bitchatShareExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = bitchatShareExtension.entitlements; sourceTree = ""; }; + 3A556661F74B7D5AE2F0521B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; 3A69677D382F1C3D5ED03F7D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 3FA8FF26ABDC1C642A8C7AE5 /* BitchatMessageTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BitchatMessageTests.swift; sourceTree = ""; }; + 527EB217EFDFAD4CF1C91F07 /* bitchat.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = bitchat.entitlements; sourceTree = ""; }; 53D535D9CE0B875F47402290 /* BinaryProtocolTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BinaryProtocolTests.swift; sourceTree = ""; }; + 61F92EBA29C47C0FCC482F1F /* bitchatShareExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = bitchatShareExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; 67A85BFDDE65B4CD8BDF6DDB /* MessageRetentionService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageRetentionService.swift; sourceTree = ""; }; 6DC1563390A15C042D059CF9 /* EncryptionService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EncryptionService.swift; sourceTree = ""; }; 763E0DBA9492A654FC0CDCB9 /* AppInfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppInfoView.swift; sourceTree = ""; }; @@ -91,6 +138,7 @@ A2136C3E22D02D4A8DBE7EAB /* BinaryProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BinaryProtocol.swift; sourceTree = ""; }; AA4D7595A613F7ED3B386132 /* MessageRetryService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageRetryService.swift; sourceTree = ""; }; C0DB1DE27F0AAB5092663E8E /* bitchatTests_iOS.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = bitchatTests_iOS.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + C1B378C16594575FCC7F9C75 /* ShareViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareViewController.swift; sourceTree = ""; }; CB043CA5EEB9AC8B07D61E97 /* OptimizedBloomFilter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OptimizedBloomFilter.swift; sourceTree = ""; }; D5C3D880FF8AE1673B20E1E3 /* BluetoothMeshService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BluetoothMeshService.swift; sourceTree = ""; }; D69A18D27F9A565FD6041E12 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; @@ -98,7 +146,6 @@ EA706D8E5097785414646A8E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; ED176FF3B274E35C2D827894 /* BatteryOptimizer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BatteryOptimizer.swift; sourceTree = ""; }; EF625BB3AD919322C01A46B2 /* BitchatApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BitchatApp.swift; sourceTree = ""; }; - FB12482E4AD78B861C538449 /* PasswordProtectedRoomTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasswordProtectedRoomTests.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXGroup section */ @@ -106,6 +153,7 @@ isa = PBXGroup; children = ( 2F82C5FC8433F4064F079D1F /* bitchat */, + A2E8C336FA1ADBEC03261DFD /* bitchatShareExtension */, C3D98EB3E1B455E321F519F4 /* bitchatTests */, 9F37F9F2C353B58AC809E93B /* Products */, ); @@ -115,6 +163,7 @@ isa = PBXGroup; children = ( 3A69677D382F1C3D5ED03F7D /* Assets.xcassets */, + 527EB217EFDFAD4CF1C91F07 /* bitchat.entitlements */, EF625BB3AD919322C01A46B2 /* BitchatApp.swift */, EA706D8E5097785414646A8E /* Info.plist */, ADD53BCDA233C02E53458926 /* Protocols */, @@ -149,12 +198,23 @@ children = ( 997D512074C64904D75DDD40 /* bitchat.app */, 7EEBDA723E1CFD88758DA4AC /* bitchat.app */, + 61F92EBA29C47C0FCC482F1F /* bitchatShareExtension.appex */, C0DB1DE27F0AAB5092663E8E /* bitchatTests_iOS.xctest */, 03C57F452B55FD0FD8F51421 /* bitchatTests_macOS.xctest */, ); name = Products; sourceTree = ""; }; + A2E8C336FA1ADBEC03261DFD /* bitchatShareExtension */ = { + isa = PBXGroup; + children = ( + 3668EEBB42FD4A24D5D83B7B /* bitchatShareExtension.entitlements */, + 3A556661F74B7D5AE2F0521B /* Info.plist */, + C1B378C16594575FCC7F9C75 /* ShareViewController.swift */, + ); + path = bitchatShareExtension; + sourceTree = ""; + }; A55126E93155456CAA8D6656 /* Views */ = { isa = PBXGroup; children = ( @@ -181,7 +241,7 @@ 1EB3A8FE16333ED12FCB8ACB /* BloomFilterTests.swift */, D69A18D27F9A565FD6041E12 /* Info.plist */, 8DE9CDF66D4E52D268851048 /* MessagePaddingTests.swift */, - FB12482E4AD78B861C538449 /* PasswordProtectedRoomTests.swift */, + 036A1A705AAF9EC21F4354BE /* PasswordProtectedChannelTests.swift */, ); path = bitchatTests; sourceTree = ""; @@ -209,10 +269,12 @@ buildPhases = ( 137ABE739BF20ACDDF8CC605 /* Sources */, 0214973A876129753D39EB47 /* Resources */, + 1AE5E5D867B14EFDBE2C8889 /* Embed Foundation Extensions */, ); buildRules = ( ); dependencies = ( + D8120CFFA88B852C3D106FA6 /* PBXTargetDependency */, ); name = bitchat_macOS; packageProductDependencies = ( @@ -239,6 +301,23 @@ productReference = 03C57F452B55FD0FD8F51421 /* bitchatTests_macOS.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; + 57CA17A36A2532A6CFF367BB /* bitchatShareExtension */ = { + isa = PBXNativeTarget; + buildConfigurationList = E4EA6DC648DF55FF84032EB5 /* Build configuration list for PBXNativeTarget "bitchatShareExtension" */; + buildPhases = ( + 0A08E70F08F55FD5BA8C7EF3 /* Sources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = bitchatShareExtension; + packageProductDependencies = ( + ); + productName = bitchatShareExtension; + productReference = 61F92EBA29C47C0FCC482F1F /* bitchatShareExtension.appex */; + productType = "com.apple.product-type.app-extension"; + }; 6CB97DF2EA57234CB3E563B8 /* bitchatTests_iOS */ = { isa = PBXNativeTarget; buildConfigurationList = 38C4AF6313E5037F25CEF30B /* Build configuration list for PBXNativeTarget "bitchatTests_iOS" */; @@ -263,10 +342,12 @@ buildPhases = ( 4E49E34F00154C051AE90FED /* Sources */, CD6E8F32BC38357473954F97 /* Resources */, + B6C356449BAE4E0F650565D1 /* Embed Foundation Extensions */, ); buildRules = ( ); dependencies = ( + 6EB655BA5DB11909C1DEC460 /* PBXTargetDependency */, ); name = bitchat_iOS; packageProductDependencies = ( @@ -287,6 +368,9 @@ 0576A29205865664C0937536 = { ProvisioningStyle = Automatic; }; + 57CA17A36A2532A6CFF367BB = { + ProvisioningStyle = Automatic; + }; AF077EA0474EDEDE2C72716C = { ProvisioningStyle = Automatic; }; @@ -305,6 +389,7 @@ projectDirPath = ""; projectRoot = ""; targets = ( + 57CA17A36A2532A6CFF367BB /* bitchatShareExtension */, 6CB97DF2EA57234CB3E563B8 /* bitchatTests_iOS */, 47FF23248747DD7CB666CB91 /* bitchatTests_macOS */, AF077EA0474EDEDE2C72716C /* bitchat_iOS */, @@ -333,6 +418,14 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 0A08E70F08F55FD5BA8C7EF3 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9C7D287C8E67AAE576A5ECB7 /* ShareViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 137ABE739BF20ACDDF8CC605 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -387,7 +480,7 @@ 2E71E320EA921498C57E023B /* BitchatMessageTests.swift in Sources */, C91FDE97070433E6CFE95C55 /* BloomFilterTests.swift in Sources */, ADC66F95FBD513B10411ADB3 /* MessagePaddingTests.swift in Sources */, - F4A689F5F34125AE1BFD5599 /* PasswordProtectedRoomTests.swift in Sources */, + 24F17B1446E13F42652B7B08 /* PasswordProtectedChannelTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -399,7 +492,7 @@ 0DAFF1DDE9BA83FF648D5AB3 /* BitchatMessageTests.swift in Sources */, 846E2B446E36639159704730 /* BloomFilterTests.swift in Sources */, F00B713D5053617FB5F3F1BE /* MessagePaddingTests.swift in Sources */, - 230B11C5BF035D35638B21C8 /* PasswordProtectedRoomTests.swift in Sources */, + 9269B4230187A9EA969BEDB7 /* PasswordProtectedChannelTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -411,6 +504,16 @@ target = 0576A29205865664C0937536 /* bitchat_macOS */; targetProxy = FF470234EF8C6BB8865B80B5 /* PBXContainerItemProxy */; }; + 6EB655BA5DB11909C1DEC460 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 57CA17A36A2532A6CFF367BB /* bitchatShareExtension */; + targetProxy = E35E7AF9854A2E72452DD34F /* PBXContainerItemProxy */; + }; + D8120CFFA88B852C3D106FA6 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 57CA17A36A2532A6CFF367BB /* bitchatShareExtension */; + targetProxy = DCB3AD9121A64769FAD7BAD0 /* PBXContainerItemProxy */; + }; D8C09F21DB7DC06E8E672C21 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF077EA0474EDEDE2C72716C /* bitchat_iOS */; @@ -476,6 +579,28 @@ }; name = Release; }; + 3DCF45111852FB2AEBE05E31 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGNING_ALLOWED = YES; + CODE_SIGNING_REQUIRED = YES; + CODE_SIGN_ENTITLEMENTS = bitchatShareExtension/bitchatShareExtension.entitlements; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = L3N5LHJD5Y; + INFOPLIST_FILE = bitchatShareExtension/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = chat.bitchat.ShareExtension; + SDKROOT = iphoneos; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; 702E7395723CADA4B830F4A9 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -483,6 +608,7 @@ ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES; CODE_SIGNING_ALLOWED = YES; CODE_SIGNING_REQUIRED = YES; + CODE_SIGN_ENTITLEMENTS = bitchat/bitchat.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = L3N5LHJD5Y; @@ -497,9 +623,12 @@ PRODUCT_BUNDLE_IDENTIFIER = chat.bitchat; PRODUCT_NAME = bitchat; SDKROOT = iphoneos; - SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; + TARGETED_DEVICE_FAMILY = 1; }; name = Debug; }; @@ -529,6 +658,7 @@ ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES; CODE_SIGNING_ALLOWED = YES; CODE_SIGNING_REQUIRED = YES; + CODE_SIGN_ENTITLEMENTS = bitchat/bitchat.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = L3N5LHJD5Y; @@ -543,9 +673,12 @@ PRODUCT_BUNDLE_IDENTIFIER = chat.bitchat; PRODUCT_NAME = bitchat; SDKROOT = iphoneos; - SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; + TARGETED_DEVICE_FAMILY = 1; }; name = Release; }; @@ -556,6 +689,7 @@ ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES; CODE_SIGNING_ALLOWED = YES; CODE_SIGNING_REQUIRED = YES; + CODE_SIGN_ENTITLEMENTS = bitchat/bitchat.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; ENABLE_PREVIEWS = YES; @@ -639,6 +773,7 @@ ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES; CODE_SIGNING_ALLOWED = YES; CODE_SIGNING_REQUIRED = YES; + CODE_SIGN_ENTITLEMENTS = bitchat/bitchat.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; ENABLE_PREVIEWS = YES; @@ -722,6 +857,28 @@ }; name = Debug; }; + DAC5E82049F8A97360BE63D6 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGNING_ALLOWED = YES; + CODE_SIGNING_REQUIRED = YES; + CODE_SIGN_ENTITLEMENTS = bitchatShareExtension/bitchatShareExtension.entitlements; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = L3N5LHJD5Y; + INFOPLIST_FILE = bitchatShareExtension/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = chat.bitchat.ShareExtension; + SDKROOT = iphoneos; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -770,6 +927,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; + E4EA6DC648DF55FF84032EB5 /* Build configuration list for PBXNativeTarget "bitchatShareExtension" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DAC5E82049F8A97360BE63D6 /* Debug */, + 3DCF45111852FB2AEBE05E31 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; /* End XCConfigurationList section */ }; rootObject = 475D96681D0EA0AE57A4E06E /* Project object */; diff --git a/bitchat/BitchatApp.swift b/bitchat/BitchatApp.swift index efc1d6f6..4bfa649d 100644 --- a/bitchat/BitchatApp.swift +++ b/bitchat/BitchatApp.swift @@ -35,6 +35,12 @@ struct BitchatApp: App { .onOpenURL { url in handleURL(url) } + #if os(iOS) + .onReceive(NotificationCenter.default.publisher(for: UIApplication.didBecomeActiveNotification)) { _ in + // Check for shared content when app becomes active + checkForSharedContent() + } + #endif } #if os(macOS) .windowStyle(.hiddenTitleBar) @@ -51,9 +57,14 @@ struct BitchatApp: App { private func checkForSharedContent() { // Check app group for shared content from extension - guard let userDefaults = UserDefaults(suiteName: "group.chat.bitchat"), - let sharedContent = userDefaults.string(forKey: "sharedContent"), + guard let userDefaults = UserDefaults(suiteName: "group.chat.bitchat") else { + print("Failed to access app group UserDefaults") + return + } + + guard let sharedContent = userDefaults.string(forKey: "sharedContent"), let sharedDate = userDefaults.object(forKey: "sharedContentDate") as? Date else { + print("No shared content found in UserDefaults") return } diff --git a/bitchat/Info.plist b/bitchat/Info.plist index 20ca8dfe..6b60e722 100644 --- a/bitchat/Info.plist +++ b/bitchat/Info.plist @@ -40,16 +40,5 @@ UIInterfaceOrientationPortrait - CFBundleURLTypes - - - CFBundleURLSchemes - - bitchat - - CFBundleURLName - chat.bitchat - - diff --git a/bitchatShareExtension/ShareViewController.swift b/bitchatShareExtension/ShareViewController.swift index c323653a..27a65c84 100644 --- a/bitchatShareExtension/ShareViewController.swift +++ b/bitchatShareExtension/ShareViewController.swift @@ -35,46 +35,66 @@ class ShareViewController: SLComposeServiceViewController { } override func didSelectPost() { - // Get the shared content + // If we have content text from the compose view, handle it directly + if let text = contentText, !text.isEmpty { + handleSharedText(text) + // Complete the share action after saving + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { + self.extensionContext?.completeRequest(returningItems: nil, completionHandler: nil) + } + return + } + + // Otherwise, process attachments guard let extensionItem = extensionContext?.inputItems.first as? NSExtensionItem else { self.extensionContext?.completeRequest(returningItems: nil, completionHandler: nil) return } + var hasProcessedContent = false + let group = DispatchGroup() + // Process different types of shared content for itemProvider in extensionItem.attachments ?? [] { if itemProvider.hasItemConformingToTypeIdentifier(UTType.plainText.identifier) { + group.enter() itemProvider.loadItem(forTypeIdentifier: UTType.plainText.identifier, options: nil) { [weak self] (item, error) in if let text = item as? String { self?.handleSharedText(text) + hasProcessedContent = true } + group.leave() } } else if itemProvider.hasItemConformingToTypeIdentifier(UTType.url.identifier) { + group.enter() itemProvider.loadItem(forTypeIdentifier: UTType.url.identifier, options: nil) { [weak self] (item, error) in if let url = item as? URL { self?.handleSharedURL(url) + hasProcessedContent = true } + group.leave() } } else if itemProvider.hasItemConformingToTypeIdentifier(UTType.image.identifier) { + group.enter() itemProvider.loadItem(forTypeIdentifier: UTType.image.identifier, options: nil) { [weak self] (item, error) in if let image = item as? UIImage { self?.handleSharedImage(image) + hasProcessedContent = true } else if let data = item as? Data { if let image = UIImage(data: data) { self?.handleSharedImage(image) + hasProcessedContent = true } } + group.leave() } } } - // If we have content text, share it - if let text = contentText, !text.isEmpty { - handleSharedText(text) + // Complete after all items are processed + group.notify(queue: .main) { + self.extensionContext?.completeRequest(returningItems: nil, completionHandler: nil) } - - // Complete the share action - self.extensionContext?.completeRequest(returningItems: nil, completionHandler: nil) } override func configurationItems() -> [Any]! { @@ -106,12 +126,17 @@ class ShareViewController: SLComposeServiceViewController { private func saveToSharedDefaults(content: String, type: String) { // Use app groups to share data between extension and main app - if let userDefaults = UserDefaults(suiteName: "group.chat.bitchat") { - userDefaults.set(content, forKey: "sharedContent") - userDefaults.set(type, forKey: "sharedContentType") - userDefaults.set(Date(), forKey: "sharedContentDate") - userDefaults.synchronize() + guard let userDefaults = UserDefaults(suiteName: "group.chat.bitchat") else { + print("ShareExtension: Failed to access app group UserDefaults") + return } + + userDefaults.set(content, forKey: "sharedContent") + userDefaults.set(type, forKey: "sharedContentType") + userDefaults.set(Date(), forKey: "sharedContentDate") + userDefaults.synchronize() + + print("ShareExtension: Saved content of type \(type) to shared defaults") } private func openMainApp() {