zzb 4 years ago
parent
commit
676b96eddc

+ 20 - 22
Example/Pods/Pods.xcodeproj/project.pbxproj

@@ -88,6 +88,8 @@
 		4D4DAA92870FEEBDB9DA3E047C0DD239 /* KWMatcherFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = E2C39A536C7281E9C367553950C8FB1E /* KWMatcherFactory.m */; };
 		4D6375C59CBCA243A9826C6773FCDC82 /* KWBeBetweenMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C38F4FA04B8A4D18439232336787DB3 /* KWBeBetweenMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		50421FA8B8D6FC0784354E6A21DD040C /* KWEqualMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = FF5860D3D14346969F791D6F95B73FEA /* KWEqualMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		50A5DF8125EDDDDB005B44D0 /* NSObject+ZZDealloc.h in Headers */ = {isa = PBXBuildFile; fileRef = 50A5DF7F25EDDDDB005B44D0 /* NSObject+ZZDealloc.h */; };
+		50A5DF8225EDDDDB005B44D0 /* NSObject+ZZDealloc.m in Sources */ = {isa = PBXBuildFile; fileRef = 50A5DF8025EDDDDB005B44D0 /* NSObject+ZZDealloc.m */; };
 		52F5AFEBD9637164EBF1087C93B5181E /* KWMessageSpying.h in Headers */ = {isa = PBXBuildFile; fileRef = 9073E1921C12E1FB7B2387165AB2339A /* KWMessageSpying.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		54F2ABFBCD6A9B29003F4C5A78B6165B /* Aspects.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AD30E851443416E771F23EC66B8337CF /* Aspects.framework */; };
 		57A7717712B5C39EDAAAF3BD849705D4 /* KWBlockNode.m in Sources */ = {isa = PBXBuildFile; fileRef = BF205A6B3908DE727ECD1A3D4A5B3F8D /* KWBlockNode.m */; };
