├── .gitignore ├── .travis.yml ├── Example ├── Podfile ├── Podfile.lock ├── Pods │ ├── Headers │ │ ├── Private │ │ │ ├── TTGDeallocTaskHelper │ │ │ │ └── NSObject+TTGDeallocTaskHelper.h │ │ │ └── TTGNotificationGuard │ │ │ │ └── NSNotificationCenter+TTGNotificationGuard.h │ │ └── Public │ │ │ ├── TTGDeallocTaskHelper │ │ │ └── NSObject+TTGDeallocTaskHelper.h │ │ │ └── TTGNotificationGuard │ │ │ └── NSNotificationCenter+TTGNotificationGuard.h │ ├── Local Podspecs │ │ └── TTGNotificationGuard.podspec.json │ ├── Manifest.lock │ ├── Pods.xcodeproj │ │ └── project.pbxproj │ ├── TTGDeallocTaskHelper │ │ ├── LICENSE │ │ ├── README.md │ │ └── TTGDeallocTaskHelper │ │ │ └── Classes │ │ │ ├── NSObject+TTGDeallocTaskHelper.h │ │ │ └── NSObject+TTGDeallocTaskHelper.m │ └── Target Support Files │ │ ├── Pods-TTGNotificationGuard_Example │ │ ├── Pods-TTGNotificationGuard_Example-acknowledgements.markdown │ │ ├── Pods-TTGNotificationGuard_Example-acknowledgements.plist │ │ ├── Pods-TTGNotificationGuard_Example-dummy.m │ │ ├── Pods-TTGNotificationGuard_Example-frameworks.sh │ │ ├── Pods-TTGNotificationGuard_Example-resources.sh │ │ ├── Pods-TTGNotificationGuard_Example.debug.xcconfig │ │ └── Pods-TTGNotificationGuard_Example.release.xcconfig │ │ ├── Pods-TTGNotificationGuard_Tests │ │ ├── Pods-TTGNotificationGuard_Tests-acknowledgements.markdown │ │ ├── Pods-TTGNotificationGuard_Tests-acknowledgements.plist │ │ ├── Pods-TTGNotificationGuard_Tests-dummy.m │ │ ├── Pods-TTGNotificationGuard_Tests-frameworks.sh │ │ ├── Pods-TTGNotificationGuard_Tests-resources.sh │ │ ├── Pods-TTGNotificationGuard_Tests.debug.xcconfig │ │ └── Pods-TTGNotificationGuard_Tests.release.xcconfig │ │ ├── TTGDeallocTaskHelper │ │ ├── TTGDeallocTaskHelper-dummy.m │ │ ├── TTGDeallocTaskHelper-prefix.pch │ │ └── TTGDeallocTaskHelper.xcconfig │ │ └── TTGNotificationGuard │ │ ├── TTGNotificationGuard-dummy.m │ │ ├── TTGNotificationGuard-prefix.pch │ │ └── TTGNotificationGuard.xcconfig ├── TTGNotificationGuard.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── xcshareddata │ │ └── xcschemes │ │ └── TTGNotificationGuard-Example.xcscheme ├── TTGNotificationGuard.xcworkspace │ └── contents.xcworkspacedata ├── TTGNotificationGuard │ ├── Images.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── LaunchImage.launchimage │ │ │ └── Contents.json │ ├── Main.storyboard │ ├── TTGAppDelegate.h │ ├── TTGAppDelegate.m │ ├── TTGNotificationGuard-Info.plist │ ├── TTGNotificationGuard-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 ├── TTGNotificationGuard.podspec ├── TTGNotificationGuard ├── Assets │ └── .gitkeep └── Classes │ ├── .gitkeep │ ├── NSNotificationCenter+TTGNotificationGuard.h │ └── NSNotificationCenter+TTGNotificationGuard.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: xcode7.3 6 | language: objective-c 7 | # cache: cocoapods 8 | # podfile: Example/Podfile 9 | # before_install: 10 | # - gem install cocoapods # Since Travis is not always on latest version 11 | # - pod install --project-directory=Example 12 | # - pod setup 13 | script: 14 | - xcodebuild -workspace Example/TTGNotificationGuard.xcworkspace -scheme TTGNotificationGuard-Example -sdk iphonesimulator9.3 ONLY_ACTIVE_ARCH=NO CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO | xcpretty 15 | -------------------------------------------------------------------------------- /Example/Podfile: -------------------------------------------------------------------------------- 1 | platform :ios, ‘6.0’ 2 | 3 | target 'TTGNotificationGuard_Example' do 4 | pod 'TTGNotificationGuard', :path => '../' 5 | 6 | target 'TTGNotificationGuard_Tests' do 7 | inherit! :search_paths 8 | 9 | 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /Example/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - TTGDeallocTaskHelper (0.1.0) 3 | - TTGNotificationGuard (0.1.1): 4 | - TTGDeallocTaskHelper 5 | 6 | DEPENDENCIES: 7 | - TTGNotificationGuard (from `../`) 8 | 9 | EXTERNAL SOURCES: 10 | TTGNotificationGuard: 11 | :path: "../" 12 | 13 | SPEC CHECKSUMS: 14 | TTGDeallocTaskHelper: d0428c9ddfb830d81fdb5d35e441c70318bb7bc5 15 | TTGNotificationGuard: 67da7b51506c5b2c7cfaaaafe3c4e7b730b2b740 16 | 17 | PODFILE CHECKSUM: fc960dc7e043c420bde8b6fd6553b7d2962785da 18 | 19 | COCOAPODS: 1.0.1 20 | -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/TTGDeallocTaskHelper/NSObject+TTGDeallocTaskHelper.h: -------------------------------------------------------------------------------- 1 | ../../../TTGDeallocTaskHelper/TTGDeallocTaskHelper/Classes/NSObject+TTGDeallocTaskHelper.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/TTGNotificationGuard/NSNotificationCenter+TTGNotificationGuard.h: -------------------------------------------------------------------------------- 1 | ../../../../../TTGNotificationGuard/Classes/NSNotificationCenter+TTGNotificationGuard.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/TTGDeallocTaskHelper/NSObject+TTGDeallocTaskHelper.h: -------------------------------------------------------------------------------- 1 | ../../../TTGDeallocTaskHelper/TTGDeallocTaskHelper/Classes/NSObject+TTGDeallocTaskHelper.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/TTGNotificationGuard/NSNotificationCenter+TTGNotificationGuard.h: -------------------------------------------------------------------------------- 1 | ../../../../../TTGNotificationGuard/Classes/NSNotificationCenter+TTGNotificationGuard.h -------------------------------------------------------------------------------- /Example/Pods/Local Podspecs/TTGNotificationGuard.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "TTGNotificationGuard", 3 | "version": "0.1.1", 4 | "summary": "Auto remove the observer from NSNotificationCenter after the oberser dealloc.", 5 | "description": "Auto remove the observer from NSNotificationCenter after the oberser dealloc, base on TTGDeallocTaskHelper.", 6 | "homepage": "https://github.com/zekunyan/TTGNotificationGuard", 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/TTGNotificationGuard.git", 16 | "tag": "0.1.1" 17 | }, 18 | "social_media_url": "http://tutuge.me", 19 | "platforms": { 20 | "ios": "6.0" 21 | }, 22 | "requires_arc": true, 23 | "source_files": "TTGNotificationGuard/Classes/**", 24 | "public_header_files": "TTGNotificationGuard/Classes/*.h", 25 | "frameworks": [ 26 | "UIKit", 27 | "CoreFoundation" 28 | ], 29 | "dependencies": { 30 | "TTGDeallocTaskHelper": [ 31 | 32 | ] 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /Example/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - TTGDeallocTaskHelper (0.1.0) 3 | - TTGNotificationGuard (0.1.1): 4 | - TTGDeallocTaskHelper 5 | 6 | DEPENDENCIES: 7 | - TTGNotificationGuard (from `../`) 8 | 9 | EXTERNAL SOURCES: 10 | TTGNotificationGuard: 11 | :path: "../" 12 | 13 | SPEC CHECKSUMS: 14 | TTGDeallocTaskHelper: d0428c9ddfb830d81fdb5d35e441c70318bb7bc5 15 | TTGNotificationGuard: 67da7b51506c5b2c7cfaaaafe3c4e7b730b2b740 16 | 17 | PODFILE CHECKSUM: fc960dc7e043c420bde8b6fd6553b7d2962785da 18 | 19 | COCOAPODS: 1.0.1 20 | -------------------------------------------------------------------------------- /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 | 06C7527AC6C12E35F354712588BA5714 /* NSNotificationCenter+TTGNotificationGuard.h in Headers */ = {isa = PBXBuildFile; fileRef = 329E343451496CD9CE58033C500298D1 /* NSNotificationCenter+TTGNotificationGuard.h */; settings = {ATTRIBUTES = (Public, ); }; }; 11 | 2F32858C0A78E097BD806F49A5D52848 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EBCA801DED542D9C48BB9496E41CB2A7 /* Foundation.framework */; }; 12 | 355421B12F7DA6D9B3514DF4D1650716 /* Pods-TTGNotificationGuard_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B15F9524E6AF02FB16CBFA33AE68DBE /* Pods-TTGNotificationGuard_Example-dummy.m */; }; 13 | 4DE445FD01623948DE2537FBBE5AD204 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1ED1411C548899C28A948508769F77B7 /* UIKit.framework */; }; 14 | 4E3A8A7B74DE353853EF56C2AB9278AD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EBCA801DED542D9C48BB9496E41CB2A7 /* Foundation.framework */; }; 15 | 6930F6453F400AEC470C9E1E8EAF9F1A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EBCA801DED542D9C48BB9496E41CB2A7 /* Foundation.framework */; }; 16 | 6D9C0E4135F27DAE3EF754905F97C746 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 09380E532BB1971AAE638734E57574F9 /* CoreFoundation.framework */; }; 17 | 7230DE522923ECE64520A15EBED3CCF6 /* NSObject+TTGDeallocTaskHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = BE1C30AE062A49A89A86CBEA49B0A350 /* NSObject+TTGDeallocTaskHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; 18 | 78E048C08382010380ADB898E59865FA /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 09380E532BB1971AAE638734E57574F9 /* CoreFoundation.framework */; }; 19 | 821650048E84FB84EDD3B7AC0F2D1A50 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EBCA801DED542D9C48BB9496E41CB2A7 /* Foundation.framework */; }; 20 | 9147753126E0F2CF7EFF6A34B6247B42 /* NSObject+TTGDeallocTaskHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 6AA11CD19ADFFE2E9AFA8A05C9B1093A /* NSObject+TTGDeallocTaskHelper.m */; }; 21 | B3FE31C46419F080954ACBA92A770CAC /* TTGNotificationGuard-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C1D4062C5137D0700C5E674B50A30241 /* TTGNotificationGuard-dummy.m */; }; 22 | B809D46971A9F962301FC40A7317A901 /* NSNotificationCenter+TTGNotificationGuard.m in Sources */ = {isa = PBXBuildFile; fileRef = F7F297065E7678161DD6421F9C6E4F21 /* NSNotificationCenter+TTGNotificationGuard.m */; }; 23 | D02F052B00464B7CA87A88ED60F39813 /* Pods-TTGNotificationGuard_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 80A15EA55E2339F958492755300299E6 /* Pods-TTGNotificationGuard_Tests-dummy.m */; }; 24 | E5189E110CBF2B630D2DF251CA5F4C02 /* TTGDeallocTaskHelper-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1067FC318A0A5D680C9A30B993A21D2E /* TTGDeallocTaskHelper-dummy.m */; }; 25 | F784B5786B848BDA3954E2F59CB24402 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1ED1411C548899C28A948508769F77B7 /* UIKit.framework */; }; 26 | /* End PBXBuildFile section */ 27 | 28 | /* Begin PBXContainerItemProxy section */ 29 | 54868D999E84983029CBA7EF8F3F45C5 /* PBXContainerItemProxy */ = { 30 | isa = PBXContainerItemProxy; 31 | containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 32 | proxyType = 1; 33 | remoteGlobalIDString = F1F71BA9763A469C2CEADE28A1E7CC04; 34 | remoteInfo = TTGDeallocTaskHelper; 35 | }; 36 | DEF54353C206E976714591BB15E8D364 /* PBXContainerItemProxy */ = { 37 | isa = PBXContainerItemProxy; 38 | containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 39 | proxyType = 1; 40 | remoteGlobalIDString = F1F71BA9763A469C2CEADE28A1E7CC04; 41 | remoteInfo = TTGDeallocTaskHelper; 42 | }; 43 | E00B1547BC5E488B9DB814223A439F25 /* PBXContainerItemProxy */ = { 44 | isa = PBXContainerItemProxy; 45 | containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 46 | proxyType = 1; 47 | remoteGlobalIDString = B1F461C2036C0F79269A64233A559EAD; 48 | remoteInfo = TTGNotificationGuard; 49 | }; 50 | /* End PBXContainerItemProxy section */ 51 | 52 | /* Begin PBXFileReference section */ 53 | 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; }; 54 | 0CA8EA97BBF0B0664759964BC6C04CEB /* libPods-TTGNotificationGuard_Example.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-TTGNotificationGuard_Example.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 55 | 0CDEA852B45BD98F917642A86A699552 /* TTGDeallocTaskHelper-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TTGDeallocTaskHelper-prefix.pch"; sourceTree = ""; }; 56 | 1067FC318A0A5D680C9A30B993A21D2E /* TTGDeallocTaskHelper-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "TTGDeallocTaskHelper-dummy.m"; sourceTree = ""; }; 57 | 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; }; 58 | 238C5C6BC8CD3428EAC1B1F300B169D1 /* Pods-TTGNotificationGuard_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-TTGNotificationGuard_Tests.release.xcconfig"; sourceTree = ""; }; 59 | 2DB6D5C814A7DE1CED85EC9FFD85FE94 /* TTGDeallocTaskHelper.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = TTGDeallocTaskHelper.xcconfig; sourceTree = ""; }; 60 | 329E343451496CD9CE58033C500298D1 /* NSNotificationCenter+TTGNotificationGuard.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSNotificationCenter+TTGNotificationGuard.h"; sourceTree = ""; }; 61 | 389E0AE6431380291F6ACEBD6B0CE4C7 /* Pods-TTGNotificationGuard_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-TTGNotificationGuard_Tests-acknowledgements.plist"; sourceTree = ""; }; 62 | 4236496F6CA626AF649F8A9639B98D4C /* Pods-TTGNotificationGuard_Example-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-TTGNotificationGuard_Example-resources.sh"; sourceTree = ""; }; 63 | 462DA113AF07A1726163F2B269DC4642 /* Pods-TTGNotificationGuard_Tests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-TTGNotificationGuard_Tests-resources.sh"; sourceTree = ""; }; 64 | 4971ED12B633D550F51D88B908213E6C /* Pods-TTGNotificationGuard_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-TTGNotificationGuard_Example.release.xcconfig"; sourceTree = ""; }; 65 | 61482E24A2C321AB70C8BBA20ADAD668 /* Pods-TTGNotificationGuard_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-TTGNotificationGuard_Example-frameworks.sh"; sourceTree = ""; }; 66 | 6AA11CD19ADFFE2E9AFA8A05C9B1093A /* NSObject+TTGDeallocTaskHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+TTGDeallocTaskHelper.m"; path = "TTGDeallocTaskHelper/Classes/NSObject+TTGDeallocTaskHelper.m"; sourceTree = ""; }; 67 | 80A15EA55E2339F958492755300299E6 /* Pods-TTGNotificationGuard_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-TTGNotificationGuard_Tests-dummy.m"; sourceTree = ""; }; 68 | 82B39ACD0E887D5817FE21F953DF8B60 /* Pods-TTGNotificationGuard_Tests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-TTGNotificationGuard_Tests-frameworks.sh"; sourceTree = ""; }; 69 | 8B15F9524E6AF02FB16CBFA33AE68DBE /* Pods-TTGNotificationGuard_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-TTGNotificationGuard_Example-dummy.m"; sourceTree = ""; }; 70 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 71 | 99BA37C1455FE58555327236795684FA /* Pods-TTGNotificationGuard_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-TTGNotificationGuard_Tests-acknowledgements.markdown"; sourceTree = ""; }; 72 | BE1C30AE062A49A89A86CBEA49B0A350 /* NSObject+TTGDeallocTaskHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+TTGDeallocTaskHelper.h"; path = "TTGDeallocTaskHelper/Classes/NSObject+TTGDeallocTaskHelper.h"; sourceTree = ""; }; 73 | C1D4062C5137D0700C5E674B50A30241 /* TTGNotificationGuard-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "TTGNotificationGuard-dummy.m"; sourceTree = ""; }; 74 | C3C97AC0F2AEBF6218BB9D5A646D0221 /* libTTGDeallocTaskHelper.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libTTGDeallocTaskHelper.a; sourceTree = BUILT_PRODUCTS_DIR; }; 75 | CA90E8B8235644492FBE23377D3F7E04 /* TTGNotificationGuard-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TTGNotificationGuard-prefix.pch"; sourceTree = ""; }; 76 | CE00500E5507E572C73624D9CE317213 /* TTGNotificationGuard.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = TTGNotificationGuard.xcconfig; sourceTree = ""; }; 77 | CF470B456F449F365C5A0B4E7F6483EA /* Pods-TTGNotificationGuard_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-TTGNotificationGuard_Example-acknowledgements.markdown"; sourceTree = ""; }; 78 | D8136850AA48CFB4528CA3F72573B8C7 /* Pods-TTGNotificationGuard_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-TTGNotificationGuard_Tests.debug.xcconfig"; sourceTree = ""; }; 79 | DD091DC5D4A850C3EE4B711092AC3C51 /* Pods-TTGNotificationGuard_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-TTGNotificationGuard_Example.debug.xcconfig"; sourceTree = ""; }; 80 | 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; }; 81 | F15812F51EA1EA79380B3170AA4507DA /* Pods-TTGNotificationGuard_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-TTGNotificationGuard_Example-acknowledgements.plist"; sourceTree = ""; }; 82 | F4CF2FD20AFD913BC05DFA0A7B1ECA8B /* libPods-TTGNotificationGuard_Tests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-TTGNotificationGuard_Tests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 83 | F7F297065E7678161DD6421F9C6E4F21 /* NSNotificationCenter+TTGNotificationGuard.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NSNotificationCenter+TTGNotificationGuard.m"; sourceTree = ""; }; 84 | FACECD7D719BBACB34A7A4BEAEA8C4F5 /* libTTGNotificationGuard.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libTTGNotificationGuard.a; sourceTree = BUILT_PRODUCTS_DIR; }; 85 | /* End PBXFileReference section */ 86 | 87 | /* Begin PBXFrameworksBuildPhase section */ 88 | 1D2570A2B0F21141F1FB6071FC39D5ED /* Frameworks */ = { 89 | isa = PBXFrameworksBuildPhase; 90 | buildActionMask = 2147483647; 91 | files = ( 92 | 6D9C0E4135F27DAE3EF754905F97C746 /* CoreFoundation.framework in Frameworks */, 93 | 4E3A8A7B74DE353853EF56C2AB9278AD /* Foundation.framework in Frameworks */, 94 | 4DE445FD01623948DE2537FBBE5AD204 /* UIKit.framework in Frameworks */, 95 | ); 96 | runOnlyForDeploymentPostprocessing = 0; 97 | }; 98 | 2BA092D8B26F3A47FFCE4933C3260224 /* Frameworks */ = { 99 | isa = PBXFrameworksBuildPhase; 100 | buildActionMask = 2147483647; 101 | files = ( 102 | 78E048C08382010380ADB898E59865FA /* CoreFoundation.framework in Frameworks */, 103 | 6930F6453F400AEC470C9E1E8EAF9F1A /* Foundation.framework in Frameworks */, 104 | F784B5786B848BDA3954E2F59CB24402 /* UIKit.framework in Frameworks */, 105 | ); 106 | runOnlyForDeploymentPostprocessing = 0; 107 | }; 108 | 2BC4DF52B233F34BE7D14EEB0308A130 /* Frameworks */ = { 109 | isa = PBXFrameworksBuildPhase; 110 | buildActionMask = 2147483647; 111 | files = ( 112 | 821650048E84FB84EDD3B7AC0F2D1A50 /* Foundation.framework in Frameworks */, 113 | ); 114 | runOnlyForDeploymentPostprocessing = 0; 115 | }; 116 | 77AA790D6F3C5800053EEBAE4F8F1C35 /* Frameworks */ = { 117 | isa = PBXFrameworksBuildPhase; 118 | buildActionMask = 2147483647; 119 | files = ( 120 | 2F32858C0A78E097BD806F49A5D52848 /* Foundation.framework in Frameworks */, 121 | ); 122 | runOnlyForDeploymentPostprocessing = 0; 123 | }; 124 | /* End PBXFrameworksBuildPhase section */ 125 | 126 | /* Begin PBXGroup section */ 127 | 0CF2ECFE8A13B20E222CBEAE097B43BC /* Development Pods */ = { 128 | isa = PBXGroup; 129 | children = ( 130 | 4D8F3C209DD72C75C6EF7D6E24342ED4 /* TTGNotificationGuard */, 131 | ); 132 | name = "Development Pods"; 133 | sourceTree = ""; 134 | }; 135 | 122DA2E5084A4393C29BE363C764795C /* Frameworks */ = { 136 | isa = PBXGroup; 137 | children = ( 138 | D1E7B662015F43EBB0D0519AAC5A7C26 /* iOS */, 139 | ); 140 | name = Frameworks; 141 | sourceTree = ""; 142 | }; 143 | 22D3349A903033D7D515746357B4EBAA /* Pods-TTGNotificationGuard_Tests */ = { 144 | isa = PBXGroup; 145 | children = ( 146 | 99BA37C1455FE58555327236795684FA /* Pods-TTGNotificationGuard_Tests-acknowledgements.markdown */, 147 | 389E0AE6431380291F6ACEBD6B0CE4C7 /* Pods-TTGNotificationGuard_Tests-acknowledgements.plist */, 148 | 80A15EA55E2339F958492755300299E6 /* Pods-TTGNotificationGuard_Tests-dummy.m */, 149 | 82B39ACD0E887D5817FE21F953DF8B60 /* Pods-TTGNotificationGuard_Tests-frameworks.sh */, 150 | 462DA113AF07A1726163F2B269DC4642 /* Pods-TTGNotificationGuard_Tests-resources.sh */, 151 | D8136850AA48CFB4528CA3F72573B8C7 /* Pods-TTGNotificationGuard_Tests.debug.xcconfig */, 152 | 238C5C6BC8CD3428EAC1B1F300B169D1 /* Pods-TTGNotificationGuard_Tests.release.xcconfig */, 153 | ); 154 | name = "Pods-TTGNotificationGuard_Tests"; 155 | path = "Target Support Files/Pods-TTGNotificationGuard_Tests"; 156 | sourceTree = ""; 157 | }; 158 | 4A8724B4E3DA025D0C291A26CD7A3524 /* TTGDeallocTaskHelper */ = { 159 | isa = PBXGroup; 160 | children = ( 161 | BE1C30AE062A49A89A86CBEA49B0A350 /* NSObject+TTGDeallocTaskHelper.h */, 162 | 6AA11CD19ADFFE2E9AFA8A05C9B1093A /* NSObject+TTGDeallocTaskHelper.m */, 163 | 7D2EF140149347B4B03099DC2D1697D7 /* Support Files */, 164 | ); 165 | path = TTGDeallocTaskHelper; 166 | sourceTree = ""; 167 | }; 168 | 4D8F3C209DD72C75C6EF7D6E24342ED4 /* TTGNotificationGuard */ = { 169 | isa = PBXGroup; 170 | children = ( 171 | EEF75B96EEDA7AB59752898F9AFB2D9C /* Support Files */, 172 | CF6B171F87E8E9691EA752DD493A57D2 /* TTGNotificationGuard */, 173 | ); 174 | name = TTGNotificationGuard; 175 | path = ../..; 176 | sourceTree = ""; 177 | }; 178 | 7D2EF140149347B4B03099DC2D1697D7 /* Support Files */ = { 179 | isa = PBXGroup; 180 | children = ( 181 | 2DB6D5C814A7DE1CED85EC9FFD85FE94 /* TTGDeallocTaskHelper.xcconfig */, 182 | 1067FC318A0A5D680C9A30B993A21D2E /* TTGDeallocTaskHelper-dummy.m */, 183 | 0CDEA852B45BD98F917642A86A699552 /* TTGDeallocTaskHelper-prefix.pch */, 184 | ); 185 | name = "Support Files"; 186 | path = "../Target Support Files/TTGDeallocTaskHelper"; 187 | sourceTree = ""; 188 | }; 189 | 7DB346D0F39D3F0E887471402A8071AB = { 190 | isa = PBXGroup; 191 | children = ( 192 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, 193 | 0CF2ECFE8A13B20E222CBEAE097B43BC /* Development Pods */, 194 | 122DA2E5084A4393C29BE363C764795C /* Frameworks */, 195 | F25B1CE563425770FA432DAAE4C64D8F /* Pods */, 196 | DE2D1B93F8C0878D444B852DFD0E6114 /* Products */, 197 | 7FD3ECD52E34A22722D56CA8A7C8DD54 /* Targets Support Files */, 198 | ); 199 | sourceTree = ""; 200 | }; 201 | 7FD3ECD52E34A22722D56CA8A7C8DD54 /* Targets Support Files */ = { 202 | isa = PBXGroup; 203 | children = ( 204 | 8503276F36C148E808F3F04F0BE6CDAC /* Pods-TTGNotificationGuard_Example */, 205 | 22D3349A903033D7D515746357B4EBAA /* Pods-TTGNotificationGuard_Tests */, 206 | ); 207 | name = "Targets Support Files"; 208 | sourceTree = ""; 209 | }; 210 | 8503276F36C148E808F3F04F0BE6CDAC /* Pods-TTGNotificationGuard_Example */ = { 211 | isa = PBXGroup; 212 | children = ( 213 | CF470B456F449F365C5A0B4E7F6483EA /* Pods-TTGNotificationGuard_Example-acknowledgements.markdown */, 214 | F15812F51EA1EA79380B3170AA4507DA /* Pods-TTGNotificationGuard_Example-acknowledgements.plist */, 215 | 8B15F9524E6AF02FB16CBFA33AE68DBE /* Pods-TTGNotificationGuard_Example-dummy.m */, 216 | 61482E24A2C321AB70C8BBA20ADAD668 /* Pods-TTGNotificationGuard_Example-frameworks.sh */, 217 | 4236496F6CA626AF649F8A9639B98D4C /* Pods-TTGNotificationGuard_Example-resources.sh */, 218 | DD091DC5D4A850C3EE4B711092AC3C51 /* Pods-TTGNotificationGuard_Example.debug.xcconfig */, 219 | 4971ED12B633D550F51D88B908213E6C /* Pods-TTGNotificationGuard_Example.release.xcconfig */, 220 | ); 221 | name = "Pods-TTGNotificationGuard_Example"; 222 | path = "Target Support Files/Pods-TTGNotificationGuard_Example"; 223 | sourceTree = ""; 224 | }; 225 | B62747E41518A4F68277BF2050D427B5 /* Classes */ = { 226 | isa = PBXGroup; 227 | children = ( 228 | 329E343451496CD9CE58033C500298D1 /* NSNotificationCenter+TTGNotificationGuard.h */, 229 | F7F297065E7678161DD6421F9C6E4F21 /* NSNotificationCenter+TTGNotificationGuard.m */, 230 | ); 231 | path = Classes; 232 | sourceTree = ""; 233 | }; 234 | CF6B171F87E8E9691EA752DD493A57D2 /* TTGNotificationGuard */ = { 235 | isa = PBXGroup; 236 | children = ( 237 | B62747E41518A4F68277BF2050D427B5 /* Classes */, 238 | ); 239 | path = TTGNotificationGuard; 240 | sourceTree = ""; 241 | }; 242 | D1E7B662015F43EBB0D0519AAC5A7C26 /* iOS */ = { 243 | isa = PBXGroup; 244 | children = ( 245 | 09380E532BB1971AAE638734E57574F9 /* CoreFoundation.framework */, 246 | EBCA801DED542D9C48BB9496E41CB2A7 /* Foundation.framework */, 247 | 1ED1411C548899C28A948508769F77B7 /* UIKit.framework */, 248 | ); 249 | name = iOS; 250 | sourceTree = ""; 251 | }; 252 | DE2D1B93F8C0878D444B852DFD0E6114 /* Products */ = { 253 | isa = PBXGroup; 254 | children = ( 255 | 0CA8EA97BBF0B0664759964BC6C04CEB /* libPods-TTGNotificationGuard_Example.a */, 256 | F4CF2FD20AFD913BC05DFA0A7B1ECA8B /* libPods-TTGNotificationGuard_Tests.a */, 257 | C3C97AC0F2AEBF6218BB9D5A646D0221 /* libTTGDeallocTaskHelper.a */, 258 | FACECD7D719BBACB34A7A4BEAEA8C4F5 /* libTTGNotificationGuard.a */, 259 | ); 260 | name = Products; 261 | sourceTree = ""; 262 | }; 263 | EEF75B96EEDA7AB59752898F9AFB2D9C /* Support Files */ = { 264 | isa = PBXGroup; 265 | children = ( 266 | CE00500E5507E572C73624D9CE317213 /* TTGNotificationGuard.xcconfig */, 267 | C1D4062C5137D0700C5E674B50A30241 /* TTGNotificationGuard-dummy.m */, 268 | CA90E8B8235644492FBE23377D3F7E04 /* TTGNotificationGuard-prefix.pch */, 269 | ); 270 | name = "Support Files"; 271 | path = "Example/Pods/Target Support Files/TTGNotificationGuard"; 272 | sourceTree = ""; 273 | }; 274 | F25B1CE563425770FA432DAAE4C64D8F /* Pods */ = { 275 | isa = PBXGroup; 276 | children = ( 277 | 4A8724B4E3DA025D0C291A26CD7A3524 /* TTGDeallocTaskHelper */, 278 | ); 279 | name = Pods; 280 | sourceTree = ""; 281 | }; 282 | /* End PBXGroup section */ 283 | 284 | /* Begin PBXHeadersBuildPhase section */ 285 | 363A17A81E1E1FF781AA0AD0814B97DB /* Headers */ = { 286 | isa = PBXHeadersBuildPhase; 287 | buildActionMask = 2147483647; 288 | files = ( 289 | 7230DE522923ECE64520A15EBED3CCF6 /* NSObject+TTGDeallocTaskHelper.h in Headers */, 290 | ); 291 | runOnlyForDeploymentPostprocessing = 0; 292 | }; 293 | 6ACDB9C8E6AAB1891699BDB8EDDD77C7 /* Headers */ = { 294 | isa = PBXHeadersBuildPhase; 295 | buildActionMask = 2147483647; 296 | files = ( 297 | 06C7527AC6C12E35F354712588BA5714 /* NSNotificationCenter+TTGNotificationGuard.h in Headers */, 298 | ); 299 | runOnlyForDeploymentPostprocessing = 0; 300 | }; 301 | /* End PBXHeadersBuildPhase section */ 302 | 303 | /* Begin PBXNativeTarget section */ 304 | 1B4F941423AD3A3226BD3CA052305914 /* Pods-TTGNotificationGuard_Tests */ = { 305 | isa = PBXNativeTarget; 306 | buildConfigurationList = 59DFC16053C65B1708C0DEFD65064681 /* Build configuration list for PBXNativeTarget "Pods-TTGNotificationGuard_Tests" */; 307 | buildPhases = ( 308 | A360A248B37581E8A7D938C47E95FB25 /* Sources */, 309 | 2BC4DF52B233F34BE7D14EEB0308A130 /* Frameworks */, 310 | ); 311 | buildRules = ( 312 | ); 313 | dependencies = ( 314 | ); 315 | name = "Pods-TTGNotificationGuard_Tests"; 316 | productName = "Pods-TTGNotificationGuard_Tests"; 317 | productReference = F4CF2FD20AFD913BC05DFA0A7B1ECA8B /* libPods-TTGNotificationGuard_Tests.a */; 318 | productType = "com.apple.product-type.library.static"; 319 | }; 320 | 830B9598A1BBC936592225C6ACC1F6F4 /* Pods-TTGNotificationGuard_Example */ = { 321 | isa = PBXNativeTarget; 322 | buildConfigurationList = A35DE759B7F6790A0C899CD23CE3ED08 /* Build configuration list for PBXNativeTarget "Pods-TTGNotificationGuard_Example" */; 323 | buildPhases = ( 324 | 838780935780A6836A546FCDFD9247C5 /* Sources */, 325 | 77AA790D6F3C5800053EEBAE4F8F1C35 /* Frameworks */, 326 | ); 327 | buildRules = ( 328 | ); 329 | dependencies = ( 330 | F11E970EA77A5575BC183969FF97DB97 /* PBXTargetDependency */, 331 | D1A2E927DC6B35EE2364CBD44D77E89A /* PBXTargetDependency */, 332 | ); 333 | name = "Pods-TTGNotificationGuard_Example"; 334 | productName = "Pods-TTGNotificationGuard_Example"; 335 | productReference = 0CA8EA97BBF0B0664759964BC6C04CEB /* libPods-TTGNotificationGuard_Example.a */; 336 | productType = "com.apple.product-type.library.static"; 337 | }; 338 | B1F461C2036C0F79269A64233A559EAD /* TTGNotificationGuard */ = { 339 | isa = PBXNativeTarget; 340 | buildConfigurationList = 77C928D10F734AD9FC3097DA7C54E2C6 /* Build configuration list for PBXNativeTarget "TTGNotificationGuard" */; 341 | buildPhases = ( 342 | 4D4C8542AC0B7B578E2AAF073D72800B /* Sources */, 343 | 2BA092D8B26F3A47FFCE4933C3260224 /* Frameworks */, 344 | 6ACDB9C8E6AAB1891699BDB8EDDD77C7 /* Headers */, 345 | ); 346 | buildRules = ( 347 | ); 348 | dependencies = ( 349 | EB1C387C5C6A2AA3959A03DB8ADE3755 /* PBXTargetDependency */, 350 | ); 351 | name = TTGNotificationGuard; 352 | productName = TTGNotificationGuard; 353 | productReference = FACECD7D719BBACB34A7A4BEAEA8C4F5 /* libTTGNotificationGuard.a */; 354 | productType = "com.apple.product-type.library.static"; 355 | }; 356 | F1F71BA9763A469C2CEADE28A1E7CC04 /* TTGDeallocTaskHelper */ = { 357 | isa = PBXNativeTarget; 358 | buildConfigurationList = CC7F36ACA7A086061806FAB180078A16 /* Build configuration list for PBXNativeTarget "TTGDeallocTaskHelper" */; 359 | buildPhases = ( 360 | 855A2B93E6C73CAE7F8213B11F4AB20F /* Sources */, 361 | 1D2570A2B0F21141F1FB6071FC39D5ED /* Frameworks */, 362 | 363A17A81E1E1FF781AA0AD0814B97DB /* Headers */, 363 | ); 364 | buildRules = ( 365 | ); 366 | dependencies = ( 367 | ); 368 | name = TTGDeallocTaskHelper; 369 | productName = TTGDeallocTaskHelper; 370 | productReference = C3C97AC0F2AEBF6218BB9D5A646D0221 /* libTTGDeallocTaskHelper.a */; 371 | productType = "com.apple.product-type.library.static"; 372 | }; 373 | /* End PBXNativeTarget section */ 374 | 375 | /* Begin PBXProject section */ 376 | D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { 377 | isa = PBXProject; 378 | attributes = { 379 | LastSwiftUpdateCheck = 0730; 380 | LastUpgradeCheck = 0700; 381 | }; 382 | buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; 383 | compatibilityVersion = "Xcode 3.2"; 384 | developmentRegion = English; 385 | hasScannedForEncodings = 0; 386 | knownRegions = ( 387 | en, 388 | ); 389 | mainGroup = 7DB346D0F39D3F0E887471402A8071AB; 390 | productRefGroup = DE2D1B93F8C0878D444B852DFD0E6114 /* Products */; 391 | projectDirPath = ""; 392 | projectRoot = ""; 393 | targets = ( 394 | 830B9598A1BBC936592225C6ACC1F6F4 /* Pods-TTGNotificationGuard_Example */, 395 | 1B4F941423AD3A3226BD3CA052305914 /* Pods-TTGNotificationGuard_Tests */, 396 | F1F71BA9763A469C2CEADE28A1E7CC04 /* TTGDeallocTaskHelper */, 397 | B1F461C2036C0F79269A64233A559EAD /* TTGNotificationGuard */, 398 | ); 399 | }; 400 | /* End PBXProject section */ 401 | 402 | /* Begin PBXSourcesBuildPhase section */ 403 | 4D4C8542AC0B7B578E2AAF073D72800B /* Sources */ = { 404 | isa = PBXSourcesBuildPhase; 405 | buildActionMask = 2147483647; 406 | files = ( 407 | B809D46971A9F962301FC40A7317A901 /* NSNotificationCenter+TTGNotificationGuard.m in Sources */, 408 | B3FE31C46419F080954ACBA92A770CAC /* TTGNotificationGuard-dummy.m in Sources */, 409 | ); 410 | runOnlyForDeploymentPostprocessing = 0; 411 | }; 412 | 838780935780A6836A546FCDFD9247C5 /* Sources */ = { 413 | isa = PBXSourcesBuildPhase; 414 | buildActionMask = 2147483647; 415 | files = ( 416 | 355421B12F7DA6D9B3514DF4D1650716 /* Pods-TTGNotificationGuard_Example-dummy.m in Sources */, 417 | ); 418 | runOnlyForDeploymentPostprocessing = 0; 419 | }; 420 | 855A2B93E6C73CAE7F8213B11F4AB20F /* Sources */ = { 421 | isa = PBXSourcesBuildPhase; 422 | buildActionMask = 2147483647; 423 | files = ( 424 | 9147753126E0F2CF7EFF6A34B6247B42 /* NSObject+TTGDeallocTaskHelper.m in Sources */, 425 | E5189E110CBF2B630D2DF251CA5F4C02 /* TTGDeallocTaskHelper-dummy.m in Sources */, 426 | ); 427 | runOnlyForDeploymentPostprocessing = 0; 428 | }; 429 | A360A248B37581E8A7D938C47E95FB25 /* Sources */ = { 430 | isa = PBXSourcesBuildPhase; 431 | buildActionMask = 2147483647; 432 | files = ( 433 | D02F052B00464B7CA87A88ED60F39813 /* Pods-TTGNotificationGuard_Tests-dummy.m in Sources */, 434 | ); 435 | runOnlyForDeploymentPostprocessing = 0; 436 | }; 437 | /* End PBXSourcesBuildPhase section */ 438 | 439 | /* Begin PBXTargetDependency section */ 440 | D1A2E927DC6B35EE2364CBD44D77E89A /* PBXTargetDependency */ = { 441 | isa = PBXTargetDependency; 442 | name = TTGNotificationGuard; 443 | target = B1F461C2036C0F79269A64233A559EAD /* TTGNotificationGuard */; 444 | targetProxy = E00B1547BC5E488B9DB814223A439F25 /* PBXContainerItemProxy */; 445 | }; 446 | EB1C387C5C6A2AA3959A03DB8ADE3755 /* PBXTargetDependency */ = { 447 | isa = PBXTargetDependency; 448 | name = TTGDeallocTaskHelper; 449 | target = F1F71BA9763A469C2CEADE28A1E7CC04 /* TTGDeallocTaskHelper */; 450 | targetProxy = DEF54353C206E976714591BB15E8D364 /* PBXContainerItemProxy */; 451 | }; 452 | F11E970EA77A5575BC183969FF97DB97 /* PBXTargetDependency */ = { 453 | isa = PBXTargetDependency; 454 | name = TTGDeallocTaskHelper; 455 | target = F1F71BA9763A469C2CEADE28A1E7CC04 /* TTGDeallocTaskHelper */; 456 | targetProxy = 54868D999E84983029CBA7EF8F3F45C5 /* PBXContainerItemProxy */; 457 | }; 458 | /* End PBXTargetDependency section */ 459 | 460 | /* Begin XCBuildConfiguration section */ 461 | 0A8A501C201636DDAD79BFE648CFBB47 /* Debug */ = { 462 | isa = XCBuildConfiguration; 463 | baseConfigurationReference = D8136850AA48CFB4528CA3F72573B8C7 /* Pods-TTGNotificationGuard_Tests.debug.xcconfig */; 464 | buildSettings = { 465 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 466 | DEBUG_INFORMATION_FORMAT = dwarf; 467 | ENABLE_STRICT_OBJC_MSGSEND = YES; 468 | GCC_NO_COMMON_BLOCKS = YES; 469 | IPHONEOS_DEPLOYMENT_TARGET = 6.0; 470 | MACH_O_TYPE = staticlib; 471 | MTL_ENABLE_DEBUG_INFO = YES; 472 | OTHER_LDFLAGS = ""; 473 | OTHER_LIBTOOLFLAGS = ""; 474 | PODS_ROOT = "$(SRCROOT)"; 475 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 476 | PRODUCT_NAME = "$(TARGET_NAME)"; 477 | SDKROOT = iphoneos; 478 | SKIP_INSTALL = YES; 479 | }; 480 | name = Debug; 481 | }; 482 | 0BA08F52AF5955529B52639CEB57DAAC /* Debug */ = { 483 | isa = XCBuildConfiguration; 484 | buildSettings = { 485 | ALWAYS_SEARCH_USER_PATHS = NO; 486 | CLANG_ANALYZER_NONNULL = YES; 487 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 488 | CLANG_CXX_LIBRARY = "libc++"; 489 | CLANG_ENABLE_MODULES = YES; 490 | CLANG_ENABLE_OBJC_ARC = YES; 491 | CLANG_WARN_BOOL_CONVERSION = YES; 492 | CLANG_WARN_CONSTANT_CONVERSION = YES; 493 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; 494 | CLANG_WARN_EMPTY_BODY = YES; 495 | CLANG_WARN_ENUM_CONVERSION = YES; 496 | CLANG_WARN_INT_CONVERSION = YES; 497 | CLANG_WARN_OBJC_ROOT_CLASS = YES; 498 | CLANG_WARN_UNREACHABLE_CODE = YES; 499 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 500 | COPY_PHASE_STRIP = NO; 501 | ENABLE_TESTABILITY = YES; 502 | GCC_C_LANGUAGE_STANDARD = gnu99; 503 | GCC_DYNAMIC_NO_PIC = NO; 504 | GCC_OPTIMIZATION_LEVEL = 0; 505 | GCC_PREPROCESSOR_DEFINITIONS = ( 506 | "POD_CONFIGURATION_DEBUG=1", 507 | "DEBUG=1", 508 | "$(inherited)", 509 | ); 510 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 511 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 512 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 513 | GCC_WARN_UNDECLARED_SELECTOR = YES; 514 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 515 | GCC_WARN_UNUSED_FUNCTION = YES; 516 | GCC_WARN_UNUSED_VARIABLE = YES; 517 | IPHONEOS_DEPLOYMENT_TARGET = 6.0; 518 | ONLY_ACTIVE_ARCH = YES; 519 | STRIP_INSTALLED_PRODUCT = NO; 520 | SYMROOT = "${SRCROOT}/../build"; 521 | }; 522 | name = Debug; 523 | }; 524 | 7107B52D33DDFB0057D055247EAE7B41 /* Release */ = { 525 | isa = XCBuildConfiguration; 526 | buildSettings = { 527 | ALWAYS_SEARCH_USER_PATHS = NO; 528 | CLANG_ANALYZER_NONNULL = YES; 529 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 530 | CLANG_CXX_LIBRARY = "libc++"; 531 | CLANG_ENABLE_MODULES = YES; 532 | CLANG_ENABLE_OBJC_ARC = YES; 533 | CLANG_WARN_BOOL_CONVERSION = YES; 534 | CLANG_WARN_CONSTANT_CONVERSION = YES; 535 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; 536 | CLANG_WARN_EMPTY_BODY = YES; 537 | CLANG_WARN_ENUM_CONVERSION = YES; 538 | CLANG_WARN_INT_CONVERSION = YES; 539 | CLANG_WARN_OBJC_ROOT_CLASS = YES; 540 | CLANG_WARN_UNREACHABLE_CODE = YES; 541 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 542 | COPY_PHASE_STRIP = YES; 543 | ENABLE_NS_ASSERTIONS = NO; 544 | GCC_C_LANGUAGE_STANDARD = gnu99; 545 | GCC_PREPROCESSOR_DEFINITIONS = ( 546 | "POD_CONFIGURATION_RELEASE=1", 547 | "$(inherited)", 548 | ); 549 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 550 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 551 | GCC_WARN_UNDECLARED_SELECTOR = YES; 552 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 553 | GCC_WARN_UNUSED_FUNCTION = YES; 554 | GCC_WARN_UNUSED_VARIABLE = YES; 555 | IPHONEOS_DEPLOYMENT_TARGET = 6.0; 556 | STRIP_INSTALLED_PRODUCT = NO; 557 | SYMROOT = "${SRCROOT}/../build"; 558 | VALIDATE_PRODUCT = YES; 559 | }; 560 | name = Release; 561 | }; 562 | 7A3DDD4D44407AB567B1F417CD4D24D2 /* Release */ = { 563 | isa = XCBuildConfiguration; 564 | baseConfigurationReference = CE00500E5507E572C73624D9CE317213 /* TTGNotificationGuard.xcconfig */; 565 | buildSettings = { 566 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 567 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 568 | ENABLE_STRICT_OBJC_MSGSEND = YES; 569 | GCC_NO_COMMON_BLOCKS = YES; 570 | GCC_PREFIX_HEADER = "Target Support Files/TTGNotificationGuard/TTGNotificationGuard-prefix.pch"; 571 | IPHONEOS_DEPLOYMENT_TARGET = 6.0; 572 | MTL_ENABLE_DEBUG_INFO = NO; 573 | OTHER_LDFLAGS = ""; 574 | OTHER_LIBTOOLFLAGS = ""; 575 | PRIVATE_HEADERS_FOLDER_PATH = ""; 576 | PRODUCT_NAME = "$(TARGET_NAME)"; 577 | PUBLIC_HEADERS_FOLDER_PATH = ""; 578 | SDKROOT = iphoneos; 579 | SKIP_INSTALL = YES; 580 | }; 581 | name = Release; 582 | }; 583 | 8331B8562352BEFA085A21C9DC3AA905 /* Debug */ = { 584 | isa = XCBuildConfiguration; 585 | baseConfigurationReference = CE00500E5507E572C73624D9CE317213 /* TTGNotificationGuard.xcconfig */; 586 | buildSettings = { 587 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 588 | DEBUG_INFORMATION_FORMAT = dwarf; 589 | ENABLE_STRICT_OBJC_MSGSEND = YES; 590 | GCC_NO_COMMON_BLOCKS = YES; 591 | GCC_PREFIX_HEADER = "Target Support Files/TTGNotificationGuard/TTGNotificationGuard-prefix.pch"; 592 | IPHONEOS_DEPLOYMENT_TARGET = 6.0; 593 | MTL_ENABLE_DEBUG_INFO = YES; 594 | OTHER_LDFLAGS = ""; 595 | OTHER_LIBTOOLFLAGS = ""; 596 | PRIVATE_HEADERS_FOLDER_PATH = ""; 597 | PRODUCT_NAME = "$(TARGET_NAME)"; 598 | PUBLIC_HEADERS_FOLDER_PATH = ""; 599 | SDKROOT = iphoneos; 600 | SKIP_INSTALL = YES; 601 | }; 602 | name = Debug; 603 | }; 604 | B001633D1613A191B9085B823A0A0C15 /* Release */ = { 605 | isa = XCBuildConfiguration; 606 | baseConfigurationReference = 238C5C6BC8CD3428EAC1B1F300B169D1 /* Pods-TTGNotificationGuard_Tests.release.xcconfig */; 607 | buildSettings = { 608 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 609 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 610 | ENABLE_STRICT_OBJC_MSGSEND = YES; 611 | GCC_NO_COMMON_BLOCKS = YES; 612 | IPHONEOS_DEPLOYMENT_TARGET = 6.0; 613 | MACH_O_TYPE = staticlib; 614 | MTL_ENABLE_DEBUG_INFO = NO; 615 | OTHER_LDFLAGS = ""; 616 | OTHER_LIBTOOLFLAGS = ""; 617 | PODS_ROOT = "$(SRCROOT)"; 618 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 619 | PRODUCT_NAME = "$(TARGET_NAME)"; 620 | SDKROOT = iphoneos; 621 | SKIP_INSTALL = YES; 622 | }; 623 | name = Release; 624 | }; 625 | D159C389618793763391F8853FA96D73 /* Release */ = { 626 | isa = XCBuildConfiguration; 627 | baseConfigurationReference = 2DB6D5C814A7DE1CED85EC9FFD85FE94 /* TTGDeallocTaskHelper.xcconfig */; 628 | buildSettings = { 629 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 630 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 631 | ENABLE_STRICT_OBJC_MSGSEND = YES; 632 | GCC_NO_COMMON_BLOCKS = YES; 633 | GCC_PREFIX_HEADER = "Target Support Files/TTGDeallocTaskHelper/TTGDeallocTaskHelper-prefix.pch"; 634 | IPHONEOS_DEPLOYMENT_TARGET = 6.0; 635 | MTL_ENABLE_DEBUG_INFO = NO; 636 | OTHER_LDFLAGS = ""; 637 | OTHER_LIBTOOLFLAGS = ""; 638 | PRIVATE_HEADERS_FOLDER_PATH = ""; 639 | PRODUCT_NAME = "$(TARGET_NAME)"; 640 | PUBLIC_HEADERS_FOLDER_PATH = ""; 641 | SDKROOT = iphoneos; 642 | SKIP_INSTALL = YES; 643 | }; 644 | name = Release; 645 | }; 646 | D9DE7A2E9790581AC508345EBCDCEB8F /* Debug */ = { 647 | isa = XCBuildConfiguration; 648 | baseConfigurationReference = 2DB6D5C814A7DE1CED85EC9FFD85FE94 /* TTGDeallocTaskHelper.xcconfig */; 649 | buildSettings = { 650 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 651 | DEBUG_INFORMATION_FORMAT = dwarf; 652 | ENABLE_STRICT_OBJC_MSGSEND = YES; 653 | GCC_NO_COMMON_BLOCKS = YES; 654 | GCC_PREFIX_HEADER = "Target Support Files/TTGDeallocTaskHelper/TTGDeallocTaskHelper-prefix.pch"; 655 | IPHONEOS_DEPLOYMENT_TARGET = 6.0; 656 | MTL_ENABLE_DEBUG_INFO = YES; 657 | OTHER_LDFLAGS = ""; 658 | OTHER_LIBTOOLFLAGS = ""; 659 | PRIVATE_HEADERS_FOLDER_PATH = ""; 660 | PRODUCT_NAME = "$(TARGET_NAME)"; 661 | PUBLIC_HEADERS_FOLDER_PATH = ""; 662 | SDKROOT = iphoneos; 663 | SKIP_INSTALL = YES; 664 | }; 665 | name = Debug; 666 | }; 667 | EE35B6CEE6F07CAFC5229298817CC0E8 /* Release */ = { 668 | isa = XCBuildConfiguration; 669 | baseConfigurationReference = 4971ED12B633D550F51D88B908213E6C /* Pods-TTGNotificationGuard_Example.release.xcconfig */; 670 | buildSettings = { 671 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 672 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 673 | ENABLE_STRICT_OBJC_MSGSEND = YES; 674 | GCC_NO_COMMON_BLOCKS = YES; 675 | IPHONEOS_DEPLOYMENT_TARGET = 6.0; 676 | MACH_O_TYPE = staticlib; 677 | MTL_ENABLE_DEBUG_INFO = NO; 678 | OTHER_LDFLAGS = ""; 679 | OTHER_LIBTOOLFLAGS = ""; 680 | PODS_ROOT = "$(SRCROOT)"; 681 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 682 | PRODUCT_NAME = "$(TARGET_NAME)"; 683 | SDKROOT = iphoneos; 684 | SKIP_INSTALL = YES; 685 | }; 686 | name = Release; 687 | }; 688 | F4250D7354F8BDD11FBE50BA9FA16A8C /* Debug */ = { 689 | isa = XCBuildConfiguration; 690 | baseConfigurationReference = DD091DC5D4A850C3EE4B711092AC3C51 /* Pods-TTGNotificationGuard_Example.debug.xcconfig */; 691 | buildSettings = { 692 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 693 | DEBUG_INFORMATION_FORMAT = dwarf; 694 | ENABLE_STRICT_OBJC_MSGSEND = YES; 695 | GCC_NO_COMMON_BLOCKS = YES; 696 | IPHONEOS_DEPLOYMENT_TARGET = 6.0; 697 | MACH_O_TYPE = staticlib; 698 | MTL_ENABLE_DEBUG_INFO = YES; 699 | OTHER_LDFLAGS = ""; 700 | OTHER_LIBTOOLFLAGS = ""; 701 | PODS_ROOT = "$(SRCROOT)"; 702 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 703 | PRODUCT_NAME = "$(TARGET_NAME)"; 704 | SDKROOT = iphoneos; 705 | SKIP_INSTALL = YES; 706 | }; 707 | name = Debug; 708 | }; 709 | /* End XCBuildConfiguration section */ 710 | 711 | /* Begin XCConfigurationList section */ 712 | 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { 713 | isa = XCConfigurationList; 714 | buildConfigurations = ( 715 | 0BA08F52AF5955529B52639CEB57DAAC /* Debug */, 716 | 7107B52D33DDFB0057D055247EAE7B41 /* Release */, 717 | ); 718 | defaultConfigurationIsVisible = 0; 719 | defaultConfigurationName = Release; 720 | }; 721 | 59DFC16053C65B1708C0DEFD65064681 /* Build configuration list for PBXNativeTarget "Pods-TTGNotificationGuard_Tests" */ = { 722 | isa = XCConfigurationList; 723 | buildConfigurations = ( 724 | 0A8A501C201636DDAD79BFE648CFBB47 /* Debug */, 725 | B001633D1613A191B9085B823A0A0C15 /* Release */, 726 | ); 727 | defaultConfigurationIsVisible = 0; 728 | defaultConfigurationName = Release; 729 | }; 730 | 77C928D10F734AD9FC3097DA7C54E2C6 /* Build configuration list for PBXNativeTarget "TTGNotificationGuard" */ = { 731 | isa = XCConfigurationList; 732 | buildConfigurations = ( 733 | 8331B8562352BEFA085A21C9DC3AA905 /* Debug */, 734 | 7A3DDD4D44407AB567B1F417CD4D24D2 /* Release */, 735 | ); 736 | defaultConfigurationIsVisible = 0; 737 | defaultConfigurationName = Release; 738 | }; 739 | A35DE759B7F6790A0C899CD23CE3ED08 /* Build configuration list for PBXNativeTarget "Pods-TTGNotificationGuard_Example" */ = { 740 | isa = XCConfigurationList; 741 | buildConfigurations = ( 742 | F4250D7354F8BDD11FBE50BA9FA16A8C /* Debug */, 743 | EE35B6CEE6F07CAFC5229298817CC0E8 /* Release */, 744 | ); 745 | defaultConfigurationIsVisible = 0; 746 | defaultConfigurationName = Release; 747 | }; 748 | CC7F36ACA7A086061806FAB180078A16 /* Build configuration list for PBXNativeTarget "TTGDeallocTaskHelper" */ = { 749 | isa = XCConfigurationList; 750 | buildConfigurations = ( 751 | D9DE7A2E9790581AC508345EBCDCEB8F /* Debug */, 752 | D159C389618793763391F8853FA96D73 /* Release */, 753 | ); 754 | defaultConfigurationIsVisible = 0; 755 | defaultConfigurationName = Release; 756 | }; 757 | /* End XCConfigurationList section */ 758 | }; 759 | rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 760 | } 761 | -------------------------------------------------------------------------------- /Example/Pods/TTGDeallocTaskHelper/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 | -------------------------------------------------------------------------------- /Example/Pods/TTGDeallocTaskHelper/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 6 and later. 15 | 16 | ## Installation 17 | 18 | TTGDeallocTaskHelper is available through [CocoaPods](http://cocoapods.org). To install 19 | it, simply add the following line to your Podfile: 20 | 21 | ```ruby 22 | pod "TTGDeallocTaskHelper" 23 | ``` 24 | 25 | ## Usage 26 | ``` 27 | #import "NSObject+TTGDeallocTaskHelper.h" 28 | 29 | // Some object 30 | id object; 31 | 32 | // Add dealloc task 33 | [object ttg_addDeallocTask:^(__unsafe_unretained id object, NSUInteger identifier) { 34 | // After object dealloc, do you job. 35 | // ... 36 | }]; 37 | 38 | // object has been released. And the tasks will be performed. 39 | object = nil; 40 | ``` 41 | 42 | 43 | ## API 44 | Callback block definition. 45 | 46 | ``` 47 | typedef void (^TTGDeallocTaskBlock)(__unsafe_unretained id object, NSUInteger identifier); 48 | ``` 49 | 50 | Add dealloc task. 51 | ``` 52 | /** 53 | * Add dealloc task to object. 54 | * 55 | * @param taskBlock The dealloc task 56 | * 57 | * @return The task identifier 58 | */ 59 | - (NSUInteger)ttg_addDeallocTask:(TTGDeallocTaskBlock)taskBlock; 60 | ``` 61 | 62 | Remove specific task by identifier. 63 | ``` 64 | /** 65 | * Remove task by identifier. 66 | * 67 | * @param identifier The task identifier 68 | * 69 | * @return Remove success or not 70 | */ 71 | - (BOOL)ttg_removeDeallocTaskByIdentifier:(NSUInteger)identifier; 72 | ``` 73 | 74 | Remove all dealloc tasks. 75 | ``` 76 | /** 77 | * Remove all dealloc tasks. 78 | */ 79 | - (void)ttg_removeAllDeallocTasks; 80 | ``` 81 | 82 | ## Example 83 | 84 | To run the example project, clone the repo, and run `pod install` from the Example directory first. 85 | 86 | ## Author 87 | 88 | zekunyan, zekunyan@163.com 89 | 90 | ## License 91 | 92 | TTGDeallocTaskHelper is available under the MIT license. See the LICENSE file for more info. 93 | -------------------------------------------------------------------------------- /Example/Pods/TTGDeallocTaskHelper/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 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 | -------------------------------------------------------------------------------- /Example/Pods/TTGDeallocTaskHelper/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 | #import 11 | #import 12 | 13 | static char TTGDeallocTaskModelKey; 14 | static NSUInteger TTGIdentifierIncrement = 0; 15 | static pthread_mutex_t TTGDeallocTaskIdentifierLock; 16 | NSUInteger TTGDeallocTaskIllegalIdentifier = 0; 17 | 18 | /** 19 | * Private model 20 | */ 21 | @interface TTGDeallocTaskModel : NSObject { 22 | pthread_mutex_t _lock; 23 | CFMutableDictionaryRef _tasksDict; 24 | } 25 | @property (nonatomic, unsafe_unretained) id target; 26 | @end 27 | 28 | @implementation TTGDeallocTaskModel 29 | 30 | - (instancetype)initWithTarget:(id)target { 31 | self = [super init]; 32 | if (self) { 33 | _target = target; 34 | pthread_mutex_init(&_lock, NULL); 35 | _tasksDict = CFDictionaryCreateMutable(CFAllocatorGetDefault(), 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); 36 | } 37 | return self; 38 | } 39 | 40 | - (NSUInteger)addTask:(TTGDeallocTaskBlock)taskBlock { 41 | if (!taskBlock) { 42 | return TTGDeallocTaskIllegalIdentifier; 43 | } 44 | 45 | pthread_mutex_lock(&TTGDeallocTaskIdentifierLock); 46 | NSNumber *newIdentifier = [NSNumber numberWithUnsignedInteger:++TTGIdentifierIncrement]; 47 | pthread_mutex_unlock(&TTGDeallocTaskIdentifierLock); 48 | 49 | if (newIdentifier) { 50 | pthread_mutex_lock(&_lock); 51 | CFDictionarySetValue(_tasksDict, (__bridge const void*)newIdentifier, (__bridge const void*)[taskBlock copy]); 52 | pthread_mutex_unlock(&_lock); 53 | return TTGIdentifierIncrement; 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 | CFDictionaryRemoveValue(_tasksDict, (__bridge const void*)identifierNumber); 68 | pthread_mutex_unlock(&_lock); 69 | return YES; 70 | } else { 71 | return NO; 72 | } 73 | } 74 | 75 | - (void)removeAllTask { 76 | CFDictionaryRemoveAllValues(_tasksDict); 77 | } 78 | 79 | - (void)dealloc { 80 | [(__bridge NSDictionary *)_tasksDict enumerateKeysAndObjectsUsingBlock:^(NSNumber * _Nonnull identifier, TTGDeallocTaskBlock _Nonnull block, BOOL * _Nonnull stop) { 81 | block(_target, identifier.unsignedIntegerValue); 82 | }]; 83 | pthread_mutex_destroy(&_lock); 84 | CFRelease(_tasksDict); 85 | } 86 | 87 | @end 88 | 89 | @implementation NSObject (TTGDeallocTaskHelper) 90 | 91 | + (void)load { 92 | pthread_mutex_init(&TTGDeallocTaskIdentifierLock, NULL); 93 | } 94 | 95 | - (NSUInteger)ttg_addDeallocTask:(TTGDeallocTaskBlock)taskBlock { 96 | if (!taskBlock) { 97 | return TTGDeallocTaskIllegalIdentifier; 98 | } 99 | 100 | TTGDeallocTaskModel *model = nil; 101 | 102 | @synchronized (self) { 103 | model = objc_getAssociatedObject(self, &TTGDeallocTaskModelKey); 104 | if (!model) { 105 | model = [[TTGDeallocTaskModel alloc] initWithTarget:self]; 106 | objc_setAssociatedObject(self, &TTGDeallocTaskModelKey, model, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 107 | } 108 | } 109 | 110 | NSUInteger newIdentifier = [model addTask:taskBlock]; 111 | 112 | return newIdentifier; 113 | } 114 | 115 | - (BOOL)ttg_removeDeallocTaskByIdentifier:(NSUInteger)identifier { 116 | TTGDeallocTaskModel *model = objc_getAssociatedObject(self, &TTGDeallocTaskModelKey); 117 | if (model) { 118 | return [model removeTaskWithIdentifier:identifier]; 119 | } else { 120 | return NO; 121 | } 122 | } 123 | 124 | - (void)ttg_removeAllDeallocTasks { 125 | TTGDeallocTaskModel *model = objc_getAssociatedObject(self, &TTGDeallocTaskModelKey); 126 | if (model) { 127 | [model removeAllTask]; 128 | } 129 | } 130 | 131 | @end 132 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TTGNotificationGuard_Example/Pods-TTGNotificationGuard_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 | 27 | ## TTGNotificationGuard 28 | 29 | Copyright (c) 2016 zekunyan 30 | 31 | Permission is hereby granted, free of charge, to any person obtaining a copy 32 | of this software and associated documentation files (the "Software"), to deal 33 | in the Software without restriction, including without limitation the rights 34 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 35 | copies of the Software, and to permit persons to whom the Software is 36 | furnished to do so, subject to the following conditions: 37 | 38 | The above copyright notice and this permission notice shall be included in 39 | all copies or substantial portions of the Software. 40 | 41 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 42 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 43 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 44 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 45 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 46 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 47 | THE SOFTWARE. 48 | 49 | Generated by CocoaPods - https://cocoapods.org 50 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TTGNotificationGuard_Example/Pods-TTGNotificationGuard_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 | Copyright (c) 2016 zekunyan <zekunyan@163.com> 45 | 46 | Permission is hereby granted, free of charge, to any person obtaining a copy 47 | of this software and associated documentation files (the "Software"), to deal 48 | in the Software without restriction, including without limitation the rights 49 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 50 | copies of the Software, and to permit persons to whom the Software is 51 | furnished to do so, subject to the following conditions: 52 | 53 | The above copyright notice and this permission notice shall be included in 54 | all copies or substantial portions of the Software. 55 | 56 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 57 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 58 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 59 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 60 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 61 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 62 | THE SOFTWARE. 63 | 64 | Title 65 | TTGNotificationGuard 66 | Type 67 | PSGroupSpecifier 68 | 69 | 70 | FooterText 71 | Generated by CocoaPods - https://cocoapods.org 72 | Title 73 | 74 | Type 75 | PSGroupSpecifier 76 | 77 | 78 | StringsTable 79 | Acknowledgements 80 | Title 81 | Acknowledgements 82 | 83 | 84 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TTGNotificationGuard_Example/Pods-TTGNotificationGuard_Example-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_TTGNotificationGuard_Example : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_TTGNotificationGuard_Example 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TTGNotificationGuard_Example/Pods-TTGNotificationGuard_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-TTGNotificationGuard_Example/Pods-TTGNotificationGuard_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-TTGNotificationGuard_Example/Pods-TTGNotificationGuard_Example.debug.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/TTGDeallocTaskHelper" "${PODS_ROOT}/Headers/Public/TTGNotificationGuard" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/TTGDeallocTaskHelper" "$PODS_CONFIGURATION_BUILD_DIR/TTGNotificationGuard" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/TTGDeallocTaskHelper" -isystem "${PODS_ROOT}/Headers/Public/TTGNotificationGuard" 5 | OTHER_LDFLAGS = $(inherited) -ObjC -l"TTGDeallocTaskHelper" -l"TTGNotificationGuard" -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-TTGNotificationGuard_Example/Pods-TTGNotificationGuard_Example.release.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/TTGDeallocTaskHelper" "${PODS_ROOT}/Headers/Public/TTGNotificationGuard" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/TTGDeallocTaskHelper" "$PODS_CONFIGURATION_BUILD_DIR/TTGNotificationGuard" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/TTGDeallocTaskHelper" -isystem "${PODS_ROOT}/Headers/Public/TTGNotificationGuard" 5 | OTHER_LDFLAGS = $(inherited) -ObjC -l"TTGDeallocTaskHelper" -l"TTGNotificationGuard" -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-TTGNotificationGuard_Tests/Pods-TTGNotificationGuard_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-TTGNotificationGuard_Tests/Pods-TTGNotificationGuard_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-TTGNotificationGuard_Tests/Pods-TTGNotificationGuard_Tests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_TTGNotificationGuard_Tests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_TTGNotificationGuard_Tests 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TTGNotificationGuard_Tests/Pods-TTGNotificationGuard_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-TTGNotificationGuard_Tests/Pods-TTGNotificationGuard_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-TTGNotificationGuard_Tests/Pods-TTGNotificationGuard_Tests.debug.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/TTGDeallocTaskHelper" "${PODS_ROOT}/Headers/Public/TTGNotificationGuard" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/TTGDeallocTaskHelper" "$PODS_CONFIGURATION_BUILD_DIR/TTGNotificationGuard" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/TTGDeallocTaskHelper" -isystem "${PODS_ROOT}/Headers/Public/TTGNotificationGuard" 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-TTGNotificationGuard_Tests/Pods-TTGNotificationGuard_Tests.release.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/TTGDeallocTaskHelper" "${PODS_ROOT}/Headers/Public/TTGNotificationGuard" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/TTGDeallocTaskHelper" "$PODS_CONFIGURATION_BUILD_DIR/TTGNotificationGuard" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/TTGDeallocTaskHelper" -isystem "${PODS_ROOT}/Headers/Public/TTGNotificationGuard" 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" "${PODS_ROOT}/Headers/Public/TTGNotificationGuard" 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/Pods/Target Support Files/TTGNotificationGuard/TTGNotificationGuard-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_TTGNotificationGuard : NSObject 3 | @end 4 | @implementation PodsDummy_TTGNotificationGuard 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/TTGNotificationGuard/TTGNotificationGuard-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/TTGNotificationGuard/TTGNotificationGuard.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/TTGNotificationGuard 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/TTGNotificationGuard" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/TTGDeallocTaskHelper" "${PODS_ROOT}/Headers/Public/TTGNotificationGuard" 4 | LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/TTGDeallocTaskHelper" 5 | OTHER_LDFLAGS = -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} 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | -------------------------------------------------------------------------------- /Example/TTGNotificationGuard.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 6003F58E195388D20070C39A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58D195388D20070C39A /* Foundation.framework */; }; 11 | 6003F590195388D20070C39A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58F195388D20070C39A /* CoreGraphics.framework */; }; 12 | 6003F592195388D20070C39A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F591195388D20070C39A /* UIKit.framework */; }; 13 | 6003F598195388D20070C39A /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 6003F596195388D20070C39A /* InfoPlist.strings */; }; 14 | 6003F59A195388D20070C39A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F599195388D20070C39A /* main.m */; }; 15 | 6003F59E195388D20070C39A /* TTGAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F59D195388D20070C39A /* TTGAppDelegate.m */; }; 16 | 6003F5A7195388D20070C39A /* TTGViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F5A6195388D20070C39A /* TTGViewController.m */; }; 17 | 6003F5A9195388D20070C39A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6003F5A8195388D20070C39A /* Images.xcassets */; }; 18 | 6003F5B0195388D20070C39A /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F5AF195388D20070C39A /* XCTest.framework */; }; 19 | 6003F5B1195388D20070C39A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58D195388D20070C39A /* Foundation.framework */; }; 20 | 6003F5B2195388D20070C39A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F591195388D20070C39A /* UIKit.framework */; }; 21 | 6003F5BA195388D20070C39A /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 6003F5B8195388D20070C39A /* InfoPlist.strings */; }; 22 | 6003F5BC195388D20070C39A /* Tests.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F5BB195388D20070C39A /* Tests.m */; }; 23 | 73724C0104A5E1157875D7FA /* libPods-TTGNotificationGuard_Example.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 43884C6E4136A6037903297C /* libPods-TTGNotificationGuard_Example.a */; }; 24 | 873B8AEB1B1F5CCA007FD442 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 873B8AEA1B1F5CCA007FD442 /* Main.storyboard */; }; 25 | B63516D741C0FD085D060900 /* libPods-TTGNotificationGuard_Tests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 256C44EA8E9D94552B98EB07 /* libPods-TTGNotificationGuard_Tests.a */; }; 26 | /* End PBXBuildFile section */ 27 | 28 | /* Begin PBXContainerItemProxy section */ 29 | 6003F5B3195388D20070C39A /* PBXContainerItemProxy */ = { 30 | isa = PBXContainerItemProxy; 31 | containerPortal = 6003F582195388D10070C39A /* Project object */; 32 | proxyType = 1; 33 | remoteGlobalIDString = 6003F589195388D20070C39A; 34 | remoteInfo = TTGNotificationGuard; 35 | }; 36 | /* End PBXContainerItemProxy section */ 37 | 38 | /* Begin PBXFileReference section */ 39 | 0A9762E8B7AE6EC589A4E73A /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; 40 | 1E895514BF719C882DF9336F /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; 41 | 256C44EA8E9D94552B98EB07 /* libPods-TTGNotificationGuard_Tests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-TTGNotificationGuard_Tests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 42 | 34D239C0111E40E5ED62D1A1 /* Pods-TTGNotificationGuard_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TTGNotificationGuard_Example.release.xcconfig"; path = "Pods/Target Support Files/Pods-TTGNotificationGuard_Example/Pods-TTGNotificationGuard_Example.release.xcconfig"; sourceTree = ""; }; 43 | 43884C6E4136A6037903297C /* libPods-TTGNotificationGuard_Example.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-TTGNotificationGuard_Example.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 44 | 5F30BF57169AC0A9E42FD4D1 /* Pods-TTGNotificationGuard_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TTGNotificationGuard_Example.debug.xcconfig"; path = "Pods/Target Support Files/Pods-TTGNotificationGuard_Example/Pods-TTGNotificationGuard_Example.debug.xcconfig"; sourceTree = ""; }; 45 | 6003F58A195388D20070C39A /* TTGNotificationGuard_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TTGNotificationGuard_Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; 46 | 6003F58D195388D20070C39A /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 47 | 6003F58F195388D20070C39A /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 48 | 6003F591195388D20070C39A /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 49 | 6003F595195388D20070C39A /* TTGNotificationGuard-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "TTGNotificationGuard-Info.plist"; sourceTree = ""; }; 50 | 6003F597195388D20070C39A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 51 | 6003F599195388D20070C39A /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 52 | 6003F59B195388D20070C39A /* TTGNotificationGuard-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "TTGNotificationGuard-Prefix.pch"; sourceTree = ""; }; 53 | 6003F59C195388D20070C39A /* TTGAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TTGAppDelegate.h; sourceTree = ""; }; 54 | 6003F59D195388D20070C39A /* TTGAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TTGAppDelegate.m; sourceTree = ""; }; 55 | 6003F5A5195388D20070C39A /* TTGViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TTGViewController.h; sourceTree = ""; }; 56 | 6003F5A6195388D20070C39A /* TTGViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TTGViewController.m; sourceTree = ""; }; 57 | 6003F5A8195388D20070C39A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 58 | 6003F5AE195388D20070C39A /* TTGNotificationGuard_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TTGNotificationGuard_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 59 | 6003F5AF195388D20070C39A /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; 60 | 6003F5B7195388D20070C39A /* Tests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Tests-Info.plist"; sourceTree = ""; }; 61 | 6003F5B9195388D20070C39A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 62 | 6003F5BB195388D20070C39A /* Tests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Tests.m; sourceTree = ""; }; 63 | 606FC2411953D9B200FFA9A0 /* Tests-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Tests-Prefix.pch"; sourceTree = ""; }; 64 | 72865F8D358140B2374A7FF9 /* Pods-TTGNotificationGuard_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TTGNotificationGuard_Tests.release.xcconfig"; path = "Pods/Target Support Files/Pods-TTGNotificationGuard_Tests/Pods-TTGNotificationGuard_Tests.release.xcconfig"; sourceTree = ""; }; 65 | 76414F7C5ECBDBD4739ED197 /* TTGNotificationGuard.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = TTGNotificationGuard.podspec; path = ../TTGNotificationGuard.podspec; sourceTree = ""; }; 66 | 873B8AEA1B1F5CCA007FD442 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = ""; }; 67 | C4D097ABFF33869B74BD1CE4 /* Pods-TTGNotificationGuard_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TTGNotificationGuard_Tests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-TTGNotificationGuard_Tests/Pods-TTGNotificationGuard_Tests.debug.xcconfig"; sourceTree = ""; }; 68 | /* End PBXFileReference section */ 69 | 70 | /* Begin PBXFrameworksBuildPhase section */ 71 | 6003F587195388D20070C39A /* Frameworks */ = { 72 | isa = PBXFrameworksBuildPhase; 73 | buildActionMask = 2147483647; 74 | files = ( 75 | 6003F590195388D20070C39A /* CoreGraphics.framework in Frameworks */, 76 | 6003F592195388D20070C39A /* UIKit.framework in Frameworks */, 77 | 6003F58E195388D20070C39A /* Foundation.framework in Frameworks */, 78 | 73724C0104A5E1157875D7FA /* libPods-TTGNotificationGuard_Example.a in Frameworks */, 79 | ); 80 | runOnlyForDeploymentPostprocessing = 0; 81 | }; 82 | 6003F5AB195388D20070C39A /* Frameworks */ = { 83 | isa = PBXFrameworksBuildPhase; 84 | buildActionMask = 2147483647; 85 | files = ( 86 | 6003F5B0195388D20070C39A /* XCTest.framework in Frameworks */, 87 | 6003F5B2195388D20070C39A /* UIKit.framework in Frameworks */, 88 | 6003F5B1195388D20070C39A /* Foundation.framework in Frameworks */, 89 | B63516D741C0FD085D060900 /* libPods-TTGNotificationGuard_Tests.a in Frameworks */, 90 | ); 91 | runOnlyForDeploymentPostprocessing = 0; 92 | }; 93 | /* End PBXFrameworksBuildPhase section */ 94 | 95 | /* Begin PBXGroup section */ 96 | 6003F581195388D10070C39A = { 97 | isa = PBXGroup; 98 | children = ( 99 | 60FF7A9C1954A5C5007DD14C /* Podspec Metadata */, 100 | 6003F593195388D20070C39A /* Example for TTGNotificationGuard */, 101 | 6003F5B5195388D20070C39A /* Tests */, 102 | 6003F58C195388D20070C39A /* Frameworks */, 103 | 6003F58B195388D20070C39A /* Products */, 104 | 7BDD6E6C1C41F4FDDC979DDF /* Pods */, 105 | ); 106 | sourceTree = ""; 107 | }; 108 | 6003F58B195388D20070C39A /* Products */ = { 109 | isa = PBXGroup; 110 | children = ( 111 | 6003F58A195388D20070C39A /* TTGNotificationGuard_Example.app */, 112 | 6003F5AE195388D20070C39A /* TTGNotificationGuard_Tests.xctest */, 113 | ); 114 | name = Products; 115 | sourceTree = ""; 116 | }; 117 | 6003F58C195388D20070C39A /* Frameworks */ = { 118 | isa = PBXGroup; 119 | children = ( 120 | 6003F58D195388D20070C39A /* Foundation.framework */, 121 | 6003F58F195388D20070C39A /* CoreGraphics.framework */, 122 | 6003F591195388D20070C39A /* UIKit.framework */, 123 | 6003F5AF195388D20070C39A /* XCTest.framework */, 124 | 43884C6E4136A6037903297C /* libPods-TTGNotificationGuard_Example.a */, 125 | 256C44EA8E9D94552B98EB07 /* libPods-TTGNotificationGuard_Tests.a */, 126 | ); 127 | name = Frameworks; 128 | sourceTree = ""; 129 | }; 130 | 6003F593195388D20070C39A /* Example for TTGNotificationGuard */ = { 131 | isa = PBXGroup; 132 | children = ( 133 | 6003F59C195388D20070C39A /* TTGAppDelegate.h */, 134 | 6003F59D195388D20070C39A /* TTGAppDelegate.m */, 135 | 873B8AEA1B1F5CCA007FD442 /* Main.storyboard */, 136 | 6003F5A5195388D20070C39A /* TTGViewController.h */, 137 | 6003F5A6195388D20070C39A /* TTGViewController.m */, 138 | 6003F5A8195388D20070C39A /* Images.xcassets */, 139 | 6003F594195388D20070C39A /* Supporting Files */, 140 | ); 141 | name = "Example for TTGNotificationGuard"; 142 | path = TTGNotificationGuard; 143 | sourceTree = ""; 144 | }; 145 | 6003F594195388D20070C39A /* Supporting Files */ = { 146 | isa = PBXGroup; 147 | children = ( 148 | 6003F595195388D20070C39A /* TTGNotificationGuard-Info.plist */, 149 | 6003F596195388D20070C39A /* InfoPlist.strings */, 150 | 6003F599195388D20070C39A /* main.m */, 151 | 6003F59B195388D20070C39A /* TTGNotificationGuard-Prefix.pch */, 152 | ); 153 | name = "Supporting Files"; 154 | sourceTree = ""; 155 | }; 156 | 6003F5B5195388D20070C39A /* Tests */ = { 157 | isa = PBXGroup; 158 | children = ( 159 | 6003F5BB195388D20070C39A /* Tests.m */, 160 | 6003F5B6195388D20070C39A /* Supporting Files */, 161 | ); 162 | path = Tests; 163 | sourceTree = ""; 164 | }; 165 | 6003F5B6195388D20070C39A /* Supporting Files */ = { 166 | isa = PBXGroup; 167 | children = ( 168 | 6003F5B7195388D20070C39A /* Tests-Info.plist */, 169 | 6003F5B8195388D20070C39A /* InfoPlist.strings */, 170 | 606FC2411953D9B200FFA9A0 /* Tests-Prefix.pch */, 171 | ); 172 | name = "Supporting Files"; 173 | sourceTree = ""; 174 | }; 175 | 60FF7A9C1954A5C5007DD14C /* Podspec Metadata */ = { 176 | isa = PBXGroup; 177 | children = ( 178 | 76414F7C5ECBDBD4739ED197 /* TTGNotificationGuard.podspec */, 179 | 0A9762E8B7AE6EC589A4E73A /* README.md */, 180 | 1E895514BF719C882DF9336F /* LICENSE */, 181 | ); 182 | name = "Podspec Metadata"; 183 | sourceTree = ""; 184 | }; 185 | 7BDD6E6C1C41F4FDDC979DDF /* Pods */ = { 186 | isa = PBXGroup; 187 | children = ( 188 | 5F30BF57169AC0A9E42FD4D1 /* Pods-TTGNotificationGuard_Example.debug.xcconfig */, 189 | 34D239C0111E40E5ED62D1A1 /* Pods-TTGNotificationGuard_Example.release.xcconfig */, 190 | C4D097ABFF33869B74BD1CE4 /* Pods-TTGNotificationGuard_Tests.debug.xcconfig */, 191 | 72865F8D358140B2374A7FF9 /* Pods-TTGNotificationGuard_Tests.release.xcconfig */, 192 | ); 193 | name = Pods; 194 | sourceTree = ""; 195 | }; 196 | /* End PBXGroup section */ 197 | 198 | /* Begin PBXNativeTarget section */ 199 | 6003F589195388D20070C39A /* TTGNotificationGuard_Example */ = { 200 | isa = PBXNativeTarget; 201 | buildConfigurationList = 6003F5BF195388D20070C39A /* Build configuration list for PBXNativeTarget "TTGNotificationGuard_Example" */; 202 | buildPhases = ( 203 | AE9C8BCB36EEA88BFA1527D5 /* [CP] Check Pods Manifest.lock */, 204 | 6003F586195388D20070C39A /* Sources */, 205 | 6003F587195388D20070C39A /* Frameworks */, 206 | 6003F588195388D20070C39A /* Resources */, 207 | ABFAEA5A9374F3C834772180 /* [CP] Embed Pods Frameworks */, 208 | B2E61792F5A4CAC715B6B8B1 /* [CP] Copy Pods Resources */, 209 | ); 210 | buildRules = ( 211 | ); 212 | dependencies = ( 213 | ); 214 | name = TTGNotificationGuard_Example; 215 | productName = TTGNotificationGuard; 216 | productReference = 6003F58A195388D20070C39A /* TTGNotificationGuard_Example.app */; 217 | productType = "com.apple.product-type.application"; 218 | }; 219 | 6003F5AD195388D20070C39A /* TTGNotificationGuard_Tests */ = { 220 | isa = PBXNativeTarget; 221 | buildConfigurationList = 6003F5C2195388D20070C39A /* Build configuration list for PBXNativeTarget "TTGNotificationGuard_Tests" */; 222 | buildPhases = ( 223 | B2EE68F683BC4CA141E0D813 /* [CP] Check Pods Manifest.lock */, 224 | 6003F5AA195388D20070C39A /* Sources */, 225 | 6003F5AB195388D20070C39A /* Frameworks */, 226 | 6003F5AC195388D20070C39A /* Resources */, 227 | 2C33335021013E8AA8935662 /* [CP] Embed Pods Frameworks */, 228 | E6B8DB43450C9631F218B797 /* [CP] Copy Pods Resources */, 229 | ); 230 | buildRules = ( 231 | ); 232 | dependencies = ( 233 | 6003F5B4195388D20070C39A /* PBXTargetDependency */, 234 | ); 235 | name = TTGNotificationGuard_Tests; 236 | productName = TTGNotificationGuardTests; 237 | productReference = 6003F5AE195388D20070C39A /* TTGNotificationGuard_Tests.xctest */; 238 | productType = "com.apple.product-type.bundle.unit-test"; 239 | }; 240 | /* End PBXNativeTarget section */ 241 | 242 | /* Begin PBXProject section */ 243 | 6003F582195388D10070C39A /* Project object */ = { 244 | isa = PBXProject; 245 | attributes = { 246 | CLASSPREFIX = TTG; 247 | LastUpgradeCheck = 0720; 248 | ORGANIZATIONNAME = zekunyan; 249 | TargetAttributes = { 250 | 6003F5AD195388D20070C39A = { 251 | TestTargetID = 6003F589195388D20070C39A; 252 | }; 253 | }; 254 | }; 255 | buildConfigurationList = 6003F585195388D10070C39A /* Build configuration list for PBXProject "TTGNotificationGuard" */; 256 | compatibilityVersion = "Xcode 3.2"; 257 | developmentRegion = English; 258 | hasScannedForEncodings = 0; 259 | knownRegions = ( 260 | en, 261 | Base, 262 | ); 263 | mainGroup = 6003F581195388D10070C39A; 264 | productRefGroup = 6003F58B195388D20070C39A /* Products */; 265 | projectDirPath = ""; 266 | projectRoot = ""; 267 | targets = ( 268 | 6003F589195388D20070C39A /* TTGNotificationGuard_Example */, 269 | 6003F5AD195388D20070C39A /* TTGNotificationGuard_Tests */, 270 | ); 271 | }; 272 | /* End PBXProject section */ 273 | 274 | /* Begin PBXResourcesBuildPhase section */ 275 | 6003F588195388D20070C39A /* Resources */ = { 276 | isa = PBXResourcesBuildPhase; 277 | buildActionMask = 2147483647; 278 | files = ( 279 | 873B8AEB1B1F5CCA007FD442 /* Main.storyboard in Resources */, 280 | 6003F5A9195388D20070C39A /* Images.xcassets in Resources */, 281 | 6003F598195388D20070C39A /* InfoPlist.strings in Resources */, 282 | ); 283 | runOnlyForDeploymentPostprocessing = 0; 284 | }; 285 | 6003F5AC195388D20070C39A /* Resources */ = { 286 | isa = PBXResourcesBuildPhase; 287 | buildActionMask = 2147483647; 288 | files = ( 289 | 6003F5BA195388D20070C39A /* InfoPlist.strings in Resources */, 290 | ); 291 | runOnlyForDeploymentPostprocessing = 0; 292 | }; 293 | /* End PBXResourcesBuildPhase section */ 294 | 295 | /* Begin PBXShellScriptBuildPhase section */ 296 | 2C33335021013E8AA8935662 /* [CP] Embed Pods Frameworks */ = { 297 | isa = PBXShellScriptBuildPhase; 298 | buildActionMask = 2147483647; 299 | files = ( 300 | ); 301 | inputPaths = ( 302 | ); 303 | name = "[CP] Embed Pods Frameworks"; 304 | outputPaths = ( 305 | ); 306 | runOnlyForDeploymentPostprocessing = 0; 307 | shellPath = /bin/sh; 308 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-TTGNotificationGuard_Tests/Pods-TTGNotificationGuard_Tests-frameworks.sh\"\n"; 309 | showEnvVarsInLog = 0; 310 | }; 311 | ABFAEA5A9374F3C834772180 /* [CP] Embed Pods Frameworks */ = { 312 | isa = PBXShellScriptBuildPhase; 313 | buildActionMask = 2147483647; 314 | files = ( 315 | ); 316 | inputPaths = ( 317 | ); 318 | name = "[CP] Embed Pods Frameworks"; 319 | outputPaths = ( 320 | ); 321 | runOnlyForDeploymentPostprocessing = 0; 322 | shellPath = /bin/sh; 323 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-TTGNotificationGuard_Example/Pods-TTGNotificationGuard_Example-frameworks.sh\"\n"; 324 | showEnvVarsInLog = 0; 325 | }; 326 | AE9C8BCB36EEA88BFA1527D5 /* [CP] Check Pods Manifest.lock */ = { 327 | isa = PBXShellScriptBuildPhase; 328 | buildActionMask = 2147483647; 329 | files = ( 330 | ); 331 | inputPaths = ( 332 | ); 333 | name = "[CP] Check Pods Manifest.lock"; 334 | outputPaths = ( 335 | ); 336 | runOnlyForDeploymentPostprocessing = 0; 337 | shellPath = /bin/sh; 338 | 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"; 339 | showEnvVarsInLog = 0; 340 | }; 341 | B2E61792F5A4CAC715B6B8B1 /* [CP] Copy Pods Resources */ = { 342 | isa = PBXShellScriptBuildPhase; 343 | buildActionMask = 2147483647; 344 | files = ( 345 | ); 346 | inputPaths = ( 347 | ); 348 | name = "[CP] Copy Pods Resources"; 349 | outputPaths = ( 350 | ); 351 | runOnlyForDeploymentPostprocessing = 0; 352 | shellPath = /bin/sh; 353 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-TTGNotificationGuard_Example/Pods-TTGNotificationGuard_Example-resources.sh\"\n"; 354 | showEnvVarsInLog = 0; 355 | }; 356 | B2EE68F683BC4CA141E0D813 /* [CP] Check Pods Manifest.lock */ = { 357 | isa = PBXShellScriptBuildPhase; 358 | buildActionMask = 2147483647; 359 | files = ( 360 | ); 361 | inputPaths = ( 362 | ); 363 | name = "[CP] Check Pods Manifest.lock"; 364 | outputPaths = ( 365 | ); 366 | runOnlyForDeploymentPostprocessing = 0; 367 | shellPath = /bin/sh; 368 | 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"; 369 | showEnvVarsInLog = 0; 370 | }; 371 | E6B8DB43450C9631F218B797 /* [CP] Copy Pods Resources */ = { 372 | isa = PBXShellScriptBuildPhase; 373 | buildActionMask = 2147483647; 374 | files = ( 375 | ); 376 | inputPaths = ( 377 | ); 378 | name = "[CP] Copy Pods Resources"; 379 | outputPaths = ( 380 | ); 381 | runOnlyForDeploymentPostprocessing = 0; 382 | shellPath = /bin/sh; 383 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-TTGNotificationGuard_Tests/Pods-TTGNotificationGuard_Tests-resources.sh\"\n"; 384 | showEnvVarsInLog = 0; 385 | }; 386 | /* End PBXShellScriptBuildPhase section */ 387 | 388 | /* Begin PBXSourcesBuildPhase section */ 389 | 6003F586195388D20070C39A /* Sources */ = { 390 | isa = PBXSourcesBuildPhase; 391 | buildActionMask = 2147483647; 392 | files = ( 393 | 6003F59E195388D20070C39A /* TTGAppDelegate.m in Sources */, 394 | 6003F5A7195388D20070C39A /* TTGViewController.m in Sources */, 395 | 6003F59A195388D20070C39A /* main.m in Sources */, 396 | ); 397 | runOnlyForDeploymentPostprocessing = 0; 398 | }; 399 | 6003F5AA195388D20070C39A /* Sources */ = { 400 | isa = PBXSourcesBuildPhase; 401 | buildActionMask = 2147483647; 402 | files = ( 403 | 6003F5BC195388D20070C39A /* Tests.m in Sources */, 404 | ); 405 | runOnlyForDeploymentPostprocessing = 0; 406 | }; 407 | /* End PBXSourcesBuildPhase section */ 408 | 409 | /* Begin PBXTargetDependency section */ 410 | 6003F5B4195388D20070C39A /* PBXTargetDependency */ = { 411 | isa = PBXTargetDependency; 412 | target = 6003F589195388D20070C39A /* TTGNotificationGuard_Example */; 413 | targetProxy = 6003F5B3195388D20070C39A /* PBXContainerItemProxy */; 414 | }; 415 | /* End PBXTargetDependency section */ 416 | 417 | /* Begin PBXVariantGroup section */ 418 | 6003F596195388D20070C39A /* InfoPlist.strings */ = { 419 | isa = PBXVariantGroup; 420 | children = ( 421 | 6003F597195388D20070C39A /* en */, 422 | ); 423 | name = InfoPlist.strings; 424 | sourceTree = ""; 425 | }; 426 | 6003F5B8195388D20070C39A /* InfoPlist.strings */ = { 427 | isa = PBXVariantGroup; 428 | children = ( 429 | 6003F5B9195388D20070C39A /* en */, 430 | ); 431 | name = InfoPlist.strings; 432 | sourceTree = ""; 433 | }; 434 | /* End PBXVariantGroup section */ 435 | 436 | /* Begin XCBuildConfiguration section */ 437 | 6003F5BD195388D20070C39A /* Debug */ = { 438 | isa = XCBuildConfiguration; 439 | buildSettings = { 440 | ALWAYS_SEARCH_USER_PATHS = NO; 441 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 442 | CLANG_CXX_LIBRARY = "libc++"; 443 | CLANG_ENABLE_MODULES = YES; 444 | CLANG_ENABLE_OBJC_ARC = YES; 445 | CLANG_WARN_BOOL_CONVERSION = YES; 446 | CLANG_WARN_CONSTANT_CONVERSION = YES; 447 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 448 | CLANG_WARN_EMPTY_BODY = YES; 449 | CLANG_WARN_ENUM_CONVERSION = YES; 450 | CLANG_WARN_INT_CONVERSION = YES; 451 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 452 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 453 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 454 | COPY_PHASE_STRIP = NO; 455 | ENABLE_TESTABILITY = YES; 456 | GCC_C_LANGUAGE_STANDARD = gnu99; 457 | GCC_DYNAMIC_NO_PIC = NO; 458 | GCC_OPTIMIZATION_LEVEL = 0; 459 | GCC_PREPROCESSOR_DEFINITIONS = ( 460 | "DEBUG=1", 461 | "$(inherited)", 462 | ); 463 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 464 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 465 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 466 | GCC_WARN_UNDECLARED_SELECTOR = YES; 467 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 468 | GCC_WARN_UNUSED_FUNCTION = YES; 469 | GCC_WARN_UNUSED_VARIABLE = YES; 470 | IPHONEOS_DEPLOYMENT_TARGET = 8.3; 471 | ONLY_ACTIVE_ARCH = YES; 472 | SDKROOT = iphoneos; 473 | TARGETED_DEVICE_FAMILY = "1,2"; 474 | }; 475 | name = Debug; 476 | }; 477 | 6003F5BE195388D20070C39A /* Release */ = { 478 | isa = XCBuildConfiguration; 479 | buildSettings = { 480 | ALWAYS_SEARCH_USER_PATHS = NO; 481 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 482 | CLANG_CXX_LIBRARY = "libc++"; 483 | CLANG_ENABLE_MODULES = YES; 484 | CLANG_ENABLE_OBJC_ARC = YES; 485 | CLANG_WARN_BOOL_CONVERSION = YES; 486 | CLANG_WARN_CONSTANT_CONVERSION = YES; 487 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 488 | CLANG_WARN_EMPTY_BODY = YES; 489 | CLANG_WARN_ENUM_CONVERSION = YES; 490 | CLANG_WARN_INT_CONVERSION = YES; 491 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 492 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 493 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 494 | COPY_PHASE_STRIP = YES; 495 | ENABLE_NS_ASSERTIONS = NO; 496 | GCC_C_LANGUAGE_STANDARD = gnu99; 497 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 498 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 499 | GCC_WARN_UNDECLARED_SELECTOR = YES; 500 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 501 | GCC_WARN_UNUSED_FUNCTION = YES; 502 | GCC_WARN_UNUSED_VARIABLE = YES; 503 | IPHONEOS_DEPLOYMENT_TARGET = 8.3; 504 | SDKROOT = iphoneos; 505 | TARGETED_DEVICE_FAMILY = "1,2"; 506 | VALIDATE_PRODUCT = YES; 507 | }; 508 | name = Release; 509 | }; 510 | 6003F5C0195388D20070C39A /* Debug */ = { 511 | isa = XCBuildConfiguration; 512 | baseConfigurationReference = 5F30BF57169AC0A9E42FD4D1 /* Pods-TTGNotificationGuard_Example.debug.xcconfig */; 513 | buildSettings = { 514 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 515 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 516 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 517 | GCC_PREFIX_HEADER = "TTGNotificationGuard/TTGNotificationGuard-Prefix.pch"; 518 | INFOPLIST_FILE = "TTGNotificationGuard/TTGNotificationGuard-Info.plist"; 519 | IPHONEOS_DEPLOYMENT_TARGET = 6.0; 520 | MODULE_NAME = ExampleApp; 521 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}"; 522 | PRODUCT_NAME = "$(TARGET_NAME)"; 523 | WRAPPER_EXTENSION = app; 524 | }; 525 | name = Debug; 526 | }; 527 | 6003F5C1195388D20070C39A /* Release */ = { 528 | isa = XCBuildConfiguration; 529 | baseConfigurationReference = 34D239C0111E40E5ED62D1A1 /* Pods-TTGNotificationGuard_Example.release.xcconfig */; 530 | buildSettings = { 531 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 532 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 533 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 534 | GCC_PREFIX_HEADER = "TTGNotificationGuard/TTGNotificationGuard-Prefix.pch"; 535 | INFOPLIST_FILE = "TTGNotificationGuard/TTGNotificationGuard-Info.plist"; 536 | IPHONEOS_DEPLOYMENT_TARGET = 6.0; 537 | MODULE_NAME = ExampleApp; 538 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}"; 539 | PRODUCT_NAME = "$(TARGET_NAME)"; 540 | WRAPPER_EXTENSION = app; 541 | }; 542 | name = Release; 543 | }; 544 | 6003F5C3195388D20070C39A /* Debug */ = { 545 | isa = XCBuildConfiguration; 546 | baseConfigurationReference = C4D097ABFF33869B74BD1CE4 /* Pods-TTGNotificationGuard_Tests.debug.xcconfig */; 547 | buildSettings = { 548 | BUNDLE_LOADER = "$(TEST_HOST)"; 549 | FRAMEWORK_SEARCH_PATHS = ( 550 | "$(SDKROOT)/Developer/Library/Frameworks", 551 | "$(inherited)", 552 | "$(DEVELOPER_FRAMEWORKS_DIR)", 553 | ); 554 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 555 | GCC_PREFIX_HEADER = "Tests/Tests-Prefix.pch"; 556 | GCC_PREPROCESSOR_DEFINITIONS = ( 557 | "DEBUG=1", 558 | "$(inherited)", 559 | ); 560 | INFOPLIST_FILE = "Tests/Tests-Info.plist"; 561 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}"; 562 | PRODUCT_NAME = "$(TARGET_NAME)"; 563 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TTGNotificationGuard_Example.app/TTGNotificationGuard_Example"; 564 | WRAPPER_EXTENSION = xctest; 565 | }; 566 | name = Debug; 567 | }; 568 | 6003F5C4195388D20070C39A /* Release */ = { 569 | isa = XCBuildConfiguration; 570 | baseConfigurationReference = 72865F8D358140B2374A7FF9 /* Pods-TTGNotificationGuard_Tests.release.xcconfig */; 571 | buildSettings = { 572 | BUNDLE_LOADER = "$(TEST_HOST)"; 573 | FRAMEWORK_SEARCH_PATHS = ( 574 | "$(SDKROOT)/Developer/Library/Frameworks", 575 | "$(inherited)", 576 | "$(DEVELOPER_FRAMEWORKS_DIR)", 577 | ); 578 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 579 | GCC_PREFIX_HEADER = "Tests/Tests-Prefix.pch"; 580 | INFOPLIST_FILE = "Tests/Tests-Info.plist"; 581 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}"; 582 | PRODUCT_NAME = "$(TARGET_NAME)"; 583 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TTGNotificationGuard_Example.app/TTGNotificationGuard_Example"; 584 | WRAPPER_EXTENSION = xctest; 585 | }; 586 | name = Release; 587 | }; 588 | /* End XCBuildConfiguration section */ 589 | 590 | /* Begin XCConfigurationList section */ 591 | 6003F585195388D10070C39A /* Build configuration list for PBXProject "TTGNotificationGuard" */ = { 592 | isa = XCConfigurationList; 593 | buildConfigurations = ( 594 | 6003F5BD195388D20070C39A /* Debug */, 595 | 6003F5BE195388D20070C39A /* Release */, 596 | ); 597 | defaultConfigurationIsVisible = 0; 598 | defaultConfigurationName = Release; 599 | }; 600 | 6003F5BF195388D20070C39A /* Build configuration list for PBXNativeTarget "TTGNotificationGuard_Example" */ = { 601 | isa = XCConfigurationList; 602 | buildConfigurations = ( 603 | 6003F5C0195388D20070C39A /* Debug */, 604 | 6003F5C1195388D20070C39A /* Release */, 605 | ); 606 | defaultConfigurationIsVisible = 0; 607 | defaultConfigurationName = Release; 608 | }; 609 | 6003F5C2195388D20070C39A /* Build configuration list for PBXNativeTarget "TTGNotificationGuard_Tests" */ = { 610 | isa = XCConfigurationList; 611 | buildConfigurations = ( 612 | 6003F5C3195388D20070C39A /* Debug */, 613 | 6003F5C4195388D20070C39A /* Release */, 614 | ); 615 | defaultConfigurationIsVisible = 0; 616 | defaultConfigurationName = Release; 617 | }; 618 | /* End XCConfigurationList section */ 619 | }; 620 | rootObject = 6003F582195388D10070C39A /* Project object */; 621 | } 622 | -------------------------------------------------------------------------------- /Example/TTGNotificationGuard.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/TTGNotificationGuard.xcodeproj/xcshareddata/xcschemes/TTGNotificationGuard-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/TTGNotificationGuard.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Example/TTGNotificationGuard/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" : "40x40", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "60x60", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "ipad", 20 | "size" : "29x29", 21 | "scale" : "1x" 22 | }, 23 | { 24 | "idiom" : "ipad", 25 | "size" : "29x29", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "ipad", 30 | "size" : "40x40", 31 | "scale" : "1x" 32 | }, 33 | { 34 | "idiom" : "ipad", 35 | "size" : "40x40", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "ipad", 40 | "size" : "76x76", 41 | "scale" : "1x" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "size" : "76x76", 46 | "scale" : "2x" 47 | } 48 | ], 49 | "info" : { 50 | "version" : 1, 51 | "author" : "xcode" 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /Example/TTGNotificationGuard/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/TTGNotificationGuard/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 49 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | -------------------------------------------------------------------------------- /Example/TTGNotificationGuard/TTGAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // TTGAppDelegate.h 3 | // TTGNotificationGuard 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/TTGNotificationGuard/TTGAppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // TTGAppDelegate.m 3 | // TTGNotificationGuard 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/TTGNotificationGuard/TTGNotificationGuard-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.0 25 | LSRequiresIPhoneOS 26 | 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationPortraitUpsideDown 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /Example/TTGNotificationGuard/TTGNotificationGuard-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/TTGNotificationGuard/TTGViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // TTGViewController.h 3 | // TTGNotificationGuard 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/TTGNotificationGuard/TTGViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // TTGViewController.m 3 | // TTGNotificationGuard 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 "NSNotificationCenter+TTGNotificationGuard.h" 11 | 12 | static NSString *const TTGNotificationGuardTestNotificationName = @"TTGNotificationGuardTestNotificationName"; 13 | 14 | @interface TTGInnerTestClass : NSObject 15 | @end 16 | 17 | @implementation TTGInnerTestClass 18 | 19 | - (void)receiverNotification:(NSNotification *)notification { 20 | NSLog(@"TTGInnerTestClass %@ receive notification", self); 21 | } 22 | 23 | @end 24 | 25 | @interface TTGViewController () 26 | @property (weak, nonatomic) IBOutlet UILabel *switchInfoLabel; 27 | @property (weak, nonatomic) IBOutlet UITextView *infoTextView; 28 | @end 29 | 30 | @implementation TTGViewController 31 | 32 | - (void)viewDidLoad { 33 | [super viewDidLoad]; 34 | 35 | if ([UIDevice currentDevice].systemVersion.floatValue >= 9) { 36 | [self showInfo:@"!!! Demo only work below iOS 9 !!!"]; 37 | } 38 | 39 | [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(timerCallback) userInfo:nil repeats:YES]; 40 | } 41 | 42 | - (void)timerCallback { 43 | [[NSNotificationCenter defaultCenter] postNotificationName:TTGNotificationGuardTestNotificationName object:nil]; 44 | } 45 | 46 | - (IBAction)runDemo:(id)sender { 47 | @autoreleasepool { 48 | TTGInnerTestClass *object = [TTGInnerTestClass new]; 49 | [self showInfo:@"--------------------------------"]; 50 | [self showInfo:[NSString stringWithFormat:@"New Object: %@ to receive notification.", object]]; 51 | 52 | if (![NSNotificationCenter ttg_getTTGNotificationGuardEnable] && [UIDevice currentDevice].systemVersion.floatValue < 9) { 53 | [self showInfo:@"!!!!!! App will crash in 3 seconds !!!!!!"]; 54 | } 55 | 56 | [[NSNotificationCenter defaultCenter] addObserver:object 57 | selector:@selector(receiverNotification:) 58 | name:TTGNotificationGuardTestNotificationName 59 | object:nil]; 60 | 61 | __block id blockObject = object; 62 | dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 63 | [self showInfo:[NSString stringWithFormat:@"Set object %@ to nil and release it.", blockObject]]; 64 | blockObject = nil; 65 | }); 66 | } 67 | } 68 | 69 | - (IBAction)guardSwitch:(UISwitch *)sender { 70 | [NSNotificationCenter ttg_setTTGNotificationGuardEnable:sender.on]; 71 | _switchInfoLabel.text = [NSString stringWithFormat:@"TTGNotificationGuard is %@", sender.on ? @"on" : @"off"]; 72 | } 73 | 74 | - (void)showInfo:(NSString *)info { 75 | _infoTextView.text = [NSString stringWithFormat:@"%@\n%@", _infoTextView.text, info]; 76 | [_infoTextView scrollRangeToVisible:NSMakeRange(_infoTextView.text.length - 1, 0)]; 77 | } 78 | @end 79 | -------------------------------------------------------------------------------- /Example/TTGNotificationGuard/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /Example/TTGNotificationGuard/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // TTGNotificationGuard 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 | // TTGNotificationGuardTests.m 3 | // TTGNotificationGuardTests 4 | // 5 | // Created by zekunyan on 07/17/2016. 6 | // Copyright (c) 2016 zekunyan. All rights reserved. 7 | // 8 | 9 | @import XCTest; 10 | 11 | @interface Tests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation Tests 16 | 17 | - (void)setUp 18 | { 19 | [super setUp]; 20 | // Put setup code here. This method is called before the invocation of each test method in the class. 21 | } 22 | 23 | - (void)tearDown 24 | { 25 | // Put teardown code here. This method is called after the invocation of each test method in the class. 26 | [super tearDown]; 27 | } 28 | 29 | - (void)testExample 30 | { 31 | 32 | } 33 | 34 | @end 35 | 36 | -------------------------------------------------------------------------------- /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 | # TTGNotificationGuard 2 | 3 | [![CI Status](http://img.shields.io/travis/zekunyan/TTGNotificationGuard.svg?style=flat)](https://travis-ci.org/zekunyan/TTGNotificationGuard) 4 | [![Version](https://img.shields.io/cocoapods/v/TTGNotificationGuard.svg?style=flat)](http://cocoapods.org/pods/TTGNotificationGuard) 5 | [![License](https://img.shields.io/cocoapods/l/TTGNotificationGuard.svg?style=flat)](http://cocoapods.org/pods/TTGNotificationGuard) 6 | [![Platform](https://img.shields.io/cocoapods/p/TTGNotificationGuard.svg?style=flat)](http://cocoapods.org/pods/TTGNotificationGuard) 7 | 8 | ## What 9 | Auto remove the observer from NSNotificationCenter after the oberser dealloc, base on [TTGDeallocTaskHelper](https://github.com/zekunyan/TTGDeallocTaskHelper). 10 | 11 | ## Requirements 12 | iOS 6 and later. 13 | 14 | ## Installation 15 | 16 | TTGNotificationGuard is available through [CocoaPods](http://cocoapods.org). To install 17 | it, simply add the following line to your Podfile: 18 | 19 | ```ruby 20 | pod "TTGNotificationGuard" 21 | ``` 22 | 23 | ## Usage 24 | 1. TTGNotificationGuard is default off, so you must turn it on first. 25 | ``` 26 | #import "NSNotificationCenter+TTGNotificationGuard.h" 27 | 28 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 29 | // Enable the TTGNotificationGuard 30 | [NSNotificationCenter ttg_setTTGNotificationGuardEnable:YES]; 31 | return YES; 32 | } 33 | ``` 34 | 35 | 2. No more need to do. Just start coding as usual :) 36 | 37 | ## Example 38 | 39 | To run the example project, clone the repo, and run `pod install` from the Example directory first. 40 | 41 | ## Author 42 | 43 | zekunyan, zekunyan@163.com 44 | 45 | ## License 46 | 47 | TTGNotificationGuard is available under the MIT license. See the LICENSE file for more info. 48 | -------------------------------------------------------------------------------- /TTGNotificationGuard.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = 'TTGNotificationGuard' 3 | s.version = '0.1.1' 4 | s.summary = 'Auto remove the observer from NSNotificationCenter after the oberser dealloc.' 5 | 6 | s.description = <<-DESC 7 | Auto remove the observer from NSNotificationCenter after the oberser dealloc, base on TTGDeallocTaskHelper. 8 | DESC 9 | 10 | s.homepage = 'https://github.com/zekunyan/TTGNotificationGuard' 11 | s.license = { :type => 'MIT', :file => 'LICENSE' } 12 | s.author = { 'zekunyan' => 'zekunyan@163.com' } 13 | s.source = { :git => 'https://github.com/zekunyan/TTGNotificationGuard.git', :tag => s.version.to_s } 14 | s.social_media_url = 'http://tutuge.me' 15 | 16 | s.ios.deployment_target = '6.0' 17 | s.platform = :ios, '6.0' 18 | s.requires_arc = true 19 | 20 | s.source_files = 'TTGNotificationGuard/Classes/**' 21 | s.public_header_files = 'TTGNotificationGuard/Classes/*.h' 22 | 23 | s.frameworks = 'UIKit', 'CoreFoundation' 24 | s.dependency 'TTGDeallocTaskHelper' 25 | end 26 | -------------------------------------------------------------------------------- /TTGNotificationGuard/Assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zekunyan/TTGNotificationGuard/62aca47f63ca5eaed774497c98991675beeb2850/TTGNotificationGuard/Assets/.gitkeep -------------------------------------------------------------------------------- /TTGNotificationGuard/Classes/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zekunyan/TTGNotificationGuard/62aca47f63ca5eaed774497c98991675beeb2850/TTGNotificationGuard/Classes/.gitkeep -------------------------------------------------------------------------------- /TTGNotificationGuard/Classes/NSNotificationCenter+TTGNotificationGuard.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSNotificationCenter+TTGNotificationGuard.h 3 | // Pods 4 | // 5 | // Created by tutuge on 16/7/17. 6 | // 7 | // 8 | 9 | #import 10 | 11 | @interface NSNotificationCenter (TTGNotificationGuard) 12 | 13 | + (void)ttg_setTTGNotificationGuardEnable:(BOOL)enable; 14 | 15 | + (BOOL)ttg_getTTGNotificationGuardEnable; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /TTGNotificationGuard/Classes/NSNotificationCenter+TTGNotificationGuard.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSNotificationCenter+TTGNotificationGuard.m 3 | // Pods 4 | // 5 | // Created by tutuge on 16/7/17. 6 | // 7 | // 8 | 9 | #import "NSNotificationCenter+TTGNotificationGuard.h" 10 | #import 11 | #import "NSObject+TTGDeallocTaskHelper.h" 12 | 13 | static BOOL TTGNotificationGuardEnable = NO; 14 | static char TTGNotificationGuardDeallocTaskIdentifierKey; 15 | 16 | @implementation NSNotificationCenter (TTGNotificationGuard) 17 | 18 | + (void)load { 19 | static dispatch_once_t onceToken; 20 | dispatch_once(&onceToken, ^{ 21 | [self.class _ttg_methodSwizzlingWithClass:[self class] 22 | originalSelector:@selector(addObserver:selector:name:object:) 23 | swizzledSelector:@selector(ttg_addObserver:selector:name:object:)]; 24 | 25 | [self.class _ttg_methodSwizzlingWithClass:[self class] 26 | originalSelector:@selector(removeObserver:) 27 | swizzledSelector:@selector(ttg_removeObserver:)]; 28 | 29 | [self.class _ttg_methodSwizzlingWithClass:[self class] 30 | originalSelector:@selector(addObserverForName:object:queue:usingBlock:) 31 | swizzledSelector:@selector(ttg_addObserverForName:object:queue:usingBlock:)]; 32 | }); 33 | } 34 | 35 | #pragma mark - Public methods 36 | 37 | + (void)ttg_setTTGNotificationGuardEnable:(BOOL)enable { 38 | TTGNotificationGuardEnable = enable; 39 | } 40 | 41 | + (BOOL)ttg_getTTGNotificationGuardEnable { 42 | return TTGNotificationGuardEnable; 43 | } 44 | 45 | #pragma mark - Swizzling methods 46 | 47 | - (void)ttg_addObserver:(id)observer selector:(SEL)sel name:(NSString *)notificationName object:(id)sender { 48 | [self ttg_addObserver:observer selector:sel name:notificationName object:sender]; 49 | [self.class _ttg_setAutoRemoveTaskForObserver:observer]; 50 | } 51 | 52 | - (id)ttg_addObserverForName:(NSString *)name 53 | object:(id)obj 54 | queue:(NSOperationQueue *)queue 55 | usingBlock:(void (^)(NSNotification *note))block { 56 | id observer = [self ttg_addObserverForName:name object:obj queue:queue usingBlock:block]; 57 | [self.class _ttg_setAutoRemoveTaskForObserver:observer]; 58 | return observer; 59 | } 60 | 61 | - (void)ttg_removeObserver:(id)observer { 62 | [self.class _ttg_removeAutoRemoveTaskForObserver:observer]; 63 | [self ttg_removeObserver:observer]; 64 | } 65 | 66 | #pragma mark - Private methods 67 | 68 | + (void)_ttg_setAutoRemoveTaskForObserver:(id)observer { 69 | if (!TTGNotificationGuardEnable) { 70 | return; 71 | } 72 | 73 | NSUInteger identifier = [self _ttg_getDeallocTaskIdentifierFromObserver:observer]; 74 | if (identifier == TTGDeallocTaskIllegalIdentifier) { 75 | identifier = [observer ttg_addDeallocTask:^(__unsafe_unretained id object, NSUInteger identifier) { 76 | [[NSNotificationCenter defaultCenter] removeObserver:object]; 77 | }]; 78 | [self _ttg_setDeallocTaskIdentifierToObserver:observer identifier:identifier]; 79 | } 80 | } 81 | 82 | + (void)_ttg_removeAutoRemoveTaskForObserver:(id)observer { 83 | NSUInteger identifier = [self _ttg_getDeallocTaskIdentifierFromObserver:observer]; 84 | if (identifier != TTGDeallocTaskIllegalIdentifier) { 85 | [observer ttg_removeDeallocTaskByIdentifier:identifier]; 86 | } 87 | } 88 | 89 | + (NSUInteger)_ttg_getDeallocTaskIdentifierFromObserver:(id)observer { 90 | NSNumber *identifierNumber = objc_getAssociatedObject(observer, &TTGNotificationGuardDeallocTaskIdentifierKey); 91 | if (identifierNumber && [identifierNumber isKindOfClass:[NSNumber class]] && identifierNumber.unsignedIntegerValue != TTGDeallocTaskIllegalIdentifier) { 92 | return identifierNumber.unsignedIntegerValue; 93 | } else { 94 | return TTGDeallocTaskIllegalIdentifier; 95 | } 96 | } 97 | 98 | + (void)_ttg_setDeallocTaskIdentifierToObserver:(id)observer identifier:(NSUInteger)identifier { 99 | NSNumber *identifierNumber = [NSNumber numberWithUnsignedInteger:identifier]; 100 | if (identifierNumber) { 101 | objc_setAssociatedObject(observer, &TTGNotificationGuardDeallocTaskIdentifierKey, identifierNumber, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 102 | } 103 | } 104 | 105 | + (void)_ttg_methodSwizzlingWithClass:(Class) class originalSelector:(SEL)originalSelector swizzledSelector:(SEL)swizzledSelector { 106 | if (!class || !originalSelector || !swizzledSelector) { 107 | return; 108 | } 109 | 110 | Method originalMethod = class_getInstanceMethod(class, originalSelector); 111 | Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector); 112 | 113 | BOOL didAddMethod = 114 | class_addMethod(class, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod)); 115 | 116 | if (didAddMethod) { 117 | class_replaceMethod(class, swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod)); 118 | } else { 119 | method_exchangeImplementations(originalMethod, swizzledMethod); 120 | } 121 | } 122 | 123 | 124 | @end 125 | -------------------------------------------------------------------------------- /_Pods.xcodeproj: -------------------------------------------------------------------------------- 1 | Example/Pods/Pods.xcodeproj --------------------------------------------------------------------------------