diff --git a/ExampleProject/Podfile b/ExampleProject/Podfile new file mode 100644 index 0000000..a8279ba --- /dev/null +++ b/ExampleProject/Podfile @@ -0,0 +1,15 @@ +# Uncomment the next line to define a global platform for your project +# platform :ios, '9.0' + +target 'RHSideButtons' do + # Comment the next line if you're not using Swift and don't want to use dynamic frameworks + use_frameworks! + + # Pods for RHSideButtons + + target 'RHSideButtonsTests' do + inherit! :search_paths + # Pods for testing + end + +end diff --git a/ExampleProject/Podfile.lock b/ExampleProject/Podfile.lock new file mode 100644 index 0000000..9892463 --- /dev/null +++ b/ExampleProject/Podfile.lock @@ -0,0 +1,3 @@ +PODFILE CHECKSUM: 593486c129f762efbd0715a2ba60035b219bdac8 + +COCOAPODS: 1.1.1 diff --git a/ExampleProject/Pods/Manifest.lock b/ExampleProject/Pods/Manifest.lock new file mode 100644 index 0000000..9892463 --- /dev/null +++ b/ExampleProject/Pods/Manifest.lock @@ -0,0 +1,3 @@ +PODFILE CHECKSUM: 593486c129f762efbd0715a2ba60035b219bdac8 + +COCOAPODS: 1.1.1 diff --git a/ExampleProject/Pods/Pods.xcodeproj/project.pbxproj b/ExampleProject/Pods/Pods.xcodeproj/project.pbxproj new file mode 100644 index 0000000..8c6fb15 --- /dev/null +++ b/ExampleProject/Pods/Pods.xcodeproj/project.pbxproj @@ -0,0 +1,505 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 035C673710A3ABC8791C547A8EFAB36C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CBB3DE36805AF21409EC968A9691732F /* Foundation.framework */; }; + 3BF303A8661F9083E598119A11F6EF33 /* Pods-RHSideButtonsTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 29D323156F04FBEF329E74D4CD1EC158 /* Pods-RHSideButtonsTests-dummy.m */; }; + 50D7B53A787C688FF6C5C3D22266DF25 /* Pods-RHSideButtons-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AF570705929D6408E993B143E4968D41 /* Pods-RHSideButtons-dummy.m */; }; + 6B227B37BC37267647AD2FF3AA8C1323 /* Pods-RHSideButtons-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 65BEC8401AA760F362EA56E4D72F0F93 /* Pods-RHSideButtons-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9DBC987CEFD1A870B1C76144A5F3E476 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CBB3DE36805AF21409EC968A9691732F /* Foundation.framework */; }; + E4ECD9D2AC716DE003CEFD2D302EA7B2 /* Pods-RHSideButtonsTests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C5F1C131D4E2C63E67317F23BA6CC816 /* Pods-RHSideButtonsTests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 0FA429CF6F1E9D63E7299B14BC4977C5 /* Pods-RHSideButtons.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-RHSideButtons.release.xcconfig"; sourceTree = ""; }; + 262103FBE71AA7228BA747501363DB53 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 29D323156F04FBEF329E74D4CD1EC158 /* Pods-RHSideButtonsTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-RHSideButtonsTests-dummy.m"; sourceTree = ""; }; + 52CF1BA083A4A0352163C6ECA856956F /* Pods-RHSideButtonsTests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-RHSideButtonsTests.modulemap"; sourceTree = ""; }; + 57EA5B6BDCA9309E5C133920A1421E42 /* Pods-RHSideButtons-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-RHSideButtons-acknowledgements.plist"; sourceTree = ""; }; + 5B26CD6B77D232C5661C23CB8973D5BD /* Pods-RHSideButtons-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-RHSideButtons-frameworks.sh"; sourceTree = ""; }; + 611C137CD7833872B1D7ECEECEB80289 /* Pods-RHSideButtonsTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-RHSideButtonsTests-acknowledgements.markdown"; sourceTree = ""; }; + 623436673A9C515D24BA11BE710AAB09 /* Pods_RHSideButtons.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_RHSideButtons.framework; path = "Pods-RHSideButtons.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 6509A72D5B9770D8D59E5BDF97E9F411 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 65BEC8401AA760F362EA56E4D72F0F93 /* Pods-RHSideButtons-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-RHSideButtons-umbrella.h"; sourceTree = ""; }; + 7D89DFF807E9B128C7B974BA32FC3BB2 /* Pods-RHSideButtonsTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-RHSideButtonsTests.debug.xcconfig"; sourceTree = ""; }; + 81D3707654F2D3F5B885F78DC9B397F8 /* Pods_RHSideButtonsTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_RHSideButtonsTests.framework; path = "Pods-RHSideButtonsTests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 8B57BF790043729B38C52CABBE4B99E2 /* Pods-RHSideButtonsTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-RHSideButtonsTests-acknowledgements.plist"; sourceTree = ""; }; + 928F24148803997BD105588290CA19BA /* Pods-RHSideButtonsTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-RHSideButtonsTests.release.xcconfig"; sourceTree = ""; }; + 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 9946D55B41890B694F6D3707D8A42B98 /* Pods-RHSideButtons-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-RHSideButtons-resources.sh"; sourceTree = ""; }; + AF570705929D6408E993B143E4968D41 /* Pods-RHSideButtons-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-RHSideButtons-dummy.m"; sourceTree = ""; }; + C4D06F0637C6AB003C71C36B969C360C /* Pods-RHSideButtonsTests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-RHSideButtonsTests-resources.sh"; sourceTree = ""; }; + C5F1C131D4E2C63E67317F23BA6CC816 /* Pods-RHSideButtonsTests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-RHSideButtonsTests-umbrella.h"; sourceTree = ""; }; + CA2738E15D5969521A6548A24331A041 /* Pods-RHSideButtons.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-RHSideButtons.debug.xcconfig"; sourceTree = ""; }; + CBB3DE36805AF21409EC968A9691732F /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + D0A6CDE335E387A1971B13EC7BE31B45 /* Pods-RHSideButtonsTests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-RHSideButtonsTests-frameworks.sh"; sourceTree = ""; }; + DC912F97F3D36FFEBB65D0A56AD0C900 /* Pods-RHSideButtons-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-RHSideButtons-acknowledgements.markdown"; sourceTree = ""; }; + FEBB5FB2FCB747FB32F5B7CD2FE118F7 /* Pods-RHSideButtons.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-RHSideButtons.modulemap"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 0A00D53D420698F4647C35F73DAB8330 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 9DBC987CEFD1A870B1C76144A5F3E476 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D6F98921D5CB2ACF880A5D845996C81D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 035C673710A3ABC8791C547A8EFAB36C /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 1B0C9D371109601295B380CDFB619D8A /* Targets Support Files */ = { + isa = PBXGroup; + children = ( + 4DAE04892B6FA15142AC098D6714702A /* Pods-RHSideButtons */, + 6D056E965A4FEE474B5C7DE7A8C863E3 /* Pods-RHSideButtonsTests */, + ); + name = "Targets Support Files"; + sourceTree = ""; + }; + 4DAE04892B6FA15142AC098D6714702A /* Pods-RHSideButtons */ = { + isa = PBXGroup; + children = ( + 262103FBE71AA7228BA747501363DB53 /* Info.plist */, + FEBB5FB2FCB747FB32F5B7CD2FE118F7 /* Pods-RHSideButtons.modulemap */, + DC912F97F3D36FFEBB65D0A56AD0C900 /* Pods-RHSideButtons-acknowledgements.markdown */, + 57EA5B6BDCA9309E5C133920A1421E42 /* Pods-RHSideButtons-acknowledgements.plist */, + AF570705929D6408E993B143E4968D41 /* Pods-RHSideButtons-dummy.m */, + 5B26CD6B77D232C5661C23CB8973D5BD /* Pods-RHSideButtons-frameworks.sh */, + 9946D55B41890B694F6D3707D8A42B98 /* Pods-RHSideButtons-resources.sh */, + 65BEC8401AA760F362EA56E4D72F0F93 /* Pods-RHSideButtons-umbrella.h */, + CA2738E15D5969521A6548A24331A041 /* Pods-RHSideButtons.debug.xcconfig */, + 0FA429CF6F1E9D63E7299B14BC4977C5 /* Pods-RHSideButtons.release.xcconfig */, + ); + name = "Pods-RHSideButtons"; + path = "Target Support Files/Pods-RHSideButtons"; + sourceTree = ""; + }; + 6D056E965A4FEE474B5C7DE7A8C863E3 /* Pods-RHSideButtonsTests */ = { + isa = PBXGroup; + children = ( + 6509A72D5B9770D8D59E5BDF97E9F411 /* Info.plist */, + 52CF1BA083A4A0352163C6ECA856956F /* Pods-RHSideButtonsTests.modulemap */, + 611C137CD7833872B1D7ECEECEB80289 /* Pods-RHSideButtonsTests-acknowledgements.markdown */, + 8B57BF790043729B38C52CABBE4B99E2 /* Pods-RHSideButtonsTests-acknowledgements.plist */, + 29D323156F04FBEF329E74D4CD1EC158 /* Pods-RHSideButtonsTests-dummy.m */, + D0A6CDE335E387A1971B13EC7BE31B45 /* Pods-RHSideButtonsTests-frameworks.sh */, + C4D06F0637C6AB003C71C36B969C360C /* Pods-RHSideButtonsTests-resources.sh */, + C5F1C131D4E2C63E67317F23BA6CC816 /* Pods-RHSideButtonsTests-umbrella.h */, + 7D89DFF807E9B128C7B974BA32FC3BB2 /* Pods-RHSideButtonsTests.debug.xcconfig */, + 928F24148803997BD105588290CA19BA /* Pods-RHSideButtonsTests.release.xcconfig */, + ); + name = "Pods-RHSideButtonsTests"; + path = "Target Support Files/Pods-RHSideButtonsTests"; + sourceTree = ""; + }; + 7531C8F8DE19F1AA3C8A7AC97A91DC29 /* iOS */ = { + isa = PBXGroup; + children = ( + CBB3DE36805AF21409EC968A9691732F /* Foundation.framework */, + ); + name = iOS; + sourceTree = ""; + }; + 7DB346D0F39D3F0E887471402A8071AB = { + isa = PBXGroup; + children = ( + 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, + BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */, + AABFD4E96301AFF396793643489B36E5 /* Products */, + 1B0C9D371109601295B380CDFB619D8A /* Targets Support Files */, + ); + sourceTree = ""; + }; + AABFD4E96301AFF396793643489B36E5 /* Products */ = { + isa = PBXGroup; + children = ( + 623436673A9C515D24BA11BE710AAB09 /* Pods_RHSideButtons.framework */, + 81D3707654F2D3F5B885F78DC9B397F8 /* Pods_RHSideButtonsTests.framework */, + ); + name = Products; + sourceTree = ""; + }; + BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */ = { + isa = PBXGroup; + children = ( + 7531C8F8DE19F1AA3C8A7AC97A91DC29 /* iOS */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 2EA57DEA0AA99B54B724B718DA1960DC /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 6B227B37BC37267647AD2FF3AA8C1323 /* Pods-RHSideButtons-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 924E46262878577F35CC8185807DB49C /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + E4ECD9D2AC716DE003CEFD2D302EA7B2 /* Pods-RHSideButtonsTests-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 0588976F3BFB8E60D3B834A437C76868 /* Pods-RHSideButtons */ = { + isa = PBXNativeTarget; + buildConfigurationList = B87F7C3FD42E9978244C12BC3503BEB4 /* Build configuration list for PBXNativeTarget "Pods-RHSideButtons" */; + buildPhases = ( + 046D154EF8F9FAA0A06B318E597AC19D /* Sources */, + D6F98921D5CB2ACF880A5D845996C81D /* Frameworks */, + 2EA57DEA0AA99B54B724B718DA1960DC /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Pods-RHSideButtons"; + productName = "Pods-RHSideButtons"; + productReference = 623436673A9C515D24BA11BE710AAB09 /* Pods_RHSideButtons.framework */; + productType = "com.apple.product-type.framework"; + }; + 801DCE7361DB61B50D22E191C0DCE592 /* Pods-RHSideButtonsTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 0A4122B153EA1C5B3FB9D3D1AB135F36 /* Build configuration list for PBXNativeTarget "Pods-RHSideButtonsTests" */; + buildPhases = ( + FCBAA0BDA2E5C7EA395E72871408E3D3 /* Sources */, + 0A00D53D420698F4647C35F73DAB8330 /* Frameworks */, + 924E46262878577F35CC8185807DB49C /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Pods-RHSideButtonsTests"; + productName = "Pods-RHSideButtonsTests"; + productReference = 81D3707654F2D3F5B885F78DC9B397F8 /* Pods_RHSideButtonsTests.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0730; + LastUpgradeCheck = 0700; + }; + buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 7DB346D0F39D3F0E887471402A8071AB; + productRefGroup = AABFD4E96301AFF396793643489B36E5 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 0588976F3BFB8E60D3B834A437C76868 /* Pods-RHSideButtons */, + 801DCE7361DB61B50D22E191C0DCE592 /* Pods-RHSideButtonsTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 046D154EF8F9FAA0A06B318E597AC19D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 50D7B53A787C688FF6C5C3D22266DF25 /* Pods-RHSideButtons-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FCBAA0BDA2E5C7EA395E72871408E3D3 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3BF303A8661F9083E598119A11F6EF33 /* Pods-RHSideButtonsTests-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 13E96A645A77DAD1FD4F541F18F5DDBF /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_REQUIRED = NO; + COPY_PHASE_STRIP = NO; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_DEBUG=1", + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.3; + ONLY_ACTIVE_ARCH = YES; + PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Debug; + }; + 174BA96EC3A354340569C39F44AA2069 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 928F24148803997BD105588290CA19BA /* Pods-RHSideButtonsTests.release.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-RHSideButtonsTests/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.3; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-RHSideButtonsTests/Pods-RHSideButtonsTests.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_RHSideButtonsTests; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 3C822FC40655AED758DB167B47F21D88 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7D89DFF807E9B128C7B974BA32FC3BB2 /* Pods-RHSideButtonsTests.debug.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-RHSideButtonsTests/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.3; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-RHSideButtonsTests/Pods-RHSideButtonsTests.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_RHSideButtonsTests; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 862AF3139CD84E18D34FAF2F43CD0DA6 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_REQUIRED = NO; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_RELEASE=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.3; + PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + CD1A777189AF199A94F80887F4CC370D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 0FA429CF6F1E9D63E7299B14BC4977C5 /* Pods-RHSideButtons.release.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-RHSideButtons/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.3; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-RHSideButtons/Pods-RHSideButtons.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_RHSideButtons; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + F018B88541943CEE1495D992A9E98DF0 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CA2738E15D5969521A6548A24331A041 /* Pods-RHSideButtons.debug.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-RHSideButtons/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.3; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-RHSideButtons/Pods-RHSideButtons.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_RHSideButtons; + 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 */ + 0A4122B153EA1C5B3FB9D3D1AB135F36 /* Build configuration list for PBXNativeTarget "Pods-RHSideButtonsTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3C822FC40655AED758DB167B47F21D88 /* Debug */, + 174BA96EC3A354340569C39F44AA2069 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 13E96A645A77DAD1FD4F541F18F5DDBF /* Debug */, + 862AF3139CD84E18D34FAF2F43CD0DA6 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + B87F7C3FD42E9978244C12BC3503BEB4 /* Build configuration list for PBXNativeTarget "Pods-RHSideButtons" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F018B88541943CEE1495D992A9E98DF0 /* Debug */, + CD1A777189AF199A94F80887F4CC370D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; +} diff --git a/ExampleProject/Pods/Pods.xcodeproj/xcuserdata/robertherdzik.xcuserdatad/xcschemes/Pods-RHSideButtons.xcscheme b/ExampleProject/Pods/Pods.xcodeproj/xcuserdata/robertherdzik.xcuserdatad/xcschemes/Pods-RHSideButtons.xcscheme new file mode 100644 index 0000000..ef3fc43 --- /dev/null +++ b/ExampleProject/Pods/Pods.xcodeproj/xcuserdata/robertherdzik.xcuserdatad/xcschemes/Pods-RHSideButtons.xcscheme @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ExampleProject/Pods/Pods.xcodeproj/xcuserdata/robertherdzik.xcuserdatad/xcschemes/Pods-RHSideButtonsTests.xcscheme b/ExampleProject/Pods/Pods.xcodeproj/xcuserdata/robertherdzik.xcuserdatad/xcschemes/Pods-RHSideButtonsTests.xcscheme new file mode 100644 index 0000000..8b11898 --- /dev/null +++ b/ExampleProject/Pods/Pods.xcodeproj/xcuserdata/robertherdzik.xcuserdatad/xcschemes/Pods-RHSideButtonsTests.xcscheme @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ExampleProject/Pods/Target Support Files/Pods-RHSideButtons/Info.plist b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtons/Info.plist new file mode 100644 index 0000000..2243fe6 --- /dev/null +++ b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtons/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/ExampleProject/Pods/Target Support Files/Pods-RHSideButtons/Pods-RHSideButtons-acknowledgements.markdown b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtons/Pods-RHSideButtons-acknowledgements.markdown new file mode 100644 index 0000000..102af75 --- /dev/null +++ b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtons/Pods-RHSideButtons-acknowledgements.markdown @@ -0,0 +1,3 @@ +# Acknowledgements +This application makes use of the following third party libraries: +Generated by CocoaPods - https://cocoapods.org diff --git a/ExampleProject/Pods/Target Support Files/Pods-RHSideButtons/Pods-RHSideButtons-acknowledgements.plist b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtons/Pods-RHSideButtons-acknowledgements.plist new file mode 100644 index 0000000..7acbad1 --- /dev/null +++ b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtons/Pods-RHSideButtons-acknowledgements.plist @@ -0,0 +1,29 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - https://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/ExampleProject/Pods/Target Support Files/Pods-RHSideButtons/Pods-RHSideButtons-dummy.m b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtons/Pods-RHSideButtons-dummy.m new file mode 100644 index 0000000..7c99ba5 --- /dev/null +++ b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtons/Pods-RHSideButtons-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_RHSideButtons : NSObject +@end +@implementation PodsDummy_Pods_RHSideButtons +@end diff --git a/ExampleProject/Pods/Target Support Files/Pods-RHSideButtons/Pods-RHSideButtons-frameworks.sh b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtons/Pods-RHSideButtons-frameworks.sh new file mode 100755 index 0000000..893c16a --- /dev/null +++ b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtons/Pods-RHSideButtons-frameworks.sh @@ -0,0 +1,84 @@ +#!/bin/sh +set -e + +echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + +SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" + +install_framework() +{ + if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then + local source="${BUILT_PRODUCTS_DIR}/$1" + elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then + local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" + elif [ -r "$1" ]; then + local source="$1" + fi + + local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + + if [ -L "${source}" ]; then + echo "Symlinked..." + source="$(readlink "${source}")" + fi + + # use filter instead of exclude so missing patterns dont' throw errors + echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + + local basename + basename="$(basename -s .framework "$1")" + binary="${destination}/${basename}.framework/${basename}" + if ! [ -r "$binary" ]; then + binary="${destination}/${basename}" + fi + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then + strip_invalid_archs "$binary" + fi + + # Resign the code if required by the build settings to avoid unstable apps + code_sign_if_enabled "${destination}/$(basename "$1")" + + # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. + if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then + local swift_runtime_libs + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) + for lib in $swift_runtime_libs; do + echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" + rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" + code_sign_if_enabled "${destination}/${lib}" + done + fi +} + +# 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_identitiy + echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" + echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements \"$1\"" + /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1" + fi +} + +# Strip invalid architectures +strip_invalid_archs() { + binary="$1" + # Get architectures for current file + archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" + stripped="" + for arch in $archs; do + if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then + # Strip non-valid architectures in-place + lipo -remove "$arch" -output "$binary" "$binary" || exit 1 + stripped="$stripped $arch" + fi + done + if [[ "$stripped" ]]; then + echo "Stripped $binary of architectures:$stripped" + fi +} + diff --git a/ExampleProject/Pods/Target Support Files/Pods-RHSideButtons/Pods-RHSideButtons-resources.sh b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtons/Pods-RHSideButtons-resources.sh new file mode 100755 index 0000000..25e9d37 --- /dev/null +++ b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtons/Pods-RHSideButtons-resources.sh @@ -0,0 +1,96 @@ +#!/bin/sh +set -e + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + +RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt +> "$RESOURCES_TO_COPY" + +XCASSET_FILES=() + +case "${TARGETED_DEVICE_FAMILY}" in + 1,2) + TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" + ;; + 1) + TARGET_DEVICE_ARGS="--target-device iphone" + ;; + 2) + TARGET_DEVICE_ARGS="--target-device ipad" + ;; + *) + TARGET_DEVICE_ARGS="--target-device mac" + ;; +esac + +install_resource() +{ + if [[ "$1" = /* ]] ; then + RESOURCE_PATH="$1" + else + RESOURCE_PATH="${PODS_ROOT}/$1" + fi + if [[ ! -e "$RESOURCE_PATH" ]] ; then + cat << EOM +error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. +EOM + exit 1 + fi + case $RESOURCE_PATH in + *.storyboard) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" + ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} + ;; + *.xib) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" + ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} + ;; + *.framework) + echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + ;; + *.xcdatamodel) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" + ;; + *.xcdatamodeld) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" + ;; + *.xcmappingmodel) + echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" + xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" + ;; + *.xcassets) + ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" + XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") + ;; + *) + echo "$RESOURCE_PATH" + echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" + ;; + esac +} + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then + mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi +rm -f "$RESOURCES_TO_COPY" + +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +then + # Find all other xcassets (this unfortunately includes those of path pods and other targets). + OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) + while read line; do + if [[ $line != "${PODS_ROOT}*" ]]; then + XCASSET_FILES+=("$line") + fi + done <<<"$OTHER_XCASSETS" + + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi diff --git a/ExampleProject/Pods/Target Support Files/Pods-RHSideButtons/Pods-RHSideButtons-umbrella.h b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtons/Pods-RHSideButtons-umbrella.h new file mode 100644 index 0000000..ddb75c8 --- /dev/null +++ b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtons/Pods-RHSideButtons-umbrella.h @@ -0,0 +1,8 @@ +#ifdef __OBJC__ +#import +#endif + + +FOUNDATION_EXPORT double Pods_RHSideButtonsVersionNumber; +FOUNDATION_EXPORT const unsigned char Pods_RHSideButtonsVersionString[]; + diff --git a/ExampleProject/Pods/Target Support Files/Pods-RHSideButtons/Pods-RHSideButtons.debug.xcconfig b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtons/Pods-RHSideButtons.debug.xcconfig new file mode 100644 index 0000000..8b1315d --- /dev/null +++ b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtons/Pods-RHSideButtons.debug.xcconfig @@ -0,0 +1,6 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/ExampleProject/Pods/Target Support Files/Pods-RHSideButtons/Pods-RHSideButtons.modulemap b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtons/Pods-RHSideButtons.modulemap new file mode 100644 index 0000000..46ff849 --- /dev/null +++ b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtons/Pods-RHSideButtons.modulemap @@ -0,0 +1,6 @@ +framework module Pods_RHSideButtons { + umbrella header "Pods-RHSideButtons-umbrella.h" + + export * + module * { export * } +} diff --git a/ExampleProject/Pods/Target Support Files/Pods-RHSideButtons/Pods-RHSideButtons.release.xcconfig b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtons/Pods-RHSideButtons.release.xcconfig new file mode 100644 index 0000000..8b1315d --- /dev/null +++ b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtons/Pods-RHSideButtons.release.xcconfig @@ -0,0 +1,6 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/ExampleProject/Pods/Target Support Files/Pods-RHSideButtonsTests/Info.plist b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtonsTests/Info.plist new file mode 100644 index 0000000..2243fe6 --- /dev/null +++ b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtonsTests/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/ExampleProject/Pods/Target Support Files/Pods-RHSideButtonsTests/Pods-RHSideButtonsTests-acknowledgements.markdown b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtonsTests/Pods-RHSideButtonsTests-acknowledgements.markdown new file mode 100644 index 0000000..102af75 --- /dev/null +++ b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtonsTests/Pods-RHSideButtonsTests-acknowledgements.markdown @@ -0,0 +1,3 @@ +# Acknowledgements +This application makes use of the following third party libraries: +Generated by CocoaPods - https://cocoapods.org diff --git a/ExampleProject/Pods/Target Support Files/Pods-RHSideButtonsTests/Pods-RHSideButtonsTests-acknowledgements.plist b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtonsTests/Pods-RHSideButtonsTests-acknowledgements.plist new file mode 100644 index 0000000..7acbad1 --- /dev/null +++ b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtonsTests/Pods-RHSideButtonsTests-acknowledgements.plist @@ -0,0 +1,29 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - https://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/ExampleProject/Pods/Target Support Files/Pods-RHSideButtonsTests/Pods-RHSideButtonsTests-dummy.m b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtonsTests/Pods-RHSideButtonsTests-dummy.m new file mode 100644 index 0000000..ec72134 --- /dev/null +++ b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtonsTests/Pods-RHSideButtonsTests-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_RHSideButtonsTests : NSObject +@end +@implementation PodsDummy_Pods_RHSideButtonsTests +@end diff --git a/ExampleProject/Pods/Target Support Files/Pods-RHSideButtonsTests/Pods-RHSideButtonsTests-frameworks.sh b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtonsTests/Pods-RHSideButtonsTests-frameworks.sh new file mode 100755 index 0000000..893c16a --- /dev/null +++ b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtonsTests/Pods-RHSideButtonsTests-frameworks.sh @@ -0,0 +1,84 @@ +#!/bin/sh +set -e + +echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + +SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" + +install_framework() +{ + if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then + local source="${BUILT_PRODUCTS_DIR}/$1" + elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then + local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" + elif [ -r "$1" ]; then + local source="$1" + fi + + local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + + if [ -L "${source}" ]; then + echo "Symlinked..." + source="$(readlink "${source}")" + fi + + # use filter instead of exclude so missing patterns dont' throw errors + echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + + local basename + basename="$(basename -s .framework "$1")" + binary="${destination}/${basename}.framework/${basename}" + if ! [ -r "$binary" ]; then + binary="${destination}/${basename}" + fi + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then + strip_invalid_archs "$binary" + fi + + # Resign the code if required by the build settings to avoid unstable apps + code_sign_if_enabled "${destination}/$(basename "$1")" + + # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. + if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then + local swift_runtime_libs + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) + for lib in $swift_runtime_libs; do + echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" + rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" + code_sign_if_enabled "${destination}/${lib}" + done + fi +} + +# 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_identitiy + echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" + echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements \"$1\"" + /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1" + fi +} + +# Strip invalid architectures +strip_invalid_archs() { + binary="$1" + # Get architectures for current file + archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" + stripped="" + for arch in $archs; do + if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then + # Strip non-valid architectures in-place + lipo -remove "$arch" -output "$binary" "$binary" || exit 1 + stripped="$stripped $arch" + fi + done + if [[ "$stripped" ]]; then + echo "Stripped $binary of architectures:$stripped" + fi +} + diff --git a/ExampleProject/Pods/Target Support Files/Pods-RHSideButtonsTests/Pods-RHSideButtonsTests-resources.sh b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtonsTests/Pods-RHSideButtonsTests-resources.sh new file mode 100755 index 0000000..25e9d37 --- /dev/null +++ b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtonsTests/Pods-RHSideButtonsTests-resources.sh @@ -0,0 +1,96 @@ +#!/bin/sh +set -e + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + +RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt +> "$RESOURCES_TO_COPY" + +XCASSET_FILES=() + +case "${TARGETED_DEVICE_FAMILY}" in + 1,2) + TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" + ;; + 1) + TARGET_DEVICE_ARGS="--target-device iphone" + ;; + 2) + TARGET_DEVICE_ARGS="--target-device ipad" + ;; + *) + TARGET_DEVICE_ARGS="--target-device mac" + ;; +esac + +install_resource() +{ + if [[ "$1" = /* ]] ; then + RESOURCE_PATH="$1" + else + RESOURCE_PATH="${PODS_ROOT}/$1" + fi + if [[ ! -e "$RESOURCE_PATH" ]] ; then + cat << EOM +error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. +EOM + exit 1 + fi + case $RESOURCE_PATH in + *.storyboard) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" + ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} + ;; + *.xib) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" + ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} + ;; + *.framework) + echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + ;; + *.xcdatamodel) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" + ;; + *.xcdatamodeld) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" + ;; + *.xcmappingmodel) + echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" + xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" + ;; + *.xcassets) + ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" + XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") + ;; + *) + echo "$RESOURCE_PATH" + echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" + ;; + esac +} + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then + mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi +rm -f "$RESOURCES_TO_COPY" + +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +then + # Find all other xcassets (this unfortunately includes those of path pods and other targets). + OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) + while read line; do + if [[ $line != "${PODS_ROOT}*" ]]; then + XCASSET_FILES+=("$line") + fi + done <<<"$OTHER_XCASSETS" + + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi diff --git a/ExampleProject/Pods/Target Support Files/Pods-RHSideButtonsTests/Pods-RHSideButtonsTests-umbrella.h b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtonsTests/Pods-RHSideButtonsTests-umbrella.h new file mode 100644 index 0000000..7c91935 --- /dev/null +++ b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtonsTests/Pods-RHSideButtonsTests-umbrella.h @@ -0,0 +1,8 @@ +#ifdef __OBJC__ +#import +#endif + + +FOUNDATION_EXPORT double Pods_RHSideButtonsTestsVersionNumber; +FOUNDATION_EXPORT const unsigned char Pods_RHSideButtonsTestsVersionString[]; + diff --git a/ExampleProject/Pods/Target Support Files/Pods-RHSideButtonsTests/Pods-RHSideButtonsTests.debug.xcconfig b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtonsTests/Pods-RHSideButtonsTests.debug.xcconfig new file mode 100644 index 0000000..8b1315d --- /dev/null +++ b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtonsTests/Pods-RHSideButtonsTests.debug.xcconfig @@ -0,0 +1,6 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/ExampleProject/Pods/Target Support Files/Pods-RHSideButtonsTests/Pods-RHSideButtonsTests.modulemap b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtonsTests/Pods-RHSideButtonsTests.modulemap new file mode 100644 index 0000000..ff12959 --- /dev/null +++ b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtonsTests/Pods-RHSideButtonsTests.modulemap @@ -0,0 +1,6 @@ +framework module Pods_RHSideButtonsTests { + umbrella header "Pods-RHSideButtonsTests-umbrella.h" + + export * + module * { export * } +} diff --git a/ExampleProject/Pods/Target Support Files/Pods-RHSideButtonsTests/Pods-RHSideButtonsTests.release.xcconfig b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtonsTests/Pods-RHSideButtonsTests.release.xcconfig new file mode 100644 index 0000000..8b1315d --- /dev/null +++ b/ExampleProject/Pods/Target Support Files/Pods-RHSideButtonsTests/Pods-RHSideButtonsTests.release.xcconfig @@ -0,0 +1,6 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/ExampleProject/RHSideButtons.xcodeproj/project.pbxproj b/ExampleProject/RHSideButtons.xcodeproj/project.pbxproj new file mode 100644 index 0000000..b17d541 --- /dev/null +++ b/ExampleProject/RHSideButtons.xcodeproj/project.pbxproj @@ -0,0 +1,582 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + B186F63F1D3B6FED000DDD94 /* ButtonsDemoPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B186F63E1D3B6FED000DDD94 /* ButtonsDemoPresenter.swift */; }; + E1109DF01CF4ACB000FD9EEE /* RHSideButtonAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1109DEF1CF4ACB000FD9EEE /* RHSideButtonAnimator.swift */; }; + E1C1CDB41CF72B1F00B33D15 /* RHTriggerButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1C1CDB31CF72B1F00B33D15 /* RHTriggerButtonView.swift */; }; + E1C1CDC11CF7300B00B33D15 /* RHSideButtonAnimatorProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1C1CDC01CF7300B00B33D15 /* RHSideButtonAnimatorProtocol.swift */; }; + E1D4459C1CEF79ED003AF888 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1D4459B1CEF79ED003AF888 /* AppDelegate.swift */; }; + E1D445A31CEF79ED003AF888 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E1D445A21CEF79ED003AF888 /* Assets.xcassets */; }; + E1D445A61CEF79ED003AF888 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E1D445A41CEF79ED003AF888 /* LaunchScreen.storyboard */; }; + E1D445B11CEF79EE003AF888 /* RHSideButtonsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1D445B01CEF79EE003AF888 /* RHSideButtonsTests.swift */; }; + E1D445BD1CEF7BE0003AF888 /* MainView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1D445BC1CEF7BE0003AF888 /* MainView.swift */; }; + E1D445BF1CEF7BF8003AF888 /* MainViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1D445BE1CEF7BF8003AF888 /* MainViewController.swift */; }; + E1D445C21CEF7CF2003AF888 /* RHSideButtons.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1D445C11CEF7CF2003AF888 /* RHSideButtons.swift */; }; + E1D445CA1CF23569003AF888 /* RHButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1D445C81CF23569003AF888 /* RHButtonView.swift */; }; + E1D445CB1CF23569003AF888 /* RHButtonViewConfigProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1D445C91CF23569003AF888 /* RHButtonViewConfigProtocol.swift */; }; + EC9EE9FF60FC905CC3584411 /* Pods_RHSideButtonsTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C667E62B88195E0D673E8B62 /* Pods_RHSideButtonsTests.framework */; }; + F8D888DADC623B7578D6114F /* Pods_RHSideButtons.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4E6D54D9280E12452F7CD5BA /* Pods_RHSideButtons.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + E1D445AD1CEF79EE003AF888 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = E1D445901CEF79ED003AF888 /* Project object */; + proxyType = 1; + remoteGlobalIDString = E1D445971CEF79ED003AF888; + remoteInfo = RHSideButtons; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 44BF0B0CACA79661318B6C2D /* Pods-RHSideButtons.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RHSideButtons.debug.xcconfig"; path = "Pods/Target Support Files/Pods-RHSideButtons/Pods-RHSideButtons.debug.xcconfig"; sourceTree = ""; }; + 4E6D54D9280E12452F7CD5BA /* Pods_RHSideButtons.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RHSideButtons.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 65654F5512697A08C891B6CE /* Pods-RHSideButtons.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RHSideButtons.release.xcconfig"; path = "Pods/Target Support Files/Pods-RHSideButtons/Pods-RHSideButtons.release.xcconfig"; sourceTree = ""; }; + 6EF65DABB9811D9C6C8E999F /* Pods-RHSideButtonsTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RHSideButtonsTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-RHSideButtonsTests/Pods-RHSideButtonsTests.release.xcconfig"; sourceTree = ""; }; + 8F96F0D6931E8559F900CBE0 /* Pods-RHSideButtonsTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RHSideButtonsTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-RHSideButtonsTests/Pods-RHSideButtonsTests.debug.xcconfig"; sourceTree = ""; }; + B186F63E1D3B6FED000DDD94 /* ButtonsDemoPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ButtonsDemoPresenter.swift; sourceTree = ""; }; + C667E62B88195E0D673E8B62 /* Pods_RHSideButtonsTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RHSideButtonsTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E1109DEF1CF4ACB000FD9EEE /* RHSideButtonAnimator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RHSideButtonAnimator.swift; path = RHSideButtons/RHSideButtonAnimator.swift; sourceTree = ""; }; + E1C1CDB31CF72B1F00B33D15 /* RHTriggerButtonView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RHTriggerButtonView.swift; path = RHSideButtons/RHTriggerButtonView.swift; sourceTree = ""; }; + E1C1CDC01CF7300B00B33D15 /* RHSideButtonAnimatorProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RHSideButtonAnimatorProtocol.swift; path = RHSideButtons/RHSideButtonAnimatorProtocol.swift; sourceTree = ""; }; + E1D445981CEF79ED003AF888 /* RHSideButtons.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = RHSideButtons.app; sourceTree = BUILT_PRODUCTS_DIR; }; + E1D4459B1CEF79ED003AF888 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + E1D445A21CEF79ED003AF888 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + E1D445A51CEF79ED003AF888 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + E1D445A71CEF79ED003AF888 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + E1D445AC1CEF79EE003AF888 /* RHSideButtonsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RHSideButtonsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + E1D445B01CEF79EE003AF888 /* RHSideButtonsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RHSideButtonsTests.swift; sourceTree = ""; }; + E1D445B21CEF79EE003AF888 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + E1D445BC1CEF7BE0003AF888 /* MainView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MainView.swift; path = MainViewController/MainView.swift; sourceTree = ""; }; + E1D445BE1CEF7BF8003AF888 /* MainViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MainViewController.swift; path = MainViewController/MainViewController.swift; sourceTree = ""; }; + E1D445C11CEF7CF2003AF888 /* RHSideButtons.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RHSideButtons.swift; path = RHSideButtons/RHSideButtons.swift; sourceTree = ""; }; + E1D445C81CF23569003AF888 /* RHButtonView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RHButtonView.swift; path = RHSideButtons/RHButtonView.swift; sourceTree = ""; }; + E1D445C91CF23569003AF888 /* RHButtonViewConfigProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RHButtonViewConfigProtocol.swift; path = RHSideButtons/RHButtonViewConfigProtocol.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + E1D445951CEF79ED003AF888 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F8D888DADC623B7578D6114F /* Pods_RHSideButtons.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E1D445A91CEF79EE003AF888 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + EC9EE9FF60FC905CC3584411 /* Pods_RHSideButtonsTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 359893613F3D55B297FBF20E /* Frameworks */ = { + isa = PBXGroup; + children = ( + 4E6D54D9280E12452F7CD5BA /* Pods_RHSideButtons.framework */, + C667E62B88195E0D673E8B62 /* Pods_RHSideButtonsTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 83E5837437E2002C9B924423 /* Pods */ = { + isa = PBXGroup; + children = ( + 44BF0B0CACA79661318B6C2D /* Pods-RHSideButtons.debug.xcconfig */, + 65654F5512697A08C891B6CE /* Pods-RHSideButtons.release.xcconfig */, + 8F96F0D6931E8559F900CBE0 /* Pods-RHSideButtonsTests.debug.xcconfig */, + 6EF65DABB9811D9C6C8E999F /* Pods-RHSideButtonsTests.release.xcconfig */, + ); + name = Pods; + sourceTree = ""; + }; + E1D4458F1CEF79ED003AF888 = { + isa = PBXGroup; + children = ( + E1D4459A1CEF79ED003AF888 /* RHSideButtons */, + E1D445AF1CEF79EE003AF888 /* RHSideButtonsTests */, + E1D445991CEF79ED003AF888 /* Products */, + 83E5837437E2002C9B924423 /* Pods */, + 359893613F3D55B297FBF20E /* Frameworks */, + ); + sourceTree = ""; + }; + E1D445991CEF79ED003AF888 /* Products */ = { + isa = PBXGroup; + children = ( + E1D445981CEF79ED003AF888 /* RHSideButtons.app */, + E1D445AC1CEF79EE003AF888 /* RHSideButtonsTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + E1D4459A1CEF79ED003AF888 /* RHSideButtons */ = { + isa = PBXGroup; + children = ( + E1D445C01CEF7CB1003AF888 /* RHSideButtons */, + E1D445BB1CEF7B86003AF888 /* MainViewController */, + E1D4459B1CEF79ED003AF888 /* AppDelegate.swift */, + E1D445A21CEF79ED003AF888 /* Assets.xcassets */, + E1D445A41CEF79ED003AF888 /* LaunchScreen.storyboard */, + E1D445A71CEF79ED003AF888 /* Info.plist */, + ); + path = RHSideButtons; + sourceTree = ""; + }; + E1D445AF1CEF79EE003AF888 /* RHSideButtonsTests */ = { + isa = PBXGroup; + children = ( + E1D445B01CEF79EE003AF888 /* RHSideButtonsTests.swift */, + E1D445B21CEF79EE003AF888 /* Info.plist */, + ); + path = RHSideButtonsTests; + sourceTree = ""; + }; + E1D445BB1CEF7B86003AF888 /* MainViewController */ = { + isa = PBXGroup; + children = ( + E1D445BE1CEF7BF8003AF888 /* MainViewController.swift */, + E1D445BC1CEF7BE0003AF888 /* MainView.swift */, + B186F63E1D3B6FED000DDD94 /* ButtonsDemoPresenter.swift */, + ); + name = MainViewController; + sourceTree = ""; + }; + E1D445C01CEF7CB1003AF888 /* RHSideButtons */ = { + isa = PBXGroup; + children = ( + E1C1CDC01CF7300B00B33D15 /* RHSideButtonAnimatorProtocol.swift */, + E1D445C11CEF7CF2003AF888 /* RHSideButtons.swift */, + E1D445C81CF23569003AF888 /* RHButtonView.swift */, + E1D445C91CF23569003AF888 /* RHButtonViewConfigProtocol.swift */, + E1109DEF1CF4ACB000FD9EEE /* RHSideButtonAnimator.swift */, + E1C1CDB31CF72B1F00B33D15 /* RHTriggerButtonView.swift */, + ); + name = RHSideButtons; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + E1D445971CEF79ED003AF888 /* RHSideButtons */ = { + isa = PBXNativeTarget; + buildConfigurationList = E1D445B51CEF79EE003AF888 /* Build configuration list for PBXNativeTarget "RHSideButtons" */; + buildPhases = ( + 424E8246276C5082869E6D62 /* [CP] Check Pods Manifest.lock */, + E1D445941CEF79ED003AF888 /* Sources */, + E1D445951CEF79ED003AF888 /* Frameworks */, + E1D445961CEF79ED003AF888 /* Resources */, + 2C6A9AFD27124CA3C69D65EA /* [CP] Embed Pods Frameworks */, + F98CFE76DCE677A5D2B55CB9 /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = RHSideButtons; + productName = RHSideButtons; + productReference = E1D445981CEF79ED003AF888 /* RHSideButtons.app */; + productType = "com.apple.product-type.application"; + }; + E1D445AB1CEF79EE003AF888 /* RHSideButtonsTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = E1D445B81CEF79EE003AF888 /* Build configuration list for PBXNativeTarget "RHSideButtonsTests" */; + buildPhases = ( + 2701B08ABACA92D4F6A40788 /* [CP] Check Pods Manifest.lock */, + E1D445A81CEF79EE003AF888 /* Sources */, + E1D445A91CEF79EE003AF888 /* Frameworks */, + E1D445AA1CEF79EE003AF888 /* Resources */, + E4C0DD574CC267C5172AA891 /* [CP] Embed Pods Frameworks */, + 5E1B9C58C693C40C66A43184 /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + E1D445AE1CEF79EE003AF888 /* PBXTargetDependency */, + ); + name = RHSideButtonsTests; + productName = RHSideButtonsTests; + productReference = E1D445AC1CEF79EE003AF888 /* RHSideButtonsTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + E1D445901CEF79ED003AF888 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0730; + LastUpgradeCheck = 0730; + ORGANIZATIONNAME = "Robert Herdzik"; + TargetAttributes = { + E1D445971CEF79ED003AF888 = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 0810; + }; + E1D445AB1CEF79EE003AF888 = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 0810; + TestTargetID = E1D445971CEF79ED003AF888; + }; + }; + }; + buildConfigurationList = E1D445931CEF79ED003AF888 /* Build configuration list for PBXProject "RHSideButtons" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = E1D4458F1CEF79ED003AF888; + productRefGroup = E1D445991CEF79ED003AF888 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + E1D445971CEF79ED003AF888 /* RHSideButtons */, + E1D445AB1CEF79EE003AF888 /* RHSideButtonsTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + E1D445961CEF79ED003AF888 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E1D445A61CEF79ED003AF888 /* LaunchScreen.storyboard in Resources */, + E1D445A31CEF79ED003AF888 /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E1D445AA1CEF79EE003AF888 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 2701B08ABACA92D4F6A40788 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + 2C6A9AFD27124CA3C69D65EA /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-RHSideButtons/Pods-RHSideButtons-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 424E8246276C5082869E6D62 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + 5E1B9C58C693C40C66A43184 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-RHSideButtonsTests/Pods-RHSideButtonsTests-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + E4C0DD574CC267C5172AA891 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-RHSideButtonsTests/Pods-RHSideButtonsTests-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + F98CFE76DCE677A5D2B55CB9 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-RHSideButtons/Pods-RHSideButtons-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + E1D445941CEF79ED003AF888 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E1D445CB1CF23569003AF888 /* RHButtonViewConfigProtocol.swift in Sources */, + E1C1CDC11CF7300B00B33D15 /* RHSideButtonAnimatorProtocol.swift in Sources */, + E1D445BF1CEF7BF8003AF888 /* MainViewController.swift in Sources */, + E1109DF01CF4ACB000FD9EEE /* RHSideButtonAnimator.swift in Sources */, + E1D445BD1CEF7BE0003AF888 /* MainView.swift in Sources */, + B186F63F1D3B6FED000DDD94 /* ButtonsDemoPresenter.swift in Sources */, + E1D4459C1CEF79ED003AF888 /* AppDelegate.swift in Sources */, + E1C1CDB41CF72B1F00B33D15 /* RHTriggerButtonView.swift in Sources */, + E1D445C21CEF7CF2003AF888 /* RHSideButtons.swift in Sources */, + E1D445CA1CF23569003AF888 /* RHButtonView.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E1D445A81CEF79EE003AF888 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E1D445B11CEF79EE003AF888 /* RHSideButtonsTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + E1D445AE1CEF79EE003AF888 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = E1D445971CEF79ED003AF888 /* RHSideButtons */; + targetProxy = E1D445AD1CEF79EE003AF888 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + E1D445A41CEF79ED003AF888 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + E1D445A51CEF79ED003AF888 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + E1D445B31CEF79EE003AF888 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=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 = 9.3; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + E1D445B41CEF79EE003AF888 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.3; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + E1D445B61CEF79EE003AF888 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 44BF0B0CACA79661318B6C2D /* Pods-RHSideButtons.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + INFOPLIST_FILE = RHSideButtons/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = x.RHSideButtons; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + }; + name = Debug; + }; + E1D445B71CEF79EE003AF888 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 65654F5512697A08C891B6CE /* Pods-RHSideButtons.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + INFOPLIST_FILE = RHSideButtons/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = x.RHSideButtons; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + }; + name = Release; + }; + E1D445B91CEF79EE003AF888 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8F96F0D6931E8559F900CBE0 /* Pods-RHSideButtonsTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + INFOPLIST_FILE = RHSideButtonsTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = x.RHSideButtonsTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/RHSideButtons.app/RHSideButtons"; + }; + name = Debug; + }; + E1D445BA1CEF79EE003AF888 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6EF65DABB9811D9C6C8E999F /* Pods-RHSideButtonsTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + INFOPLIST_FILE = RHSideButtonsTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = x.RHSideButtonsTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/RHSideButtons.app/RHSideButtons"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + E1D445931CEF79ED003AF888 /* Build configuration list for PBXProject "RHSideButtons" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E1D445B31CEF79EE003AF888 /* Debug */, + E1D445B41CEF79EE003AF888 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E1D445B51CEF79EE003AF888 /* Build configuration list for PBXNativeTarget "RHSideButtons" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E1D445B61CEF79EE003AF888 /* Debug */, + E1D445B71CEF79EE003AF888 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E1D445B81CEF79EE003AF888 /* Build configuration list for PBXNativeTarget "RHSideButtonsTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E1D445B91CEF79EE003AF888 /* Debug */, + E1D445BA1CEF79EE003AF888 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = E1D445901CEF79ED003AF888 /* Project object */; +} diff --git a/ExampleProject/RHSideButtons.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ExampleProject/RHSideButtons.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..821a24f --- /dev/null +++ b/ExampleProject/RHSideButtons.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/ExampleProject/RHSideButtons.xcodeproj/xcuserdata/robert.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/ExampleProject/RHSideButtons.xcodeproj/xcuserdata/robert.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 0000000..fe2b454 --- /dev/null +++ b/ExampleProject/RHSideButtons.xcodeproj/xcuserdata/robert.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,5 @@ + + + diff --git a/ExampleProject/RHSideButtons.xcodeproj/xcuserdata/robert.xcuserdatad/xcschemes/RHSideButtons.xcscheme b/ExampleProject/RHSideButtons.xcodeproj/xcuserdata/robert.xcuserdatad/xcschemes/RHSideButtons.xcscheme new file mode 100644 index 0000000..434e3b6 --- /dev/null +++ b/ExampleProject/RHSideButtons.xcodeproj/xcuserdata/robert.xcuserdatad/xcschemes/RHSideButtons.xcscheme @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ExampleProject/RHSideButtons.xcodeproj/xcuserdata/robertherdzik.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/ExampleProject/RHSideButtons.xcodeproj/xcuserdata/robertherdzik.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 0000000..fe2b454 --- /dev/null +++ b/ExampleProject/RHSideButtons.xcodeproj/xcuserdata/robertherdzik.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,5 @@ + + + diff --git a/ExampleProject/RHSideButtons.xcodeproj/xcuserdata/robertherdzik.xcuserdatad/xcschemes/RHSideButtons.xcscheme b/ExampleProject/RHSideButtons.xcodeproj/xcuserdata/robertherdzik.xcuserdatad/xcschemes/RHSideButtons.xcscheme new file mode 100644 index 0000000..434e3b6 --- /dev/null +++ b/ExampleProject/RHSideButtons.xcodeproj/xcuserdata/robertherdzik.xcuserdatad/xcschemes/RHSideButtons.xcscheme @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ExampleProject/RHSideButtons.xcworkspace/contents.xcworkspacedata b/ExampleProject/RHSideButtons.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..fc5d77f --- /dev/null +++ b/ExampleProject/RHSideButtons.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/ExampleProject/RHSideButtons/AppDelegate.swift b/ExampleProject/RHSideButtons/AppDelegate.swift new file mode 100644 index 0000000..420fa93 --- /dev/null +++ b/ExampleProject/RHSideButtons/AppDelegate.swift @@ -0,0 +1,36 @@ +// +// AppDelegate.swift +// RHSideButtons +// +// Created by Robert Herdzik on 20/05/16. +// Copyright © 2016 Robert Herdzik. All rights reserved. +// + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + var navigationController: UINavigationController! + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { + + navigationController = getPreparedNavigationController() + window?.rootViewController = navigationController + window?.makeKeyAndVisible() + + return true + } + + fileprivate func getPreparedNavigationController() -> UINavigationController { + let mainViewController = MainViewController(nibName: nil, bundle: nil) + + // I would like to show you how this control looks like, so simple demo presenter class was needed + let demoPresenter = ButtonsDemoPresenter(mainViewController: mainViewController) + mainViewController.demoPresenter = demoPresenter + + return UINavigationController(rootViewController: mainViewController) + } +} + diff --git a/ExampleProject/RHSideButtons/Assets.xcassets/AppIcon.appiconset/Contents.json b/ExampleProject/RHSideButtons/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..118c98f --- /dev/null +++ b/ExampleProject/RHSideButtons/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,38 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ExampleProject/RHSideButtons/Assets.xcassets/Contents.json b/ExampleProject/RHSideButtons/Assets.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/ExampleProject/RHSideButtons/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ExampleProject/RHSideButtons/Assets.xcassets/exit_icon.imageset/Contents.json b/ExampleProject/RHSideButtons/Assets.xcassets/exit_icon.imageset/Contents.json new file mode 100644 index 0000000..3031c70 --- /dev/null +++ b/ExampleProject/RHSideButtons/Assets.xcassets/exit_icon.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "exit_icon.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ExampleProject/RHSideButtons/Assets.xcassets/exit_icon.imageset/exit_icon.png b/ExampleProject/RHSideButtons/Assets.xcassets/exit_icon.imageset/exit_icon.png new file mode 100644 index 0000000..b7d1ccd Binary files /dev/null and b/ExampleProject/RHSideButtons/Assets.xcassets/exit_icon.imageset/exit_icon.png differ diff --git a/ExampleProject/RHSideButtons/Assets.xcassets/icon_1.imageset/Contents.json b/ExampleProject/RHSideButtons/Assets.xcassets/icon_1.imageset/Contents.json new file mode 100644 index 0000000..0994c08 --- /dev/null +++ b/ExampleProject/RHSideButtons/Assets.xcassets/icon_1.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "icon_1.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ExampleProject/RHSideButtons/Assets.xcassets/icon_1.imageset/icon_1.png b/ExampleProject/RHSideButtons/Assets.xcassets/icon_1.imageset/icon_1.png new file mode 100644 index 0000000..3bd0f2c Binary files /dev/null and b/ExampleProject/RHSideButtons/Assets.xcassets/icon_1.imageset/icon_1.png differ diff --git a/ExampleProject/RHSideButtons/Assets.xcassets/icon_2.imageset/Contents.json b/ExampleProject/RHSideButtons/Assets.xcassets/icon_2.imageset/Contents.json new file mode 100644 index 0000000..aea8750 --- /dev/null +++ b/ExampleProject/RHSideButtons/Assets.xcassets/icon_2.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "icon_2.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ExampleProject/RHSideButtons/Assets.xcassets/icon_2.imageset/icon_2.png b/ExampleProject/RHSideButtons/Assets.xcassets/icon_2.imageset/icon_2.png new file mode 100644 index 0000000..f1ca7a2 Binary files /dev/null and b/ExampleProject/RHSideButtons/Assets.xcassets/icon_2.imageset/icon_2.png differ diff --git a/ExampleProject/RHSideButtons/Assets.xcassets/icon_3.imageset/Contents.json b/ExampleProject/RHSideButtons/Assets.xcassets/icon_3.imageset/Contents.json new file mode 100644 index 0000000..140aed6 --- /dev/null +++ b/ExampleProject/RHSideButtons/Assets.xcassets/icon_3.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "icon_3.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ExampleProject/RHSideButtons/Assets.xcassets/icon_3.imageset/icon_3.png b/ExampleProject/RHSideButtons/Assets.xcassets/icon_3.imageset/icon_3.png new file mode 100644 index 0000000..50cc243 Binary files /dev/null and b/ExampleProject/RHSideButtons/Assets.xcassets/icon_3.imageset/icon_3.png differ diff --git a/ExampleProject/RHSideButtons/Assets.xcassets/trigger_img.imageset/Contents.json b/ExampleProject/RHSideButtons/Assets.xcassets/trigger_img.imageset/Contents.json new file mode 100644 index 0000000..299015b --- /dev/null +++ b/ExampleProject/RHSideButtons/Assets.xcassets/trigger_img.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "trigger_img.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ExampleProject/RHSideButtons/Assets.xcassets/trigger_img.imageset/trigger_img.png b/ExampleProject/RHSideButtons/Assets.xcassets/trigger_img.imageset/trigger_img.png new file mode 100644 index 0000000..832723e Binary files /dev/null and b/ExampleProject/RHSideButtons/Assets.xcassets/trigger_img.imageset/trigger_img.png differ diff --git a/ExampleProject/RHSideButtons/Base.lproj/LaunchScreen.storyboard b/ExampleProject/RHSideButtons/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..2e721e1 --- /dev/null +++ b/ExampleProject/RHSideButtons/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ExampleProject/RHSideButtons/ButtonsDemoPresenter.swift b/ExampleProject/RHSideButtons/ButtonsDemoPresenter.swift new file mode 100644 index 0000000..2072753 --- /dev/null +++ b/ExampleProject/RHSideButtons/ButtonsDemoPresenter.swift @@ -0,0 +1,33 @@ +// +// ButtonsDemoPresenter.swift +// RHSideButtons +// +// Created by Robert Herdzik on 17/07/16. +// Copyright © 2016 Robert Herdzik. All rights reserved. +// + +import Foundation + +class ButtonsDemoPresenter: NSObject { + + weak var mainViewController: MainViewController? + + init(mainViewController: MainViewController) { + self.mainViewController = mainViewController + + super.init() + } + + func start() { + perform(#selector(delayShow), with: nil, afterDelay: 1) + perform(#selector(delayHide), with: nil, afterDelay: 2) + } + + func delayShow() { + mainViewController?.castView().sideButtonsView?.showButtons() + } + + func delayHide() { + mainViewController?.castView().sideButtonsView?.hideButtons() + } +} diff --git a/ExampleProject/RHSideButtons/Info.plist b/ExampleProject/RHSideButtons/Info.plist new file mode 100644 index 0000000..8392cb4 --- /dev/null +++ b/ExampleProject/RHSideButtons/Info.plist @@ -0,0 +1,40 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + LaunchScreen + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/ExampleProject/RHSideButtons/MainViewController/MainView.swift b/ExampleProject/RHSideButtons/MainViewController/MainView.swift new file mode 100644 index 0000000..f0a817b --- /dev/null +++ b/ExampleProject/RHSideButtons/MainViewController/MainView.swift @@ -0,0 +1,41 @@ +// +// MainView.swift +// RHSideButtons +// +// Created by Robert Herdzik on 20/05/16. +// Copyright © 2016 Robert Herdzik. All rights reserved. +// + +import UIKit + +class MainView: UIView { + + fileprivate let triggerButtonMargin = CGFloat(85) + + var sideButtonsView: RHSideButtons? + + override init(frame: CGRect) { + super.init(frame: frame) + + setup() + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func layoutSubviews() { + super.layoutSubviews() + + // Layout Buttons + sideButtonsView?.setTriggerButtonPosition(CGPoint(x: bounds.width - triggerButtonMargin, y: bounds.height - triggerButtonMargin)) + } + + fileprivate func setup() { + backgroundColor = UIColor.lightGray + } + + func set(sideButtonsView view: RHSideButtons) { + sideButtonsView = view + } +} diff --git a/ExampleProject/RHSideButtons/MainViewController/MainViewController.swift b/ExampleProject/RHSideButtons/MainViewController/MainViewController.swift new file mode 100644 index 0000000..fbf42ef --- /dev/null +++ b/ExampleProject/RHSideButtons/MainViewController/MainViewController.swift @@ -0,0 +1,96 @@ +// +// ViewController.swift +// RHSideButtons +// +// Created by Robert Herdzik on 20/05/16. +// Copyright © 2016 Robert Herdzik. All rights reserved. +// + +import UIKit + +class MainViewController: UIViewController { + + var demoPresenter: ButtonsDemoPresenter? + var buttonsArr = [RHButtonView]() + + override func viewDidLoad() { + super.viewDidLoad() + + setup() + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + + castView().sideButtonsView?.reloadButtons() + } + + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + + // We want to see demo after view did appear + demoPresenter?.start() + } + + override func loadView() { + view = MainView() + } + + func castView() -> MainView { + return view as! MainView + } + + fileprivate func setup() { + addSideButtons() + } + + fileprivate func addSideButtons() { + + let triggerButton = RHTriggerButtonView(pressedImage: UIImage(named: "exit_icon")!) { + $0.image = UIImage(named: "trigger_img") + $0.hasShadow = true + } + + let sideButtonsView = RHSideButtons(parentView: castView(), triggerButton: triggerButton) + sideButtonsView.delegate = self + sideButtonsView.dataSource = self + + for index in 1...3 { + buttonsArr.append(generateButton(withImgName: "icon_\(index)")) + } + + castView().set(sideButtonsView: sideButtonsView) + castView().sideButtonsView?.reloadButtons() + } + + fileprivate func generateButton(withImgName imgName: String) -> RHButtonView { + + return RHButtonView { + $0.image = UIImage(named: imgName) + $0.hasShadow = true + } + } +} + +extension MainViewController: RHSideButtonsDataSource { + + func sideButtonsNumberOfButtons(_ sideButtons: RHSideButtons) -> Int { + return buttonsArr.count + } + + func sideButtons(_ sideButtons: RHSideButtons, buttonAtIndex index: Int) -> RHButtonView { + return buttonsArr[index] + } +} + +extension MainViewController: RHSideButtonsDelegate { + + func sideButtons(_ sideButtons: RHSideButtons, didSelectButtonAtIndex index: Int) { + print("🍭 button index tapped: \(index)") + } + + func sideButtons(_ sideButtons: RHSideButtons, didTriggerButtonChangeStateTo state: RHButtonState) { + print("🍭 Trigger button") + } +} + diff --git a/ExampleProject/RHSideButtons/RHSideButtons/RHButtonView.swift b/ExampleProject/RHSideButtons/RHSideButtons/RHButtonView.swift new file mode 100755 index 0000000..1ea7a86 --- /dev/null +++ b/ExampleProject/RHSideButtons/RHSideButtons/RHButtonView.swift @@ -0,0 +1,146 @@ +// +// RHButtonView.swift +// RHSideButtons +// +// Created by Robert Herdzik on 22/05/16. +// Copyright © 2016 Robert Herdzik. All rights reserved. +// + +import UIKit + +protocol RHButtonViewDelegate: class { + func didSelectButton(_ buttonView: RHButtonView) +} + +class RHButtonView: UIView, RHButtonViewConfigProtocol { + + typealias BuildCellBlock = (RHButtonViewConfigProtocol) -> Void + + weak var delegate: RHButtonViewDelegate? + + var bgColor: UIColor = UIColor.white { + didSet { + backgroundColor = bgColor + } + } + var image: UIImage? { + didSet { + setupImageViewIfNeeded() + updateImageView() + + layoutIfNeeded() + } + } + var hasShadow: Bool = true { + didSet { + hasShadow ? addShadow() : removeShadow() + + layoutIfNeeded() + } + } + var imgView: UIImageView? + + fileprivate let overlayView = UIView() + + override init(frame: CGRect) { + super.init(frame: frame) + + setup() + } + + convenience init(builder: BuildCellBlock) { + self.init(frame: CGRect.zero) + + builder(self) + } + + convenience init(builder: RHButtonViewConfigProtocol) { + self.init(frame: CGRect.zero) + + bgColor = builder.bgColor + image = builder.image + hasShadow = builder.hasShadow + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func layoutSubviews() { + super.layoutSubviews() + + // View Appearance + layer.cornerRadius = bounds.width/2 + + //Overlay Layer + overlayView.frame = bounds + overlayView.layer.cornerRadius = layer.cornerRadius + + // Image View + imgView?.frame = bounds + imgView?.layer.cornerRadius = layer.cornerRadius + + // Shadow + setShadowOffset(false) + } + + fileprivate func setup() { + setupOverlayLayer() + } + + fileprivate func setupOverlayLayer() { + overlayView.backgroundColor = UIColor.clear + overlayView.isUserInteractionEnabled = false + addSubview(overlayView) + } + + fileprivate func setupImageViewIfNeeded() { + if imgView != nil { return } + + imgView = UIImageView(image: image) + insertSubview(imgView!, belowSubview: overlayView) + } + + fileprivate func updateImageView() { + imgView?.image = image + imgView?.contentMode = .scaleAspectFit + imgView?.clipsToBounds = true + } + + fileprivate func addShadow() { + layer.shadowOpacity = 0.8 + layer.shadowColor = UIColor.darkGray.cgColor + } + + fileprivate func removeShadow() { + layer.shadowOpacity = 0 + } + + fileprivate func setShadowOffset(_ isSelected: Bool) { + let shadowOffsetX = isSelected ? CGFloat(1) : CGFloat(5) + let shadowOffsetY = isSelected ? CGFloat(0) : CGFloat(3) + layer.shadowOffset = CGSize(width: bounds.origin.x + shadowOffsetX, height: bounds.origin.y + shadowOffsetY) + } + + fileprivate func adjustAppearanceForStateSelected(_ selected: Bool) { + setShadowOffset(selected) + setOverlayColorForState(selected) + } + + fileprivate func setOverlayColorForState(_ selected: Bool) { + overlayView.backgroundColor = selected ? UIColor.black.withAlphaComponent(0.2) : UIColor.clear + } + + override func touchesBegan(_ touches: Set, with event: UIEvent?) { + adjustAppearanceForStateSelected(true) + } + + override func touchesCancelled(_ touches: Set, with event: UIEvent?) { + adjustAppearanceForStateSelected(false) + } + + override func touchesEnded(_ touches: Set, with event: UIEvent?) { + delegate?.didSelectButton(self) + adjustAppearanceForStateSelected(false) + } +} diff --git a/ExampleProject/RHSideButtons/RHSideButtons/RHButtonViewConfigProtocol.swift b/ExampleProject/RHSideButtons/RHSideButtons/RHButtonViewConfigProtocol.swift new file mode 100755 index 0000000..840e704 --- /dev/null +++ b/ExampleProject/RHSideButtons/RHSideButtons/RHButtonViewConfigProtocol.swift @@ -0,0 +1,15 @@ +// +// RHButtonViewConfigProtocol.swift +// RHSideButtons +// +// Created by Robert Herdzik on 22/05/16. +// Copyright © 2016 Robert Herdzik. All rights reserved. +// + +import UIKit + +protocol RHButtonViewConfigProtocol: class { + var bgColor: UIColor { get set } + var image: UIImage? { get set } + var hasShadow: Bool { get set } +} \ No newline at end of file diff --git a/ExampleProject/RHSideButtons/RHSideButtons/RHSideButtonAnimator.swift b/ExampleProject/RHSideButtons/RHSideButtons/RHSideButtonAnimator.swift new file mode 100755 index 0000000..e646d1b --- /dev/null +++ b/ExampleProject/RHSideButtons/RHSideButtons/RHSideButtonAnimator.swift @@ -0,0 +1,51 @@ +// +// RHSideButtonAnimator.swift +// RHSideButtons +// +// Created by Robert Herdzik on 24/05/16. +// Copyright © 2016 Robert Herdzik. All rights reserved. +// + +import UIKit + +struct RHSideButtonAnimator { + + let commonAnimationDuration = TimeInterval(0.4) + let commonSpringDumping = CGFloat(0.4) + let commonInitSpringVelocity = CGFloat(0.1) + + fileprivate func commonAnimation(_ delay: TimeInterval = 0, animations: @escaping () -> (), completition: ((Bool) -> ())? = nil) { + UIView.animate(withDuration: commonAnimationDuration, delay: delay, usingSpringWithDamping: commonSpringDumping, initialSpringVelocity: commonInitSpringVelocity, options: .curveEaseOut, animations: animations, completion: completition) + } +} + +extension RHSideButtonAnimator: RHSideButtonAnimatorProtocol { + + func animateTriggerButton(_ button: RHButtonView, state: RHButtonState, completition: (() -> ())?) { + let scale = state == .hidden ? CGFloat(1) : CGFloat (0.7) + let trans = CGAffineTransform(scaleX: scale, y: scale) + + commonAnimation(animations: { + button.transform = trans + }) { finish in + if finish { completition?() } + } + } + + func animateButtonsPositionX(_ buttonsArr: [RHButtonView], targetPos: CGPoint, completition: (() -> ())? = nil) { + + var delay: TimeInterval = 0 + for button in buttonsArr { + let completitionBlock = button.isEqual(buttonsArr.last) ? completition : nil + + commonAnimation(delay, animations: { + button.frame = CGRect(origin: CGPoint(x: targetPos.x, y: button.frame.origin.y), size: button.bounds.size) + + }) { finish in + if finish { completitionBlock?() } + } + + delay += 0.1 + } + } +} diff --git a/ExampleProject/RHSideButtons/RHSideButtons/RHSideButtonAnimatorProtocol.swift b/ExampleProject/RHSideButtons/RHSideButtons/RHSideButtonAnimatorProtocol.swift new file mode 100755 index 0000000..953e111 --- /dev/null +++ b/ExampleProject/RHSideButtons/RHSideButtons/RHSideButtonAnimatorProtocol.swift @@ -0,0 +1,14 @@ +// +// RHSideButtonAnimatorProtocol.swift +// RHSideButtons +// +// Created by Robert Herdzik on 26/05/16. +// Copyright © 2016 Robert Herdzik. All rights reserved. +// + +import UIKit + +protocol RHSideButtonAnimatorProtocol { + func animateTriggerButton(_ button: RHButtonView, state: RHButtonState, completition: (() -> ())?) + func animateButtonsPositionX(_ buttonsArr: [RHButtonView], targetPos: CGPoint, completition: (() -> ())?) +} diff --git a/ExampleProject/RHSideButtons/RHSideButtons/RHSideButtons.swift b/ExampleProject/RHSideButtons/RHSideButtons/RHSideButtons.swift new file mode 100755 index 0000000..1b1221d --- /dev/null +++ b/ExampleProject/RHSideButtons/RHSideButtons/RHSideButtons.swift @@ -0,0 +1,218 @@ +// +// RHSideButtons.swift +// RHSideButtons +// +// Created by Robert Herdzik on 20/05/16. +// Copyright © 2016 Robert Herdzik. All rights reserved. +// + +import UIKit + +protocol RHSideButtonsDelegate: class { + func sideButtons(_ sideButtons: RHSideButtons, didSelectButtonAtIndex index: Int) + func sideButtons(_ sideButtons: RHSideButtons, didTriggerButtonChangeStateTo state: RHButtonState) +} + +protocol RHSideButtonsDataSource: class { + func sideButtonsNumberOfButtons(_ sideButtons: RHSideButtons) -> Int + func sideButtons(_ sideButtons: RHSideButtons, buttonAtIndex index: Int) -> RHButtonView +} + +enum RHButtonState: Int { + case hidden = 0 + case shown +} + +class RHSideButtons { + + weak var parentView: UIView? + weak var delegate: RHSideButtonsDelegate? + weak var dataSource: RHSideButtonsDataSource? + + fileprivate let buttonSize = CGSize(width: 55, height: 55) + fileprivate let verticalSpacing = CGFloat(15) + fileprivate var hideStateOffset: CGFloat { + get { + guard let parentView = parentView else { return 0 } + + let parentViewWidth = parentView.bounds.width + let hideOffsetX = buttonSize.width * (3/2) + var resultPosX = parentViewWidth + hideOffsetX + if (triggerButton.frame.origin.x + buttonSize.width/2 < parentViewWidth / 2) { + resultPosX = -(hideOffsetX + buttonSize.width) + } + + return resultPosX + } + } + + fileprivate var buttonsArr = [RHButtonView]() + fileprivate let buttonsAnimator: RHSideButtonAnimatorProtocol + fileprivate var descriptionArr = [String]() + + fileprivate(set) var state: RHButtonState = .hidden { + didSet { + aniamateButtonForState(state) {} + markTriggerButtonAsPressed(state == .shown) + buttonsAnimator.animateTriggerButton(triggerButton, state: state) {} + } + } + + var triggerButton: RHTriggerButtonView! + + init(parentView: UIView, triggerButton: RHTriggerButtonView, buttonsAnimator: RHSideButtonAnimatorProtocol) { + self.parentView = parentView + self.triggerButton = triggerButton + self.buttonsAnimator = buttonsAnimator + + setup() + } + + convenience init(parentView: UIView, triggerButton: RHTriggerButtonView) { + // At this moment "RHSideButtonAnimator" is only existing and default button animator + self.init(parentView: parentView, triggerButton: triggerButton, buttonsAnimator: RHSideButtonAnimator()) + } + + fileprivate func setup() { + setDefaultTriggerButtonPosition() + setupTriggerButton() + layoutButtons() + } + + fileprivate func setupTriggerButton() { + guard let parentView = parentView else { return } + + setDefaultTriggerButtonPosition() + triggerButton.delegate = self + + parentView.addSubview(triggerButton) + parentView.bringSubview(toFront: triggerButton) + } + + fileprivate func setDefaultTriggerButtonPosition() { + guard let parentView = parentView else { return } + + triggerButton.frame = CGRect(x: parentView.bounds.width - buttonSize.width, y: parentView.bounds.height - buttonSize.height, width: buttonSize.width, height: buttonSize.height) + } + + fileprivate func markTriggerButtonAsPressed(_ pressed: Bool) { + triggerButton.markAsPressed(pressed) + } + + fileprivate func layoutButtons() { + var prevButton: RHButtonView? = nil + for button in buttonsArr { + var buttonPosY = CGFloat(0) + if let prevButton = prevButton { + buttonPosY = prevButton.frame.minY - verticalSpacing - buttonSize.height + } else { + // Spacing has to be applied to prevent jumping rest of buttons + let spacingFromTriggerButtonY = CGFloat(18) // TODO add offset according to scale + buttonPosY = triggerButton.frame.midY - spacingFromTriggerButtonY - verticalSpacing - buttonSize.height + } + + let buttonPosX = getButtonPoxXAccordingToState(state) + // Buttons should be laid out according to center of trigger button + button.frame = CGRect(origin: CGPoint(x: buttonPosX, y: buttonPosY), size: buttonSize) + + prevButton = button + } + } + + fileprivate func getButtonPoxXAccordingToState(_ state: RHButtonState) -> CGFloat { + return state == .hidden ? hideStateOffset : triggerButton.frame.midX - buttonSize.width/2 + } + + fileprivate func removeButtons() { + _ = buttonsArr.map{ $0.removeFromSuperview() } + buttonsArr.removeAll() + } + + fileprivate func addButtons() { + guard let numberOfButtons = dataSource?.sideButtonsNumberOfButtons(self) else { return } + + for index in 0.. ())? = nil) { + let buttonPosX = getButtonPoxXAccordingToState(state) + let targetPoint = CGPoint(x: buttonPosX, y: 0) + + buttonsAnimator.animateButtonsPositionX(buttonsArr, targetPos: targetPoint, completition: completition) + } + + /** + Method reload whole buttons. Use this method right after you made some changes in Side Buttons model. + */ + func reloadButtons() { + removeButtons() + addButtons() + layoutButtons() + } + + /** + Use this method for positioning of trigger button (should be invoken right after your view of ViewController is loaded and has proper frame). + + - parameter position: position of right button, have in mind that if you set position of trigger button you need to substract/add his width or height (it depends on position in view axis) + */ + func setTriggerButtonPosition(_ position: CGPoint) { + let scale = state == .hidden ? CGFloat(1) : CGFloat (0.5) + let offset = triggerButton.frame.size.width/2 * scale + let newPosition = state == .hidden ? position : CGPoint(x: position.x + offset, y: position.y + offset) + triggerButton.frame = CGRect(origin: newPosition, size: triggerButton.frame.size) + + reloadButtons() + } + + /** + If you want to hide trigger button in some point of lifecycle of your VC you can using this method + */ + func hideTriggerButton() { + hideButtons() + triggerButton.isHidden = true + } + + /** + Method shows trigger button (if was hidden before) + */ + func showTriggerButton() { + hideButtons() + triggerButton.isHidden = false + } + + /** + Method show with animation all side buttons + */ + func showButtons() { + state = .shown + } + + /** + Method hide with animation all side buttons + */ + func hideButtons() { + state = .hidden + } +} + +extension RHSideButtons: RHButtonViewDelegate { + + func didSelectButton(_ buttonView: RHButtonView) { + if let indexOfButton = buttonsArr.index(of: buttonView) { + delegate?.sideButtons(self, didSelectButtonAtIndex: indexOfButton) + + state = .hidden + } else { + state = state == .shown ? .hidden : .shown + + delegate?.sideButtons(self, didTriggerButtonChangeStateTo: state) + } + } +} diff --git a/ExampleProject/RHSideButtons/RHSideButtons/RHTriggerButtonView.swift b/ExampleProject/RHSideButtons/RHSideButtons/RHTriggerButtonView.swift new file mode 100644 index 0000000..beeb29b --- /dev/null +++ b/ExampleProject/RHSideButtons/RHSideButtons/RHTriggerButtonView.swift @@ -0,0 +1,45 @@ +// +// RHTriggerButtonView.swift +// RHSideButtons +// +// Created by Robert Herdzik on 26/05/16. +// Copyright © 2016 Robert Herdzik. All rights reserved. +// + +import UIKit + +class RHTriggerButtonView: RHButtonView { + + fileprivate var notPressedImageHolder: UIImage? + fileprivate var pressedImage: UIImage? + + init(frame: CGRect, pressedImage: UIImage) { + self.pressedImage = pressedImage + + super.init(frame: frame) + } + + convenience init(pressedImage: UIImage, builder: BuildCellBlock) { + self.init(frame: CGRect.zero, pressedImage: pressedImage) + + builder(self) + } + + convenience init(pressedImage: UIImage, builder: RHButtonViewConfigProtocol) { + self.init(frame: CGRect.zero, pressedImage: pressedImage) + + bgColor = builder.bgColor + image = builder.image + hasShadow = builder.hasShadow + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + func markAsPressed(_ pressed: Bool) { + if notPressedImageHolder == nil { notPressedImageHolder = image } + + image = pressed ? pressedImage : notPressedImageHolder + } +} diff --git a/ExampleProject/RHSideButtonsTests/Info.plist b/ExampleProject/RHSideButtonsTests/Info.plist new file mode 100644 index 0000000..ba72822 --- /dev/null +++ b/ExampleProject/RHSideButtonsTests/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/ExampleProject/RHSideButtonsTests/RHSideButtonsTests.swift b/ExampleProject/RHSideButtonsTests/RHSideButtonsTests.swift new file mode 100644 index 0000000..152ba51 --- /dev/null +++ b/ExampleProject/RHSideButtonsTests/RHSideButtonsTests.swift @@ -0,0 +1,36 @@ +// +// RHSideButtonsTests.swift +// RHSideButtonsTests +// +// Created by Robert Herdzik on 20/05/16. +// Copyright © 2016 Robert Herdzik. All rights reserved. +// + +import XCTest +@testable import RHSideButtons + +class RHSideButtonsTests: XCTestCase { + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testPerformanceExample() { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +}