├── .gitignore ├── .travis.yml ├── Example ├── Podfile ├── Podfile.lock ├── Pods │ ├── Headers │ │ ├── Private │ │ │ └── TTGDeallocTaskHelper │ │ │ │ └── NSObject+TTGDeallocTaskHelper.h │ │ └── Public │ │ │ └── TTGDeallocTaskHelper │ │ │ └── NSObject+TTGDeallocTaskHelper.h │ ├── Local Podspecs │ │ └── TTGDeallocTaskHelper.podspec.json │ ├── Manifest.lock │ ├── Pods.xcodeproj │ │ ├── project.pbxproj │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── TTGDeallocTaskHelper.xcscheme │ └── Target Support Files │ │ ├── Pods-TTGDeallocTaskHelper_Example │ │ ├── Pods-TTGDeallocTaskHelper_Example-acknowledgements.markdown │ │ ├── Pods-TTGDeallocTaskHelper_Example-acknowledgements.plist │ │ ├── Pods-TTGDeallocTaskHelper_Example-dummy.m │ │ ├── Pods-TTGDeallocTaskHelper_Example-frameworks.sh │ │ ├── Pods-TTGDeallocTaskHelper_Example-resources.sh │ │ ├── Pods-TTGDeallocTaskHelper_Example.debug.xcconfig │ │ └── Pods-TTGDeallocTaskHelper_Example.release.xcconfig │ │ ├── Pods-TTGDeallocTaskHelper_Tests │ │ ├── Pods-TTGDeallocTaskHelper_Tests-acknowledgements.markdown │ │ ├── Pods-TTGDeallocTaskHelper_Tests-acknowledgements.plist │ │ ├── Pods-TTGDeallocTaskHelper_Tests-dummy.m │ │ ├── Pods-TTGDeallocTaskHelper_Tests-frameworks.sh │ │ ├── Pods-TTGDeallocTaskHelper_Tests-resources.sh │ │ ├── Pods-TTGDeallocTaskHelper_Tests.debug.xcconfig │ │ └── Pods-TTGDeallocTaskHelper_Tests.release.xcconfig │ │ └── TTGDeallocTaskHelper │ │ ├── TTGDeallocTaskHelper-dummy.m │ │ ├── TTGDeallocTaskHelper-prefix.pch │ │ └── TTGDeallocTaskHelper.xcconfig ├── TTGDeallocTaskHelper.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── xcshareddata │ │ └── xcschemes │ │ └── TTGDeallocTaskHelper-Example.xcscheme ├── TTGDeallocTaskHelper.xcworkspace │ └── contents.xcworkspacedata ├── TTGDeallocTaskHelper │ ├── Images.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── LaunchImage.launchimage │ │ │ └── Contents.json │ ├── Launch Screen.storyboard │ ├── Main.storyboard │ ├── TTGAppDelegate.h │ ├── TTGAppDelegate.m │ ├── TTGDeallocTaskHelper-Info.plist │ ├── TTGDeallocTaskHelper-Prefix.pch │ ├── TTGViewController.h │ ├── TTGViewController.m │ ├── en.lproj │ │ └── InfoPlist.strings │ └── main.m └── Tests │ ├── Tests-Info.plist │ ├── Tests-Prefix.pch │ ├── Tests.m │ └── en.lproj │ └── InfoPlist.strings ├── LICENSE ├── README.md ├── TTGDeallocTaskHelper.podspec ├── TTGDeallocTaskHelper ├── Assets │ └── .gitkeep └── Classes │ ├── .gitkeep │ ├── NSObject+TTGDeallocTaskHelper.h │ └── NSObject+TTGDeallocTaskHelper.m └── _Pods.xcodeproj /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by https://www.gitignore.io/api/objective-c,xcode,appcode 2 | 3 | ### Objective-C ### 4 | # Xcode 5 | # 6 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 7 | 8 | ## Build generated 9 | build/ 10 | DerivedData 11 | 12 | ## Various settings 13 | *.pbxuser 14 | !default.pbxuser 15 | *.mode1v3 16 | !default.mode1v3 17 | *.mode2v3 18 | !default.mode2v3 19 | *.perspectivev3 20 | !default.perspectivev3 21 | xcuserdata 22 | 23 | ## Other 24 | *.xccheckout 25 | *.moved-aside 26 | *.xcuserstate 27 | *.xcscmblueprint 28 | 29 | ## Obj-C/Swift specific 30 | *.hmap 31 | *.ipa 32 | 33 | # CocoaPods 34 | # 35 | # We recommend against adding the Pods directory to your .gitignore. However 36 | # you should judge for yourself, the pros and cons are mentioned at: 37 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 38 | # 39 | # Pods/ 40 | 41 | # Carthage 42 | # 43 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 44 | # Carthage/Checkouts 45 | 46 | Carthage/Build 47 | 48 | # fastlane 49 | # 50 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 51 | # screenshots whenever they are needed. 52 | # For more information about the recommended setup visit: 53 | # https://github.com/fastlane/fastlane/blob/master/docs/Gitignore.md 54 | 55 | fastlane/report.xml 56 | fastlane/screenshots 57 | 58 | ### Objective-C Patch ### 59 | *.xcscmblueprint 60 | 61 | 62 | ### Xcode ### 63 | # Xcode 64 | # 65 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 66 | 67 | ## Build generated 68 | build/ 69 | DerivedData 70 | 71 | ## Various settings 72 | *.pbxuser 73 | !default.pbxuser 74 | *.mode1v3 75 | !default.mode1v3 76 | *.mode2v3 77 | !default.mode2v3 78 | *.perspectivev3 79 | !default.perspectivev3 80 | xcuserdata 81 | 82 | ## Other 83 | *.xccheckout 84 | *.moved-aside 85 | *.xcuserstate 86 | 87 | 88 | ### AppCode ### 89 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm 90 | 91 | *.iml 92 | 93 | ## Directory-based project format: 94 | .idea/ 95 | # if you remove the above rule, at least ignore the following: 96 | 97 | # User-specific stuff: 98 | # .idea/workspace.xml 99 | # .idea/tasks.xml 100 | # .idea/dictionaries 101 | # .idea/shelf 102 | 103 | # Sensitive or high-churn files: 104 | # .idea/dataSources.ids 105 | # .idea/dataSources.xml 106 | # .idea/sqlDataSources.xml 107 | # .idea/dynamic.xml 108 | # .idea/uiDesigner.xml 109 | 110 | # Gradle: 111 | # .idea/gradle.xml 112 | # .idea/libraries 113 | 114 | # Mongo Explorer plugin: 115 | # .idea/mongoSettings.xml 116 | 117 | ## File-based project format: 118 | *.ipr 119 | *.iws 120 | 121 | ## Plugin-specific files: 122 | 123 | # IntelliJ 124 | /out/ 125 | 126 | # mpeltonen/sbt-idea plugin 127 | .idea_modules/ 128 | 129 | # JIRA plugin 130 | atlassian-ide-plugin.xml 131 | 132 | # Crashlytics plugin (for Android Studio and IntelliJ) 133 | com_crashlytics_export_strings.xml 134 | crashlytics.properties 135 | crashlytics-build.properties 136 | fabric.properties -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | # references: 2 | # * http://www.objc.io/issue-6/travis-ci.html 3 | # * https://github.com/supermarin/xcpretty#usage 4 | 5 | osx_image: xcode8 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 | - pod lib lint --allow-warnings 14 | - set -o pipefail && xcodebuild clean build test -workspace Example/TTGDeallocTaskHelper.xcworkspace -scheme TTGDeallocTaskHelper-Example -sdk iphonesimulator10.0 -destination 'platform=iOS Simulator,name=iPhone 6,OS=10.0' ONLY_ACTIVE_ARCH=NO CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO | xcpretty 15 | -------------------------------------------------------------------------------- /Example/Podfile: -------------------------------------------------------------------------------- 1 | target 'TTGDeallocTaskHelper_Example' do 2 | pod 'TTGDeallocTaskHelper', :path => '../' 3 | 4 | target 'TTGDeallocTaskHelper_Tests' do 5 | inherit! :search_paths 6 | 7 | end 8 | end 9 | -------------------------------------------------------------------------------- /Example/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - TTGDeallocTaskHelper (0.1.0) 3 | 4 | DEPENDENCIES: 5 | - TTGDeallocTaskHelper (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | TTGDeallocTaskHelper: 9 | :path: "../" 10 | 11 | SPEC CHECKSUMS: 12 | TTGDeallocTaskHelper: d0428c9ddfb830d81fdb5d35e441c70318bb7bc5 13 | 14 | PODFILE CHECKSUM: 2857757c127e665d312ca78089ba45149c1b4073 15 | 16 | COCOAPODS: 1.0.1 17 | -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/TTGDeallocTaskHelper/NSObject+TTGDeallocTaskHelper.h: -------------------------------------------------------------------------------- 1 | ../../../../../TTGDeallocTaskHelper/Classes/NSObject+TTGDeallocTaskHelper.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/TTGDeallocTaskHelper/NSObject+TTGDeallocTaskHelper.h: -------------------------------------------------------------------------------- 1 | ../../../../../TTGDeallocTaskHelper/Classes/NSObject+TTGDeallocTaskHelper.h -------------------------------------------------------------------------------- /Example/Pods/Local Podspecs/TTGDeallocTaskHelper.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "TTGDeallocTaskHelper", 3 | "version": "0.1.0", 4 | "summary": "NSObject Category to perform callback tasks after object dealloc.", 5 | "description": "TTGDeallocTaskHelper is a NSObject Category to perform callback tasks after object dealloc.", 6 | "homepage": "https://github.com/zekunyan/TTGDeallocTaskHelper", 7 | "license": { 8 | "type": "MIT", 9 | "file": "LICENSE" 10 | }, 11 | "authors": { 12 | "zekunyan": "zekunyan@163.com" 13 | }, 14 | "source": { 15 | "git": "https://github.com/zekunyan/TTGDeallocTaskHelper.git", 16 | "tag": "0.1.0" 17 | }, 18 | "social_media_url": "http://tutuge.me", 19 | "platforms": { 20 | "ios": "6.0" 21 | }, 22 | "requires_arc": true, 23 | "source_files": "TTGDeallocTaskHelper/Classes/*", 24 | "public_header_files": "TTGDeallocTaskHelper/Classes/*.h", 25 | "frameworks": [ 26 | "UIKit", 27 | "CoreFoundation" 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /Example/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - TTGDeallocTaskHelper (0.1.0) 3 | 4 | DEPENDENCIES: 5 | - TTGDeallocTaskHelper (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | TTGDeallocTaskHelper: 9 | :path: "../" 10 | 11 | SPEC CHECKSUMS: 12 | TTGDeallocTaskHelper: d0428c9ddfb830d81fdb5d35e441c70318bb7bc5 13 | 14 | PODFILE CHECKSUM: 2857757c127e665d312ca78089ba45149c1b4073 15 | 16 | COCOAPODS: 1.0.1 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 | 192BD53CB29287BC2400C49FB7A0AA04 /* Pods-TTGDeallocTaskHelper_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BC142C7BB710ED8184F764CF367EAAE /* Pods-TTGDeallocTaskHelper_Tests-dummy.m */; }; 11 | 22DE51A04D31C3B1BF5DA909C6494BC1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EBCA801DED542D9C48BB9496E41CB2A7 /* Foundation.framework */; }; 12 | 45656F47BA036C1D99431B77BE3A5E17 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EBCA801DED542D9C48BB9496E41CB2A7 /* Foundation.framework */; }; 13 | 72B7F0EBCD3336F303C25F64307B42C1 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1ED1411C548899C28A948508769F77B7 /* UIKit.framework */; }; 14 | 809ED1937597B26B65A4606A959D7A48 /* NSObject+TTGDeallocTaskHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = D819A7E121981E12BEB832863B15BBA3 /* NSObject+TTGDeallocTaskHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; 15 | 92A5DEB0C79363E8A8676B64A896B16F /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 09380E532BB1971AAE638734E57574F9 /* CoreFoundation.framework */; }; 16 | 9470BA21C9BBA92F6A5ACB4CCBD3EB1F /* NSObject+TTGDeallocTaskHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 74FFEE5E12E73E3A201672DDBC09B410 /* NSObject+TTGDeallocTaskHelper.m */; }; 17 | B6E5AAE1BA7D4DE506D8242E8846EAD5 /* Pods-TTGDeallocTaskHelper_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 58A2E3273886EC8CEAACED032E0EA1A1 /* Pods-TTGDeallocTaskHelper_Example-dummy.m */; }; 18 | F333BF4D2737A564D26FA1984E09CF24 /* TTGDeallocTaskHelper-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = EF41DD27C24C6082A6F64354211C82FF /* TTGDeallocTaskHelper-dummy.m */; }; 19 | F93734DE73C6A0617FC031670A2453EA /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EBCA801DED542D9C48BB9496E41CB2A7 /* Foundation.framework */; }; 20 | /* End PBXBuildFile section */ 21 | 22 | /* Begin PBXContainerItemProxy section */ 23 | 369B5920AFA62F5E7F0147EE5B2CF294 /* PBXContainerItemProxy */ = { 24 | isa = PBXContainerItemProxy; 25 | containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 26 | proxyType = 1; 27 | remoteGlobalIDString = 2A9332C0549E2BDB2C0873496AD3D14D; 28 | remoteInfo = TTGDeallocTaskHelper; 29 | }; 30 | /* End PBXContainerItemProxy section */ 31 | 32 | /* Begin PBXFileReference section */ 33 | 08BF87DF2EB2B6B176EE03E4AA969E2F /* Pods-TTGDeallocTaskHelper_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-TTGDeallocTaskHelper_Example-frameworks.sh"; sourceTree = ""; }; 34 | 0919C3FBC86536081116E79B90E80A05 /* Pods-TTGDeallocTaskHelper_Tests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-TTGDeallocTaskHelper_Tests-resources.sh"; sourceTree = ""; }; 35 | 09380E532BB1971AAE638734E57574F9 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/CoreFoundation.framework; sourceTree = DEVELOPER_DIR; }; 36 | 1ED1411C548899C28A948508769F77B7 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; 37 | 245BAFBF5F6BD4E4E4C30B84CEBE9583 /* Pods-TTGDeallocTaskHelper_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-TTGDeallocTaskHelper_Tests-acknowledgements.plist"; sourceTree = ""; }; 38 | 27ECA4842E45932592043F26CBE3F740 /* libTTGDeallocTaskHelper.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libTTGDeallocTaskHelper.a; sourceTree = BUILT_PRODUCTS_DIR; }; 39 | 3BC142C7BB710ED8184F764CF367EAAE /* Pods-TTGDeallocTaskHelper_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-TTGDeallocTaskHelper_Tests-dummy.m"; sourceTree = ""; }; 40 | 425DB10573A4745402397AFAA06DEB72 /* Pods-TTGDeallocTaskHelper_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-TTGDeallocTaskHelper_Example-acknowledgements.plist"; sourceTree = ""; }; 41 | 44D3613ADCCA1638CC790494EAECCA4A /* Pods-TTGDeallocTaskHelper_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-TTGDeallocTaskHelper_Example.release.xcconfig"; sourceTree = ""; }; 42 | 55803EB38F4BD5B0B751BB0E7CA901B1 /* Pods-TTGDeallocTaskHelper_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-TTGDeallocTaskHelper_Example-acknowledgements.markdown"; sourceTree = ""; }; 43 | 58A2E3273886EC8CEAACED032E0EA1A1 /* Pods-TTGDeallocTaskHelper_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-TTGDeallocTaskHelper_Example-dummy.m"; sourceTree = ""; }; 44 | 6EE5E58303ECBE33509C65A7FE625A5F /* Pods-TTGDeallocTaskHelper_Example-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-TTGDeallocTaskHelper_Example-resources.sh"; sourceTree = ""; }; 45 | 72FCE074F3D0E12740BE0C702DBA50B4 /* libPods-TTGDeallocTaskHelper_Tests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-TTGDeallocTaskHelper_Tests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 46 | 74FFEE5E12E73E3A201672DDBC09B410 /* NSObject+TTGDeallocTaskHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NSObject+TTGDeallocTaskHelper.m"; sourceTree = ""; }; 47 | 77CEE58E4E13C3E1C7C5B12EAD2C377A /* libPods-TTGDeallocTaskHelper_Example.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-TTGDeallocTaskHelper_Example.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 48 | 8499E0251852CDDF552B380481CDB347 /* Pods-TTGDeallocTaskHelper_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-TTGDeallocTaskHelper_Tests-acknowledgements.markdown"; sourceTree = ""; }; 49 | 85F80D6DE75AA98894703AD9A40211EB /* TTGDeallocTaskHelper-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TTGDeallocTaskHelper-prefix.pch"; sourceTree = ""; }; 50 | 8B24BB4546A30C439032A595C62C01DE /* Pods-TTGDeallocTaskHelper_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-TTGDeallocTaskHelper_Tests.debug.xcconfig"; sourceTree = ""; }; 51 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 52 | CDE12029D9EB6AF1DBE0C4ECB3DCC98F /* Pods-TTGDeallocTaskHelper_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-TTGDeallocTaskHelper_Example.debug.xcconfig"; sourceTree = ""; }; 53 | CE51CC2232011AE9FC4E7EAAA9366B2C /* Pods-TTGDeallocTaskHelper_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-TTGDeallocTaskHelper_Tests.release.xcconfig"; sourceTree = ""; }; 54 | D819A7E121981E12BEB832863B15BBA3 /* NSObject+TTGDeallocTaskHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSObject+TTGDeallocTaskHelper.h"; sourceTree = ""; }; 55 | DE6F017DD07EE45E5E59AD92071D4FA8 /* TTGDeallocTaskHelper.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = TTGDeallocTaskHelper.xcconfig; sourceTree = ""; }; 56 | EBCA801DED542D9C48BB9496E41CB2A7 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 57 | EF41DD27C24C6082A6F64354211C82FF /* TTGDeallocTaskHelper-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "TTGDeallocTaskHelper-dummy.m"; sourceTree = ""; }; 58 | F866F5609CCB43E106DA4C48C2DA5813 /* Pods-TTGDeallocTaskHelper_Tests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-TTGDeallocTaskHelper_Tests-frameworks.sh"; sourceTree = ""; }; 59 | /* End PBXFileReference section */ 60 | 61 | /* Begin PBXFrameworksBuildPhase section */ 62 | 7C0FDE212FA9A9ED005547EEF46E5D54 /* Frameworks */ = { 63 | isa = PBXFrameworksBuildPhase; 64 | buildActionMask = 2147483647; 65 | files = ( 66 | 92A5DEB0C79363E8A8676B64A896B16F /* CoreFoundation.framework in Frameworks */, 67 | 22DE51A04D31C3B1BF5DA909C6494BC1 /* Foundation.framework in Frameworks */, 68 | 72B7F0EBCD3336F303C25F64307B42C1 /* UIKit.framework in Frameworks */, 69 | ); 70 | runOnlyForDeploymentPostprocessing = 0; 71 | }; 72 | A0C04616D606B416EF7F78EF6612F529 /* Frameworks */ = { 73 | isa = PBXFrameworksBuildPhase; 74 | buildActionMask = 2147483647; 75 | files = ( 76 | 45656F47BA036C1D99431B77BE3A5E17 /* Foundation.framework in Frameworks */, 77 | ); 78 | runOnlyForDeploymentPostprocessing = 0; 79 | }; 80 | FE87E255C248C92D4F6D23EC464BF1A9 /* Frameworks */ = { 81 | isa = PBXFrameworksBuildPhase; 82 | buildActionMask = 2147483647; 83 | files = ( 84 | F93734DE73C6A0617FC031670A2453EA /* Foundation.framework in Frameworks */, 85 | ); 86 | runOnlyForDeploymentPostprocessing = 0; 87 | }; 88 | /* End PBXFrameworksBuildPhase section */ 89 | 90 | /* Begin PBXGroup section */ 91 | 10A3661F2759B39333E4D638B565041C /* Targets Support Files */ = { 92 | isa = PBXGroup; 93 | children = ( 94 | 448413D4E19D8D4EBD84262332AE0C48 /* Pods-TTGDeallocTaskHelper_Example */, 95 | 825DD70C89A91C5F7BAD40248DFB55B2 /* Pods-TTGDeallocTaskHelper_Tests */, 96 | ); 97 | name = "Targets Support Files"; 98 | sourceTree = ""; 99 | }; 100 | 122DA2E5084A4393C29BE363C764795C /* Frameworks */ = { 101 | isa = PBXGroup; 102 | children = ( 103 | D1E7B662015F43EBB0D0519AAC5A7C26 /* iOS */, 104 | ); 105 | name = Frameworks; 106 | sourceTree = ""; 107 | }; 108 | 16F57D9DEAB193E7FF5FBB7D0A60D963 /* Support Files */ = { 109 | isa = PBXGroup; 110 | children = ( 111 | DE6F017DD07EE45E5E59AD92071D4FA8 /* TTGDeallocTaskHelper.xcconfig */, 112 | EF41DD27C24C6082A6F64354211C82FF /* TTGDeallocTaskHelper-dummy.m */, 113 | 85F80D6DE75AA98894703AD9A40211EB /* TTGDeallocTaskHelper-prefix.pch */, 114 | ); 115 | name = "Support Files"; 116 | path = "Example/Pods/Target Support Files/TTGDeallocTaskHelper"; 117 | sourceTree = ""; 118 | }; 119 | 18241B33965EE181D172BDDFDC45A311 /* Products */ = { 120 | isa = PBXGroup; 121 | children = ( 122 | 77CEE58E4E13C3E1C7C5B12EAD2C377A /* libPods-TTGDeallocTaskHelper_Example.a */, 123 | 72FCE074F3D0E12740BE0C702DBA50B4 /* libPods-TTGDeallocTaskHelper_Tests.a */, 124 | 27ECA4842E45932592043F26CBE3F740 /* libTTGDeallocTaskHelper.a */, 125 | ); 126 | name = Products; 127 | sourceTree = ""; 128 | }; 129 | 1DB1802249F5BD551C20BC7475BC1643 /* Classes */ = { 130 | isa = PBXGroup; 131 | children = ( 132 | D819A7E121981E12BEB832863B15BBA3 /* NSObject+TTGDeallocTaskHelper.h */, 133 | 74FFEE5E12E73E3A201672DDBC09B410 /* NSObject+TTGDeallocTaskHelper.m */, 134 | ); 135 | path = Classes; 136 | sourceTree = ""; 137 | }; 138 | 448413D4E19D8D4EBD84262332AE0C48 /* Pods-TTGDeallocTaskHelper_Example */ = { 139 | isa = PBXGroup; 140 | children = ( 141 | 55803EB38F4BD5B0B751BB0E7CA901B1 /* Pods-TTGDeallocTaskHelper_Example-acknowledgements.markdown */, 142 | 425DB10573A4745402397AFAA06DEB72 /* Pods-TTGDeallocTaskHelper_Example-acknowledgements.plist */, 143 | 58A2E3273886EC8CEAACED032E0EA1A1 /* Pods-TTGDeallocTaskHelper_Example-dummy.m */, 144 | 08BF87DF2EB2B6B176EE03E4AA969E2F /* Pods-TTGDeallocTaskHelper_Example-frameworks.sh */, 145 | 6EE5E58303ECBE33509C65A7FE625A5F /* Pods-TTGDeallocTaskHelper_Example-resources.sh */, 146 | CDE12029D9EB6AF1DBE0C4ECB3DCC98F /* Pods-TTGDeallocTaskHelper_Example.debug.xcconfig */, 147 | 44D3613ADCCA1638CC790494EAECCA4A /* Pods-TTGDeallocTaskHelper_Example.release.xcconfig */, 148 | ); 149 | name = "Pods-TTGDeallocTaskHelper_Example"; 150 | path = "Target Support Files/Pods-TTGDeallocTaskHelper_Example"; 151 | sourceTree = ""; 152 | }; 153 | 50D08B1B219C1521DC74774A4005A1EE /* TTGDeallocTaskHelper */ = { 154 | isa = PBXGroup; 155 | children = ( 156 | 1DB1802249F5BD551C20BC7475BC1643 /* Classes */, 157 | ); 158 | path = TTGDeallocTaskHelper; 159 | sourceTree = ""; 160 | }; 161 | 5E44797EE9939AE6846A55A94410382F /* Development Pods */ = { 162 | isa = PBXGroup; 163 | children = ( 164 | EA401DDB5FD021A3DBE57D9E8828747F /* TTGDeallocTaskHelper */, 165 | ); 166 | name = "Development Pods"; 167 | sourceTree = ""; 168 | }; 169 | 7DB346D0F39D3F0E887471402A8071AB = { 170 | isa = PBXGroup; 171 | children = ( 172 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, 173 | 5E44797EE9939AE6846A55A94410382F /* Development Pods */, 174 | 122DA2E5084A4393C29BE363C764795C /* Frameworks */, 175 | 18241B33965EE181D172BDDFDC45A311 /* Products */, 176 | 10A3661F2759B39333E4D638B565041C /* Targets Support Files */, 177 | ); 178 | sourceTree = ""; 179 | }; 180 | 825DD70C89A91C5F7BAD40248DFB55B2 /* Pods-TTGDeallocTaskHelper_Tests */ = { 181 | isa = PBXGroup; 182 | children = ( 183 | 8499E0251852CDDF552B380481CDB347 /* Pods-TTGDeallocTaskHelper_Tests-acknowledgements.markdown */, 184 | 245BAFBF5F6BD4E4E4C30B84CEBE9583 /* Pods-TTGDeallocTaskHelper_Tests-acknowledgements.plist */, 185 | 3BC142C7BB710ED8184F764CF367EAAE /* Pods-TTGDeallocTaskHelper_Tests-dummy.m */, 186 | F866F5609CCB43E106DA4C48C2DA5813 /* Pods-TTGDeallocTaskHelper_Tests-frameworks.sh */, 187 | 0919C3FBC86536081116E79B90E80A05 /* Pods-TTGDeallocTaskHelper_Tests-resources.sh */, 188 | 8B24BB4546A30C439032A595C62C01DE /* Pods-TTGDeallocTaskHelper_Tests.debug.xcconfig */, 189 | CE51CC2232011AE9FC4E7EAAA9366B2C /* Pods-TTGDeallocTaskHelper_Tests.release.xcconfig */, 190 | ); 191 | name = "Pods-TTGDeallocTaskHelper_Tests"; 192 | path = "Target Support Files/Pods-TTGDeallocTaskHelper_Tests"; 193 | sourceTree = ""; 194 | }; 195 | D1E7B662015F43EBB0D0519AAC5A7C26 /* iOS */ = { 196 | isa = PBXGroup; 197 | children = ( 198 | 09380E532BB1971AAE638734E57574F9 /* CoreFoundation.framework */, 199 | EBCA801DED542D9C48BB9496E41CB2A7 /* Foundation.framework */, 200 | 1ED1411C548899C28A948508769F77B7 /* UIKit.framework */, 201 | ); 202 | name = iOS; 203 | sourceTree = ""; 204 | }; 205 | EA401DDB5FD021A3DBE57D9E8828747F /* TTGDeallocTaskHelper */ = { 206 | isa = PBXGroup; 207 | children = ( 208 | 16F57D9DEAB193E7FF5FBB7D0A60D963 /* Support Files */, 209 | 50D08B1B219C1521DC74774A4005A1EE /* TTGDeallocTaskHelper */, 210 | ); 211 | name = TTGDeallocTaskHelper; 212 | path = ../..; 213 | sourceTree = ""; 214 | }; 215 | /* End PBXGroup section */ 216 | 217 | /* Begin PBXHeadersBuildPhase section */ 218 | 7E8103DF2D11F0EF7AC384DE99664031 /* Headers */ = { 219 | isa = PBXHeadersBuildPhase; 220 | buildActionMask = 2147483647; 221 | files = ( 222 | 809ED1937597B26B65A4606A959D7A48 /* NSObject+TTGDeallocTaskHelper.h in Headers */, 223 | ); 224 | runOnlyForDeploymentPostprocessing = 0; 225 | }; 226 | /* End PBXHeadersBuildPhase section */ 227 | 228 | /* Begin PBXNativeTarget section */ 229 | 2A9332C0549E2BDB2C0873496AD3D14D /* TTGDeallocTaskHelper */ = { 230 | isa = PBXNativeTarget; 231 | buildConfigurationList = B21233ED387BF658E82CF5E9143F3611 /* Build configuration list for PBXNativeTarget "TTGDeallocTaskHelper" */; 232 | buildPhases = ( 233 | 3160D149909906AE67C24A980B12CF56 /* Sources */, 234 | 7C0FDE212FA9A9ED005547EEF46E5D54 /* Frameworks */, 235 | 7E8103DF2D11F0EF7AC384DE99664031 /* Headers */, 236 | ); 237 | buildRules = ( 238 | ); 239 | dependencies = ( 240 | ); 241 | name = TTGDeallocTaskHelper; 242 | productName = TTGDeallocTaskHelper; 243 | productReference = 27ECA4842E45932592043F26CBE3F740 /* libTTGDeallocTaskHelper.a */; 244 | productType = "com.apple.product-type.library.static"; 245 | }; 246 | 952B9FE7A6AAB219EED2C2932E9CD715 /* Pods-TTGDeallocTaskHelper_Tests */ = { 247 | isa = PBXNativeTarget; 248 | buildConfigurationList = D17BAA038D0DF3E55F4AE72B36CD9B97 /* Build configuration list for PBXNativeTarget "Pods-TTGDeallocTaskHelper_Tests" */; 249 | buildPhases = ( 250 | 46D75896C0A75AE8D684180C979D80FA /* Sources */, 251 | A0C04616D606B416EF7F78EF6612F529 /* Frameworks */, 252 | ); 253 | buildRules = ( 254 | ); 255 | dependencies = ( 256 | ); 257 | name = "Pods-TTGDeallocTaskHelper_Tests"; 258 | productName = "Pods-TTGDeallocTaskHelper_Tests"; 259 | productReference = 72FCE074F3D0E12740BE0C702DBA50B4 /* libPods-TTGDeallocTaskHelper_Tests.a */; 260 | productType = "com.apple.product-type.library.static"; 261 | }; 262 | C44BCE0A39FE96FC3DB03B8304DEF533 /* Pods-TTGDeallocTaskHelper_Example */ = { 263 | isa = PBXNativeTarget; 264 | buildConfigurationList = A9C15424493FCB45E56A9E6DD0C2E6E8 /* Build configuration list for PBXNativeTarget "Pods-TTGDeallocTaskHelper_Example" */; 265 | buildPhases = ( 266 | A1AC2B3491EE6CF00F2B4651E9F5DFA8 /* Sources */, 267 | FE87E255C248C92D4F6D23EC464BF1A9 /* Frameworks */, 268 | ); 269 | buildRules = ( 270 | ); 271 | dependencies = ( 272 | CF1FC25F4BFF253A0C025715595DD787 /* PBXTargetDependency */, 273 | ); 274 | name = "Pods-TTGDeallocTaskHelper_Example"; 275 | productName = "Pods-TTGDeallocTaskHelper_Example"; 276 | productReference = 77CEE58E4E13C3E1C7C5B12EAD2C377A /* libPods-TTGDeallocTaskHelper_Example.a */; 277 | productType = "com.apple.product-type.library.static"; 278 | }; 279 | /* End PBXNativeTarget section */ 280 | 281 | /* Begin PBXProject section */ 282 | D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { 283 | isa = PBXProject; 284 | attributes = { 285 | LastSwiftUpdateCheck = 0730; 286 | LastUpgradeCheck = 0700; 287 | }; 288 | buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; 289 | compatibilityVersion = "Xcode 3.2"; 290 | developmentRegion = English; 291 | hasScannedForEncodings = 0; 292 | knownRegions = ( 293 | en, 294 | ); 295 | mainGroup = 7DB346D0F39D3F0E887471402A8071AB; 296 | productRefGroup = 18241B33965EE181D172BDDFDC45A311 /* Products */; 297 | projectDirPath = ""; 298 | projectRoot = ""; 299 | targets = ( 300 | C44BCE0A39FE96FC3DB03B8304DEF533 /* Pods-TTGDeallocTaskHelper_Example */, 301 | 952B9FE7A6AAB219EED2C2932E9CD715 /* Pods-TTGDeallocTaskHelper_Tests */, 302 | 2A9332C0549E2BDB2C0873496AD3D14D /* TTGDeallocTaskHelper */, 303 | ); 304 | }; 305 | /* End PBXProject section */ 306 | 307 | /* Begin PBXSourcesBuildPhase section */ 308 | 3160D149909906AE67C24A980B12CF56 /* Sources */ = { 309 | isa = PBXSourcesBuildPhase; 310 | buildActionMask = 2147483647; 311 | files = ( 312 | 9470BA21C9BBA92F6A5ACB4CCBD3EB1F /* NSObject+TTGDeallocTaskHelper.m in Sources */, 313 | F333BF4D2737A564D26FA1984E09CF24 /* TTGDeallocTaskHelper-dummy.m in Sources */, 314 | ); 315 | runOnlyForDeploymentPostprocessing = 0; 316 | }; 317 | 46D75896C0A75AE8D684180C979D80FA /* Sources */ = { 318 | isa = PBXSourcesBuildPhase; 319 | buildActionMask = 2147483647; 320 | files = ( 321 | 192BD53CB29287BC2400C49FB7A0AA04 /* Pods-TTGDeallocTaskHelper_Tests-dummy.m in Sources */, 322 | ); 323 | runOnlyForDeploymentPostprocessing = 0; 324 | }; 325 | A1AC2B3491EE6CF00F2B4651E9F5DFA8 /* Sources */ = { 326 | isa = PBXSourcesBuildPhase; 327 | buildActionMask = 2147483647; 328 | files = ( 329 | B6E5AAE1BA7D4DE506D8242E8846EAD5 /* Pods-TTGDeallocTaskHelper_Example-dummy.m in Sources */, 330 | ); 331 | runOnlyForDeploymentPostprocessing = 0; 332 | }; 333 | /* End PBXSourcesBuildPhase section */ 334 | 335 | /* Begin PBXTargetDependency section */ 336 | CF1FC25F4BFF253A0C025715595DD787 /* PBXTargetDependency */ = { 337 | isa = PBXTargetDependency; 338 | name = TTGDeallocTaskHelper; 339 | target = 2A9332C0549E2BDB2C0873496AD3D14D /* TTGDeallocTaskHelper */; 340 | targetProxy = 369B5920AFA62F5E7F0147EE5B2CF294 /* PBXContainerItemProxy */; 341 | }; 342 | /* End PBXTargetDependency section */ 343 | 344 | /* Begin XCBuildConfiguration section */ 345 | 0BA08F52AF5955529B52639CEB57DAAC /* Debug */ = { 346 | isa = XCBuildConfiguration; 347 | buildSettings = { 348 | ALWAYS_SEARCH_USER_PATHS = NO; 349 | CLANG_ANALYZER_NONNULL = YES; 350 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 351 | CLANG_CXX_LIBRARY = "libc++"; 352 | CLANG_ENABLE_MODULES = YES; 353 | CLANG_ENABLE_OBJC_ARC = YES; 354 | CLANG_WARN_BOOL_CONVERSION = YES; 355 | CLANG_WARN_CONSTANT_CONVERSION = YES; 356 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; 357 | CLANG_WARN_EMPTY_BODY = YES; 358 | CLANG_WARN_ENUM_CONVERSION = YES; 359 | CLANG_WARN_INT_CONVERSION = YES; 360 | CLANG_WARN_OBJC_ROOT_CLASS = YES; 361 | CLANG_WARN_UNREACHABLE_CODE = YES; 362 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 363 | COPY_PHASE_STRIP = NO; 364 | ENABLE_TESTABILITY = YES; 365 | GCC_C_LANGUAGE_STANDARD = gnu99; 366 | GCC_DYNAMIC_NO_PIC = NO; 367 | GCC_OPTIMIZATION_LEVEL = 0; 368 | GCC_PREPROCESSOR_DEFINITIONS = ( 369 | "POD_CONFIGURATION_DEBUG=1", 370 | "DEBUG=1", 371 | "$(inherited)", 372 | ); 373 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 374 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 375 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 376 | GCC_WARN_UNDECLARED_SELECTOR = YES; 377 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 378 | GCC_WARN_UNUSED_FUNCTION = YES; 379 | GCC_WARN_UNUSED_VARIABLE = YES; 380 | IPHONEOS_DEPLOYMENT_TARGET = 6.0; 381 | ONLY_ACTIVE_ARCH = YES; 382 | STRIP_INSTALLED_PRODUCT = NO; 383 | SYMROOT = "${SRCROOT}/../build"; 384 | }; 385 | name = Debug; 386 | }; 387 | 23B48291D7A277220A30EB3E5EBD3F3A /* Release */ = { 388 | isa = XCBuildConfiguration; 389 | baseConfigurationReference = 44D3613ADCCA1638CC790494EAECCA4A /* Pods-TTGDeallocTaskHelper_Example.release.xcconfig */; 390 | buildSettings = { 391 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 392 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 393 | ENABLE_STRICT_OBJC_MSGSEND = YES; 394 | GCC_NO_COMMON_BLOCKS = YES; 395 | IPHONEOS_DEPLOYMENT_TARGET = 6.0; 396 | MACH_O_TYPE = staticlib; 397 | MTL_ENABLE_DEBUG_INFO = NO; 398 | OTHER_LDFLAGS = ""; 399 | OTHER_LIBTOOLFLAGS = ""; 400 | PODS_ROOT = "$(SRCROOT)"; 401 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 402 | PRODUCT_NAME = "$(TARGET_NAME)"; 403 | SDKROOT = iphoneos; 404 | SKIP_INSTALL = YES; 405 | }; 406 | name = Release; 407 | }; 408 | 57C55EEDDFEC4D42F57519CD4331F5B0 /* Debug */ = { 409 | isa = XCBuildConfiguration; 410 | baseConfigurationReference = DE6F017DD07EE45E5E59AD92071D4FA8 /* TTGDeallocTaskHelper.xcconfig */; 411 | buildSettings = { 412 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 413 | DEBUG_INFORMATION_FORMAT = dwarf; 414 | ENABLE_STRICT_OBJC_MSGSEND = YES; 415 | GCC_NO_COMMON_BLOCKS = YES; 416 | GCC_PREFIX_HEADER = "Target Support Files/TTGDeallocTaskHelper/TTGDeallocTaskHelper-prefix.pch"; 417 | IPHONEOS_DEPLOYMENT_TARGET = 6.0; 418 | MTL_ENABLE_DEBUG_INFO = YES; 419 | OTHER_LDFLAGS = ""; 420 | OTHER_LIBTOOLFLAGS = ""; 421 | PRIVATE_HEADERS_FOLDER_PATH = ""; 422 | PRODUCT_NAME = "$(TARGET_NAME)"; 423 | PUBLIC_HEADERS_FOLDER_PATH = ""; 424 | SDKROOT = iphoneos; 425 | SKIP_INSTALL = YES; 426 | }; 427 | name = Debug; 428 | }; 429 | 5D644EE27F09F03D2844100CB1CCB3E6 /* Release */ = { 430 | isa = XCBuildConfiguration; 431 | baseConfigurationReference = DE6F017DD07EE45E5E59AD92071D4FA8 /* TTGDeallocTaskHelper.xcconfig */; 432 | buildSettings = { 433 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 434 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 435 | ENABLE_STRICT_OBJC_MSGSEND = YES; 436 | GCC_NO_COMMON_BLOCKS = YES; 437 | GCC_PREFIX_HEADER = "Target Support Files/TTGDeallocTaskHelper/TTGDeallocTaskHelper-prefix.pch"; 438 | IPHONEOS_DEPLOYMENT_TARGET = 6.0; 439 | MTL_ENABLE_DEBUG_INFO = NO; 440 | OTHER_LDFLAGS = ""; 441 | OTHER_LIBTOOLFLAGS = ""; 442 | PRIVATE_HEADERS_FOLDER_PATH = ""; 443 | PRODUCT_NAME = "$(TARGET_NAME)"; 444 | PUBLIC_HEADERS_FOLDER_PATH = ""; 445 | SDKROOT = iphoneos; 446 | SKIP_INSTALL = YES; 447 | }; 448 | name = Release; 449 | }; 450 | 61D849FA7DBE7AA351D9A219E6E121E6 /* Release */ = { 451 | isa = XCBuildConfiguration; 452 | baseConfigurationReference = CE51CC2232011AE9FC4E7EAAA9366B2C /* Pods-TTGDeallocTaskHelper_Tests.release.xcconfig */; 453 | buildSettings = { 454 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 455 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 456 | ENABLE_STRICT_OBJC_MSGSEND = YES; 457 | GCC_NO_COMMON_BLOCKS = YES; 458 | IPHONEOS_DEPLOYMENT_TARGET = 6.0; 459 | MACH_O_TYPE = staticlib; 460 | MTL_ENABLE_DEBUG_INFO = NO; 461 | OTHER_LDFLAGS = ""; 462 | OTHER_LIBTOOLFLAGS = ""; 463 | PODS_ROOT = "$(SRCROOT)"; 464 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 465 | PRODUCT_NAME = "$(TARGET_NAME)"; 466 | SDKROOT = iphoneos; 467 | SKIP_INSTALL = YES; 468 | }; 469 | name = Release; 470 | }; 471 | 7107B52D33DDFB0057D055247EAE7B41 /* Release */ = { 472 | isa = XCBuildConfiguration; 473 | buildSettings = { 474 | ALWAYS_SEARCH_USER_PATHS = NO; 475 | CLANG_ANALYZER_NONNULL = YES; 476 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 477 | CLANG_CXX_LIBRARY = "libc++"; 478 | CLANG_ENABLE_MODULES = YES; 479 | CLANG_ENABLE_OBJC_ARC = YES; 480 | CLANG_WARN_BOOL_CONVERSION = YES; 481 | CLANG_WARN_CONSTANT_CONVERSION = YES; 482 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; 483 | CLANG_WARN_EMPTY_BODY = YES; 484 | CLANG_WARN_ENUM_CONVERSION = YES; 485 | CLANG_WARN_INT_CONVERSION = YES; 486 | CLANG_WARN_OBJC_ROOT_CLASS = YES; 487 | CLANG_WARN_UNREACHABLE_CODE = YES; 488 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 489 | COPY_PHASE_STRIP = YES; 490 | ENABLE_NS_ASSERTIONS = NO; 491 | GCC_C_LANGUAGE_STANDARD = gnu99; 492 | GCC_PREPROCESSOR_DEFINITIONS = ( 493 | "POD_CONFIGURATION_RELEASE=1", 494 | "$(inherited)", 495 | ); 496 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 497 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 498 | GCC_WARN_UNDECLARED_SELECTOR = YES; 499 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 500 | GCC_WARN_UNUSED_FUNCTION = YES; 501 | GCC_WARN_UNUSED_VARIABLE = YES; 502 | IPHONEOS_DEPLOYMENT_TARGET = 6.0; 503 | STRIP_INSTALLED_PRODUCT = NO; 504 | SYMROOT = "${SRCROOT}/../build"; 505 | VALIDATE_PRODUCT = YES; 506 | }; 507 | name = Release; 508 | }; 509 | 91285B0D2F3BD575870DB7A47DEFF356 /* Debug */ = { 510 | isa = XCBuildConfiguration; 511 | baseConfigurationReference = 8B24BB4546A30C439032A595C62C01DE /* Pods-TTGDeallocTaskHelper_Tests.debug.xcconfig */; 512 | buildSettings = { 513 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 514 | DEBUG_INFORMATION_FORMAT = dwarf; 515 | ENABLE_STRICT_OBJC_MSGSEND = YES; 516 | GCC_NO_COMMON_BLOCKS = YES; 517 | IPHONEOS_DEPLOYMENT_TARGET = 6.0; 518 | MACH_O_TYPE = staticlib; 519 | MTL_ENABLE_DEBUG_INFO = YES; 520 | OTHER_LDFLAGS = ""; 521 | OTHER_LIBTOOLFLAGS = ""; 522 | PODS_ROOT = "$(SRCROOT)"; 523 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 524 | PRODUCT_NAME = "$(TARGET_NAME)"; 525 | SDKROOT = iphoneos; 526 | SKIP_INSTALL = YES; 527 | }; 528 | name = Debug; 529 | }; 530 | D469D73F57A5C50CD3DA7AF742650602 /* Debug */ = { 531 | isa = XCBuildConfiguration; 532 | baseConfigurationReference = CDE12029D9EB6AF1DBE0C4ECB3DCC98F /* Pods-TTGDeallocTaskHelper_Example.debug.xcconfig */; 533 | buildSettings = { 534 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 535 | DEBUG_INFORMATION_FORMAT = dwarf; 536 | ENABLE_STRICT_OBJC_MSGSEND = YES; 537 | GCC_NO_COMMON_BLOCKS = YES; 538 | IPHONEOS_DEPLOYMENT_TARGET = 6.0; 539 | MACH_O_TYPE = staticlib; 540 | MTL_ENABLE_DEBUG_INFO = YES; 541 | OTHER_LDFLAGS = ""; 542 | OTHER_LIBTOOLFLAGS = ""; 543 | PODS_ROOT = "$(SRCROOT)"; 544 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 545 | PRODUCT_NAME = "$(TARGET_NAME)"; 546 | SDKROOT = iphoneos; 547 | SKIP_INSTALL = YES; 548 | }; 549 | name = Debug; 550 | }; 551 | /* End XCBuildConfiguration section */ 552 | 553 | /* Begin XCConfigurationList section */ 554 | 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { 555 | isa = XCConfigurationList; 556 | buildConfigurations = ( 557 | 0BA08F52AF5955529B52639CEB57DAAC /* Debug */, 558 | 7107B52D33DDFB0057D055247EAE7B41 /* Release */, 559 | ); 560 | defaultConfigurationIsVisible = 0; 561 | defaultConfigurationName = Release; 562 | }; 563 | A9C15424493FCB45E56A9E6DD0C2E6E8 /* Build configuration list for PBXNativeTarget "Pods-TTGDeallocTaskHelper_Example" */ = { 564 | isa = XCConfigurationList; 565 | buildConfigurations = ( 566 | D469D73F57A5C50CD3DA7AF742650602 /* Debug */, 567 | 23B48291D7A277220A30EB3E5EBD3F3A /* Release */, 568 | ); 569 | defaultConfigurationIsVisible = 0; 570 | defaultConfigurationName = Release; 571 | }; 572 | B21233ED387BF658E82CF5E9143F3611 /* Build configuration list for PBXNativeTarget "TTGDeallocTaskHelper" */ = { 573 | isa = XCConfigurationList; 574 | buildConfigurations = ( 575 | 57C55EEDDFEC4D42F57519CD4331F5B0 /* Debug */, 576 | 5D644EE27F09F03D2844100CB1CCB3E6 /* Release */, 577 | ); 578 | defaultConfigurationIsVisible = 0; 579 | defaultConfigurationName = Release; 580 | }; 581 | D17BAA038D0DF3E55F4AE72B36CD9B97 /* Build configuration list for PBXNativeTarget "Pods-TTGDeallocTaskHelper_Tests" */ = { 582 | isa = XCConfigurationList; 583 | buildConfigurations = ( 584 | 91285B0D2F3BD575870DB7A47DEFF356 /* Debug */, 585 | 61D849FA7DBE7AA351D9A219E6E121E6 /* Release */, 586 | ); 587 | defaultConfigurationIsVisible = 0; 588 | defaultConfigurationName = Release; 589 | }; 590 | /* End XCConfigurationList section */ 591 | }; 592 | rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 593 | } 594 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/TTGDeallocTaskHelper.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 66 | 67 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TTGDeallocTaskHelper_Example/Pods-TTGDeallocTaskHelper_Example-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## TTGDeallocTaskHelper 5 | 6 | Copyright (c) 2016 zekunyan 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-TTGDeallocTaskHelper_Example/Pods-TTGDeallocTaskHelper_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) 2016 zekunyan <zekunyan@163.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 | Title 38 | TTGDeallocTaskHelper 39 | Type 40 | PSGroupSpecifier 41 | 42 | 43 | FooterText 44 | Generated by CocoaPods - https://cocoapods.org 45 | Title 46 | 47 | Type 48 | PSGroupSpecifier 49 | 50 | 51 | StringsTable 52 | Acknowledgements 53 | Title 54 | Acknowledgements 55 | 56 | 57 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TTGDeallocTaskHelper_Example/Pods-TTGDeallocTaskHelper_Example-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_TTGDeallocTaskHelper_Example : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_TTGDeallocTaskHelper_Example 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TTGDeallocTaskHelper_Example/Pods-TTGDeallocTaskHelper_Example-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 6 | 7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 8 | 9 | install_framework() 10 | { 11 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 12 | local source="${BUILT_PRODUCTS_DIR}/$1" 13 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 14 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 15 | elif [ -r "$1" ]; then 16 | local source="$1" 17 | fi 18 | 19 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 20 | 21 | if [ -L "${source}" ]; then 22 | echo "Symlinked..." 23 | source="$(readlink "${source}")" 24 | fi 25 | 26 | # use filter instead of exclude so missing patterns dont' throw errors 27 | echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 28 | rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 29 | 30 | local basename 31 | basename="$(basename -s .framework "$1")" 32 | binary="${destination}/${basename}.framework/${basename}" 33 | if ! [ -r "$binary" ]; then 34 | binary="${destination}/${basename}" 35 | fi 36 | 37 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 38 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 39 | strip_invalid_archs "$binary" 40 | fi 41 | 42 | # Resign the code if required by the build settings to avoid unstable apps 43 | code_sign_if_enabled "${destination}/$(basename "$1")" 44 | 45 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 46 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 47 | local swift_runtime_libs 48 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 49 | for lib in $swift_runtime_libs; do 50 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 51 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 52 | code_sign_if_enabled "${destination}/${lib}" 53 | done 54 | fi 55 | } 56 | 57 | # Signs a framework with the provided identity 58 | code_sign_if_enabled() { 59 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 60 | # Use the current code_sign_identitiy 61 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 62 | echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements \"$1\"" 63 | /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1" 64 | fi 65 | } 66 | 67 | # Strip invalid architectures 68 | strip_invalid_archs() { 69 | binary="$1" 70 | # Get architectures for current file 71 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 72 | stripped="" 73 | for arch in $archs; do 74 | if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then 75 | # Strip non-valid architectures in-place 76 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 77 | stripped="$stripped $arch" 78 | fi 79 | done 80 | if [[ "$stripped" ]]; then 81 | echo "Stripped $binary of architectures:$stripped" 82 | fi 83 | } 84 | 85 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TTGDeallocTaskHelper_Example/Pods-TTGDeallocTaskHelper_Example-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | XCASSET_FILES=() 10 | 11 | case "${TARGETED_DEVICE_FAMILY}" in 12 | 1,2) 13 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 14 | ;; 15 | 1) 16 | TARGET_DEVICE_ARGS="--target-device iphone" 17 | ;; 18 | 2) 19 | TARGET_DEVICE_ARGS="--target-device ipad" 20 | ;; 21 | *) 22 | TARGET_DEVICE_ARGS="--target-device mac" 23 | ;; 24 | esac 25 | 26 | realpath() { 27 | DIRECTORY="$(cd "${1%/*}" && pwd)" 28 | FILENAME="${1##*/}" 29 | echo "$DIRECTORY/$FILENAME" 30 | } 31 | 32 | install_resource() 33 | { 34 | if [[ "$1" = /* ]] ; then 35 | RESOURCE_PATH="$1" 36 | else 37 | RESOURCE_PATH="${PODS_ROOT}/$1" 38 | fi 39 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 40 | cat << EOM 41 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 42 | EOM 43 | exit 1 44 | fi 45 | case $RESOURCE_PATH in 46 | *.storyboard) 47 | 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}" 48 | 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} 49 | ;; 50 | *.xib) 51 | 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}" 52 | 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} 53 | ;; 54 | *.framework) 55 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 56 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 57 | echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 58 | rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 59 | ;; 60 | *.xcdatamodel) 61 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" 62 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 63 | ;; 64 | *.xcdatamodeld) 65 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" 66 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 67 | ;; 68 | *.xcmappingmodel) 69 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" 70 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 71 | ;; 72 | *.xcassets) 73 | ABSOLUTE_XCASSET_FILE=$(realpath "$RESOURCE_PATH") 74 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 75 | ;; 76 | *) 77 | echo "$RESOURCE_PATH" 78 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 79 | ;; 80 | esac 81 | } 82 | 83 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 84 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 85 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 86 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 87 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 88 | fi 89 | rm -f "$RESOURCES_TO_COPY" 90 | 91 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 92 | then 93 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 94 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 95 | while read line; do 96 | if [[ $line != "`realpath $PODS_ROOT`*" ]]; then 97 | XCASSET_FILES+=("$line") 98 | fi 99 | done <<<"$OTHER_XCASSETS" 100 | 101 | 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}" 102 | fi 103 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TTGDeallocTaskHelper_Example/Pods-TTGDeallocTaskHelper_Example.debug.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/TTGDeallocTaskHelper" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/TTGDeallocTaskHelper" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/TTGDeallocTaskHelper" 5 | OTHER_LDFLAGS = $(inherited) -ObjC -l"TTGDeallocTaskHelper" -framework "CoreFoundation" -framework "UIKit" 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT}/Pods 9 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TTGDeallocTaskHelper_Example/Pods-TTGDeallocTaskHelper_Example.release.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/TTGDeallocTaskHelper" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/TTGDeallocTaskHelper" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/TTGDeallocTaskHelper" 5 | OTHER_LDFLAGS = $(inherited) -ObjC -l"TTGDeallocTaskHelper" -framework "CoreFoundation" -framework "UIKit" 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT}/Pods 9 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TTGDeallocTaskHelper_Tests/Pods-TTGDeallocTaskHelper_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-TTGDeallocTaskHelper_Tests/Pods-TTGDeallocTaskHelper_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-TTGDeallocTaskHelper_Tests/Pods-TTGDeallocTaskHelper_Tests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_TTGDeallocTaskHelper_Tests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_TTGDeallocTaskHelper_Tests 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TTGDeallocTaskHelper_Tests/Pods-TTGDeallocTaskHelper_Tests-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 6 | 7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 8 | 9 | install_framework() 10 | { 11 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 12 | local source="${BUILT_PRODUCTS_DIR}/$1" 13 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 14 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 15 | elif [ -r "$1" ]; then 16 | local source="$1" 17 | fi 18 | 19 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 20 | 21 | if [ -L "${source}" ]; then 22 | echo "Symlinked..." 23 | source="$(readlink "${source}")" 24 | fi 25 | 26 | # use filter instead of exclude so missing patterns dont' throw errors 27 | echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 28 | rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 29 | 30 | local basename 31 | basename="$(basename -s .framework "$1")" 32 | binary="${destination}/${basename}.framework/${basename}" 33 | if ! [ -r "$binary" ]; then 34 | binary="${destination}/${basename}" 35 | fi 36 | 37 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 38 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 39 | strip_invalid_archs "$binary" 40 | fi 41 | 42 | # Resign the code if required by the build settings to avoid unstable apps 43 | code_sign_if_enabled "${destination}/$(basename "$1")" 44 | 45 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 46 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 47 | local swift_runtime_libs 48 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 49 | for lib in $swift_runtime_libs; do 50 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 51 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 52 | code_sign_if_enabled "${destination}/${lib}" 53 | done 54 | fi 55 | } 56 | 57 | # Signs a framework with the provided identity 58 | code_sign_if_enabled() { 59 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 60 | # Use the current code_sign_identitiy 61 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 62 | echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements \"$1\"" 63 | /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1" 64 | fi 65 | } 66 | 67 | # Strip invalid architectures 68 | strip_invalid_archs() { 69 | binary="$1" 70 | # Get architectures for current file 71 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 72 | stripped="" 73 | for arch in $archs; do 74 | if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then 75 | # Strip non-valid architectures in-place 76 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 77 | stripped="$stripped $arch" 78 | fi 79 | done 80 | if [[ "$stripped" ]]; then 81 | echo "Stripped $binary of architectures:$stripped" 82 | fi 83 | } 84 | 85 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TTGDeallocTaskHelper_Tests/Pods-TTGDeallocTaskHelper_Tests-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | XCASSET_FILES=() 10 | 11 | case "${TARGETED_DEVICE_FAMILY}" in 12 | 1,2) 13 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 14 | ;; 15 | 1) 16 | TARGET_DEVICE_ARGS="--target-device iphone" 17 | ;; 18 | 2) 19 | TARGET_DEVICE_ARGS="--target-device ipad" 20 | ;; 21 | *) 22 | TARGET_DEVICE_ARGS="--target-device mac" 23 | ;; 24 | esac 25 | 26 | realpath() { 27 | DIRECTORY="$(cd "${1%/*}" && pwd)" 28 | FILENAME="${1##*/}" 29 | echo "$DIRECTORY/$FILENAME" 30 | } 31 | 32 | install_resource() 33 | { 34 | if [[ "$1" = /* ]] ; then 35 | RESOURCE_PATH="$1" 36 | else 37 | RESOURCE_PATH="${PODS_ROOT}/$1" 38 | fi 39 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 40 | cat << EOM 41 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 42 | EOM 43 | exit 1 44 | fi 45 | case $RESOURCE_PATH in 46 | *.storyboard) 47 | 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}" 48 | 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} 49 | ;; 50 | *.xib) 51 | 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}" 52 | 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} 53 | ;; 54 | *.framework) 55 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 56 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 57 | echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 58 | rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 59 | ;; 60 | *.xcdatamodel) 61 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" 62 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 63 | ;; 64 | *.xcdatamodeld) 65 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" 66 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 67 | ;; 68 | *.xcmappingmodel) 69 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" 70 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 71 | ;; 72 | *.xcassets) 73 | ABSOLUTE_XCASSET_FILE=$(realpath "$RESOURCE_PATH") 74 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 75 | ;; 76 | *) 77 | echo "$RESOURCE_PATH" 78 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 79 | ;; 80 | esac 81 | } 82 | 83 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 84 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 85 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 86 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 87 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 88 | fi 89 | rm -f "$RESOURCES_TO_COPY" 90 | 91 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 92 | then 93 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 94 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 95 | while read line; do 96 | if [[ $line != "`realpath $PODS_ROOT`*" ]]; then 97 | XCASSET_FILES+=("$line") 98 | fi 99 | done <<<"$OTHER_XCASSETS" 100 | 101 | 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}" 102 | fi 103 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TTGDeallocTaskHelper_Tests/Pods-TTGDeallocTaskHelper_Tests.debug.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/TTGDeallocTaskHelper" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/TTGDeallocTaskHelper" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/TTGDeallocTaskHelper" 5 | OTHER_LDFLAGS = $(inherited) -ObjC 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT}/Pods 9 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TTGDeallocTaskHelper_Tests/Pods-TTGDeallocTaskHelper_Tests.release.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/TTGDeallocTaskHelper" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/TTGDeallocTaskHelper" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/TTGDeallocTaskHelper" 5 | OTHER_LDFLAGS = $(inherited) -ObjC 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT}/Pods 9 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/TTGDeallocTaskHelper/TTGDeallocTaskHelper-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_TTGDeallocTaskHelper : NSObject 3 | @end 4 | @implementation PodsDummy_TTGDeallocTaskHelper 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/TTGDeallocTaskHelper/TTGDeallocTaskHelper-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/TTGDeallocTaskHelper/TTGDeallocTaskHelper.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/TTGDeallocTaskHelper 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/TTGDeallocTaskHelper" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/TTGDeallocTaskHelper" 4 | OTHER_LDFLAGS = -framework "CoreFoundation" -framework "UIKit" 5 | PODS_BUILD_DIR = $BUILD_DIR 6 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | -------------------------------------------------------------------------------- /Example/TTGDeallocTaskHelper.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 2E56D322F1071CDE4F9A4BC6 /* libPods-TTGDeallocTaskHelper_Example.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F0A244EE5A4A0877AB544241 /* libPods-TTGDeallocTaskHelper_Example.a */; }; 11 | 6003F58E195388D20070C39A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58D195388D20070C39A /* Foundation.framework */; }; 12 | 6003F590195388D20070C39A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58F195388D20070C39A /* CoreGraphics.framework */; }; 13 | 6003F592195388D20070C39A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F591195388D20070C39A /* UIKit.framework */; }; 14 | 6003F598195388D20070C39A /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 6003F596195388D20070C39A /* InfoPlist.strings */; }; 15 | 6003F59A195388D20070C39A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F599195388D20070C39A /* main.m */; }; 16 | 6003F59E195388D20070C39A /* TTGAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F59D195388D20070C39A /* TTGAppDelegate.m */; }; 17 | 6003F5A7195388D20070C39A /* TTGViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F5A6195388D20070C39A /* TTGViewController.m */; }; 18 | 6003F5A9195388D20070C39A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6003F5A8195388D20070C39A /* Images.xcassets */; }; 19 | 6003F5B0195388D20070C39A /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F5AF195388D20070C39A /* XCTest.framework */; }; 20 | 6003F5B1195388D20070C39A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58D195388D20070C39A /* Foundation.framework */; }; 21 | 6003F5B2195388D20070C39A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F591195388D20070C39A /* UIKit.framework */; }; 22 | 6003F5BA195388D20070C39A /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 6003F5B8195388D20070C39A /* InfoPlist.strings */; }; 23 | 6003F5BC195388D20070C39A /* Tests.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F5BB195388D20070C39A /* Tests.m */; }; 24 | 873B8AEB1B1F5CCA007FD442 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 873B8AEA1B1F5CCA007FD442 /* Main.storyboard */; }; 25 | AD28CD7BE31BD4929FBD1C13 /* libPods-TTGDeallocTaskHelper_Tests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C87E47B480645841FE0A2B3B /* libPods-TTGDeallocTaskHelper_Tests.a */; }; 26 | BF6D8E511E73D76900D8371B /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BF6D8E501E73D76900D8371B /* Launch Screen.storyboard */; }; 27 | /* End PBXBuildFile section */ 28 | 29 | /* Begin PBXContainerItemProxy section */ 30 | 6003F5B3195388D20070C39A /* PBXContainerItemProxy */ = { 31 | isa = PBXContainerItemProxy; 32 | containerPortal = 6003F582195388D10070C39A /* Project object */; 33 | proxyType = 1; 34 | remoteGlobalIDString = 6003F589195388D20070C39A; 35 | remoteInfo = TTGDeallocTaskHelper; 36 | }; 37 | /* End PBXContainerItemProxy section */ 38 | 39 | /* Begin PBXFileReference section */ 40 | 23C7949FCE50D1D8BC600CF9 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; 41 | 272C22092FA69F6176959206 /* Pods-TTGDeallocTaskHelper_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TTGDeallocTaskHelper_Example.debug.xcconfig"; path = "Pods/Target Support Files/Pods-TTGDeallocTaskHelper_Example/Pods-TTGDeallocTaskHelper_Example.debug.xcconfig"; sourceTree = ""; }; 42 | 28BB8080C7E86B8BC52AD87B /* Pods-TTGDeallocTaskHelper_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TTGDeallocTaskHelper_Example.release.xcconfig"; path = "Pods/Target Support Files/Pods-TTGDeallocTaskHelper_Example/Pods-TTGDeallocTaskHelper_Example.release.xcconfig"; sourceTree = ""; }; 43 | 55101C1701ACE70920A36AC1 /* TTGDeallocTaskHelper.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = TTGDeallocTaskHelper.podspec; path = ../TTGDeallocTaskHelper.podspec; sourceTree = ""; }; 44 | 6003F58A195388D20070C39A /* TTGDeallocTaskHelper_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TTGDeallocTaskHelper_Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; 45 | 6003F58D195388D20070C39A /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 46 | 6003F58F195388D20070C39A /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 47 | 6003F591195388D20070C39A /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 48 | 6003F595195388D20070C39A /* TTGDeallocTaskHelper-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "TTGDeallocTaskHelper-Info.plist"; sourceTree = ""; }; 49 | 6003F597195388D20070C39A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 50 | 6003F599195388D20070C39A /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 51 | 6003F59B195388D20070C39A /* TTGDeallocTaskHelper-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "TTGDeallocTaskHelper-Prefix.pch"; sourceTree = ""; }; 52 | 6003F59C195388D20070C39A /* TTGAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TTGAppDelegate.h; sourceTree = ""; }; 53 | 6003F59D195388D20070C39A /* TTGAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TTGAppDelegate.m; sourceTree = ""; }; 54 | 6003F5A5195388D20070C39A /* TTGViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TTGViewController.h; sourceTree = ""; }; 55 | 6003F5A6195388D20070C39A /* TTGViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TTGViewController.m; sourceTree = ""; }; 56 | 6003F5A8195388D20070C39A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 57 | 6003F5AE195388D20070C39A /* TTGDeallocTaskHelper_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TTGDeallocTaskHelper_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 58 | 6003F5AF195388D20070C39A /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; 59 | 6003F5B7195388D20070C39A /* Tests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Tests-Info.plist"; sourceTree = ""; }; 60 | 6003F5B9195388D20070C39A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 61 | 6003F5BB195388D20070C39A /* Tests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Tests.m; sourceTree = ""; }; 62 | 606FC2411953D9B200FFA9A0 /* Tests-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Tests-Prefix.pch"; sourceTree = ""; }; 63 | 6F5DF751E65E59CE42C3B9B2 /* Pods-TTGDeallocTaskHelper_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TTGDeallocTaskHelper_Tests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-TTGDeallocTaskHelper_Tests/Pods-TTGDeallocTaskHelper_Tests.debug.xcconfig"; sourceTree = ""; }; 64 | 873B8AEA1B1F5CCA007FD442 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = ""; }; 65 | 89B9D53E66C62DF24E8CE44C /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; 66 | BF6D8E501E73D76900D8371B /* Launch Screen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = "Launch Screen.storyboard"; sourceTree = ""; }; 67 | C87E47B480645841FE0A2B3B /* libPods-TTGDeallocTaskHelper_Tests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-TTGDeallocTaskHelper_Tests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 68 | EF57150A5BCB85CB025F8147 /* Pods-TTGDeallocTaskHelper_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TTGDeallocTaskHelper_Tests.release.xcconfig"; path = "Pods/Target Support Files/Pods-TTGDeallocTaskHelper_Tests/Pods-TTGDeallocTaskHelper_Tests.release.xcconfig"; sourceTree = ""; }; 69 | F0A244EE5A4A0877AB544241 /* libPods-TTGDeallocTaskHelper_Example.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-TTGDeallocTaskHelper_Example.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 70 | /* End PBXFileReference section */ 71 | 72 | /* Begin PBXFrameworksBuildPhase section */ 73 | 6003F587195388D20070C39A /* Frameworks */ = { 74 | isa = PBXFrameworksBuildPhase; 75 | buildActionMask = 2147483647; 76 | files = ( 77 | 6003F590195388D20070C39A /* CoreGraphics.framework in Frameworks */, 78 | 6003F592195388D20070C39A /* UIKit.framework in Frameworks */, 79 | 6003F58E195388D20070C39A /* Foundation.framework in Frameworks */, 80 | 2E56D322F1071CDE4F9A4BC6 /* libPods-TTGDeallocTaskHelper_Example.a in Frameworks */, 81 | ); 82 | runOnlyForDeploymentPostprocessing = 0; 83 | }; 84 | 6003F5AB195388D20070C39A /* Frameworks */ = { 85 | isa = PBXFrameworksBuildPhase; 86 | buildActionMask = 2147483647; 87 | files = ( 88 | 6003F5B0195388D20070C39A /* XCTest.framework in Frameworks */, 89 | 6003F5B2195388D20070C39A /* UIKit.framework in Frameworks */, 90 | 6003F5B1195388D20070C39A /* Foundation.framework in Frameworks */, 91 | AD28CD7BE31BD4929FBD1C13 /* libPods-TTGDeallocTaskHelper_Tests.a in Frameworks */, 92 | ); 93 | runOnlyForDeploymentPostprocessing = 0; 94 | }; 95 | /* End PBXFrameworksBuildPhase section */ 96 | 97 | /* Begin PBXGroup section */ 98 | 526F4AEA0090C3B237943D06 /* Pods */ = { 99 | isa = PBXGroup; 100 | children = ( 101 | 272C22092FA69F6176959206 /* Pods-TTGDeallocTaskHelper_Example.debug.xcconfig */, 102 | 28BB8080C7E86B8BC52AD87B /* Pods-TTGDeallocTaskHelper_Example.release.xcconfig */, 103 | 6F5DF751E65E59CE42C3B9B2 /* Pods-TTGDeallocTaskHelper_Tests.debug.xcconfig */, 104 | EF57150A5BCB85CB025F8147 /* Pods-TTGDeallocTaskHelper_Tests.release.xcconfig */, 105 | ); 106 | name = Pods; 107 | sourceTree = ""; 108 | }; 109 | 6003F581195388D10070C39A = { 110 | isa = PBXGroup; 111 | children = ( 112 | 60FF7A9C1954A5C5007DD14C /* Podspec Metadata */, 113 | 6003F593195388D20070C39A /* Example for TTGDeallocTaskHelper */, 114 | 6003F5B5195388D20070C39A /* Tests */, 115 | 6003F58C195388D20070C39A /* Frameworks */, 116 | 6003F58B195388D20070C39A /* Products */, 117 | 526F4AEA0090C3B237943D06 /* Pods */, 118 | ); 119 | sourceTree = ""; 120 | }; 121 | 6003F58B195388D20070C39A /* Products */ = { 122 | isa = PBXGroup; 123 | children = ( 124 | 6003F58A195388D20070C39A /* TTGDeallocTaskHelper_Example.app */, 125 | 6003F5AE195388D20070C39A /* TTGDeallocTaskHelper_Tests.xctest */, 126 | ); 127 | name = Products; 128 | sourceTree = ""; 129 | }; 130 | 6003F58C195388D20070C39A /* Frameworks */ = { 131 | isa = PBXGroup; 132 | children = ( 133 | 6003F58D195388D20070C39A /* Foundation.framework */, 134 | 6003F58F195388D20070C39A /* CoreGraphics.framework */, 135 | 6003F591195388D20070C39A /* UIKit.framework */, 136 | 6003F5AF195388D20070C39A /* XCTest.framework */, 137 | F0A244EE5A4A0877AB544241 /* libPods-TTGDeallocTaskHelper_Example.a */, 138 | C87E47B480645841FE0A2B3B /* libPods-TTGDeallocTaskHelper_Tests.a */, 139 | ); 140 | name = Frameworks; 141 | sourceTree = ""; 142 | }; 143 | 6003F593195388D20070C39A /* Example for TTGDeallocTaskHelper */ = { 144 | isa = PBXGroup; 145 | children = ( 146 | 6003F59C195388D20070C39A /* TTGAppDelegate.h */, 147 | 6003F59D195388D20070C39A /* TTGAppDelegate.m */, 148 | 873B8AEA1B1F5CCA007FD442 /* Main.storyboard */, 149 | 6003F5A5195388D20070C39A /* TTGViewController.h */, 150 | 6003F5A6195388D20070C39A /* TTGViewController.m */, 151 | 6003F5A8195388D20070C39A /* Images.xcassets */, 152 | 6003F594195388D20070C39A /* Supporting Files */, 153 | BF6D8E501E73D76900D8371B /* Launch Screen.storyboard */, 154 | ); 155 | name = "Example for TTGDeallocTaskHelper"; 156 | path = TTGDeallocTaskHelper; 157 | sourceTree = ""; 158 | }; 159 | 6003F594195388D20070C39A /* Supporting Files */ = { 160 | isa = PBXGroup; 161 | children = ( 162 | 6003F595195388D20070C39A /* TTGDeallocTaskHelper-Info.plist */, 163 | 6003F596195388D20070C39A /* InfoPlist.strings */, 164 | 6003F599195388D20070C39A /* main.m */, 165 | 6003F59B195388D20070C39A /* TTGDeallocTaskHelper-Prefix.pch */, 166 | ); 167 | name = "Supporting Files"; 168 | sourceTree = ""; 169 | }; 170 | 6003F5B5195388D20070C39A /* Tests */ = { 171 | isa = PBXGroup; 172 | children = ( 173 | 6003F5BB195388D20070C39A /* Tests.m */, 174 | 6003F5B6195388D20070C39A /* Supporting Files */, 175 | ); 176 | path = Tests; 177 | sourceTree = ""; 178 | }; 179 | 6003F5B6195388D20070C39A /* Supporting Files */ = { 180 | isa = PBXGroup; 181 | children = ( 182 | 6003F5B7195388D20070C39A /* Tests-Info.plist */, 183 | 6003F5B8195388D20070C39A /* InfoPlist.strings */, 184 | 606FC2411953D9B200FFA9A0 /* Tests-Prefix.pch */, 185 | ); 186 | name = "Supporting Files"; 187 | sourceTree = ""; 188 | }; 189 | 60FF7A9C1954A5C5007DD14C /* Podspec Metadata */ = { 190 | isa = PBXGroup; 191 | children = ( 192 | 55101C1701ACE70920A36AC1 /* TTGDeallocTaskHelper.podspec */, 193 | 23C7949FCE50D1D8BC600CF9 /* README.md */, 194 | 89B9D53E66C62DF24E8CE44C /* LICENSE */, 195 | ); 196 | name = "Podspec Metadata"; 197 | sourceTree = ""; 198 | }; 199 | /* End PBXGroup section */ 200 | 201 | /* Begin PBXNativeTarget section */ 202 | 6003F589195388D20070C39A /* TTGDeallocTaskHelper_Example */ = { 203 | isa = PBXNativeTarget; 204 | buildConfigurationList = 6003F5BF195388D20070C39A /* Build configuration list for PBXNativeTarget "TTGDeallocTaskHelper_Example" */; 205 | buildPhases = ( 206 | 1BBD6BBC1B5DA1229E4FE4B6 /* [CP] Check Pods Manifest.lock */, 207 | 6003F586195388D20070C39A /* Sources */, 208 | 6003F587195388D20070C39A /* Frameworks */, 209 | 6003F588195388D20070C39A /* Resources */, 210 | 6AEA7AE627A273ACA7C562AA /* [CP] Embed Pods Frameworks */, 211 | 7A5B5FCDF3B47B99C4BFB610 /* [CP] Copy Pods Resources */, 212 | ); 213 | buildRules = ( 214 | ); 215 | dependencies = ( 216 | ); 217 | name = TTGDeallocTaskHelper_Example; 218 | productName = TTGDeallocTaskHelper; 219 | productReference = 6003F58A195388D20070C39A /* TTGDeallocTaskHelper_Example.app */; 220 | productType = "com.apple.product-type.application"; 221 | }; 222 | 6003F5AD195388D20070C39A /* TTGDeallocTaskHelper_Tests */ = { 223 | isa = PBXNativeTarget; 224 | buildConfigurationList = 6003F5C2195388D20070C39A /* Build configuration list for PBXNativeTarget "TTGDeallocTaskHelper_Tests" */; 225 | buildPhases = ( 226 | F9D7180F0AACFCE3B4AEF865 /* [CP] Check Pods Manifest.lock */, 227 | 6003F5AA195388D20070C39A /* Sources */, 228 | 6003F5AB195388D20070C39A /* Frameworks */, 229 | 6003F5AC195388D20070C39A /* Resources */, 230 | 37904EE6CB54245D66AF4616 /* [CP] Embed Pods Frameworks */, 231 | 297590251C4E02E9B7D210C2 /* [CP] Copy Pods Resources */, 232 | ); 233 | buildRules = ( 234 | ); 235 | dependencies = ( 236 | 6003F5B4195388D20070C39A /* PBXTargetDependency */, 237 | ); 238 | name = TTGDeallocTaskHelper_Tests; 239 | productName = TTGDeallocTaskHelperTests; 240 | productReference = 6003F5AE195388D20070C39A /* TTGDeallocTaskHelper_Tests.xctest */; 241 | productType = "com.apple.product-type.bundle.unit-test"; 242 | }; 243 | /* End PBXNativeTarget section */ 244 | 245 | /* Begin PBXProject section */ 246 | 6003F582195388D10070C39A /* Project object */ = { 247 | isa = PBXProject; 248 | attributes = { 249 | CLASSPREFIX = TTG; 250 | LastUpgradeCheck = 0720; 251 | ORGANIZATIONNAME = zekunyan; 252 | TargetAttributes = { 253 | 6003F5AD195388D20070C39A = { 254 | TestTargetID = 6003F589195388D20070C39A; 255 | }; 256 | }; 257 | }; 258 | buildConfigurationList = 6003F585195388D10070C39A /* Build configuration list for PBXProject "TTGDeallocTaskHelper" */; 259 | compatibilityVersion = "Xcode 3.2"; 260 | developmentRegion = English; 261 | hasScannedForEncodings = 0; 262 | knownRegions = ( 263 | en, 264 | Base, 265 | ); 266 | mainGroup = 6003F581195388D10070C39A; 267 | productRefGroup = 6003F58B195388D20070C39A /* Products */; 268 | projectDirPath = ""; 269 | projectRoot = ""; 270 | targets = ( 271 | 6003F589195388D20070C39A /* TTGDeallocTaskHelper_Example */, 272 | 6003F5AD195388D20070C39A /* TTGDeallocTaskHelper_Tests */, 273 | ); 274 | }; 275 | /* End PBXProject section */ 276 | 277 | /* Begin PBXResourcesBuildPhase section */ 278 | 6003F588195388D20070C39A /* Resources */ = { 279 | isa = PBXResourcesBuildPhase; 280 | buildActionMask = 2147483647; 281 | files = ( 282 | 873B8AEB1B1F5CCA007FD442 /* Main.storyboard in Resources */, 283 | 6003F5A9195388D20070C39A /* Images.xcassets in Resources */, 284 | BF6D8E511E73D76900D8371B /* Launch Screen.storyboard in Resources */, 285 | 6003F598195388D20070C39A /* InfoPlist.strings in Resources */, 286 | ); 287 | runOnlyForDeploymentPostprocessing = 0; 288 | }; 289 | 6003F5AC195388D20070C39A /* Resources */ = { 290 | isa = PBXResourcesBuildPhase; 291 | buildActionMask = 2147483647; 292 | files = ( 293 | 6003F5BA195388D20070C39A /* InfoPlist.strings in Resources */, 294 | ); 295 | runOnlyForDeploymentPostprocessing = 0; 296 | }; 297 | /* End PBXResourcesBuildPhase section */ 298 | 299 | /* Begin PBXShellScriptBuildPhase section */ 300 | 1BBD6BBC1B5DA1229E4FE4B6 /* [CP] Check Pods Manifest.lock */ = { 301 | isa = PBXShellScriptBuildPhase; 302 | buildActionMask = 2147483647; 303 | files = ( 304 | ); 305 | inputPaths = ( 306 | ); 307 | name = "[CP] Check Pods Manifest.lock"; 308 | outputPaths = ( 309 | ); 310 | runOnlyForDeploymentPostprocessing = 0; 311 | shellPath = /bin/sh; 312 | shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; 313 | showEnvVarsInLog = 0; 314 | }; 315 | 297590251C4E02E9B7D210C2 /* [CP] Copy Pods Resources */ = { 316 | isa = PBXShellScriptBuildPhase; 317 | buildActionMask = 2147483647; 318 | files = ( 319 | ); 320 | inputPaths = ( 321 | ); 322 | name = "[CP] Copy Pods Resources"; 323 | outputPaths = ( 324 | ); 325 | runOnlyForDeploymentPostprocessing = 0; 326 | shellPath = /bin/sh; 327 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-TTGDeallocTaskHelper_Tests/Pods-TTGDeallocTaskHelper_Tests-resources.sh\"\n"; 328 | showEnvVarsInLog = 0; 329 | }; 330 | 37904EE6CB54245D66AF4616 /* [CP] Embed Pods Frameworks */ = { 331 | isa = PBXShellScriptBuildPhase; 332 | buildActionMask = 2147483647; 333 | files = ( 334 | ); 335 | inputPaths = ( 336 | ); 337 | name = "[CP] Embed Pods Frameworks"; 338 | outputPaths = ( 339 | ); 340 | runOnlyForDeploymentPostprocessing = 0; 341 | shellPath = /bin/sh; 342 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-TTGDeallocTaskHelper_Tests/Pods-TTGDeallocTaskHelper_Tests-frameworks.sh\"\n"; 343 | showEnvVarsInLog = 0; 344 | }; 345 | 6AEA7AE627A273ACA7C562AA /* [CP] Embed Pods Frameworks */ = { 346 | isa = PBXShellScriptBuildPhase; 347 | buildActionMask = 2147483647; 348 | files = ( 349 | ); 350 | inputPaths = ( 351 | ); 352 | name = "[CP] Embed Pods Frameworks"; 353 | outputPaths = ( 354 | ); 355 | runOnlyForDeploymentPostprocessing = 0; 356 | shellPath = /bin/sh; 357 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-TTGDeallocTaskHelper_Example/Pods-TTGDeallocTaskHelper_Example-frameworks.sh\"\n"; 358 | showEnvVarsInLog = 0; 359 | }; 360 | 7A5B5FCDF3B47B99C4BFB610 /* [CP] Copy Pods Resources */ = { 361 | isa = PBXShellScriptBuildPhase; 362 | buildActionMask = 2147483647; 363 | files = ( 364 | ); 365 | inputPaths = ( 366 | ); 367 | name = "[CP] Copy Pods Resources"; 368 | outputPaths = ( 369 | ); 370 | runOnlyForDeploymentPostprocessing = 0; 371 | shellPath = /bin/sh; 372 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-TTGDeallocTaskHelper_Example/Pods-TTGDeallocTaskHelper_Example-resources.sh\"\n"; 373 | showEnvVarsInLog = 0; 374 | }; 375 | F9D7180F0AACFCE3B4AEF865 /* [CP] Check Pods Manifest.lock */ = { 376 | isa = PBXShellScriptBuildPhase; 377 | buildActionMask = 2147483647; 378 | files = ( 379 | ); 380 | inputPaths = ( 381 | ); 382 | name = "[CP] Check Pods Manifest.lock"; 383 | outputPaths = ( 384 | ); 385 | runOnlyForDeploymentPostprocessing = 0; 386 | shellPath = /bin/sh; 387 | shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; 388 | showEnvVarsInLog = 0; 389 | }; 390 | /* End PBXShellScriptBuildPhase section */ 391 | 392 | /* Begin PBXSourcesBuildPhase section */ 393 | 6003F586195388D20070C39A /* Sources */ = { 394 | isa = PBXSourcesBuildPhase; 395 | buildActionMask = 2147483647; 396 | files = ( 397 | 6003F59E195388D20070C39A /* TTGAppDelegate.m in Sources */, 398 | 6003F5A7195388D20070C39A /* TTGViewController.m in Sources */, 399 | 6003F59A195388D20070C39A /* main.m in Sources */, 400 | ); 401 | runOnlyForDeploymentPostprocessing = 0; 402 | }; 403 | 6003F5AA195388D20070C39A /* Sources */ = { 404 | isa = PBXSourcesBuildPhase; 405 | buildActionMask = 2147483647; 406 | files = ( 407 | 6003F5BC195388D20070C39A /* Tests.m in Sources */, 408 | ); 409 | runOnlyForDeploymentPostprocessing = 0; 410 | }; 411 | /* End PBXSourcesBuildPhase section */ 412 | 413 | /* Begin PBXTargetDependency section */ 414 | 6003F5B4195388D20070C39A /* PBXTargetDependency */ = { 415 | isa = PBXTargetDependency; 416 | target = 6003F589195388D20070C39A /* TTGDeallocTaskHelper_Example */; 417 | targetProxy = 6003F5B3195388D20070C39A /* PBXContainerItemProxy */; 418 | }; 419 | /* End PBXTargetDependency section */ 420 | 421 | /* Begin PBXVariantGroup section */ 422 | 6003F596195388D20070C39A /* InfoPlist.strings */ = { 423 | isa = PBXVariantGroup; 424 | children = ( 425 | 6003F597195388D20070C39A /* en */, 426 | ); 427 | name = InfoPlist.strings; 428 | sourceTree = ""; 429 | }; 430 | 6003F5B8195388D20070C39A /* InfoPlist.strings */ = { 431 | isa = PBXVariantGroup; 432 | children = ( 433 | 6003F5B9195388D20070C39A /* en */, 434 | ); 435 | name = InfoPlist.strings; 436 | sourceTree = ""; 437 | }; 438 | /* End PBXVariantGroup section */ 439 | 440 | /* Begin XCBuildConfiguration section */ 441 | 6003F5BD195388D20070C39A /* Debug */ = { 442 | isa = XCBuildConfiguration; 443 | buildSettings = { 444 | ALWAYS_SEARCH_USER_PATHS = NO; 445 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 446 | CLANG_CXX_LIBRARY = "libc++"; 447 | CLANG_ENABLE_MODULES = YES; 448 | CLANG_ENABLE_OBJC_ARC = YES; 449 | CLANG_WARN_BOOL_CONVERSION = 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_INT_CONVERSION = YES; 455 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 456 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 457 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 458 | COPY_PHASE_STRIP = NO; 459 | ENABLE_TESTABILITY = YES; 460 | GCC_C_LANGUAGE_STANDARD = gnu99; 461 | GCC_DYNAMIC_NO_PIC = NO; 462 | GCC_OPTIMIZATION_LEVEL = 0; 463 | GCC_PREPROCESSOR_DEFINITIONS = ( 464 | "DEBUG=1", 465 | "$(inherited)", 466 | ); 467 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 468 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 469 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 470 | GCC_WARN_UNDECLARED_SELECTOR = YES; 471 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 472 | GCC_WARN_UNUSED_FUNCTION = YES; 473 | GCC_WARN_UNUSED_VARIABLE = YES; 474 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 475 | ONLY_ACTIVE_ARCH = YES; 476 | SDKROOT = iphoneos; 477 | TARGETED_DEVICE_FAMILY = "1,2"; 478 | }; 479 | name = Debug; 480 | }; 481 | 6003F5BE195388D20070C39A /* Release */ = { 482 | isa = XCBuildConfiguration; 483 | buildSettings = { 484 | ALWAYS_SEARCH_USER_PATHS = NO; 485 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 486 | CLANG_CXX_LIBRARY = "libc++"; 487 | CLANG_ENABLE_MODULES = YES; 488 | CLANG_ENABLE_OBJC_ARC = YES; 489 | CLANG_WARN_BOOL_CONVERSION = YES; 490 | CLANG_WARN_CONSTANT_CONVERSION = YES; 491 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 492 | CLANG_WARN_EMPTY_BODY = YES; 493 | CLANG_WARN_ENUM_CONVERSION = YES; 494 | CLANG_WARN_INT_CONVERSION = YES; 495 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 496 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 497 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 498 | COPY_PHASE_STRIP = YES; 499 | ENABLE_NS_ASSERTIONS = NO; 500 | GCC_C_LANGUAGE_STANDARD = gnu99; 501 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 502 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 503 | GCC_WARN_UNDECLARED_SELECTOR = YES; 504 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 505 | GCC_WARN_UNUSED_FUNCTION = YES; 506 | GCC_WARN_UNUSED_VARIABLE = YES; 507 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 508 | SDKROOT = iphoneos; 509 | TARGETED_DEVICE_FAMILY = "1,2"; 510 | VALIDATE_PRODUCT = YES; 511 | }; 512 | name = Release; 513 | }; 514 | 6003F5C0195388D20070C39A /* Debug */ = { 515 | isa = XCBuildConfiguration; 516 | baseConfigurationReference = 272C22092FA69F6176959206 /* Pods-TTGDeallocTaskHelper_Example.debug.xcconfig */; 517 | buildSettings = { 518 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 519 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 520 | GCC_PREFIX_HEADER = "TTGDeallocTaskHelper/TTGDeallocTaskHelper-Prefix.pch"; 521 | INFOPLIST_FILE = "TTGDeallocTaskHelper/TTGDeallocTaskHelper-Info.plist"; 522 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 523 | MODULE_NAME = ExampleApp; 524 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}"; 525 | PRODUCT_NAME = "$(TARGET_NAME)"; 526 | WRAPPER_EXTENSION = app; 527 | }; 528 | name = Debug; 529 | }; 530 | 6003F5C1195388D20070C39A /* Release */ = { 531 | isa = XCBuildConfiguration; 532 | baseConfigurationReference = 28BB8080C7E86B8BC52AD87B /* Pods-TTGDeallocTaskHelper_Example.release.xcconfig */; 533 | buildSettings = { 534 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 535 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 536 | GCC_PREFIX_HEADER = "TTGDeallocTaskHelper/TTGDeallocTaskHelper-Prefix.pch"; 537 | INFOPLIST_FILE = "TTGDeallocTaskHelper/TTGDeallocTaskHelper-Info.plist"; 538 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 539 | MODULE_NAME = ExampleApp; 540 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}"; 541 | PRODUCT_NAME = "$(TARGET_NAME)"; 542 | WRAPPER_EXTENSION = app; 543 | }; 544 | name = Release; 545 | }; 546 | 6003F5C3195388D20070C39A /* Debug */ = { 547 | isa = XCBuildConfiguration; 548 | baseConfigurationReference = 6F5DF751E65E59CE42C3B9B2 /* Pods-TTGDeallocTaskHelper_Tests.debug.xcconfig */; 549 | buildSettings = { 550 | BUNDLE_LOADER = "$(TEST_HOST)"; 551 | FRAMEWORK_SEARCH_PATHS = ( 552 | "$(SDKROOT)/Developer/Library/Frameworks", 553 | "$(inherited)", 554 | "$(DEVELOPER_FRAMEWORKS_DIR)", 555 | ); 556 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 557 | GCC_PREFIX_HEADER = "Tests/Tests-Prefix.pch"; 558 | GCC_PREPROCESSOR_DEFINITIONS = ( 559 | "DEBUG=1", 560 | "$(inherited)", 561 | ); 562 | INFOPLIST_FILE = "Tests/Tests-Info.plist"; 563 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}"; 564 | PRODUCT_NAME = "$(TARGET_NAME)"; 565 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TTGDeallocTaskHelper_Example.app/TTGDeallocTaskHelper_Example"; 566 | WRAPPER_EXTENSION = xctest; 567 | }; 568 | name = Debug; 569 | }; 570 | 6003F5C4195388D20070C39A /* Release */ = { 571 | isa = XCBuildConfiguration; 572 | baseConfigurationReference = EF57150A5BCB85CB025F8147 /* Pods-TTGDeallocTaskHelper_Tests.release.xcconfig */; 573 | buildSettings = { 574 | BUNDLE_LOADER = "$(TEST_HOST)"; 575 | FRAMEWORK_SEARCH_PATHS = ( 576 | "$(SDKROOT)/Developer/Library/Frameworks", 577 | "$(inherited)", 578 | "$(DEVELOPER_FRAMEWORKS_DIR)", 579 | ); 580 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 581 | GCC_PREFIX_HEADER = "Tests/Tests-Prefix.pch"; 582 | INFOPLIST_FILE = "Tests/Tests-Info.plist"; 583 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}"; 584 | PRODUCT_NAME = "$(TARGET_NAME)"; 585 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TTGDeallocTaskHelper_Example.app/TTGDeallocTaskHelper_Example"; 586 | WRAPPER_EXTENSION = xctest; 587 | }; 588 | name = Release; 589 | }; 590 | /* End XCBuildConfiguration section */ 591 | 592 | /* Begin XCConfigurationList section */ 593 | 6003F585195388D10070C39A /* Build configuration list for PBXProject "TTGDeallocTaskHelper" */ = { 594 | isa = XCConfigurationList; 595 | buildConfigurations = ( 596 | 6003F5BD195388D20070C39A /* Debug */, 597 | 6003F5BE195388D20070C39A /* Release */, 598 | ); 599 | defaultConfigurationIsVisible = 0; 600 | defaultConfigurationName = Release; 601 | }; 602 | 6003F5BF195388D20070C39A /* Build configuration list for PBXNativeTarget "TTGDeallocTaskHelper_Example" */ = { 603 | isa = XCConfigurationList; 604 | buildConfigurations = ( 605 | 6003F5C0195388D20070C39A /* Debug */, 606 | 6003F5C1195388D20070C39A /* Release */, 607 | ); 608 | defaultConfigurationIsVisible = 0; 609 | defaultConfigurationName = Release; 610 | }; 611 | 6003F5C2195388D20070C39A /* Build configuration list for PBXNativeTarget "TTGDeallocTaskHelper_Tests" */ = { 612 | isa = XCConfigurationList; 613 | buildConfigurations = ( 614 | 6003F5C3195388D20070C39A /* Debug */, 615 | 6003F5C4195388D20070C39A /* Release */, 616 | ); 617 | defaultConfigurationIsVisible = 0; 618 | defaultConfigurationName = Release; 619 | }; 620 | /* End XCConfigurationList section */ 621 | }; 622 | rootObject = 6003F582195388D10070C39A /* Project object */; 623 | } 624 | -------------------------------------------------------------------------------- /Example/TTGDeallocTaskHelper.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/TTGDeallocTaskHelper.xcodeproj/xcshareddata/xcschemes/TTGDeallocTaskHelper-Example.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 49 | 50 | 51 | 52 | 53 | 54 | 64 | 66 | 72 | 73 | 74 | 75 | 76 | 77 | 83 | 85 | 91 | 92 | 93 | 94 | 96 | 97 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /Example/TTGDeallocTaskHelper.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Example/TTGDeallocTaskHelper/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "ipad", 35 | "size" : "29x29", 36 | "scale" : "1x" 37 | }, 38 | { 39 | "idiom" : "ipad", 40 | "size" : "29x29", 41 | "scale" : "2x" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "size" : "40x40", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "40x40", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "76x76", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "76x76", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "size" : "83.5x83.5", 66 | "scale" : "2x" 67 | } 68 | ], 69 | "info" : { 70 | "version" : 1, 71 | "author" : "xcode" 72 | } 73 | } -------------------------------------------------------------------------------- /Example/TTGDeallocTaskHelper/Images.xcassets/LaunchImage.launchimage/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "orientation" : "portrait", 5 | "idiom" : "iphone", 6 | "extent" : "full-screen", 7 | "minimum-system-version" : "7.0", 8 | "scale" : "2x" 9 | }, 10 | { 11 | "orientation" : "portrait", 12 | "idiom" : "iphone", 13 | "subtype" : "retina4", 14 | "extent" : "full-screen", 15 | "minimum-system-version" : "7.0", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "orientation" : "portrait", 20 | "idiom" : "ipad", 21 | "extent" : "full-screen", 22 | "minimum-system-version" : "7.0", 23 | "scale" : "1x" 24 | }, 25 | { 26 | "orientation" : "landscape", 27 | "idiom" : "ipad", 28 | "extent" : "full-screen", 29 | "minimum-system-version" : "7.0", 30 | "scale" : "1x" 31 | }, 32 | { 33 | "orientation" : "portrait", 34 | "idiom" : "ipad", 35 | "extent" : "full-screen", 36 | "minimum-system-version" : "7.0", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "orientation" : "landscape", 41 | "idiom" : "ipad", 42 | "extent" : "full-screen", 43 | "minimum-system-version" : "7.0", 44 | "scale" : "2x" 45 | } 46 | ], 47 | "info" : { 48 | "version" : 1, 49 | "author" : "xcode" 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /Example/TTGDeallocTaskHelper/Launch Screen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 26 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /Example/TTGDeallocTaskHelper/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 30 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /Example/TTGDeallocTaskHelper/TTGAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // TTGAppDelegate.h 3 | // TTGDeallocTaskHelper 4 | // 5 | // Created by zekunyan on 07/17/2016. 6 | // Copyright (c) 2016 zekunyan. All rights reserved. 7 | // 8 | 9 | @import UIKit; 10 | 11 | @interface TTGAppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Example/TTGDeallocTaskHelper/TTGAppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // TTGAppDelegate.m 3 | // TTGDeallocTaskHelper 4 | // 5 | // Created by zekunyan on 07/17/2016. 6 | // Copyright (c) 2016 zekunyan. All rights reserved. 7 | // 8 | 9 | #import "TTGAppDelegate.h" 10 | 11 | @implementation TTGAppDelegate 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Example/TTGDeallocTaskHelper/TTGDeallocTaskHelper-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1 25 | LSRequiresIPhoneOS 26 | 27 | UILaunchStoryboardName 28 | Launch Screen 29 | UIMainStoryboardFile 30 | Main 31 | UIRequiredDeviceCapabilities 32 | 33 | armv7 34 | 35 | UISupportedInterfaceOrientations 36 | 37 | UIInterfaceOrientationPortrait 38 | 39 | UISupportedInterfaceOrientations~ipad 40 | 41 | UIInterfaceOrientationPortrait 42 | UIInterfaceOrientationPortraitUpsideDown 43 | UIInterfaceOrientationLandscapeLeft 44 | UIInterfaceOrientationLandscapeRight 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /Example/TTGDeallocTaskHelper/TTGDeallocTaskHelper-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header 3 | // 4 | // The contents of this file are implicitly included at the beginning of every source file. 5 | // 6 | 7 | #import 8 | 9 | #ifndef __IPHONE_5_0 10 | #warning "This project uses features only available in iOS SDK 5.0 and later." 11 | #endif 12 | 13 | #ifdef __OBJC__ 14 | @import UIKit; 15 | @import Foundation; 16 | #endif 17 | -------------------------------------------------------------------------------- /Example/TTGDeallocTaskHelper/TTGViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // TTGViewController.h 3 | // TTGDeallocTaskHelper 4 | // 5 | // Created by zekunyan on 07/17/2016. 6 | // Copyright (c) 2016 zekunyan. All rights reserved. 7 | // 8 | 9 | @import UIKit; 10 | 11 | @interface TTGViewController : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Example/TTGDeallocTaskHelper/TTGViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // TTGViewController.m 3 | // TTGDeallocTaskHelper 4 | // 5 | // Created by zekunyan on 07/17/2016. 6 | // Copyright (c) 2016 zekunyan. All rights reserved. 7 | // 8 | 9 | #import "TTGViewController.h" 10 | #import "NSObject+TTGDeallocTaskHelper.h" 11 | 12 | @interface TTGViewController () 13 | @property (weak, nonatomic) IBOutlet UITextView *infoTextView; 14 | @end 15 | 16 | @implementation TTGViewController 17 | 18 | - (void)viewDidLoad { 19 | [super viewDidLoad]; 20 | 21 | } 22 | 23 | - (IBAction)runDemo:(id)sender { 24 | [self showInfo:@"-----------------------------------"]; 25 | 26 | // Force object release 27 | @autoreleasepool { 28 | id object = [NSObject new]; 29 | 30 | // Add task 31 | NSUInteger identifier1 = [object ttg_addDeallocTask:^(__unsafe_unretained id object, NSUInteger identifier) { 32 | [self showInfo:[NSString stringWithFormat:@"Object: %@ dealloc. Task: %ld", object, (unsigned long)identifier]]; 33 | }]; 34 | [self showInfo:[NSString stringWithFormat:@"Dealloc task %ld create.", (unsigned long)identifier1]]; 35 | 36 | // Add task 37 | NSUInteger identifier2 = [object ttg_addDeallocTask:^(__unsafe_unretained id object, NSUInteger identifier) { 38 | [self showInfo:[NSString stringWithFormat:@"Object: %@ dealloc. Task: %ld", object, (unsigned long)identifier]]; 39 | }]; 40 | [self showInfo:[NSString stringWithFormat:@"Dealloc task %ld create.", (unsigned long)identifier2]]; 41 | 42 | // Add task 43 | NSUInteger identifier3 = [object ttg_addDeallocTask:^(__unsafe_unretained id object, NSUInteger identifier) { 44 | [self showInfo:[NSString stringWithFormat:@"Object: %@ dealloc. Task: %ld", object, (unsigned long)identifier]]; 45 | }]; 46 | [self showInfo:[NSString stringWithFormat:@"Dealloc task %ld create.", (unsigned long)identifier3]]; 47 | 48 | // Remove task 49 | [self showInfo:[NSString stringWithFormat:@"Remove task: %ld", (unsigned long)identifier1]]; 50 | [object ttg_removeDeallocTaskByIdentifier:identifier1]; 51 | } 52 | } 53 | 54 | - (void)showInfo:(NSString *)info { 55 | _infoTextView.text = [NSString stringWithFormat:@"%@\n%@", _infoTextView.text, info]; 56 | [_infoTextView scrollRangeToVisible:NSMakeRange(_infoTextView.text.length - 1, 0)]; 57 | } 58 | 59 | @end 60 | -------------------------------------------------------------------------------- /Example/TTGDeallocTaskHelper/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /Example/TTGDeallocTaskHelper/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // TTGDeallocTaskHelper 4 | // 5 | // Created by zekunyan on 07/17/2016. 6 | // Copyright (c) 2016 zekunyan. All rights reserved. 7 | // 8 | 9 | @import UIKit; 10 | #import "TTGAppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) 13 | { 14 | @autoreleasepool { 15 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([TTGAppDelegate class])); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Example/Tests/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 | CFBundlePackageType 14 | BNDL 15 | CFBundleShortVersionString 16 | 1.0 17 | CFBundleSignature 18 | ???? 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /Example/Tests/Tests-Prefix.pch: -------------------------------------------------------------------------------- 1 | // The contents of this file are implicitly included at the beginning of every test case source file. 2 | 3 | #ifdef __OBJC__ 4 | 5 | 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /Example/Tests/Tests.m: -------------------------------------------------------------------------------- 1 | // 2 | // TTGDeallocTaskHelperTests.m 3 | // TTGDeallocTaskHelperTests 4 | // 5 | // Created by zekunyan on 07/17/2016. 6 | // Copyright (c) 2016 zekunyan. All rights reserved. 7 | // 8 | 9 | @import XCTest; 10 | 11 | #import 12 | #import 13 | 14 | @interface TestObject : NSObject 15 | @property (nonatomic, strong) NSString *name; 16 | @property (nonatomic, assign) NSUInteger num; 17 | @end 18 | 19 | @implementation TestObject 20 | 21 | - (void)func1 { 22 | NSLog(@"TestObject func1: %ld, %@", _num, _name); 23 | } 24 | 25 | @end 26 | 27 | @interface Tests : XCTestCase 28 | 29 | @end 30 | 31 | @implementation Tests 32 | 33 | - (void)setUp { 34 | [super setUp]; 35 | } 36 | 37 | - (void)tearDown { 38 | [super tearDown]; 39 | } 40 | 41 | - (void)testSingleDeallocTask { 42 | __block BOOL flag = NO; 43 | __block NSUInteger num = 0; 44 | __block NSString *name = nil; 45 | 46 | { 47 | TestObject *test1 = [TestObject new]; 48 | test1.num = 1; 49 | test1.name = [NSString stringWithFormat:@"name: %ld", test1.num]; 50 | 51 | [test1 ttg_addDeallocTask:^(__unsafe_unretained TestObject *object, NSUInteger identifier) { 52 | NSLog(@"test object dealloc task: %@, identifier: %ld", object, identifier); 53 | [object func1]; 54 | flag = YES; 55 | num = object.num; 56 | name = object.name; 57 | }]; 58 | 59 | } 60 | 61 | XCTAssert(flag); 62 | XCTAssert(num == 1); 63 | XCTAssert(name == nil); 64 | } 65 | 66 | - (void)testRemoveAllTask { 67 | NSMutableIndexSet *identifierSet = [NSMutableIndexSet new]; 68 | dispatch_group_t group = dispatch_group_create(); 69 | NSUInteger taskCount = 100; 70 | 71 | __block NSUInteger num = 0; 72 | __block pthread_mutex_t lock; 73 | pthread_mutex_init(&lock, NULL); 74 | 75 | TestObject *testObject = [TestObject new]; 76 | 77 | for (NSUInteger i = 0; i < taskCount; i++) { 78 | dispatch_group_enter(group); 79 | dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ 80 | 81 | // Test multi thread add tasks 82 | NSUInteger newIdentifier = [testObject ttg_addDeallocTask:^(__unsafe_unretained TestObject *object, NSUInteger identifier) { 83 | pthread_mutex_lock(&lock); 84 | num += 1; 85 | pthread_mutex_unlock(&lock); 86 | }]; 87 | 88 | pthread_mutex_lock(&lock); 89 | [identifierSet addIndex:newIdentifier]; 90 | pthread_mutex_unlock(&lock); 91 | 92 | dispatch_group_leave(group); 93 | }); 94 | } 95 | 96 | dispatch_group_wait(group, DISPATCH_TIME_FOREVER); 97 | 98 | // Remove all dealloc tasks 99 | [testObject ttg_removeAllDeallocTasks]; 100 | testObject = nil; 101 | 102 | NSLog(@"num: %ld, identifiers: %ld, %@", num, identifierSet.count, identifierSet); 103 | XCTAssert(num == 0); 104 | XCTAssert(identifierSet.count == taskCount); 105 | } 106 | 107 | - (void)testMultiThreadDeallocTask { 108 | NSMutableIndexSet *identifierSet = [NSMutableIndexSet new]; 109 | dispatch_group_t group = dispatch_group_create(); 110 | NSUInteger objectCount = 1000; 111 | NSUInteger taskCount = 1000; 112 | 113 | __block NSUInteger num = 0; 114 | __block pthread_mutex_t lock; 115 | pthread_mutex_init(&lock, NULL); 116 | 117 | { 118 | for (NSUInteger j = 0; j < objectCount; j++) { 119 | TestObject *testObject = [TestObject new]; 120 | 121 | for (NSUInteger i = 0; i < taskCount; i++) { 122 | dispatch_group_enter(group); 123 | dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ 124 | 125 | // Test multi thread add tasks 126 | NSUInteger newIdentifier = [testObject ttg_addDeallocTask:^(__unsafe_unretained TestObject *object, NSUInteger identifier) { 127 | pthread_mutex_lock(&lock); 128 | num += 1; 129 | pthread_mutex_unlock(&lock); 130 | dispatch_group_leave(group); 131 | }]; 132 | 133 | pthread_mutex_lock(&lock); 134 | [identifierSet addIndex:newIdentifier]; 135 | pthread_mutex_unlock(&lock); 136 | 137 | if (i == 0) { 138 | // Test multi thread remove tasks 139 | [testObject ttg_removeDeallocTaskByIdentifier:newIdentifier]; 140 | dispatch_group_leave(group); 141 | } 142 | }); 143 | } 144 | } 145 | } 146 | 147 | dispatch_group_wait(group, DISPATCH_TIME_FOREVER); 148 | 149 | NSLog(@"num: %ld, identifiers: %ld", num, identifierSet.count); 150 | XCTAssert(num == objectCount * taskCount - objectCount); 151 | XCTAssert(identifierSet.count == objectCount * taskCount); 152 | } 153 | 154 | @end 155 | 156 | -------------------------------------------------------------------------------- /Example/Tests/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2016 zekunyan 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 | # TTGDeallocTaskHelper 2 | 3 | [![CI Status](http://img.shields.io/travis/zekunyan/TTGDeallocTaskHelper.svg?style=flat)](https://travis-ci.org/zekunyan/TTGDeallocTaskHelper) 4 | [![Version](https://img.shields.io/cocoapods/v/TTGDeallocTaskHelper.svg?style=flat)](http://cocoapods.org/pods/TTGDeallocTaskHelper) 5 | [![License](https://img.shields.io/cocoapods/l/TTGDeallocTaskHelper.svg?style=flat)](http://cocoapods.org/pods/TTGDeallocTaskHelper) 6 | [![Platform](https://img.shields.io/cocoapods/p/TTGDeallocTaskHelper.svg?style=flat)](http://cocoapods.org/pods/TTGDeallocTaskHelper) 7 | 8 | ## What 9 | 10 | TTGDeallocTaskHelper is useful to perform tasks after object dealloc. 11 | 12 | ## Requirements 13 | 14 | * iOS 7 15 | * macOS 10.8 16 | * tvOS 9.0 17 | * watchOS 2.0 18 | 19 | ## Installation 20 | 21 | TTGDeallocTaskHelper is available through [CocoaPods](http://cocoapods.org). To install 22 | it, simply add the following line to your Podfile: 23 | 24 | ```ruby 25 | pod "TTGDeallocTaskHelper" 26 | ``` 27 | 28 | ## Usage 29 | ``` 30 | #import "NSObject+TTGDeallocTaskHelper.h" 31 | 32 | // Some object 33 | id object; 34 | 35 | // Add dealloc task 36 | [object ttg_addDeallocTask:^(__unsafe_unretained id object, NSUInteger identifier) { 37 | // After object dealloc, do you job. 38 | // ... 39 | }]; 40 | 41 | // object has been released. And the tasks will be performed. 42 | object = nil; 43 | ``` 44 | 45 | 46 | ## API 47 | Callback block definition. 48 | 49 | ``` 50 | typedef void (^TTGDeallocTaskBlock)(__unsafe_unretained id object, NSUInteger identifier); 51 | ``` 52 | 53 | Add dealloc task. 54 | ``` 55 | /** 56 | * Add dealloc task to object. 57 | * 58 | * @param taskBlock The dealloc task 59 | * 60 | * @return The task identifier 61 | */ 62 | - (NSUInteger)ttg_addDeallocTask:(TTGDeallocTaskBlock)taskBlock; 63 | ``` 64 | 65 | Remove specific task by identifier. 66 | ``` 67 | /** 68 | * Remove task by identifier. 69 | * 70 | * @param identifier The task identifier 71 | * 72 | * @return Remove success or not 73 | */ 74 | - (BOOL)ttg_removeDeallocTaskByIdentifier:(NSUInteger)identifier; 75 | ``` 76 | 77 | Remove all dealloc tasks. 78 | ``` 79 | /** 80 | * Remove all dealloc tasks. 81 | */ 82 | - (void)ttg_removeAllDeallocTasks; 83 | ``` 84 | 85 | ## Example 86 | 87 | To run the example project, clone the repo, and run `pod install` from the Example directory first. 88 | 89 | ## Author 90 | 91 | zekunyan, zekunyan@163.com 92 | 93 | ## License 94 | 95 | TTGDeallocTaskHelper is available under the MIT license. See the LICENSE file for more info. 96 | -------------------------------------------------------------------------------- /TTGDeallocTaskHelper.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = 'TTGDeallocTaskHelper' 3 | s.version = '0.1.1' 4 | s.summary = 'NSObject Category to perform callback tasks after object dealloc.' 5 | 6 | s.description = <<-DESC 7 | TTGDeallocTaskHelper is a NSObject Category to perform callback tasks after object dealloc. 8 | DESC 9 | 10 | s.homepage = 'https://github.com/zekunyan/TTGDeallocTaskHelper' 11 | s.license = { :type => 'MIT', :file => 'LICENSE' } 12 | s.author = { 'zekunyan' => 'zekunyan@163.com' } 13 | s.source = { :git => 'https://github.com/zekunyan/TTGDeallocTaskHelper.git', :tag => s.version.to_s } 14 | s.social_media_url = 'http://tutuge.me' 15 | 16 | s.osx.deployment_target = '10.8' 17 | s.ios.deployment_target = '7.0' 18 | s.tvos.deployment_target = '9.0' 19 | s.watchos.deployment_target = '2.0' 20 | 21 | s.requires_arc = true 22 | 23 | s.source_files = 'TTGDeallocTaskHelper/Classes/*' 24 | s.public_header_files = 'TTGDeallocTaskHelper/Classes/*.h' 25 | 26 | s.frameworks = 'CoreFoundation' 27 | end 28 | -------------------------------------------------------------------------------- /TTGDeallocTaskHelper/Assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zekunyan/TTGDeallocTaskHelper/673496422933ff1a55d88a9bb9a94be4fa40952d/TTGDeallocTaskHelper/Assets/.gitkeep -------------------------------------------------------------------------------- /TTGDeallocTaskHelper/Classes/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zekunyan/TTGDeallocTaskHelper/673496422933ff1a55d88a9bb9a94be4fa40952d/TTGDeallocTaskHelper/Classes/.gitkeep -------------------------------------------------------------------------------- /TTGDeallocTaskHelper/Classes/NSObject+TTGDeallocTaskHelper.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSObject+TTGDeallocTaskHelper.h 3 | // TTGDeallocTaskHelper 4 | // 5 | // Created by tutuge on 16/7/16. 6 | // Copyright © 2016年 tutuge. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | 12 | /** 13 | * Dealloc task block definition. 14 | * 15 | * @param target the host object 16 | * @param identifier task identifier 17 | */ 18 | typedef void (^TTGDeallocTaskBlock)(__unsafe_unretained id object, NSUInteger identifier); 19 | 20 | /** 21 | * illegal identifier. 22 | */ 23 | extern const NSUInteger TTGDeallocTaskIllegalIdentifier; 24 | 25 | @interface NSObject (TTGDeallocTaskHelper) 26 | 27 | /** 28 | * Add dealloc task to object. 29 | * 30 | * @param taskBlock The dealloc task 31 | * 32 | * @return The task identifier 33 | */ 34 | - (NSUInteger)ttg_addDeallocTask:(TTGDeallocTaskBlock)taskBlock; 35 | 36 | /** 37 | * Remove task by identifier. 38 | * 39 | * @param identifier The task identifier 40 | * 41 | * @return Remove success or not 42 | */ 43 | - (BOOL)ttg_removeDeallocTaskByIdentifier:(NSUInteger)identifier; 44 | 45 | 46 | /** 47 | * Remove all dealloc tasks. 48 | */ 49 | - (void)ttg_removeAllDeallocTasks; 50 | 51 | @end 52 | -------------------------------------------------------------------------------- /TTGDeallocTaskHelper/Classes/NSObject+TTGDeallocTaskHelper.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSObject+TTGDeallocTaskHelper.m 3 | // TTGDeallocTaskHelper 4 | // 5 | // Created by tutuge on 16/7/16. 6 | // Copyright © 2016年 tutuge. All rights reserved. 7 | // 8 | 9 | #import "NSObject+TTGDeallocTaskHelper.h" 10 | #include 11 | #import 12 | #import 13 | 14 | static const char TTGDeallocTaskModelKey; // Associated object key 15 | const NSUInteger TTGDeallocTaskIllegalIdentifier = 0; // illegal identifier 16 | 17 | /** 18 | * Private model 19 | */ 20 | @interface TTGDeallocTaskModel : NSObject 21 | @property (nonatomic, assign) pthread_mutex_t lock; 22 | @property (nonatomic, strong) NSMutableDictionary *tasksDict; 23 | @property (nonatomic, unsafe_unretained) id target; 24 | @end 25 | 26 | @implementation TTGDeallocTaskModel 27 | 28 | - (instancetype)initWithTarget:(id)target { 29 | self = [super init]; 30 | if (self) { 31 | _target = target; 32 | pthread_mutex_init(&_lock, NULL); 33 | _tasksDict = [NSMutableDictionary new]; 34 | } 35 | return self; 36 | } 37 | 38 | - (NSUInteger)addTask:(TTGDeallocTaskBlock)taskBlock { 39 | // Global increase identifier 40 | static volatile int64_t globalIdentifier = 0; 41 | 42 | if (!taskBlock) { 43 | return TTGDeallocTaskIllegalIdentifier; 44 | } 45 | 46 | NSUInteger newIdentifier = (NSUInteger)OSAtomicIncrement64(&globalIdentifier); 47 | NSNumber *newIdentifierNumber = @(newIdentifier); 48 | 49 | if (newIdentifierNumber) { 50 | pthread_mutex_lock(&_lock); 51 | [_tasksDict setObject:[taskBlock copy] forKey:newIdentifierNumber]; 52 | pthread_mutex_unlock(&_lock); 53 | return newIdentifier; 54 | } else { 55 | return TTGDeallocTaskIllegalIdentifier; 56 | } 57 | } 58 | 59 | - (BOOL)removeTaskWithIdentifier:(NSUInteger)identifier { 60 | if (identifier == TTGDeallocTaskIllegalIdentifier) { 61 | return NO; 62 | } 63 | 64 | NSNumber *identifierNumber = [NSNumber numberWithUnsignedInteger:identifier]; 65 | if (identifierNumber) { 66 | pthread_mutex_lock(&_lock); 67 | [_tasksDict removeObjectForKey:identifierNumber]; 68 | pthread_mutex_unlock(&_lock); 69 | return YES; 70 | } else { 71 | return NO; 72 | } 73 | } 74 | 75 | - (void)removeAllTask { 76 | pthread_mutex_lock(&_lock); 77 | [_tasksDict removeAllObjects]; 78 | pthread_mutex_unlock(&_lock); 79 | } 80 | 81 | - (void)dealloc { 82 | [_tasksDict enumerateKeysAndObjectsUsingBlock:^(NSNumber *identifier, TTGDeallocTaskBlock block, BOOL * _Nonnull stop) { 83 | block(_target, identifier.unsignedIntegerValue); 84 | }]; 85 | pthread_mutex_destroy(&_lock); 86 | } 87 | 88 | @end 89 | 90 | @implementation NSObject (TTGDeallocTaskHelper) 91 | 92 | - (NSUInteger)ttg_addDeallocTask:(TTGDeallocTaskBlock)taskBlock { 93 | if (!taskBlock) { 94 | return TTGDeallocTaskIllegalIdentifier; 95 | } 96 | 97 | TTGDeallocTaskModel *model = nil; 98 | 99 | @synchronized (self) { 100 | model = objc_getAssociatedObject(self, &TTGDeallocTaskModelKey); 101 | if (!model) { 102 | model = [[TTGDeallocTaskModel alloc] initWithTarget:self]; 103 | objc_setAssociatedObject(self, &TTGDeallocTaskModelKey, model, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 104 | } 105 | } 106 | 107 | NSUInteger newIdentifier = [model addTask:taskBlock]; 108 | 109 | return newIdentifier; 110 | } 111 | 112 | - (BOOL)ttg_removeDeallocTaskByIdentifier:(NSUInteger)identifier { 113 | TTGDeallocTaskModel *model = objc_getAssociatedObject(self, &TTGDeallocTaskModelKey); 114 | if (model) { 115 | return [model removeTaskWithIdentifier:identifier]; 116 | } else { 117 | return NO; 118 | } 119 | } 120 | 121 | - (void)ttg_removeAllDeallocTasks { 122 | TTGDeallocTaskModel *model = objc_getAssociatedObject(self, &TTGDeallocTaskModelKey); 123 | if (model) { 124 | [model removeAllTask]; 125 | } 126 | } 127 | 128 | @end 129 | -------------------------------------------------------------------------------- /_Pods.xcodeproj: -------------------------------------------------------------------------------- 1 | Example/Pods/Pods.xcodeproj --------------------------------------------------------------------------------