├── .gitignore ├── .travis.yml ├── Example ├── Podfile ├── Podfile.lock ├── Pods │ ├── Local Podspecs │ │ └── SwipeableTableViewCell.podspec.json │ ├── Manifest.lock │ ├── Pods.xcodeproj │ │ └── project.pbxproj │ └── Target Support Files │ │ ├── Pods-SwipeableTableViewCell_Example │ │ ├── Info.plist │ │ ├── Pods-SwipeableTableViewCell_Example-acknowledgements.markdown │ │ ├── Pods-SwipeableTableViewCell_Example-acknowledgements.plist │ │ ├── Pods-SwipeableTableViewCell_Example-dummy.m │ │ ├── Pods-SwipeableTableViewCell_Example-frameworks.sh │ │ ├── Pods-SwipeableTableViewCell_Example-resources.sh │ │ ├── Pods-SwipeableTableViewCell_Example-umbrella.h │ │ ├── Pods-SwipeableTableViewCell_Example.debug.xcconfig │ │ ├── Pods-SwipeableTableViewCell_Example.modulemap │ │ └── Pods-SwipeableTableViewCell_Example.release.xcconfig │ │ ├── Pods-SwipeableTableViewCell_Tests │ │ ├── Info.plist │ │ ├── Pods-SwipeableTableViewCell_Tests-acknowledgements.markdown │ │ ├── Pods-SwipeableTableViewCell_Tests-acknowledgements.plist │ │ ├── Pods-SwipeableTableViewCell_Tests-dummy.m │ │ ├── Pods-SwipeableTableViewCell_Tests-frameworks.sh │ │ ├── Pods-SwipeableTableViewCell_Tests-resources.sh │ │ ├── Pods-SwipeableTableViewCell_Tests-umbrella.h │ │ ├── Pods-SwipeableTableViewCell_Tests.debug.xcconfig │ │ ├── Pods-SwipeableTableViewCell_Tests.modulemap │ │ └── Pods-SwipeableTableViewCell_Tests.release.xcconfig │ │ └── SwipeableTableViewCell │ │ ├── Info.plist │ │ ├── SwipeableTableViewCell-dummy.m │ │ ├── SwipeableTableViewCell-prefix.pch │ │ ├── SwipeableTableViewCell-umbrella.h │ │ ├── SwipeableTableViewCell.modulemap │ │ └── SwipeableTableViewCell.xcconfig ├── SwipeableTableViewCell.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── xcshareddata │ │ └── xcschemes │ │ └── SwipeableTableViewCell-Example.xcscheme ├── SwipeableTableViewCell.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── IDEWorkspaceChecks.plist │ │ └── WorkspaceSettings.xcsettings ├── SwipeableTableViewCell │ ├── AppDelegate.swift │ ├── Base.lproj │ │ └── LaunchScreen.xib │ ├── Colors.swift │ ├── Font.swift │ ├── HeaderView.swift │ ├── Images.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Contents.json │ │ ├── avatar1.imageset │ │ │ ├── Contents.json │ │ │ ├── avatar1.png │ │ │ ├── avatar1@2x.png │ │ │ └── avatar1@3x.png │ │ ├── avatar2.imageset │ │ │ ├── Contents.json │ │ │ ├── avatar2.png │ │ │ ├── avatar2@2x.png │ │ │ └── avatar2@3x.png │ │ ├── avatar3.imageset │ │ │ ├── Contents.json │ │ │ ├── avatar3.png │ │ │ ├── avatar3@2x.png │ │ │ └── avatar3@3x.png │ │ ├── avatar4.imageset │ │ │ ├── Contents.json │ │ │ ├── avatar4.png │ │ │ ├── avatar4@2x.png │ │ │ └── avatar4@3x.png │ │ ├── avatar5.imageset │ │ │ ├── Contents.json │ │ │ ├── avatar5.png │ │ │ ├── avatar5@2x.png │ │ │ └── avatar5@3x.png │ │ ├── avatar6.imageset │ │ │ ├── Contents.json │ │ │ ├── avatar6.png │ │ │ ├── avatar6@2x.png │ │ │ └── avatar6@3x.png │ │ ├── star.imageset │ │ │ ├── Contents.json │ │ │ └── star.pdf │ │ └── trash.imageset │ │ │ ├── Contents.json │ │ │ └── trash.pdf │ ├── Info.plist │ ├── TableViewCell.swift │ ├── TableViewController.swift │ └── TableViewModel.swift └── Tests │ ├── Info.plist │ └── Tests.swift ├── LICENSE ├── README.md ├── SwipeableTableViewCell.podspec ├── SwipeableTableViewCell └── Classes │ ├── StretchyCircleButton.swift │ ├── StretchyCircleLayer.swift │ ├── StretchyView.swift │ ├── SwipeableTableViewCell.swift │ └── TimingFunctions.swift └── _Pods.xcodeproj /.gitignore: -------------------------------------------------------------------------------- 1 | *.pbxuser 2 | !default.pbxuser 3 | *.mode1v3 4 | !default.mode1v3 5 | *.mode2v3 6 | !default.mode2v3 7 | *.perspectivev3 8 | !default.perspectivev3 9 | xcuserdata 10 | *.xccheckout 11 | *.moved-aside 12 | DerivedData 13 | *.hmap 14 | *.ipa 15 | *.xcuserstate 16 | #.DS_Store 17 | **/.DS_Store 18 | .idea/ 19 | *.dSYM.zip 20 | 21 | # Fastlane 22 | fastlane/report.xml 23 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | # references: 2 | # * https://www.objc.io/issues/6-build-tools/travis-ci/ 3 | # * https://github.com/supermarin/xcpretty#usage 4 | 5 | osx_image: xcode7.3 6 | language: objective-c 7 | # cache: cocoapods 8 | # podfile: Example/Podfile 9 | # before_install: 10 | # - gem install cocoapods # Since Travis is not always on latest version 11 | # - pod install --project-directory=Example 12 | script: 13 | - set -o pipefail && xcodebuild test -enableCodeCoverage YES -workspace Example/SwipeableTableViewCell.xcworkspace -scheme SwipeableTableViewCell-Example -sdk iphonesimulator9.3 ONLY_ACTIVE_ARCH=NO | xcpretty 14 | - pod lib lint 15 | -------------------------------------------------------------------------------- /Example/Podfile: -------------------------------------------------------------------------------- 1 | use_frameworks! 2 | 3 | target 'SwipeableTableViewCell_Example' do 4 | pod 'SwipeableTableViewCell', :path => '../' 5 | 6 | target 'SwipeableTableViewCell_Tests' do 7 | inherit! :search_paths 8 | 9 | 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /Example/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - SwipeableTableViewCell (0.2.1) 3 | 4 | DEPENDENCIES: 5 | - SwipeableTableViewCell (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | SwipeableTableViewCell: 9 | :path: "../" 10 | 11 | SPEC CHECKSUMS: 12 | SwipeableTableViewCell: f12de42d71c64b65b06995ab69b3fa455b54f534 13 | 14 | PODFILE CHECKSUM: aed93b56deeb56b558530222f935a3de2db5689a 15 | 16 | COCOAPODS: 1.5.3 17 | -------------------------------------------------------------------------------- /Example/Pods/Local Podspecs/SwipeableTableViewCell.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "SwipeableTableViewCell", 3 | "version": "0.2.1", 4 | "summary": "Swipable subclass of UITableViewCell", 5 | "description": "A subclass of UITableViewCell which adds an ability to swipe left the content of the cell.", 6 | "homepage": "https://github.com/10clouds/SwipeableTableViewCell-ios", 7 | "license": { 8 | "type": "MIT", 9 | "file": "LICENSE" 10 | }, 11 | "authors": { 12 | "Hubert Kuczynski": "hubert.kuczynski@10clouds.com" 13 | }, 14 | "source": { 15 | "git": "https://github.com/10clouds/SwipeableTableViewCell-ios.git", 16 | "tag": "0.2.1" 17 | }, 18 | "platforms": { 19 | "ios": "10.3" 20 | }, 21 | "swift_version": "4.0", 22 | "source_files": "SwipeableTableViewCell/Classes/**/*" 23 | } 24 | -------------------------------------------------------------------------------- /Example/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - SwipeableTableViewCell (0.2.1) 3 | 4 | DEPENDENCIES: 5 | - SwipeableTableViewCell (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | SwipeableTableViewCell: 9 | :path: "../" 10 | 11 | SPEC CHECKSUMS: 12 | SwipeableTableViewCell: f12de42d71c64b65b06995ab69b3fa455b54f534 13 | 14 | PODFILE CHECKSUM: aed93b56deeb56b558530222f935a3de2db5689a 15 | 16 | COCOAPODS: 1.5.3 17 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 1B8C37A8F5B1A10B6676B28271F6DF45 /* StretchyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 743632DD4999DBF6C34D0F1429B453E3 /* StretchyView.swift */; }; 11 | 2C6FA3320198B8CD0A928AB84DB9F80D /* SwipeableTableViewCell-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FD5724089214D2DA625654D7FB7EEB03 /* SwipeableTableViewCell-dummy.m */; }; 12 | 2CA687ACFA17FBA54BBAC92B4D02523B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D6DFF15000AFE2A371BF499E7AFDA808 /* Foundation.framework */; }; 13 | 49498C39892241FA5C02F21DA755AC8E /* SwipeableTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BB7DFAF217AA7412B73AF7EB947B760 /* SwipeableTableViewCell.swift */; }; 14 | 615CFEB3C67300D104D3B50B3A38C8DA /* TimingFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D354A1A50505588F046654EF8970398 /* TimingFunctions.swift */; }; 15 | 7330DC60D0568BC80A3EA48417B5A136 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D6DFF15000AFE2A371BF499E7AFDA808 /* Foundation.framework */; }; 16 | 8CA5D7C5F37A1BFB4DE9E44EC3284616 /* Pods-SwipeableTableViewCell_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A448DE700E19D42245386808E7F2BA59 /* Pods-SwipeableTableViewCell_Example-dummy.m */; }; 17 | A708CB9A66B3BE837E99EB3FC2146CAB /* Pods-SwipeableTableViewCell_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C5EA93FCC35767F299624CC2694941BE /* Pods-SwipeableTableViewCell_Tests-dummy.m */; }; 18 | AF2FC83D16017F9453CE3C0265712586 /* StretchyCircleButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9C7C9F9732379FE34E999FAA9E583BD /* StretchyCircleButton.swift */; }; 19 | BC41EF311D97A5A0737B0C79426545A3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D6DFF15000AFE2A371BF499E7AFDA808 /* Foundation.framework */; }; 20 | C25389A68CFBC850463CF81DFA2DD4C1 /* Pods-SwipeableTableViewCell_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 30B2596750F1479FF6759495E7C6D6CE /* Pods-SwipeableTableViewCell_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 21 | D1290BF20F22367E82D76FC5380CE45A /* StretchyCircleLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9472BE801D496470FC87D2E6C66B00B0 /* StretchyCircleLayer.swift */; }; 22 | D68DE044DF5B4152BA2726B066BCB0CD /* SwipeableTableViewCell-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 212A0C7C392B4F7DDF277D6152EFD697 /* SwipeableTableViewCell-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 23 | DA11747261FAFFD9DE3A147DEAF5E3C8 /* Pods-SwipeableTableViewCell_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A07DD9FAA2973E2EEC242E51A291098 /* Pods-SwipeableTableViewCell_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 24 | /* End PBXBuildFile section */ 25 | 26 | /* Begin PBXContainerItemProxy section */ 27 | 784B9B26ABED1359A8A0C89D43155171 /* PBXContainerItemProxy */ = { 28 | isa = PBXContainerItemProxy; 29 | containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 30 | proxyType = 1; 31 | remoteGlobalIDString = 294AD374074F3D99C3BC4E4F4D47E84D; 32 | remoteInfo = SwipeableTableViewCell; 33 | }; 34 | C4E5FD96B522CA92FB462957106BDF64 /* PBXContainerItemProxy */ = { 35 | isa = PBXContainerItemProxy; 36 | containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 37 | proxyType = 1; 38 | remoteGlobalIDString = 3F3D028B1ACA8EED05A2703E75C93B6D; 39 | remoteInfo = "Pods-SwipeableTableViewCell_Example"; 40 | }; 41 | /* End PBXContainerItemProxy section */ 42 | 43 | /* Begin PBXFileReference section */ 44 | 04286F15B82913D6DC5B257F9971DB93 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 45 | 212A0C7C392B4F7DDF277D6152EFD697 /* SwipeableTableViewCell-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwipeableTableViewCell-umbrella.h"; sourceTree = ""; }; 46 | 2A658FC95AA219E760321C88BE106904 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 47 | 2C7F2524750ED394E48CAB5B3FDCD1CA /* Pods-SwipeableTableViewCell_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SwipeableTableViewCell_Example.debug.xcconfig"; sourceTree = ""; }; 48 | 30B2596750F1479FF6759495E7C6D6CE /* Pods-SwipeableTableViewCell_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-SwipeableTableViewCell_Tests-umbrella.h"; sourceTree = ""; }; 49 | 3749FEE82946A900B56ED6DD7366B360 /* SwipeableTableViewCell.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwipeableTableViewCell.xcconfig; sourceTree = ""; }; 50 | 3D354A1A50505588F046654EF8970398 /* TimingFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TimingFunctions.swift; path = SwipeableTableViewCell/Classes/TimingFunctions.swift; sourceTree = ""; }; 51 | 3E3CEF3DFD3D27DFF2E64D759C4B93CA /* SwipeableTableViewCell.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; path = SwipeableTableViewCell.podspec; sourceTree = ""; }; 52 | 43D031FDE4007CE018D4A2221B846A61 /* SwipeableTableViewCell-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwipeableTableViewCell-prefix.pch"; sourceTree = ""; }; 53 | 454F2804A04CD27344BBFACE5BFA1594 /* SwipeableTableViewCell.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SwipeableTableViewCell.modulemap; sourceTree = ""; }; 54 | 46405B8C69009B936F399F8DC197A841 /* SwipeableTableViewCell.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwipeableTableViewCell.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 55 | 51E2FF022E30F720256CCF179D89B9F7 /* Pods-SwipeableTableViewCell_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SwipeableTableViewCell_Tests.release.xcconfig"; sourceTree = ""; }; 56 | 5A07DD9FAA2973E2EEC242E51A291098 /* Pods-SwipeableTableViewCell_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-SwipeableTableViewCell_Example-umbrella.h"; sourceTree = ""; }; 57 | 5BB7DFAF217AA7412B73AF7EB947B760 /* SwipeableTableViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwipeableTableViewCell.swift; path = SwipeableTableViewCell/Classes/SwipeableTableViewCell.swift; sourceTree = ""; }; 58 | 6B9197C9AEE58F50F3A2CF72ABCEBB58 /* Pods-SwipeableTableViewCell_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-SwipeableTableViewCell_Example-acknowledgements.markdown"; sourceTree = ""; }; 59 | 6C24319E45F8B18EEFE7E25F69C1BE75 /* Pods-SwipeableTableViewCell_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-SwipeableTableViewCell_Tests-acknowledgements.plist"; sourceTree = ""; }; 60 | 743632DD4999DBF6C34D0F1429B453E3 /* StretchyView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StretchyView.swift; path = SwipeableTableViewCell/Classes/StretchyView.swift; sourceTree = ""; }; 61 | 75153DE5C2A19620B99AB294D1109B12 /* Pods-SwipeableTableViewCell_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-SwipeableTableViewCell_Example.modulemap"; sourceTree = ""; }; 62 | 75A9D8C7B122707DDB7D581A2CF4BFB6 /* Pods-SwipeableTableViewCell_Tests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-SwipeableTableViewCell_Tests-resources.sh"; sourceTree = ""; }; 63 | 8831E84B18CED0EA8A04EE9B25EE8B11 /* Pods-SwipeableTableViewCell_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-SwipeableTableViewCell_Example-frameworks.sh"; sourceTree = ""; }; 64 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 65 | 9472BE801D496470FC87D2E6C66B00B0 /* StretchyCircleLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StretchyCircleLayer.swift; path = SwipeableTableViewCell/Classes/StretchyCircleLayer.swift; sourceTree = ""; }; 66 | 9E368AD09D32CD070A84F00ACCA169E9 /* Pods-SwipeableTableViewCell_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-SwipeableTableViewCell_Tests-acknowledgements.markdown"; sourceTree = ""; }; 67 | A448DE700E19D42245386808E7F2BA59 /* Pods-SwipeableTableViewCell_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-SwipeableTableViewCell_Example-dummy.m"; sourceTree = ""; }; 68 | B2EC92AA910D15618337B4DD6257735D /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; 69 | C1889E0BFA5B1C314D37AD1BD9ABAEF5 /* Pods-SwipeableTableViewCell_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-SwipeableTableViewCell_Example-acknowledgements.plist"; sourceTree = ""; }; 70 | C483DD51D88546CFA6C7C2F18EF1BE06 /* Pods-SwipeableTableViewCell_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SwipeableTableViewCell_Tests.debug.xcconfig"; sourceTree = ""; }; 71 | C5EA93FCC35767F299624CC2694941BE /* Pods-SwipeableTableViewCell_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-SwipeableTableViewCell_Tests-dummy.m"; sourceTree = ""; }; 72 | D11F063E93B3F504812E8B356BD46B9F /* Pods_SwipeableTableViewCell_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SwipeableTableViewCell_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 73 | D485414B10E6DA5E3F3B151E44270401 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; 74 | D6DFF15000AFE2A371BF499E7AFDA808 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 75 | D9C7C9F9732379FE34E999FAA9E583BD /* StretchyCircleButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StretchyCircleButton.swift; path = SwipeableTableViewCell/Classes/StretchyCircleButton.swift; sourceTree = ""; }; 76 | E8543335608E37DBB22857B29135D4A5 /* Pods-SwipeableTableViewCell_Tests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-SwipeableTableViewCell_Tests-frameworks.sh"; sourceTree = ""; }; 77 | E96812AEAF8CC475438C2693ED4F5E70 /* Pods-SwipeableTableViewCell_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-SwipeableTableViewCell_Tests.modulemap"; sourceTree = ""; }; 78 | F1542DC68295541A61186C91AC2D3F77 /* Pods_SwipeableTableViewCell_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SwipeableTableViewCell_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 79 | F45603C15D4129AA792E9F302172D989 /* Pods-SwipeableTableViewCell_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SwipeableTableViewCell_Example.release.xcconfig"; sourceTree = ""; }; 80 | FBD72308BB99F99204B2C19D38E73FF0 /* Pods-SwipeableTableViewCell_Example-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-SwipeableTableViewCell_Example-resources.sh"; sourceTree = ""; }; 81 | FCCCDC74786AF31981AF3AE7DA5613D9 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 82 | FD5724089214D2DA625654D7FB7EEB03 /* SwipeableTableViewCell-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwipeableTableViewCell-dummy.m"; sourceTree = ""; }; 83 | /* End PBXFileReference section */ 84 | 85 | /* Begin PBXFrameworksBuildPhase section */ 86 | 07E7F80194E95A199086BE48CEFB165A /* Frameworks */ = { 87 | isa = PBXFrameworksBuildPhase; 88 | buildActionMask = 2147483647; 89 | files = ( 90 | BC41EF311D97A5A0737B0C79426545A3 /* Foundation.framework in Frameworks */, 91 | ); 92 | runOnlyForDeploymentPostprocessing = 0; 93 | }; 94 | E75D90C3EFC6D3E554600BB1BBC0FEFB /* Frameworks */ = { 95 | isa = PBXFrameworksBuildPhase; 96 | buildActionMask = 2147483647; 97 | files = ( 98 | 2CA687ACFA17FBA54BBAC92B4D02523B /* Foundation.framework in Frameworks */, 99 | ); 100 | runOnlyForDeploymentPostprocessing = 0; 101 | }; 102 | EB7BAA9C2D6A3970323134B07AB631AC /* Frameworks */ = { 103 | isa = PBXFrameworksBuildPhase; 104 | buildActionMask = 2147483647; 105 | files = ( 106 | 7330DC60D0568BC80A3EA48417B5A136 /* Foundation.framework in Frameworks */, 107 | ); 108 | runOnlyForDeploymentPostprocessing = 0; 109 | }; 110 | /* End PBXFrameworksBuildPhase section */ 111 | 112 | /* Begin PBXGroup section */ 113 | 008DB9F35620782E531DA8D579ECAE6C /* Development Pods */ = { 114 | isa = PBXGroup; 115 | children = ( 116 | 5B0001D6644EEE2E767BEE5C5C2453EB /* SwipeableTableViewCell */, 117 | ); 118 | name = "Development Pods"; 119 | sourceTree = ""; 120 | }; 121 | 14BAF66F7EC2ECB401D6A6C603C097E2 /* Targets Support Files */ = { 122 | isa = PBXGroup; 123 | children = ( 124 | 97AE21E4C293DDD0740F95A1B49CB7F2 /* Pods-SwipeableTableViewCell_Example */, 125 | EAE8997A53281396F3F002FF70C195D5 /* Pods-SwipeableTableViewCell_Tests */, 126 | ); 127 | name = "Targets Support Files"; 128 | sourceTree = ""; 129 | }; 130 | 44D5347904CF754D6785B84253F2574A /* iOS */ = { 131 | isa = PBXGroup; 132 | children = ( 133 | D6DFF15000AFE2A371BF499E7AFDA808 /* Foundation.framework */, 134 | ); 135 | name = iOS; 136 | sourceTree = ""; 137 | }; 138 | 4A63F59970233F0744F02F8F966F468B /* Pod */ = { 139 | isa = PBXGroup; 140 | children = ( 141 | B2EC92AA910D15618337B4DD6257735D /* LICENSE */, 142 | D485414B10E6DA5E3F3B151E44270401 /* README.md */, 143 | 3E3CEF3DFD3D27DFF2E64D759C4B93CA /* SwipeableTableViewCell.podspec */, 144 | ); 145 | name = Pod; 146 | sourceTree = ""; 147 | }; 148 | 59C1F09B2F5D7E4A5A31C6604363B7C4 /* Products */ = { 149 | isa = PBXGroup; 150 | children = ( 151 | D11F063E93B3F504812E8B356BD46B9F /* Pods_SwipeableTableViewCell_Example.framework */, 152 | F1542DC68295541A61186C91AC2D3F77 /* Pods_SwipeableTableViewCell_Tests.framework */, 153 | 46405B8C69009B936F399F8DC197A841 /* SwipeableTableViewCell.framework */, 154 | ); 155 | name = Products; 156 | sourceTree = ""; 157 | }; 158 | 5B0001D6644EEE2E767BEE5C5C2453EB /* SwipeableTableViewCell */ = { 159 | isa = PBXGroup; 160 | children = ( 161 | D9C7C9F9732379FE34E999FAA9E583BD /* StretchyCircleButton.swift */, 162 | 9472BE801D496470FC87D2E6C66B00B0 /* StretchyCircleLayer.swift */, 163 | 743632DD4999DBF6C34D0F1429B453E3 /* StretchyView.swift */, 164 | 5BB7DFAF217AA7412B73AF7EB947B760 /* SwipeableTableViewCell.swift */, 165 | 3D354A1A50505588F046654EF8970398 /* TimingFunctions.swift */, 166 | 4A63F59970233F0744F02F8F966F468B /* Pod */, 167 | B8C77CEECDBF0116D1DE5647245316E8 /* Support Files */, 168 | ); 169 | name = SwipeableTableViewCell; 170 | path = ../..; 171 | sourceTree = ""; 172 | }; 173 | 7DB346D0F39D3F0E887471402A8071AB = { 174 | isa = PBXGroup; 175 | children = ( 176 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, 177 | 008DB9F35620782E531DA8D579ECAE6C /* Development Pods */, 178 | BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */, 179 | 59C1F09B2F5D7E4A5A31C6604363B7C4 /* Products */, 180 | 14BAF66F7EC2ECB401D6A6C603C097E2 /* Targets Support Files */, 181 | ); 182 | sourceTree = ""; 183 | }; 184 | 97AE21E4C293DDD0740F95A1B49CB7F2 /* Pods-SwipeableTableViewCell_Example */ = { 185 | isa = PBXGroup; 186 | children = ( 187 | 04286F15B82913D6DC5B257F9971DB93 /* Info.plist */, 188 | 75153DE5C2A19620B99AB294D1109B12 /* Pods-SwipeableTableViewCell_Example.modulemap */, 189 | 6B9197C9AEE58F50F3A2CF72ABCEBB58 /* Pods-SwipeableTableViewCell_Example-acknowledgements.markdown */, 190 | C1889E0BFA5B1C314D37AD1BD9ABAEF5 /* Pods-SwipeableTableViewCell_Example-acknowledgements.plist */, 191 | A448DE700E19D42245386808E7F2BA59 /* Pods-SwipeableTableViewCell_Example-dummy.m */, 192 | 8831E84B18CED0EA8A04EE9B25EE8B11 /* Pods-SwipeableTableViewCell_Example-frameworks.sh */, 193 | FBD72308BB99F99204B2C19D38E73FF0 /* Pods-SwipeableTableViewCell_Example-resources.sh */, 194 | 5A07DD9FAA2973E2EEC242E51A291098 /* Pods-SwipeableTableViewCell_Example-umbrella.h */, 195 | 2C7F2524750ED394E48CAB5B3FDCD1CA /* Pods-SwipeableTableViewCell_Example.debug.xcconfig */, 196 | F45603C15D4129AA792E9F302172D989 /* Pods-SwipeableTableViewCell_Example.release.xcconfig */, 197 | ); 198 | name = "Pods-SwipeableTableViewCell_Example"; 199 | path = "Target Support Files/Pods-SwipeableTableViewCell_Example"; 200 | sourceTree = ""; 201 | }; 202 | B8C77CEECDBF0116D1DE5647245316E8 /* Support Files */ = { 203 | isa = PBXGroup; 204 | children = ( 205 | 2A658FC95AA219E760321C88BE106904 /* Info.plist */, 206 | 454F2804A04CD27344BBFACE5BFA1594 /* SwipeableTableViewCell.modulemap */, 207 | 3749FEE82946A900B56ED6DD7366B360 /* SwipeableTableViewCell.xcconfig */, 208 | FD5724089214D2DA625654D7FB7EEB03 /* SwipeableTableViewCell-dummy.m */, 209 | 43D031FDE4007CE018D4A2221B846A61 /* SwipeableTableViewCell-prefix.pch */, 210 | 212A0C7C392B4F7DDF277D6152EFD697 /* SwipeableTableViewCell-umbrella.h */, 211 | ); 212 | name = "Support Files"; 213 | path = "Example/Pods/Target Support Files/SwipeableTableViewCell"; 214 | sourceTree = ""; 215 | }; 216 | BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */ = { 217 | isa = PBXGroup; 218 | children = ( 219 | 44D5347904CF754D6785B84253F2574A /* iOS */, 220 | ); 221 | name = Frameworks; 222 | sourceTree = ""; 223 | }; 224 | EAE8997A53281396F3F002FF70C195D5 /* Pods-SwipeableTableViewCell_Tests */ = { 225 | isa = PBXGroup; 226 | children = ( 227 | FCCCDC74786AF31981AF3AE7DA5613D9 /* Info.plist */, 228 | E96812AEAF8CC475438C2693ED4F5E70 /* Pods-SwipeableTableViewCell_Tests.modulemap */, 229 | 9E368AD09D32CD070A84F00ACCA169E9 /* Pods-SwipeableTableViewCell_Tests-acknowledgements.markdown */, 230 | 6C24319E45F8B18EEFE7E25F69C1BE75 /* Pods-SwipeableTableViewCell_Tests-acknowledgements.plist */, 231 | C5EA93FCC35767F299624CC2694941BE /* Pods-SwipeableTableViewCell_Tests-dummy.m */, 232 | E8543335608E37DBB22857B29135D4A5 /* Pods-SwipeableTableViewCell_Tests-frameworks.sh */, 233 | 75A9D8C7B122707DDB7D581A2CF4BFB6 /* Pods-SwipeableTableViewCell_Tests-resources.sh */, 234 | 30B2596750F1479FF6759495E7C6D6CE /* Pods-SwipeableTableViewCell_Tests-umbrella.h */, 235 | C483DD51D88546CFA6C7C2F18EF1BE06 /* Pods-SwipeableTableViewCell_Tests.debug.xcconfig */, 236 | 51E2FF022E30F720256CCF179D89B9F7 /* Pods-SwipeableTableViewCell_Tests.release.xcconfig */, 237 | ); 238 | name = "Pods-SwipeableTableViewCell_Tests"; 239 | path = "Target Support Files/Pods-SwipeableTableViewCell_Tests"; 240 | sourceTree = ""; 241 | }; 242 | /* End PBXGroup section */ 243 | 244 | /* Begin PBXHeadersBuildPhase section */ 245 | 1BFA7F1B89EAFCD99614EB5A21F4935A /* Headers */ = { 246 | isa = PBXHeadersBuildPhase; 247 | buildActionMask = 2147483647; 248 | files = ( 249 | DA11747261FAFFD9DE3A147DEAF5E3C8 /* Pods-SwipeableTableViewCell_Example-umbrella.h in Headers */, 250 | ); 251 | runOnlyForDeploymentPostprocessing = 0; 252 | }; 253 | CCA93605774D670B3193CA08ECA70E2E /* Headers */ = { 254 | isa = PBXHeadersBuildPhase; 255 | buildActionMask = 2147483647; 256 | files = ( 257 | D68DE044DF5B4152BA2726B066BCB0CD /* SwipeableTableViewCell-umbrella.h in Headers */, 258 | ); 259 | runOnlyForDeploymentPostprocessing = 0; 260 | }; 261 | D45992405C000EC2D0BBA96BC50CFC2C /* Headers */ = { 262 | isa = PBXHeadersBuildPhase; 263 | buildActionMask = 2147483647; 264 | files = ( 265 | C25389A68CFBC850463CF81DFA2DD4C1 /* Pods-SwipeableTableViewCell_Tests-umbrella.h in Headers */, 266 | ); 267 | runOnlyForDeploymentPostprocessing = 0; 268 | }; 269 | /* End PBXHeadersBuildPhase section */ 270 | 271 | /* Begin PBXNativeTarget section */ 272 | 294AD374074F3D99C3BC4E4F4D47E84D /* SwipeableTableViewCell */ = { 273 | isa = PBXNativeTarget; 274 | buildConfigurationList = 60E5FD600658BBEE0F3CCEE8821B1622 /* Build configuration list for PBXNativeTarget "SwipeableTableViewCell" */; 275 | buildPhases = ( 276 | CCA93605774D670B3193CA08ECA70E2E /* Headers */, 277 | 27A3724EF7459A4335EDEFCDD8E3D366 /* Sources */, 278 | 07E7F80194E95A199086BE48CEFB165A /* Frameworks */, 279 | 8DD3B5D9C4508CABF956303830F21D85 /* Resources */, 280 | ); 281 | buildRules = ( 282 | ); 283 | dependencies = ( 284 | ); 285 | name = SwipeableTableViewCell; 286 | productName = SwipeableTableViewCell; 287 | productReference = 46405B8C69009B936F399F8DC197A841 /* SwipeableTableViewCell.framework */; 288 | productType = "com.apple.product-type.framework"; 289 | }; 290 | 3F3D028B1ACA8EED05A2703E75C93B6D /* Pods-SwipeableTableViewCell_Example */ = { 291 | isa = PBXNativeTarget; 292 | buildConfigurationList = D448C63E34C481B8380D66A1C29C4430 /* Build configuration list for PBXNativeTarget "Pods-SwipeableTableViewCell_Example" */; 293 | buildPhases = ( 294 | 1BFA7F1B89EAFCD99614EB5A21F4935A /* Headers */, 295 | 98CFA79161E74AB53BBB96866ED3CA3C /* Sources */, 296 | EB7BAA9C2D6A3970323134B07AB631AC /* Frameworks */, 297 | 2ABA8449980EC3987EA64EAB6D966483 /* Resources */, 298 | ); 299 | buildRules = ( 300 | ); 301 | dependencies = ( 302 | D0E74015781C98689832E1B7FC1DAEB2 /* PBXTargetDependency */, 303 | ); 304 | name = "Pods-SwipeableTableViewCell_Example"; 305 | productName = "Pods-SwipeableTableViewCell_Example"; 306 | productReference = D11F063E93B3F504812E8B356BD46B9F /* Pods_SwipeableTableViewCell_Example.framework */; 307 | productType = "com.apple.product-type.framework"; 308 | }; 309 | 4CE012AAE6F2AAADBA9587050BB5DB21 /* Pods-SwipeableTableViewCell_Tests */ = { 310 | isa = PBXNativeTarget; 311 | buildConfigurationList = 3763ED7FC4A4C51E7F9C3C71CE22207D /* Build configuration list for PBXNativeTarget "Pods-SwipeableTableViewCell_Tests" */; 312 | buildPhases = ( 313 | D45992405C000EC2D0BBA96BC50CFC2C /* Headers */, 314 | 0EEB8BF0DFDA06060F4A9EC8D1EEEF9D /* Sources */, 315 | E75D90C3EFC6D3E554600BB1BBC0FEFB /* Frameworks */, 316 | D3874799321A8017E43DE359465195B8 /* Resources */, 317 | ); 318 | buildRules = ( 319 | ); 320 | dependencies = ( 321 | DA47D82A0F4D1291638EE0A52CCC1E5C /* PBXTargetDependency */, 322 | ); 323 | name = "Pods-SwipeableTableViewCell_Tests"; 324 | productName = "Pods-SwipeableTableViewCell_Tests"; 325 | productReference = F1542DC68295541A61186C91AC2D3F77 /* Pods_SwipeableTableViewCell_Tests.framework */; 326 | productType = "com.apple.product-type.framework"; 327 | }; 328 | /* End PBXNativeTarget section */ 329 | 330 | /* Begin PBXProject section */ 331 | D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { 332 | isa = PBXProject; 333 | attributes = { 334 | LastSwiftUpdateCheck = 0930; 335 | LastUpgradeCheck = 0930; 336 | }; 337 | buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; 338 | compatibilityVersion = "Xcode 3.2"; 339 | developmentRegion = English; 340 | hasScannedForEncodings = 0; 341 | knownRegions = ( 342 | en, 343 | ); 344 | mainGroup = 7DB346D0F39D3F0E887471402A8071AB; 345 | productRefGroup = 59C1F09B2F5D7E4A5A31C6604363B7C4 /* Products */; 346 | projectDirPath = ""; 347 | projectRoot = ""; 348 | targets = ( 349 | 3F3D028B1ACA8EED05A2703E75C93B6D /* Pods-SwipeableTableViewCell_Example */, 350 | 4CE012AAE6F2AAADBA9587050BB5DB21 /* Pods-SwipeableTableViewCell_Tests */, 351 | 294AD374074F3D99C3BC4E4F4D47E84D /* SwipeableTableViewCell */, 352 | ); 353 | }; 354 | /* End PBXProject section */ 355 | 356 | /* Begin PBXResourcesBuildPhase section */ 357 | 2ABA8449980EC3987EA64EAB6D966483 /* Resources */ = { 358 | isa = PBXResourcesBuildPhase; 359 | buildActionMask = 2147483647; 360 | files = ( 361 | ); 362 | runOnlyForDeploymentPostprocessing = 0; 363 | }; 364 | 8DD3B5D9C4508CABF956303830F21D85 /* Resources */ = { 365 | isa = PBXResourcesBuildPhase; 366 | buildActionMask = 2147483647; 367 | files = ( 368 | ); 369 | runOnlyForDeploymentPostprocessing = 0; 370 | }; 371 | D3874799321A8017E43DE359465195B8 /* Resources */ = { 372 | isa = PBXResourcesBuildPhase; 373 | buildActionMask = 2147483647; 374 | files = ( 375 | ); 376 | runOnlyForDeploymentPostprocessing = 0; 377 | }; 378 | /* End PBXResourcesBuildPhase section */ 379 | 380 | /* Begin PBXSourcesBuildPhase section */ 381 | 0EEB8BF0DFDA06060F4A9EC8D1EEEF9D /* Sources */ = { 382 | isa = PBXSourcesBuildPhase; 383 | buildActionMask = 2147483647; 384 | files = ( 385 | A708CB9A66B3BE837E99EB3FC2146CAB /* Pods-SwipeableTableViewCell_Tests-dummy.m in Sources */, 386 | ); 387 | runOnlyForDeploymentPostprocessing = 0; 388 | }; 389 | 27A3724EF7459A4335EDEFCDD8E3D366 /* Sources */ = { 390 | isa = PBXSourcesBuildPhase; 391 | buildActionMask = 2147483647; 392 | files = ( 393 | AF2FC83D16017F9453CE3C0265712586 /* StretchyCircleButton.swift in Sources */, 394 | D1290BF20F22367E82D76FC5380CE45A /* StretchyCircleLayer.swift in Sources */, 395 | 1B8C37A8F5B1A10B6676B28271F6DF45 /* StretchyView.swift in Sources */, 396 | 2C6FA3320198B8CD0A928AB84DB9F80D /* SwipeableTableViewCell-dummy.m in Sources */, 397 | 49498C39892241FA5C02F21DA755AC8E /* SwipeableTableViewCell.swift in Sources */, 398 | 615CFEB3C67300D104D3B50B3A38C8DA /* TimingFunctions.swift in Sources */, 399 | ); 400 | runOnlyForDeploymentPostprocessing = 0; 401 | }; 402 | 98CFA79161E74AB53BBB96866ED3CA3C /* Sources */ = { 403 | isa = PBXSourcesBuildPhase; 404 | buildActionMask = 2147483647; 405 | files = ( 406 | 8CA5D7C5F37A1BFB4DE9E44EC3284616 /* Pods-SwipeableTableViewCell_Example-dummy.m in Sources */, 407 | ); 408 | runOnlyForDeploymentPostprocessing = 0; 409 | }; 410 | /* End PBXSourcesBuildPhase section */ 411 | 412 | /* Begin PBXTargetDependency section */ 413 | D0E74015781C98689832E1B7FC1DAEB2 /* PBXTargetDependency */ = { 414 | isa = PBXTargetDependency; 415 | name = SwipeableTableViewCell; 416 | target = 294AD374074F3D99C3BC4E4F4D47E84D /* SwipeableTableViewCell */; 417 | targetProxy = 784B9B26ABED1359A8A0C89D43155171 /* PBXContainerItemProxy */; 418 | }; 419 | DA47D82A0F4D1291638EE0A52CCC1E5C /* PBXTargetDependency */ = { 420 | isa = PBXTargetDependency; 421 | name = "Pods-SwipeableTableViewCell_Example"; 422 | target = 3F3D028B1ACA8EED05A2703E75C93B6D /* Pods-SwipeableTableViewCell_Example */; 423 | targetProxy = C4E5FD96B522CA92FB462957106BDF64 /* PBXContainerItemProxy */; 424 | }; 425 | /* End PBXTargetDependency section */ 426 | 427 | /* Begin XCBuildConfiguration section */ 428 | 0E639911F774626EF81E71336314AF30 /* Release */ = { 429 | isa = XCBuildConfiguration; 430 | baseConfigurationReference = 51E2FF022E30F720256CCF179D89B9F7 /* Pods-SwipeableTableViewCell_Tests.release.xcconfig */; 431 | buildSettings = { 432 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 433 | CLANG_ENABLE_OBJC_WEAK = NO; 434 | CODE_SIGN_IDENTITY = ""; 435 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 436 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 437 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 438 | CURRENT_PROJECT_VERSION = 1; 439 | DEFINES_MODULE = YES; 440 | DYLIB_COMPATIBILITY_VERSION = 1; 441 | DYLIB_CURRENT_VERSION = 1; 442 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 443 | INFOPLIST_FILE = "Target Support Files/Pods-SwipeableTableViewCell_Tests/Info.plist"; 444 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 445 | IPHONEOS_DEPLOYMENT_TARGET = 10.3; 446 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 447 | MACH_O_TYPE = staticlib; 448 | MODULEMAP_FILE = "Target Support Files/Pods-SwipeableTableViewCell_Tests/Pods-SwipeableTableViewCell_Tests.modulemap"; 449 | OTHER_LDFLAGS = ""; 450 | OTHER_LIBTOOLFLAGS = ""; 451 | PODS_ROOT = "$(SRCROOT)"; 452 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 453 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 454 | SDKROOT = iphoneos; 455 | SKIP_INSTALL = YES; 456 | TARGETED_DEVICE_FAMILY = "1,2"; 457 | VALIDATE_PRODUCT = YES; 458 | VERSIONING_SYSTEM = "apple-generic"; 459 | VERSION_INFO_PREFIX = ""; 460 | }; 461 | name = Release; 462 | }; 463 | 40CFCE80768BA89AE83A72530EF75D7F /* Debug */ = { 464 | isa = XCBuildConfiguration; 465 | baseConfigurationReference = 2C7F2524750ED394E48CAB5B3FDCD1CA /* Pods-SwipeableTableViewCell_Example.debug.xcconfig */; 466 | buildSettings = { 467 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 468 | CLANG_ENABLE_OBJC_WEAK = NO; 469 | CODE_SIGN_IDENTITY = ""; 470 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 471 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 472 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 473 | CURRENT_PROJECT_VERSION = 1; 474 | DEFINES_MODULE = YES; 475 | DYLIB_COMPATIBILITY_VERSION = 1; 476 | DYLIB_CURRENT_VERSION = 1; 477 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 478 | INFOPLIST_FILE = "Target Support Files/Pods-SwipeableTableViewCell_Example/Info.plist"; 479 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 480 | IPHONEOS_DEPLOYMENT_TARGET = 10.3; 481 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 482 | MACH_O_TYPE = staticlib; 483 | MODULEMAP_FILE = "Target Support Files/Pods-SwipeableTableViewCell_Example/Pods-SwipeableTableViewCell_Example.modulemap"; 484 | OTHER_LDFLAGS = ""; 485 | OTHER_LIBTOOLFLAGS = ""; 486 | PODS_ROOT = "$(SRCROOT)"; 487 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 488 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 489 | SDKROOT = iphoneos; 490 | SKIP_INSTALL = YES; 491 | TARGETED_DEVICE_FAMILY = "1,2"; 492 | VERSIONING_SYSTEM = "apple-generic"; 493 | VERSION_INFO_PREFIX = ""; 494 | }; 495 | name = Debug; 496 | }; 497 | 4D245C01EFB733CAF46098D281696F75 /* Release */ = { 498 | isa = XCBuildConfiguration; 499 | baseConfigurationReference = F45603C15D4129AA792E9F302172D989 /* Pods-SwipeableTableViewCell_Example.release.xcconfig */; 500 | buildSettings = { 501 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 502 | CLANG_ENABLE_OBJC_WEAK = NO; 503 | CODE_SIGN_IDENTITY = ""; 504 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 505 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 506 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 507 | CURRENT_PROJECT_VERSION = 1; 508 | DEFINES_MODULE = YES; 509 | DYLIB_COMPATIBILITY_VERSION = 1; 510 | DYLIB_CURRENT_VERSION = 1; 511 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 512 | INFOPLIST_FILE = "Target Support Files/Pods-SwipeableTableViewCell_Example/Info.plist"; 513 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 514 | IPHONEOS_DEPLOYMENT_TARGET = 10.3; 515 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 516 | MACH_O_TYPE = staticlib; 517 | MODULEMAP_FILE = "Target Support Files/Pods-SwipeableTableViewCell_Example/Pods-SwipeableTableViewCell_Example.modulemap"; 518 | OTHER_LDFLAGS = ""; 519 | OTHER_LIBTOOLFLAGS = ""; 520 | PODS_ROOT = "$(SRCROOT)"; 521 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 522 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 523 | SDKROOT = iphoneos; 524 | SKIP_INSTALL = YES; 525 | TARGETED_DEVICE_FAMILY = "1,2"; 526 | VALIDATE_PRODUCT = YES; 527 | VERSIONING_SYSTEM = "apple-generic"; 528 | VERSION_INFO_PREFIX = ""; 529 | }; 530 | name = Release; 531 | }; 532 | A258B19120F3344292AFBA25627C702C /* Debug */ = { 533 | isa = XCBuildConfiguration; 534 | baseConfigurationReference = C483DD51D88546CFA6C7C2F18EF1BE06 /* Pods-SwipeableTableViewCell_Tests.debug.xcconfig */; 535 | buildSettings = { 536 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 537 | CLANG_ENABLE_OBJC_WEAK = NO; 538 | CODE_SIGN_IDENTITY = ""; 539 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 540 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 541 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 542 | CURRENT_PROJECT_VERSION = 1; 543 | DEFINES_MODULE = YES; 544 | DYLIB_COMPATIBILITY_VERSION = 1; 545 | DYLIB_CURRENT_VERSION = 1; 546 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 547 | INFOPLIST_FILE = "Target Support Files/Pods-SwipeableTableViewCell_Tests/Info.plist"; 548 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 549 | IPHONEOS_DEPLOYMENT_TARGET = 10.3; 550 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 551 | MACH_O_TYPE = staticlib; 552 | MODULEMAP_FILE = "Target Support Files/Pods-SwipeableTableViewCell_Tests/Pods-SwipeableTableViewCell_Tests.modulemap"; 553 | OTHER_LDFLAGS = ""; 554 | OTHER_LIBTOOLFLAGS = ""; 555 | PODS_ROOT = "$(SRCROOT)"; 556 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 557 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 558 | SDKROOT = iphoneos; 559 | SKIP_INSTALL = YES; 560 | TARGETED_DEVICE_FAMILY = "1,2"; 561 | VERSIONING_SYSTEM = "apple-generic"; 562 | VERSION_INFO_PREFIX = ""; 563 | }; 564 | name = Debug; 565 | }; 566 | BB044C4AFAC2A37F66D023639C0B5841 /* Debug */ = { 567 | isa = XCBuildConfiguration; 568 | buildSettings = { 569 | ALWAYS_SEARCH_USER_PATHS = NO; 570 | CLANG_ANALYZER_NONNULL = YES; 571 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 572 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 573 | CLANG_CXX_LIBRARY = "libc++"; 574 | CLANG_ENABLE_MODULES = YES; 575 | CLANG_ENABLE_OBJC_ARC = YES; 576 | CLANG_ENABLE_OBJC_WEAK = YES; 577 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 578 | CLANG_WARN_BOOL_CONVERSION = YES; 579 | CLANG_WARN_COMMA = YES; 580 | CLANG_WARN_CONSTANT_CONVERSION = YES; 581 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 582 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 583 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 584 | CLANG_WARN_EMPTY_BODY = YES; 585 | CLANG_WARN_ENUM_CONVERSION = YES; 586 | CLANG_WARN_INFINITE_RECURSION = YES; 587 | CLANG_WARN_INT_CONVERSION = YES; 588 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 589 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 590 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 591 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 592 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 593 | CLANG_WARN_STRICT_PROTOTYPES = YES; 594 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 595 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 596 | CLANG_WARN_UNREACHABLE_CODE = YES; 597 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 598 | CODE_SIGNING_ALLOWED = NO; 599 | CODE_SIGNING_REQUIRED = NO; 600 | COPY_PHASE_STRIP = NO; 601 | DEBUG_INFORMATION_FORMAT = dwarf; 602 | ENABLE_STRICT_OBJC_MSGSEND = YES; 603 | ENABLE_TESTABILITY = YES; 604 | GCC_C_LANGUAGE_STANDARD = gnu11; 605 | GCC_DYNAMIC_NO_PIC = NO; 606 | GCC_NO_COMMON_BLOCKS = YES; 607 | GCC_OPTIMIZATION_LEVEL = 0; 608 | GCC_PREPROCESSOR_DEFINITIONS = ( 609 | "POD_CONFIGURATION_DEBUG=1", 610 | "DEBUG=1", 611 | "$(inherited)", 612 | ); 613 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 614 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 615 | GCC_WARN_UNDECLARED_SELECTOR = YES; 616 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 617 | GCC_WARN_UNUSED_FUNCTION = YES; 618 | GCC_WARN_UNUSED_VARIABLE = YES; 619 | IPHONEOS_DEPLOYMENT_TARGET = 10.3; 620 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 621 | MTL_FAST_MATH = YES; 622 | ONLY_ACTIVE_ARCH = YES; 623 | PRODUCT_NAME = "$(TARGET_NAME)"; 624 | STRIP_INSTALLED_PRODUCT = NO; 625 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 626 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 627 | SWIFT_VERSION = 4.2; 628 | SYMROOT = "${SRCROOT}/../build"; 629 | }; 630 | name = Debug; 631 | }; 632 | C8BE67CBCA232124DE26494BBBF8F197 /* Release */ = { 633 | isa = XCBuildConfiguration; 634 | baseConfigurationReference = 3749FEE82946A900B56ED6DD7366B360 /* SwipeableTableViewCell.xcconfig */; 635 | buildSettings = { 636 | CLANG_ENABLE_OBJC_WEAK = NO; 637 | CODE_SIGN_IDENTITY = ""; 638 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 639 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 640 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 641 | CURRENT_PROJECT_VERSION = 1; 642 | DEFINES_MODULE = YES; 643 | DYLIB_COMPATIBILITY_VERSION = 1; 644 | DYLIB_CURRENT_VERSION = 1; 645 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 646 | GCC_PREFIX_HEADER = "Target Support Files/SwipeableTableViewCell/SwipeableTableViewCell-prefix.pch"; 647 | INFOPLIST_FILE = "Target Support Files/SwipeableTableViewCell/Info.plist"; 648 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 649 | IPHONEOS_DEPLOYMENT_TARGET = 10.3; 650 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 651 | MODULEMAP_FILE = "Target Support Files/SwipeableTableViewCell/SwipeableTableViewCell.modulemap"; 652 | PRODUCT_MODULE_NAME = SwipeableTableViewCell; 653 | PRODUCT_NAME = SwipeableTableViewCell; 654 | SDKROOT = iphoneos; 655 | SKIP_INSTALL = YES; 656 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 657 | SWIFT_VERSION = 4.0; 658 | TARGETED_DEVICE_FAMILY = "1,2"; 659 | VALIDATE_PRODUCT = YES; 660 | VERSIONING_SYSTEM = "apple-generic"; 661 | VERSION_INFO_PREFIX = ""; 662 | }; 663 | name = Release; 664 | }; 665 | C8F6AD84CD9EBD21EE14F83C2F3C21E0 /* Release */ = { 666 | isa = XCBuildConfiguration; 667 | buildSettings = { 668 | ALWAYS_SEARCH_USER_PATHS = NO; 669 | CLANG_ANALYZER_NONNULL = YES; 670 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 671 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 672 | CLANG_CXX_LIBRARY = "libc++"; 673 | CLANG_ENABLE_MODULES = YES; 674 | CLANG_ENABLE_OBJC_ARC = YES; 675 | CLANG_ENABLE_OBJC_WEAK = YES; 676 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 677 | CLANG_WARN_BOOL_CONVERSION = YES; 678 | CLANG_WARN_COMMA = YES; 679 | CLANG_WARN_CONSTANT_CONVERSION = YES; 680 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 681 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 682 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 683 | CLANG_WARN_EMPTY_BODY = YES; 684 | CLANG_WARN_ENUM_CONVERSION = YES; 685 | CLANG_WARN_INFINITE_RECURSION = YES; 686 | CLANG_WARN_INT_CONVERSION = YES; 687 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 688 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 689 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 690 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 691 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 692 | CLANG_WARN_STRICT_PROTOTYPES = YES; 693 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 694 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 695 | CLANG_WARN_UNREACHABLE_CODE = YES; 696 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 697 | CODE_SIGNING_ALLOWED = NO; 698 | CODE_SIGNING_REQUIRED = NO; 699 | COPY_PHASE_STRIP = NO; 700 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 701 | ENABLE_NS_ASSERTIONS = NO; 702 | ENABLE_STRICT_OBJC_MSGSEND = YES; 703 | GCC_C_LANGUAGE_STANDARD = gnu11; 704 | GCC_NO_COMMON_BLOCKS = YES; 705 | GCC_PREPROCESSOR_DEFINITIONS = ( 706 | "POD_CONFIGURATION_RELEASE=1", 707 | "$(inherited)", 708 | ); 709 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 710 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 711 | GCC_WARN_UNDECLARED_SELECTOR = YES; 712 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 713 | GCC_WARN_UNUSED_FUNCTION = YES; 714 | GCC_WARN_UNUSED_VARIABLE = YES; 715 | IPHONEOS_DEPLOYMENT_TARGET = 10.3; 716 | MTL_ENABLE_DEBUG_INFO = NO; 717 | MTL_FAST_MATH = YES; 718 | PRODUCT_NAME = "$(TARGET_NAME)"; 719 | STRIP_INSTALLED_PRODUCT = NO; 720 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 721 | SWIFT_VERSION = 4.2; 722 | SYMROOT = "${SRCROOT}/../build"; 723 | }; 724 | name = Release; 725 | }; 726 | E11FAE793BEEF7D677F90759232E34A6 /* Debug */ = { 727 | isa = XCBuildConfiguration; 728 | baseConfigurationReference = 3749FEE82946A900B56ED6DD7366B360 /* SwipeableTableViewCell.xcconfig */; 729 | buildSettings = { 730 | CLANG_ENABLE_OBJC_WEAK = NO; 731 | CODE_SIGN_IDENTITY = ""; 732 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 733 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 734 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 735 | CURRENT_PROJECT_VERSION = 1; 736 | DEFINES_MODULE = YES; 737 | DYLIB_COMPATIBILITY_VERSION = 1; 738 | DYLIB_CURRENT_VERSION = 1; 739 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 740 | GCC_PREFIX_HEADER = "Target Support Files/SwipeableTableViewCell/SwipeableTableViewCell-prefix.pch"; 741 | INFOPLIST_FILE = "Target Support Files/SwipeableTableViewCell/Info.plist"; 742 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 743 | IPHONEOS_DEPLOYMENT_TARGET = 10.3; 744 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 745 | MODULEMAP_FILE = "Target Support Files/SwipeableTableViewCell/SwipeableTableViewCell.modulemap"; 746 | PRODUCT_MODULE_NAME = SwipeableTableViewCell; 747 | PRODUCT_NAME = SwipeableTableViewCell; 748 | SDKROOT = iphoneos; 749 | SKIP_INSTALL = YES; 750 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 751 | SWIFT_VERSION = 4.0; 752 | TARGETED_DEVICE_FAMILY = "1,2"; 753 | VERSIONING_SYSTEM = "apple-generic"; 754 | VERSION_INFO_PREFIX = ""; 755 | }; 756 | name = Debug; 757 | }; 758 | /* End XCBuildConfiguration section */ 759 | 760 | /* Begin XCConfigurationList section */ 761 | 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { 762 | isa = XCConfigurationList; 763 | buildConfigurations = ( 764 | BB044C4AFAC2A37F66D023639C0B5841 /* Debug */, 765 | C8F6AD84CD9EBD21EE14F83C2F3C21E0 /* Release */, 766 | ); 767 | defaultConfigurationIsVisible = 0; 768 | defaultConfigurationName = Release; 769 | }; 770 | 3763ED7FC4A4C51E7F9C3C71CE22207D /* Build configuration list for PBXNativeTarget "Pods-SwipeableTableViewCell_Tests" */ = { 771 | isa = XCConfigurationList; 772 | buildConfigurations = ( 773 | A258B19120F3344292AFBA25627C702C /* Debug */, 774 | 0E639911F774626EF81E71336314AF30 /* Release */, 775 | ); 776 | defaultConfigurationIsVisible = 0; 777 | defaultConfigurationName = Release; 778 | }; 779 | 60E5FD600658BBEE0F3CCEE8821B1622 /* Build configuration list for PBXNativeTarget "SwipeableTableViewCell" */ = { 780 | isa = XCConfigurationList; 781 | buildConfigurations = ( 782 | E11FAE793BEEF7D677F90759232E34A6 /* Debug */, 783 | C8BE67CBCA232124DE26494BBBF8F197 /* Release */, 784 | ); 785 | defaultConfigurationIsVisible = 0; 786 | defaultConfigurationName = Release; 787 | }; 788 | D448C63E34C481B8380D66A1C29C4430 /* Build configuration list for PBXNativeTarget "Pods-SwipeableTableViewCell_Example" */ = { 789 | isa = XCConfigurationList; 790 | buildConfigurations = ( 791 | 40CFCE80768BA89AE83A72530EF75D7F /* Debug */, 792 | 4D245C01EFB733CAF46098D281696F75 /* Release */, 793 | ); 794 | defaultConfigurationIsVisible = 0; 795 | defaultConfigurationName = Release; 796 | }; 797 | /* End XCConfigurationList section */ 798 | }; 799 | rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 800 | } 801 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-SwipeableTableViewCell_Example/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-SwipeableTableViewCell_Example/Pods-SwipeableTableViewCell_Example-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## SwipeableTableViewCell 5 | 6 | Copyright (c) 2018 Hubert Kuczynski 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy 9 | of this software and associated documentation files (the "Software"), to deal 10 | in the Software without restriction, including without limitation the rights 11 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the Software is 13 | furnished to do so, subject to the following conditions: 14 | 15 | The above copyright notice and this permission notice shall be included in 16 | all copies or substantial portions of the Software. 17 | 18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 24 | THE SOFTWARE. 25 | 26 | Generated by CocoaPods - https://cocoapods.org 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-SwipeableTableViewCell_Example/Pods-SwipeableTableViewCell_Example-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Copyright (c) 2018 Hubert Kuczynski <hubert.kuczynski@10clouds.com> 18 | 19 | Permission is hereby granted, free of charge, to any person obtaining a copy 20 | of this software and associated documentation files (the "Software"), to deal 21 | in the Software without restriction, including without limitation the rights 22 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 23 | copies of the Software, and to permit persons to whom the Software is 24 | furnished to do so, subject to the following conditions: 25 | 26 | The above copyright notice and this permission notice shall be included in 27 | all copies or substantial portions of the Software. 28 | 29 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 30 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 31 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 32 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 33 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 34 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 35 | THE SOFTWARE. 36 | 37 | License 38 | MIT 39 | Title 40 | SwipeableTableViewCell 41 | Type 42 | PSGroupSpecifier 43 | 44 | 45 | FooterText 46 | Generated by CocoaPods - https://cocoapods.org 47 | Title 48 | 49 | Type 50 | PSGroupSpecifier 51 | 52 | 53 | StringsTable 54 | Acknowledgements 55 | Title 56 | Acknowledgements 57 | 58 | 59 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-SwipeableTableViewCell_Example/Pods-SwipeableTableViewCell_Example-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_SwipeableTableViewCell_Example : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_SwipeableTableViewCell_Example 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-SwipeableTableViewCell_Example/Pods-SwipeableTableViewCell_Example-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then 7 | # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy 8 | # frameworks to, so exit 0 (signalling the script phase was successful). 9 | exit 0 10 | fi 11 | 12 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 13 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 14 | 15 | COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" 16 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 17 | 18 | # Used as a return value for each invocation of `strip_invalid_archs` function. 19 | STRIP_BINARY_RETVAL=0 20 | 21 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 22 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 23 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 24 | 25 | # Copies and strips a vendored framework 26 | install_framework() 27 | { 28 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 29 | local source="${BUILT_PRODUCTS_DIR}/$1" 30 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 31 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 32 | elif [ -r "$1" ]; then 33 | local source="$1" 34 | fi 35 | 36 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 37 | 38 | if [ -L "${source}" ]; then 39 | echo "Symlinked..." 40 | source="$(readlink "${source}")" 41 | fi 42 | 43 | # Use filter instead of exclude so missing patterns don't throw errors. 44 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 45 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 46 | 47 | local basename 48 | basename="$(basename -s .framework "$1")" 49 | binary="${destination}/${basename}.framework/${basename}" 50 | if ! [ -r "$binary" ]; then 51 | binary="${destination}/${basename}" 52 | fi 53 | 54 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 55 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 56 | strip_invalid_archs "$binary" 57 | fi 58 | 59 | # Resign the code if required by the build settings to avoid unstable apps 60 | code_sign_if_enabled "${destination}/$(basename "$1")" 61 | 62 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 63 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 64 | local swift_runtime_libs 65 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 66 | for lib in $swift_runtime_libs; do 67 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 68 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 69 | code_sign_if_enabled "${destination}/${lib}" 70 | done 71 | fi 72 | } 73 | 74 | # Copies and strips a vendored dSYM 75 | install_dsym() { 76 | local source="$1" 77 | if [ -r "$source" ]; then 78 | # Copy the dSYM into a the targets temp dir. 79 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" 80 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" 81 | 82 | local basename 83 | basename="$(basename -s .framework.dSYM "$source")" 84 | binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" 85 | 86 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 87 | if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then 88 | strip_invalid_archs "$binary" 89 | fi 90 | 91 | if [[ $STRIP_BINARY_RETVAL == 1 ]]; then 92 | # Move the stripped file into its final destination. 93 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" 94 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" 95 | else 96 | # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. 97 | touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" 98 | fi 99 | fi 100 | } 101 | 102 | # Signs a framework with the provided identity 103 | code_sign_if_enabled() { 104 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 105 | # Use the current code_sign_identitiy 106 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 107 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" 108 | 109 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 110 | code_sign_cmd="$code_sign_cmd &" 111 | fi 112 | echo "$code_sign_cmd" 113 | eval "$code_sign_cmd" 114 | fi 115 | } 116 | 117 | # Strip invalid architectures 118 | strip_invalid_archs() { 119 | binary="$1" 120 | # Get architectures for current target binary 121 | binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" 122 | # Intersect them with the architectures we are building for 123 | intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" 124 | # If there are no archs supported by this binary then warn the user 125 | if [[ -z "$intersected_archs" ]]; then 126 | echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." 127 | STRIP_BINARY_RETVAL=0 128 | return 129 | fi 130 | stripped="" 131 | for arch in $binary_archs; do 132 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then 133 | # Strip non-valid architectures in-place 134 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 135 | stripped="$stripped $arch" 136 | fi 137 | done 138 | if [[ "$stripped" ]]; then 139 | echo "Stripped $binary of architectures:$stripped" 140 | fi 141 | STRIP_BINARY_RETVAL=1 142 | } 143 | 144 | 145 | if [[ "$CONFIGURATION" == "Debug" ]]; then 146 | install_framework "${BUILT_PRODUCTS_DIR}/SwipeableTableViewCell/SwipeableTableViewCell.framework" 147 | fi 148 | if [[ "$CONFIGURATION" == "Release" ]]; then 149 | install_framework "${BUILT_PRODUCTS_DIR}/SwipeableTableViewCell/SwipeableTableViewCell.framework" 150 | fi 151 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 152 | wait 153 | fi 154 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-SwipeableTableViewCell_Example/Pods-SwipeableTableViewCell_Example-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then 7 | # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy 8 | # resources to, so exit 0 (signalling the script phase was successful). 9 | exit 0 10 | fi 11 | 12 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 13 | 14 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 15 | > "$RESOURCES_TO_COPY" 16 | 17 | XCASSET_FILES=() 18 | 19 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 20 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 21 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 22 | 23 | case "${TARGETED_DEVICE_FAMILY:-}" in 24 | 1,2) 25 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 26 | ;; 27 | 1) 28 | TARGET_DEVICE_ARGS="--target-device iphone" 29 | ;; 30 | 2) 31 | TARGET_DEVICE_ARGS="--target-device ipad" 32 | ;; 33 | 3) 34 | TARGET_DEVICE_ARGS="--target-device tv" 35 | ;; 36 | 4) 37 | TARGET_DEVICE_ARGS="--target-device watch" 38 | ;; 39 | *) 40 | TARGET_DEVICE_ARGS="--target-device mac" 41 | ;; 42 | esac 43 | 44 | install_resource() 45 | { 46 | if [[ "$1" = /* ]] ; then 47 | RESOURCE_PATH="$1" 48 | else 49 | RESOURCE_PATH="${PODS_ROOT}/$1" 50 | fi 51 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 52 | cat << EOM 53 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 54 | EOM 55 | exit 1 56 | fi 57 | case $RESOURCE_PATH in 58 | *.storyboard) 59 | 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}" || true 60 | 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} 61 | ;; 62 | *.xib) 63 | 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}" || true 64 | 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} 65 | ;; 66 | *.framework) 67 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 68 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 69 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 70 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 71 | ;; 72 | *.xcdatamodel) 73 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true 74 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 75 | ;; 76 | *.xcdatamodeld) 77 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true 78 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 79 | ;; 80 | *.xcmappingmodel) 81 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true 82 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 83 | ;; 84 | *.xcassets) 85 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 86 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 87 | ;; 88 | *) 89 | echo "$RESOURCE_PATH" || true 90 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 91 | ;; 92 | esac 93 | } 94 | 95 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 96 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 97 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 98 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 99 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 100 | fi 101 | rm -f "$RESOURCES_TO_COPY" 102 | 103 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] 104 | then 105 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 106 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 107 | while read line; do 108 | if [[ $line != "${PODS_ROOT}*" ]]; then 109 | XCASSET_FILES+=("$line") 110 | fi 111 | done <<<"$OTHER_XCASSETS" 112 | 113 | if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then 114 | 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}" 115 | else 116 | 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}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist" 117 | fi 118 | fi 119 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-SwipeableTableViewCell_Example/Pods-SwipeableTableViewCell_Example-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_SwipeableTableViewCell_ExampleVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_SwipeableTableViewCell_ExampleVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-SwipeableTableViewCell_Example/Pods-SwipeableTableViewCell_Example.debug.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SwipeableTableViewCell" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwipeableTableViewCell/SwipeableTableViewCell.framework/Headers" 6 | OTHER_LDFLAGS = $(inherited) -framework "SwipeableTableViewCell" 7 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 8 | PODS_BUILD_DIR = ${BUILD_DIR} 9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-SwipeableTableViewCell_Example/Pods-SwipeableTableViewCell_Example.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_SwipeableTableViewCell_Example { 2 | umbrella header "Pods-SwipeableTableViewCell_Example-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-SwipeableTableViewCell_Example/Pods-SwipeableTableViewCell_Example.release.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SwipeableTableViewCell" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwipeableTableViewCell/SwipeableTableViewCell.framework/Headers" 6 | OTHER_LDFLAGS = $(inherited) -framework "SwipeableTableViewCell" 7 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 8 | PODS_BUILD_DIR = ${BUILD_DIR} 9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-SwipeableTableViewCell_Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-SwipeableTableViewCell_Tests/Pods-SwipeableTableViewCell_Tests-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | Generated by CocoaPods - https://cocoapods.org 4 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-SwipeableTableViewCell_Tests/Pods-SwipeableTableViewCell_Tests-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Generated by CocoaPods - https://cocoapods.org 18 | Title 19 | 20 | Type 21 | PSGroupSpecifier 22 | 23 | 24 | StringsTable 25 | Acknowledgements 26 | Title 27 | Acknowledgements 28 | 29 | 30 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-SwipeableTableViewCell_Tests/Pods-SwipeableTableViewCell_Tests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_SwipeableTableViewCell_Tests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_SwipeableTableViewCell_Tests 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-SwipeableTableViewCell_Tests/Pods-SwipeableTableViewCell_Tests-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then 7 | # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy 8 | # frameworks to, so exit 0 (signalling the script phase was successful). 9 | exit 0 10 | fi 11 | 12 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 13 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 14 | 15 | COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" 16 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 17 | 18 | # Used as a return value for each invocation of `strip_invalid_archs` function. 19 | STRIP_BINARY_RETVAL=0 20 | 21 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 22 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 23 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 24 | 25 | # Copies and strips a vendored framework 26 | install_framework() 27 | { 28 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 29 | local source="${BUILT_PRODUCTS_DIR}/$1" 30 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 31 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 32 | elif [ -r "$1" ]; then 33 | local source="$1" 34 | fi 35 | 36 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 37 | 38 | if [ -L "${source}" ]; then 39 | echo "Symlinked..." 40 | source="$(readlink "${source}")" 41 | fi 42 | 43 | # Use filter instead of exclude so missing patterns don't throw errors. 44 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 45 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 46 | 47 | local basename 48 | basename="$(basename -s .framework "$1")" 49 | binary="${destination}/${basename}.framework/${basename}" 50 | if ! [ -r "$binary" ]; then 51 | binary="${destination}/${basename}" 52 | fi 53 | 54 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 55 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 56 | strip_invalid_archs "$binary" 57 | fi 58 | 59 | # Resign the code if required by the build settings to avoid unstable apps 60 | code_sign_if_enabled "${destination}/$(basename "$1")" 61 | 62 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 63 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 64 | local swift_runtime_libs 65 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 66 | for lib in $swift_runtime_libs; do 67 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 68 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 69 | code_sign_if_enabled "${destination}/${lib}" 70 | done 71 | fi 72 | } 73 | 74 | # Copies and strips a vendored dSYM 75 | install_dsym() { 76 | local source="$1" 77 | if [ -r "$source" ]; then 78 | # Copy the dSYM into a the targets temp dir. 79 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" 80 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" 81 | 82 | local basename 83 | basename="$(basename -s .framework.dSYM "$source")" 84 | binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" 85 | 86 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 87 | if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then 88 | strip_invalid_archs "$binary" 89 | fi 90 | 91 | if [[ $STRIP_BINARY_RETVAL == 1 ]]; then 92 | # Move the stripped file into its final destination. 93 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" 94 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" 95 | else 96 | # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. 97 | touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" 98 | fi 99 | fi 100 | } 101 | 102 | # Signs a framework with the provided identity 103 | code_sign_if_enabled() { 104 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 105 | # Use the current code_sign_identitiy 106 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 107 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" 108 | 109 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 110 | code_sign_cmd="$code_sign_cmd &" 111 | fi 112 | echo "$code_sign_cmd" 113 | eval "$code_sign_cmd" 114 | fi 115 | } 116 | 117 | # Strip invalid architectures 118 | strip_invalid_archs() { 119 | binary="$1" 120 | # Get architectures for current target binary 121 | binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" 122 | # Intersect them with the architectures we are building for 123 | intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" 124 | # If there are no archs supported by this binary then warn the user 125 | if [[ -z "$intersected_archs" ]]; then 126 | echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." 127 | STRIP_BINARY_RETVAL=0 128 | return 129 | fi 130 | stripped="" 131 | for arch in $binary_archs; do 132 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then 133 | # Strip non-valid architectures in-place 134 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 135 | stripped="$stripped $arch" 136 | fi 137 | done 138 | if [[ "$stripped" ]]; then 139 | echo "Stripped $binary of architectures:$stripped" 140 | fi 141 | STRIP_BINARY_RETVAL=1 142 | } 143 | 144 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 145 | wait 146 | fi 147 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-SwipeableTableViewCell_Tests/Pods-SwipeableTableViewCell_Tests-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then 7 | # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy 8 | # resources to, so exit 0 (signalling the script phase was successful). 9 | exit 0 10 | fi 11 | 12 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 13 | 14 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 15 | > "$RESOURCES_TO_COPY" 16 | 17 | XCASSET_FILES=() 18 | 19 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 20 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 21 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 22 | 23 | case "${TARGETED_DEVICE_FAMILY:-}" in 24 | 1,2) 25 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 26 | ;; 27 | 1) 28 | TARGET_DEVICE_ARGS="--target-device iphone" 29 | ;; 30 | 2) 31 | TARGET_DEVICE_ARGS="--target-device ipad" 32 | ;; 33 | 3) 34 | TARGET_DEVICE_ARGS="--target-device tv" 35 | ;; 36 | 4) 37 | TARGET_DEVICE_ARGS="--target-device watch" 38 | ;; 39 | *) 40 | TARGET_DEVICE_ARGS="--target-device mac" 41 | ;; 42 | esac 43 | 44 | install_resource() 45 | { 46 | if [[ "$1" = /* ]] ; then 47 | RESOURCE_PATH="$1" 48 | else 49 | RESOURCE_PATH="${PODS_ROOT}/$1" 50 | fi 51 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 52 | cat << EOM 53 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 54 | EOM 55 | exit 1 56 | fi 57 | case $RESOURCE_PATH in 58 | *.storyboard) 59 | 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}" || true 60 | 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} 61 | ;; 62 | *.xib) 63 | 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}" || true 64 | 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} 65 | ;; 66 | *.framework) 67 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 68 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 69 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 70 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 71 | ;; 72 | *.xcdatamodel) 73 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true 74 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 75 | ;; 76 | *.xcdatamodeld) 77 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true 78 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 79 | ;; 80 | *.xcmappingmodel) 81 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true 82 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 83 | ;; 84 | *.xcassets) 85 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 86 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 87 | ;; 88 | *) 89 | echo "$RESOURCE_PATH" || true 90 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 91 | ;; 92 | esac 93 | } 94 | 95 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 96 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 97 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 98 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 99 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 100 | fi 101 | rm -f "$RESOURCES_TO_COPY" 102 | 103 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] 104 | then 105 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 106 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 107 | while read line; do 108 | if [[ $line != "${PODS_ROOT}*" ]]; then 109 | XCASSET_FILES+=("$line") 110 | fi 111 | done <<<"$OTHER_XCASSETS" 112 | 113 | if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then 114 | 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}" 115 | else 116 | 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}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist" 117 | fi 118 | fi 119 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-SwipeableTableViewCell_Tests/Pods-SwipeableTableViewCell_Tests-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_SwipeableTableViewCell_TestsVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_SwipeableTableViewCell_TestsVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-SwipeableTableViewCell_Tests/Pods-SwipeableTableViewCell_Tests.debug.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SwipeableTableViewCell" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 4 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwipeableTableViewCell/SwipeableTableViewCell.framework/Headers" 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 8 | PODS_ROOT = ${SRCROOT}/Pods 9 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-SwipeableTableViewCell_Tests/Pods-SwipeableTableViewCell_Tests.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_SwipeableTableViewCell_Tests { 2 | umbrella header "Pods-SwipeableTableViewCell_Tests-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-SwipeableTableViewCell_Tests/Pods-SwipeableTableViewCell_Tests.release.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SwipeableTableViewCell" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 4 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwipeableTableViewCell/SwipeableTableViewCell.framework/Headers" 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 8 | PODS_ROOT = ${SRCROOT}/Pods 9 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/SwipeableTableViewCell/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 0.2.1 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/SwipeableTableViewCell/SwipeableTableViewCell-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_SwipeableTableViewCell : NSObject 3 | @end 4 | @implementation PodsDummy_SwipeableTableViewCell 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/SwipeableTableViewCell/SwipeableTableViewCell-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/SwipeableTableViewCell/SwipeableTableViewCell-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double SwipeableTableViewCellVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char SwipeableTableViewCellVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/SwipeableTableViewCell/SwipeableTableViewCell.modulemap: -------------------------------------------------------------------------------- 1 | framework module SwipeableTableViewCell { 2 | umbrella header "SwipeableTableViewCell-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/SwipeableTableViewCell/SwipeableTableViewCell.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwipeableTableViewCell 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD51AFB9204008FA782 /* AppDelegate.swift */; }; 11 | 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */; }; 12 | 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACEB1AFB9204008FA782 /* Tests.swift */; }; 13 | 66C286C72146C14F00A7B735 /* Font.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66C286C12146C14F00A7B735 /* Font.swift */; }; 14 | 66C286C82146C14F00A7B735 /* TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66C286C22146C14F00A7B735 /* TableViewController.swift */; }; 15 | 66C286C92146C14F00A7B735 /* Colors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66C286C32146C14F00A7B735 /* Colors.swift */; }; 16 | 66C286CA2146C14F00A7B735 /* HeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66C286C42146C14F00A7B735 /* HeaderView.swift */; }; 17 | 66C286CC2146C14F00A7B735 /* TableViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66C286C62146C14F00A7B735 /* TableViewModel.swift */; }; 18 | 66C286CE2146C15B00A7B735 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 66C286CD2146C15B00A7B735 /* Images.xcassets */; }; 19 | 66CA48D421C10B6B0080D382 /* TableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66CA48D321C10B6B0080D382 /* TableViewCell.swift */; }; 20 | B150F742DF5EA184D1B9D85B /* Pods_SwipeableTableViewCell_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 68297CC73FCCAF0991D45CAA /* Pods_SwipeableTableViewCell_Tests.framework */; }; 21 | F764652A9870BB48EC48BB0E /* Pods_SwipeableTableViewCell_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAA44C36116A27798C7B29FA /* Pods_SwipeableTableViewCell_Example.framework */; }; 22 | /* End PBXBuildFile section */ 23 | 24 | /* Begin PBXContainerItemProxy section */ 25 | 607FACE61AFB9204008FA782 /* PBXContainerItemProxy */ = { 26 | isa = PBXContainerItemProxy; 27 | containerPortal = 607FACC81AFB9204008FA782 /* Project object */; 28 | proxyType = 1; 29 | remoteGlobalIDString = 607FACCF1AFB9204008FA782; 30 | remoteInfo = SwipeableTableViewCell; 31 | }; 32 | /* End PBXContainerItemProxy section */ 33 | 34 | /* Begin PBXFileReference section */ 35 | 11A586D230ACF325419BB504 /* Pods-SwipeableTableViewCell_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwipeableTableViewCell_Tests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-SwipeableTableViewCell_Tests/Pods-SwipeableTableViewCell_Tests.debug.xcconfig"; sourceTree = ""; }; 36 | 1FFC905DDE9F2F9E90590DFD /* Pods-SwipeableTableViewCell_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwipeableTableViewCell_Tests.release.xcconfig"; path = "Pods/Target Support Files/Pods-SwipeableTableViewCell_Tests/Pods-SwipeableTableViewCell_Tests.release.xcconfig"; sourceTree = ""; }; 37 | 269524CF3B27CD54189266F1 /* Pods-SwipeableTableViewCell_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwipeableTableViewCell_Example.release.xcconfig"; path = "Pods/Target Support Files/Pods-SwipeableTableViewCell_Example/Pods-SwipeableTableViewCell_Example.release.xcconfig"; sourceTree = ""; }; 38 | 607FACD01AFB9204008FA782 /* SwipeableTableViewCell_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SwipeableTableViewCell_Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; 39 | 607FACD41AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 40 | 607FACD51AFB9204008FA782 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 41 | 607FACDF1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; 42 | 607FACE51AFB9204008FA782 /* SwipeableTableViewCell_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SwipeableTableViewCell_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 43 | 607FACEA1AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 44 | 607FACEB1AFB9204008FA782 /* Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tests.swift; sourceTree = ""; }; 45 | 66C286C12146C14F00A7B735 /* Font.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Font.swift; sourceTree = ""; }; 46 | 66C286C22146C14F00A7B735 /* TableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TableViewController.swift; sourceTree = ""; }; 47 | 66C286C32146C14F00A7B735 /* Colors.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Colors.swift; sourceTree = ""; }; 48 | 66C286C42146C14F00A7B735 /* HeaderView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HeaderView.swift; sourceTree = ""; }; 49 | 66C286C62146C14F00A7B735 /* TableViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TableViewModel.swift; sourceTree = ""; }; 50 | 66C286CD2146C15B00A7B735 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 51 | 66CA48D321C10B6B0080D382 /* TableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TableViewCell.swift; sourceTree = ""; }; 52 | 68297CC73FCCAF0991D45CAA /* Pods_SwipeableTableViewCell_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SwipeableTableViewCell_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 53 | 7008A0F4FB2C7A4B19D96A07 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; 54 | AAA44C36116A27798C7B29FA /* Pods_SwipeableTableViewCell_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SwipeableTableViewCell_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 55 | C26776A2BACEAD54D3197929 /* Pods-SwipeableTableViewCell_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwipeableTableViewCell_Example.debug.xcconfig"; path = "Pods/Target Support Files/Pods-SwipeableTableViewCell_Example/Pods-SwipeableTableViewCell_Example.debug.xcconfig"; sourceTree = ""; }; 56 | CCE7A50249C69AAE6348212B /* SwipeableTableViewCell.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = SwipeableTableViewCell.podspec; path = ../SwipeableTableViewCell.podspec; sourceTree = ""; }; 57 | E05BCC64FEA3EF22524709B0 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; 58 | /* End PBXFileReference section */ 59 | 60 | /* Begin PBXFrameworksBuildPhase section */ 61 | 607FACCD1AFB9204008FA782 /* Frameworks */ = { 62 | isa = PBXFrameworksBuildPhase; 63 | buildActionMask = 2147483647; 64 | files = ( 65 | F764652A9870BB48EC48BB0E /* Pods_SwipeableTableViewCell_Example.framework in Frameworks */, 66 | ); 67 | runOnlyForDeploymentPostprocessing = 0; 68 | }; 69 | 607FACE21AFB9204008FA782 /* Frameworks */ = { 70 | isa = PBXFrameworksBuildPhase; 71 | buildActionMask = 2147483647; 72 | files = ( 73 | B150F742DF5EA184D1B9D85B /* Pods_SwipeableTableViewCell_Tests.framework in Frameworks */, 74 | ); 75 | runOnlyForDeploymentPostprocessing = 0; 76 | }; 77 | /* End PBXFrameworksBuildPhase section */ 78 | 79 | /* Begin PBXGroup section */ 80 | 15079582E1F6DA7BAA58A14B /* Pods */ = { 81 | isa = PBXGroup; 82 | children = ( 83 | C26776A2BACEAD54D3197929 /* Pods-SwipeableTableViewCell_Example.debug.xcconfig */, 84 | 269524CF3B27CD54189266F1 /* Pods-SwipeableTableViewCell_Example.release.xcconfig */, 85 | 11A586D230ACF325419BB504 /* Pods-SwipeableTableViewCell_Tests.debug.xcconfig */, 86 | 1FFC905DDE9F2F9E90590DFD /* Pods-SwipeableTableViewCell_Tests.release.xcconfig */, 87 | ); 88 | name = Pods; 89 | sourceTree = ""; 90 | }; 91 | 4F8980E4BA5B9C693444FD94 /* Frameworks */ = { 92 | isa = PBXGroup; 93 | children = ( 94 | AAA44C36116A27798C7B29FA /* Pods_SwipeableTableViewCell_Example.framework */, 95 | 68297CC73FCCAF0991D45CAA /* Pods_SwipeableTableViewCell_Tests.framework */, 96 | ); 97 | name = Frameworks; 98 | sourceTree = ""; 99 | }; 100 | 607FACC71AFB9204008FA782 = { 101 | isa = PBXGroup; 102 | children = ( 103 | 607FACF51AFB993E008FA782 /* Podspec Metadata */, 104 | 607FACD21AFB9204008FA782 /* Example for SwipeableTableViewCell */, 105 | 607FACE81AFB9204008FA782 /* Tests */, 106 | 607FACD11AFB9204008FA782 /* Products */, 107 | 15079582E1F6DA7BAA58A14B /* Pods */, 108 | 4F8980E4BA5B9C693444FD94 /* Frameworks */, 109 | ); 110 | sourceTree = ""; 111 | }; 112 | 607FACD11AFB9204008FA782 /* Products */ = { 113 | isa = PBXGroup; 114 | children = ( 115 | 607FACD01AFB9204008FA782 /* SwipeableTableViewCell_Example.app */, 116 | 607FACE51AFB9204008FA782 /* SwipeableTableViewCell_Tests.xctest */, 117 | ); 118 | name = Products; 119 | sourceTree = ""; 120 | }; 121 | 607FACD21AFB9204008FA782 /* Example for SwipeableTableViewCell */ = { 122 | isa = PBXGroup; 123 | children = ( 124 | 66C286CF2146C1A000A7B735 /* Resources */, 125 | 607FACD51AFB9204008FA782 /* AppDelegate.swift */, 126 | 66C286C42146C14F00A7B735 /* HeaderView.swift */, 127 | 66C286C22146C14F00A7B735 /* TableViewController.swift */, 128 | 66CA48D321C10B6B0080D382 /* TableViewCell.swift */, 129 | 66C286C62146C14F00A7B735 /* TableViewModel.swift */, 130 | 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */, 131 | 607FACD31AFB9204008FA782 /* Supporting Files */, 132 | ); 133 | name = "Example for SwipeableTableViewCell"; 134 | path = SwipeableTableViewCell; 135 | sourceTree = ""; 136 | }; 137 | 607FACD31AFB9204008FA782 /* Supporting Files */ = { 138 | isa = PBXGroup; 139 | children = ( 140 | 607FACD41AFB9204008FA782 /* Info.plist */, 141 | ); 142 | name = "Supporting Files"; 143 | sourceTree = ""; 144 | }; 145 | 607FACE81AFB9204008FA782 /* Tests */ = { 146 | isa = PBXGroup; 147 | children = ( 148 | 607FACEB1AFB9204008FA782 /* Tests.swift */, 149 | 607FACE91AFB9204008FA782 /* Supporting Files */, 150 | ); 151 | path = Tests; 152 | sourceTree = ""; 153 | }; 154 | 607FACE91AFB9204008FA782 /* Supporting Files */ = { 155 | isa = PBXGroup; 156 | children = ( 157 | 607FACEA1AFB9204008FA782 /* Info.plist */, 158 | ); 159 | name = "Supporting Files"; 160 | sourceTree = ""; 161 | }; 162 | 607FACF51AFB993E008FA782 /* Podspec Metadata */ = { 163 | isa = PBXGroup; 164 | children = ( 165 | CCE7A50249C69AAE6348212B /* SwipeableTableViewCell.podspec */, 166 | E05BCC64FEA3EF22524709B0 /* README.md */, 167 | 7008A0F4FB2C7A4B19D96A07 /* LICENSE */, 168 | ); 169 | name = "Podspec Metadata"; 170 | sourceTree = ""; 171 | }; 172 | 66C286CF2146C1A000A7B735 /* Resources */ = { 173 | isa = PBXGroup; 174 | children = ( 175 | 66C286C32146C14F00A7B735 /* Colors.swift */, 176 | 66C286C12146C14F00A7B735 /* Font.swift */, 177 | 66C286CD2146C15B00A7B735 /* Images.xcassets */, 178 | ); 179 | name = Resources; 180 | sourceTree = ""; 181 | }; 182 | /* End PBXGroup section */ 183 | 184 | /* Begin PBXNativeTarget section */ 185 | 607FACCF1AFB9204008FA782 /* SwipeableTableViewCell_Example */ = { 186 | isa = PBXNativeTarget; 187 | buildConfigurationList = 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "SwipeableTableViewCell_Example" */; 188 | buildPhases = ( 189 | 0D4159CFD3DE238A86E258A7 /* [CP] Check Pods Manifest.lock */, 190 | 607FACCC1AFB9204008FA782 /* Sources */, 191 | 607FACCD1AFB9204008FA782 /* Frameworks */, 192 | 607FACCE1AFB9204008FA782 /* Resources */, 193 | A65CD3CB9C89705F98805268 /* [CP] Embed Pods Frameworks */, 194 | ); 195 | buildRules = ( 196 | ); 197 | dependencies = ( 198 | ); 199 | name = SwipeableTableViewCell_Example; 200 | productName = SwipeableTableViewCell; 201 | productReference = 607FACD01AFB9204008FA782 /* SwipeableTableViewCell_Example.app */; 202 | productType = "com.apple.product-type.application"; 203 | }; 204 | 607FACE41AFB9204008FA782 /* SwipeableTableViewCell_Tests */ = { 205 | isa = PBXNativeTarget; 206 | buildConfigurationList = 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "SwipeableTableViewCell_Tests" */; 207 | buildPhases = ( 208 | AFB2E31549221E48AE341908 /* [CP] Check Pods Manifest.lock */, 209 | 607FACE11AFB9204008FA782 /* Sources */, 210 | 607FACE21AFB9204008FA782 /* Frameworks */, 211 | 607FACE31AFB9204008FA782 /* Resources */, 212 | ); 213 | buildRules = ( 214 | ); 215 | dependencies = ( 216 | 607FACE71AFB9204008FA782 /* PBXTargetDependency */, 217 | ); 218 | name = SwipeableTableViewCell_Tests; 219 | productName = Tests; 220 | productReference = 607FACE51AFB9204008FA782 /* SwipeableTableViewCell_Tests.xctest */; 221 | productType = "com.apple.product-type.bundle.unit-test"; 222 | }; 223 | /* End PBXNativeTarget section */ 224 | 225 | /* Begin PBXProject section */ 226 | 607FACC81AFB9204008FA782 /* Project object */ = { 227 | isa = PBXProject; 228 | attributes = { 229 | LastSwiftUpdateCheck = 0830; 230 | LastUpgradeCheck = 0830; 231 | ORGANIZATIONNAME = CocoaPods; 232 | TargetAttributes = { 233 | 607FACCF1AFB9204008FA782 = { 234 | CreatedOnToolsVersion = 6.3.1; 235 | LastSwiftMigration = 0900; 236 | ProvisioningStyle = Manual; 237 | }; 238 | 607FACE41AFB9204008FA782 = { 239 | CreatedOnToolsVersion = 6.3.1; 240 | LastSwiftMigration = 0900; 241 | ProvisioningStyle = Manual; 242 | TestTargetID = 607FACCF1AFB9204008FA782; 243 | }; 244 | }; 245 | }; 246 | buildConfigurationList = 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "SwipeableTableViewCell" */; 247 | compatibilityVersion = "Xcode 3.2"; 248 | developmentRegion = English; 249 | hasScannedForEncodings = 0; 250 | knownRegions = ( 251 | en, 252 | Base, 253 | ); 254 | mainGroup = 607FACC71AFB9204008FA782; 255 | productRefGroup = 607FACD11AFB9204008FA782 /* Products */; 256 | projectDirPath = ""; 257 | projectRoot = ""; 258 | targets = ( 259 | 607FACCF1AFB9204008FA782 /* SwipeableTableViewCell_Example */, 260 | 607FACE41AFB9204008FA782 /* SwipeableTableViewCell_Tests */, 261 | ); 262 | }; 263 | /* End PBXProject section */ 264 | 265 | /* Begin PBXResourcesBuildPhase section */ 266 | 607FACCE1AFB9204008FA782 /* Resources */ = { 267 | isa = PBXResourcesBuildPhase; 268 | buildActionMask = 2147483647; 269 | files = ( 270 | 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */, 271 | 66C286CE2146C15B00A7B735 /* Images.xcassets in Resources */, 272 | ); 273 | runOnlyForDeploymentPostprocessing = 0; 274 | }; 275 | 607FACE31AFB9204008FA782 /* Resources */ = { 276 | isa = PBXResourcesBuildPhase; 277 | buildActionMask = 2147483647; 278 | files = ( 279 | ); 280 | runOnlyForDeploymentPostprocessing = 0; 281 | }; 282 | /* End PBXResourcesBuildPhase section */ 283 | 284 | /* Begin PBXShellScriptBuildPhase section */ 285 | 0D4159CFD3DE238A86E258A7 /* [CP] Check Pods Manifest.lock */ = { 286 | isa = PBXShellScriptBuildPhase; 287 | buildActionMask = 2147483647; 288 | files = ( 289 | ); 290 | inputPaths = ( 291 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 292 | "${PODS_ROOT}/Manifest.lock", 293 | ); 294 | name = "[CP] Check Pods Manifest.lock"; 295 | outputPaths = ( 296 | "$(DERIVED_FILE_DIR)/Pods-SwipeableTableViewCell_Example-checkManifestLockResult.txt", 297 | ); 298 | runOnlyForDeploymentPostprocessing = 0; 299 | shellPath = /bin/sh; 300 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/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# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 301 | showEnvVarsInLog = 0; 302 | }; 303 | A65CD3CB9C89705F98805268 /* [CP] Embed Pods Frameworks */ = { 304 | isa = PBXShellScriptBuildPhase; 305 | buildActionMask = 2147483647; 306 | files = ( 307 | ); 308 | inputPaths = ( 309 | "${SRCROOT}/Pods/Target Support Files/Pods-SwipeableTableViewCell_Example/Pods-SwipeableTableViewCell_Example-frameworks.sh", 310 | "${BUILT_PRODUCTS_DIR}/SwipeableTableViewCell/SwipeableTableViewCell.framework", 311 | ); 312 | name = "[CP] Embed Pods Frameworks"; 313 | outputPaths = ( 314 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwipeableTableViewCell.framework", 315 | ); 316 | runOnlyForDeploymentPostprocessing = 0; 317 | shellPath = /bin/sh; 318 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-SwipeableTableViewCell_Example/Pods-SwipeableTableViewCell_Example-frameworks.sh\"\n"; 319 | showEnvVarsInLog = 0; 320 | }; 321 | AFB2E31549221E48AE341908 /* [CP] Check Pods Manifest.lock */ = { 322 | isa = PBXShellScriptBuildPhase; 323 | buildActionMask = 2147483647; 324 | files = ( 325 | ); 326 | inputPaths = ( 327 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 328 | "${PODS_ROOT}/Manifest.lock", 329 | ); 330 | name = "[CP] Check Pods Manifest.lock"; 331 | outputPaths = ( 332 | "$(DERIVED_FILE_DIR)/Pods-SwipeableTableViewCell_Tests-checkManifestLockResult.txt", 333 | ); 334 | runOnlyForDeploymentPostprocessing = 0; 335 | shellPath = /bin/sh; 336 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/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# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 337 | showEnvVarsInLog = 0; 338 | }; 339 | /* End PBXShellScriptBuildPhase section */ 340 | 341 | /* Begin PBXSourcesBuildPhase section */ 342 | 607FACCC1AFB9204008FA782 /* Sources */ = { 343 | isa = PBXSourcesBuildPhase; 344 | buildActionMask = 2147483647; 345 | files = ( 346 | 66C286CA2146C14F00A7B735 /* HeaderView.swift in Sources */, 347 | 66C286C92146C14F00A7B735 /* Colors.swift in Sources */, 348 | 66C286CC2146C14F00A7B735 /* TableViewModel.swift in Sources */, 349 | 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */, 350 | 66C286C72146C14F00A7B735 /* Font.swift in Sources */, 351 | 66CA48D421C10B6B0080D382 /* TableViewCell.swift in Sources */, 352 | 66C286C82146C14F00A7B735 /* TableViewController.swift in Sources */, 353 | ); 354 | runOnlyForDeploymentPostprocessing = 0; 355 | }; 356 | 607FACE11AFB9204008FA782 /* Sources */ = { 357 | isa = PBXSourcesBuildPhase; 358 | buildActionMask = 2147483647; 359 | files = ( 360 | 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */, 361 | ); 362 | runOnlyForDeploymentPostprocessing = 0; 363 | }; 364 | /* End PBXSourcesBuildPhase section */ 365 | 366 | /* Begin PBXTargetDependency section */ 367 | 607FACE71AFB9204008FA782 /* PBXTargetDependency */ = { 368 | isa = PBXTargetDependency; 369 | target = 607FACCF1AFB9204008FA782 /* SwipeableTableViewCell_Example */; 370 | targetProxy = 607FACE61AFB9204008FA782 /* PBXContainerItemProxy */; 371 | }; 372 | /* End PBXTargetDependency section */ 373 | 374 | /* Begin PBXVariantGroup section */ 375 | 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */ = { 376 | isa = PBXVariantGroup; 377 | children = ( 378 | 607FACDF1AFB9204008FA782 /* Base */, 379 | ); 380 | name = LaunchScreen.xib; 381 | sourceTree = ""; 382 | }; 383 | /* End PBXVariantGroup section */ 384 | 385 | /* Begin XCBuildConfiguration section */ 386 | 607FACED1AFB9204008FA782 /* Debug */ = { 387 | isa = XCBuildConfiguration; 388 | buildSettings = { 389 | ALWAYS_SEARCH_USER_PATHS = NO; 390 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 391 | CLANG_CXX_LIBRARY = "libc++"; 392 | CLANG_ENABLE_MODULES = YES; 393 | CLANG_ENABLE_OBJC_ARC = YES; 394 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 395 | CLANG_WARN_BOOL_CONVERSION = YES; 396 | CLANG_WARN_COMMA = YES; 397 | CLANG_WARN_CONSTANT_CONVERSION = YES; 398 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 399 | CLANG_WARN_EMPTY_BODY = YES; 400 | CLANG_WARN_ENUM_CONVERSION = YES; 401 | CLANG_WARN_INFINITE_RECURSION = YES; 402 | CLANG_WARN_INT_CONVERSION = YES; 403 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 404 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 405 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 406 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 407 | CLANG_WARN_STRICT_PROTOTYPES = YES; 408 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 409 | CLANG_WARN_UNREACHABLE_CODE = YES; 410 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 411 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 412 | COPY_PHASE_STRIP = NO; 413 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 414 | ENABLE_STRICT_OBJC_MSGSEND = YES; 415 | ENABLE_TESTABILITY = YES; 416 | GCC_C_LANGUAGE_STANDARD = gnu99; 417 | GCC_DYNAMIC_NO_PIC = NO; 418 | GCC_NO_COMMON_BLOCKS = YES; 419 | GCC_OPTIMIZATION_LEVEL = 0; 420 | GCC_PREPROCESSOR_DEFINITIONS = ( 421 | "DEBUG=1", 422 | "$(inherited)", 423 | ); 424 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 425 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 426 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 427 | GCC_WARN_UNDECLARED_SELECTOR = YES; 428 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 429 | GCC_WARN_UNUSED_FUNCTION = YES; 430 | GCC_WARN_UNUSED_VARIABLE = YES; 431 | IPHONEOS_DEPLOYMENT_TARGET = 10.3; 432 | MTL_ENABLE_DEBUG_INFO = YES; 433 | ONLY_ACTIVE_ARCH = YES; 434 | SDKROOT = iphoneos; 435 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 436 | }; 437 | name = Debug; 438 | }; 439 | 607FACEE1AFB9204008FA782 /* Release */ = { 440 | isa = XCBuildConfiguration; 441 | buildSettings = { 442 | ALWAYS_SEARCH_USER_PATHS = NO; 443 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 444 | CLANG_CXX_LIBRARY = "libc++"; 445 | CLANG_ENABLE_MODULES = YES; 446 | CLANG_ENABLE_OBJC_ARC = YES; 447 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 448 | CLANG_WARN_BOOL_CONVERSION = YES; 449 | CLANG_WARN_COMMA = YES; 450 | CLANG_WARN_CONSTANT_CONVERSION = YES; 451 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 452 | CLANG_WARN_EMPTY_BODY = YES; 453 | CLANG_WARN_ENUM_CONVERSION = YES; 454 | CLANG_WARN_INFINITE_RECURSION = YES; 455 | CLANG_WARN_INT_CONVERSION = YES; 456 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 457 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 458 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 459 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 460 | CLANG_WARN_STRICT_PROTOTYPES = YES; 461 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 462 | CLANG_WARN_UNREACHABLE_CODE = YES; 463 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 464 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 465 | COPY_PHASE_STRIP = NO; 466 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 467 | ENABLE_NS_ASSERTIONS = NO; 468 | ENABLE_STRICT_OBJC_MSGSEND = YES; 469 | GCC_C_LANGUAGE_STANDARD = gnu99; 470 | GCC_NO_COMMON_BLOCKS = YES; 471 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 472 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 473 | GCC_WARN_UNDECLARED_SELECTOR = YES; 474 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 475 | GCC_WARN_UNUSED_FUNCTION = YES; 476 | GCC_WARN_UNUSED_VARIABLE = YES; 477 | IPHONEOS_DEPLOYMENT_TARGET = 10.3; 478 | MTL_ENABLE_DEBUG_INFO = NO; 479 | SDKROOT = iphoneos; 480 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 481 | VALIDATE_PRODUCT = YES; 482 | }; 483 | name = Release; 484 | }; 485 | 607FACF01AFB9204008FA782 /* Debug */ = { 486 | isa = XCBuildConfiguration; 487 | baseConfigurationReference = C26776A2BACEAD54D3197929 /* Pods-SwipeableTableViewCell_Example.debug.xcconfig */; 488 | buildSettings = { 489 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 490 | CODE_SIGN_IDENTITY = "iPhone Developer"; 491 | CODE_SIGN_STYLE = Manual; 492 | DEVELOPMENT_TEAM = ""; 493 | INFOPLIST_FILE = SwipeableTableViewCell/Info.plist; 494 | IPHONEOS_DEPLOYMENT_TARGET = 10.3; 495 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 496 | MODULE_NAME = ExampleApp; 497 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.SwipeableTableViewCell-Example"; 498 | PRODUCT_NAME = "$(TARGET_NAME)"; 499 | PROVISIONING_PROFILE_SPECIFIER = ""; 500 | SWIFT_SWIFT3_OBJC_INFERENCE = Default; 501 | SWIFT_VERSION = 4.0; 502 | }; 503 | name = Debug; 504 | }; 505 | 607FACF11AFB9204008FA782 /* Release */ = { 506 | isa = XCBuildConfiguration; 507 | baseConfigurationReference = 269524CF3B27CD54189266F1 /* Pods-SwipeableTableViewCell_Example.release.xcconfig */; 508 | buildSettings = { 509 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 510 | CODE_SIGN_IDENTITY = "iPhone Developer"; 511 | CODE_SIGN_STYLE = Manual; 512 | DEVELOPMENT_TEAM = ""; 513 | INFOPLIST_FILE = SwipeableTableViewCell/Info.plist; 514 | IPHONEOS_DEPLOYMENT_TARGET = 10.3; 515 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 516 | MODULE_NAME = ExampleApp; 517 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.SwipeableTableViewCell-Example"; 518 | PRODUCT_NAME = "$(TARGET_NAME)"; 519 | PROVISIONING_PROFILE_SPECIFIER = ""; 520 | SWIFT_SWIFT3_OBJC_INFERENCE = Default; 521 | SWIFT_VERSION = 4.0; 522 | }; 523 | name = Release; 524 | }; 525 | 607FACF31AFB9204008FA782 /* Debug */ = { 526 | isa = XCBuildConfiguration; 527 | baseConfigurationReference = 11A586D230ACF325419BB504 /* Pods-SwipeableTableViewCell_Tests.debug.xcconfig */; 528 | buildSettings = { 529 | CODE_SIGN_STYLE = Manual; 530 | DEVELOPMENT_TEAM = ""; 531 | FRAMEWORK_SEARCH_PATHS = ( 532 | "$(SDKROOT)/Developer/Library/Frameworks", 533 | "$(inherited)", 534 | ); 535 | GCC_PREPROCESSOR_DEFINITIONS = ( 536 | "DEBUG=1", 537 | "$(inherited)", 538 | ); 539 | INFOPLIST_FILE = Tests/Info.plist; 540 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 541 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; 542 | PRODUCT_NAME = "$(TARGET_NAME)"; 543 | PROVISIONING_PROFILE_SPECIFIER = ""; 544 | SWIFT_SWIFT3_OBJC_INFERENCE = Default; 545 | SWIFT_VERSION = 4.0; 546 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SwipeableTableViewCell_Example.app/SwipeableTableViewCell_Example"; 547 | }; 548 | name = Debug; 549 | }; 550 | 607FACF41AFB9204008FA782 /* Release */ = { 551 | isa = XCBuildConfiguration; 552 | baseConfigurationReference = 1FFC905DDE9F2F9E90590DFD /* Pods-SwipeableTableViewCell_Tests.release.xcconfig */; 553 | buildSettings = { 554 | CODE_SIGN_STYLE = Manual; 555 | DEVELOPMENT_TEAM = ""; 556 | FRAMEWORK_SEARCH_PATHS = ( 557 | "$(SDKROOT)/Developer/Library/Frameworks", 558 | "$(inherited)", 559 | ); 560 | INFOPLIST_FILE = Tests/Info.plist; 561 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 562 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; 563 | PRODUCT_NAME = "$(TARGET_NAME)"; 564 | PROVISIONING_PROFILE_SPECIFIER = ""; 565 | SWIFT_SWIFT3_OBJC_INFERENCE = Default; 566 | SWIFT_VERSION = 4.0; 567 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SwipeableTableViewCell_Example.app/SwipeableTableViewCell_Example"; 568 | }; 569 | name = Release; 570 | }; 571 | /* End XCBuildConfiguration section */ 572 | 573 | /* Begin XCConfigurationList section */ 574 | 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "SwipeableTableViewCell" */ = { 575 | isa = XCConfigurationList; 576 | buildConfigurations = ( 577 | 607FACED1AFB9204008FA782 /* Debug */, 578 | 607FACEE1AFB9204008FA782 /* Release */, 579 | ); 580 | defaultConfigurationIsVisible = 0; 581 | defaultConfigurationName = Release; 582 | }; 583 | 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "SwipeableTableViewCell_Example" */ = { 584 | isa = XCConfigurationList; 585 | buildConfigurations = ( 586 | 607FACF01AFB9204008FA782 /* Debug */, 587 | 607FACF11AFB9204008FA782 /* Release */, 588 | ); 589 | defaultConfigurationIsVisible = 0; 590 | defaultConfigurationName = Release; 591 | }; 592 | 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "SwipeableTableViewCell_Tests" */ = { 593 | isa = XCConfigurationList; 594 | buildConfigurations = ( 595 | 607FACF31AFB9204008FA782 /* Debug */, 596 | 607FACF41AFB9204008FA782 /* Release */, 597 | ); 598 | defaultConfigurationIsVisible = 0; 599 | defaultConfigurationName = Release; 600 | }; 601 | /* End XCConfigurationList section */ 602 | }; 603 | rootObject = 607FACC81AFB9204008FA782 /* Project object */; 604 | } 605 | -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell.xcodeproj/xcshareddata/xcschemes/SwipeableTableViewCell-Example.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 29 | 35 | 36 | 37 | 38 | 39 | 44 | 45 | 47 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 65 | 66 | 67 | 68 | 78 | 80 | 86 | 87 | 88 | 89 | 90 | 91 | 97 | 99 | 105 | 106 | 107 | 108 | 110 | 111 | 114 | 115 | 116 | -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // SwipeableTableViewCell 4 | // 5 | // Created by Hubert Kuczynski on 09/10/2018. 6 | // Copyright (c) 2018 Hubert Kuczynski. 7 | // 8 | // Permission is hereby granted, free of charge, to any person obtaining a copy 9 | // of this software and associated documentation files (the "Software"), to deal 10 | // in the Software without restriction, including without limitation the rights 11 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | // copies of the Software, and to permit persons to whom the Software is 13 | // furnished to do so, subject to the following conditions: 14 | // 15 | // The above copyright notice and this permission notice shall be included in 16 | // all copies or substantial portions of the Software. 17 | // 18 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 24 | // THE SOFTWARE. 25 | 26 | import UIKit 27 | 28 | @UIApplicationMain 29 | class AppDelegate: UIResponder, UIApplicationDelegate { 30 | 31 | var window: UIWindow? 32 | 33 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 34 | window = UIWindow(frame: UIScreen.main.bounds) 35 | window?.rootViewController = TableViewController() 36 | window?.makeKeyAndVisible() 37 | return true 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/Base.lproj/LaunchScreen.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 25 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/Colors.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Colors.swift 3 | // SwipableTableViewCell_Example 4 | // 5 | // Created by Hubert Kuczyński on 10/09/2018. 6 | // Copyright © 2018 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | struct Colors { 12 | static let white: UIColor = UIColor.white 13 | static let lightPinkGray: UIColor = #colorLiteral(red: 0.8588235294, green: 0.8588235294, blue: 0.8588235294, alpha: 1) 14 | static let charcoalGrey: UIColor = #colorLiteral(red: 0.1843137255, green: 0.1843137255, blue: 0.1960784314, alpha: 1) 15 | static let charcoalGreyTwo: UIColor = #colorLiteral(red: 0.2078431373, green: 0.2, blue: 0.2156862745, alpha: 1) 16 | static let darkGrey: UIColor = #colorLiteral(red: 0.1529411765, green: 0.1490196078, blue: 0.1647058824, alpha: 1) 17 | static let dark: UIColor = #colorLiteral(red: 0.1019607843, green: 0.1019607843, blue: 0.1176470588, alpha: 1) 18 | static let lightClaret: UIColor = #colorLiteral(red: 0.7294117647, green: 0.3333333333, blue: 0.3803921569, alpha: 1) 19 | } 20 | -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/Font.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Kamil Powałowski on 13.07.2018. 3 | // Copyright © 2018 10Clouds. All rights reserved. 4 | // 5 | 6 | import Foundation 7 | import UIKit 8 | 9 | final class Font { 10 | static func medium(_ size: CGFloat) -> UIFont { 11 | return UIFont.systemFont(ofSize: size, weight: .medium) 12 | } 13 | 14 | static func regular(_ size: CGFloat) -> UIFont { 15 | return UIFont.systemFont(ofSize: size, weight: .regular) 16 | } 17 | 18 | static func semibold(_ size: CGFloat) -> UIFont { 19 | return UIFont.systemFont(ofSize: size, weight: .semibold) 20 | } 21 | 22 | static func bold(_ size: CGFloat) -> UIFont { 23 | return UIFont.systemFont(ofSize: size, weight: .bold) 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/HeaderView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HeaderView.swift 3 | // SwipeableTableViewCell 4 | // 5 | // Created by Joanna Kubiak on 24.07.2018. 6 | // Copyright © 2018 10Clouds. 7 | // 8 | // Permission is hereby granted, free of charge, to any person obtaining a copy 9 | // of this software and associated documentation files (the "Software"), to deal 10 | // in the Software without restriction, including without limitation the rights 11 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | // copies of the Software, and to permit persons to whom the Software is 13 | // furnished to do so, subject to the following conditions: 14 | // 15 | // The above copyright notice and this permission notice shall be included in 16 | // all copies or substantial portions of the Software. 17 | // 18 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 24 | // THE SOFTWARE. 25 | 26 | import UIKit 27 | 28 | final class HeaderView: UIView { 29 | 30 | private struct Constants { 31 | static let imageDimension: CGFloat = 70 32 | } 33 | 34 | // MARK: - Properties 35 | 36 | lazy var titleLabel: UILabel = { 37 | let view = UILabel(frame: .zero) 38 | view.translatesAutoresizingMaskIntoConstraints = false 39 | view.font = Font.bold(26) 40 | return view 41 | }() 42 | 43 | lazy var messageLabel: UILabel = { 44 | let view = UILabel(frame: .zero) 45 | view.translatesAutoresizingMaskIntoConstraints = false 46 | view.font = Font.regular(13) 47 | view.numberOfLines = 0 48 | return view 49 | }() 50 | 51 | private lazy var elementsContainerView: UIView = { 52 | let view = UIView(frame: .zero) 53 | view.translatesAutoresizingMaskIntoConstraints = false 54 | return view 55 | }() 56 | 57 | // MARK: - Initialization 58 | 59 | override init(frame: CGRect) { 60 | super.init(frame: frame) 61 | backgroundColor = Colors.darkGrey 62 | 63 | prepareHeaderView() 64 | layoutViews() 65 | setColors() 66 | } 67 | 68 | required init?(coder aDecoder: NSCoder) { 69 | fatalError("init(coder:) has not been implemented") 70 | } 71 | 72 | // MARK: - Private 73 | 74 | private func prepareHeaderView() { 75 | titleLabel.text = "Swipe to delete" 76 | messageLabel.text = "Swipe your items left from list to delete the boxes." 77 | } 78 | 79 | private func layoutViews() { 80 | layoutElementsContainerView() 81 | layoutTitleLabel() 82 | layoutMessageLabel() 83 | } 84 | 85 | private func layoutElementsContainerView() { 86 | self.addSubview(elementsContainerView) 87 | let topConstraint: NSLayoutConstraint = { 88 | if #available(iOS 11, *) { 89 | return elementsContainerView.topAnchor.constraint(equalTo: safeAreaLayoutGuide.topAnchor) 90 | } else { 91 | return elementsContainerView.topAnchor.constraint(equalTo: bottomAnchor) 92 | } 93 | }() 94 | let constraints = [ 95 | topConstraint, 96 | elementsContainerView.leadingAnchor.constraint(equalTo: self.leadingAnchor), 97 | elementsContainerView.trailingAnchor.constraint(equalTo: self.trailingAnchor), 98 | elementsContainerView.bottomAnchor.constraint(equalTo: self.bottomAnchor) 99 | ] 100 | NSLayoutConstraint.activate(constraints) 101 | } 102 | 103 | private func layoutTitleLabel() { 104 | elementsContainerView.addSubview(titleLabel) 105 | let constraints = [ 106 | titleLabel.leadingAnchor.constraint(equalTo: elementsContainerView.leadingAnchor, constant: 27), 107 | titleLabel.topAnchor.constraint(equalTo: elementsContainerView.topAnchor, constant: 32), 108 | ] 109 | NSLayoutConstraint.activate(constraints) 110 | } 111 | 112 | private func layoutMessageLabel() { 113 | elementsContainerView.addSubview(messageLabel) 114 | let constraints = [ 115 | messageLabel.leadingAnchor.constraint(equalTo: titleLabel.leadingAnchor), 116 | messageLabel.topAnchor.constraint(equalTo: titleLabel.bottomAnchor, constant: 8), 117 | messageLabel.trailingAnchor.constraint(equalTo: titleLabel.trailingAnchor), 118 | messageLabel.bottomAnchor.constraint(equalTo: elementsContainerView.bottomAnchor, constant: -30) 119 | ] 120 | NSLayoutConstraint.activate(constraints) 121 | } 122 | 123 | private func setColors() { 124 | elementsContainerView.backgroundColor = Colors.darkGrey 125 | titleLabel.textColor = Colors.white 126 | messageLabel.textColor = Colors.lightPinkGray.withAlphaComponent(0.6) 127 | } 128 | } 129 | -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "29x29", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "40x40", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "60x60", 41 | "scale" : "3x" 42 | }, 43 | { 44 | "idiom" : "ios-marketing", 45 | "size" : "1024x1024", 46 | "scale" : "1x" 47 | } 48 | ], 49 | "info" : { 50 | "version" : 1, 51 | "author" : "xcode" 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/Images.xcassets/avatar1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "avatar1.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "avatar1@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "avatar1@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/Images.xcassets/avatar1.imageset/avatar1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10clouds/SwipeableTableViewCell-ios/216c034d06cf5e73e06facaa7a86081722b311dc/Example/SwipeableTableViewCell/Images.xcassets/avatar1.imageset/avatar1.png -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/Images.xcassets/avatar1.imageset/avatar1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10clouds/SwipeableTableViewCell-ios/216c034d06cf5e73e06facaa7a86081722b311dc/Example/SwipeableTableViewCell/Images.xcassets/avatar1.imageset/avatar1@2x.png -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/Images.xcassets/avatar1.imageset/avatar1@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10clouds/SwipeableTableViewCell-ios/216c034d06cf5e73e06facaa7a86081722b311dc/Example/SwipeableTableViewCell/Images.xcassets/avatar1.imageset/avatar1@3x.png -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/Images.xcassets/avatar2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "avatar2.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "avatar2@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "avatar2@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/Images.xcassets/avatar2.imageset/avatar2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10clouds/SwipeableTableViewCell-ios/216c034d06cf5e73e06facaa7a86081722b311dc/Example/SwipeableTableViewCell/Images.xcassets/avatar2.imageset/avatar2.png -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/Images.xcassets/avatar2.imageset/avatar2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10clouds/SwipeableTableViewCell-ios/216c034d06cf5e73e06facaa7a86081722b311dc/Example/SwipeableTableViewCell/Images.xcassets/avatar2.imageset/avatar2@2x.png -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/Images.xcassets/avatar2.imageset/avatar2@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10clouds/SwipeableTableViewCell-ios/216c034d06cf5e73e06facaa7a86081722b311dc/Example/SwipeableTableViewCell/Images.xcassets/avatar2.imageset/avatar2@3x.png -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/Images.xcassets/avatar3.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "avatar3.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "avatar3@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "avatar3@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/Images.xcassets/avatar3.imageset/avatar3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10clouds/SwipeableTableViewCell-ios/216c034d06cf5e73e06facaa7a86081722b311dc/Example/SwipeableTableViewCell/Images.xcassets/avatar3.imageset/avatar3.png -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/Images.xcassets/avatar3.imageset/avatar3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10clouds/SwipeableTableViewCell-ios/216c034d06cf5e73e06facaa7a86081722b311dc/Example/SwipeableTableViewCell/Images.xcassets/avatar3.imageset/avatar3@2x.png -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/Images.xcassets/avatar3.imageset/avatar3@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10clouds/SwipeableTableViewCell-ios/216c034d06cf5e73e06facaa7a86081722b311dc/Example/SwipeableTableViewCell/Images.xcassets/avatar3.imageset/avatar3@3x.png -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/Images.xcassets/avatar4.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "avatar4.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "avatar4@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "avatar4@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/Images.xcassets/avatar4.imageset/avatar4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10clouds/SwipeableTableViewCell-ios/216c034d06cf5e73e06facaa7a86081722b311dc/Example/SwipeableTableViewCell/Images.xcassets/avatar4.imageset/avatar4.png -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/Images.xcassets/avatar4.imageset/avatar4@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10clouds/SwipeableTableViewCell-ios/216c034d06cf5e73e06facaa7a86081722b311dc/Example/SwipeableTableViewCell/Images.xcassets/avatar4.imageset/avatar4@2x.png -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/Images.xcassets/avatar4.imageset/avatar4@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10clouds/SwipeableTableViewCell-ios/216c034d06cf5e73e06facaa7a86081722b311dc/Example/SwipeableTableViewCell/Images.xcassets/avatar4.imageset/avatar4@3x.png -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/Images.xcassets/avatar5.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "avatar5.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "avatar5@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "avatar5@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/Images.xcassets/avatar5.imageset/avatar5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10clouds/SwipeableTableViewCell-ios/216c034d06cf5e73e06facaa7a86081722b311dc/Example/SwipeableTableViewCell/Images.xcassets/avatar5.imageset/avatar5.png -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/Images.xcassets/avatar5.imageset/avatar5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10clouds/SwipeableTableViewCell-ios/216c034d06cf5e73e06facaa7a86081722b311dc/Example/SwipeableTableViewCell/Images.xcassets/avatar5.imageset/avatar5@2x.png -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/Images.xcassets/avatar5.imageset/avatar5@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10clouds/SwipeableTableViewCell-ios/216c034d06cf5e73e06facaa7a86081722b311dc/Example/SwipeableTableViewCell/Images.xcassets/avatar5.imageset/avatar5@3x.png -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/Images.xcassets/avatar6.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "avatar6.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "avatar6@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "avatar6@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/Images.xcassets/avatar6.imageset/avatar6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10clouds/SwipeableTableViewCell-ios/216c034d06cf5e73e06facaa7a86081722b311dc/Example/SwipeableTableViewCell/Images.xcassets/avatar6.imageset/avatar6.png -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/Images.xcassets/avatar6.imageset/avatar6@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10clouds/SwipeableTableViewCell-ios/216c034d06cf5e73e06facaa7a86081722b311dc/Example/SwipeableTableViewCell/Images.xcassets/avatar6.imageset/avatar6@2x.png -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/Images.xcassets/avatar6.imageset/avatar6@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10clouds/SwipeableTableViewCell-ios/216c034d06cf5e73e06facaa7a86081722b311dc/Example/SwipeableTableViewCell/Images.xcassets/avatar6.imageset/avatar6@3x.png -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/Images.xcassets/star.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "star.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | }, 12 | "properties" : { 13 | "template-rendering-intent" : "template" 14 | } 15 | } -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/Images.xcassets/star.imageset/star.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10clouds/SwipeableTableViewCell-ios/216c034d06cf5e73e06facaa7a86081722b311dc/Example/SwipeableTableViewCell/Images.xcassets/star.imageset/star.pdf -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/Images.xcassets/trash.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "trash.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/Images.xcassets/trash.imageset/trash.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10clouds/SwipeableTableViewCell-ios/216c034d06cf5e73e06facaa7a86081722b311dc/Example/SwipeableTableViewCell/Images.xcassets/trash.imageset/trash.pdf -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/TableViewCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Kamil Powałowski on 11/07/2018. 3 | // Copyright © 2018 10Clouds. 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | 23 | import UIKit 24 | import SwipeableTableViewCell 25 | 26 | final class TableViewCell: SwipeableTableViewCell { 27 | 28 | private struct Constants { 29 | static let avatarSize: CGFloat = 32 30 | static let horizontalMargin: CGFloat = 16 31 | static let verticalMargin: CGFloat = 16 32 | } 33 | 34 | // MARK: - Properties 35 | 36 | lazy var avatarImageView: UIImageView = { 37 | let view = UIImageView(frame: .zero) 38 | view.translatesAutoresizingMaskIntoConstraints = false 39 | return view 40 | }() 41 | 42 | lazy var nameLabel: UILabel = { 43 | let view = UILabel(frame: .zero) 44 | view.translatesAutoresizingMaskIntoConstraints = false 45 | view.font = Font.medium(14) 46 | return view 47 | }() 48 | 49 | lazy var titleLabel: UILabel = { 50 | let view = UILabel(frame: .zero) 51 | view.translatesAutoresizingMaskIntoConstraints = false 52 | view.font = Font.bold(12) 53 | return view 54 | }() 55 | 56 | lazy var messageLabel: UILabel = { 57 | let view = UILabel(frame: .zero) 58 | view.translatesAutoresizingMaskIntoConstraints = false 59 | view.font = Font.regular(12) 60 | return view 61 | }() 62 | 63 | private lazy var elementsContainerView: UIView = { 64 | let view = UIView(frame: .zero) 65 | view.translatesAutoresizingMaskIntoConstraints = false 66 | return view 67 | }() 68 | 69 | // MARK: - Initialization 70 | 71 | override init(style: UITableViewCellStyle, reuseIdentifier: String?) { 72 | super.init(style: style, reuseIdentifier: reuseIdentifier) 73 | selectionStyle = .none 74 | 75 | horizontalMargin = 16 76 | 77 | buttonTintColor = UIColor.white 78 | buttonBackgroundColor = Colors.lightClaret 79 | buttonImage = UIImage(named: "trash") 80 | 81 | scrollViewContentView.layer.cornerRadius = 8 82 | scrollViewContentView.layer.masksToBounds = true 83 | scrollViewContentView.clipsToBounds = true 84 | 85 | layoutViews() 86 | setColors() 87 | } 88 | 89 | required init?(coder aDecoder: NSCoder) { 90 | fatalError("init(coder:) has not been implemented") 91 | } 92 | 93 | // MARK: - Private 94 | 95 | private func layoutViews() { 96 | scrollViewContentView.addSubview(elementsContainerView) 97 | scrollViewContentView.addSubview(avatarImageView) 98 | elementsContainerView.addSubview(nameLabel) 99 | elementsContainerView.addSubview(titleLabel) 100 | elementsContainerView.addSubview(messageLabel) 101 | 102 | layoutElementsContainerView() 103 | layoutAvatarImageView() 104 | layoutNameLabel() 105 | layoutTitleLabel() 106 | layoutMessageLabel() 107 | } 108 | 109 | private func layoutAvatarImageView() { 110 | let constraints = [ 111 | avatarImageView.leadingAnchor.constraint(equalTo: scrollViewContentView.leadingAnchor, constant: Constants.horizontalMargin), 112 | avatarImageView.topAnchor.constraint(greaterThanOrEqualTo: scrollViewContentView.topAnchor, constant: Constants.verticalMargin), 113 | avatarImageView.bottomAnchor.constraint(lessThanOrEqualTo: scrollViewContentView.bottomAnchor, constant: -Constants.verticalMargin), 114 | avatarImageView.centerYAnchor.constraint(equalTo: scrollViewContentView.centerYAnchor), 115 | avatarImageView.widthAnchor.constraint(equalTo: avatarImageView.heightAnchor, multiplier: 1), 116 | avatarImageView.heightAnchor.constraint(equalToConstant: Constants.avatarSize) 117 | ] 118 | NSLayoutConstraint.activate(constraints) 119 | } 120 | 121 | private func layoutElementsContainerView() { 122 | let constraints = [ 123 | elementsContainerView.leadingAnchor.constraint(equalTo: avatarImageView.trailingAnchor, constant: Constants.horizontalMargin), 124 | elementsContainerView.topAnchor.constraint(equalTo: scrollViewContentView.topAnchor, constant: Constants.verticalMargin), 125 | elementsContainerView.trailingAnchor.constraint(equalTo: scrollViewContentView.trailingAnchor, constant: -Constants.horizontalMargin), 126 | elementsContainerView.bottomAnchor.constraint(equalTo: scrollViewContentView.bottomAnchor, constant: -Constants.verticalMargin) 127 | ] 128 | NSLayoutConstraint.activate(constraints) 129 | } 130 | 131 | private func layoutNameLabel() { 132 | let constraints = [ 133 | nameLabel.leadingAnchor.constraint(equalTo: elementsContainerView.leadingAnchor), 134 | nameLabel.topAnchor.constraint(equalTo: elementsContainerView.topAnchor), 135 | ] 136 | NSLayoutConstraint.activate(constraints) 137 | } 138 | 139 | private func layoutTitleLabel() { 140 | let constraints = [ 141 | titleLabel.leadingAnchor.constraint(equalTo: nameLabel.trailingAnchor, constant: 10), 142 | titleLabel.topAnchor.constraint(equalTo: elementsContainerView.topAnchor) 143 | ] 144 | NSLayoutConstraint.activate(constraints) 145 | } 146 | 147 | private func layoutMessageLabel() { 148 | let constraints = [ 149 | messageLabel.leadingAnchor.constraint(equalTo: nameLabel.leadingAnchor), 150 | messageLabel.topAnchor.constraint(equalTo: nameLabel.bottomAnchor, constant: 15), 151 | messageLabel.trailingAnchor.constraint(equalTo: elementsContainerView.trailingAnchor) 152 | ] 153 | NSLayoutConstraint.activate(constraints) 154 | } 155 | 156 | private func setColors() { 157 | scrollViewContentView.backgroundColor = Colors.charcoalGreyTwo 158 | nameLabel.textColor = Colors.white 159 | titleLabel.textColor = Colors.lightClaret 160 | messageLabel.textColor = Colors.lightPinkGray 161 | } 162 | } 163 | -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/TableViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Kamil Powałowski on 11/07/2018. 3 | // Copyright © 2018 10Clouds. 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | 23 | import UIKit 24 | 25 | final class TableViewController: UIViewController { 26 | 27 | private struct ReuseIdentifiers{ 28 | static let cell = "cell" 29 | } 30 | 31 | // MARK: - Properties 32 | 33 | override var preferredStatusBarStyle: UIStatusBarStyle { 34 | return .lightContent 35 | } 36 | 37 | private lazy var tableView: UITableView = { 38 | let tableView = UITableView() 39 | tableView.translatesAutoresizingMaskIntoConstraints = false 40 | tableView.backgroundColor = .clear 41 | tableView.register(TableViewCell.self, forCellReuseIdentifier: ReuseIdentifiers.cell) 42 | tableView.separatorStyle = .none 43 | tableView.delegate = self 44 | tableView.dataSource = self 45 | return tableView 46 | }() 47 | 48 | private lazy var headerView: HeaderView = { 49 | let view = HeaderView(frame: .zero) 50 | view.translatesAutoresizingMaskIntoConstraints = false 51 | view.layer.shadowRadius = 200 52 | view.layer.shadowColor = Colors.charcoalGrey.cgColor 53 | view.layer.shadowOpacity = 1.0 54 | view.clipsToBounds = false 55 | return view 56 | }() 57 | 58 | private lazy var viewModel = TableViewModel() 59 | 60 | // MARK: - Public 61 | 62 | override func viewDidLoad() { 63 | super.viewDidLoad() 64 | view.backgroundColor = Colors.dark 65 | layoutViews() 66 | } 67 | 68 | override func viewDidLayoutSubviews() { 69 | super.viewDidLayoutSubviews() 70 | headerView.layer.shadowPath = UIBezierPath(rect: headerView.bounds.insetBy(dx: -100, dy: 0)).cgPath 71 | } 72 | 73 | // MARK: - Private 74 | 75 | private func layoutViews() { 76 | layoutHeaderView() 77 | layoutTableView() 78 | } 79 | 80 | private func layoutHeaderView() { 81 | view.addSubview(headerView) 82 | let constraints = [ 83 | headerView.topAnchor.constraint(equalTo: view.topAnchor), 84 | headerView.leadingAnchor.constraint(equalTo: view.leadingAnchor), 85 | headerView.trailingAnchor.constraint(equalTo: view.trailingAnchor) 86 | ] 87 | NSLayoutConstraint.activate(constraints) 88 | } 89 | 90 | private func layoutTableView() { 91 | view.addSubview(tableView) 92 | let constraints = [ 93 | tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor), 94 | tableView.topAnchor.constraint(equalTo: headerView.bottomAnchor, constant: 13), 95 | tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor), 96 | tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor) 97 | ] 98 | NSLayoutConstraint.activate(constraints) 99 | } 100 | } 101 | 102 | extension TableViewController: UITableViewDataSource { 103 | func numberOfSections(in tableView: UITableView) -> Int { 104 | return viewModel.cells.count 105 | } 106 | 107 | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 108 | return 1 109 | } 110 | 111 | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 112 | let cell = tableView.dequeueReusableCell(withIdentifier: ReuseIdentifiers.cell, for: indexPath) as! TableViewCell 113 | let viewModel = self.viewModel.cells[indexPath.section] 114 | cell.avatarImageView.image = UIImage(named: viewModel.imageName) 115 | cell.nameLabel.text = viewModel.name + String(indexPath.section) 116 | cell.titleLabel.text = viewModel.title 117 | cell.messageLabel.text = viewModel.fragment 118 | 119 | cell.onPrimaryButtonTap = { [weak self] in 120 | guard let `self` = self, 121 | let indexPath = tableView.indexPath(for: cell) 122 | else { return } 123 | 124 | self.viewModel.moveToEndCell(at: indexPath.section) 125 | let deleteSections = IndexSet(integer: indexPath.section) 126 | let insertSections = IndexSet(integer: self.viewModel.cells.count - 1) 127 | tableView.beginUpdates() 128 | tableView.deleteSections(deleteSections, with: .left) 129 | tableView.insertSections(insertSections, with: .bottom) 130 | tableView.endUpdates() 131 | } 132 | 133 | return cell 134 | } 135 | } 136 | 137 | extension TableViewController: UITableViewDelegate { 138 | func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 139 | return 80 140 | } 141 | 142 | func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 143 | tableView.deselectRow(at: indexPath, animated: true) 144 | } 145 | 146 | func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { 147 | return section == 0 ? 20 : 0 148 | } 149 | 150 | func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 151 | return UIView() 152 | } 153 | 154 | func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? { 155 | return UIView() 156 | } 157 | 158 | func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat { 159 | return 8 160 | } 161 | } 162 | -------------------------------------------------------------------------------- /Example/SwipeableTableViewCell/TableViewModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Kamil Powałowski on 13.07.2018. 3 | // Copyright © 2018 10Clouds. 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | 23 | import Foundation 24 | 25 | struct CellViewModel { 26 | let imageName: String 27 | let name: String 28 | let title: String 29 | let fragment: String 30 | } 31 | 32 | final class TableViewModel { 33 | 34 | func moveToEndCell(at index: Int) { 35 | let lastIndex = cells.count - 1 36 | cells.swapAt(index, lastIndex) 37 | } 38 | 39 | var cells = [ 40 | CellViewModel( 41 | imageName: "avatar1", 42 | name: "Lucille Guerrero", 43 | title: "\u{2022} Work", 44 | fragment: "Creating remarkable poster prints through…" 45 | ), 46 | CellViewModel( 47 | imageName: "avatar2", 48 | name: "Amy James", 49 | title: "\u{2022} Work", 50 | fragment: "Creating remarkable poster prints through…" 51 | ), 52 | CellViewModel( 53 | imageName: "avatar2", 54 | name: "Johanna Morrison", 55 | title: "\u{2022} Work", 56 | fragment: "Creating remarkable poster prints through…" 57 | ), 58 | CellViewModel( 59 | imageName: "avatar3", 60 | name: "Virgie Ballard", 61 | title: "\u{2022} Work", 62 | fragment: "Creating remarkable poster prints through…" 63 | ), 64 | CellViewModel( 65 | imageName: "avatar6", 66 | name: "Darrell Flores", 67 | title: "\u{2022} Work", 68 | fragment: "Creating remarkable poster prints through…" 69 | ) 70 | ] 71 | } 72 | -------------------------------------------------------------------------------- /Example/Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Example/Tests/Tests.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | import SwipeableTableViewCell 3 | 4 | class Tests: XCTestCase { 5 | 6 | override func setUp() { 7 | super.setUp() 8 | // Put setup code here. This method is called before the invocation of each test method in the class. 9 | } 10 | 11 | override func tearDown() { 12 | // Put teardown code here. This method is called after the invocation of each test method in the class. 13 | super.tearDown() 14 | } 15 | 16 | func testExample() { 17 | // This is an example of a functional test case. 18 | XCTAssert(true, "Pass") 19 | } 20 | 21 | func testPerformanceExample() { 22 | // This is an example of a performance test case. 23 | self.measure() { 24 | // Put the code you want to measure the time of here. 25 | } 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2018 Hubert Kuczynski 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # SwipeableTableViewCell 2 | 3 | [![Version](https://img.shields.io/cocoapods/v/SwipeableTableViewCell.svg?style=flat)](https://cocoapods.org/pods/SwipeableTableViewCell) 4 | [![License](https://img.shields.io/cocoapods/l/SwipeableTableViewCell.svg?style=flat)](https://cocoapods.org/pods/SwipeableTableViewCell) 5 | [![Platform](https://img.shields.io/cocoapods/p/SwipeableTableViewCell.svg?style=flat)](https://cocoapods.org/pods/SwipeableTableViewCell) 6 | 7 | ## Example 8 | 9 | To run the example project, clone the repo, and run `pod install` from the Example directory first. 10 | 11 | ## Requirements 12 | - iOS 10 13 | - Swift 4.1 14 | 15 | ## Installation 16 | 17 | SwipeableTableViewCell is available through [CocoaPods](https://cocoapods.org). To install 18 | it, simply add the following line to your Podfile: 19 | 20 | ```ruby 21 | pod 'SwipeableTableViewCell' 22 | ``` 23 | 24 | ## Usage 25 | To use it, simply subclass the `SwipeableTableViewCell`. 26 | 27 | ## Authors 28 | 29 | Kamil Powałowski, kamil.powalowski@10clouds.com 30 | Hubert Kuczyński, hubert.kuczynski@10clouds.com 31 | 32 | ## License 33 | 34 | SwipeableTableViewCell is available under the MIT license. See the LICENSE file for more info. 35 | -------------------------------------------------------------------------------- /SwipeableTableViewCell.podspec: -------------------------------------------------------------------------------- 1 | # 2 | # Be sure to run `pod lib lint SwipeableTableViewCell.podspec' to ensure this is a 3 | # valid spec before submitting. 4 | # 5 | # Any lines starting with a # are optional, but their use is encouraged 6 | # To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html 7 | # 8 | 9 | Pod::Spec.new do |s| 10 | s.name = 'SwipeableTableViewCell' 11 | s.version = '0.2.1' 12 | s.summary = 'Swipable subclass of UITableViewCell' 13 | 14 | s.description = <<-DESC 15 | A subclass of UITableViewCell which adds an ability to swipe left the content of the cell. 16 | DESC 17 | 18 | s.homepage = 'https://github.com/10clouds/SwipeableTableViewCell-ios' 19 | s.license = { :type => 'MIT', :file => 'LICENSE' } 20 | s.author = { 'Hubert Kuczynski' => 'hubert.kuczynski@10clouds.com' } 21 | s.source = { :git => 'https://github.com/10clouds/SwipeableTableViewCell-ios.git', :tag => s.version.to_s } 22 | s.ios.deployment_target = '10.3' 23 | s.swift_version = '4.0' 24 | 25 | s.source_files = 'SwipeableTableViewCell/Classes/**/*' 26 | end 27 | -------------------------------------------------------------------------------- /SwipeableTableViewCell/Classes/StretchyCircleButton.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Hubert Kuczyński on 04/12/2018. 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | // THE SOFTWARE. 21 | 22 | import UIKit 23 | 24 | final class StretchyCircleButton: UIButton { 25 | 26 | public override class var layerClass: AnyClass { 27 | return StretchyCircleLayer.self 28 | } 29 | 30 | // MARK: - Public properties 31 | 32 | public override var backgroundColor: UIColor? { 33 | get { 34 | if let cgColor = stretchyCircleLayer.fillColor { 35 | return UIColor(cgColor: cgColor) 36 | } 37 | return nil 38 | } 39 | set { 40 | stretchyCircleLayer.fillColor = newValue?.cgColor 41 | } 42 | } 43 | 44 | override var isHighlighted: Bool { 45 | willSet { 46 | guard isHighlighted != newValue else { return } 47 | UIView.animate( 48 | withDuration: 0.25, 49 | delay: 0, 50 | options: .curveEaseInOut, 51 | animations: { 52 | self.backgroundColor = self.backgroundColor?.withAlphaComponent(newValue ? 0.6 : 1) 53 | self.transform = newValue ? CGAffineTransform(scaleX: 1.12, y: 1.12) : .identity 54 | } 55 | ) 56 | } 57 | } 58 | 59 | // MARK: - Private properties 60 | 61 | private var stretchyCircleLayer: StretchyCircleLayer { 62 | return layer as! StretchyCircleLayer 63 | } 64 | 65 | private var scaleAnimator: UIViewPropertyAnimator? 66 | 67 | // MARK: - Initializers 68 | 69 | override init(frame: CGRect) { 70 | super.init(frame: frame) 71 | clipsToBounds = false 72 | stretchyCircleLayer.masksToBounds = false 73 | } 74 | 75 | required init?(coder aDecoder: NSCoder) { 76 | super.init(coder: aDecoder) 77 | clipsToBounds = false 78 | stretchyCircleLayer.masksToBounds = false 79 | } 80 | 81 | // MARK: - Public methods 82 | 83 | func stretch(by offset: CGFloat) { 84 | stretchyCircleLayer.updatePath(withOffset: offset) 85 | } 86 | 87 | func addScaleAnimation() { 88 | guard scaleAnimator == nil else { return } 89 | let duration: TimeInterval = 0.3 90 | scaleAnimator = UIViewPropertyAnimator( 91 | duration: duration, 92 | dampingRatio: 0.1, 93 | animations: { 94 | self.animateScale(duration: duration) { [weak self] _ in 95 | self?.scaleAnimator = nil 96 | } 97 | } 98 | ) 99 | scaleAnimator?.startAnimation() 100 | } 101 | 102 | // MARK: - Private methods 103 | 104 | private func animateScale(duration: TimeInterval, completion: @escaping (Bool) -> Void) { 105 | UIView.animateKeyframes( 106 | withDuration: duration, 107 | delay: 0, 108 | options: [], 109 | animations: { 110 | UIView.addKeyframe( 111 | withRelativeStartTime: 0, relativeDuration: 0.5, animations: { 112 | let scale: CGFloat = 1.2 113 | self.transform = CGAffineTransform(scaleX: scale, y: scale) 114 | }) 115 | UIView.addKeyframe( 116 | withRelativeStartTime: 0.5, relativeDuration: 1, animations: { 117 | self.transform = CGAffineTransform.identity 118 | }) 119 | }, 120 | completion: completion 121 | ) 122 | } 123 | } 124 | -------------------------------------------------------------------------------- /SwipeableTableViewCell/Classes/StretchyCircleLayer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // StretchyCircleLayer.swift 3 | // FluidTabBarController 4 | // 5 | // Created by Hubert Kuczyński on 12/07/2018. 6 | // Copyright © 2018 10Clouds Sp. z o.o. 7 | // 8 | // Permission is hereby granted, free of charge, to any person obtaining a copy 9 | // of this software and associated documentation files (the "Software"), to deal 10 | // in the Software without restriction, including without limitation the rights 11 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | // copies of the Software, and to permit persons to whom the Software is 13 | // furnished to do so, subject to the following conditions: 14 | // 15 | // The above copyright notice and this permission notice shall be included in 16 | // all copies or substantial portions of the Software. 17 | // 18 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 24 | // THE SOFTWARE. 25 | // 26 | 27 | import UIKit 28 | 29 | final class StretchyCircleLayer: CAShapeLayer { 30 | 31 | // MARK: Public properties 32 | 33 | override var frame: CGRect { 34 | didSet { 35 | path = UIBezierPath(roundedRect: bounds, cornerRadius: radius).cgPath 36 | } 37 | } 38 | 39 | // MARK: Private properties 40 | 41 | private var radius: CGFloat { 42 | return bounds.size.height / 2.0 43 | } 44 | 45 | private var yOffsetMax: CGFloat { 46 | return bounds.size.height * 1.5 47 | } 48 | 49 | private let yOffset: CGFloat = 30.0 50 | 51 | private let timingFunctions: [CAMediaTimingFunction] = [ 52 | TimingFunctions.values[0], 53 | TimingFunctions.values[2], 54 | TimingFunctions.values[1], 55 | TimingFunctions.values[1], 56 | TimingFunctions.values[1] 57 | ] 58 | 59 | // MARK: Public functions 60 | 61 | func updatePath(withOffset offset: CGFloat) { 62 | let pullDownCenter = CGPoint(x: bounds.size.height / 2.0, y: bounds.size.height / 2.0) 63 | let circlePath = stretchyCirclePathWithCenter(center: pullDownCenter, radius: radius, yOffset: min(offset, yOffsetMax)) 64 | path = circlePath.cgPath 65 | masksToBounds = false 66 | } 67 | 68 | // MARK: Private functions 69 | 70 | private func stretchyCirclePathWithCenter(center: CGPoint, radius: CGFloat, yOffset: CGFloat = 0.0) -> UIBezierPath { 71 | guard yOffset != 0 else { 72 | return UIBezierPath(arcCenter: center, radius: radius, startAngle: 0, endAngle: 2.0 * CGFloat.pi, clockwise: true) 73 | } 74 | 75 | let radius = radius * (yOffsetMax - yOffset / 3) / yOffsetMax 76 | let lowerRadius = radius * (1 - yOffset / yOffsetMax) 77 | let yOffsetTop = yOffset / 4 78 | let yOffsetBottom = yOffset / 2.5 79 | let path = UIBezierPath(arcCenter: center, radius: radius, startAngle: 3 * CGFloat.pi / 2, endAngle: 0, clockwise: true) 80 | 81 | path.addArc( 82 | withCenter: center, 83 | radius: radius, 84 | startAngle: 0, 85 | endAngle: CGFloat.pi / 2, 86 | clockwise: true 87 | ) 88 | 89 | path.addCurve( 90 | to: CGPoint( 91 | x: center.x - yOffset, 92 | y: center.y + lowerRadius 93 | ), 94 | controlPoint1: CGPoint( 95 | x: center.x - yOffsetTop, 96 | y: center.y + radius 97 | ), 98 | controlPoint2: CGPoint( 99 | x: center.x - yOffset + yOffsetBottom, 100 | y: center.y + lowerRadius 101 | ) 102 | ) 103 | 104 | path.addArc( 105 | withCenter: CGPoint( 106 | x: center.x - yOffset, 107 | y: center.y 108 | ), 109 | radius: lowerRadius, 110 | startAngle: CGFloat.pi / 2, 111 | endAngle: 3 * CGFloat.pi / 2, 112 | clockwise: true 113 | ) 114 | 115 | path.addCurve( 116 | to: CGPoint( 117 | x: center.x, 118 | y: center.y - radius 119 | ), 120 | controlPoint1: CGPoint( 121 | x: center.x - yOffset + yOffsetBottom, 122 | y: center.y - lowerRadius 123 | ), 124 | controlPoint2: CGPoint( 125 | x: center.x - yOffsetTop , 126 | y: center.y - radius 127 | ) 128 | ) 129 | 130 | return path 131 | } 132 | } 133 | -------------------------------------------------------------------------------- /SwipeableTableViewCell/Classes/StretchyView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Hubert Kuczyński on 04/12/2018. 3 | // Copyright (c) 2018 10Clouds. 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | 23 | import UIKit 24 | 25 | public class StretchyView: UIView { 26 | 27 | // MARK: - Public properties 28 | 29 | public var maxOffset: CGFloat = 40 30 | 31 | public override var backgroundColor: UIColor? { 32 | get { 33 | if let cgColor = shapeLayer.fillColor { 34 | return UIColor(cgColor: cgColor) 35 | } 36 | return nil 37 | } 38 | set { 39 | shapeLayer.fillColor = newValue?.cgColor 40 | } 41 | } 42 | 43 | // MARK: - Private properties 44 | 45 | private let shapeLayer = CAShapeLayer() 46 | private var currentOffset: CGFloat = 0 47 | 48 | // MARK: - Initializers 49 | 50 | override init(frame: CGRect) { 51 | super.init(frame: frame) 52 | layer.addSublayer(shapeLayer) 53 | } 54 | 55 | required init?(coder aDecoder: NSCoder) { 56 | super.init(coder: aDecoder) 57 | layer.addSublayer(shapeLayer) 58 | } 59 | 60 | // MARK: - Public methods 61 | 62 | func move(by offset: CGFloat) { 63 | currentOffset = offset 64 | updateShape(withMovementOffset: currentOffset) 65 | } 66 | 67 | public override func layoutSubviews() { 68 | super.layoutSubviews() 69 | shapeLayer.frame = bounds 70 | updateShape(withMovementOffset: currentOffset) 71 | } 72 | 73 | // MARK: - Private methods 74 | 75 | private func calculateControlPointOffset(for offset: CGFloat, maxValue: CGFloat) -> CGFloat { 76 | return max(0, -4 / 3 * (maxValue / maxOffset / maxOffset) * offset * offset + 4 / 3 * (maxValue / maxOffset) * offset) 77 | } 78 | 79 | private func calculateHeightControlPointOffset(for x: CGFloat) -> CGFloat { 80 | return bounds.height / 2 - max(0, -0.03810 * x * x + 3.200 * x - 49.95) 81 | } 82 | 83 | private func calculateEasedOffset(for offset: CGFloat) -> CGFloat { 84 | let progress = min(1, max(0, offset / maxOffset)) 85 | let easedProgress = TimingFunctions.easeInEaseOut(progress) 86 | return easedProgress * maxOffset 87 | } 88 | 89 | private func updateShape(withMovementOffset offset: CGFloat) { 90 | let easedOffset = calculateEasedOffset(for: offset) 91 | let boundsOffset = calculateControlPointOffset(for: easedOffset, maxValue: 50) 92 | let heightOffset = calculateHeightControlPointOffset(for: easedOffset) 93 | let controlPointHeightOffset: CGFloat = max( 94 | bounds.height / 2, 95 | bounds.height / 2 - calculateControlPointOffset(for: easedOffset, maxValue: bounds.height / 2) + 3 96 | ) 97 | let widthOutsideOffset = calculateControlPointOffset(for: easedOffset, maxValue: 400) 98 | let widthInsideOffset: CGFloat = calculateControlPointOffset(for: easedOffset, maxValue: 100) 99 | 100 | let path = CGMutablePath() 101 | 102 | path.move(to: .zero) 103 | path.addLine(to: CGPoint(x: bounds.maxX - widthOutsideOffset - boundsOffset, y: bounds.minY)) 104 | path.addCurve( 105 | to: CGPoint(x: bounds.maxX - boundsOffset, y: bounds.minY + heightOffset), 106 | control1: CGPoint(x: bounds.maxX - boundsOffset, y: bounds.minY), 107 | control2: CGPoint(x: bounds.maxX - boundsOffset - widthInsideOffset, y: bounds.minY + controlPointHeightOffset) 108 | ) 109 | path.addLine(to: CGPoint(x: bounds.maxX - boundsOffset, y: bounds.maxY - heightOffset)) 110 | 111 | path.addCurve( 112 | to: CGPoint(x: bounds.maxX - widthOutsideOffset - boundsOffset, y: bounds.maxY), 113 | control1: CGPoint(x: bounds.maxX - widthInsideOffset - boundsOffset, y: bounds.maxY - controlPointHeightOffset), 114 | control2: CGPoint(x: bounds.maxX - boundsOffset, y: bounds.maxY) 115 | ) 116 | path.addLine(to: CGPoint(x: bounds.minX, y: bounds.maxY)) 117 | path.addLine(to: .zero) 118 | 119 | shapeLayer.path = path 120 | } 121 | } 122 | -------------------------------------------------------------------------------- /SwipeableTableViewCell/Classes/SwipeableTableViewCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Kamil Powałowski on 16.07.2018. 3 | // Copyright (c) 2018 10Clouds. 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | 23 | import UIKit 24 | 25 | open class SwipeableTableViewCell: UITableViewCell { 26 | 27 | private struct Constants { 28 | static let buttonDimension: CGFloat = 62 29 | static let primaryButtonTrailingOffset: CGFloat = 16 30 | static let contentOffsetMovementDivider: CGFloat = 2 31 | static var maxOffset: CGFloat { 32 | return (2 * Constants.primaryButtonTrailingOffset + Constants.buttonDimension) 33 | } 34 | static var disconnectPoint: CGFloat { 35 | return Constants.buttonDimension + Constants.primaryButtonTrailingOffset 36 | } 37 | } 38 | 39 | private enum SlideDestination { 40 | case begin, end 41 | } 42 | 43 | // MARK: - Public Properties 44 | 45 | open var horizontalMargin: CGFloat = 16 { 46 | didSet { 47 | updateMargins() 48 | } 49 | } 50 | 51 | public lazy var scrollViewContentView: StretchyView = { 52 | let view = StretchyView() 53 | view.translatesAutoresizingMaskIntoConstraints = false 54 | view.maxOffset = Constants.maxOffset 55 | return view 56 | }() 57 | 58 | public var buttonBackgroundColor: UIColor! { 59 | get { return buttonActiveBackgroundColor } 60 | set { buttonActiveBackgroundColor = newValue } 61 | } 62 | 63 | public var buttonTintColor: UIColor? { 64 | get { return button.tintColor } 65 | set { button.tintColor = newValue } 66 | } 67 | 68 | public var buttonTitle: String? { 69 | get { return button.title(for: .normal) } 70 | set { button.setTitle(newValue, for: .normal) } 71 | } 72 | 73 | public var buttonImage: UIImage? { 74 | get { return button.image(for: .normal) } 75 | set { button.setImage(newValue, for: .normal) } 76 | } 77 | 78 | /// An action performed on primary button tap 79 | public var onPrimaryButtonTap: (() -> Void)? 80 | 81 | // MARK: - Private Properties 82 | 83 | private lazy var scrollView: UIScrollView = { 84 | let view = UIScrollView(frame: .zero) 85 | view.translatesAutoresizingMaskIntoConstraints = false 86 | view.scrollsToTop = false 87 | view.showsHorizontalScrollIndicator = false 88 | view.showsVerticalScrollIndicator = false 89 | view.contentInset.right = Constants.maxOffset * Constants.contentOffsetMovementDivider 90 | view.delegate = self 91 | view.isUserInteractionEnabled = false 92 | return view 93 | }() 94 | 95 | private lazy var button: StretchyCircleButton = { 96 | let view = StretchyCircleButton() 97 | view.translatesAutoresizingMaskIntoConstraints = false 98 | view.layer.cornerRadius = Constants.buttonDimension / 2 99 | view.clipsToBounds = true 100 | view.addTarget(self, action: #selector(handlePrimaryButtonTap), for: .touchUpInside) 101 | return view 102 | }() 103 | 104 | private var contentOffset: CGPoint { 105 | let offset = scrollView.layer.presentation()?.bounds.origin ?? scrollView.contentOffset 106 | let multiplier = 1.0 - 1.0 / Constants.contentOffsetMovementDivider 107 | return CGPoint(x: offset.x * multiplier, y: offset.y * multiplier) 108 | } 109 | 110 | private var buttonActiveBackgroundColor: UIColor! 111 | 112 | private var scrollViewContentViewLeadingConstraint: NSLayoutConstraint! 113 | private var scrollViewContentViewTrailingConstraint: NSLayoutConstraint! 114 | private var scrollViewContentViewWidthConstraint: NSLayoutConstraint! 115 | private var primaryButtonTrailingConstraint: NSLayoutConstraint! 116 | 117 | private var slideDestination: SlideDestination = .begin 118 | private var buttonScaleAnimationIsRunning = false 119 | 120 | private var slideTargetPoint: CGPoint { 121 | let velocity = scrollView.panGestureRecognizer.velocity(in: self) 122 | let max = CGPoint(x: Constants.maxOffset * Constants.contentOffsetMovementDivider, y: 0) 123 | if velocity.x > 0 { 124 | return .zero 125 | } else if velocity.x < 0 { 126 | return max 127 | } else { 128 | return contentOffset.x > Constants.maxOffset / 2 ? max : .zero 129 | } 130 | } 131 | 132 | // MARK: - Initialization 133 | 134 | public override init(style: UITableViewCellStyle, reuseIdentifier: String?) { 135 | super.init(style: style, reuseIdentifier: reuseIdentifier) 136 | setup() 137 | } 138 | 139 | public required init?(coder aDecoder: NSCoder) { 140 | super.init(coder: aDecoder) 141 | setup() 142 | } 143 | 144 | // MARK: Public functions 145 | 146 | open override func prepareForReuse() { 147 | super.prepareForReuse() 148 | scrollView.contentOffset = .zero 149 | slideDestination = .begin 150 | buttonScaleAnimationIsRunning = false 151 | } 152 | 153 | // MARK: Private functions 154 | 155 | private func setup() { 156 | addViews() 157 | layoutViews() 158 | backgroundColor = .clear 159 | 160 | contentView.addGestureRecognizer(scrollView.panGestureRecognizer) 161 | scrollView.panGestureRecognizer.addTarget(self, action: #selector(handlePan(_:))) 162 | } 163 | 164 | @objc private func handlePan(_ recognizer: UIPanGestureRecognizer) { 165 | switch recognizer.state { 166 | case .ended, .cancelled: 167 | startSlideAnimation(recognizer) 168 | default: 169 | break 170 | } 171 | } 172 | 173 | @objc private func handlePrimaryButtonTap() { 174 | guard contentOffset.x >= Constants.disconnectPoint else { return } 175 | onPrimaryButtonTap?() 176 | } 177 | 178 | private func startSlideAnimation(_ recognizer: UIPanGestureRecognizer) { 179 | let shouldStretch = slideDestination == .end 180 | let displayLink: CADisplayLink? = shouldStretch ? startDisplayLink() : nil 181 | 182 | let originalDuration: CGFloat = shouldStretch ? 1.5 : 0.8 183 | let duration = TimeInterval( 184 | abs(contentOffset.x - slideTargetPoint.x) / Constants.maxOffset * originalDuration / Constants.contentOffsetMovementDivider 185 | ) 186 | 187 | let springDamping: CGFloat = shouldStretch ? 0.8 : 0.5 188 | let initialSpringVelocity: CGFloat = shouldStretch ? 0 : 1 189 | 190 | UIView.animate( 191 | withDuration: duration, 192 | delay: 0, 193 | usingSpringWithDamping: springDamping, 194 | initialSpringVelocity: initialSpringVelocity, 195 | options: .curveEaseIn, 196 | animations: { 197 | self.scrollView.setContentOffset(self.slideTargetPoint, animated: false) 198 | }, completion: { _ in 199 | self.buttonScaleAnimationIsRunning = false 200 | self.updateSlideDestination() 201 | displayLink?.invalidate() 202 | } 203 | ) 204 | } 205 | 206 | private func startDisplayLink() -> CADisplayLink { 207 | let displayLink = CADisplayLink(target: self, selector: #selector(handleDisplayLink(_:))) 208 | displayLink.add(to: RunLoop.main, forMode: .defaultRunLoopMode) 209 | return displayLink 210 | } 211 | 212 | @objc private func handleDisplayLink(_ displayLink: CADisplayLink) { 213 | updateShape() 214 | 215 | if contentOffset.x >= Constants.disconnectPoint && !buttonScaleAnimationIsRunning { 216 | buttonScaleAnimationIsRunning = true 217 | button.addScaleAnimation() 218 | } 219 | } 220 | 221 | private func updateShape() { 222 | guard slideDestination == .end else { return } 223 | scrollViewContentView.move(by: contentOffset.x) 224 | button.stretch(by: calulateCircleOffset(for: contentOffset.x)) 225 | button.imageView?.alpha = contentOffset.x > Constants.buttonDimension / 2 + Constants.primaryButtonTrailingOffset ? 1 : 0 226 | if !button.isHighlighted { 227 | button.backgroundColor = contentOffset.x > Constants.disconnectPoint ? buttonActiveBackgroundColor : scrollViewContentView.backgroundColor 228 | } 229 | } 230 | 231 | private func calulateCircleOffset(for x: CGFloat) -> CGFloat { 232 | return max(0, -0.05263 * x * x + 5.211 * x - 97.37) 233 | } 234 | 235 | private func updateSlideDestination() { 236 | if contentOffset.x <= 5 { 237 | slideDestination = .end 238 | } else if contentOffset.x >= Constants.maxOffset { 239 | slideDestination = .begin 240 | } 241 | } 242 | } 243 | 244 | extension SwipeableTableViewCell: UIScrollViewDelegate { 245 | public func scrollViewDidScroll(_ scrollView: UIScrollView) { 246 | scrollViewContentView.transform = CGAffineTransform( 247 | translationX: scrollView.contentOffset.x / Constants.contentOffsetMovementDivider, 248 | y: scrollView.contentOffset.y / Constants.contentOffsetMovementDivider 249 | ) 250 | 251 | updateShape() 252 | updateSlideDestination() 253 | } 254 | } 255 | 256 | extension SwipeableTableViewCell { 257 | private func addViews() { 258 | contentView.addSubview(button) 259 | contentView.addSubview(scrollView) 260 | scrollView.addSubview(scrollViewContentView) 261 | } 262 | 263 | private func layoutViews() { 264 | layoutScrollView() 265 | layoutButton() 266 | updateMargins() 267 | } 268 | 269 | private func updateMargins() { 270 | scrollViewContentViewLeadingConstraint.constant = horizontalMargin 271 | scrollViewContentViewTrailingConstraint.constant = -horizontalMargin 272 | scrollViewContentViewWidthConstraint.constant = -2 * horizontalMargin 273 | primaryButtonTrailingConstraint.constant = -Constants.primaryButtonTrailingOffset - horizontalMargin 274 | } 275 | 276 | private func layoutScrollView() { 277 | let scrollViewContentViewHeightConstraint = scrollViewContentView.widthAnchor 278 | .constraint(equalTo: scrollView.widthAnchor, multiplier: 1) 279 | scrollViewContentViewHeightConstraint.priority = .defaultLow 280 | 281 | scrollViewContentViewLeadingConstraint = scrollViewContentView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor) 282 | scrollViewContentViewTrailingConstraint = scrollViewContentView.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor) 283 | scrollViewContentViewWidthConstraint = scrollViewContentView.widthAnchor.constraint(equalTo: scrollView.widthAnchor) 284 | 285 | let constraints: [NSLayoutConstraint] = [ 286 | scrollView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor), 287 | scrollView.topAnchor.constraint(equalTo: contentView.topAnchor), 288 | scrollView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor), 289 | scrollView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor), 290 | scrollViewContentView.topAnchor.constraint(equalTo: scrollView.topAnchor), 291 | scrollViewContentView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor), 292 | scrollViewContentView.heightAnchor.constraint(equalTo: scrollView.heightAnchor, multiplier: 1), 293 | scrollViewContentViewLeadingConstraint, 294 | scrollViewContentViewTrailingConstraint, 295 | scrollViewContentViewWidthConstraint, 296 | scrollViewContentViewHeightConstraint 297 | ] 298 | NSLayoutConstraint.activate(constraints) 299 | } 300 | 301 | private func layoutButton() { 302 | primaryButtonTrailingConstraint = button.trailingAnchor.constraint(equalTo: contentView.trailingAnchor) 303 | 304 | let constraints: [NSLayoutConstraint] = [ 305 | primaryButtonTrailingConstraint, 306 | button.heightAnchor.constraint(equalToConstant: Constants.buttonDimension), 307 | button.widthAnchor.constraint(equalTo: button.heightAnchor, multiplier: 1), 308 | button.centerYAnchor.constraint(equalTo: contentView.centerYAnchor) 309 | ] 310 | NSLayoutConstraint.activate(constraints) 311 | } 312 | } 313 | -------------------------------------------------------------------------------- /SwipeableTableViewCell/Classes/TimingFunctions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TimingFunctions.swift 3 | // FluidTabBarController 4 | // 5 | // Created by Hubert Kuczyński on 17/07/2018. 6 | // Copyright © 2018 10Clouds Sp. z o.o. 7 | // 8 | // Permission is hereby granted, free of charge, to any person obtaining a copy 9 | // of this software and associated documentation files (the "Software"), to deal 10 | // in the Software without restriction, including without limitation the rights 11 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | // copies of the Software, and to permit persons to whom the Software is 13 | // furnished to do so, subject to the following conditions: 14 | // 15 | // The above copyright notice and this permission notice shall be included in 16 | // all copies or substantial portions of the Software. 17 | // 18 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 24 | // THE SOFTWARE. 25 | // 26 | 27 | import QuartzCore 28 | 29 | internal struct TimingFunctions { 30 | static let values: [CAMediaTimingFunction] = [ 31 | CAMediaTimingFunction(controlPoints: 0.25, 0, 0.00, 1), 32 | CAMediaTimingFunction(controlPoints: 0.20, 0, 0.80, 1), 33 | CAMediaTimingFunction(controlPoints: 0.42, 0, 0.58, 1), 34 | CAMediaTimingFunction(controlPoints: 0.27, 0, 0.00, 1), 35 | CAMediaTimingFunction(controlPoints: 0.50, 0, 0.50, 1), 36 | ] 37 | 38 | static func easeInEaseOut(_ value: CGFloat) -> CGFloat { 39 | return value < 0.5 ? 2 * value * value : -1 + (4 - 2 * value) * value 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /_Pods.xcodeproj: -------------------------------------------------------------------------------- 1 | Example/Pods/Pods.xcodeproj --------------------------------------------------------------------------------