@@ -385,7 +387,7 @@
 		0A00D1841903DCE46BC031A98F524A40 /* KWFutureObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWFutureObject.h; path = Classes/Core/KWFutureObject.h; sourceTree = "<group>"; };
 		0A9D39D9255657E84B382ED9155144B5 /* NSObject+KiwiSpyAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+KiwiSpyAdditions.m"; path = "Classes/Core/NSObject+KiwiSpyAdditions.m"; sourceTree = "<group>"; };
 		0BA55E23786C725AC0B3F2C739634E84 /* KWExampleSuiteBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWExampleSuiteBuilder.m; path = Classes/Core/KWExampleSuiteBuilder.m; sourceTree = "<group>"; };
-		0C26E0179F81C13A342E1D93EE7708D4 /* Kiwi.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Kiwi.framework; path = Kiwi.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		0C26E0179F81C13A342E1D93EE7708D4 /* Kiwi.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Kiwi.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		0C53E4BCBBA7C729C80DB85C503E9B20 /* KWBeTrueMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBeTrueMatcher.m; path = Classes/Matchers/KWBeTrueMatcher.m; sourceTree = "<group>"; };
 		0CBA49536C5483B5C443646C85C4A028 /* KWBlockRaiseMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBlockRaiseMatcher.h; path = Classes/Matchers/KWBlockRaiseMatcher.h; sourceTree = "<group>"; };
 		0D2F88D3A1B466713555D3F58BB26EDA /* KWExistVerifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWExistVerifier.m; path = Classes/Verifiers/KWExistVerifier.m; sourceTree = "<group>"; };
@@ -419,7 +421,7 @@
 		251C6231510AA5536663731A9937B1FA /* KWInvocationCapturer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWInvocationCapturer.m; path = Classes/Core/KWInvocationCapturer.m; sourceTree = "<group>"; };
 		252755CCDEBD322A4E17C1B94C079CDE /* KWCallSite.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWCallSite.m; path = Classes/Core/KWCallSite.m; sourceTree = "<group>"; };
 		25B78A6CDD9DBDABD9C657E5186EEFAC /* ZZSecurity.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ZZSecurity.h; sourceTree = "<group>"; };
-		2669499EE9C15F4912AAF80DB2E724B8 /* date.md */ = {isa = PBXFileReference; includeInIndex = 1; path = date.md; sourceTree = "<group>"; };
+		2669499EE9C15F4912AAF80DB2E724B8 /* date.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; path = date.md; sourceTree = "<group>"; };
 		268E06538EF867B7AE75DF56B1688C91 /* KiwiMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KiwiMacros.h; path = Classes/Core/KiwiMacros.h; sourceTree = "<group>"; };
 		285D0BD4E4213C07EB21EA7E897284EE /* CocoaLumberjack.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CocoaLumberjack.release.xcconfig; sourceTree = "<group>"; };
 		289C5E7FFE39BCB4AEC512AB3B462A39 /* KWReceiveMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWReceiveMatcher.h; path = Classes/Matchers/KWReceiveMatcher.h; sourceTree = "<group>"; };
@@ -442,7 +444,7 @@
 		3594B25487FDC7E326BBF110C8FAFD75 /* KWBeKindOfClassMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBeKindOfClassMatcher.h; path = Classes/Matchers/KWBeKindOfClassMatcher.h; sourceTree = "<group>"; };
 		373F7A1529F6BDB65E262BB0612AEF94 /* KWSymbolicator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWSymbolicator.m; path = Classes/Core/KWSymbolicator.m; sourceTree = "<group>"; };
 		3749CB07F0C9D0141F6E70150145BDF6 /* KWMessageTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWMessageTracker.m; path = Classes/Core/KWMessageTracker.m; sourceTree = "<group>"; };
-		377427BA38DD51319A87D0DD6899C53F /* ZZFoundation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = ZZFoundation.framework; path = ZZFoundation.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		377427BA38DD51319A87D0DD6899C53F /* ZZFoundation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ZZFoundation.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		37CDA770337E5B2AAC616078C48F59F9 /* KWRegularExpressionPatternMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWRegularExpressionPatternMatcher.h; path = Classes/Matchers/KWRegularExpressionPatternMatcher.h; sourceTree = "<group>"; };
 		37F2FE2935CF40DEEFC664BDC7DE2AA1 /* KWIntercept.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWIntercept.h; path = Classes/Stubbing/KWIntercept.h; sourceTree = "<group>"; };
 		3831F967FF0FF34BA2C6CA71228B34E5 /* KWFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWFormatter.m; path = Classes/Core/KWFormatter.m; sourceTree = "<group>"; };
@@ -476,6 +478,8 @@
 		4BE6C5646D989CAC529AEAB665D838EF /* KWChangeMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWChangeMatcher.h; path = Classes/Matchers/KWChangeMatcher.h; sourceTree = "<group>"; };
 		4C38F4FA04B8A4D18439232336787DB3 /* KWBeBetweenMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBeBetweenMatcher.h; path = Classes/Matchers/KWBeBetweenMatcher.h; sourceTree = "<group>"; };
 		5079775EC0BD350451A8294C490B7A5C /* KWItNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWItNode.m; path = Classes/Nodes/KWItNode.m; sourceTree = "<group>"; };
+		50A5DF7F25EDDDDB005B44D0 /* NSObject+ZZDealloc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSObject+ZZDealloc.h"; sourceTree = "<group>"; };
+		50A5DF8025EDDDDB005B44D0 /* NSObject+ZZDealloc.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSObject+ZZDealloc.m"; sourceTree = "<group>"; };
 		50EEECA807B793EE134CE2FBE412390F /* KWNilMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWNilMatcher.m; path = Classes/Matchers/KWNilMatcher.m; sourceTree = "<group>"; };
 		5302E77FC4890D4AD2CAF2D532A50F69 /* ZZFoundation-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ZZFoundation-umbrella.h"; sourceTree = "<group>"; };
 		559EE602DF7E63BE9E561D7BECED3D2A /* CocoaLumberjack.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CocoaLumberjack.framework; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -512,8 +516,8 @@
 		69AF5716527E49D0F9B20F537673B875 /* KWExpectationType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWExpectationType.h; path = Classes/Core/KWExpectationType.h; sourceTree = "<group>"; };
 		6B49F753CC72F372E19D50E17A8273A4 /* KWObjCUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWObjCUtilities.h; path = Classes/Core/KWObjCUtilities.h; sourceTree = "<group>"; };
 		6BD3407C948B0BC03038DB4CFF861343 /* NSString+ZZAttribute.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSString+ZZAttribute.h"; sourceTree = "<group>"; };
-		6CB0FEA6F17D22A0034089940CBDF632 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = "<group>"; };
-		6CD572E6A31434373A5F1148059AEDDB /* ZZFoundation.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = ZZFoundation.podspec; sourceTree = "<group>"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
+		6CB0FEA6F17D22A0034089940CBDF632 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = LICENSE; sourceTree = "<group>"; };
+		6CD572E6A31434373A5F1148059AEDDB /* ZZFoundation.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; path = ZZFoundation.podspec; sourceTree = "<group>"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
 		6DA3358F09CD57C880FCD8E00F48D27B /* ZZFoundation-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ZZFoundation-prefix.pch"; sourceTree = "<group>"; };
 		6DCC180EBBC3C85FECFCB40C90813B69 /* DDFileLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDFileLogger.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDFileLogger.h; sourceTree = "<group>"; };
 		704F4E5A9C5AE008024CA0C7DA44F62B /* KWContextNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWContextNode.h; path = Classes/Nodes/KWContextNode.h; sourceTree = "<group>"; };
@@ -523,7 +527,7 @@
 		726DDC484D3B4C28EC7A2EC8757F366B /* KWBlockRaiseMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBlockRaiseMatcher.m; path = Classes/Matchers/KWBlockRaiseMatcher.m; sourceTree = "<group>"; };
 		727103C8321621178ED328640F4A8E6D /* KWContextNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWContextNode.m; path = Classes/Nodes/KWContextNode.m; sourceTree = "<group>"; };
 		728B1ED44E46360FF36FE55B10DF5909 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };
-		73A5E2CE4192D8EBCA4F3DEC835CD567 /* Pods_ZZFoundation_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_ZZFoundation_Tests.framework; path = "Pods-ZZFoundation_Tests.framework"; sourceTree = BUILT_PRODUCTS_DIR; };
+		73A5E2CE4192D8EBCA4F3DEC835CD567 /* Pods_ZZFoundation_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ZZFoundation_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		73B241132FECFA27063CB63E26E127D3 /* NSArray+ZZEx.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSArray+ZZEx.h"; sourceTree = "<group>"; };
 		7473DC22DB05AB38119E49BAB6F042B2 /* KWHaveValueMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWHaveValueMatcher.m; path = Classes/Matchers/KWHaveValueMatcher.m; sourceTree = "<group>"; };
 		758209DE623D1A679694B337F8AF4D5A /* KWCallSite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWCallSite.h; path = Classes/Core/KWCallSite.h; sourceTree = "<group>"; };
@@ -569,7 +573,7 @@
 		94FBEFCAFDADAA53DD57496E9F8BC71A /* Kiwi.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Kiwi.modulemap; sourceTree = "<group>"; };
 		958FFD5994F7E5FFF6363B2928E3ECAC /* DDOSLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDOSLogger.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDOSLogger.h; sourceTree = "<group>"; };
 		97531CDEE97023FA2F4A47CE35314A85 /* DDTTYLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDTTYLogger.m; path = Sources/CocoaLumberjack/DDTTYLogger.m; sourceTree = "<group>"; };
-		9808BF74538141204E4EB5B49809FE77 /* Aspects.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Aspects.framework; path = Aspects.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		9808BF74538141204E4EB5B49809FE77 /* Aspects.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Aspects.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		98E6D0AB16A8734DF8F0BF0E690D3196 /* KWMatching.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWMatching.h; path = Classes/Core/KWMatching.h; sourceTree = "<group>"; };
 		9ACA6E98F4BA06C3688B2C0C2D1B4F3F /* Aspects-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Aspects-Info.plist"; sourceTree = "<group>"; };
 		9B229947F09D434344B645A921F78C71 /* DDASLLogCapture.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDASLLogCapture.m; path = Sources/CocoaLumberjack/DDASLLogCapture.m; sourceTree = "<group>"; };
@@ -579,9 +583,9 @@
 		9C86AC7BFF9D9734AE8E7247F513FE9E /* KWProbePoller.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWProbePoller.m; path = Classes/Core/KWProbePoller.m; sourceTree = "<group>"; };
 		9D156556C2ED42BA66469374E4994F0E /* KWRegularExpressionPatternMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWRegularExpressionPatternMatcher.m; path = Classes/Matchers/KWRegularExpressionPatternMatcher.m; sourceTree = "<group>"; };
 		9D87776EA3C45C8D986052CAD93E1C20 /* KWMatchVerifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWMatchVerifier.h; path = Classes/Verifiers/KWMatchVerifier.h; sourceTree = "<group>"; };
-		9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
+		9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
 		9DC37FE50CD8B724044E6C5BD0794941 /* NSString+ZZEx.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSString+ZZEx.h"; sourceTree = "<group>"; };
-		9DC4319B691676C65BAB4F30C566BFDA /* Pods_ZZFoundation_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_ZZFoundation_Example.framework; path = "Pods-ZZFoundation_Example.framework"; sourceTree = BUILT_PRODUCTS_DIR; };
+		9DC4319B691676C65BAB4F30C566BFDA /* Pods_ZZFoundation_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ZZFoundation_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		A043902D2B83D86E4B8E099A5D3D5C31 /* CocoaLumberjack-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "CocoaLumberjack-Info.plist"; sourceTree = "<group>"; };
 		A11DC3E07FB16BB2DEB5F72A3A68EE0B /* KWVerifying.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWVerifying.h; path = Classes/Verifiers/KWVerifying.h; sourceTree = "<group>"; };
 		A150F155DC79D2C2A8297443E6AA4398 /* Kiwi-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Kiwi-Info.plist"; sourceTree = "<group>"; };
@@ -625,7 +629,7 @@
 		C0058D4D939EC87D4EC7053B5F67F943 /* KWRespondToSelectorMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWRespondToSelectorMatcher.h; path = Classes/Matchers/KWRespondToSelectorMatcher.h; sourceTree = "<group>"; };
 		C173FE6C61513CAF3B3B80E738679CEC /* KWDeviceInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWDeviceInfo.h; path = Classes/Core/KWDeviceInfo.h; sourceTree = "<group>"; };
 		C1CB939702B6887886D5058F17615E0A /* DDMultiFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDMultiFormatter.m; path = Sources/CocoaLumberjack/Extensions/DDMultiFormatter.m; sourceTree = "<group>"; };
-		C261436D14052AE3C35F240BCD155CAC /* CocoaLumberjack.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = CocoaLumberjack.framework; path = CocoaLumberjack.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		C261436D14052AE3C35F240BCD155CAC /* CocoaLumberjack.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CocoaLumberjack.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		C2826E2FD190D77B6262715FAD5F9C99 /* NSObject+KiwiStubAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+KiwiStubAdditions.h"; path = "Classes/Stubbing/NSObject+KiwiStubAdditions.h"; sourceTree = "<group>"; };
 		C362F406A49B80E7C08FA3F2F8CFDC53 /* KWMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWMatcher.h; path = Classes/Core/KWMatcher.h; sourceTree = "<group>"; };
 		C3D92A702559F5A2410151F99E3B3C3D /* KWHaveMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWHaveMatcher.h; path = Classes/Matchers/KWHaveMatcher.h; sourceTree = "<group>"; };
@@ -682,7 +686,7 @@
 		F9CF593D6395DCE9C1C3C3E6ADAAD2BE /* KWBeZeroMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBeZeroMatcher.h; path = Classes/Matchers/KWBeZeroMatcher.h; sourceTree = "<group>"; };
 		FA8CC2A15B07E41510B9524B6F2BE36C /* DDMultiFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDMultiFormatter.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDMultiFormatter.h; sourceTree = "<group>"; };
 		FB52694809EE1664BBECD05F5EB9AC60 /* KWMock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWMock.m; path = Classes/Mocking/KWMock.m; sourceTree = "<group>"; };
-		FB59D2B4FEED444D6CD67876155936BB /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = "<group>"; };
+		FB59D2B4FEED444D6CD67876155936BB /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
 		FC4C08E799F88633B646BF73E85460BC /* CocoaLumberjack.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CocoaLumberjack.h; path = "Sources/CocoaLumberjack/Supporting Files/CocoaLumberjack.h"; sourceTree = "<group>"; };
 		FE941DDD08954B9795415047882961DE /* KWExampleNodeVisitor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWExampleNodeVisitor.h; path = Classes/Core/KWExampleNodeVisitor.h; sourceTree = "<group>"; };
 		FEB4311E5EB43234B9FEC46A98B63572 /* NSDate+ZZChineseCalendar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NSDate+ZZChineseCalendar.m"; sourceTree = "<group>"; };
@@ -753,7 +757,6 @@
 				1B6C2406CD8F4B05C7CB71FFA526C6D8 /* NSString+ZZPath.h */,
 				059031CFD337DA36A54DEDBD426FA4ED /* NSString+ZZPath.m */,
 			);
