diff --git a/Example/AccessoryKit/ViewController.swift b/Example/AccessoryKit/ViewController.swift index 25ef3ff..73ee736 100644 --- a/Example/AccessoryKit/ViewController.swift +++ b/Example/AccessoryKit/ViewController.swift @@ -32,7 +32,7 @@ class ViewController: UIViewController { KeyboardAccessoryButton(type: .delete, tapHandler: {}), KeyboardAccessoryButton(type: .item, tapHandler: {}), KeyboardAccessoryButton(type: .quote, tapHandler: {}), - KeyboardAccessoryButton(type: .link, tapHandler: {}), + KeyboardAccessoryButton(type: .link, menu: createInsertMenu()), KeyboardAccessoryButton(type: .image, tapHandler: {}), ] accessoryView = KeyboardAccessoryView( @@ -73,6 +73,28 @@ class ViewController: UIViewController { accessoryView.setEnabled(textView.undoManager?.canRedo ?? false, at: 2) } + private func createInsertMenu() -> UIMenu { + return UIMenu( + title: "", + image: nil, + identifier: nil, + options: .displayInline, + children: [ + UIAction( + title: "Insert link", + image: UIImage(systemName: "link"), + handler: { _ in }), + UIAction( + title: "Insert image", + image: UIImage(systemName: "photo"), + handler: { _ in }), + UIAction( + title: "Insert math formula", + image: UIImage(systemName: "function"), + handler: { _ in }), + ]) + } + } extension ViewController: KeyboardAccessoryViewDelegate { diff --git a/Example/Podfile.lock b/Example/Podfile.lock index 0a1b86e..ac03485 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -1,5 +1,5 @@ PODS: - - AccessoryKit (0.5.0) + - AccessoryKit (0.5.2) DEPENDENCIES: - AccessoryKit (from `../`) @@ -9,8 +9,8 @@ EXTERNAL SOURCES: :path: "../" SPEC CHECKSUMS: - AccessoryKit: 67e36b8d959f148e8fa3fe424137acbefe16bb9b + AccessoryKit: 9bf5430dd96b6554119e3643e3134e5ab5e85f22 PODFILE CHECKSUM: 71ba08049996c0cee05530889ad335543ac96aac -COCOAPODS: 1.9.3 +COCOAPODS: 1.10.1 diff --git a/Example/Pods/Local Podspecs/AccessoryKit.podspec.json b/Example/Pods/Local Podspecs/AccessoryKit.podspec.json index 6a709a9..ea618e3 100644 --- a/Example/Pods/Local Podspecs/AccessoryKit.podspec.json +++ b/Example/Pods/Local Podspecs/AccessoryKit.podspec.json @@ -1,6 +1,6 @@ { "name": "AccessoryKit", - "version": "0.5.0", + "version": "0.5.2", "summary": "A customizable, expandable, and easy-to-use input accessory view component for iOS.", "description": "A customizable, expandable, and easy-to-use input accessory view component for iOS.", "homepage": "https://github.com/xnth97/AccessoryKit", @@ -13,7 +13,7 @@ }, "source": { "git": "https://github.com/xnth97/AccessoryKit.git", - "tag": "0.5.0" + "tag": "0.5.2" }, "platforms": { "ios": "13.0" diff --git a/Example/Pods/Manifest.lock b/Example/Pods/Manifest.lock index 0a1b86e..ac03485 100644 --- a/Example/Pods/Manifest.lock +++ b/Example/Pods/Manifest.lock @@ -1,5 +1,5 @@ PODS: - - AccessoryKit (0.5.0) + - AccessoryKit (0.5.2) DEPENDENCIES: - AccessoryKit (from `../`) @@ -9,8 +9,8 @@ EXTERNAL SOURCES: :path: "../" SPEC CHECKSUMS: - AccessoryKit: 67e36b8d959f148e8fa3fe424137acbefe16bb9b + AccessoryKit: 9bf5430dd96b6554119e3643e3134e5ab5e85f22 PODFILE CHECKSUM: 71ba08049996c0cee05530889ad335543ac96aac -COCOAPODS: 1.9.3 +COCOAPODS: 1.10.1 diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj index e7659b1..427588e 100644 --- a/Example/Pods/Pods.xcodeproj/project.pbxproj +++ b/Example/Pods/Pods.xcodeproj/project.pbxproj @@ -7,35 +7,35 @@ objects = { /* Begin PBXBuildFile section */ + 0F8D17E635A2D8154525CED75EC36B90 /* Pods-AccessoryKit_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B7CE798F91A678A2A35CBB0F83D83F9 /* Pods-AccessoryKit_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3F03271BA5CC22F9F9D5A1C1028F4048 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAB6F611E86A4758835A715E4B4184F6 /* Foundation.framework */; }; 43463EF2B29C8DF57A7C730FCE62DFCB /* AccessoryKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 97DE819D29EB3B2D6657B91535B4C065 /* AccessoryKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 550B8D5E6F9A4D1EB186832F89369C8A /* AccessoryKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = EAA91A6A2B7E97048F6B3A41706482A0 /* AccessoryKit-dummy.m */; }; - 582AD00A9B6F935F2E34ADCB4FACDDA4 /* Pods-AccessoryKit_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B7D831BDB2C7700CA23F5EA0D2260375 /* Pods-AccessoryKit_Tests-dummy.m */; }; - 6C64C3290AACF0B08E593E3D564A3B84 /* Pods-AccessoryKit_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = CAFE1F59045BCAE59A5B363FAA1D38E2 /* Pods-AccessoryKit_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7D4E6FE70AC8D47F8572AEE0A9D34569 /* Pods-AccessoryKit_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B7CE798F91A678A2A35CBB0F83D83F9 /* Pods-AccessoryKit_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 83F1FF7CD2D9DE0D9A5893E396453ECF /* Pods-AccessoryKit_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4468F258C7B3E09237D7F013A78F1305 /* Pods-AccessoryKit_Example-dummy.m */; }; + 5B6C509B961BB82E932435A8D8B21682 /* Pods-AccessoryKit_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B7D831BDB2C7700CA23F5EA0D2260375 /* Pods-AccessoryKit_Tests-dummy.m */; }; + 604809ADF33B38E209E7370442639075 /* Pods-AccessoryKit_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4468F258C7B3E09237D7F013A78F1305 /* Pods-AccessoryKit_Example-dummy.m */; }; + 6F3915ACD08E9729916DC18905A24348 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAB6F611E86A4758835A715E4B4184F6 /* Foundation.framework */; }; 84F9432D7D007A491CF68D533311E790 /* KeyboardAccessoryButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8BEE9F631693D5F34978AA165C5CAE1 /* KeyboardAccessoryButton.swift */; }; + 8C851205F6565256EF48A277AED60965 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D245E0514AAC1A2B9A6D5EA2F383E90F /* UIKit.framework */; }; 8F79BE0C08F31033FFA9A00D699FA8E3 /* KeyboardAccessoryButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3FDDED5B696039BA5B70C7B0F0B9EC0 /* KeyboardAccessoryButtonView.swift */; }; - BE18056BBA1F021690940BCFC0BA1238 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 436BAA54A31999B53B3CC7115C55FE50 /* Foundation.framework */; }; - C8D97E1B92C301502F42CCAAEDB7BEA8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 436BAA54A31999B53B3CC7115C55FE50 /* Foundation.framework */; }; + A9443C961BAC68FB849C8710672CB86E /* Pods-AccessoryKit_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = CAFE1F59045BCAE59A5B363FAA1D38E2 /* Pods-AccessoryKit_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; CAFA411A2B52BFD791011787FBE4FA17 /* KeyboardAccessoryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5D32E370F7C66976C90675691A37A9C /* KeyboardAccessoryView.swift */; }; - D3BE44BA14A16A5BC86672D57DF5E894 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 436BAA54A31999B53B3CC7115C55FE50 /* Foundation.framework */; }; - E46EA563CAD0C6F40381C3182CB1988F /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 312B988EF117AE4DE76A268D970131FE /* UIKit.framework */; }; + F886E801763FFF4E9D7AEA55504BAF91 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAB6F611E86A4758835A715E4B4184F6 /* Foundation.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 1570880E249F035205D23A6A34611B2C /* PBXContainerItemProxy */ = { + 2A54EC90D829C355719080E458CC13BC /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 6425C82BABEC4581D5A9A5C1B054D60B; - remoteInfo = AccessoryKit; + remoteGlobalIDString = BF0BE039C8FE8B1041CE952EFC786CC4; + remoteInfo = "Pods-AccessoryKit_Example"; }; - BB0E281A5B8F55E2022A898E9D78A0CB /* PBXContainerItemProxy */ = { + 609FC00149CB4433B6AB968A1DE86FF6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = BF0BE039C8FE8B1041CE952EFC786CC4; - remoteInfo = "Pods-AccessoryKit_Example"; + remoteGlobalIDString = 6425C82BABEC4581D5A9A5C1B054D60B; + remoteInfo = AccessoryKit; }; /* End PBXContainerItemProxy section */ @@ -44,8 +44,6 @@ 1045A4116C890857285AFAE309AF7972 /* Pods-AccessoryKit_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AccessoryKit_Tests.release.xcconfig"; sourceTree = ""; }; 17B7DA167B9F6EF4A087B2C9A3356825 /* Pods-AccessoryKit_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AccessoryKit_Tests.debug.xcconfig"; sourceTree = ""; }; 19708C8C0431473B36893F947DDCDFE9 /* Pods-AccessoryKit_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-AccessoryKit_Example.modulemap"; sourceTree = ""; }; - 312B988EF117AE4DE76A268D970131FE /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; - 436BAA54A31999B53B3CC7115C55FE50 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 4468F258C7B3E09237D7F013A78F1305 /* Pods-AccessoryKit_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-AccessoryKit_Example-dummy.m"; sourceTree = ""; }; 46066ACBDDC54227F94D40CB55301B57 /* AccessoryKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "AccessoryKit-Info.plist"; sourceTree = ""; }; 602DF41261B2418A936B86806A46B605 /* Pods-AccessoryKit_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-AccessoryKit_Example-acknowledgements.plist"; sourceTree = ""; }; @@ -69,9 +67,11 @@ CAFE1F59045BCAE59A5B363FAA1D38E2 /* Pods-AccessoryKit_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-AccessoryKit_Tests-umbrella.h"; sourceTree = ""; }; CC419F4F4CE9852480C54BFD77889C9D /* Pods-AccessoryKit_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AccessoryKit_Example.release.xcconfig"; sourceTree = ""; }; D0BE8A169855CA7954F7E8D27AD1EC1C /* Pods-AccessoryKit_Tests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-AccessoryKit_Tests-Info.plist"; sourceTree = ""; }; + D245E0514AAC1A2B9A6D5EA2F383E90F /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; E6254BA1FE4691F89D24EF38016B0CB4 /* Pods-AccessoryKit_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-AccessoryKit_Tests.modulemap"; sourceTree = ""; }; E8032F0EDAD4EA8B334F6ADDAFE7ECDF /* AccessoryKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AccessoryKit-prefix.pch"; sourceTree = ""; }; EAA91A6A2B7E97048F6B3A41706482A0 /* AccessoryKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AccessoryKit-dummy.m"; sourceTree = ""; }; + EAB6F611E86A4758835A715E4B4184F6 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; EB8E72FDE1444CDEFB8DEC9EFD439980 /* Pods_AccessoryKit_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_AccessoryKit_Tests.framework; path = "Pods-AccessoryKit_Tests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; F7D42910332CF34980F117284C91E1BC /* Pods_AccessoryKit_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_AccessoryKit_Example.framework; path = "Pods-AccessoryKit_Example.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; FB578383BB46AAC42D103F52F820EF7A /* AccessoryKit.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = AccessoryKit.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; @@ -79,19 +79,19 @@ /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 3DA400545778F25418B4539FEE00CD6B /* Frameworks */ = { + 58CC854912893FBB25E9D548479AFF22 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C8D97E1B92C301502F42CCAAEDB7BEA8 /* Foundation.framework in Frameworks */, + F886E801763FFF4E9D7AEA55504BAF91 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 796A87A1EE96F1FA404F6837E7C75154 /* Frameworks */ = { + 7847A346E585EB63B0EC37698DCF277F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BE18056BBA1F021690940BCFC0BA1238 /* Foundation.framework in Frameworks */, + 3F03271BA5CC22F9F9D5A1C1028F4048 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -99,8 +99,8 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D3BE44BA14A16A5BC86672D57DF5E894 /* Foundation.framework in Frameworks */, - E46EA563CAD0C6F40381C3182CB1988F /* UIKit.framework in Frameworks */, + 6F3915ACD08E9729916DC18905A24348 /* Foundation.framework in Frameworks */, + 8C851205F6565256EF48A277AED60965 /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -110,7 +110,7 @@ 1628BF05B4CAFDCC3549A101F5A10A17 /* Frameworks */ = { isa = PBXGroup; children = ( - E2983683FD097A93297E2F5D4E382B36 /* iOS */, + 59DA5C1F72E1D5BABC43EACBA672C3BA /* iOS */, ); name = Frameworks; sourceTree = ""; @@ -139,6 +139,15 @@ path = "Example/Pods/Target Support Files/AccessoryKit"; sourceTree = ""; }; + 59DA5C1F72E1D5BABC43EACBA672C3BA /* iOS */ = { + isa = PBXGroup; + children = ( + EAB6F611E86A4758835A715E4B4184F6 /* Foundation.framework */, + D245E0514AAC1A2B9A6D5EA2F383E90F /* UIKit.framework */, + ); + name = iOS; + sourceTree = ""; + }; 79BD71FDCF16163CD87EE646BCB298C8 /* Development Pods */ = { isa = PBXGroup; children = ( @@ -224,39 +233,30 @@ path = ../..; sourceTree = ""; }; - E2983683FD097A93297E2F5D4E382B36 /* iOS */ = { - isa = PBXGroup; - children = ( - 436BAA54A31999B53B3CC7115C55FE50 /* Foundation.framework */, - 312B988EF117AE4DE76A268D970131FE /* UIKit.framework */, - ); - name = iOS; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 0A6FC326C3FB5F13137407C272F03EA9 /* Headers */ = { + 15098E43AE1C3A9DA91696D4930D32B1 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 7D4E6FE70AC8D47F8572AEE0A9D34569 /* Pods-AccessoryKit_Example-umbrella.h in Headers */, + 43463EF2B29C8DF57A7C730FCE62DFCB /* AccessoryKit-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 15098E43AE1C3A9DA91696D4930D32B1 /* Headers */ = { + 759CFD1918D6A42A5D139E84B35A2BF7 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 43463EF2B29C8DF57A7C730FCE62DFCB /* AccessoryKit-umbrella.h in Headers */, + A9443C961BAC68FB849C8710672CB86E /* Pods-AccessoryKit_Tests-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - C4FFB60908356510E74F3E8312DC1E30 /* Headers */ = { + 82B53B074E3ABE6476B3031F0F127F6A /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 6C64C3290AACF0B08E593E3D564A3B84 /* Pods-AccessoryKit_Tests-umbrella.h in Headers */, + 0F8D17E635A2D8154525CED75EC36B90 /* Pods-AccessoryKit_Example-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -265,17 +265,17 @@ /* Begin PBXNativeTarget section */ 4429B3F858C25B792149495E2F83775C /* Pods-AccessoryKit_Tests */ = { isa = PBXNativeTarget; - buildConfigurationList = D697A388781D03FC6426551167D4161D /* Build configuration list for PBXNativeTarget "Pods-AccessoryKit_Tests" */; + buildConfigurationList = E42A66C1403C4FCEDF1BB334452D1DF3 /* Build configuration list for PBXNativeTarget "Pods-AccessoryKit_Tests" */; buildPhases = ( - C4FFB60908356510E74F3E8312DC1E30 /* Headers */, - BB86B6228C9A3C892D2D64553F9D5F88 /* Sources */, - 3DA400545778F25418B4539FEE00CD6B /* Frameworks */, - 5D0217C3304A92AE165F68897B183E1B /* Resources */, + 759CFD1918D6A42A5D139E84B35A2BF7 /* Headers */, + 9237BBABC915C7B274C9B70F32C9E07E /* Sources */, + 58CC854912893FBB25E9D548479AFF22 /* Frameworks */, + 83B0A198353B4BD5A75C85A21990559F /* Resources */, ); buildRules = ( ); dependencies = ( - 42BE0137FE7A5A32D109B46162DAE9CC /* PBXTargetDependency */, + 19C10BDB0FF16A27E3D647869D6E974F /* PBXTargetDependency */, ); name = "Pods-AccessoryKit_Tests"; productName = "Pods-AccessoryKit_Tests"; @@ -302,17 +302,17 @@ }; BF0BE039C8FE8B1041CE952EFC786CC4 /* Pods-AccessoryKit_Example */ = { isa = PBXNativeTarget; - buildConfigurationList = CB0631D2B8EACFF9336CF28320FD2E96 /* Build configuration list for PBXNativeTarget "Pods-AccessoryKit_Example" */; + buildConfigurationList = C9E9D220C978C611FF4DBF2866E2E2E5 /* Build configuration list for PBXNativeTarget "Pods-AccessoryKit_Example" */; buildPhases = ( - 0A6FC326C3FB5F13137407C272F03EA9 /* Headers */, - 9E55E844324A2D2F51D2BF22F2885743 /* Sources */, - 796A87A1EE96F1FA404F6837E7C75154 /* Frameworks */, - A350C36593CCC0A137EE36B19F9F943D /* Resources */, + 82B53B074E3ABE6476B3031F0F127F6A /* Headers */, + 4B545F030E8E30879738EF3215BDB84E /* Sources */, + 7847A346E585EB63B0EC37698DCF277F /* Frameworks */, + B8F3DBFC8B3EE3DE52C0CC12A4D048BF /* Resources */, ); buildRules = ( ); dependencies = ( - 89E76BF02D53630C6497DED00EF5BCE3 /* PBXTargetDependency */, + A9824D22C46D235E94DCD597AE44C172 /* PBXTargetDependency */, ); name = "Pods-AccessoryKit_Example"; productName = "Pods-AccessoryKit_Example"; @@ -356,14 +356,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 5D0217C3304A92AE165F68897B183E1B /* Resources */ = { + 83B0A198353B4BD5A75C85A21990559F /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - A350C36593CCC0A137EE36B19F9F943D /* Resources */ = { + B8F3DBFC8B3EE3DE52C0CC12A4D048BF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -373,58 +373,58 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 61B475329EE5E881EED37992E5F4AE40 /* Sources */ = { + 4B545F030E8E30879738EF3215BDB84E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 550B8D5E6F9A4D1EB186832F89369C8A /* AccessoryKit-dummy.m in Sources */, - 84F9432D7D007A491CF68D533311E790 /* KeyboardAccessoryButton.swift in Sources */, - 8F79BE0C08F31033FFA9A00D699FA8E3 /* KeyboardAccessoryButtonView.swift in Sources */, - CAFA411A2B52BFD791011787FBE4FA17 /* KeyboardAccessoryView.swift in Sources */, + 604809ADF33B38E209E7370442639075 /* Pods-AccessoryKit_Example-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 9E55E844324A2D2F51D2BF22F2885743 /* Sources */ = { + 61B475329EE5E881EED37992E5F4AE40 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 83F1FF7CD2D9DE0D9A5893E396453ECF /* Pods-AccessoryKit_Example-dummy.m in Sources */, + 550B8D5E6F9A4D1EB186832F89369C8A /* AccessoryKit-dummy.m in Sources */, + 84F9432D7D007A491CF68D533311E790 /* KeyboardAccessoryButton.swift in Sources */, + 8F79BE0C08F31033FFA9A00D699FA8E3 /* KeyboardAccessoryButtonView.swift in Sources */, + CAFA411A2B52BFD791011787FBE4FA17 /* KeyboardAccessoryView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - BB86B6228C9A3C892D2D64553F9D5F88 /* Sources */ = { + 9237BBABC915C7B274C9B70F32C9E07E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 582AD00A9B6F935F2E34ADCB4FACDDA4 /* Pods-AccessoryKit_Tests-dummy.m in Sources */, + 5B6C509B961BB82E932435A8D8B21682 /* Pods-AccessoryKit_Tests-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 42BE0137FE7A5A32D109B46162DAE9CC /* PBXTargetDependency */ = { + 19C10BDB0FF16A27E3D647869D6E974F /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "Pods-AccessoryKit_Example"; target = BF0BE039C8FE8B1041CE952EFC786CC4 /* Pods-AccessoryKit_Example */; - targetProxy = BB0E281A5B8F55E2022A898E9D78A0CB /* PBXContainerItemProxy */; + targetProxy = 2A54EC90D829C355719080E458CC13BC /* PBXContainerItemProxy */; }; - 89E76BF02D53630C6497DED00EF5BCE3 /* PBXTargetDependency */ = { + A9824D22C46D235E94DCD597AE44C172 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = AccessoryKit; target = 6425C82BABEC4581D5A9A5C1B054D60B /* AccessoryKit */; - targetProxy = 1570880E249F035205D23A6A34611B2C /* PBXContainerItemProxy */; + targetProxy = 609FC00149CB4433B6AB968A1DE86FF6 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 0BFD3FA2850BBCABEBB1CD287FC96544 /* Release */ = { + 1C372F18226B93AC3182007C76042DBB /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0F7F052C222606401A6BAF9B467B44C8 /* AccessoryKit.release.xcconfig */; + baseConfigurationReference = 17B7DA167B9F6EF4A087B2C9A3356825 /* Pods-AccessoryKit_Tests.debug.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -433,93 +433,31 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/AccessoryKit/AccessoryKit-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/AccessoryKit/AccessoryKit-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-AccessoryKit_Tests/Pods-AccessoryKit_Tests-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/AccessoryKit/AccessoryKit.modulemap"; - PRODUCT_MODULE_NAME = AccessoryKit; - PRODUCT_NAME = AccessoryKit; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-AccessoryKit_Tests/Pods-AccessoryKit_Tests.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.3; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; - }; - 1422B121EAEAEA11307496903FA623C6 /* 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_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_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_RELEASE=1", - "$(inherited)", - ); - 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 = 13.0; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRIP_INSTALLED_PRODUCT = NO; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - SWIFT_VERSION = 5.0; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Release; + name = Debug; }; - 88D4922DDEAAB02AD29F2E916C10C038 /* Release */ = { + 369D69F8665DAA8A843ACB5EEDAC5223 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1045A4116C890857285AFAE309AF7972 /* Pods-AccessoryKit_Tests.release.xcconfig */; + baseConfigurationReference = 0F7F052C222606401A6BAF9B467B44C8 /* AccessoryKit.release.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -528,19 +466,18 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-AccessoryKit_Tests/Pods-AccessoryKit_Tests-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/AccessoryKit/AccessoryKit-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/AccessoryKit/AccessoryKit-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-AccessoryKit_Tests/Pods-AccessoryKit_Tests.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + MODULEMAP_FILE = "Target Support Files/AccessoryKit/AccessoryKit.modulemap"; + PRODUCT_MODULE_NAME = AccessoryKit; + PRODUCT_NAME = AccessoryKit; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.3; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; @@ -548,14 +485,12 @@ }; name = Release; }; - A0F292D1D0987486B8C525661545288A /* Debug */ = { + 3C65F3280DFFE622208D8F7ED11305EE /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 17B7DA167B9F6EF4A087B2C9A3356825 /* Pods-AccessoryKit_Tests.debug.xcconfig */; + baseConfigurationReference = 622951668B2FBDC3085FC74FBA240E2E /* AccessoryKit.debug.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -564,33 +499,31 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-AccessoryKit_Tests/Pods-AccessoryKit_Tests-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/AccessoryKit/AccessoryKit-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/AccessoryKit/AccessoryKit-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-AccessoryKit_Tests/Pods-AccessoryKit_Tests.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + MODULEMAP_FILE = "Target Support Files/AccessoryKit/AccessoryKit.modulemap"; + PRODUCT_MODULE_NAME = AccessoryKit; + PRODUCT_NAME = AccessoryKit; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.3; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - AE2E3D0CEC77ED142626850CC59B28D8 /* Release */ = { + 540FB94BA7B94092D31C1D57796B0F61 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CC419F4F4CE9852480C54BFD77889C9D /* Pods-AccessoryKit_Example.release.xcconfig */; + baseConfigurationReference = 1045A4116C890857285AFAE309AF7972 /* Pods-AccessoryKit_Tests.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -599,12 +532,12 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-AccessoryKit_Example/Pods-AccessoryKit_Example-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-AccessoryKit_Tests/Pods-AccessoryKit_Tests-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-AccessoryKit_Example/Pods-AccessoryKit_Example.modulemap"; + MODULEMAP_FILE = "Target Support Files/Pods-AccessoryKit_Tests/Pods-AccessoryKit_Tests.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; @@ -619,14 +552,13 @@ }; name = Release; }; - BED682E4307D60AE8A607B74B4AB061A /* Debug */ = { + 68B8337EC95351C1BAAB4CFE0655CF5E /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A79130208F86E978498FE2A05FDF01D8 /* Pods-AccessoryKit_Example.debug.xcconfig */; + baseConfigurationReference = CC419F4F4CE9852480C54BFD77889C9D /* Pods-AccessoryKit_Example.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -649,48 +581,17 @@ SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; - }; - D18DE52B064980A2B8214B15DEB987F4 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 622951668B2FBDC3085FC74FBA240E2E /* AccessoryKit.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/AccessoryKit/AccessoryKit-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/AccessoryKit/AccessoryKit-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/AccessoryKit/AccessoryKit.modulemap"; - PRODUCT_MODULE_NAME = AccessoryKit; - PRODUCT_NAME = AccessoryKit; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.3; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; + name = Release; }; - ED7888FA6713EABBF66D26A8003AD1CA /* Debug */ = { + 8DE5143C03248BB6CD542DE3963D6F3A /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; @@ -713,6 +614,7 @@ 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; @@ -751,14 +653,110 @@ }; name = Debug; }; + 9E406C6AAF85E580207CD97B0044DEAB /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + 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_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_RELEASE=1", + "$(inherited)", + ); + 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 = 13.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Release; + }; + E47147D88C825E54C8CE63FD2BFC4379 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A79130208F86E978498FE2A05FDF01D8 /* Pods-AccessoryKit_Example.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-AccessoryKit_Example/Pods-AccessoryKit_Example-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-AccessoryKit_Example/Pods-AccessoryKit_Example.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 20EAC055922FE1BA5B6EE9461D1D0A7F /* Build configuration list for PBXNativeTarget "AccessoryKit" */ = { isa = XCConfigurationList; buildConfigurations = ( - D18DE52B064980A2B8214B15DEB987F4 /* Debug */, - 0BFD3FA2850BBCABEBB1CD287FC96544 /* Release */, + 3C65F3280DFFE622208D8F7ED11305EE /* Debug */, + 369D69F8665DAA8A843ACB5EEDAC5223 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -766,26 +764,26 @@ 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - ED7888FA6713EABBF66D26A8003AD1CA /* Debug */, - 1422B121EAEAEA11307496903FA623C6 /* Release */, + 8DE5143C03248BB6CD542DE3963D6F3A /* Debug */, + 9E406C6AAF85E580207CD97B0044DEAB /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - CB0631D2B8EACFF9336CF28320FD2E96 /* Build configuration list for PBXNativeTarget "Pods-AccessoryKit_Example" */ = { + C9E9D220C978C611FF4DBF2866E2E2E5 /* Build configuration list for PBXNativeTarget "Pods-AccessoryKit_Example" */ = { isa = XCConfigurationList; buildConfigurations = ( - BED682E4307D60AE8A607B74B4AB061A /* Debug */, - AE2E3D0CEC77ED142626850CC59B28D8 /* Release */, + E47147D88C825E54C8CE63FD2BFC4379 /* Debug */, + 68B8337EC95351C1BAAB4CFE0655CF5E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - D697A388781D03FC6426551167D4161D /* Build configuration list for PBXNativeTarget "Pods-AccessoryKit_Tests" */ = { + E42A66C1403C4FCEDF1BB334452D1DF3 /* Build configuration list for PBXNativeTarget "Pods-AccessoryKit_Tests" */ = { isa = XCConfigurationList; buildConfigurations = ( - A0F292D1D0987486B8C525661545288A /* Debug */, - 88D4922DDEAAB02AD29F2E916C10C038 /* Release */, + 1C372F18226B93AC3182007C76042DBB /* Debug */, + 540FB94BA7B94092D31C1D57796B0F61 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Example/Pods/Target Support Files/AccessoryKit/AccessoryKit-Info.plist b/Example/Pods/Target Support Files/AccessoryKit/AccessoryKit-Info.plist index 324eeb2..f220e5e 100644 --- a/Example/Pods/Target Support Files/AccessoryKit/AccessoryKit-Info.plist +++ b/Example/Pods/Target Support Files/AccessoryKit/AccessoryKit-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 0.5.0 + 0.5.2 CFBundleSignature ???? CFBundleVersion diff --git a/Example/Pods/Target Support Files/AccessoryKit/AccessoryKit.debug.xcconfig b/Example/Pods/Target Support Files/AccessoryKit/AccessoryKit.debug.xcconfig index 1eec469..33e00df 100644 --- a/Example/Pods/Target Support Files/AccessoryKit/AccessoryKit.debug.xcconfig +++ b/Example/Pods/Target Support Files/AccessoryKit/AccessoryKit.debug.xcconfig @@ -1,3 +1,4 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/AccessoryKit GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 OTHER_LDFLAGS = $(inherited) -framework "UIKit" @@ -6,6 +7,7 @@ PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/AccessoryKit/AccessoryKit.release.xcconfig b/Example/Pods/Target Support Files/AccessoryKit/AccessoryKit.release.xcconfig index 1eec469..33e00df 100644 --- a/Example/Pods/Target Support Files/AccessoryKit/AccessoryKit.release.xcconfig +++ b/Example/Pods/Target Support Files/AccessoryKit/AccessoryKit.release.xcconfig @@ -1,3 +1,4 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/AccessoryKit GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 OTHER_LDFLAGS = $(inherited) -framework "UIKit" @@ -6,6 +7,7 @@ PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/Pods-AccessoryKit_Example/Pods-AccessoryKit_Example-frameworks.sh b/Example/Pods/Target Support Files/Pods-AccessoryKit_Example/Pods-AccessoryKit_Example-frameworks.sh index c80fec7..a24b0b1 100755 --- a/Example/Pods/Target Support Files/Pods-AccessoryKit_Example/Pods-AccessoryKit_Example-frameworks.sh +++ b/Example/Pods/Target Support Files/Pods-AccessoryKit_Example/Pods-AccessoryKit_Example-frameworks.sh @@ -19,9 +19,8 @@ mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" +BCSYMBOLMAP_DIR="BCSymbolMaps" -# Used as a return value for each invocation of `strip_invalid_archs` function. -STRIP_BINARY_RETVAL=0 # This protects against multiple targets copying the same framework dependency at the same time. The solution # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html @@ -45,6 +44,16 @@ install_framework() source="$(readlink "${source}")" fi + if [ -d "${source}/${BCSYMBOLMAP_DIR}" ]; then + # Locate and install any .bcsymbolmaps if present, and remove them from the .framework before the framework is copied + find "${source}/${BCSYMBOLMAP_DIR}" -name "*.bcsymbolmap"|while read f; do + echo "Installing $f" + install_bcsymbolmap "$f" "$destination" + rm "$f" + done + rmdir "${source}/${BCSYMBOLMAP_DIR}" + fi + # Use filter instead of exclude so missing patterns don't throw errors. echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" @@ -80,7 +89,6 @@ install_framework() done fi } - # Copies and strips a vendored dSYM install_dsym() { local source="$1" @@ -95,12 +103,11 @@ install_dsym() { binary_name="$(ls "$source/Contents/Resources/DWARF")" binary="${DERIVED_FILES_DIR}/${basename}.dSYM/Contents/Resources/DWARF/${binary_name}" - # Strip invalid architectures so "fat" simulator / device frameworks work on device + # Strip invalid architectures from the dSYM. if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then strip_invalid_archs "$binary" "$warn_missing_arch" fi - - if [[ $STRIP_BINARY_RETVAL == 1 ]]; then + if [[ $STRIP_BINARY_RETVAL == 0 ]]; then # Move the stripped file into its final destination. echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.dSYM" "${DWARF_DSYM_FOLDER_PATH}" @@ -111,28 +118,8 @@ install_dsym() { fi } -# Copies the bcsymbolmap files of a vendored framework -install_bcsymbolmap() { - local bcsymbolmap_path="$1" - local destination="${BUILT_PRODUCTS_DIR}" - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}" -} - -# Signs a framework with the provided identity -code_sign_if_enabled() { - if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then - # Use the current code_sign_identity - echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" - local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" - - if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then - code_sign_cmd="$code_sign_cmd &" - fi - echo "$code_sign_cmd" - eval "$code_sign_cmd" - fi -} +# Used as a return value for each invocation of `strip_invalid_archs` function. +STRIP_BINARY_RETVAL=0 # Strip invalid architectures strip_invalid_archs() { @@ -147,7 +134,7 @@ strip_invalid_archs() { if [[ "$warn_missing_arch" == "true" ]]; then echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." fi - STRIP_BINARY_RETVAL=0 + STRIP_BINARY_RETVAL=1 return fi stripped="" @@ -161,40 +148,31 @@ strip_invalid_archs() { if [[ "$stripped" ]]; then echo "Stripped $binary of architectures:$stripped" fi - STRIP_BINARY_RETVAL=1 + STRIP_BINARY_RETVAL=0 } -install_artifact() { - artifact="$1" - base="$(basename "$artifact")" - case $base in - *.framework) - install_framework "$artifact" - ;; - *.dSYM) - # Suppress arch warnings since XCFrameworks will include many dSYM files - install_dsym "$artifact" "false" - ;; - *.bcsymbolmap) - install_bcsymbolmap "$artifact" - ;; - *) - echo "error: Unrecognized artifact "$artifact"" - ;; - esac +# Copies the bcsymbolmap files of a vendored framework +install_bcsymbolmap() { + local bcsymbolmap_path="$1" + local destination="${BUILT_PRODUCTS_DIR}" + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}" } -copy_artifacts() { - file_list="$1" - while read artifact; do - install_artifact "$artifact" - done <$file_list -} +# Signs a framework with the provided identity +code_sign_if_enabled() { + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + # Use the current code_sign_identity + echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" -ARTIFACT_LIST_FILE="${BUILT_PRODUCTS_DIR}/cocoapods-artifacts-${CONFIGURATION}.txt" -if [ -r "${ARTIFACT_LIST_FILE}" ]; then - copy_artifacts "${ARTIFACT_LIST_FILE}" -fi + if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + code_sign_cmd="$code_sign_cmd &" + fi + echo "$code_sign_cmd" + eval "$code_sign_cmd" + fi +} if [[ "$CONFIGURATION" == "Debug" ]]; then install_framework "${BUILT_PRODUCTS_DIR}/AccessoryKit/AccessoryKit.framework" diff --git a/Example/Pods/Target Support Files/Pods-AccessoryKit_Example/Pods-AccessoryKit_Example.debug.xcconfig b/Example/Pods/Target Support Files/Pods-AccessoryKit_Example/Pods-AccessoryKit_Example.debug.xcconfig index 1cdc810..3756b6c 100644 --- a/Example/Pods/Target Support Files/Pods-AccessoryKit_Example/Pods-AccessoryKit_Example.debug.xcconfig +++ b/Example/Pods/Target Support Files/Pods-AccessoryKit_Example/Pods-AccessoryKit_Example.debug.xcconfig @@ -1,4 +1,5 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AccessoryKit" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AccessoryKit/AccessoryKit.framework/Headers" @@ -9,4 +10,5 @@ PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/Pods-AccessoryKit_Example/Pods-AccessoryKit_Example.release.xcconfig b/Example/Pods/Target Support Files/Pods-AccessoryKit_Example/Pods-AccessoryKit_Example.release.xcconfig index 1cdc810..3756b6c 100644 --- a/Example/Pods/Target Support Files/Pods-AccessoryKit_Example/Pods-AccessoryKit_Example.release.xcconfig +++ b/Example/Pods/Target Support Files/Pods-AccessoryKit_Example/Pods-AccessoryKit_Example.release.xcconfig @@ -1,4 +1,5 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AccessoryKit" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AccessoryKit/AccessoryKit.framework/Headers" @@ -9,4 +10,5 @@ PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/Pods-AccessoryKit_Tests/Pods-AccessoryKit_Tests.debug.xcconfig b/Example/Pods/Target Support Files/Pods-AccessoryKit_Tests/Pods-AccessoryKit_Tests.debug.xcconfig index 7f0799f..4eb6b18 100644 --- a/Example/Pods/Target Support Files/Pods-AccessoryKit_Tests/Pods-AccessoryKit_Tests.debug.xcconfig +++ b/Example/Pods/Target Support Files/Pods-AccessoryKit_Tests/Pods-AccessoryKit_Tests.debug.xcconfig @@ -1,3 +1,4 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AccessoryKit" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AccessoryKit/AccessoryKit.framework/Headers" @@ -6,4 +7,5 @@ PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Example/Pods/Target Support Files/Pods-AccessoryKit_Tests/Pods-AccessoryKit_Tests.release.xcconfig b/Example/Pods/Target Support Files/Pods-AccessoryKit_Tests/Pods-AccessoryKit_Tests.release.xcconfig index 7f0799f..4eb6b18 100644 --- a/Example/Pods/Target Support Files/Pods-AccessoryKit_Tests/Pods-AccessoryKit_Tests.release.xcconfig +++ b/Example/Pods/Target Support Files/Pods-AccessoryKit_Tests/Pods-AccessoryKit_Tests.release.xcconfig @@ -1,3 +1,4 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AccessoryKit" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AccessoryKit/AccessoryKit.framework/Headers" @@ -6,4 +7,5 @@ PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/README.md b/README.md index edeaa96..fbf5c38 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,7 @@ The main features are: * Supports Auto Layout and Safe Area. * Supports dark mode. * Provides built-in pre-defined buttons with SF Symbol. +* Supports presenting `UIMenu` on input accessory view. ## Usage @@ -43,10 +44,14 @@ To run the example project, clone the repo, and run `pod install` from the Examp ```swift // Create view model array of key buttons let keyButtons: [KeyboardAccessoryButton] = [ + // Create button with built-in type and tap handler block KeyboardAccessoryButton(type: .undo, tapHandler: { [weak self] in self?.undo() }), + // Create button with UIImage KeyboardAccessoryButton(image: UIImage(named: "img"), tapHandler: {}), + // Create button with UIMenu + KeyboardAccessoryButton(type: .link, menu: createInsertMenu()), ] // Initialize `KeyboardAccessoryView` @@ -70,10 +75,12 @@ accessoryView.setEnabled(false, at: 1) ## TODO -- [ ] Expose more APIs customization +- [ ] Expose more APIs for customization - [x] Tint color - [ ] Tweak UI - [x] Use SF Symbol +- [x] UIMenu support +- [ ] UIAction support - [x] SPM support ## License diff --git a/Screenshots/1.png b/Screenshots/1.png index 9031e7f..09a9b80 100644 Binary files a/Screenshots/1.png and b/Screenshots/1.png differ diff --git a/Sources/AccessoryKit/KeyboardAccessoryButton.swift b/Sources/AccessoryKit/KeyboardAccessoryButton.swift index dc2b8d9..8fce314 100644 --- a/Sources/AccessoryKit/KeyboardAccessoryButton.swift +++ b/Sources/AccessoryKit/KeyboardAccessoryButton.swift @@ -45,30 +45,37 @@ public struct KeyboardAccessoryButton { public let image: UIImage /// The tap handler that will be invoked when tapping the button. - public let tapHandler: () -> Void + public let tapHandler: (() -> Void)? + + /// The menu that will be shown once button is tapped. + public let menu: UIMenu? /// Initialize the view model of key button inside `KeyboardAccessoryView`. /// - Parameters: /// - image: The image that is shown on the button. /// - tapHandler: The tap handler that will be invoked when tapping the button. + /// - menu: The menu that will be shown once button is tapped. Only available for iOS 14+. public init(image: UIImage, - tapHandler: @escaping () -> Void) { + tapHandler: (() -> Void)? = nil, + menu: UIMenu? = nil) { self.image = image self.tapHandler = tapHandler + self.menu = menu } /// Initialize the view model of key button with a given button type. - /// - /// For pre-defined button types, on iOS 13+ the button will try to use SF Symbol - /// for proper image, otherwise will use the bundled image from Google Material Icons. - /// /// - Parameters: /// - type: Pre-defined button type. /// - tapHandler: The tap handler that will be invoked when tapping the button. + /// - menu: The menu that will be shown once button is tapped. Only available for iOS 14+. public init(type: ButtonType, - tapHandler: @escaping () -> Void) { - let image = UIImage(systemName: Self.imageNameMap[type]!)! - self.init(image: image, tapHandler: tapHandler) + tapHandler: (() -> Void)? = nil, + menu: UIMenu? = nil) { + guard let imageName = Self.imageNameMap[type], + let image = UIImage(systemName: imageName) else { + fatalError("Error: Do not have corresponding image for button type \(type)") + } + self.init(image: image, tapHandler: tapHandler, menu: menu) } } diff --git a/Sources/AccessoryKit/KeyboardAccessoryButtonView.swift b/Sources/AccessoryKit/KeyboardAccessoryButtonView.swift index 4de59e1..240636f 100644 --- a/Sources/AccessoryKit/KeyboardAccessoryButtonView.swift +++ b/Sources/AccessoryKit/KeyboardAccessoryButtonView.swift @@ -27,7 +27,18 @@ class KeyboardAccessoryButtonView: UIButton { clipsToBounds = true layer.cornerRadius = cornerRadius translatesAutoresizingMaskIntoConstraints = false - addTarget(self, action: #selector(tapHandlerAction), for: .touchUpInside) + + if #available(iOS 14.0, *) { + if let menu = viewModel.menu { + self.menu = menu + showsMenuAsPrimaryAction = true + return + } + } + + if viewModel.tapHandler != nil { + addTarget(self, action: #selector(tapHandlerAction), for: .touchUpInside) + } } required init?(coder: NSCoder) { @@ -35,7 +46,7 @@ class KeyboardAccessoryButtonView: UIButton { } @objc func tapHandlerAction() { - viewModel.tapHandler() + viewModel.tapHandler?() } override var intrinsicContentSize: CGSize { diff --git a/Sources/AccessoryKit/KeyboardAccessoryView.swift b/Sources/AccessoryKit/KeyboardAccessoryView.swift index ba22ebb..2c75b5d 100644 --- a/Sources/AccessoryKit/KeyboardAccessoryView.swift +++ b/Sources/AccessoryKit/KeyboardAccessoryView.swift @@ -67,18 +67,20 @@ public class KeyboardAccessoryView: UIInputView { self.keyCornerRadius = keyCornerRadius self.keyMargin = keyMargin self.keyButtonViews = keyButtons.map { buttonModel in - return KeyboardAccessoryButtonView(viewModel: buttonModel, - width: keyWidth, - height: keyHeight, - cornerRadius: keyCornerRadius) + return KeyboardAccessoryButtonView( + viewModel: buttonModel, + width: keyWidth, + height: keyHeight, + cornerRadius: keyCornerRadius) } self.showDismissKeyboardKey = showDismissKeyboardKey self.delegate = delegate - let newFrame = CGRect(x: frame.origin.x, - y: frame.origin.y, - width: frame.size.width, - height: 2 * keyMargin + keyHeight) + let newFrame = CGRect( + x: frame.origin.x, + y: frame.origin.y, + width: frame.size.width, + height: 2 * keyMargin + keyHeight) super.init(frame: newFrame, inputViewStyle: inputViewStyle) setupViews() @@ -116,10 +118,11 @@ public class KeyboardAccessoryView: UIInputView { let dismissKey = KeyboardAccessoryButton(image: image) { [weak self] in self?.dismissKeyboardKeyTapped() } - let dismissKeyView = KeyboardAccessoryButtonView(viewModel: dismissKey, - width: keyWidth, - height: keyHeight, - cornerRadius: keyCornerRadius) + let dismissKeyView = KeyboardAccessoryButtonView( + viewModel: dismissKey, + width: keyWidth, + height: keyHeight, + cornerRadius: keyCornerRadius) container.addSubview(dismissKeyView) constraints.append(contentsOf: [ dismissKeyView.widthAnchor.constraint(equalToConstant: keyWidth), @@ -142,8 +145,8 @@ public class KeyboardAccessoryView: UIInputView { keysStackView.heightAnchor.constraint(equalToConstant: keyHeight), ]) - for buttonViewItem in keyButtonViews { - addAccessoryKey(keyView: buttonViewItem) + keyButtonViews.forEach { + addAccessoryKey(keyView: $0) } NSLayoutConstraint.activate(constraints)