├── .gitignore ├── LICENSE ├── MSNotificationProtector ├── MSMonitorObject.h ├── MSMonitorObject.m ├── NSNotificationCenter+MSSafeProtect.h ├── NSNotificationCenter+MSSafeProtect.m ├── NSObject+MSSwizzle.h └── NSObject+MSSwizzle.m ├── MSNotificationProtectorDEMO.xcodeproj ├── project.pbxproj └── project.xcworkspace │ └── contents.xcworkspacedata ├── MSNotificationProtectorDEMO.xcworkspace ├── contents.xcworkspacedata └── xcshareddata │ └── IDEWorkspaceChecks.plist ├── MSNotificationProtectorDEMO ├── Info.plist ├── TestViewController.h ├── TestViewController.m ├── ViewController.h ├── ViewController.m └── other │ ├── AppDelegate.h │ ├── AppDelegate.m │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ ├── 1024x1024@2x.png │ │ ├── Contents.json │ │ ├── icon-20-ipad.png │ │ ├── icon-20@2x-ipad.png │ │ ├── icon-20@2x.png │ │ ├── icon-20@3x.png │ │ ├── icon-29-ipad.png │ │ ├── icon-29.png │ │ ├── icon-29@2x-ipad.png │ │ ├── icon-29@2x.png │ │ ├── icon-29@3x.png │ │ ├── icon-40.png │ │ ├── icon-40@2x.png │ │ ├── icon-40@3x.png │ │ ├── icon-50.png │ │ ├── icon-50@2x.png │ │ ├── icon-57.png │ │ ├── icon-57@2x.png │ │ ├── icon-60@2x.png │ │ ├── icon-60@3x.png │ │ ├── icon-72.png │ │ ├── icon-72@2x.png │ │ ├── icon-76.png │ │ ├── icon-76@2x.png │ │ └── icon-83.5@2x.png │ ├── Contents.json │ └── LaunchImage.launchimage │ │ ├── 1024iPadPortraitWOSBiOS56_768x1004pt.png │ │ ├── 1024iPadPortraitWOSBiOS56_768x1004pt@2x.png │ │ ├── 1024iPadPortraitiOS56_768x1024pt.png │ │ ├── 1024iPadPortraitiOS56_768x1024pt@2x.png │ │ ├── 1024iPadPortraitiOS789_768x1024pt.png │ │ ├── 1024iPadPortraitiOS789_768x1024pt@2x.png │ │ ├── 1024iPhonePortraitiOS56_320x480pt.png │ │ ├── 1024iPhonePortraitiOS56_320x480pt@2x.png │ │ ├── 1024iPhonePortraitiOS56_320x568pt@2x.png │ │ ├── 1024iPhonePortraitiOS789_320x480pt@2x.png │ │ ├── 1024iPhonePortraitiOS789_320x568pt@2x.png │ │ ├── 1024iPhonePortraitiOS89_375x667pt@2x.png │ │ ├── 1024iPhonePortraitiOS89_414x736pt@3x.png │ │ └── Contents.json │ ├── MSNotificationProtectorDEMOTests │ ├── Info.plist │ └── MSNotificationProtectorDEMOTests.m │ ├── MSNotificationProtectorDEMOUITests │ ├── Info.plist │ └── MSNotificationProtectorDEMOUITests.m │ └── main.m ├── NSNotificationCenterApple.png ├── Official Documentation ├── Foundation Release Notes (macOS 10.12 and earlier) NSNotificationCenter.webarchive └── Foundation Release Notes (macOS 10.12 and earlier).pdf ├── Podfile ├── Podfile.lock ├── Pods ├── Headers │ ├── Private │ │ └── MSNotificationProtector │ │ │ ├── MSMonitorObject.h │ │ │ ├── NSNotificationCenter+MSSafeProtect.h │ │ │ └── NSObject+MSSwizzle.h │ └── Public │ │ └── MSNotificationProtector │ │ ├── MSMonitorObject.h │ │ ├── NSNotificationCenter+MSSafeProtect.h │ │ └── NSObject+MSSwizzle.h ├── MSNotificationProtector │ ├── LICENSE │ ├── MSNotificationProtector │ │ ├── MSMonitorObject.h │ │ ├── MSMonitorObject.m │ │ ├── NSNotificationCenter+MSSafeProtect.h │ │ ├── NSNotificationCenter+MSSafeProtect.m │ │ ├── NSObject+MSSwizzle.h │ │ └── NSObject+MSSwizzle.m │ └── README.md ├── Manifest.lock ├── Pods.xcodeproj │ └── project.pbxproj └── Target Support Files │ ├── MSNotificationProtector │ ├── MSNotificationProtector-dummy.m │ ├── MSNotificationProtector-prefix.pch │ └── MSNotificationProtector.xcconfig │ ├── Pods-MSNotificationProtectorDEMO │ ├── Pods-MSNotificationProtectorDEMO-acknowledgements.markdown │ ├── Pods-MSNotificationProtectorDEMO-acknowledgements.plist │ ├── Pods-MSNotificationProtectorDEMO-dummy.m │ ├── Pods-MSNotificationProtectorDEMO-frameworks.sh │ ├── Pods-MSNotificationProtectorDEMO-resources.sh │ ├── Pods-MSNotificationProtectorDEMO.debug.xcconfig │ └── Pods-MSNotificationProtectorDEMO.release.xcconfig │ ├── Pods-MSNotificationProtectorDEMOTests │ ├── Pods-MSNotificationProtectorDEMOTests-acknowledgements.markdown │ ├── Pods-MSNotificationProtectorDEMOTests-acknowledgements.plist │ ├── Pods-MSNotificationProtectorDEMOTests-dummy.m │ ├── Pods-MSNotificationProtectorDEMOTests-frameworks.sh │ ├── Pods-MSNotificationProtectorDEMOTests-resources.sh │ ├── Pods-MSNotificationProtectorDEMOTests.debug.xcconfig │ └── Pods-MSNotificationProtectorDEMOTests.release.xcconfig │ └── Pods-MSNotificationProtectorDEMOUITests │ ├── Pods-MSNotificationProtectorDEMOUITests-acknowledgements.markdown │ ├── Pods-MSNotificationProtectorDEMOUITests-acknowledgements.plist │ ├── Pods-MSNotificationProtectorDEMOUITests-dummy.m │ ├── Pods-MSNotificationProtectorDEMOUITests-frameworks.sh │ ├── Pods-MSNotificationProtectorDEMOUITests-resources.sh │ ├── Pods-MSNotificationProtectorDEMOUITests.debug.xcconfig │ └── Pods-MSNotificationProtectorDEMOUITests.release.xcconfig └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## Build generated 6 | build/ 7 | DerivedData/ 8 | 9 | ## Various settings 10 | *.pbxuser 11 | !default.pbxuser 12 | *.mode1v3 13 | !default.mode1v3 14 | *.mode2v3 15 | !default.mode2v3 16 | *.perspectivev3 17 | !default.perspectivev3 18 | xcuserdata/ 19 | 20 | ## Other 21 | *.moved-aside 22 | *.xccheckout 23 | *.xcscmblueprint 24 | 25 | ## Obj-C/Swift specific 26 | *.hmap 27 | *.ipa 28 | *.dSYM.zip 29 | *.dSYM 30 | 31 | # CocoaPods 32 | # 33 | # We recommend against adding the Pods directory to your .gitignore. However 34 | # you should judge for yourself, the pros and cons are mentioned at: 35 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 36 | # 37 | # Pods/ 38 | 39 | # Carthage 40 | # 41 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 42 | # Carthage/Checkouts 43 | 44 | Carthage/Build 45 | 46 | # fastlane 47 | # 48 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 49 | # screenshots whenever they are needed. 50 | # For more information about the recommended setup visit: 51 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 52 | 53 | fastlane/report.xml 54 | fastlane/Preview.html 55 | fastlane/screenshots/**/*.png 56 | fastlane/test_output 57 | 58 | # Code Injection 59 | # 60 | # After new code Injection tools there's a generated folder /iOSInjectionProject 61 | # https://github.com/johnno1962/injectionforxcode 62 | 63 | iOSInjectionProject/ 64 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /MSNotificationProtector/MSMonitorObject.h: -------------------------------------------------------------------------------- 1 | // 2 | // MSMonitorObject.h 3 | // MSNotificationProtector 4 | // 5 | // Created by JZJ on 2016/9/16. 6 | // Copyright © 2016年 JZJ. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | typedef void (^MSDeallocMonitorBlock)(id obj); 12 | static void *MSNotificationCenterMonitorObjectKey = &MSNotificationCenterMonitorObjectKey; 13 | 14 | @interface MSMonitorObject:NSObject 15 | @property (nonatomic, copy) MSDeallocMonitorBlock deallocBlock; 16 | @property (nonatomic, assign) id target; 17 | @end 18 | -------------------------------------------------------------------------------- /MSNotificationProtector/MSMonitorObject.m: -------------------------------------------------------------------------------- 1 | // 2 | // MSMonitorObject.m 3 | // MSNotificationProtector 4 | // 5 | // Created by JZJ on 2016/9/16. 6 | // Copyright © 2016年 JZJ. All rights reserved. 7 | // 8 | 9 | #import "MSMonitorObject.h" 10 | 11 | @implementation MSMonitorObject 12 | 13 | - (void)dealloc{ 14 | id target = self.target; 15 | if (self.deallocBlock && target) { 16 | self.deallocBlock(target); 17 | } 18 | } 19 | @end 20 | -------------------------------------------------------------------------------- /MSNotificationProtector/NSNotificationCenter+MSSafeProtect.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSNotificationCenter+MSSafeProtect.h 3 | // MSNotificationProtector 4 | // 5 | // Created by JZJ on 2016/9/16. 6 | // Copyright © 2016年 JZJ. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSNotificationCenter (MSSafeProtect) 12 | + (void)msSetProtectEnable:(BOOL)en; 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /MSNotificationProtector/NSNotificationCenter+MSSafeProtect.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSNotificationCenter+MSSafeProtect.m 3 | // MSNotificationProtector 4 | // 5 | // Created by JZJ on 2016/9/16. 6 | // Copyright © 2016年 JZJ. All rights reserved. 7 | // 8 | 9 | #import "NSNotificationCenter+MSSafeProtect.h" 10 | #import "NSObject+MSSwizzle.h" 11 | #import 12 | #import 13 | #import 14 | #import "MSMonitorObject.h" 15 | 16 | static BOOL MSNotificationCenterProtectEnable = YES; 17 | static pthread_mutex_t lock;//结构体 18 | @implementation NSNotificationCenter (MSSafeProtect) 19 | 20 | + (void)load{ 21 | 22 | //iOS 9开始系统会自动为我们移除通知 但是 7 8 都会立即崩溃 所以只交换9以下 23 | // iOS 9.0 NSNotificationCenter and NSDistributedNotificationCenter will no longer send notifications to registered observers that may be deallocated. 24 | if (NSFoundationVersionNumber <= NSFoundationVersionNumber_iOS_9_0) { 25 | 26 | [self swizzleInstanceSelector:@selector(addObserver:selector:name:object:) withNewSelector:@selector(msAddObserver:selector:name:object:)]; 27 | 28 | [self swizzleInstanceSelector:@selector(addObserverForName:object:queue:usingBlock:) withNewSelector:@selector(msAddObserverForName:object:queue:usingBlock:)]; 29 | pthread_mutex_init(&lock, NULL); 30 | } 31 | } 32 | 33 | - (void)msAddObserver:(id)observer selector:(SEL)aSelector name:(NSNotificationName)aName object:(id)anObject{ 34 | 35 | [self msAddObserver:observer selector:aSelector name:aName object:anObject]; 36 | [self handleObserver:observer]; 37 | } 38 | 39 | - (id)msAddObserverForName:(NSNotificationName)name object:(id)obj queue:(NSOperationQueue *)queue usingBlock:(void (^)(NSNotification * _Nonnull))block{ 40 | id observer = [self msAddObserverForName:name object:obj queue:queue usingBlock:block]; 41 | [self handleObserver:observer]; 42 | return observer; 43 | } 44 | 45 | - (void)handleObserver:(id)observer{ 46 | 47 | if (MSNotificationCenterProtectEnable && observer){ 48 | 49 | pthread_mutex_lock(&lock); 50 | MSMonitorObject *monitor = objc_getAssociatedObject(observer, MSNotificationCenterMonitorObjectKey); 51 | if (!monitor) {//如果observer 没有这个 附加帮助移除对象 52 | monitor = [MSMonitorObject new]; 53 | monitor.target = observer;//设置 为 observer 54 | monitor.deallocBlock = [^(id obj){//创建block 55 | if (obj) {//虽然此处 obj已经dealloc完毕了 但是 并没有向obj发送消息 所以并不会也指针访问 56 | [self removeObserver:obj];//observer dealloc的时候 会调用 monitor的dealloc 执行此block 57 | } 58 | } copy]; 59 | objc_setAssociatedObject(observer, MSNotificationCenterMonitorObjectKey, monitor, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 60 | } 61 | pthread_mutex_unlock(&lock); 62 | } 63 | } 64 | 65 | 66 | + (void)msSetProtectEnable:(BOOL)en{ 67 | MSNotificationCenterProtectEnable = en; 68 | } 69 | 70 | @end 71 | -------------------------------------------------------------------------------- /MSNotificationProtector/NSObject+MSSwizzle.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSObject+MSSwizzle.h 3 | // MSNotificationProtector 4 | // 5 | // Created by JZJ on 2016/9/16. 6 | // Copyright © 2016年 JZJ. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSObject (MSSwizzle) 12 | 13 | + (void)swizzleInstanceSelector:(SEL)originalSelector 14 | withNewSelector:(SEL)newSelector; 15 | 16 | + (void) swizzleClassSelector:(SEL)originalSelector 17 | withNewSelector:(SEL)newSelector; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /MSNotificationProtector/NSObject+MSSwizzle.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSObject+MSSwizzle.m 3 | // MSNotificationProtector 4 | // 5 | // Created by JZJ on 2016/9/16. 6 | // Copyright © 2016年 JZJ. All rights reserved. 7 | // 8 | 9 | #import "NSObject+MSSwizzle.h" 10 | #import 11 | 12 | @implementation NSObject (MSSwizzle) 13 | 14 | + (void) swizzleInstanceSelector:(SEL)originalSelector 15 | withNewSelector:(SEL)newSelector 16 | { 17 | Method originalMethod = class_getInstanceMethod(self, originalSelector); 18 | Method newMethod = class_getInstanceMethod(self, newSelector); 19 | 20 | method_exchangeImplementations(originalMethod, newMethod); 21 | 22 | } 23 | 24 | void swizzleClassMethod(Class c, SEL orig, SEL new) { 25 | 26 | Method origMethod = class_getClassMethod(c, orig); 27 | Method newMethod = class_getClassMethod(c, new); 28 | 29 | c = object_getClass((id)c); 30 | 31 | if(class_addMethod(c, orig, method_getImplementation(newMethod), method_getTypeEncoding(newMethod))) 32 | class_replaceMethod(c, new, method_getImplementation(origMethod), method_getTypeEncoding(origMethod)); 33 | else 34 | method_exchangeImplementations(origMethod, newMethod); 35 | } 36 | 37 | + (void) swizzleClassSelector:(SEL)originalSelector 38 | withNewSelector:(SEL)newSelector 39 | { 40 | swizzleClassMethod(self, originalSelector, newSelector); 41 | } 42 | 43 | @end 44 | -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 48; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 03F9DFF82444EEFB298EF87C /* libPods-MSNotificationProtectorDEMO.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E5A4E8194B558510EED34895 /* libPods-MSNotificationProtectorDEMO.a */; }; 11 | 0ED12EBC214E46660067FEE4 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 0ED12EBB214E46660067FEE4 /* AppDelegate.m */; }; 12 | 0ED12EBF214E46660067FEE4 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0ED12EBE214E46660067FEE4 /* ViewController.m */; }; 13 | 0ED12EC4214E46660067FEE4 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0ED12EC3214E46660067FEE4 /* Assets.xcassets */; }; 14 | 0ED12ECA214E46660067FEE4 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 0ED12EC9214E46660067FEE4 /* main.m */; }; 15 | 0ED12ED4214E46660067FEE4 /* MSNotificationProtectorDEMOTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 0ED12ED3214E46660067FEE4 /* MSNotificationProtectorDEMOTests.m */; }; 16 | 0ED12EDF214E46660067FEE4 /* MSNotificationProtectorDEMOUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = 0ED12EDE214E46660067FEE4 /* MSNotificationProtectorDEMOUITests.m */; }; 17 | 0ED12EEF214E473C0067FEE4 /* TestViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0ED12EED214E473B0067FEE4 /* TestViewController.m */; }; 18 | 904E31555D6F1765453D9AB1 /* libPods-MSNotificationProtectorDEMOUITests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6E3EB9DE5905825AFEE46EC9 /* libPods-MSNotificationProtectorDEMOUITests.a */; }; 19 | F4F1E09E90CC4468FF0D7B09 /* libPods-MSNotificationProtectorDEMOTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 901D0E3989E6D68422A8832E /* libPods-MSNotificationProtectorDEMOTests.a */; }; 20 | /* End PBXBuildFile section */ 21 | 22 | /* Begin PBXContainerItemProxy section */ 23 | 0ED12ED0214E46660067FEE4 /* PBXContainerItemProxy */ = { 24 | isa = PBXContainerItemProxy; 25 | containerPortal = 0ED12EAF214E46660067FEE4 /* Project object */; 26 | proxyType = 1; 27 | remoteGlobalIDString = 0ED12EB6214E46660067FEE4; 28 | remoteInfo = MSNotificationProtectorDEMO; 29 | }; 30 | 0ED12EDB214E46660067FEE4 /* PBXContainerItemProxy */ = { 31 | isa = PBXContainerItemProxy; 32 | containerPortal = 0ED12EAF214E46660067FEE4 /* Project object */; 33 | proxyType = 1; 34 | remoteGlobalIDString = 0ED12EB6214E46660067FEE4; 35 | remoteInfo = MSNotificationProtectorDEMO; 36 | }; 37 | /* End PBXContainerItemProxy section */ 38 | 39 | /* Begin PBXFileReference section */ 40 | 0ED12EB7214E46660067FEE4 /* MSNotificationProtectorDEMO.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MSNotificationProtectorDEMO.app; sourceTree = BUILT_PRODUCTS_DIR; }; 41 | 0ED12EBA214E46660067FEE4 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 42 | 0ED12EBB214E46660067FEE4 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 43 | 0ED12EBD214E46660067FEE4 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; 44 | 0ED12EBE214E46660067FEE4 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; 45 | 0ED12EC3214E46660067FEE4 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 46 | 0ED12EC8214E46660067FEE4 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 47 | 0ED12EC9214E46660067FEE4 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 48 | 0ED12ECF214E46660067FEE4 /* MSNotificationProtectorDEMOTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MSNotificationProtectorDEMOTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 49 | 0ED12ED3214E46660067FEE4 /* MSNotificationProtectorDEMOTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MSNotificationProtectorDEMOTests.m; sourceTree = ""; }; 50 | 0ED12ED5214E46660067FEE4 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 51 | 0ED12EDA214E46660067FEE4 /* MSNotificationProtectorDEMOUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MSNotificationProtectorDEMOUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 52 | 0ED12EDE214E46660067FEE4 /* MSNotificationProtectorDEMOUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MSNotificationProtectorDEMOUITests.m; sourceTree = ""; }; 53 | 0ED12EE0214E46660067FEE4 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 54 | 0ED12EED214E473B0067FEE4 /* TestViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TestViewController.m; sourceTree = ""; }; 55 | 0ED12EEE214E473B0067FEE4 /* TestViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TestViewController.h; sourceTree = ""; }; 56 | 102C5A2DA67AA501BADE53F9 /* Pods-MSNotificationProtectorDEMO.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MSNotificationProtectorDEMO.debug.xcconfig"; path = "Pods/Target Support Files/Pods-MSNotificationProtectorDEMO/Pods-MSNotificationProtectorDEMO.debug.xcconfig"; sourceTree = ""; }; 57 | 3DB2E8B72931069D7E1A3380 /* Pods-MSNotificationProtectorDEMOUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MSNotificationProtectorDEMOUITests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-MSNotificationProtectorDEMOUITests/Pods-MSNotificationProtectorDEMOUITests.debug.xcconfig"; sourceTree = ""; }; 58 | 5C32614C1C2FE8125A0CDA3C /* Pods-MSNotificationProtectorDEMOUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MSNotificationProtectorDEMOUITests.release.xcconfig"; path = "Pods/Target Support Files/Pods-MSNotificationProtectorDEMOUITests/Pods-MSNotificationProtectorDEMOUITests.release.xcconfig"; sourceTree = ""; }; 59 | 6E3EB9DE5905825AFEE46EC9 /* libPods-MSNotificationProtectorDEMOUITests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MSNotificationProtectorDEMOUITests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 60 | 869A457DC592E89BFFC1D681 /* Pods-MSNotificationProtectorDEMOTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MSNotificationProtectorDEMOTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-MSNotificationProtectorDEMOTests/Pods-MSNotificationProtectorDEMOTests.debug.xcconfig"; sourceTree = ""; }; 61 | 901D0E3989E6D68422A8832E /* libPods-MSNotificationProtectorDEMOTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MSNotificationProtectorDEMOTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 62 | AAA59A26D8895BC2F2B2D3C0 /* Pods-MSNotificationProtectorDEMOTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MSNotificationProtectorDEMOTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-MSNotificationProtectorDEMOTests/Pods-MSNotificationProtectorDEMOTests.release.xcconfig"; sourceTree = ""; }; 63 | E5A4E8194B558510EED34895 /* libPods-MSNotificationProtectorDEMO.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MSNotificationProtectorDEMO.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 64 | E602B28D45F29EBE520F35A4 /* Pods-MSNotificationProtectorDEMO.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MSNotificationProtectorDEMO.release.xcconfig"; path = "Pods/Target Support Files/Pods-MSNotificationProtectorDEMO/Pods-MSNotificationProtectorDEMO.release.xcconfig"; sourceTree = ""; }; 65 | /* End PBXFileReference section */ 66 | 67 | /* Begin PBXFrameworksBuildPhase section */ 68 | 0ED12EB4214E46660067FEE4 /* Frameworks */ = { 69 | isa = PBXFrameworksBuildPhase; 70 | buildActionMask = 2147483647; 71 | files = ( 72 | 03F9DFF82444EEFB298EF87C /* libPods-MSNotificationProtectorDEMO.a in Frameworks */, 73 | ); 74 | runOnlyForDeploymentPostprocessing = 0; 75 | }; 76 | 0ED12ECC214E46660067FEE4 /* Frameworks */ = { 77 | isa = PBXFrameworksBuildPhase; 78 | buildActionMask = 2147483647; 79 | files = ( 80 | F4F1E09E90CC4468FF0D7B09 /* libPods-MSNotificationProtectorDEMOTests.a in Frameworks */, 81 | ); 82 | runOnlyForDeploymentPostprocessing = 0; 83 | }; 84 | 0ED12ED7214E46660067FEE4 /* Frameworks */ = { 85 | isa = PBXFrameworksBuildPhase; 86 | buildActionMask = 2147483647; 87 | files = ( 88 | 904E31555D6F1765453D9AB1 /* libPods-MSNotificationProtectorDEMOUITests.a in Frameworks */, 89 | ); 90 | runOnlyForDeploymentPostprocessing = 0; 91 | }; 92 | /* End PBXFrameworksBuildPhase section */ 93 | 94 | /* Begin PBXGroup section */ 95 | 0ED12EAE214E46660067FEE4 = { 96 | isa = PBXGroup; 97 | children = ( 98 | 0ED12EB9214E46660067FEE4 /* MSNotificationProtectorDEMO */, 99 | 0ED12EB8214E46660067FEE4 /* Products */, 100 | 75B1677B1EF63D89A27854B2 /* Pods */, 101 | 901BE4EC4EE5F9CD4DCC325D /* Frameworks */, 102 | ); 103 | sourceTree = ""; 104 | }; 105 | 0ED12EB8214E46660067FEE4 /* Products */ = { 106 | isa = PBXGroup; 107 | children = ( 108 | 0ED12EB7214E46660067FEE4 /* MSNotificationProtectorDEMO.app */, 109 | 0ED12ECF214E46660067FEE4 /* MSNotificationProtectorDEMOTests.xctest */, 110 | 0ED12EDA214E46660067FEE4 /* MSNotificationProtectorDEMOUITests.xctest */, 111 | ); 112 | name = Products; 113 | sourceTree = ""; 114 | }; 115 | 0ED12EB9214E46660067FEE4 /* MSNotificationProtectorDEMO */ = { 116 | isa = PBXGroup; 117 | children = ( 118 | 0ED12EBD214E46660067FEE4 /* ViewController.h */, 119 | 0ED12EBE214E46660067FEE4 /* ViewController.m */, 120 | 0ED12EEE214E473B0067FEE4 /* TestViewController.h */, 121 | 0ED12EED214E473B0067FEE4 /* TestViewController.m */, 122 | 0ED12EC8214E46660067FEE4 /* Info.plist */, 123 | 0ED12EEC214E472C0067FEE4 /* other */, 124 | ); 125 | path = MSNotificationProtectorDEMO; 126 | sourceTree = ""; 127 | }; 128 | 0ED12ED2214E46660067FEE4 /* MSNotificationProtectorDEMOTests */ = { 129 | isa = PBXGroup; 130 | children = ( 131 | 0ED12ED3214E46660067FEE4 /* MSNotificationProtectorDEMOTests.m */, 132 | 0ED12ED5214E46660067FEE4 /* Info.plist */, 133 | ); 134 | path = MSNotificationProtectorDEMOTests; 135 | sourceTree = ""; 136 | }; 137 | 0ED12EDD214E46660067FEE4 /* MSNotificationProtectorDEMOUITests */ = { 138 | isa = PBXGroup; 139 | children = ( 140 | 0ED12EDE214E46660067FEE4 /* MSNotificationProtectorDEMOUITests.m */, 141 | 0ED12EE0214E46660067FEE4 /* Info.plist */, 142 | ); 143 | path = MSNotificationProtectorDEMOUITests; 144 | sourceTree = ""; 145 | }; 146 | 0ED12EEC214E472C0067FEE4 /* other */ = { 147 | isa = PBXGroup; 148 | children = ( 149 | 0ED12EBA214E46660067FEE4 /* AppDelegate.h */, 150 | 0ED12EBB214E46660067FEE4 /* AppDelegate.m */, 151 | 0ED12EC3214E46660067FEE4 /* Assets.xcassets */, 152 | 0ED12EC9214E46660067FEE4 /* main.m */, 153 | 0ED12ED2214E46660067FEE4 /* MSNotificationProtectorDEMOTests */, 154 | 0ED12EDD214E46660067FEE4 /* MSNotificationProtectorDEMOUITests */, 155 | ); 156 | path = other; 157 | sourceTree = ""; 158 | }; 159 | 75B1677B1EF63D89A27854B2 /* Pods */ = { 160 | isa = PBXGroup; 161 | children = ( 162 | 102C5A2DA67AA501BADE53F9 /* Pods-MSNotificationProtectorDEMO.debug.xcconfig */, 163 | E602B28D45F29EBE520F35A4 /* Pods-MSNotificationProtectorDEMO.release.xcconfig */, 164 | 869A457DC592E89BFFC1D681 /* Pods-MSNotificationProtectorDEMOTests.debug.xcconfig */, 165 | AAA59A26D8895BC2F2B2D3C0 /* Pods-MSNotificationProtectorDEMOTests.release.xcconfig */, 166 | 3DB2E8B72931069D7E1A3380 /* Pods-MSNotificationProtectorDEMOUITests.debug.xcconfig */, 167 | 5C32614C1C2FE8125A0CDA3C /* Pods-MSNotificationProtectorDEMOUITests.release.xcconfig */, 168 | ); 169 | name = Pods; 170 | sourceTree = ""; 171 | }; 172 | 901BE4EC4EE5F9CD4DCC325D /* Frameworks */ = { 173 | isa = PBXGroup; 174 | children = ( 175 | E5A4E8194B558510EED34895 /* libPods-MSNotificationProtectorDEMO.a */, 176 | 901D0E3989E6D68422A8832E /* libPods-MSNotificationProtectorDEMOTests.a */, 177 | 6E3EB9DE5905825AFEE46EC9 /* libPods-MSNotificationProtectorDEMOUITests.a */, 178 | ); 179 | name = Frameworks; 180 | sourceTree = ""; 181 | }; 182 | /* End PBXGroup section */ 183 | 184 | /* Begin PBXNativeTarget section */ 185 | 0ED12EB6214E46660067FEE4 /* MSNotificationProtectorDEMO */ = { 186 | isa = PBXNativeTarget; 187 | buildConfigurationList = 0ED12EE3214E46660067FEE4 /* Build configuration list for PBXNativeTarget "MSNotificationProtectorDEMO" */; 188 | buildPhases = ( 189 | 2A055B39F704F56CFAB04A61 /* [CP] Check Pods Manifest.lock */, 190 | 0ED12EB3214E46660067FEE4 /* Sources */, 191 | 0ED12EB4214E46660067FEE4 /* Frameworks */, 192 | 0ED12EB5214E46660067FEE4 /* Resources */, 193 | ); 194 | buildRules = ( 195 | ); 196 | dependencies = ( 197 | ); 198 | name = MSNotificationProtectorDEMO; 199 | productName = MSNotificationProtectorDEMO; 200 | productReference = 0ED12EB7214E46660067FEE4 /* MSNotificationProtectorDEMO.app */; 201 | productType = "com.apple.product-type.application"; 202 | }; 203 | 0ED12ECE214E46660067FEE4 /* MSNotificationProtectorDEMOTests */ = { 204 | isa = PBXNativeTarget; 205 | buildConfigurationList = 0ED12EE6214E46660067FEE4 /* Build configuration list for PBXNativeTarget "MSNotificationProtectorDEMOTests" */; 206 | buildPhases = ( 207 | E224BE5F1EF77ED13598463D /* [CP] Check Pods Manifest.lock */, 208 | 0ED12ECB214E46660067FEE4 /* Sources */, 209 | 0ED12ECC214E46660067FEE4 /* Frameworks */, 210 | 0ED12ECD214E46660067FEE4 /* Resources */, 211 | ); 212 | buildRules = ( 213 | ); 214 | dependencies = ( 215 | 0ED12ED1214E46660067FEE4 /* PBXTargetDependency */, 216 | ); 217 | name = MSNotificationProtectorDEMOTests; 218 | productName = MSNotificationProtectorDEMOTests; 219 | productReference = 0ED12ECF214E46660067FEE4 /* MSNotificationProtectorDEMOTests.xctest */; 220 | productType = "com.apple.product-type.bundle.unit-test"; 221 | }; 222 | 0ED12ED9214E46660067FEE4 /* MSNotificationProtectorDEMOUITests */ = { 223 | isa = PBXNativeTarget; 224 | buildConfigurationList = 0ED12EE9214E46660067FEE4 /* Build configuration list for PBXNativeTarget "MSNotificationProtectorDEMOUITests" */; 225 | buildPhases = ( 226 | 16E1332C2BDA6D2EE7F16341 /* [CP] Check Pods Manifest.lock */, 227 | 0ED12ED6214E46660067FEE4 /* Sources */, 228 | 0ED12ED7214E46660067FEE4 /* Frameworks */, 229 | 0ED12ED8214E46660067FEE4 /* Resources */, 230 | ); 231 | buildRules = ( 232 | ); 233 | dependencies = ( 234 | 0ED12EDC214E46660067FEE4 /* PBXTargetDependency */, 235 | ); 236 | name = MSNotificationProtectorDEMOUITests; 237 | productName = MSNotificationProtectorDEMOUITests; 238 | productReference = 0ED12EDA214E46660067FEE4 /* MSNotificationProtectorDEMOUITests.xctest */; 239 | productType = "com.apple.product-type.bundle.ui-testing"; 240 | }; 241 | /* End PBXNativeTarget section */ 242 | 243 | /* Begin PBXProject section */ 244 | 0ED12EAF214E46660067FEE4 /* Project object */ = { 245 | isa = PBXProject; 246 | attributes = { 247 | LastUpgradeCheck = 1130; 248 | ORGANIZATIONNAME = JZJ; 249 | TargetAttributes = { 250 | 0ED12EB6214E46660067FEE4 = { 251 | CreatedOnToolsVersion = 9.0; 252 | ProvisioningStyle = Manual; 253 | }; 254 | 0ED12ECE214E46660067FEE4 = { 255 | CreatedOnToolsVersion = 9.0; 256 | ProvisioningStyle = Automatic; 257 | TestTargetID = 0ED12EB6214E46660067FEE4; 258 | }; 259 | 0ED12ED9214E46660067FEE4 = { 260 | CreatedOnToolsVersion = 9.0; 261 | ProvisioningStyle = Automatic; 262 | TestTargetID = 0ED12EB6214E46660067FEE4; 263 | }; 264 | }; 265 | }; 266 | buildConfigurationList = 0ED12EB2214E46660067FEE4 /* Build configuration list for PBXProject "MSNotificationProtectorDEMO" */; 267 | compatibilityVersion = "Xcode 8.0"; 268 | developmentRegion = en; 269 | hasScannedForEncodings = 0; 270 | knownRegions = ( 271 | en, 272 | Base, 273 | ); 274 | mainGroup = 0ED12EAE214E46660067FEE4; 275 | productRefGroup = 0ED12EB8214E46660067FEE4 /* Products */; 276 | projectDirPath = ""; 277 | projectRoot = ""; 278 | targets = ( 279 | 0ED12EB6214E46660067FEE4 /* MSNotificationProtectorDEMO */, 280 | 0ED12ECE214E46660067FEE4 /* MSNotificationProtectorDEMOTests */, 281 | 0ED12ED9214E46660067FEE4 /* MSNotificationProtectorDEMOUITests */, 282 | ); 283 | }; 284 | /* End PBXProject section */ 285 | 286 | /* Begin PBXResourcesBuildPhase section */ 287 | 0ED12EB5214E46660067FEE4 /* Resources */ = { 288 | isa = PBXResourcesBuildPhase; 289 | buildActionMask = 2147483647; 290 | files = ( 291 | 0ED12EC4214E46660067FEE4 /* Assets.xcassets in Resources */, 292 | ); 293 | runOnlyForDeploymentPostprocessing = 0; 294 | }; 295 | 0ED12ECD214E46660067FEE4 /* Resources */ = { 296 | isa = PBXResourcesBuildPhase; 297 | buildActionMask = 2147483647; 298 | files = ( 299 | ); 300 | runOnlyForDeploymentPostprocessing = 0; 301 | }; 302 | 0ED12ED8214E46660067FEE4 /* Resources */ = { 303 | isa = PBXResourcesBuildPhase; 304 | buildActionMask = 2147483647; 305 | files = ( 306 | ); 307 | runOnlyForDeploymentPostprocessing = 0; 308 | }; 309 | /* End PBXResourcesBuildPhase section */ 310 | 311 | /* Begin PBXShellScriptBuildPhase section */ 312 | 16E1332C2BDA6D2EE7F16341 /* [CP] Check Pods Manifest.lock */ = { 313 | isa = PBXShellScriptBuildPhase; 314 | buildActionMask = 2147483647; 315 | files = ( 316 | ); 317 | inputPaths = ( 318 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 319 | "${PODS_ROOT}/Manifest.lock", 320 | ); 321 | name = "[CP] Check Pods Manifest.lock"; 322 | outputPaths = ( 323 | "$(DERIVED_FILE_DIR)/Pods-MSNotificationProtectorDEMOUITests-checkManifestLockResult.txt", 324 | ); 325 | runOnlyForDeploymentPostprocessing = 0; 326 | shellPath = /bin/sh; 327 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 328 | showEnvVarsInLog = 0; 329 | }; 330 | 2A055B39F704F56CFAB04A61 /* [CP] Check Pods Manifest.lock */ = { 331 | isa = PBXShellScriptBuildPhase; 332 | buildActionMask = 2147483647; 333 | files = ( 334 | ); 335 | inputPaths = ( 336 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 337 | "${PODS_ROOT}/Manifest.lock", 338 | ); 339 | name = "[CP] Check Pods Manifest.lock"; 340 | outputPaths = ( 341 | "$(DERIVED_FILE_DIR)/Pods-MSNotificationProtectorDEMO-checkManifestLockResult.txt", 342 | ); 343 | runOnlyForDeploymentPostprocessing = 0; 344 | shellPath = /bin/sh; 345 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 346 | showEnvVarsInLog = 0; 347 | }; 348 | E224BE5F1EF77ED13598463D /* [CP] Check Pods Manifest.lock */ = { 349 | isa = PBXShellScriptBuildPhase; 350 | buildActionMask = 2147483647; 351 | files = ( 352 | ); 353 | inputPaths = ( 354 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 355 | "${PODS_ROOT}/Manifest.lock", 356 | ); 357 | name = "[CP] Check Pods Manifest.lock"; 358 | outputPaths = ( 359 | "$(DERIVED_FILE_DIR)/Pods-MSNotificationProtectorDEMOTests-checkManifestLockResult.txt", 360 | ); 361 | runOnlyForDeploymentPostprocessing = 0; 362 | shellPath = /bin/sh; 363 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 364 | showEnvVarsInLog = 0; 365 | }; 366 | /* End PBXShellScriptBuildPhase section */ 367 | 368 | /* Begin PBXSourcesBuildPhase section */ 369 | 0ED12EB3214E46660067FEE4 /* Sources */ = { 370 | isa = PBXSourcesBuildPhase; 371 | buildActionMask = 2147483647; 372 | files = ( 373 | 0ED12EBF214E46660067FEE4 /* ViewController.m in Sources */, 374 | 0ED12ECA214E46660067FEE4 /* main.m in Sources */, 375 | 0ED12EEF214E473C0067FEE4 /* TestViewController.m in Sources */, 376 | 0ED12EBC214E46660067FEE4 /* AppDelegate.m in Sources */, 377 | ); 378 | runOnlyForDeploymentPostprocessing = 0; 379 | }; 380 | 0ED12ECB214E46660067FEE4 /* Sources */ = { 381 | isa = PBXSourcesBuildPhase; 382 | buildActionMask = 2147483647; 383 | files = ( 384 | 0ED12ED4214E46660067FEE4 /* MSNotificationProtectorDEMOTests.m in Sources */, 385 | ); 386 | runOnlyForDeploymentPostprocessing = 0; 387 | }; 388 | 0ED12ED6214E46660067FEE4 /* Sources */ = { 389 | isa = PBXSourcesBuildPhase; 390 | buildActionMask = 2147483647; 391 | files = ( 392 | 0ED12EDF214E46660067FEE4 /* MSNotificationProtectorDEMOUITests.m in Sources */, 393 | ); 394 | runOnlyForDeploymentPostprocessing = 0; 395 | }; 396 | /* End PBXSourcesBuildPhase section */ 397 | 398 | /* Begin PBXTargetDependency section */ 399 | 0ED12ED1214E46660067FEE4 /* PBXTargetDependency */ = { 400 | isa = PBXTargetDependency; 401 | target = 0ED12EB6214E46660067FEE4 /* MSNotificationProtectorDEMO */; 402 | targetProxy = 0ED12ED0214E46660067FEE4 /* PBXContainerItemProxy */; 403 | }; 404 | 0ED12EDC214E46660067FEE4 /* PBXTargetDependency */ = { 405 | isa = PBXTargetDependency; 406 | target = 0ED12EB6214E46660067FEE4 /* MSNotificationProtectorDEMO */; 407 | targetProxy = 0ED12EDB214E46660067FEE4 /* PBXContainerItemProxy */; 408 | }; 409 | /* End PBXTargetDependency section */ 410 | 411 | /* Begin XCBuildConfiguration section */ 412 | 0ED12EE1214E46660067FEE4 /* Debug */ = { 413 | isa = XCBuildConfiguration; 414 | buildSettings = { 415 | ALWAYS_SEARCH_USER_PATHS = NO; 416 | CLANG_ANALYZER_NONNULL = YES; 417 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 418 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 419 | CLANG_CXX_LIBRARY = "libc++"; 420 | CLANG_ENABLE_MODULES = YES; 421 | CLANG_ENABLE_OBJC_ARC = YES; 422 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 423 | CLANG_WARN_BOOL_CONVERSION = YES; 424 | CLANG_WARN_COMMA = YES; 425 | CLANG_WARN_CONSTANT_CONVERSION = YES; 426 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 427 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 428 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 429 | CLANG_WARN_EMPTY_BODY = YES; 430 | CLANG_WARN_ENUM_CONVERSION = YES; 431 | CLANG_WARN_INFINITE_RECURSION = YES; 432 | CLANG_WARN_INT_CONVERSION = YES; 433 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 434 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 435 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 436 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 437 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 438 | CLANG_WARN_STRICT_PROTOTYPES = YES; 439 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 440 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 441 | CLANG_WARN_UNREACHABLE_CODE = YES; 442 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 443 | CODE_SIGN_IDENTITY = "iPhone Developer"; 444 | COPY_PHASE_STRIP = NO; 445 | DEBUG_INFORMATION_FORMAT = dwarf; 446 | ENABLE_STRICT_OBJC_MSGSEND = YES; 447 | ENABLE_TESTABILITY = YES; 448 | GCC_C_LANGUAGE_STANDARD = gnu11; 449 | GCC_DYNAMIC_NO_PIC = NO; 450 | GCC_NO_COMMON_BLOCKS = YES; 451 | GCC_OPTIMIZATION_LEVEL = 0; 452 | GCC_PREPROCESSOR_DEFINITIONS = ( 453 | "DEBUG=1", 454 | "$(inherited)", 455 | ); 456 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 457 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 458 | GCC_WARN_UNDECLARED_SELECTOR = YES; 459 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 460 | GCC_WARN_UNUSED_FUNCTION = YES; 461 | GCC_WARN_UNUSED_VARIABLE = YES; 462 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 463 | MTL_ENABLE_DEBUG_INFO = YES; 464 | ONLY_ACTIVE_ARCH = YES; 465 | SDKROOT = iphoneos; 466 | }; 467 | name = Debug; 468 | }; 469 | 0ED12EE2214E46660067FEE4 /* Release */ = { 470 | isa = XCBuildConfiguration; 471 | buildSettings = { 472 | ALWAYS_SEARCH_USER_PATHS = NO; 473 | CLANG_ANALYZER_NONNULL = YES; 474 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 475 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 476 | CLANG_CXX_LIBRARY = "libc++"; 477 | CLANG_ENABLE_MODULES = YES; 478 | CLANG_ENABLE_OBJC_ARC = YES; 479 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 480 | CLANG_WARN_BOOL_CONVERSION = YES; 481 | CLANG_WARN_COMMA = YES; 482 | CLANG_WARN_CONSTANT_CONVERSION = YES; 483 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 484 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 485 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 486 | CLANG_WARN_EMPTY_BODY = YES; 487 | CLANG_WARN_ENUM_CONVERSION = YES; 488 | CLANG_WARN_INFINITE_RECURSION = YES; 489 | CLANG_WARN_INT_CONVERSION = YES; 490 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 491 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 492 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 493 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 494 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 495 | CLANG_WARN_STRICT_PROTOTYPES = YES; 496 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 497 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 498 | CLANG_WARN_UNREACHABLE_CODE = YES; 499 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 500 | CODE_SIGN_IDENTITY = "iPhone Developer"; 501 | COPY_PHASE_STRIP = NO; 502 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 503 | ENABLE_NS_ASSERTIONS = NO; 504 | ENABLE_STRICT_OBJC_MSGSEND = YES; 505 | GCC_C_LANGUAGE_STANDARD = gnu11; 506 | GCC_NO_COMMON_BLOCKS = YES; 507 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 508 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 509 | GCC_WARN_UNDECLARED_SELECTOR = YES; 510 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 511 | GCC_WARN_UNUSED_FUNCTION = YES; 512 | GCC_WARN_UNUSED_VARIABLE = YES; 513 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 514 | MTL_ENABLE_DEBUG_INFO = NO; 515 | SDKROOT = iphoneos; 516 | VALIDATE_PRODUCT = YES; 517 | }; 518 | name = Release; 519 | }; 520 | 0ED12EE4214E46660067FEE4 /* Debug */ = { 521 | isa = XCBuildConfiguration; 522 | baseConfigurationReference = 102C5A2DA67AA501BADE53F9 /* Pods-MSNotificationProtectorDEMO.debug.xcconfig */; 523 | buildSettings = { 524 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 525 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 526 | CODE_SIGN_STYLE = Manual; 527 | DEVELOPMENT_TEAM = ""; 528 | INFOPLIST_FILE = MSNotificationProtectorDEMO/Info.plist; 529 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 530 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 531 | PRODUCT_BUNDLE_IDENTIFIER = jzj.MSNotificationProtectorDEMO; 532 | PRODUCT_NAME = "$(TARGET_NAME)"; 533 | PROVISIONING_PROFILE_SPECIFIER = ""; 534 | TARGETED_DEVICE_FAMILY = 1; 535 | }; 536 | name = Debug; 537 | }; 538 | 0ED12EE5214E46660067FEE4 /* Release */ = { 539 | isa = XCBuildConfiguration; 540 | baseConfigurationReference = E602B28D45F29EBE520F35A4 /* Pods-MSNotificationProtectorDEMO.release.xcconfig */; 541 | buildSettings = { 542 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 543 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 544 | CODE_SIGN_STYLE = Manual; 545 | DEVELOPMENT_TEAM = ""; 546 | INFOPLIST_FILE = MSNotificationProtectorDEMO/Info.plist; 547 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 548 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 549 | PRODUCT_BUNDLE_IDENTIFIER = jzj.MSNotificationProtectorDEMO; 550 | PRODUCT_NAME = "$(TARGET_NAME)"; 551 | PROVISIONING_PROFILE_SPECIFIER = ""; 552 | TARGETED_DEVICE_FAMILY = 1; 553 | }; 554 | name = Release; 555 | }; 556 | 0ED12EE7214E46660067FEE4 /* Debug */ = { 557 | isa = XCBuildConfiguration; 558 | baseConfigurationReference = 869A457DC592E89BFFC1D681 /* Pods-MSNotificationProtectorDEMOTests.debug.xcconfig */; 559 | buildSettings = { 560 | BUNDLE_LOADER = "$(TEST_HOST)"; 561 | CODE_SIGN_STYLE = Automatic; 562 | DEVELOPMENT_TEAM = EYXWBG3SF2; 563 | INFOPLIST_FILE = MSNotificationProtectorDEMOTests/Info.plist; 564 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 565 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 566 | PRODUCT_BUNDLE_IDENTIFIER = jzj.MSNotificationProtectorDEMOTests; 567 | PRODUCT_NAME = "$(TARGET_NAME)"; 568 | TARGETED_DEVICE_FAMILY = "1,2"; 569 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MSNotificationProtectorDEMO.app/MSNotificationProtectorDEMO"; 570 | }; 571 | name = Debug; 572 | }; 573 | 0ED12EE8214E46660067FEE4 /* Release */ = { 574 | isa = XCBuildConfiguration; 575 | baseConfigurationReference = AAA59A26D8895BC2F2B2D3C0 /* Pods-MSNotificationProtectorDEMOTests.release.xcconfig */; 576 | buildSettings = { 577 | BUNDLE_LOADER = "$(TEST_HOST)"; 578 | CODE_SIGN_STYLE = Automatic; 579 | DEVELOPMENT_TEAM = EYXWBG3SF2; 580 | INFOPLIST_FILE = MSNotificationProtectorDEMOTests/Info.plist; 581 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 582 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 583 | PRODUCT_BUNDLE_IDENTIFIER = jzj.MSNotificationProtectorDEMOTests; 584 | PRODUCT_NAME = "$(TARGET_NAME)"; 585 | TARGETED_DEVICE_FAMILY = "1,2"; 586 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MSNotificationProtectorDEMO.app/MSNotificationProtectorDEMO"; 587 | }; 588 | name = Release; 589 | }; 590 | 0ED12EEA214E46660067FEE4 /* Debug */ = { 591 | isa = XCBuildConfiguration; 592 | baseConfigurationReference = 3DB2E8B72931069D7E1A3380 /* Pods-MSNotificationProtectorDEMOUITests.debug.xcconfig */; 593 | buildSettings = { 594 | CODE_SIGN_STYLE = Automatic; 595 | DEVELOPMENT_TEAM = EYXWBG3SF2; 596 | INFOPLIST_FILE = MSNotificationProtectorDEMOUITests/Info.plist; 597 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 598 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 599 | PRODUCT_BUNDLE_IDENTIFIER = jzj.MSNotificationProtectorDEMOUITests; 600 | PRODUCT_NAME = "$(TARGET_NAME)"; 601 | TARGETED_DEVICE_FAMILY = "1,2"; 602 | TEST_TARGET_NAME = MSNotificationProtectorDEMO; 603 | }; 604 | name = Debug; 605 | }; 606 | 0ED12EEB214E46660067FEE4 /* Release */ = { 607 | isa = XCBuildConfiguration; 608 | baseConfigurationReference = 5C32614C1C2FE8125A0CDA3C /* Pods-MSNotificationProtectorDEMOUITests.release.xcconfig */; 609 | buildSettings = { 610 | CODE_SIGN_STYLE = Automatic; 611 | DEVELOPMENT_TEAM = EYXWBG3SF2; 612 | INFOPLIST_FILE = MSNotificationProtectorDEMOUITests/Info.plist; 613 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 614 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 615 | PRODUCT_BUNDLE_IDENTIFIER = jzj.MSNotificationProtectorDEMOUITests; 616 | PRODUCT_NAME = "$(TARGET_NAME)"; 617 | TARGETED_DEVICE_FAMILY = "1,2"; 618 | TEST_TARGET_NAME = MSNotificationProtectorDEMO; 619 | }; 620 | name = Release; 621 | }; 622 | /* End XCBuildConfiguration section */ 623 | 624 | /* Begin XCConfigurationList section */ 625 | 0ED12EB2214E46660067FEE4 /* Build configuration list for PBXProject "MSNotificationProtectorDEMO" */ = { 626 | isa = XCConfigurationList; 627 | buildConfigurations = ( 628 | 0ED12EE1214E46660067FEE4 /* Debug */, 629 | 0ED12EE2214E46660067FEE4 /* Release */, 630 | ); 631 | defaultConfigurationIsVisible = 0; 632 | defaultConfigurationName = Release; 633 | }; 634 | 0ED12EE3214E46660067FEE4 /* Build configuration list for PBXNativeTarget "MSNotificationProtectorDEMO" */ = { 635 | isa = XCConfigurationList; 636 | buildConfigurations = ( 637 | 0ED12EE4214E46660067FEE4 /* Debug */, 638 | 0ED12EE5214E46660067FEE4 /* Release */, 639 | ); 640 | defaultConfigurationIsVisible = 0; 641 | defaultConfigurationName = Release; 642 | }; 643 | 0ED12EE6214E46660067FEE4 /* Build configuration list for PBXNativeTarget "MSNotificationProtectorDEMOTests" */ = { 644 | isa = XCConfigurationList; 645 | buildConfigurations = ( 646 | 0ED12EE7214E46660067FEE4 /* Debug */, 647 | 0ED12EE8214E46660067FEE4 /* Release */, 648 | ); 649 | defaultConfigurationIsVisible = 0; 650 | defaultConfigurationName = Release; 651 | }; 652 | 0ED12EE9214E46660067FEE4 /* Build configuration list for PBXNativeTarget "MSNotificationProtectorDEMOUITests" */ = { 653 | isa = XCConfigurationList; 654 | buildConfigurations = ( 655 | 0ED12EEA214E46660067FEE4 /* Debug */, 656 | 0ED12EEB214E46660067FEE4 /* Release */, 657 | ); 658 | defaultConfigurationIsVisible = 0; 659 | defaultConfigurationName = Release; 660 | }; 661 | /* End XCConfigurationList section */ 662 | }; 663 | rootObject = 0ED12EAF214E46660067FEE4 /* Project object */; 664 | } 665 | -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UIRequiredDeviceCapabilities 24 | 25 | armv7 26 | 27 | UISupportedInterfaceOrientations 28 | 29 | UIInterfaceOrientationPortrait 30 | 31 | UISupportedInterfaceOrientations~ipad 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationPortraitUpsideDown 35 | UIInterfaceOrientationLandscapeLeft 36 | UIInterfaceOrientationLandscapeRight 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/TestViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // TestViewController.h 3 | // MSNotificationProtector 4 | // 5 | // Created by JZJ on 2016/9/16. 6 | // Copyright © 2016年 JZJ. All rights reserved. 7 | // 8 | 9 | #import 10 | static NSString * const testNotification = @"testNotification"; 11 | 12 | typedef void (^TestVCDeallocBlock)(id obj); 13 | 14 | @interface TestViewController : UIViewController 15 | 16 | @property (nonatomic, copy) TestVCDeallocBlock deallocBlock; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/TestViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // TestViewController.m 3 | // MSNotificationProtector 4 | // 5 | // Created by JZJ on 2016/9/16. 6 | // Copyright © 2016年 JZJ. All rights reserved. 7 | // 8 | 9 | #import "TestViewController.h" 10 | 11 | @interface TestViewController () 12 | 13 | @end 14 | 15 | @implementation TestViewController 16 | 17 | - (void)dealloc{ 18 | if(self.deallocBlock){ 19 | self.deallocBlock(self); 20 | } 21 | NSLog(@"%s",__func__); 22 | } 23 | 24 | - (void)viewDidLoad { 25 | [super viewDidLoad]; 26 | 27 | [[NSNotificationCenter defaultCenter] addObserver:self 28 | selector:@selector(test) 29 | name:testNotification 30 | object:nil]; 31 | } 32 | 33 | - (void)test{ 34 | NSLog(@"%s",__func__); 35 | } 36 | 37 | - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 38 | [self.navigationController popoverPresentationController]; 39 | } 40 | 41 | @end 42 | -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // MSNotificationProtector 4 | // 5 | // Created by JZJ on 2016/9/16. 6 | // Copyright © 2016年 JZJ. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | @end 14 | 15 | -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/ViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.m 3 | // MSNotificationProtector 4 | // 5 | // Created by JZJ on 2016/9/16. 6 | // Copyright © 2016年 JZJ. All rights reserved. 7 | // 8 | 9 | #import "ViewController.h" 10 | #import "TestViewController.h" 11 | @interface ViewController () 12 | 13 | @end 14 | 15 | @implementation ViewController 16 | 17 | -(void)viewDidLoad{ 18 | [super viewDidLoad]; 19 | } 20 | 21 | - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 22 | TestViewController * vc = [TestViewController new]; 23 | [vc setDeallocBlock:^(id obj) { 24 | [[NSNotificationCenter defaultCenter] postNotificationName:testNotification object:nil]; 25 | }]; 26 | [self.navigationController pushViewController:vc animated:YES]; 27 | } 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // MSNotificationProtector 4 | // 5 | // Created by JZJ on 2016/9/16. 6 | // Copyright © 2016年 JZJ. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | @end 16 | 17 | -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // MSNotificationProtector 4 | // 5 | // Created by JZJ on 2016/9/16. 6 | // Copyright © 2016年 JZJ. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | #import "ViewController.h" 11 | 12 | @implementation AppDelegate 13 | 14 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 15 | self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 16 | UINavigationController* navVC = [[UINavigationController alloc] initWithRootViewController:ViewController.new]; 17 | self.window.rootViewController = navVC; 18 | self.window.backgroundColor = [UIColor whiteColor]; 19 | [self.window makeKeyAndVisible]; 20 | return YES; 21 | } 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/1024x1024@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/1024x1024@2x.png -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "icon-20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "icon-20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "icon-29.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "icon-29@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "29x29", 29 | "idiom" : "iphone", 30 | "filename" : "icon-29@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "icon-40@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "40x40", 41 | "idiom" : "iphone", 42 | "filename" : "icon-40@3x.png", 43 | "scale" : "3x" 44 | }, 45 | { 46 | "size" : "57x57", 47 | "idiom" : "iphone", 48 | "filename" : "icon-57.png", 49 | "scale" : "1x" 50 | }, 51 | { 52 | "size" : "57x57", 53 | "idiom" : "iphone", 54 | "filename" : "icon-57@2x.png", 55 | "scale" : "2x" 56 | }, 57 | { 58 | "size" : "60x60", 59 | "idiom" : "iphone", 60 | "filename" : "icon-60@2x.png", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "size" : "60x60", 65 | "idiom" : "iphone", 66 | "filename" : "icon-60@3x.png", 67 | "scale" : "3x" 68 | }, 69 | { 70 | "size" : "20x20", 71 | "idiom" : "ipad", 72 | "filename" : "icon-20-ipad.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "20x20", 77 | "idiom" : "ipad", 78 | "filename" : "icon-20@2x-ipad.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "29x29", 83 | "idiom" : "ipad", 84 | "filename" : "icon-29-ipad.png", 85 | "scale" : "1x" 86 | }, 87 | { 88 | "size" : "29x29", 89 | "idiom" : "ipad", 90 | "filename" : "icon-29@2x-ipad.png", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "size" : "40x40", 95 | "idiom" : "ipad", 96 | "filename" : "icon-40.png", 97 | "scale" : "1x" 98 | }, 99 | { 100 | "size" : "40x40", 101 | "idiom" : "ipad", 102 | "filename" : "icon-40@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "50x50", 107 | "idiom" : "ipad", 108 | "filename" : "icon-50.png", 109 | "scale" : "1x" 110 | }, 111 | { 112 | "size" : "50x50", 113 | "idiom" : "ipad", 114 | "filename" : "icon-50@2x.png", 115 | "scale" : "2x" 116 | }, 117 | { 118 | "size" : "72x72", 119 | "idiom" : "ipad", 120 | "filename" : "icon-72.png", 121 | "scale" : "1x" 122 | }, 123 | { 124 | "size" : "72x72", 125 | "idiom" : "ipad", 126 | "filename" : "icon-72@2x.png", 127 | "scale" : "2x" 128 | }, 129 | { 130 | "size" : "76x76", 131 | "idiom" : "ipad", 132 | "filename" : "icon-76.png", 133 | "scale" : "1x" 134 | }, 135 | { 136 | "size" : "76x76", 137 | "idiom" : "ipad", 138 | "filename" : "icon-76@2x.png", 139 | "scale" : "2x" 140 | }, 141 | { 142 | "size" : "83.5x83.5", 143 | "idiom" : "ipad", 144 | "filename" : "icon-83.5@2x.png", 145 | "scale" : "2x" 146 | }, 147 | { 148 | "size" : "1024x1024", 149 | "idiom" : "ios-marketing", 150 | "filename" : "1024x1024@2x.png", 151 | "scale" : "1x" 152 | } 153 | ], 154 | "info" : { 155 | "version" : 1, 156 | "author" : "xcode" 157 | } 158 | } -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-20-ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-20-ipad.png -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-20@2x-ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-20@2x-ipad.png -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-29-ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-29-ipad.png -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-29.png -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-29@2x-ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-29@2x-ipad.png -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-40.png -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-50.png -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-50@2x.png -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-57.png -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-57@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-57@2x.png -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-72.png -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-72@2x.png -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-76.png -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/MSNotificationProtectorDEMO/other/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/LaunchImage.launchimage/1024iPadPortraitWOSBiOS56_768x1004pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/MSNotificationProtectorDEMO/other/Assets.xcassets/LaunchImage.launchimage/1024iPadPortraitWOSBiOS56_768x1004pt.png -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/LaunchImage.launchimage/1024iPadPortraitWOSBiOS56_768x1004pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/MSNotificationProtectorDEMO/other/Assets.xcassets/LaunchImage.launchimage/1024iPadPortraitWOSBiOS56_768x1004pt@2x.png -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/LaunchImage.launchimage/1024iPadPortraitiOS56_768x1024pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/MSNotificationProtectorDEMO/other/Assets.xcassets/LaunchImage.launchimage/1024iPadPortraitiOS56_768x1024pt.png -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/LaunchImage.launchimage/1024iPadPortraitiOS56_768x1024pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/MSNotificationProtectorDEMO/other/Assets.xcassets/LaunchImage.launchimage/1024iPadPortraitiOS56_768x1024pt@2x.png -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/LaunchImage.launchimage/1024iPadPortraitiOS789_768x1024pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/MSNotificationProtectorDEMO/other/Assets.xcassets/LaunchImage.launchimage/1024iPadPortraitiOS789_768x1024pt.png -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/LaunchImage.launchimage/1024iPadPortraitiOS789_768x1024pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/MSNotificationProtectorDEMO/other/Assets.xcassets/LaunchImage.launchimage/1024iPadPortraitiOS789_768x1024pt@2x.png -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS56_320x480pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/MSNotificationProtectorDEMO/other/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS56_320x480pt.png -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS56_320x480pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/MSNotificationProtectorDEMO/other/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS56_320x480pt@2x.png -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS56_320x568pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/MSNotificationProtectorDEMO/other/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS56_320x568pt@2x.png -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS789_320x480pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/MSNotificationProtectorDEMO/other/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS789_320x480pt@2x.png -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS789_320x568pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/MSNotificationProtectorDEMO/other/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS789_320x568pt@2x.png -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS89_375x667pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/MSNotificationProtectorDEMO/other/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS89_375x667pt@2x.png -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS89_414x736pt@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/MSNotificationProtectorDEMO/other/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS89_414x736pt@3x.png -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/Assets.xcassets/LaunchImage.launchimage/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "orientation" : "portrait", 5 | "idiom" : "iphone", 6 | "filename" : "1024iPhonePortraitiOS56_320x480pt.png", 7 | "extent" : "full-screen", 8 | "scale" : "1x" 9 | }, 10 | { 11 | "orientation" : "portrait", 12 | "idiom" : "iphone", 13 | "filename" : "1024iPhonePortraitiOS56_320x480pt@2x.png", 14 | "extent" : "full-screen", 15 | "scale" : "2x" 16 | }, 17 | { 18 | "orientation" : "portrait", 19 | "idiom" : "iphone", 20 | "filename" : "1024iPhonePortraitiOS56_320x568pt@2x.png", 21 | "extent" : "full-screen", 22 | "subtype" : "retina4", 23 | "scale" : "2x" 24 | }, 25 | { 26 | "orientation" : "portrait", 27 | "idiom" : "ipad", 28 | "filename" : "1024iPadPortraitWOSBiOS56_768x1004pt.png", 29 | "extent" : "to-status-bar", 30 | "scale" : "1x" 31 | }, 32 | { 33 | "orientation" : "portrait", 34 | "idiom" : "ipad", 35 | "filename" : "1024iPadPortraitiOS56_768x1024pt.png", 36 | "extent" : "full-screen", 37 | "scale" : "1x" 38 | }, 39 | { 40 | "orientation" : "portrait", 41 | "idiom" : "ipad", 42 | "filename" : "1024iPadPortraitWOSBiOS56_768x1004pt@2x.png", 43 | "extent" : "to-status-bar", 44 | "scale" : "2x" 45 | }, 46 | { 47 | "orientation" : "portrait", 48 | "idiom" : "ipad", 49 | "filename" : "1024iPadPortraitiOS56_768x1024pt@2x.png", 50 | "extent" : "full-screen", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "extent" : "full-screen", 55 | "idiom" : "iphone", 56 | "subtype" : "736h", 57 | "filename" : "1024iPhonePortraitiOS89_414x736pt@3x.png", 58 | "minimum-system-version" : "8.0", 59 | "orientation" : "portrait", 60 | "scale" : "3x" 61 | }, 62 | { 63 | "extent" : "full-screen", 64 | "idiom" : "iphone", 65 | "subtype" : "667h", 66 | "filename" : "1024iPhonePortraitiOS89_375x667pt@2x.png", 67 | "minimum-system-version" : "8.0", 68 | "orientation" : "portrait", 69 | "scale" : "2x" 70 | }, 71 | { 72 | "orientation" : "portrait", 73 | "idiom" : "iphone", 74 | "filename" : "1024iPhonePortraitiOS789_320x480pt@2x.png", 75 | "extent" : "full-screen", 76 | "minimum-system-version" : "7.0", 77 | "scale" : "2x" 78 | }, 79 | { 80 | "extent" : "full-screen", 81 | "idiom" : "iphone", 82 | "subtype" : "retina4", 83 | "filename" : "1024iPhonePortraitiOS789_320x568pt@2x.png", 84 | "minimum-system-version" : "7.0", 85 | "orientation" : "portrait", 86 | "scale" : "2x" 87 | }, 88 | { 89 | "orientation" : "portrait", 90 | "idiom" : "ipad", 91 | "filename" : "1024iPadPortraitiOS789_768x1024pt.png", 92 | "extent" : "full-screen", 93 | "minimum-system-version" : "7.0", 94 | "scale" : "1x" 95 | }, 96 | { 97 | "orientation" : "portrait", 98 | "idiom" : "ipad", 99 | "filename" : "1024iPadPortraitiOS789_768x1024pt@2x.png", 100 | "extent" : "full-screen", 101 | "minimum-system-version" : "7.0", 102 | "scale" : "2x" 103 | } 104 | ], 105 | "info" : { 106 | "version" : 1, 107 | "author" : "xcode" 108 | } 109 | } -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/MSNotificationProtectorDEMOTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/MSNotificationProtectorDEMOTests/MSNotificationProtectorDEMOTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // MSNotificationProtectorDEMOTests.m 3 | // MSNotificationProtectorDEMOTests 4 | // 5 | // Created by JZJ on 2016/9/16. 6 | // Copyright © 2016年 JZJ. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface MSNotificationProtectorDEMOTests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation MSNotificationProtectorDEMOTests 16 | 17 | - (void)setUp { 18 | [super setUp]; 19 | // Put setup code here. This method is called before the invocation of each test method in the class. 20 | } 21 | 22 | - (void)tearDown { 23 | // Put teardown code here. This method is called after the invocation of each test method in the class. 24 | [super tearDown]; 25 | } 26 | 27 | - (void)testExample { 28 | // This is an example of a functional test case. 29 | // Use XCTAssert and related functions to verify your tests produce the correct results. 30 | } 31 | 32 | - (void)testPerformanceExample { 33 | // This is an example of a performance test case. 34 | [self measureBlock:^{ 35 | // Put the code you want to measure the time of here. 36 | }]; 37 | } 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/MSNotificationProtectorDEMOUITests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/MSNotificationProtectorDEMOUITests/MSNotificationProtectorDEMOUITests.m: -------------------------------------------------------------------------------- 1 | // 2 | // MSNotificationProtectorDEMOUITests.m 3 | // MSNotificationProtectorDEMOUITests 4 | // 5 | // Created by JZJ on 2016/9/16. 6 | // Copyright © 2016年 JZJ. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface MSNotificationProtectorDEMOUITests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation MSNotificationProtectorDEMOUITests 16 | 17 | - (void)setUp { 18 | [super setUp]; 19 | 20 | // Put setup code here. This method is called before the invocation of each test method in the class. 21 | 22 | // In UI tests it is usually best to stop immediately when a failure occurs. 23 | self.continueAfterFailure = NO; 24 | // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. 25 | [[[XCUIApplication alloc] init] launch]; 26 | 27 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. 28 | } 29 | 30 | - (void)tearDown { 31 | // Put teardown code here. This method is called after the invocation of each test method in the class. 32 | [super tearDown]; 33 | } 34 | 35 | - (void)testExample { 36 | // Use recording to get started writing UI tests. 37 | // Use XCTAssert and related functions to verify your tests produce the correct results. 38 | } 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /MSNotificationProtectorDEMO/other/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // MSNotificationProtectorDEMO 4 | // 5 | // Created by JZJ on 2016/9/16. 6 | // Copyright © 2016年 JZJ. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /NSNotificationCenterApple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/NSNotificationCenterApple.png -------------------------------------------------------------------------------- /Official Documentation/Foundation Release Notes (macOS 10.12 and earlier) NSNotificationCenter.webarchive: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/Official Documentation/Foundation Release Notes (macOS 10.12 and earlier) NSNotificationCenter.webarchive -------------------------------------------------------------------------------- /Official Documentation/Foundation Release Notes (macOS 10.12 and earlier).pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSNotificationProtector/dfef5c92f1c8141cb5200f943083ef0701084eda/Official Documentation/Foundation Release Notes (macOS 10.12 and earlier).pdf -------------------------------------------------------------------------------- /Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment the next line to define a global platform for your project 2 | # platform :ios, '9.0' 3 | 4 | target 'MSNotificationProtectorDEMO' do 5 | # Uncomment the next line if you're using Swift or would like to use dynamic frameworks 6 | # use_frameworks! 7 | 8 | pod 'MSNotificationProtector' 9 | 10 | # Pods for MSNotificationProtectorDEMO 11 | 12 | target 'MSNotificationProtectorDEMOTests' do 13 | inherit! :search_paths 14 | # Pods for testing 15 | end 16 | 17 | target 'MSNotificationProtectorDEMOUITests' do 18 | inherit! :search_paths 19 | # Pods for testing 20 | end 21 | 22 | end 23 | -------------------------------------------------------------------------------- /Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - MSNotificationProtector (1.0) 3 | 4 | DEPENDENCIES: 5 | - MSNotificationProtector 6 | 7 | SPEC REPOS: 8 | https://github.com/cocoapods/specs.git: 9 | - MSNotificationProtector 10 | 11 | SPEC CHECKSUMS: 12 | MSNotificationProtector: 70121469b3ac0f516bea3c1533b6f446c7a308b6 13 | 14 | PODFILE CHECKSUM: 5aa853e9794f6146bd105a323de5a3ce98684c95 15 | 16 | COCOAPODS: 1.5.3 17 | -------------------------------------------------------------------------------- /Pods/Headers/Private/MSNotificationProtector/MSMonitorObject.h: -------------------------------------------------------------------------------- 1 | ../../../MSNotificationProtector/MSNotificationProtector/MSMonitorObject.h -------------------------------------------------------------------------------- /Pods/Headers/Private/MSNotificationProtector/NSNotificationCenter+MSSafeProtect.h: -------------------------------------------------------------------------------- 1 | ../../../MSNotificationProtector/MSNotificationProtector/NSNotificationCenter+MSSafeProtect.h -------------------------------------------------------------------------------- /Pods/Headers/Private/MSNotificationProtector/NSObject+MSSwizzle.h: -------------------------------------------------------------------------------- 1 | ../../../MSNotificationProtector/MSNotificationProtector/NSObject+MSSwizzle.h -------------------------------------------------------------------------------- /Pods/Headers/Public/MSNotificationProtector/MSMonitorObject.h: -------------------------------------------------------------------------------- 1 | ../../../MSNotificationProtector/MSNotificationProtector/MSMonitorObject.h -------------------------------------------------------------------------------- /Pods/Headers/Public/MSNotificationProtector/NSNotificationCenter+MSSafeProtect.h: -------------------------------------------------------------------------------- 1 | ../../../MSNotificationProtector/MSNotificationProtector/NSNotificationCenter+MSSafeProtect.h -------------------------------------------------------------------------------- /Pods/Headers/Public/MSNotificationProtector/NSObject+MSSwizzle.h: -------------------------------------------------------------------------------- 1 | ../../../MSNotificationProtector/MSNotificationProtector/NSObject+MSSwizzle.h -------------------------------------------------------------------------------- /Pods/MSNotificationProtector/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Pods/MSNotificationProtector/MSNotificationProtector/MSMonitorObject.h: -------------------------------------------------------------------------------- 1 | // 2 | // MSMonitorObject.h 3 | // MSNotificationProtector 4 | // 5 | // Created by JZJ on 2016/9/16. 6 | // Copyright © 2016年 JZJ. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | typedef void (^MSDeallocMonitorBlock)(id obj); 12 | static void *MSNotificationCenterMonitorObjectKey = &MSNotificationCenterMonitorObjectKey; 13 | 14 | @interface MSMonitorObject:NSObject 15 | @property (nonatomic, copy) MSDeallocMonitorBlock deallocBlock; 16 | @property (nonatomic, assign) id target; 17 | @end 18 | -------------------------------------------------------------------------------- /Pods/MSNotificationProtector/MSNotificationProtector/MSMonitorObject.m: -------------------------------------------------------------------------------- 1 | // 2 | // MSMonitorObject.m 3 | // MSNotificationProtector 4 | // 5 | // Created by JZJ on 2016/9/16. 6 | // Copyright © 2016年 JZJ. All rights reserved. 7 | // 8 | 9 | #import "MSMonitorObject.h" 10 | 11 | @implementation MSMonitorObject 12 | 13 | - (void)dealloc{ 14 | id target = self.target; 15 | if (self.deallocBlock && target) { 16 | self.deallocBlock(target); 17 | } 18 | } 19 | @end 20 | -------------------------------------------------------------------------------- /Pods/MSNotificationProtector/MSNotificationProtector/NSNotificationCenter+MSSafeProtect.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSNotificationCenter+MSSafeProtect.h 3 | // MSNotificationProtector 4 | // 5 | // Created by JZJ on 2016/9/16. 6 | // Copyright © 2016年 JZJ. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSNotificationCenter (MSSafeProtect) 12 | + (void)msSetProtectEnable:(BOOL)en; 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /Pods/MSNotificationProtector/MSNotificationProtector/NSNotificationCenter+MSSafeProtect.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSNotificationCenter+MSSafeProtect.m 3 | // MSNotificationProtector 4 | // 5 | // Created by JZJ on 2016/9/16. 6 | // Copyright © 2016年 JZJ. All rights reserved. 7 | // 8 | 9 | #import "NSNotificationCenter+MSSafeProtect.h" 10 | #import "NSObject+MSSwizzle.h" 11 | #import 12 | #import 13 | #import 14 | #import "MSMonitorObject.h" 15 | 16 | static BOOL MSNotificationCenterProtectEnable = YES; 17 | static pthread_mutex_t lock;//结构体 18 | @implementation NSNotificationCenter (MSSafeProtect) 19 | 20 | + (void)load{ 21 | 22 | //iOS 9开始系统会自动为我们移除通知 但是 7 8 都会立即崩溃 所以只交换9以下 23 | if (NSFoundationVersionNumber <= NSFoundationVersionNumber_iOS_9_0) { 24 | 25 | [self swizzleInstanceSelector:@selector(addObserver:selector:name:object:) withNewSelector:@selector(msAddObserver:selector:name:object:)]; 26 | 27 | [self swizzleInstanceSelector:@selector(addObserverForName:object:queue:usingBlock:) withNewSelector:@selector(msAddObserverForName:object:queue:usingBlock:)]; 28 | pthread_mutex_init(&lock, NULL); 29 | } 30 | } 31 | 32 | - (void)msAddObserver:(id)observer selector:(SEL)aSelector name:(NSNotificationName)aName object:(id)anObject{ 33 | 34 | [self msAddObserver:observer selector:aSelector name:aName object:anObject]; 35 | [self handleObserver:observer]; 36 | } 37 | 38 | - (id)msAddObserverForName:(NSNotificationName)name object:(id)obj queue:(NSOperationQueue *)queue usingBlock:(void (^)(NSNotification * _Nonnull))block{ 39 | id observer = [self msAddObserverForName:name object:obj queue:queue usingBlock:block]; 40 | [self handleObserver:observer]; 41 | return observer; 42 | } 43 | 44 | - (void)handleObserver:(id)observer{ 45 | 46 | if (MSNotificationCenterProtectEnable && observer){ 47 | 48 | pthread_mutex_lock(&lock); 49 | MSMonitorObject *monitor = objc_getAssociatedObject(observer, MSNotificationCenterMonitorObjectKey); 50 | if (!monitor) {//如果observer 没有这个 附加帮助移除对象 51 | monitor = [MSMonitorObject new]; 52 | monitor.target = observer;//设置 为 observer 53 | monitor.deallocBlock = [^(id obj){//创建block 54 | if (obj) {//虽然此处 obj已经dealloc完毕了 但是 并没有向obj发送消息 所以并不会也指针访问 55 | [self removeObserver:obj];//observer dealloc的时候 会调用 monitor的dealloc 执行此block 56 | } 57 | } copy]; 58 | objc_setAssociatedObject(observer, MSNotificationCenterMonitorObjectKey, monitor, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 59 | } 60 | pthread_mutex_unlock(&lock); 61 | } 62 | } 63 | 64 | 65 | + (void)msSetProtectEnable:(BOOL)en{ 66 | MSNotificationCenterProtectEnable = en; 67 | } 68 | 69 | @end 70 | -------------------------------------------------------------------------------- /Pods/MSNotificationProtector/MSNotificationProtector/NSObject+MSSwizzle.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSObject+MSSwizzle.h 3 | // MSNotificationProtector 4 | // 5 | // Created by JZJ on 2016/9/16. 6 | // Copyright © 2016年 JZJ. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSObject (MSSwizzle) 12 | 13 | + (void)swizzleInstanceSelector:(SEL)originalSelector 14 | withNewSelector:(SEL)newSelector; 15 | 16 | + (void) swizzleClassSelector:(SEL)originalSelector 17 | withNewSelector:(SEL)newSelector; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /Pods/MSNotificationProtector/MSNotificationProtector/NSObject+MSSwizzle.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSObject+MSSwizzle.m 3 | // MSNotificationProtector 4 | // 5 | // Created by JZJ on 2016/9/16. 6 | // Copyright © 2016年 JZJ. All rights reserved. 7 | // 8 | 9 | #import "NSObject+MSSwizzle.h" 10 | #import 11 | 12 | @implementation NSObject (MSSwizzle) 13 | 14 | + (void) swizzleInstanceSelector:(SEL)originalSelector 15 | withNewSelector:(SEL)newSelector 16 | { 17 | Method originalMethod = class_getInstanceMethod(self, originalSelector); 18 | Method newMethod = class_getInstanceMethod(self, newSelector); 19 | 20 | method_exchangeImplementations(originalMethod, newMethod); 21 | 22 | } 23 | 24 | void swizzleClassMethod(Class c, SEL orig, SEL new) { 25 | 26 | Method origMethod = class_getClassMethod(c, orig); 27 | Method newMethod = class_getClassMethod(c, new); 28 | 29 | c = object_getClass((id)c); 30 | 31 | if(class_addMethod(c, orig, method_getImplementation(newMethod), method_getTypeEncoding(newMethod))) 32 | class_replaceMethod(c, new, method_getImplementation(origMethod), method_getTypeEncoding(origMethod)); 33 | else 34 | method_exchangeImplementations(origMethod, newMethod); 35 | } 36 | 37 | + (void) swizzleClassSelector:(SEL)originalSelector 38 | withNewSelector:(SEL)newSelector 39 | { 40 | swizzleClassMethod(self, originalSelector, newSelector); 41 | } 42 | 43 | @end 44 | -------------------------------------------------------------------------------- /Pods/MSNotificationProtector/README.md: -------------------------------------------------------------------------------- 1 | # MSNotificationProtector 2 | No intrusive automatic removal of notifications added below iOS9 3 | 4 | ![](NSNotificationCenterApple.png) 5 | [https://developer.apple.com/library/archive/releasenotes/Foundation/RN-FoundationOlderNotes/index.html#10_11NotificationCenter](https://developer.apple.com/library/archive/releasenotes/Foundation/RN-FoundationOlderNotes/index.html#10_11NotificationCenter) 6 | 7 | 8 | [![platform](http://img.shields.io/cocoapods/p/YYKit.svg?style=flat)](https://www.apple.com/nl/ios/) 9 | [![GitHub license](https://img.shields.io/github/license/mashape/apistatus.svg?style=flat)](https://github.com/JZJJZJ/MSNotificationProtector/blob/master/LICENSE) 10 | [![CocoaPods]( https://img.shields.io/github/stars/badges/shields.svg?style=social&logo=github&label=Stars)](https://github.com/JZJJZJ/MSNotificationProtector.git) 11 | [![GitHub stars](https://img.shields.io/github/stars/badges/shields.svg?style=social&logo=github&label=Stars)](https://github.com/JZJJZJ/MSNotificationProtector.git) 12 | 13 | 14 | 15 | ## Installation 16 | 17 | ### Cocoapods(Recommended) 18 | 19 | 1. Add `pod 'MSNotificationProtector'` to your Podfile. 20 | 2. Run `pod install` 21 | 22 | ### Manual 23 | 24 | 1. Add all files under `MSNotificationProtector` to your project 25 | 26 | ## Requirements 27 | 28 | - iOS 2.0 and greater 29 | - ARC/MRC 30 | 31 | 32 | ## How To Use 33 | Automatically effective, no additional operations are required after the project is introduced 34 | 35 | ## Credits 36 | 37 | MSCrashProtector was created by [Jiang.Zijia](https://github.com/JZJJZJ) in the development of [MOMO](https://www.immomo.com). 38 | 39 | ## License 40 | 41 | MSCrashProtector is available under the MIT license. See the LICENSE file for more info. 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - MSNotificationProtector (1.0) 3 | 4 | DEPENDENCIES: 5 | - MSNotificationProtector 6 | 7 | SPEC REPOS: 8 | https://github.com/cocoapods/specs.git: 9 | - MSNotificationProtector 10 | 11 | SPEC CHECKSUMS: 12 | MSNotificationProtector: 70121469b3ac0f516bea3c1533b6f446c7a308b6 13 | 14 | PODFILE CHECKSUM: 5aa853e9794f6146bd105a323de5a3ce98684c95 15 | 16 | COCOAPODS: 1.5.3 17 | -------------------------------------------------------------------------------- /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 | 26BF55902E25BFD1B0026C20B5D9B156 /* NSObject+MSSwizzle.h in Headers */ = {isa = PBXBuildFile; fileRef = D52467A82C86A5615943AEC3436796ED /* NSObject+MSSwizzle.h */; settings = {ATTRIBUTES = (Project, ); }; }; 11 | 49E3C814F35A0CC9F15A1B162710A556 /* MSMonitorObject.m in Sources */ = {isa = PBXBuildFile; fileRef = C6C801850FF6ECE9DCE18C1C99373111 /* MSMonitorObject.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; 12 | 50FABF1ECF9F182D232E2C929078C7FF /* Pods-MSNotificationProtectorDEMOUITests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AA4B875822E58CABAD88BF19F1EE26F7 /* Pods-MSNotificationProtectorDEMOUITests-dummy.m */; }; 13 | 55E88B777F1E55BA2EEE2BF6BE0BB972 /* NSNotificationCenter+MSSafeProtect.m in Sources */ = {isa = PBXBuildFile; fileRef = 57150CF2871044E011D193729DBEB0FD /* NSNotificationCenter+MSSafeProtect.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; 14 | 743B598DBBB4A9E2DA64A6019C5BA900 /* Pods-MSNotificationProtectorDEMOTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CA2C37CAB9A27779B396CA3E60BCD716 /* Pods-MSNotificationProtectorDEMOTests-dummy.m */; }; 15 | 81E105ED03629F3A20B6764B90DE3C93 /* MSMonitorObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 136EB7E38FC684B3CCA5BF22DBF00343 /* MSMonitorObject.h */; settings = {ATTRIBUTES = (Project, ); }; }; 16 | AF419E4087E7B0EAA3EF170E54108A91 /* NSObject+MSSwizzle.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E22BBCCEB05E4C7D761D5A1704B1627 /* NSObject+MSSwizzle.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; 17 | B87E93444917B9DEBE7B1C1B8E6404EE /* MSNotificationProtector-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F0AF7F5EC7293301C1D54B87936CE4FB /* MSNotificationProtector-dummy.m */; }; 18 | E0066F292F35FE324F4FDE9981760CB4 /* Pods-MSNotificationProtectorDEMO-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 65E32E60907DF3E3655FC4362965361E /* Pods-MSNotificationProtectorDEMO-dummy.m */; }; 19 | F6AE250428E4C3DA00A06A9D25F2A369 /* NSNotificationCenter+MSSafeProtect.h in Headers */ = {isa = PBXBuildFile; fileRef = 14A718EA1D120FB0A87725969C01DA87 /* NSNotificationCenter+MSSafeProtect.h */; settings = {ATTRIBUTES = (Project, ); }; }; 20 | /* End PBXBuildFile section */ 21 | 22 | /* Begin PBXContainerItemProxy section */ 23 | 5201AFAF95EF3F9A65873470BF46CEC1 /* PBXContainerItemProxy */ = { 24 | isa = PBXContainerItemProxy; 25 | containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 26 | proxyType = 1; 27 | remoteGlobalIDString = 160DEB9B0589C004400281C712C5D46D; 28 | remoteInfo = MSNotificationProtector; 29 | }; 30 | 5815AC30FEBB92B3E87AB1D3CDAA1E28 /* PBXContainerItemProxy */ = { 31 | isa = PBXContainerItemProxy; 32 | containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 33 | proxyType = 1; 34 | remoteGlobalIDString = C4D46564762C2B55E347963D9C05521D; 35 | remoteInfo = "Pods-MSNotificationProtectorDEMO"; 36 | }; 37 | 63BD3A3F7FA556E8EFA2CF18D2C887A0 /* PBXContainerItemProxy */ = { 38 | isa = PBXContainerItemProxy; 39 | containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 40 | proxyType = 1; 41 | remoteGlobalIDString = C4D46564762C2B55E347963D9C05521D; 42 | remoteInfo = "Pods-MSNotificationProtectorDEMO"; 43 | }; 44 | /* End PBXContainerItemProxy section */ 45 | 46 | /* Begin PBXFileReference section */ 47 | 02F2BB831AA09D4292A355662DF12EF1 /* libPods-MSNotificationProtectorDEMOTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MSNotificationProtectorDEMOTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 48 | 0587C2754EB440B122663D4C19E1EC52 /* libPods-MSNotificationProtectorDEMOUITests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MSNotificationProtectorDEMOUITests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 49 | 0A3D9483D970F4F95162561A510C1219 /* Pods-MSNotificationProtectorDEMOTests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MSNotificationProtectorDEMOTests-frameworks.sh"; sourceTree = ""; }; 50 | 136EB7E38FC684B3CCA5BF22DBF00343 /* MSMonitorObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MSMonitorObject.h; path = MSNotificationProtector/MSMonitorObject.h; sourceTree = ""; }; 51 | 14A718EA1D120FB0A87725969C01DA87 /* NSNotificationCenter+MSSafeProtect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSNotificationCenter+MSSafeProtect.h"; path = "MSNotificationProtector/NSNotificationCenter+MSSafeProtect.h"; sourceTree = ""; }; 52 | 1D1825630DCE5788CF1C8752CB669ED0 /* MSNotificationProtector-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MSNotificationProtector-prefix.pch"; sourceTree = ""; }; 53 | 3141602CCD38F0F74425BF9C02A49934 /* Pods-MSNotificationProtectorDEMOTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MSNotificationProtectorDEMOTests-acknowledgements.plist"; sourceTree = ""; }; 54 | 3CA9A39B6DD97186CE5AA436480F2F9B /* libPods-MSNotificationProtectorDEMO.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MSNotificationProtectorDEMO.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 55 | 4DBC9FD9861C8F0C260C1FB0EECCB298 /* Pods-MSNotificationProtectorDEMOUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MSNotificationProtectorDEMOUITests.release.xcconfig"; sourceTree = ""; }; 56 | 4DE16B1FA83726D22C4980118DE95002 /* Pods-MSNotificationProtectorDEMO-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MSNotificationProtectorDEMO-acknowledgements.markdown"; sourceTree = ""; }; 57 | 57150CF2871044E011D193729DBEB0FD /* NSNotificationCenter+MSSafeProtect.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSNotificationCenter+MSSafeProtect.m"; path = "MSNotificationProtector/NSNotificationCenter+MSSafeProtect.m"; sourceTree = ""; }; 58 | 5A97C55B4AA45D1974BEA7E34587F644 /* Pods-MSNotificationProtectorDEMOUITests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MSNotificationProtectorDEMOUITests-acknowledgements.markdown"; sourceTree = ""; }; 59 | 6029ED98E7E1EFAC4B9689FB42117822 /* Pods-MSNotificationProtectorDEMO-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MSNotificationProtectorDEMO-frameworks.sh"; sourceTree = ""; }; 60 | 602D16D8C84277569F3427E2662DD4BE /* Pods-MSNotificationProtectorDEMOUITests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MSNotificationProtectorDEMOUITests-resources.sh"; sourceTree = ""; }; 61 | 6275ED2DB5913AB908DA6A105E487702 /* MSNotificationProtector.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MSNotificationProtector.xcconfig; sourceTree = ""; }; 62 | 65E32E60907DF3E3655FC4362965361E /* Pods-MSNotificationProtectorDEMO-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MSNotificationProtectorDEMO-dummy.m"; sourceTree = ""; }; 63 | 6ACDDD8A81A12FB716EDDC792E9E71CA /* Pods-MSNotificationProtectorDEMOUITests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MSNotificationProtectorDEMOUITests-frameworks.sh"; sourceTree = ""; }; 64 | 702D3BD7ACBCB8E8784A620C99A2F518 /* libMSNotificationProtector.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libMSNotificationProtector.a; sourceTree = BUILT_PRODUCTS_DIR; }; 65 | 7DB1F83DD97C941B8C0E7F5DB9FA30A7 /* Pods-MSNotificationProtectorDEMO.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MSNotificationProtectorDEMO.debug.xcconfig"; sourceTree = ""; }; 66 | 7E22BBCCEB05E4C7D761D5A1704B1627 /* NSObject+MSSwizzle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+MSSwizzle.m"; path = "MSNotificationProtector/NSObject+MSSwizzle.m"; sourceTree = ""; }; 67 | 82F6220BF64CD0C405763DF2BF25B3B9 /* Pods-MSNotificationProtectorDEMOUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MSNotificationProtectorDEMOUITests.debug.xcconfig"; sourceTree = ""; }; 68 | 850004EB6AECBA1A24CBB8A3667DDF6A /* Pods-MSNotificationProtectorDEMOUITests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MSNotificationProtectorDEMOUITests-acknowledgements.plist"; sourceTree = ""; }; 69 | 8D30A2DD21DE8CA050876FFAF071A85D /* Pods-MSNotificationProtectorDEMOTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MSNotificationProtectorDEMOTests-acknowledgements.markdown"; sourceTree = ""; }; 70 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 71 | 955BA03F36FD6A8D207B5DE98FDF0933 /* Pods-MSNotificationProtectorDEMO-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MSNotificationProtectorDEMO-acknowledgements.plist"; sourceTree = ""; }; 72 | AA4B875822E58CABAD88BF19F1EE26F7 /* Pods-MSNotificationProtectorDEMOUITests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MSNotificationProtectorDEMOUITests-dummy.m"; sourceTree = ""; }; 73 | B477E8420560DB2DB01F2196176CC641 /* Pods-MSNotificationProtectorDEMOTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MSNotificationProtectorDEMOTests.debug.xcconfig"; sourceTree = ""; }; 74 | BC6ED6E5F172438C3E62FF338DE36A79 /* Pods-MSNotificationProtectorDEMOTests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MSNotificationProtectorDEMOTests-resources.sh"; sourceTree = ""; }; 75 | BEA86580B16783E87ACCDA7570BF7E9C /* Pods-MSNotificationProtectorDEMO.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MSNotificationProtectorDEMO.release.xcconfig"; sourceTree = ""; }; 76 | C196A13068EC3B207B1A7DBB37BCDE09 /* Pods-MSNotificationProtectorDEMOTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MSNotificationProtectorDEMOTests.release.xcconfig"; sourceTree = ""; }; 77 | C6C801850FF6ECE9DCE18C1C99373111 /* MSMonitorObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MSMonitorObject.m; path = MSNotificationProtector/MSMonitorObject.m; sourceTree = ""; }; 78 | CA2C37CAB9A27779B396CA3E60BCD716 /* Pods-MSNotificationProtectorDEMOTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MSNotificationProtectorDEMOTests-dummy.m"; sourceTree = ""; }; 79 | D52467A82C86A5615943AEC3436796ED /* NSObject+MSSwizzle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+MSSwizzle.h"; path = "MSNotificationProtector/NSObject+MSSwizzle.h"; sourceTree = ""; }; 80 | E35535C8BFFD97D671034E95A445188F /* Pods-MSNotificationProtectorDEMO-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MSNotificationProtectorDEMO-resources.sh"; sourceTree = ""; }; 81 | F0AF7F5EC7293301C1D54B87936CE4FB /* MSNotificationProtector-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MSNotificationProtector-dummy.m"; sourceTree = ""; }; 82 | /* End PBXFileReference section */ 83 | 84 | /* Begin PBXFrameworksBuildPhase section */ 85 | 551FBD30D96808410D45DE34B2FE45F9 /* Frameworks */ = { 86 | isa = PBXFrameworksBuildPhase; 87 | buildActionMask = 2147483647; 88 | files = ( 89 | ); 90 | runOnlyForDeploymentPostprocessing = 0; 91 | }; 92 | 5F3A488343B78FB105088FACF536AFA4 /* Frameworks */ = { 93 | isa = PBXFrameworksBuildPhase; 94 | buildActionMask = 2147483647; 95 | files = ( 96 | ); 97 | runOnlyForDeploymentPostprocessing = 0; 98 | }; 99 | 66AB82F5B73931A728C0BAEE664C4BF9 /* Frameworks */ = { 100 | isa = PBXFrameworksBuildPhase; 101 | buildActionMask = 2147483647; 102 | files = ( 103 | ); 104 | runOnlyForDeploymentPostprocessing = 0; 105 | }; 106 | 67C96F3F5F17462E8BD30DE28213B605 /* Frameworks */ = { 107 | isa = PBXFrameworksBuildPhase; 108 | buildActionMask = 2147483647; 109 | files = ( 110 | ); 111 | runOnlyForDeploymentPostprocessing = 0; 112 | }; 113 | /* End PBXFrameworksBuildPhase section */ 114 | 115 | /* Begin PBXGroup section */ 116 | 0911F9EBAE456FB876C430D0A73DE6C8 /* Support Files */ = { 117 | isa = PBXGroup; 118 | children = ( 119 | 6275ED2DB5913AB908DA6A105E487702 /* MSNotificationProtector.xcconfig */, 120 | F0AF7F5EC7293301C1D54B87936CE4FB /* MSNotificationProtector-dummy.m */, 121 | 1D1825630DCE5788CF1C8752CB669ED0 /* MSNotificationProtector-prefix.pch */, 122 | ); 123 | name = "Support Files"; 124 | path = "../Target Support Files/MSNotificationProtector"; 125 | sourceTree = ""; 126 | }; 127 | 0F8D2E47FE03D3B91B51069F7C273AF4 /* Frameworks */ = { 128 | isa = PBXGroup; 129 | children = ( 130 | ); 131 | name = Frameworks; 132 | sourceTree = ""; 133 | }; 134 | 21A9B13A0EC15A4DAFA2EB570660D6C3 /* Targets Support Files */ = { 135 | isa = PBXGroup; 136 | children = ( 137 | 49E531ADB8E5160B3B5A0F136D351C43 /* Pods-MSNotificationProtectorDEMO */, 138 | 9B0E2785275B9712FCA4B0B9C3B6DFE4 /* Pods-MSNotificationProtectorDEMOTests */, 139 | A63A5EEDD20F950B9EE3B559D6B797E7 /* Pods-MSNotificationProtectorDEMOUITests */, 140 | ); 141 | name = "Targets Support Files"; 142 | sourceTree = ""; 143 | }; 144 | 49E531ADB8E5160B3B5A0F136D351C43 /* Pods-MSNotificationProtectorDEMO */ = { 145 | isa = PBXGroup; 146 | children = ( 147 | 4DE16B1FA83726D22C4980118DE95002 /* Pods-MSNotificationProtectorDEMO-acknowledgements.markdown */, 148 | 955BA03F36FD6A8D207B5DE98FDF0933 /* Pods-MSNotificationProtectorDEMO-acknowledgements.plist */, 149 | 65E32E60907DF3E3655FC4362965361E /* Pods-MSNotificationProtectorDEMO-dummy.m */, 150 | 6029ED98E7E1EFAC4B9689FB42117822 /* Pods-MSNotificationProtectorDEMO-frameworks.sh */, 151 | E35535C8BFFD97D671034E95A445188F /* Pods-MSNotificationProtectorDEMO-resources.sh */, 152 | 7DB1F83DD97C941B8C0E7F5DB9FA30A7 /* Pods-MSNotificationProtectorDEMO.debug.xcconfig */, 153 | BEA86580B16783E87ACCDA7570BF7E9C /* Pods-MSNotificationProtectorDEMO.release.xcconfig */, 154 | ); 155 | name = "Pods-MSNotificationProtectorDEMO"; 156 | path = "Target Support Files/Pods-MSNotificationProtectorDEMO"; 157 | sourceTree = ""; 158 | }; 159 | 7DB346D0F39D3F0E887471402A8071AB = { 160 | isa = PBXGroup; 161 | children = ( 162 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, 163 | 0F8D2E47FE03D3B91B51069F7C273AF4 /* Frameworks */, 164 | A119BCC7C94E908F8A95C5371E73E993 /* Pods */, 165 | ACB36721CD974D450D2B8794070624B2 /* Products */, 166 | 21A9B13A0EC15A4DAFA2EB570660D6C3 /* Targets Support Files */, 167 | ); 168 | sourceTree = ""; 169 | }; 170 | 9B0E2785275B9712FCA4B0B9C3B6DFE4 /* Pods-MSNotificationProtectorDEMOTests */ = { 171 | isa = PBXGroup; 172 | children = ( 173 | 8D30A2DD21DE8CA050876FFAF071A85D /* Pods-MSNotificationProtectorDEMOTests-acknowledgements.markdown */, 174 | 3141602CCD38F0F74425BF9C02A49934 /* Pods-MSNotificationProtectorDEMOTests-acknowledgements.plist */, 175 | CA2C37CAB9A27779B396CA3E60BCD716 /* Pods-MSNotificationProtectorDEMOTests-dummy.m */, 176 | 0A3D9483D970F4F95162561A510C1219 /* Pods-MSNotificationProtectorDEMOTests-frameworks.sh */, 177 | BC6ED6E5F172438C3E62FF338DE36A79 /* Pods-MSNotificationProtectorDEMOTests-resources.sh */, 178 | B477E8420560DB2DB01F2196176CC641 /* Pods-MSNotificationProtectorDEMOTests.debug.xcconfig */, 179 | C196A13068EC3B207B1A7DBB37BCDE09 /* Pods-MSNotificationProtectorDEMOTests.release.xcconfig */, 180 | ); 181 | name = "Pods-MSNotificationProtectorDEMOTests"; 182 | path = "Target Support Files/Pods-MSNotificationProtectorDEMOTests"; 183 | sourceTree = ""; 184 | }; 185 | A0FA3608A681DC5E85740D1401CC7F36 /* MSNotificationProtector */ = { 186 | isa = PBXGroup; 187 | children = ( 188 | 136EB7E38FC684B3CCA5BF22DBF00343 /* MSMonitorObject.h */, 189 | C6C801850FF6ECE9DCE18C1C99373111 /* MSMonitorObject.m */, 190 | 14A718EA1D120FB0A87725969C01DA87 /* NSNotificationCenter+MSSafeProtect.h */, 191 | 57150CF2871044E011D193729DBEB0FD /* NSNotificationCenter+MSSafeProtect.m */, 192 | D52467A82C86A5615943AEC3436796ED /* NSObject+MSSwizzle.h */, 193 | 7E22BBCCEB05E4C7D761D5A1704B1627 /* NSObject+MSSwizzle.m */, 194 | 0911F9EBAE456FB876C430D0A73DE6C8 /* Support Files */, 195 | ); 196 | path = MSNotificationProtector; 197 | sourceTree = ""; 198 | }; 199 | A119BCC7C94E908F8A95C5371E73E993 /* Pods */ = { 200 | isa = PBXGroup; 201 | children = ( 202 | A0FA3608A681DC5E85740D1401CC7F36 /* MSNotificationProtector */, 203 | ); 204 | name = Pods; 205 | sourceTree = ""; 206 | }; 207 | A63A5EEDD20F950B9EE3B559D6B797E7 /* Pods-MSNotificationProtectorDEMOUITests */ = { 208 | isa = PBXGroup; 209 | children = ( 210 | 5A97C55B4AA45D1974BEA7E34587F644 /* Pods-MSNotificationProtectorDEMOUITests-acknowledgements.markdown */, 211 | 850004EB6AECBA1A24CBB8A3667DDF6A /* Pods-MSNotificationProtectorDEMOUITests-acknowledgements.plist */, 212 | AA4B875822E58CABAD88BF19F1EE26F7 /* Pods-MSNotificationProtectorDEMOUITests-dummy.m */, 213 | 6ACDDD8A81A12FB716EDDC792E9E71CA /* Pods-MSNotificationProtectorDEMOUITests-frameworks.sh */, 214 | 602D16D8C84277569F3427E2662DD4BE /* Pods-MSNotificationProtectorDEMOUITests-resources.sh */, 215 | 82F6220BF64CD0C405763DF2BF25B3B9 /* Pods-MSNotificationProtectorDEMOUITests.debug.xcconfig */, 216 | 4DBC9FD9861C8F0C260C1FB0EECCB298 /* Pods-MSNotificationProtectorDEMOUITests.release.xcconfig */, 217 | ); 218 | name = "Pods-MSNotificationProtectorDEMOUITests"; 219 | path = "Target Support Files/Pods-MSNotificationProtectorDEMOUITests"; 220 | sourceTree = ""; 221 | }; 222 | ACB36721CD974D450D2B8794070624B2 /* Products */ = { 223 | isa = PBXGroup; 224 | children = ( 225 | 702D3BD7ACBCB8E8784A620C99A2F518 /* libMSNotificationProtector.a */, 226 | 3CA9A39B6DD97186CE5AA436480F2F9B /* libPods-MSNotificationProtectorDEMO.a */, 227 | 02F2BB831AA09D4292A355662DF12EF1 /* libPods-MSNotificationProtectorDEMOTests.a */, 228 | 0587C2754EB440B122663D4C19E1EC52 /* libPods-MSNotificationProtectorDEMOUITests.a */, 229 | ); 230 | name = Products; 231 | sourceTree = ""; 232 | }; 233 | /* End PBXGroup section */ 234 | 235 | /* Begin PBXHeadersBuildPhase section */ 236 | 2E761A4BDDBB88BB367E082500854F3D /* Headers */ = { 237 | isa = PBXHeadersBuildPhase; 238 | buildActionMask = 2147483647; 239 | files = ( 240 | 81E105ED03629F3A20B6764B90DE3C93 /* MSMonitorObject.h in Headers */, 241 | F6AE250428E4C3DA00A06A9D25F2A369 /* NSNotificationCenter+MSSafeProtect.h in Headers */, 242 | 26BF55902E25BFD1B0026C20B5D9B156 /* NSObject+MSSwizzle.h in Headers */, 243 | ); 244 | runOnlyForDeploymentPostprocessing = 0; 245 | }; 246 | 3F650ECE5C4B002176983050E8F34D09 /* Headers */ = { 247 | isa = PBXHeadersBuildPhase; 248 | buildActionMask = 2147483647; 249 | files = ( 250 | ); 251 | runOnlyForDeploymentPostprocessing = 0; 252 | }; 253 | 40732547F92F2B7C0625F8BFB65B00E4 /* Headers */ = { 254 | isa = PBXHeadersBuildPhase; 255 | buildActionMask = 2147483647; 256 | files = ( 257 | ); 258 | runOnlyForDeploymentPostprocessing = 0; 259 | }; 260 | CEB96A00C7637DF116F992C23D5A1B80 /* Headers */ = { 261 | isa = PBXHeadersBuildPhase; 262 | buildActionMask = 2147483647; 263 | files = ( 264 | ); 265 | runOnlyForDeploymentPostprocessing = 0; 266 | }; 267 | /* End PBXHeadersBuildPhase section */ 268 | 269 | /* Begin PBXNativeTarget section */ 270 | 160DEB9B0589C004400281C712C5D46D /* MSNotificationProtector */ = { 271 | isa = PBXNativeTarget; 272 | buildConfigurationList = FB39FDAFA07D7629F4A2D2116E718C7E /* Build configuration list for PBXNativeTarget "MSNotificationProtector" */; 273 | buildPhases = ( 274 | 2E761A4BDDBB88BB367E082500854F3D /* Headers */, 275 | E7C2619419A3FF9FCEB00844F2D52A7A /* Sources */, 276 | 67C96F3F5F17462E8BD30DE28213B605 /* Frameworks */, 277 | ); 278 | buildRules = ( 279 | ); 280 | dependencies = ( 281 | ); 282 | name = MSNotificationProtector; 283 | productName = MSNotificationProtector; 284 | productReference = 702D3BD7ACBCB8E8784A620C99A2F518 /* libMSNotificationProtector.a */; 285 | productType = "com.apple.product-type.library.static"; 286 | }; 287 | 84121C50F5DA2190CF264036694C6461 /* Pods-MSNotificationProtectorDEMOTests */ = { 288 | isa = PBXNativeTarget; 289 | buildConfigurationList = 6246432DDD729C9FE7D4B0946AA17BC9 /* Build configuration list for PBXNativeTarget "Pods-MSNotificationProtectorDEMOTests" */; 290 | buildPhases = ( 291 | CEB96A00C7637DF116F992C23D5A1B80 /* Headers */, 292 | 6A9FE8FE26CBCAFBDFCB05A532927523 /* Sources */, 293 | 551FBD30D96808410D45DE34B2FE45F9 /* Frameworks */, 294 | ); 295 | buildRules = ( 296 | ); 297 | dependencies = ( 298 | 7E1EA64EC7995A3959ABD8F242CDF13B /* PBXTargetDependency */, 299 | ); 300 | name = "Pods-MSNotificationProtectorDEMOTests"; 301 | productName = "Pods-MSNotificationProtectorDEMOTests"; 302 | productReference = 02F2BB831AA09D4292A355662DF12EF1 /* libPods-MSNotificationProtectorDEMOTests.a */; 303 | productType = "com.apple.product-type.library.static"; 304 | }; 305 | C4D46564762C2B55E347963D9C05521D /* Pods-MSNotificationProtectorDEMO */ = { 306 | isa = PBXNativeTarget; 307 | buildConfigurationList = 8659B841B1C05ED8D96DA7EC37C5DED3 /* Build configuration list for PBXNativeTarget "Pods-MSNotificationProtectorDEMO" */; 308 | buildPhases = ( 309 | 40732547F92F2B7C0625F8BFB65B00E4 /* Headers */, 310 | 56E03AD8A7DB42D23FE0B133B3432D3C /* Sources */, 311 | 5F3A488343B78FB105088FACF536AFA4 /* Frameworks */, 312 | ); 313 | buildRules = ( 314 | ); 315 | dependencies = ( 316 | 19904C00C663AA08E8515C3A9F323322 /* PBXTargetDependency */, 317 | ); 318 | name = "Pods-MSNotificationProtectorDEMO"; 319 | productName = "Pods-MSNotificationProtectorDEMO"; 320 | productReference = 3CA9A39B6DD97186CE5AA436480F2F9B /* libPods-MSNotificationProtectorDEMO.a */; 321 | productType = "com.apple.product-type.library.static"; 322 | }; 323 | F62B33331362AED74C10D772B686F8D7 /* Pods-MSNotificationProtectorDEMOUITests */ = { 324 | isa = PBXNativeTarget; 325 | buildConfigurationList = 573354A77D6B1A30D01EFB8EAC7929EB /* Build configuration list for PBXNativeTarget "Pods-MSNotificationProtectorDEMOUITests" */; 326 | buildPhases = ( 327 | 3F650ECE5C4B002176983050E8F34D09 /* Headers */, 328 | B850A50FEB9F430B6D528CBDDCBE98D6 /* Sources */, 329 | 66AB82F5B73931A728C0BAEE664C4BF9 /* Frameworks */, 330 | ); 331 | buildRules = ( 332 | ); 333 | dependencies = ( 334 | 6432BECFD5D7381DC210000B253B830C /* PBXTargetDependency */, 335 | ); 336 | name = "Pods-MSNotificationProtectorDEMOUITests"; 337 | productName = "Pods-MSNotificationProtectorDEMOUITests"; 338 | productReference = 0587C2754EB440B122663D4C19E1EC52 /* libPods-MSNotificationProtectorDEMOUITests.a */; 339 | productType = "com.apple.product-type.library.static"; 340 | }; 341 | /* End PBXNativeTarget section */ 342 | 343 | /* Begin PBXProject section */ 344 | D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { 345 | isa = PBXProject; 346 | attributes = { 347 | LastSwiftUpdateCheck = 0930; 348 | LastUpgradeCheck = 1130; 349 | }; 350 | buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; 351 | compatibilityVersion = "Xcode 3.2"; 352 | developmentRegion = en; 353 | hasScannedForEncodings = 0; 354 | knownRegions = ( 355 | en, 356 | Base, 357 | ); 358 | mainGroup = 7DB346D0F39D3F0E887471402A8071AB; 359 | productRefGroup = ACB36721CD974D450D2B8794070624B2 /* Products */; 360 | projectDirPath = ""; 361 | projectRoot = ""; 362 | targets = ( 363 | 160DEB9B0589C004400281C712C5D46D /* MSNotificationProtector */, 364 | C4D46564762C2B55E347963D9C05521D /* Pods-MSNotificationProtectorDEMO */, 365 | 84121C50F5DA2190CF264036694C6461 /* Pods-MSNotificationProtectorDEMOTests */, 366 | F62B33331362AED74C10D772B686F8D7 /* Pods-MSNotificationProtectorDEMOUITests */, 367 | ); 368 | }; 369 | /* End PBXProject section */ 370 | 371 | /* Begin PBXSourcesBuildPhase section */ 372 | 56E03AD8A7DB42D23FE0B133B3432D3C /* Sources */ = { 373 | isa = PBXSourcesBuildPhase; 374 | buildActionMask = 2147483647; 375 | files = ( 376 | E0066F292F35FE324F4FDE9981760CB4 /* Pods-MSNotificationProtectorDEMO-dummy.m in Sources */, 377 | ); 378 | runOnlyForDeploymentPostprocessing = 0; 379 | }; 380 | 6A9FE8FE26CBCAFBDFCB05A532927523 /* Sources */ = { 381 | isa = PBXSourcesBuildPhase; 382 | buildActionMask = 2147483647; 383 | files = ( 384 | 743B598DBBB4A9E2DA64A6019C5BA900 /* Pods-MSNotificationProtectorDEMOTests-dummy.m in Sources */, 385 | ); 386 | runOnlyForDeploymentPostprocessing = 0; 387 | }; 388 | B850A50FEB9F430B6D528CBDDCBE98D6 /* Sources */ = { 389 | isa = PBXSourcesBuildPhase; 390 | buildActionMask = 2147483647; 391 | files = ( 392 | 50FABF1ECF9F182D232E2C929078C7FF /* Pods-MSNotificationProtectorDEMOUITests-dummy.m in Sources */, 393 | ); 394 | runOnlyForDeploymentPostprocessing = 0; 395 | }; 396 | E7C2619419A3FF9FCEB00844F2D52A7A /* Sources */ = { 397 | isa = PBXSourcesBuildPhase; 398 | buildActionMask = 2147483647; 399 | files = ( 400 | 49E3C814F35A0CC9F15A1B162710A556 /* MSMonitorObject.m in Sources */, 401 | B87E93444917B9DEBE7B1C1B8E6404EE /* MSNotificationProtector-dummy.m in Sources */, 402 | 55E88B777F1E55BA2EEE2BF6BE0BB972 /* NSNotificationCenter+MSSafeProtect.m in Sources */, 403 | AF419E4087E7B0EAA3EF170E54108A91 /* NSObject+MSSwizzle.m in Sources */, 404 | ); 405 | runOnlyForDeploymentPostprocessing = 0; 406 | }; 407 | /* End PBXSourcesBuildPhase section */ 408 | 409 | /* Begin PBXTargetDependency section */ 410 | 19904C00C663AA08E8515C3A9F323322 /* PBXTargetDependency */ = { 411 | isa = PBXTargetDependency; 412 | name = MSNotificationProtector; 413 | target = 160DEB9B0589C004400281C712C5D46D /* MSNotificationProtector */; 414 | targetProxy = 5201AFAF95EF3F9A65873470BF46CEC1 /* PBXContainerItemProxy */; 415 | }; 416 | 6432BECFD5D7381DC210000B253B830C /* PBXTargetDependency */ = { 417 | isa = PBXTargetDependency; 418 | name = "Pods-MSNotificationProtectorDEMO"; 419 | target = C4D46564762C2B55E347963D9C05521D /* Pods-MSNotificationProtectorDEMO */; 420 | targetProxy = 5815AC30FEBB92B3E87AB1D3CDAA1E28 /* PBXContainerItemProxy */; 421 | }; 422 | 7E1EA64EC7995A3959ABD8F242CDF13B /* PBXTargetDependency */ = { 423 | isa = PBXTargetDependency; 424 | name = "Pods-MSNotificationProtectorDEMO"; 425 | target = C4D46564762C2B55E347963D9C05521D /* Pods-MSNotificationProtectorDEMO */; 426 | targetProxy = 63BD3A3F7FA556E8EFA2CF18D2C887A0 /* PBXContainerItemProxy */; 427 | }; 428 | /* End PBXTargetDependency section */ 429 | 430 | /* Begin XCBuildConfiguration section */ 431 | 103DD17A9DECEFA4FF1AD045480360AE /* Debug */ = { 432 | isa = XCBuildConfiguration; 433 | baseConfigurationReference = B477E8420560DB2DB01F2196176CC641 /* Pods-MSNotificationProtectorDEMOTests.debug.xcconfig */; 434 | buildSettings = { 435 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 436 | CODE_SIGN_IDENTITY = "iPhone Developer"; 437 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 438 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 439 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 440 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 441 | MACH_O_TYPE = staticlib; 442 | OTHER_LDFLAGS = ""; 443 | OTHER_LIBTOOLFLAGS = ""; 444 | PODS_ROOT = "$(SRCROOT)"; 445 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 446 | SDKROOT = iphoneos; 447 | SKIP_INSTALL = YES; 448 | TARGETED_DEVICE_FAMILY = "1,2"; 449 | }; 450 | name = Debug; 451 | }; 452 | 1ECBEC023E93CE506E78BD7004FEF8A5 /* Release */ = { 453 | isa = XCBuildConfiguration; 454 | baseConfigurationReference = BEA86580B16783E87ACCDA7570BF7E9C /* Pods-MSNotificationProtectorDEMO.release.xcconfig */; 455 | buildSettings = { 456 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 457 | CODE_SIGN_IDENTITY = "iPhone Developer"; 458 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 459 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 460 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 461 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 462 | MACH_O_TYPE = staticlib; 463 | OTHER_LDFLAGS = ""; 464 | OTHER_LIBTOOLFLAGS = ""; 465 | PODS_ROOT = "$(SRCROOT)"; 466 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 467 | SDKROOT = iphoneos; 468 | SKIP_INSTALL = YES; 469 | TARGETED_DEVICE_FAMILY = "1,2"; 470 | VALIDATE_PRODUCT = YES; 471 | }; 472 | name = Release; 473 | }; 474 | 2560282F903A2CA382DD9AAAEDBEA0DA /* Release */ = { 475 | isa = XCBuildConfiguration; 476 | baseConfigurationReference = 6275ED2DB5913AB908DA6A105E487702 /* MSNotificationProtector.xcconfig */; 477 | buildSettings = { 478 | CLANG_ENABLE_OBJC_WEAK = NO; 479 | CODE_SIGN_IDENTITY = "iPhone Developer"; 480 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 481 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 482 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 483 | GCC_PREFIX_HEADER = "Target Support Files/MSNotificationProtector/MSNotificationProtector-prefix.pch"; 484 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 485 | OTHER_LDFLAGS = ""; 486 | OTHER_LIBTOOLFLAGS = ""; 487 | PRIVATE_HEADERS_FOLDER_PATH = ""; 488 | PRODUCT_MODULE_NAME = MSNotificationProtector; 489 | PRODUCT_NAME = MSNotificationProtector; 490 | PUBLIC_HEADERS_FOLDER_PATH = ""; 491 | SDKROOT = iphoneos; 492 | SKIP_INSTALL = YES; 493 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 494 | TARGETED_DEVICE_FAMILY = "1,2"; 495 | VALIDATE_PRODUCT = YES; 496 | }; 497 | name = Release; 498 | }; 499 | 319FF12BA5FBD2D356D147009D478622 /* Debug */ = { 500 | isa = XCBuildConfiguration; 501 | baseConfigurationReference = 6275ED2DB5913AB908DA6A105E487702 /* MSNotificationProtector.xcconfig */; 502 | buildSettings = { 503 | CLANG_ENABLE_OBJC_WEAK = NO; 504 | CODE_SIGN_IDENTITY = "iPhone Developer"; 505 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 506 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 507 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 508 | GCC_PREFIX_HEADER = "Target Support Files/MSNotificationProtector/MSNotificationProtector-prefix.pch"; 509 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 510 | OTHER_LDFLAGS = ""; 511 | OTHER_LIBTOOLFLAGS = ""; 512 | PRIVATE_HEADERS_FOLDER_PATH = ""; 513 | PRODUCT_MODULE_NAME = MSNotificationProtector; 514 | PRODUCT_NAME = MSNotificationProtector; 515 | PUBLIC_HEADERS_FOLDER_PATH = ""; 516 | SDKROOT = iphoneos; 517 | SKIP_INSTALL = YES; 518 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 519 | TARGETED_DEVICE_FAMILY = "1,2"; 520 | }; 521 | name = Debug; 522 | }; 523 | 47C945C01946C5C7C3E581B8DC3EC4DF /* Debug */ = { 524 | isa = XCBuildConfiguration; 525 | baseConfigurationReference = 82F6220BF64CD0C405763DF2BF25B3B9 /* Pods-MSNotificationProtectorDEMOUITests.debug.xcconfig */; 526 | buildSettings = { 527 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 528 | CODE_SIGN_IDENTITY = "iPhone Developer"; 529 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 530 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 531 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 532 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 533 | MACH_O_TYPE = staticlib; 534 | OTHER_LDFLAGS = ""; 535 | OTHER_LIBTOOLFLAGS = ""; 536 | PODS_ROOT = "$(SRCROOT)"; 537 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 538 | SDKROOT = iphoneos; 539 | SKIP_INSTALL = YES; 540 | TARGETED_DEVICE_FAMILY = "1,2"; 541 | }; 542 | name = Debug; 543 | }; 544 | 4941989F01E74B286CCEF1FD59F4D7AB /* Release */ = { 545 | isa = XCBuildConfiguration; 546 | baseConfigurationReference = C196A13068EC3B207B1A7DBB37BCDE09 /* Pods-MSNotificationProtectorDEMOTests.release.xcconfig */; 547 | buildSettings = { 548 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 549 | CODE_SIGN_IDENTITY = "iPhone Developer"; 550 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 551 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 552 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 553 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 554 | MACH_O_TYPE = staticlib; 555 | OTHER_LDFLAGS = ""; 556 | OTHER_LIBTOOLFLAGS = ""; 557 | PODS_ROOT = "$(SRCROOT)"; 558 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 559 | SDKROOT = iphoneos; 560 | SKIP_INSTALL = YES; 561 | TARGETED_DEVICE_FAMILY = "1,2"; 562 | VALIDATE_PRODUCT = YES; 563 | }; 564 | name = Release; 565 | }; 566 | 77B01B0833ADCFEAFE5D13B27B9694EF /* Release */ = { 567 | isa = XCBuildConfiguration; 568 | baseConfigurationReference = 4DBC9FD9861C8F0C260C1FB0EECCB298 /* Pods-MSNotificationProtectorDEMOUITests.release.xcconfig */; 569 | buildSettings = { 570 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 571 | CODE_SIGN_IDENTITY = "iPhone Developer"; 572 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 573 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 574 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 575 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 576 | MACH_O_TYPE = staticlib; 577 | OTHER_LDFLAGS = ""; 578 | OTHER_LIBTOOLFLAGS = ""; 579 | PODS_ROOT = "$(SRCROOT)"; 580 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 581 | SDKROOT = iphoneos; 582 | SKIP_INSTALL = YES; 583 | TARGETED_DEVICE_FAMILY = "1,2"; 584 | VALIDATE_PRODUCT = YES; 585 | }; 586 | name = Release; 587 | }; 588 | 96434B6C8FF320C976A10DAD7174A4BB /* Release */ = { 589 | isa = XCBuildConfiguration; 590 | buildSettings = { 591 | ALWAYS_SEARCH_USER_PATHS = NO; 592 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 593 | CLANG_ANALYZER_NONNULL = YES; 594 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 595 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 596 | CLANG_CXX_LIBRARY = "libc++"; 597 | CLANG_ENABLE_MODULES = YES; 598 | CLANG_ENABLE_OBJC_ARC = YES; 599 | CLANG_ENABLE_OBJC_WEAK = YES; 600 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 601 | CLANG_WARN_BOOL_CONVERSION = YES; 602 | CLANG_WARN_COMMA = YES; 603 | CLANG_WARN_CONSTANT_CONVERSION = YES; 604 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 605 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 606 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 607 | CLANG_WARN_EMPTY_BODY = YES; 608 | CLANG_WARN_ENUM_CONVERSION = YES; 609 | CLANG_WARN_INFINITE_RECURSION = YES; 610 | CLANG_WARN_INT_CONVERSION = YES; 611 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 612 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 613 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 614 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 615 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 616 | CLANG_WARN_STRICT_PROTOTYPES = YES; 617 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 618 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 619 | CLANG_WARN_UNREACHABLE_CODE = YES; 620 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 621 | CODE_SIGNING_ALLOWED = NO; 622 | CODE_SIGNING_REQUIRED = NO; 623 | COPY_PHASE_STRIP = NO; 624 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 625 | ENABLE_NS_ASSERTIONS = NO; 626 | ENABLE_STRICT_OBJC_MSGSEND = YES; 627 | GCC_C_LANGUAGE_STANDARD = gnu11; 628 | GCC_NO_COMMON_BLOCKS = YES; 629 | GCC_PREPROCESSOR_DEFINITIONS = ( 630 | "POD_CONFIGURATION_RELEASE=1", 631 | "$(inherited)", 632 | ); 633 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 634 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 635 | GCC_WARN_UNDECLARED_SELECTOR = YES; 636 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 637 | GCC_WARN_UNUSED_FUNCTION = YES; 638 | GCC_WARN_UNUSED_VARIABLE = YES; 639 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 640 | MTL_ENABLE_DEBUG_INFO = NO; 641 | MTL_FAST_MATH = YES; 642 | PRODUCT_NAME = "$(TARGET_NAME)"; 643 | STRIP_INSTALLED_PRODUCT = NO; 644 | SYMROOT = "${SRCROOT}/../build"; 645 | }; 646 | name = Release; 647 | }; 648 | AF657C619391845316A8F64997294701 /* Debug */ = { 649 | isa = XCBuildConfiguration; 650 | baseConfigurationReference = 7DB1F83DD97C941B8C0E7F5DB9FA30A7 /* Pods-MSNotificationProtectorDEMO.debug.xcconfig */; 651 | buildSettings = { 652 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 653 | CODE_SIGN_IDENTITY = "iPhone Developer"; 654 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 655 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 656 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 657 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 658 | MACH_O_TYPE = staticlib; 659 | OTHER_LDFLAGS = ""; 660 | OTHER_LIBTOOLFLAGS = ""; 661 | PODS_ROOT = "$(SRCROOT)"; 662 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 663 | SDKROOT = iphoneos; 664 | SKIP_INSTALL = YES; 665 | TARGETED_DEVICE_FAMILY = "1,2"; 666 | }; 667 | name = Debug; 668 | }; 669 | D11C82AF2204B41B80412B8DC9C1D652 /* Debug */ = { 670 | isa = XCBuildConfiguration; 671 | buildSettings = { 672 | ALWAYS_SEARCH_USER_PATHS = NO; 673 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 674 | CLANG_ANALYZER_NONNULL = YES; 675 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 676 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 677 | CLANG_CXX_LIBRARY = "libc++"; 678 | CLANG_ENABLE_MODULES = YES; 679 | CLANG_ENABLE_OBJC_ARC = YES; 680 | CLANG_ENABLE_OBJC_WEAK = YES; 681 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 682 | CLANG_WARN_BOOL_CONVERSION = YES; 683 | CLANG_WARN_COMMA = YES; 684 | CLANG_WARN_CONSTANT_CONVERSION = YES; 685 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 686 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 687 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 688 | CLANG_WARN_EMPTY_BODY = YES; 689 | CLANG_WARN_ENUM_CONVERSION = YES; 690 | CLANG_WARN_INFINITE_RECURSION = YES; 691 | CLANG_WARN_INT_CONVERSION = YES; 692 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 693 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 694 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 695 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 696 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 697 | CLANG_WARN_STRICT_PROTOTYPES = YES; 698 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 699 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 700 | CLANG_WARN_UNREACHABLE_CODE = YES; 701 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 702 | CODE_SIGNING_ALLOWED = NO; 703 | CODE_SIGNING_REQUIRED = NO; 704 | COPY_PHASE_STRIP = NO; 705 | DEBUG_INFORMATION_FORMAT = dwarf; 706 | ENABLE_STRICT_OBJC_MSGSEND = YES; 707 | ENABLE_TESTABILITY = YES; 708 | GCC_C_LANGUAGE_STANDARD = gnu11; 709 | GCC_DYNAMIC_NO_PIC = NO; 710 | GCC_NO_COMMON_BLOCKS = YES; 711 | GCC_OPTIMIZATION_LEVEL = 0; 712 | GCC_PREPROCESSOR_DEFINITIONS = ( 713 | "POD_CONFIGURATION_DEBUG=1", 714 | "DEBUG=1", 715 | "$(inherited)", 716 | ); 717 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 718 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 719 | GCC_WARN_UNDECLARED_SELECTOR = YES; 720 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 721 | GCC_WARN_UNUSED_FUNCTION = YES; 722 | GCC_WARN_UNUSED_VARIABLE = YES; 723 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 724 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 725 | MTL_FAST_MATH = YES; 726 | ONLY_ACTIVE_ARCH = YES; 727 | PRODUCT_NAME = "$(TARGET_NAME)"; 728 | STRIP_INSTALLED_PRODUCT = NO; 729 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 730 | SYMROOT = "${SRCROOT}/../build"; 731 | }; 732 | name = Debug; 733 | }; 734 | /* End XCBuildConfiguration section */ 735 | 736 | /* Begin XCConfigurationList section */ 737 | 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { 738 | isa = XCConfigurationList; 739 | buildConfigurations = ( 740 | D11C82AF2204B41B80412B8DC9C1D652 /* Debug */, 741 | 96434B6C8FF320C976A10DAD7174A4BB /* Release */, 742 | ); 743 | defaultConfigurationIsVisible = 0; 744 | defaultConfigurationName = Release; 745 | }; 746 | 573354A77D6B1A30D01EFB8EAC7929EB /* Build configuration list for PBXNativeTarget "Pods-MSNotificationProtectorDEMOUITests" */ = { 747 | isa = XCConfigurationList; 748 | buildConfigurations = ( 749 | 47C945C01946C5C7C3E581B8DC3EC4DF /* Debug */, 750 | 77B01B0833ADCFEAFE5D13B27B9694EF /* Release */, 751 | ); 752 | defaultConfigurationIsVisible = 0; 753 | defaultConfigurationName = Release; 754 | }; 755 | 6246432DDD729C9FE7D4B0946AA17BC9 /* Build configuration list for PBXNativeTarget "Pods-MSNotificationProtectorDEMOTests" */ = { 756 | isa = XCConfigurationList; 757 | buildConfigurations = ( 758 | 103DD17A9DECEFA4FF1AD045480360AE /* Debug */, 759 | 4941989F01E74B286CCEF1FD59F4D7AB /* Release */, 760 | ); 761 | defaultConfigurationIsVisible = 0; 762 | defaultConfigurationName = Release; 763 | }; 764 | 8659B841B1C05ED8D96DA7EC37C5DED3 /* Build configuration list for PBXNativeTarget "Pods-MSNotificationProtectorDEMO" */ = { 765 | isa = XCConfigurationList; 766 | buildConfigurations = ( 767 | AF657C619391845316A8F64997294701 /* Debug */, 768 | 1ECBEC023E93CE506E78BD7004FEF8A5 /* Release */, 769 | ); 770 | defaultConfigurationIsVisible = 0; 771 | defaultConfigurationName = Release; 772 | }; 773 | FB39FDAFA07D7629F4A2D2116E718C7E /* Build configuration list for PBXNativeTarget "MSNotificationProtector" */ = { 774 | isa = XCConfigurationList; 775 | buildConfigurations = ( 776 | 319FF12BA5FBD2D356D147009D478622 /* Debug */, 777 | 2560282F903A2CA382DD9AAAEDBEA0DA /* Release */, 778 | ); 779 | defaultConfigurationIsVisible = 0; 780 | defaultConfigurationName = Release; 781 | }; 782 | /* End XCConfigurationList section */ 783 | }; 784 | rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 785 | } 786 | -------------------------------------------------------------------------------- /Pods/Target Support Files/MSNotificationProtector/MSNotificationProtector-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_MSNotificationProtector : NSObject 3 | @end 4 | @implementation PodsDummy_MSNotificationProtector 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/MSNotificationProtector/MSNotificationProtector-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/MSNotificationProtector/MSNotificationProtector.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MSNotificationProtector 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/MSNotificationProtector" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MSNotificationProtector" 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/MSNotificationProtector 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-MSNotificationProtectorDEMO/Pods-MSNotificationProtectorDEMO-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## MSNotificationProtector 5 | 6 | MIT License 7 | 8 | Copyright (c) 2018 9 | 10 | Permission is hereby granted, free of charge, to any person obtaining a copy 11 | of this software and associated documentation files (the "Software"), to deal 12 | in the Software without restriction, including without limitation the rights 13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | copies of the Software, and to permit persons to whom the Software is 15 | furnished to do so, subject to the following conditions: 16 | 17 | The above copyright notice and this permission notice shall be included in all 18 | copies or substantial portions of the Software. 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 26 | SOFTWARE. 27 | 28 | Generated by CocoaPods - https://cocoapods.org 29 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-MSNotificationProtectorDEMO/Pods-MSNotificationProtectorDEMO-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 | MIT License 18 | 19 | Copyright (c) 2018 20 | 21 | Permission is hereby granted, free of charge, to any person obtaining a copy 22 | of this software and associated documentation files (the "Software"), to deal 23 | in the Software without restriction, including without limitation the rights 24 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 25 | copies of the Software, and to permit persons to whom the Software is 26 | furnished to do so, subject to the following conditions: 27 | 28 | The above copyright notice and this permission notice shall be included in all 29 | copies or substantial portions of the Software. 30 | 31 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 32 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 33 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 34 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 35 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 36 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 37 | SOFTWARE. 38 | 39 | License 40 | MIT 41 | Title 42 | MSNotificationProtector 43 | Type 44 | PSGroupSpecifier 45 | 46 | 47 | FooterText 48 | Generated by CocoaPods - https://cocoapods.org 49 | Title 50 | 51 | Type 52 | PSGroupSpecifier 53 | 54 | 55 | StringsTable 56 | Acknowledgements 57 | Title 58 | Acknowledgements 59 | 60 | 61 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-MSNotificationProtectorDEMO/Pods-MSNotificationProtectorDEMO-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_MSNotificationProtectorDEMO : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_MSNotificationProtectorDEMO 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-MSNotificationProtectorDEMO/Pods-MSNotificationProtectorDEMO-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then 7 | # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy 8 | # frameworks to, so exit 0 (signalling the script phase was successful). 9 | exit 0 10 | fi 11 | 12 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 13 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 14 | 15 | COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" 16 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 17 | 18 | # Used as a return value for each invocation of `strip_invalid_archs` function. 19 | STRIP_BINARY_RETVAL=0 20 | 21 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 22 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 23 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 24 | 25 | # Copies and strips a vendored framework 26 | install_framework() 27 | { 28 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 29 | local source="${BUILT_PRODUCTS_DIR}/$1" 30 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 31 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 32 | elif [ -r "$1" ]; then 33 | local source="$1" 34 | fi 35 | 36 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 37 | 38 | if [ -L "${source}" ]; then 39 | echo "Symlinked..." 40 | source="$(readlink "${source}")" 41 | fi 42 | 43 | # Use filter instead of exclude so missing patterns don't throw errors. 44 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 45 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 46 | 47 | local basename 48 | basename="$(basename -s .framework "$1")" 49 | binary="${destination}/${basename}.framework/${basename}" 50 | if ! [ -r "$binary" ]; then 51 | binary="${destination}/${basename}" 52 | fi 53 | 54 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 55 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 56 | strip_invalid_archs "$binary" 57 | fi 58 | 59 | # Resign the code if required by the build settings to avoid unstable apps 60 | code_sign_if_enabled "${destination}/$(basename "$1")" 61 | 62 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 63 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 64 | local swift_runtime_libs 65 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 66 | for lib in $swift_runtime_libs; do 67 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 68 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 69 | code_sign_if_enabled "${destination}/${lib}" 70 | done 71 | fi 72 | } 73 | 74 | # Copies and strips a vendored dSYM 75 | install_dsym() { 76 | local source="$1" 77 | if [ -r "$source" ]; then 78 | # Copy the dSYM into a the targets temp dir. 79 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" 80 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" 81 | 82 | local basename 83 | basename="$(basename -s .framework.dSYM "$source")" 84 | binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" 85 | 86 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 87 | if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then 88 | strip_invalid_archs "$binary" 89 | fi 90 | 91 | if [[ $STRIP_BINARY_RETVAL == 1 ]]; then 92 | # Move the stripped file into its final destination. 93 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" 94 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" 95 | else 96 | # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. 97 | touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" 98 | fi 99 | fi 100 | } 101 | 102 | # Signs a framework with the provided identity 103 | code_sign_if_enabled() { 104 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 105 | # Use the current code_sign_identitiy 106 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 107 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" 108 | 109 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 110 | code_sign_cmd="$code_sign_cmd &" 111 | fi 112 | echo "$code_sign_cmd" 113 | eval "$code_sign_cmd" 114 | fi 115 | } 116 | 117 | # Strip invalid architectures 118 | strip_invalid_archs() { 119 | binary="$1" 120 | # Get architectures for current target binary 121 | binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" 122 | # Intersect them with the architectures we are building for 123 | intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" 124 | # If there are no archs supported by this binary then warn the user 125 | if [[ -z "$intersected_archs" ]]; then 126 | echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." 127 | STRIP_BINARY_RETVAL=0 128 | return 129 | fi 130 | stripped="" 131 | for arch in $binary_archs; do 132 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then 133 | # Strip non-valid architectures in-place 134 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 135 | stripped="$stripped $arch" 136 | fi 137 | done 138 | if [[ "$stripped" ]]; then 139 | echo "Stripped $binary of architectures:$stripped" 140 | fi 141 | STRIP_BINARY_RETVAL=1 142 | } 143 | 144 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 145 | wait 146 | fi 147 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-MSNotificationProtectorDEMO/Pods-MSNotificationProtectorDEMO-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then 7 | # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy 8 | # resources to, so exit 0 (signalling the script phase was successful). 9 | exit 0 10 | fi 11 | 12 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 13 | 14 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 15 | > "$RESOURCES_TO_COPY" 16 | 17 | XCASSET_FILES=() 18 | 19 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 20 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 21 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 22 | 23 | case "${TARGETED_DEVICE_FAMILY:-}" in 24 | 1,2) 25 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 26 | ;; 27 | 1) 28 | TARGET_DEVICE_ARGS="--target-device iphone" 29 | ;; 30 | 2) 31 | TARGET_DEVICE_ARGS="--target-device ipad" 32 | ;; 33 | 3) 34 | TARGET_DEVICE_ARGS="--target-device tv" 35 | ;; 36 | 4) 37 | TARGET_DEVICE_ARGS="--target-device watch" 38 | ;; 39 | *) 40 | TARGET_DEVICE_ARGS="--target-device mac" 41 | ;; 42 | esac 43 | 44 | install_resource() 45 | { 46 | if [[ "$1" = /* ]] ; then 47 | RESOURCE_PATH="$1" 48 | else 49 | RESOURCE_PATH="${PODS_ROOT}/$1" 50 | fi 51 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 52 | cat << EOM 53 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 54 | EOM 55 | exit 1 56 | fi 57 | case $RESOURCE_PATH in 58 | *.storyboard) 59 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 60 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 61 | ;; 62 | *.xib) 63 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 64 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 65 | ;; 66 | *.framework) 67 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 68 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 69 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 70 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 71 | ;; 72 | *.xcdatamodel) 73 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true 74 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 75 | ;; 76 | *.xcdatamodeld) 77 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true 78 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 79 | ;; 80 | *.xcmappingmodel) 81 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true 82 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 83 | ;; 84 | *.xcassets) 85 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 86 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 87 | ;; 88 | *) 89 | echo "$RESOURCE_PATH" || true 90 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 91 | ;; 92 | esac 93 | } 94 | 95 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 96 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 97 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 98 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 99 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 100 | fi 101 | rm -f "$RESOURCES_TO_COPY" 102 | 103 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] 104 | then 105 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 106 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 107 | while read line; do 108 | if [[ $line != "${PODS_ROOT}*" ]]; then 109 | XCASSET_FILES+=("$line") 110 | fi 111 | done <<<"$OTHER_XCASSETS" 112 | 113 | if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then 114 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 115 | else 116 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist" 117 | fi 118 | fi 119 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-MSNotificationProtectorDEMO/Pods-MSNotificationProtectorDEMO.debug.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MSNotificationProtector" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/MSNotificationProtector" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/MSNotificationProtector" 5 | OTHER_LDFLAGS = $(inherited) -ObjC -l"MSNotificationProtector" 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-MSNotificationProtectorDEMO/Pods-MSNotificationProtectorDEMO.release.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MSNotificationProtector" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/MSNotificationProtector" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/MSNotificationProtector" 5 | OTHER_LDFLAGS = $(inherited) -ObjC -l"MSNotificationProtector" 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-MSNotificationProtectorDEMOTests/Pods-MSNotificationProtectorDEMOTests-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | Generated by CocoaPods - https://cocoapods.org 4 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-MSNotificationProtectorDEMOTests/Pods-MSNotificationProtectorDEMOTests-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 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-MSNotificationProtectorDEMOTests/Pods-MSNotificationProtectorDEMOTests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_MSNotificationProtectorDEMOTests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_MSNotificationProtectorDEMOTests 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-MSNotificationProtectorDEMOTests/Pods-MSNotificationProtectorDEMOTests-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then 7 | # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy 8 | # frameworks to, so exit 0 (signalling the script phase was successful). 9 | exit 0 10 | fi 11 | 12 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 13 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 14 | 15 | COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" 16 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 17 | 18 | # Used as a return value for each invocation of `strip_invalid_archs` function. 19 | STRIP_BINARY_RETVAL=0 20 | 21 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 22 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 23 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 24 | 25 | # Copies and strips a vendored framework 26 | install_framework() 27 | { 28 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 29 | local source="${BUILT_PRODUCTS_DIR}/$1" 30 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 31 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 32 | elif [ -r "$1" ]; then 33 | local source="$1" 34 | fi 35 | 36 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 37 | 38 | if [ -L "${source}" ]; then 39 | echo "Symlinked..." 40 | source="$(readlink "${source}")" 41 | fi 42 | 43 | # Use filter instead of exclude so missing patterns don't throw errors. 44 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 45 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 46 | 47 | local basename 48 | basename="$(basename -s .framework "$1")" 49 | binary="${destination}/${basename}.framework/${basename}" 50 | if ! [ -r "$binary" ]; then 51 | binary="${destination}/${basename}" 52 | fi 53 | 54 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 55 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 56 | strip_invalid_archs "$binary" 57 | fi 58 | 59 | # Resign the code if required by the build settings to avoid unstable apps 60 | code_sign_if_enabled "${destination}/$(basename "$1")" 61 | 62 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 63 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 64 | local swift_runtime_libs 65 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 66 | for lib in $swift_runtime_libs; do 67 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 68 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 69 | code_sign_if_enabled "${destination}/${lib}" 70 | done 71 | fi 72 | } 73 | 74 | # Copies and strips a vendored dSYM 75 | install_dsym() { 76 | local source="$1" 77 | if [ -r "$source" ]; then 78 | # Copy the dSYM into a the targets temp dir. 79 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" 80 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" 81 | 82 | local basename 83 | basename="$(basename -s .framework.dSYM "$source")" 84 | binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" 85 | 86 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 87 | if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then 88 | strip_invalid_archs "$binary" 89 | fi 90 | 91 | if [[ $STRIP_BINARY_RETVAL == 1 ]]; then 92 | # Move the stripped file into its final destination. 93 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" 94 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" 95 | else 96 | # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. 97 | touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" 98 | fi 99 | fi 100 | } 101 | 102 | # Signs a framework with the provided identity 103 | code_sign_if_enabled() { 104 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 105 | # Use the current code_sign_identitiy 106 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 107 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" 108 | 109 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 110 | code_sign_cmd="$code_sign_cmd &" 111 | fi 112 | echo "$code_sign_cmd" 113 | eval "$code_sign_cmd" 114 | fi 115 | } 116 | 117 | # Strip invalid architectures 118 | strip_invalid_archs() { 119 | binary="$1" 120 | # Get architectures for current target binary 121 | binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" 122 | # Intersect them with the architectures we are building for 123 | intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" 124 | # If there are no archs supported by this binary then warn the user 125 | if [[ -z "$intersected_archs" ]]; then 126 | echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." 127 | STRIP_BINARY_RETVAL=0 128 | return 129 | fi 130 | stripped="" 131 | for arch in $binary_archs; do 132 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then 133 | # Strip non-valid architectures in-place 134 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 135 | stripped="$stripped $arch" 136 | fi 137 | done 138 | if [[ "$stripped" ]]; then 139 | echo "Stripped $binary of architectures:$stripped" 140 | fi 141 | STRIP_BINARY_RETVAL=1 142 | } 143 | 144 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 145 | wait 146 | fi 147 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-MSNotificationProtectorDEMOTests/Pods-MSNotificationProtectorDEMOTests-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then 7 | # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy 8 | # resources to, so exit 0 (signalling the script phase was successful). 9 | exit 0 10 | fi 11 | 12 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 13 | 14 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 15 | > "$RESOURCES_TO_COPY" 16 | 17 | XCASSET_FILES=() 18 | 19 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 20 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 21 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 22 | 23 | case "${TARGETED_DEVICE_FAMILY:-}" in 24 | 1,2) 25 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 26 | ;; 27 | 1) 28 | TARGET_DEVICE_ARGS="--target-device iphone" 29 | ;; 30 | 2) 31 | TARGET_DEVICE_ARGS="--target-device ipad" 32 | ;; 33 | 3) 34 | TARGET_DEVICE_ARGS="--target-device tv" 35 | ;; 36 | 4) 37 | TARGET_DEVICE_ARGS="--target-device watch" 38 | ;; 39 | *) 40 | TARGET_DEVICE_ARGS="--target-device mac" 41 | ;; 42 | esac 43 | 44 | install_resource() 45 | { 46 | if [[ "$1" = /* ]] ; then 47 | RESOURCE_PATH="$1" 48 | else 49 | RESOURCE_PATH="${PODS_ROOT}/$1" 50 | fi 51 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 52 | cat << EOM 53 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 54 | EOM 55 | exit 1 56 | fi 57 | case $RESOURCE_PATH in 58 | *.storyboard) 59 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 60 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 61 | ;; 62 | *.xib) 63 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 64 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 65 | ;; 66 | *.framework) 67 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 68 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 69 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 70 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 71 | ;; 72 | *.xcdatamodel) 73 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true 74 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 75 | ;; 76 | *.xcdatamodeld) 77 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true 78 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 79 | ;; 80 | *.xcmappingmodel) 81 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true 82 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 83 | ;; 84 | *.xcassets) 85 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 86 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 87 | ;; 88 | *) 89 | echo "$RESOURCE_PATH" || true 90 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 91 | ;; 92 | esac 93 | } 94 | 95 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 96 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 97 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 98 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 99 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 100 | fi 101 | rm -f "$RESOURCES_TO_COPY" 102 | 103 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] 104 | then 105 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 106 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 107 | while read line; do 108 | if [[ $line != "${PODS_ROOT}*" ]]; then 109 | XCASSET_FILES+=("$line") 110 | fi 111 | done <<<"$OTHER_XCASSETS" 112 | 113 | if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then 114 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 115 | else 116 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist" 117 | fi 118 | fi 119 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-MSNotificationProtectorDEMOTests/Pods-MSNotificationProtectorDEMOTests.debug.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MSNotificationProtector" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/MSNotificationProtector" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/MSNotificationProtector" 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_PODFILE_DIR_PATH = ${SRCROOT}/. 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-MSNotificationProtectorDEMOTests/Pods-MSNotificationProtectorDEMOTests.release.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MSNotificationProtector" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/MSNotificationProtector" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/MSNotificationProtector" 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_PODFILE_DIR_PATH = ${SRCROOT}/. 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-MSNotificationProtectorDEMOUITests/Pods-MSNotificationProtectorDEMOUITests-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | Generated by CocoaPods - https://cocoapods.org 4 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-MSNotificationProtectorDEMOUITests/Pods-MSNotificationProtectorDEMOUITests-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 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-MSNotificationProtectorDEMOUITests/Pods-MSNotificationProtectorDEMOUITests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_MSNotificationProtectorDEMOUITests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_MSNotificationProtectorDEMOUITests 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-MSNotificationProtectorDEMOUITests/Pods-MSNotificationProtectorDEMOUITests-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then 7 | # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy 8 | # frameworks to, so exit 0 (signalling the script phase was successful). 9 | exit 0 10 | fi 11 | 12 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 13 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 14 | 15 | COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" 16 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 17 | 18 | # Used as a return value for each invocation of `strip_invalid_archs` function. 19 | STRIP_BINARY_RETVAL=0 20 | 21 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 22 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 23 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 24 | 25 | # Copies and strips a vendored framework 26 | install_framework() 27 | { 28 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 29 | local source="${BUILT_PRODUCTS_DIR}/$1" 30 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 31 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 32 | elif [ -r "$1" ]; then 33 | local source="$1" 34 | fi 35 | 36 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 37 | 38 | if [ -L "${source}" ]; then 39 | echo "Symlinked..." 40 | source="$(readlink "${source}")" 41 | fi 42 | 43 | # Use filter instead of exclude so missing patterns don't throw errors. 44 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 45 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 46 | 47 | local basename 48 | basename="$(basename -s .framework "$1")" 49 | binary="${destination}/${basename}.framework/${basename}" 50 | if ! [ -r "$binary" ]; then 51 | binary="${destination}/${basename}" 52 | fi 53 | 54 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 55 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 56 | strip_invalid_archs "$binary" 57 | fi 58 | 59 | # Resign the code if required by the build settings to avoid unstable apps 60 | code_sign_if_enabled "${destination}/$(basename "$1")" 61 | 62 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 63 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 64 | local swift_runtime_libs 65 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 66 | for lib in $swift_runtime_libs; do 67 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 68 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 69 | code_sign_if_enabled "${destination}/${lib}" 70 | done 71 | fi 72 | } 73 | 74 | # Copies and strips a vendored dSYM 75 | install_dsym() { 76 | local source="$1" 77 | if [ -r "$source" ]; then 78 | # Copy the dSYM into a the targets temp dir. 79 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" 80 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" 81 | 82 | local basename 83 | basename="$(basename -s .framework.dSYM "$source")" 84 | binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" 85 | 86 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 87 | if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then 88 | strip_invalid_archs "$binary" 89 | fi 90 | 91 | if [[ $STRIP_BINARY_RETVAL == 1 ]]; then 92 | # Move the stripped file into its final destination. 93 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" 94 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" 95 | else 96 | # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. 97 | touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" 98 | fi 99 | fi 100 | } 101 | 102 | # Signs a framework with the provided identity 103 | code_sign_if_enabled() { 104 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 105 | # Use the current code_sign_identitiy 106 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 107 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" 108 | 109 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 110 | code_sign_cmd="$code_sign_cmd &" 111 | fi 112 | echo "$code_sign_cmd" 113 | eval "$code_sign_cmd" 114 | fi 115 | } 116 | 117 | # Strip invalid architectures 118 | strip_invalid_archs() { 119 | binary="$1" 120 | # Get architectures for current target binary 121 | binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" 122 | # Intersect them with the architectures we are building for 123 | intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" 124 | # If there are no archs supported by this binary then warn the user 125 | if [[ -z "$intersected_archs" ]]; then 126 | echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." 127 | STRIP_BINARY_RETVAL=0 128 | return 129 | fi 130 | stripped="" 131 | for arch in $binary_archs; do 132 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then 133 | # Strip non-valid architectures in-place 134 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 135 | stripped="$stripped $arch" 136 | fi 137 | done 138 | if [[ "$stripped" ]]; then 139 | echo "Stripped $binary of architectures:$stripped" 140 | fi 141 | STRIP_BINARY_RETVAL=1 142 | } 143 | 144 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 145 | wait 146 | fi 147 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-MSNotificationProtectorDEMOUITests/Pods-MSNotificationProtectorDEMOUITests-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then 7 | # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy 8 | # resources to, so exit 0 (signalling the script phase was successful). 9 | exit 0 10 | fi 11 | 12 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 13 | 14 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 15 | > "$RESOURCES_TO_COPY" 16 | 17 | XCASSET_FILES=() 18 | 19 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 20 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 21 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 22 | 23 | case "${TARGETED_DEVICE_FAMILY:-}" in 24 | 1,2) 25 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 26 | ;; 27 | 1) 28 | TARGET_DEVICE_ARGS="--target-device iphone" 29 | ;; 30 | 2) 31 | TARGET_DEVICE_ARGS="--target-device ipad" 32 | ;; 33 | 3) 34 | TARGET_DEVICE_ARGS="--target-device tv" 35 | ;; 36 | 4) 37 | TARGET_DEVICE_ARGS="--target-device watch" 38 | ;; 39 | *) 40 | TARGET_DEVICE_ARGS="--target-device mac" 41 | ;; 42 | esac 43 | 44 | install_resource() 45 | { 46 | if [[ "$1" = /* ]] ; then 47 | RESOURCE_PATH="$1" 48 | else 49 | RESOURCE_PATH="${PODS_ROOT}/$1" 50 | fi 51 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 52 | cat << EOM 53 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 54 | EOM 55 | exit 1 56 | fi 57 | case $RESOURCE_PATH in 58 | *.storyboard) 59 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 60 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 61 | ;; 62 | *.xib) 63 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 64 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 65 | ;; 66 | *.framework) 67 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 68 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 69 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 70 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 71 | ;; 72 | *.xcdatamodel) 73 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true 74 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 75 | ;; 76 | *.xcdatamodeld) 77 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true 78 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 79 | ;; 80 | *.xcmappingmodel) 81 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true 82 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 83 | ;; 84 | *.xcassets) 85 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 86 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 87 | ;; 88 | *) 89 | echo "$RESOURCE_PATH" || true 90 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 91 | ;; 92 | esac 93 | } 94 | 95 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 96 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 97 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 98 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 99 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 100 | fi 101 | rm -f "$RESOURCES_TO_COPY" 102 | 103 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] 104 | then 105 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 106 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 107 | while read line; do 108 | if [[ $line != "${PODS_ROOT}*" ]]; then 109 | XCASSET_FILES+=("$line") 110 | fi 111 | done <<<"$OTHER_XCASSETS" 112 | 113 | if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then 114 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 115 | else 116 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist" 117 | fi 118 | fi 119 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-MSNotificationProtectorDEMOUITests/Pods-MSNotificationProtectorDEMOUITests.debug.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MSNotificationProtector" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/MSNotificationProtector" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/MSNotificationProtector" 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_PODFILE_DIR_PATH = ${SRCROOT}/. 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-MSNotificationProtectorDEMOUITests/Pods-MSNotificationProtectorDEMOUITests.release.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MSNotificationProtector" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/MSNotificationProtector" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/MSNotificationProtector" 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_PODFILE_DIR_PATH = ${SRCROOT}/. 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # MSNotificationProtector 2 | 3 | [![platform](http://img.shields.io/cocoapods/p/YYKit.svg?style=flat)](https://www.apple.com/nl/ios/) 4 | [![GitHub license](https://img.shields.io/github/license/mashape/apistatus.svg?style=flat)](https://github.com/JZJJZJ/MSNotificationProtector/blob/master/LICENSE) 5 | [![CocoaPods](https://img.shields.io/cocoapods/v/AFNetworking.svg)](https://github.com/JZJJZJ/MSNotificationProtector.git) 6 | [![GitHub stars](https://img.shields.io/github/stars/badges/shields.svg?style=social&logo=github&label=Stars)](https://github.com/JZJJZJ/MSNotificationProtector.git) 7 | 8 | 9 | No intrusive automatic removal of notifications added below iOS9 10 | 11 | ![](NSNotificationCenterApple.png) 12 | [https://developer.apple.com/library/archive/releasenotes/Foundation/RN-FoundationOlderNotes/index.html#10_11NotificationCenter](https://developer.apple.com/library/archive/releasenotes/Foundation/RN-FoundationOlderNotes/index.html#10_11NotificationCenter) 13 | 14 | ## Installation 15 | 16 | ### Cocoapods(Recommended) 17 | 18 | 1. Add `pod 'MSNotificationProtector'` to your Podfile. 19 | 2. Run `pod install` 20 | 21 | ### Manual 22 | 23 | 1. Add all files under `MSNotificationProtector` to your project 24 | 25 | ## Requirements 26 | 27 | - iOS 2.0 and greater 28 | - ARC/MRC 29 | 30 | 31 | ## How To Use 32 | Automatically effective, no additional operations are required after the project is introduced 33 | 34 | ## License 35 | 36 | MSCrashProtector is available under the MIT license. See the LICENSE file for more info. 37 | 38 | 39 | 40 | --------------------------------------------------------------------------------