-			name = DirPath;
 			path = DirPath;
 			sourceTree = "<group>";
 		};
@@ -881,7 +884,6 @@
 				A1962587EE9691757DC2F259741EF2FB /* NSString+ZZRect.h */,
 				F97B6EE574796183C75982B2D8561612 /* NSString+ZZRect.m */,
 			);
-			name = Rect;
 			path = Rect;
 			sourceTree = "<group>";
 		};
@@ -906,7 +908,6 @@
 				1D21A0049D38EA912167F86AAADF6D07 /* NSString+ZZRegex.h */,
 				CDF6002B6434CD8ECCD6C54644B019BC /* NSString+ZZRegex.m */,
 			);
-			name = Regex;
 			path = Regex;
 			sourceTree = "<group>";
 		};
@@ -1109,7 +1110,6 @@
 				871A97F93AB2526655423EBE8BA0A34F /* NSValue+KiwiAdditions.m */,
 				9990E0E53A03A9F39D82FD3B9484E152 /* Support Files */,
 			);
-			name = Kiwi;
 			path = Kiwi;
 			sourceTree = "<group>";
 		};
@@ -1147,7 +1147,6 @@
 				AEFAA1EED0C8AB9ECEE85929A0884958 /* Core */,
 				53ADED2FA3BEFA9EC5532CE2BBEC66A2 /* Support Files */,
 			);
-			name = CocoaLumberjack;
 			path = CocoaLumberjack;
 			sourceTree = "<group>";
 		};
@@ -1232,7 +1231,6 @@
 				25B78A6CDD9DBDABD9C657E5186EEFAC /* ZZSecurity.h */,
 				B23E41ACAD4B0BF4C675654407D942BA /* ZZSecurity.m */,
 			);
-			name = Security;
 			path = Security;
 			sourceTree = "<group>";
 		};
@@ -1296,8 +1294,9 @@
 				8F7215B1EC9CA2ADBA7938125A155BE0 /* NSObject+ZZResp.m */,
 				8ADE0679CBD8CDE1DEABCD994FDA0348 /* ZZSwizzle.h */,
 				5F474F67D102B02B0A7AC0792DC61737 /* ZZSwizzle.m */,
+				50A5DF7F25EDDDDB005B44D0 /* NSObject+ZZDealloc.h */,
+				50A5DF8025EDDDDB005B44D0 /* NSObject+ZZDealloc.m */,
 			);
-			name = "NSObject+ZZRuntime";
 			path = "NSObject+ZZRuntime";
 			sourceTree = "<group>";
 		};
@@ -1332,7 +1331,6 @@
 				FEE947C46A1CC316A85E936283833763 /* NSString+ZZMD5.h */,
 				037CB04ADCEBF6F7D534C5EAB80C464C /* NSString+ZZMD5.m */,
 			);
-			name = MD5;
 			path = MD5;
 			sourceTree = "<group>";
 		};
@@ -1343,7 +1341,6 @@
 				5F0C5A4473C0EFBC4E10C3CB535749A4 /* Aspects.m */,
 				75DDF503F2A6A8970D31FD573C48F1BC /* Support Files */,
 			);
-			name = Aspects;
 			path = Aspects;
 			sourceTree = "<group>";
 		};
@@ -1381,6 +1378,7 @@
 				7A66013572A1F4D4622CA6D9D864D7D0 /* ZZFileManager.h in Headers */,
 				DA8434D3FAECF84006B38B179202F92F /* ZZFoundation-umbrella.h in Headers */,
 				8A6CD061B404A56FC275CC7F39623EAE /* ZZFoundation.h in Headers */,
+				50A5DF8125EDDDDB005B44D0 /* NSObject+ZZDealloc.h in Headers */,
 				9AB010AAF5D49C4F6B12F66ACB02B494 /* ZZFoundation_BaseTool.h in Headers */,
 				F7BD6AB5B1258EDA9C343C8F920755D4 /* ZZFoundation_Date.h in Headers */,
 				38B941989FE473E6EE839096D3FF1217 /* ZZFoundation_Set.h in Headers */,
@@ -1872,6 +1870,7 @@
 				C5F80D0AFF95320F08862269494E20E2 /* NSArray+ZZEx.m in Sources */,
 				9D0513732C29C51EB17EBA6AAA459FA9 /* NSData+ZZConvert.m in Sources */,
 				A6A2CB1ADE94232F5DE028D18C3E5F73 /* NSDate+ZZChineseCalendar.m in Sources */,
+				50A5DF8225EDDDDB005B44D0 /* NSObject+ZZDealloc.m in Sources */,
 				4626EDF38BC3236DA7D475BC69A53E7D /* NSDate+ZZEx.m in Sources */,
 				001EE7B725E7305200DB154460E5A358 /* NSDate+ZZTimeStamp.m in Sources */,
 				D938F0A2948115E0BA4C853F6EAA364A /* NSDateFormatter+ZZEx.m in Sources */,
@@ -2436,8 +2435,7 @@
 				MTL_FAST_MATH = YES;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				STRIP_INSTALLED_PRODUCT = NO;
-				SWIFT_COMPILATION_MODE = wholemodule;
-				SWIFT_OPTIMIZATION_LEVEL = "-O";
+				SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
 				SWIFT_VERSION = 5.0;
 				SYMROOT = "${SRCROOT}/../build";
 			};

+ 6 - 0
Example/ZZFoundation.xcodeproj/project.pbxproj

@@ -14,6 +14,7 @@
 		50563647259B12FC004C7FCF /* NSDate+ZZExTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 50563646259B12FC004C7FCF /* NSDate+ZZExTest.m */; };
 		5082D62B25AC5BBF005B836B /* ZZSwiftClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5082D62A25AC5BBF005B836B /* ZZSwiftClass.swift */; };
 		5082D62C25AC5C81005B836B /* ZZSwiftClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5082D62A25AC5BBF005B836B /* ZZSwiftClass.swift */; };
+		50A5DF8525EDEBB7005B44D0 /* TempViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 50A5DF8425EDEBB7005B44D0 /* TempViewController.m */; };
 		6003F58E195388D20070C39A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58D195388D20070C39A /* Foundation.framework */; };
 		6003F590195388D20070C39A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58F195388D20070C39A /* CoreGraphics.framework */; };
 		6003F592195388D20070C39A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F591195388D20070C39A /* UIKit.framework */; };
@@ -51,6 +52,8 @@
 		50563646259B12FC004C7FCF /* NSDate+ZZExTest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSDate+ZZExTest.m"; sourceTree = "<group>"; };
 		5082D62925AC5BBE005B836B /* ZZFoundation_Example-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "ZZFoundation_Example-Bridging-Header.h"; sourceTree = "<group>"; };
 		5082D62A25AC5BBF005B836B /* ZZSwiftClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZZSwiftClass.swift; sourceTree = "<group>"; };
+		50A5DF8325EDEBB7005B44D0 /* TempViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TempViewController.h; sourceTree = "<group>"; };
+		50A5DF8425EDEBB7005B44D0 /* TempViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TempViewController.m; sourceTree = "<group>"; };
 		6003F58A195388D20070C39A /* ZZFoundation_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ZZFoundation_Example.app; sourceTree = BUILT_PRODUCTS_DIR; };
 		6003F58D195388D20070C39A /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
 		6003F58F195388D20070C39A /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
@@ -145,6 +148,8 @@
 				873B8AEA1B1F5CCA007FD442 /* Main.storyboard */,
 				6003F5A5195388D20070C39A /* ZZViewController.h */,
 				6003F5A6195388D20070C39A /* ZZViewController.m */,
+				50A5DF8325EDEBB7005B44D0 /* TempViewController.h */,
+				50A5DF8425EDEBB7005B44D0 /* TempViewController.m */,
 				5082D62A25AC5BBF005B836B /* ZZSwiftClass.swift */,
 				71719F9D1E33DC2100824A3D /* LaunchScreen.storyboard */,
 				6003F5A8195388D20070C39A /* Images.xcassets */,
@@ -403,6 +408,7 @@
 			buildActionMask = 2147483647;
 			files = (
 				5082D62B25AC5BBF005B836B /* ZZSwiftClass.swift in Sources */,
+				50A5DF8525EDEBB7005B44D0 /* TempViewController.m in Sources */,
 				6003F59E195388D20070C39A /* ZZAppDelegate.m in Sources */,
 				6003F5A7195388D20070C39A /* ZZViewController.m in Sources */,
 				6003F59A195388D20070C39A /* main.m in Sources */,

+ 17 - 0
Example/ZZFoundation/TempViewController.h

@@ -0,0 +1,17 @@
+//
+//  TempViewController.h
+//  ZZFoundation_Example
+//
+//  Created by Max on 2021/3/2.
+//  Copyright © 2021 bymiracles@163.com. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface TempViewController : UIViewController
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 26 - 0
Example/ZZFoundation/TempViewController.m

@@ -0,0 +1,26 @@
+//
+//  TempViewController.m
+//  ZZFoundation_Example
+//
+//  Created by Max on 2021/3/2.
+//  Copyright © 2021 bymiracles@163.com. All rights reserved.
+//
+
+#import "TempViewController.h"
+
+@interface TempViewController ()
+
+@end
+
+@implementation TempViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+}
+
+//-(void)dealloc{
+//    NSLog(@"delloc");
+//}
+
+@end

+ 11 - 2
Example/ZZFoundation/ZZViewController.m

@@ -9,6 +9,7 @@
 #import "ZZViewController.h"
 #import "ZZFoundation_Example-Swift.h"
 #import <ZZFoundation/ZZFoundation.h>
+#import "TempViewController.h"
 @interface ZZViewController ()
 
 @end
@@ -18,8 +19,16 @@
 - (void)viewDidLoad
 {
     [super viewDidLoad];
-	// Do any additional setup after loading the view, typically from a nib.
-    NSLog(@"%@",zz_getObjClass([ZZSwiftClass new]));
+    self.view.backgroundColor = [UIColor lightGrayColor];
+}
+
+-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
+    TempViewController *vc = [TempViewController new];
+    vc.view.backgroundColor = [UIColor redColor];
+    [self presentViewController:vc animated:true completion:nil];
+    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+           [vc dismissViewControllerAnimated:true completion:nil];
+       });
 }
 
 - (void)didReceiveMemoryWarning

+ 16 - 0
ZZFoundation/Classes/NSObject/NSObject+ZZRuntime/NSObject+ZZDealloc.h

@@ -0,0 +1,16 @@
+//
+//  NSObject+ZZDealloc.h
+//  ZZFoundation
+//
+//  Created by Max on 2021/3/2.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface UIViewController (ZZDealloc)
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 20 - 0
ZZFoundation/Classes/NSObject/NSObject+ZZRuntime/NSObject+ZZDealloc.m

@@ -0,0 +1,20 @@
+//
+//  NSObject+ZZDealloc.m
+//  ZZFoundation
+//
+//  Created by Max on 2021/3/2.
+//
+
+#import "NSObject+ZZDealloc.h"
+#import <ZZFoundation/ZZSwizzle.h>
+@implementation UIViewController (ZZDealloc)
++ (void)load{
+    ZZ_best_Swizzle([self class], NSSelectorFromString(@"dealloc"), @selector(myDealloc));
+}
+//系统调用dealloc方法的时候会调用该方法
+- (void)myDealloc{
+    NSLog(@"%@ %s", NSStringFromClass([self class]),__func__);
+//此刻实际是在调用dealloc方法
+    [self myDealloc];
+}
+@end

+ 1 - 1
ZZFoundation/Classes/NSObject/NSObject+ZZRuntime/ZZSwizzle.h

@@ -12,5 +12,5 @@ NS_ASSUME_NONNULL_BEGIN
 
 BOOL ZZ_simple_Swizzle(Class aClass, SEL originalSel,SEL swizzleSel);
 BOOL ZZ_best_Swizzle(Class aClass, SEL originalSel,SEL swizzleSel);
-
+BOOL zz_best_swizzle_class(Class aClass, SEL originalSel,SEL swizzleSel);
 NS_ASSUME_NONNULL_END

+ 14 - 0
ZZFoundation/Classes/NSObject/NSObject+ZZRuntime/ZZSwizzle.m

@@ -31,3 +31,17 @@ BOOL ZZ_best_Swizzle(Class aClass, SEL originalSel,SEL swizzleSel){
 
     return YES;
 }
+
+BOOL zz_best_swizzle_class(Class aClass, SEL originalSel,SEL swizzleSel){
+    
+    Method originalMethod = class_getClassMethod(aClass, originalSel);
+    Method swizzleMethod = class_getClassMethod(aClass, swizzleSel);
+    BOOL didAddMethod = class_addMethod(aClass, originalSel, method_getImplementation(swizzleMethod), method_getTypeEncoding(swizzleMethod));
+    if (didAddMethod) {
+        class_replaceMethod(aClass, swizzleSel, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod));
+    }else{
+        method_exchangeImplementations(originalMethod, swizzleMethod);
+    }
+
+    return YES;
+}