diff --git a/CocoaDebugKit.xcworkspace/contents.xcworkspacedata b/CocoaDebugKit.xcworkspace/contents.xcworkspacedata index fc1d969..3576b26 100644 --- a/CocoaDebugKit.xcworkspace/contents.xcworkspacedata +++ b/CocoaDebugKit.xcworkspace/contents.xcworkspacedata @@ -2,51 +2,34 @@ - - - - - - - - - - - - - - - - - - + location = "group:../LICENSE.md"> + location = "group:../README.md"> + location = "group:objc types.pdf"> + + + + + + + + + location = "group:Example/Example.xcodeproj"> + location = "group:CocoaDebugKit/CocoaDebugKit.xcodeproj"> diff --git a/CocoaDebugKit.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/CocoaDebugKit.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/CocoaDebugKit.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/macOS/CocoaDebugKit.xcodeproj/project.pbxproj b/CocoaDebugKit/CocoaDebugKit.xcodeproj/project.pbxproj similarity index 58% rename from macOS/CocoaDebugKit.xcodeproj/project.pbxproj rename to CocoaDebugKit/CocoaDebugKit.xcodeproj/project.pbxproj index aea0956..4a61d77 100644 --- a/macOS/CocoaDebugKit.xcodeproj/project.pbxproj +++ b/CocoaDebugKit/CocoaDebugKit.xcodeproj/project.pbxproj @@ -7,17 +7,7 @@ objects = { /* Begin PBXBuildFile section */ - CD21815F1EC897D200D84381 /* image.jpg in Resources */ = {isa = PBXBuildFile; fileRef = CD21815E1EC897D200D84381 /* image.jpg */; }; CD2761F11B0E1C050000BB5D /* CocoaDebugKit.h in Headers */ = {isa = PBXBuildFile; fileRef = CD2761F01B0E1C050000BB5D /* CocoaDebugKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CD2762471B0E30210000BB5D /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = CD2762461B0E30210000BB5D /* AppDelegate.m */; }; - CD2762491B0E30210000BB5D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = CD2762481B0E30210000BB5D /* main.m */; }; - CD27624B1B0E30210000BB5D /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CD27624A1B0E30210000BB5D /* Images.xcassets */; }; - CD27624E1B0E30210000BB5D /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = CD27624C1B0E30210000BB5D /* MainMenu.xib */; }; - CD4DF0E71ED0C31D000E78A0 /* CocoaDebugKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD2761EB1B0E1C050000BB5D /* CocoaDebugKit.framework */; }; - CD4DF0E81ED0C31D000E78A0 /* CocoaDebugKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = CD2761EB1B0E1C050000BB5D /* CocoaDebugKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - CD5796411CC576A40014BFD0 /* com.kladek.CocoaDebugKit.settings.default.plist in Resources */ = {isa = PBXBuildFile; fileRef = CD5796401CC576A40014BFD0 /* com.kladek.CocoaDebugKit.settings.default.plist */; }; - CD5796441CC585CA0014BFD0 /* Person.m in Sources */ = {isa = PBXBuildFile; fileRef = CD5796431CC585CA0014BFD0 /* Person.m */; }; - CD57964B1CC632D40014BFD0 /* com.kladek.CocoaDebugKit.settings.dusk.plist in Resources */ = {isa = PBXBuildFile; fileRef = CD57964A1CC632D40014BFD0 /* com.kladek.CocoaDebugKit.settings.dusk.plist */; }; CD63A0781ED3293F00D04814 /* CPColor+CPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = CD63A06B1ED3293F00D04814 /* CPColor+CPAdditions.h */; }; CD63A0791ED3293F00D04814 /* CPColor+CPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = CD63A06C1ED3293F00D04814 /* CPColor+CPAdditions.m */; }; CD63A07A1ED3293F00D04814 /* CPImageView+CPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = CD63A06D1ED3293F00D04814 /* CPImageView+CPAdditions.h */; }; @@ -42,80 +32,36 @@ CD63A13C1ED3707600D04814 /* AlertCautionIcon.icns in Resources */ = {isa = PBXBuildFile; fileRef = CD63A13B1ED3707600D04814 /* AlertCautionIcon.icns */; }; CD63A14C1ED7308E00D04814 /* CocoaPropertyLine.h in Headers */ = {isa = PBXBuildFile; fileRef = CD63A1491ED7308E00D04814 /* CocoaPropertyLine.h */; settings = {ATTRIBUTES = (Public, ); }; }; CD63A14D1ED7308E00D04814 /* CocoaPropertyLine.m in Sources */ = {isa = PBXBuildFile; fileRef = CD63A14A1ED7308E00D04814 /* CocoaPropertyLine.m */; }; - CD8962DD1CC63B2C001E6749 /* com.kladek.CocoaDebugKit.settings.basic.plist in Resources */ = {isa = PBXBuildFile; fileRef = CD8962DC1CC63B2C001E6749 /* com.kladek.CocoaDebugKit.settings.basic.plist */; }; - CDBBC8471B70E31600923E3E /* TestObject.m in Sources */ = {isa = PBXBuildFile; fileRef = CDBBC8461B70E31600923E3E /* TestObject.m */; }; - CDE848D91CCE75E900DD5A00 /* SecondObject.m in Sources */ = {isa = PBXBuildFile; fileRef = CDE848D81CCE75E900DD5A00 /* SecondObject.m */; }; /* End PBXBuildFile section */ -/* Begin PBXContainerItemProxy section */ - CD4DF0E91ED0C31D000E78A0 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2761E21B0E1C050000BB5D /* Project object */; - proxyType = 1; - remoteGlobalIDString = CD2761EA1B0E1C050000BB5D; - remoteInfo = CocoaDebugKit; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - CD4DF0EB1ED0C31D000E78A0 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - CD4DF0E81ED0C31D000E78A0 /* CocoaDebugKit.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - /* Begin PBXFileReference section */ - CD21815E1EC897D200D84381 /* image.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = image.jpg; sourceTree = ""; }; CD2761EB1B0E1C050000BB5D /* CocoaDebugKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CocoaDebugKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; CD2761EF1B0E1C050000BB5D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; CD2761F01B0E1C050000BB5D /* CocoaDebugKit.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CocoaDebugKit.h; sourceTree = ""; }; - CD2762411B0E30210000BB5D /* Test Application.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Test Application.app"; sourceTree = BUILT_PRODUCTS_DIR; }; - CD2762441B0E30210000BB5D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - CD2762451B0E30210000BB5D /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; - CD2762461B0E30210000BB5D /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; - CD2762481B0E30210000BB5D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - CD27624A1B0E30210000BB5D /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; - CD27624D1B0E30210000BB5D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; - CD5796401CC576A40014BFD0 /* com.kladek.CocoaDebugKit.settings.default.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = com.kladek.CocoaDebugKit.settings.default.plist; path = "Test Application/com.kladek.CocoaDebugKit.settings.default.plist"; sourceTree = SOURCE_ROOT; }; - CD5796421CC585CA0014BFD0 /* Person.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Person.h; sourceTree = ""; }; - CD5796431CC585CA0014BFD0 /* Person.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Person.m; sourceTree = ""; }; - CD57964A1CC632D40014BFD0 /* com.kladek.CocoaDebugKit.settings.dusk.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = com.kladek.CocoaDebugKit.settings.dusk.plist; sourceTree = ""; }; - CD63A06B1ED3293F00D04814 /* CPColor+CPAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "CPColor+CPAdditions.h"; path = "../../Shared/CrossPlatform/CPColor+CPAdditions.h"; sourceTree = ""; }; - CD63A06C1ED3293F00D04814 /* CPColor+CPAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "CPColor+CPAdditions.m"; path = "../../Shared/CrossPlatform/CPColor+CPAdditions.m"; sourceTree = ""; }; - CD63A06D1ED3293F00D04814 /* CPImageView+CPAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "CPImageView+CPAdditions.h"; path = "../../Shared/CrossPlatform/CPImageView+CPAdditions.h"; sourceTree = ""; }; - CD63A06E1ED3293F00D04814 /* CPImageView+CPAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "CPImageView+CPAdditions.m"; path = "../../Shared/CrossPlatform/CPImageView+CPAdditions.m"; sourceTree = ""; }; - CD63A06F1ED3293F00D04814 /* CPScreen+CPAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "CPScreen+CPAdditions.h"; path = "../../Shared/CrossPlatform/CPScreen+CPAdditions.h"; sourceTree = ""; }; - CD63A0701ED3293F00D04814 /* CPScreen+CPAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "CPScreen+CPAdditions.m"; path = "../../Shared/CrossPlatform/CPScreen+CPAdditions.m"; sourceTree = ""; }; - CD63A0711ED3293F00D04814 /* CPTextField+CPAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "CPTextField+CPAdditions.h"; path = "../../Shared/CrossPlatform/CPTextField+CPAdditions.h"; sourceTree = ""; }; - CD63A0721ED3293F00D04814 /* CPTextField+CPAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "CPTextField+CPAdditions.m"; path = "../../Shared/CrossPlatform/CPTextField+CPAdditions.m"; sourceTree = ""; }; - CD63A0731ED3293F00D04814 /* CPView+CPAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "CPView+CPAdditions.h"; path = "../../Shared/CrossPlatform/CPView+CPAdditions.h"; sourceTree = ""; }; - CD63A0741ED3293F00D04814 /* CPView+CPAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "CPView+CPAdditions.m"; path = "../../Shared/CrossPlatform/CPView+CPAdditions.m"; sourceTree = ""; }; - CD63A0751ED3293F00D04814 /* CrossPlatformDefinitions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CrossPlatformDefinitions.h; path = ../../Shared/CrossPlatform/CrossPlatformDefinitions.h; sourceTree = ""; }; - CD63A0761ED3293F00D04814 /* NSObject+CPAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSObject+CPAdditions.h"; path = "../../Shared/CrossPlatform/NSObject+CPAdditions.h"; sourceTree = ""; }; - CD63A0771ED3293F00D04814 /* NSObject+CPAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSObject+CPAdditions.m"; path = "../../Shared/CrossPlatform/NSObject+CPAdditions.m"; sourceTree = ""; }; - CD63A08C1ED3298400D04814 /* CocoaDebugDescription.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CocoaDebugDescription.h; path = ../../Shared/CocoaDebugDescription.h; sourceTree = ""; }; - CD63A08D1ED3298400D04814 /* CocoaDebugDescription.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CocoaDebugDescription.m; path = ../../Shared/CocoaDebugDescription.m; sourceTree = ""; }; - CD63A08E1ED3298400D04814 /* CocoaDebugSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CocoaDebugSettings.h; path = ../../Shared/CocoaDebugSettings.h; sourceTree = ""; }; - CD63A08F1ED3298400D04814 /* CocoaDebugSettings.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CocoaDebugSettings.m; path = ../../Shared/CocoaDebugSettings.m; sourceTree = ""; }; - CD63A0901ED3298400D04814 /* CocoaDebugView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CocoaDebugView.h; path = ../../Shared/CocoaDebugView.h; sourceTree = ""; }; - CD63A0911ED3298400D04814 /* CocoaDebugView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CocoaDebugView.m; path = ../../Shared/CocoaDebugView.m; sourceTree = ""; }; - CD63A0921ED3298400D04814 /* CocoaPropertyEnumerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CocoaPropertyEnumerator.h; path = ../../Shared/CocoaPropertyEnumerator.h; sourceTree = ""; }; - CD63A0931ED3298400D04814 /* CocoaPropertyEnumerator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CocoaPropertyEnumerator.m; path = ../../Shared/CocoaPropertyEnumerator.m; sourceTree = ""; }; - CD63A13B1ED3707600D04814 /* AlertCautionIcon.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = AlertCautionIcon.icns; path = ../../Shared/AlertCautionIcon.icns; sourceTree = ""; }; - CD63A1491ED7308E00D04814 /* CocoaPropertyLine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CocoaPropertyLine.h; path = ../../Shared/CocoaPropertyLine.h; sourceTree = ""; }; - CD63A14A1ED7308E00D04814 /* CocoaPropertyLine.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CocoaPropertyLine.m; path = ../../Shared/CocoaPropertyLine.m; sourceTree = ""; }; - CD8962DC1CC63B2C001E6749 /* com.kladek.CocoaDebugKit.settings.basic.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = com.kladek.CocoaDebugKit.settings.basic.plist; sourceTree = ""; }; - CDBBC8451B70E31600923E3E /* TestObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TestObject.h; sourceTree = ""; }; - CDBBC8461B70E31600923E3E /* TestObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TestObject.m; sourceTree = ""; }; - CDE848D71CCE75E900DD5A00 /* SecondObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SecondObject.h; sourceTree = ""; }; - CDE848D81CCE75E900DD5A00 /* SecondObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SecondObject.m; sourceTree = ""; }; + CD63A06B1ED3293F00D04814 /* CPColor+CPAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "CPColor+CPAdditions.h"; path = "../CrossPlatform/CPColor+CPAdditions.h"; sourceTree = ""; }; + CD63A06C1ED3293F00D04814 /* CPColor+CPAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "CPColor+CPAdditions.m"; path = "../CrossPlatform/CPColor+CPAdditions.m"; sourceTree = ""; }; + CD63A06D1ED3293F00D04814 /* CPImageView+CPAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "CPImageView+CPAdditions.h"; path = "../CrossPlatform/CPImageView+CPAdditions.h"; sourceTree = ""; }; + CD63A06E1ED3293F00D04814 /* CPImageView+CPAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "CPImageView+CPAdditions.m"; path = "../CrossPlatform/CPImageView+CPAdditions.m"; sourceTree = ""; }; + CD63A06F1ED3293F00D04814 /* CPScreen+CPAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "CPScreen+CPAdditions.h"; path = "../CrossPlatform/CPScreen+CPAdditions.h"; sourceTree = ""; }; + CD63A0701ED3293F00D04814 /* CPScreen+CPAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "CPScreen+CPAdditions.m"; path = "../CrossPlatform/CPScreen+CPAdditions.m"; sourceTree = ""; }; + CD63A0711ED3293F00D04814 /* CPTextField+CPAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "CPTextField+CPAdditions.h"; path = "../CrossPlatform/CPTextField+CPAdditions.h"; sourceTree = ""; }; + CD63A0721ED3293F00D04814 /* CPTextField+CPAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "CPTextField+CPAdditions.m"; path = "../CrossPlatform/CPTextField+CPAdditions.m"; sourceTree = ""; }; + CD63A0731ED3293F00D04814 /* CPView+CPAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "CPView+CPAdditions.h"; path = "../CrossPlatform/CPView+CPAdditions.h"; sourceTree = ""; }; + CD63A0741ED3293F00D04814 /* CPView+CPAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "CPView+CPAdditions.m"; path = "../CrossPlatform/CPView+CPAdditions.m"; sourceTree = ""; }; + CD63A0751ED3293F00D04814 /* CrossPlatformDefinitions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CrossPlatformDefinitions.h; path = ../CrossPlatform/CrossPlatformDefinitions.h; sourceTree = ""; }; + CD63A0761ED3293F00D04814 /* NSObject+CPAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSObject+CPAdditions.h"; path = "../CrossPlatform/NSObject+CPAdditions.h"; sourceTree = ""; }; + CD63A0771ED3293F00D04814 /* NSObject+CPAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSObject+CPAdditions.m"; path = "../CrossPlatform/NSObject+CPAdditions.m"; sourceTree = ""; }; + CD63A08C1ED3298400D04814 /* CocoaDebugDescription.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CocoaDebugDescription.h; path = ../CocoaDebugDescription.h; sourceTree = ""; }; + CD63A08D1ED3298400D04814 /* CocoaDebugDescription.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CocoaDebugDescription.m; path = ../CocoaDebugDescription.m; sourceTree = ""; }; + CD63A08E1ED3298400D04814 /* CocoaDebugSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CocoaDebugSettings.h; path = ../CocoaDebugSettings.h; sourceTree = ""; }; + CD63A08F1ED3298400D04814 /* CocoaDebugSettings.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CocoaDebugSettings.m; path = ../CocoaDebugSettings.m; sourceTree = ""; }; + CD63A0901ED3298400D04814 /* CocoaDebugView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CocoaDebugView.h; path = ../CocoaDebugView.h; sourceTree = ""; }; + CD63A0911ED3298400D04814 /* CocoaDebugView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CocoaDebugView.m; path = ../CocoaDebugView.m; sourceTree = ""; }; + CD63A0921ED3298400D04814 /* CocoaPropertyEnumerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CocoaPropertyEnumerator.h; path = ../CocoaPropertyEnumerator.h; sourceTree = ""; }; + CD63A0931ED3298400D04814 /* CocoaPropertyEnumerator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CocoaPropertyEnumerator.m; path = ../CocoaPropertyEnumerator.m; sourceTree = ""; }; + CD63A13B1ED3707600D04814 /* AlertCautionIcon.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = AlertCautionIcon.icns; sourceTree = ""; }; + CD63A1491ED7308E00D04814 /* CocoaPropertyLine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CocoaPropertyLine.h; path = ../CocoaPropertyLine.h; sourceTree = ""; }; + CD63A14A1ED7308E00D04814 /* CocoaPropertyLine.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CocoaPropertyLine.m; path = ../CocoaPropertyLine.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -126,21 +72,12 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - CD27623E1B0E30210000BB5D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - CD4DF0E71ED0C31D000E78A0 /* CocoaDebugKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ CD2761E11B0E1C050000BB5D = { isa = PBXGroup; children = ( - CD2762421B0E30210000BB5D /* Test Application */, CD2761ED1B0E1C050000BB5D /* CocoaDebugKit */, CD2761EC1B0E1C050000BB5D /* Products */, ); @@ -150,7 +87,6 @@ isa = PBXGroup; children = ( CD2761EB1B0E1C050000BB5D /* CocoaDebugKit.framework */, - CD2762411B0E30210000BB5D /* Test Application.app */, ); name = Products; sourceTree = ""; @@ -175,44 +111,7 @@ CD63A13B1ED3707600D04814 /* AlertCautionIcon.icns */, CD2761EF1B0E1C050000BB5D /* Info.plist */, ); - name = "Supporting Files"; - sourceTree = ""; - }; - CD2762421B0E30210000BB5D /* Test Application */ = { - isa = PBXGroup; - children = ( - CD2762451B0E30210000BB5D /* AppDelegate.h */, - CD2762461B0E30210000BB5D /* AppDelegate.m */, - CD57963F1CC570170014BFD0 /* Test Objects */, - CD27624A1B0E30210000BB5D /* Images.xcassets */, - CD27624C1B0E30210000BB5D /* MainMenu.xib */, - CD2762431B0E30210000BB5D /* Supporting Files */, - ); - path = "Test Application"; - sourceTree = ""; - }; - CD2762431B0E30210000BB5D /* Supporting Files */ = { - isa = PBXGroup; - children = ( - CDD76DDB1CCEB2DE00AD5E8F /* Settings */, - CD2762441B0E30210000BB5D /* Info.plist */, - CD21815E1EC897D200D84381 /* image.jpg */, - CD2762481B0E30210000BB5D /* main.m */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - CD57963F1CC570170014BFD0 /* Test Objects */ = { - isa = PBXGroup; - children = ( - CDBBC8451B70E31600923E3E /* TestObject.h */, - CDBBC8461B70E31600923E3E /* TestObject.m */, - CDE848D71CCE75E900DD5A00 /* SecondObject.h */, - CDE848D81CCE75E900DD5A00 /* SecondObject.m */, - CD5796421CC585CA0014BFD0 /* Person.h */, - CD5796431CC585CA0014BFD0 /* Person.m */, - ); - name = "Test Objects"; + path = "Supporting Files"; sourceTree = ""; }; CD63A06A1ED3293000D04814 /* Cross Platform */ = { @@ -329,16 +228,6 @@ name = "Property Line"; sourceTree = ""; }; - CDD76DDB1CCEB2DE00AD5E8F /* Settings */ = { - isa = PBXGroup; - children = ( - CD5796401CC576A40014BFD0 /* com.kladek.CocoaDebugKit.settings.default.plist */, - CD57964A1CC632D40014BFD0 /* com.kladek.CocoaDebugKit.settings.dusk.plist */, - CD8962DC1CC63B2C001E6749 /* com.kladek.CocoaDebugKit.settings.basic.plist */, - ); - name = Settings; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -384,46 +273,24 @@ productReference = CD2761EB1B0E1C050000BB5D /* CocoaDebugKit.framework */; productType = "com.apple.product-type.framework"; }; - CD2762401B0E30210000BB5D /* Test Application */ = { - isa = PBXNativeTarget; - buildConfigurationList = CD27625B1B0E30210000BB5D /* Build configuration list for PBXNativeTarget "Test Application" */; - buildPhases = ( - CD27623D1B0E30210000BB5D /* Sources */, - CD27623E1B0E30210000BB5D /* Frameworks */, - CD27623F1B0E30210000BB5D /* Resources */, - CD39ADEB1CE0ADAC009ED057 /* ShellScript */, - CD4DF0EB1ED0C31D000E78A0 /* Embed Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - CD4DF0EA1ED0C31D000E78A0 /* PBXTargetDependency */, - ); - name = "Test Application"; - productName = "Test Application"; - productReference = CD2762411B0E30210000BB5D /* Test Application.app */; - productType = "com.apple.product-type.application"; - }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ CD2761E21B0E1C050000BB5D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0620; + LastUpgradeCheck = 1140; ORGANIZATIONNAME = "Patrick Kladek"; TargetAttributes = { CD2761EA1B0E1C050000BB5D = { CreatedOnToolsVersion = 6.2; - }; - CD2762401B0E30210000BB5D = { - CreatedOnToolsVersion = 6.2; + ProvisioningStyle = Automatic; }; }; }; buildConfigurationList = CD2761E51B0E1C050000BB5D /* Build configuration list for PBXProject "CocoaDebugKit" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, @@ -434,7 +301,6 @@ projectDirPath = ""; projectRoot = ""; targets = ( - CD2762401B0E30210000BB5D /* Test Application */, CD2761EA1B0E1C050000BB5D /* CocoaDebugKit */, ); }; @@ -449,35 +315,9 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - CD27623F1B0E30210000BB5D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - CD8962DD1CC63B2C001E6749 /* com.kladek.CocoaDebugKit.settings.basic.plist in Resources */, - CD57964B1CC632D40014BFD0 /* com.kladek.CocoaDebugKit.settings.dusk.plist in Resources */, - CD27624B1B0E30210000BB5D /* Images.xcassets in Resources */, - CD5796411CC576A40014BFD0 /* com.kladek.CocoaDebugKit.settings.default.plist in Resources */, - CD27624E1B0E30210000BB5D /* MainMenu.xib in Resources */, - CD21815F1EC897D200D84381 /* image.jpg in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - CD39ADEB1CE0ADAC009ED057 /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "#!/bin/bash\nbuildNumber=$(/usr/libexec/PlistBuddy -c \"Print CFBundleVersion\" \"$INFOPLIST_FILE\")\nbuildNumber=$(($buildNumber + 1))\n/usr/libexec/PlistBuddy -c \"Set :CFBundleVersion $buildNumber\" \"$INFOPLIST_FILE\""; - }; CD57962A1CC523830014BFD0 /* Run Script */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -513,62 +353,44 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - CD27623D1B0E30210000BB5D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - CDE848D91CCE75E900DD5A00 /* SecondObject.m in Sources */, - CD2762491B0E30210000BB5D /* main.m in Sources */, - CDBBC8471B70E31600923E3E /* TestObject.m in Sources */, - CD5796441CC585CA0014BFD0 /* Person.m in Sources */, - CD2762471B0E30210000BB5D /* AppDelegate.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXSourcesBuildPhase section */ -/* Begin PBXTargetDependency section */ - CD4DF0EA1ED0C31D000E78A0 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = CD2761EA1B0E1C050000BB5D /* CocoaDebugKit */; - targetProxy = CD4DF0E91ED0C31D000E78A0 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - CD27624C1B0E30210000BB5D /* MainMenu.xib */ = { - isa = PBXVariantGroup; - children = ( - CD27624D1B0E30210000BB5D /* Base */, - ); - name = MainMenu.xib; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - /* Begin XCBuildConfiguration section */ CD2761FF1B0E1C050000BB5D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", @@ -584,7 +406,7 @@ MACOSX_DEPLOYMENT_TARGET = 10.9; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; - SDKROOT = macosx; + SDKROOT = iphoneos; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; @@ -594,17 +416,28 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; @@ -613,6 +446,7 @@ ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; @@ -621,7 +455,7 @@ GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.9; MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = macosx; + SDKROOT = iphoneos; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; @@ -631,20 +465,28 @@ isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = NO; - CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_VERSION = A; - INFOPLIST_FILE = CocoaDebugKit/Info.plist; + INFOPLIST_FILE = "$(SRCROOT)/CocoaDebugKit/Supporting Files/Info.plist"; INSTALL_PATH = "@executable_path/../Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.6; + PRODUCT_BUNDLE_IDENTIFIER = "com.kladek.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = CocoaDebugKit; - SDKROOT = macosx; + PROVISIONING_PROFILE_SPECIFIER = ""; + SDKROOT = iphoneos; SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphonesimulator iphoneos macosx"; + SUPPORTS_MACCATALYST = NO; + TARGETED_DEVICE_FAMILY = "1,2"; + VALID_ARCHS = "arm64 arm64e armv7 armv7s x86_64 i386"; }; name = Debug; }; @@ -652,54 +494,28 @@ isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = NO; - CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_VERSION = A; - INFOPLIST_FILE = CocoaDebugKit/Info.plist; + INFOPLIST_FILE = "$(SRCROOT)/CocoaDebugKit/Supporting Files/Info.plist"; INSTALL_PATH = "@executable_path/../Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.6; + PRODUCT_BUNDLE_IDENTIFIER = "com.kladek.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = CocoaDebugKit; - SDKROOT = macosx; + PROVISIONING_PROFILE_SPECIFIER = ""; + SDKROOT = iphoneos; SKIP_INSTALL = YES; - }; - name = Release; - }; - CD27625C1B0E30210000BB5D /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = NO; - CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = "Test Application/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.9; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - }; - name = Debug; - }; - CD27625D1B0E30210000BB5D /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = NO; - CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - INFOPLIST_FILE = "Test Application/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.9; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; + SUPPORTED_PLATFORMS = "iphonesimulator iphoneos macosx"; + SUPPORTS_MACCATALYST = NO; + TARGETED_DEVICE_FAMILY = "1,2"; + VALID_ARCHS = "arm64 arm64e armv7 armv7s x86_64 i386"; }; name = Release; }; @@ -724,15 +540,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - CD27625B1B0E30210000BB5D /* Build configuration list for PBXNativeTarget "Test Application" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - CD27625C1B0E30210000BB5D /* Debug */, - CD27625D1B0E30210000BB5D /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; /* End XCConfigurationList section */ }; rootObject = CD2761E21B0E1C050000BB5D /* Project object */; diff --git a/macOS/CocoaDebugKit.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/CocoaDebugKit/CocoaDebugKit.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from macOS/CocoaDebugKit.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to CocoaDebugKit/CocoaDebugKit.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/macOS/CocoaDebugKit.xcodeproj/project.xcworkspace/xcshareddata/CocoaDebugKit.xccheckout b/CocoaDebugKit/CocoaDebugKit.xcodeproj/project.xcworkspace/xcshareddata/CocoaDebugKit.xccheckout similarity index 100% rename from macOS/CocoaDebugKit.xcodeproj/project.xcworkspace/xcshareddata/CocoaDebugKit.xccheckout rename to CocoaDebugKit/CocoaDebugKit.xcodeproj/project.xcworkspace/xcshareddata/CocoaDebugKit.xccheckout diff --git a/CocoaDebugKit/CocoaDebugKit.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/CocoaDebugKit/CocoaDebugKit.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/CocoaDebugKit/CocoaDebugKit.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/macOS/CocoaDebugKit.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/CocoaDebugKit/CocoaDebugKit.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings similarity index 100% rename from macOS/CocoaDebugKit.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings rename to CocoaDebugKit/CocoaDebugKit.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings diff --git a/CocoaDebugKit/CocoaDebugKit.xcodeproj/xcshareddata/xcschemes/CocoaDebugKit.xcscheme b/CocoaDebugKit/CocoaDebugKit.xcodeproj/xcshareddata/xcschemes/CocoaDebugKit.xcscheme new file mode 100644 index 0000000..c5bf650 --- /dev/null +++ b/CocoaDebugKit/CocoaDebugKit.xcodeproj/xcshareddata/xcschemes/CocoaDebugKit.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Shared/CocoaDebugDescription.h b/CocoaDebugKit/CocoaDebugKit/CocoaDebugDescription.h similarity index 99% rename from Shared/CocoaDebugDescription.h rename to CocoaDebugKit/CocoaDebugKit/CocoaDebugDescription.h index 26ef904..87eae8c 100644 --- a/Shared/CocoaDebugDescription.h +++ b/CocoaDebugKit/CocoaDebugKit/CocoaDebugDescription.h @@ -18,7 +18,6 @@ @property (nonatomic) BOOL save; @property (nonatomic) NSURL *saveUrl; - + (CocoaDebugDescription *)debugDescription; + (CocoaDebugDescription *)debugDescriptionForObject:(NSObject *)obj; @@ -31,10 +30,3 @@ - (BOOL)saveDebugDescriptionToUrl:(NSURL *)url error:(NSError **)error; @end - - - - - - - diff --git a/CocoaDebugKit/CocoaDebugKit/CocoaDebugDescription.m b/CocoaDebugKit/CocoaDebugKit/CocoaDebugDescription.m new file mode 100644 index 0000000..456b984 --- /dev/null +++ b/CocoaDebugKit/CocoaDebugKit/CocoaDebugDescription.m @@ -0,0 +1,170 @@ +// +// CocoaDebugDescription.m +// CocoaDebugKit +// +// Created by Patrick Kladek on 19.04.16. +// Copyright (c) 2016 Patrick Kladek. All rights reserved. +// + +#import "CocoaDebugDescription.h" +#import "CocoaPropertyEnumerator.h" +#import "CocoaDebugSettings.h" +#import "NSObject+CPAdditions.h" + + +@interface CocoaDebugDescription () + +@property (nonatomic) CocoaPropertyEnumerator *propertyEnumerator; +@property (nonatomic) NSMutableArray *lines; +@property (nonatomic) NSInteger typeLenght; + +@end + + +@implementation CocoaDebugDescription + ++ (CocoaDebugDescription *)debugDescription +{ + CocoaDebugDescription *description = [[self alloc] init]; + return description; +} + ++ (CocoaDebugDescription *)debugDescriptionForObject:(NSObject *)obj +{ + CocoaDebugDescription *description = [[self alloc] init]; + [description addAllPropertiesFromObject:obj]; + return description; +} + +- (instancetype)init +{ + self = [super init]; + if (self) { + _propertyEnumerator = [[CocoaPropertyEnumerator alloc] init]; + _lines = [NSMutableArray array]; + _typeLenght = 0; + + CocoaDebugSettings *settings = [CocoaDebugSettings sharedSettings]; + + self.dataMaxLenght = settings.maxDataLenght; + self.save = settings.save; + self.saveUrl = settings.saveUrl; + } + return self; +} + +- (void)addAllPropertiesFromObject:(NSObject *)obj +{ + _obj = obj; + + Class currentClass = [obj class]; + + while (currentClass != nil && currentClass != [NSObject class]) { + [self.propertyEnumerator enumeratePropertiesFromClass:currentClass + allowed:nil + block:^(NSString *type, NSString *name) { + [self addProperty:name type:type fromObject:obj]; + }]; + + currentClass = [currentClass superclass]; + } +} + +- (void)addProperty:(NSString *)name type:(NSString *)type fromObject:(NSObject *)obj +{ + if (!_obj) { + _obj = obj; + } + + + Class class = NSClassFromString(type); + + if ([class isSubclassOfClass:[NSData class]]) { + NSData *data = [obj valueForKey:name]; + + // cut lenght to 100 byte + if ([data length] > self.dataMaxLenght.integerValue) { + data = [data subdataWithRange:NSMakeRange(0, self.dataMaxLenght.integerValue)]; + } + + [self addDescriptionLine:[CocoaPropertyLine lineWithType:type name:name value:[data description]]]; + return; + } + + if ([class isSubclassOfClass:[CPImage class]]) { + CPImage *image = [obj valueForKey:name]; + NSString *imageDescription = [NSString stringWithFormat:@"size: %.0fx%.0f", image.size.width, image.size.height]; + [self addDescriptionLine:[CocoaPropertyLine lineWithType:type name:name value:imageDescription]]; + return; + } + + + id value = [obj valueForKey:name]; + NSString *description = [[value description] stringByReplacingOccurrencesOfString:@"\n" withString:[NSString stringWithFormat:@"\n%@", [self _spaceFromLenght:4]]]; + [self addDescriptionLine:[CocoaPropertyLine lineWithType:type name:name value:description]]; +} + +- (NSString *)stringRepresentation +{ + NSMutableString *string = [NSMutableString stringWithFormat:@"<%p> %@ {\n", _obj, _obj.cp_className]; + for (CocoaPropertyLine *line in self.lines) { + NSInteger deltaLenght = self.typeLenght - (line.type.length + line.name.length); + [string appendFormat:@"\t%@%@ %@ = %@\n", line.type, [self _spaceFromLenght:deltaLenght], line.name, line.value]; + } + + [string appendString:@"}"]; + return string; +} + +- (void)saveDebugDescription +{ + NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary]; + NSString *appVersion = [infoDict objectForKey:@"CFBundleShortVersionString"];// example: 1.0.0 + NSString *buildNumber = [infoDict objectForKey:@"CFBundleVersion"];// example: 42 + + NSURL *url = [_saveUrl URLByAppendingPathComponent:appVersion]; + url = [url URLByAppendingPathComponent:buildNumber]; + + NSError *error; + if (![[NSFileManager defaultManager] createDirectoryAtURL:url withIntermediateDirectories:YES attributes:nil error:&error]) { + NSLog(@"%@", error); + return; + } + + NSString *className = [_obj cp_className]; + + NSDictionary *debuggedObjects = [[CocoaDebugSettings sharedSettings] debuggedObjects]; + NSInteger debuggedCount = [[debuggedObjects valueForKey:className] integerValue]; + debuggedCount++; + [debuggedObjects setValue:[NSNumber numberWithInteger:debuggedCount] forKey:className]; + url = [url URLByAppendingPathComponent:[NSString stringWithFormat:@"%@ %li.txt", className, (long) debuggedCount]]; + + [self saveDebugDescriptionToUrl:url error:nil]; +} + +- (BOOL)saveDebugDescriptionToUrl:(NSURL *)url error:(NSError **)error +{ + return [[self stringRepresentation] writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:error]; +} + +#pragma mark - Private + +- (NSString *)_spaceFromLenght:(NSInteger)lenght +{ + NSMutableString *string = [[NSMutableString alloc] initWithCapacity:lenght]; + for (NSInteger i = 0; i < lenght; i++) { + [string appendString:@" "]; + } + return string; +} + +- (void)addDescriptionLine:(CocoaPropertyLine *)line +{ + if (line.type.length + line.name.length > self.typeLenght) { + self.typeLenght = line.type.length + line.name.length; + } + + [self.lines addObject:line]; +} + +@end diff --git a/macOS/CocoaDebugKit/CocoaDebugKit.h b/CocoaDebugKit/CocoaDebugKit/CocoaDebugKit.h similarity index 92% rename from macOS/CocoaDebugKit/CocoaDebugKit.h rename to CocoaDebugKit/CocoaDebugKit/CocoaDebugKit.h index 9f3aa1a..1eba150 100644 --- a/macOS/CocoaDebugKit/CocoaDebugKit.h +++ b/CocoaDebugKit/CocoaDebugKit/CocoaDebugKit.h @@ -6,12 +6,15 @@ // Copyright (c) 2015 Patrick Kladek. All rights reserved. // +#include + #if TARGET_OS_IPHONE -// iOS code + @import UIKit; #else -#import + @import AppKit; #endif + //! Project version number for CocoaDebugKit. FOUNDATION_EXPORT double CocoaDebugFrameworkVersionNumber; diff --git a/Shared/CocoaDebugSettings.h b/CocoaDebugKit/CocoaDebugKit/CocoaDebugSettings.h similarity index 56% rename from Shared/CocoaDebugSettings.h rename to CocoaDebugKit/CocoaDebugKit/CocoaDebugSettings.h index 204c0bf..9d42fe1 100644 --- a/Shared/CocoaDebugSettings.h +++ b/CocoaDebugKit/CocoaDebugKit/CocoaDebugSettings.h @@ -10,20 +10,16 @@ #import "CrossPlatformDefinitions.h" - -@interface CocoaDebugSettings : NSObject +@interface CocoaDebugSettings: NSObject + (CocoaDebugSettings *)sharedSettings; @property (nonatomic, readonly) NSURL *url; @property (nonatomic, readonly) BOOL hasSettings; - - -@property (nonatomic) NSInteger lineSpace; -@property (nonatomic) BOOL highlightKeywords; -@property (nonatomic) BOOL highlightNumbers; - +@property (nonatomic) NSInteger lineSpace; +@property (nonatomic) BOOL highlightKeywords; +@property (nonatomic) BOOL highlightNumbers; @property (nonatomic) CPColor *textColor; @property (nonatomic) CPFont *textFont; @@ -44,29 +40,22 @@ @property (nonatomic) CPColor *backgroundColor; @property (nonatomic) CPSize imageSize; -@property (nonatomic) NSString *dateFormat; - +@property (nonatomic) NSString *dateFormat; @property (nonatomic) CGSize maxSizeOfField; -@property (nonatomic) NSNumber *maxDataLenght; -@property (nonatomic) BOOL convertDataToImage; -@property (nonatomic) NSArray *propertyNameContains; - - -@property (nonatomic) BOOL save; -@property (nonatomic) NSURL *saveUrl; -@property (nonatomic) BOOL saveAsPDF; - - -@property (nonatomic) NSMutableDictionary *debuggedObjects; // used for numbering debugged views & descriptions - - -@property (nonatomic) NSInteger numberOfBitsPerColorComponent; +@property (nonatomic) NSNumber *maxDataLenght; +@property (nonatomic) BOOL convertDataToImage; +@property (nonatomic) NSArray *propertyNameContains; +@property (nonatomic) BOOL save; +@property (nonatomic) NSURL *saveUrl; +@property (nonatomic) BOOL saveAsPDF; +@property (nonatomic) NSMutableDictionary *debuggedObjects; // used for numbering debugged views & descriptions +@property (nonatomic) NSInteger numberOfBitsPerColorComponent; -- (BOOL)loadSettings:(NSURL *)url; -- (BOOL)saveSettings:(NSURL *)url; +- (BOOL)loadSettings:(NSURL *)url; +- (BOOL)saveSettings:(NSURL *)url; @end diff --git a/CocoaDebugKit/CocoaDebugKit/CocoaDebugSettings.m b/CocoaDebugKit/CocoaDebugKit/CocoaDebugSettings.m new file mode 100644 index 0000000..73f5135 --- /dev/null +++ b/CocoaDebugKit/CocoaDebugKit/CocoaDebugSettings.m @@ -0,0 +1,223 @@ +// +// CocoaDebugself.settings.m +// CocoaDebugKit +// +// Created by Patrick Kladek on 19.04.16. +// Copyright (c) 2016 Patrick Kladek. All rights reserved. +// + +#import "CocoaDebugSettings.h" + + +static CPColor *NSColorFromHexString(NSString *inColorString) +{ + CPColor *result = nil; + unsigned colorCode = 0; + unsigned char redByte, greenByte, blueByte, alphaByte; + + if (nil != inColorString) { + NSScanner *scanner = [NSScanner scannerWithString:inColorString]; + (void) [scanner scanHexInt:&colorCode]; // ignore error + } + redByte = (unsigned char) (colorCode >> 24); + greenByte = (unsigned char) (colorCode >> 16); + blueByte = (unsigned char) (colorCode >> 8); + alphaByte = (unsigned char) (colorCode); // masks off high bits + + result = [CPColor colorWithRed:(CGFloat)redByte/0xff green:(CGFloat)greenByte/0xff blue:(CGFloat)blueByte/0xff alpha:(CGFloat)alphaByte/0xff]; + return result; +} + + +@interface CocoaDebugSettings () + +@property (nonatomic) NSDictionary *settings; + +@end + + +@implementation CocoaDebugSettings + ++ (CocoaDebugSettings *)sharedSettings +{ + __strong static id _sharedObject = nil; + + static dispatch_once_t p = 0; + + dispatch_once(&p, ^{ + _sharedObject = [[self alloc] init]; + }); + + return _sharedObject; +} + +- (instancetype)init +{ + self = [super init]; + if (self) { + _lineSpace = 7; + _highlightKeywords = true; + _highlightNumbers = true; + + _textColor = [CPColor blackColor]; + _textFont = [CPFont fontWithName:@"Menlo" size:12]; + + _keywordColor = [CPColor colorWithRed:0.592 green:0.000 blue:0.496 alpha:1.000]; + _keywordFont = [CPFont fontWithName:@"Menlo" size:12]; + + _numberColor = [CPColor colorWithRed:0.077 green:0.000 blue:0.766 alpha:1.000]; + _numberFont = [CPFont fontWithName:@"Menlo" size:12]; + + _propertyNameColor = [CPColor grayColor]; + _propertyNameFont = [CPFont fontWithName:@"Menlo" size:12]; + + _titleColor = [CPColor whiteColor]; + _titleFont = [CPFont fontWithName:@"Menlo-Bold" size:13]; + + + _frameColor = [CPColor blueColor]; + _backgroundColor = [CPColor whiteColor]; + _imageSize = CPMakeSize(30, 30); + + _maxSizeOfField = CGSizeMake(300, 500); + _maxDataLenght = [NSNumber numberWithInteger:50]; + _convertDataToImage = true; + _propertyNameContains = @[@"image", @"icon"]; + + _dateFormat = @"yyyy-MM-dd 'at' HH:mm"; + _numberOfBitsPerColorComponent = 8; + + _save = NO; + _saveUrl = [NSURL fileURLWithPath:[@"~/Desktop" stringByExpandingTildeInPath]]; + _saveAsPDF = NO; + + _debuggedObjects = [NSMutableDictionary dictionary]; + } + return self; +} + +- (BOOL)loadSettings:(NSURL *)url +{ + _url = url; + + self.settings = [NSDictionary dictionaryWithContentsOfURL:_url]; + + if (self.settings) { + [self importSettings]; + return YES; + } + + return NO; +} + +- (BOOL)saveSettings:(NSURL *)url +{ + @throw @"not implemented"; + return NO; +} + +- (void)importSettings +{ + if ([self.settings valueForKeyPath:@"debugView.keywords.highlight"]) { + _highlightKeywords = [[self.settings valueForKeyPath:@"debugView.keywords.highlight"] boolValue]; + } + + if ([self.settings valueForKeyPath:@"debugView.keywords.color"]) { + _keywordColor = NSColorFromHexString([self.settings valueForKeyPath:@"debugView.keywords.color"]); + } + + if ([self.settings valueForKeyPath:@"debugView.keywords.font"] && [self.settings valueForKeyPath:@"debugView.keywords.size"]) { + _keywordFont = [CPFont fontWithName:[self.settings valueForKeyPath:@"debugView.keywords.font"] size:[[self.settings valueForKeyPath:@"debugView.keywords.size"] integerValue]]; + } + + if ([self.settings valueForKeyPath:@"debugView.numbers.highlight"]) { + _highlightNumbers = [[self.settings valueForKeyPath:@"debugView.numbers.highlight"] boolValue]; + } + + if ([self.settings valueForKeyPath:@"debugView.numbers.color"]) { + _numberColor = NSColorFromHexString([self.settings valueForKeyPath:@"debugView.numbers.color"]); + } + + if ([self.settings valueForKeyPath:@"debugView.numbers.font"] && [self.settings valueForKeyPath:@"debugView.numbers.size"]) { + _numberFont = [CPFont fontWithName:[self.settings valueForKeyPath:@"debugView.numbers.font"] size:[[self.settings valueForKeyPath:@"debugView.numbers.size"] integerValue]]; + } + + if ([self.settings valueForKeyPath:@"debugView.text.color"]) { + _textColor = NSColorFromHexString([self.settings valueForKeyPath:@"debugView.text.color"]); + } + + if ([self.settings valueForKeyPath:@"debugView.text.font"] && [self.settings valueForKeyPath:@"debugView.text.size"]) { + _textFont = [CPFont fontWithName:[self.settings valueForKeyPath:@"debugView.text.font"] size:[[self.settings valueForKeyPath:@"debugView.text.size"] integerValue]]; + } + + if ([self.settings valueForKeyPath:@"debugView.propertyName.color"]) { + _propertyNameColor = NSColorFromHexString([self.settings valueForKeyPath:@"debugView.propertyName.color"]); + } + + if ([self.settings valueForKeyPath:@"debugView.propertyName.font"] && [self.settings valueForKeyPath:@"debugView.propertyName.size"]) { + _propertyNameFont = [CPFont fontWithName:[self.settings valueForKeyPath:@"debugView.propertyName.font"] size:[[self.settings valueForKeyPath:@"debugView.propertyName.size"] integerValue]]; + } + + if ([self.settings valueForKeyPath:@"debugView.title.color"]) { + _titleColor = NSColorFromHexString([self.settings valueForKeyPath:@"debugView.title.color"]); + } + + if ([self.settings valueForKeyPath:@"debugView.title.font"] && [self.settings valueForKeyPath:@"debugView.title.size"]) { + _titleFont = [CPFont fontWithName:[self.settings valueForKeyPath:@"debugView.title.font"] size:[[self.settings valueForKeyPath:@"debugView.title.size"] integerValue]]; + } + + if ([self.settings valueForKeyPath:@"debugView.image.size"]) { + _imageSize = CPSizeFromString([self.settings valueForKeyPath:@"debugView.image.size"]); + } + + if ([self.settings valueForKeyPath:@"debugView.appearance.lineSpace"]) { + _lineSpace = [[self.settings valueForKeyPath:@"debugView.appearance.lineSpace"] integerValue]; + } + + if ([self.settings valueForKeyPath:@"debugView.appearance.backgroundColor"]) { + _backgroundColor = NSColorFromHexString([self.settings valueForKeyPath:@"debugView.appearance.backgroundColor"]); + } + + if ([self.settings valueForKeyPath:@"debugView.appearance.frameColor"]) { + _frameColor = NSColorFromHexString([self.settings valueForKeyPath:@"debugView.appearance.frameColor"]); + } + + if ([self.settings valueForKeyPath:@"debugView.appearance.numberOfBitsPerColorComponent"]) { + _numberOfBitsPerColorComponent = [[self.settings valueForKeyPath:@"debugView.appearance.numberOfBitsPerColorComponent"] integerValue]; + } + + if ([self.settings valueForKeyPath:@"debugDescription.NSData.cutLenght"]) { + _maxDataLenght = [self.settings valueForKeyPath:@"debugDescription.NSData.cutLenght"]; + } + + if ([self.settings valueForKeyPath:@"debugView.image.dataToImage"]) { + _convertDataToImage = [[self.settings valueForKeyPath:@"debugView.image.dataToImage"] boolValue]; + } + + if ([self.settings valueForKeyPath:@"debugView.image.propertyNameContains"]) { + _propertyNameContains = [self.settings valueForKeyPath:@"debugView.image.propertyNameContains"]; + } + + if ([self.settings valueForKeyPath:@"debugView.appearance.save"]) { + _save = [[self.settings valueForKeyPath:@"debugView.appearance.save"] boolValue]; + } + + if ([self.settings valueForKeyPath:@"debugView.appearance.path"]) { + _saveUrl = [NSURL fileURLWithPath:[[self.settings valueForKeyPath:@"debugView.appearance.path"] stringByExpandingTildeInPath]]; + } + + if ([self.settings valueForKeyPath:@"debugView.appearance.usePDF"]) { + _saveAsPDF = [[self.settings valueForKeyPath:@"debugView.appearance.usePDF"] boolValue]; + } + + if ([self.settings valueForKeyPath:@"debugView.appearance.maxFieldSize.width"] && [self.settings valueForKeyPath:@"debugView.appearance.maxFieldSize.height"]) { + _maxSizeOfField.width = [[self.settings valueForKeyPath:@"debugView.appearance.maxFieldSize.width"] floatValue]; + _maxSizeOfField.height = [[self.settings valueForKeyPath:@"debugView.appearance.maxFieldSize.height"] floatValue]; + } + + if ([self.settings valueForKeyPath:@"debugView.NSDate.format"]) { + _dateFormat = [self.settings valueForKeyPath:@"debugView.NSDate.format"]; + } +} + +@end diff --git a/Shared/CocoaDebugView.h b/CocoaDebugKit/CocoaDebugKit/CocoaDebugView.h similarity index 89% rename from Shared/CocoaDebugView.h rename to CocoaDebugKit/CocoaDebugKit/CocoaDebugView.h index 411859f..ed1e6db 100644 --- a/Shared/CocoaDebugView.h +++ b/CocoaDebugKit/CocoaDebugKit/CocoaDebugView.h @@ -57,22 +57,22 @@ /** * Creates a new debugView with all properties from Object. * - * @param obj: the object for which the debugView will be created. - * @param include: includes properties from Superclasses if true, otherwise only properties from current class. + * @param obj the object for which the debugView will be created. + * @param include includes properties from Superclasses if true, otherwise only properties from current class. */ + (CocoaDebugView *)debugViewWithAllPropertiesOfObject:(NSObject *)obj includeSuperclasses:(BOOL)include; /** * Creates a new debugView with all properties specified. Will also search in Superclasses. * - * @param properties: An array of properties (NSString) which will be added to the debugView. - * @param obj: the object for which the debugView will be created. + * @param properties An array of properties (NSString) which will be added to the debugView. + * @param obj the object for which the debugView will be created. */ + (CocoaDebugView *)debugViewWithProperties:(NSArray *)properties ofObject:(NSObject *)obj; /** * Creates a new debugView with all properties from Object excluding named properties. - * @param properties: exclude properties from debugView. + * @param properties exclude properties from debugView. */ + (CocoaDebugView *)debugViewWithExcludingProperties:(NSArray *)properties ofObject:(NSObject *)obj; diff --git a/CocoaDebugKit/CocoaDebugKit/CocoaDebugView.m b/CocoaDebugKit/CocoaDebugKit/CocoaDebugView.m new file mode 100644 index 0000000..0f091fb --- /dev/null +++ b/CocoaDebugKit/CocoaDebugKit/CocoaDebugView.m @@ -0,0 +1,1119 @@ +// +// CocoaDebugView.m +// CocoaDebugKit +// +// Created by Patrick Kladek on 21.05.15. +// Copyright (c) 2015 Patrick Kladek. All rights reserved. +// + +#import +#import "CocoaDebugSettings.h" +#import "CocoaDebugView.h" +#import "CocoaPropertyEnumerator.h" +#import "CPColor+CPAdditions.h" +#import "CPImageView+CPAdditions.h" +#import "CPScreen+CPAdditions.h" +#import "CPTextField+CPAdditions.h" +#import "CPView+CPAdditions.h" +#import "NSObject+CPAdditions.h" + + +/** + * @todo - implement a protocol to support custom classes in debugView (simple representation like Color) + * - detailViewForError: find a way to resize the view based on its content + * - CoreData Relationships may not work + */ + +@interface CocoaDebugView () +{ + NSInteger pos; + NSInteger leftWidth; + NSInteger rightWidth; + + CPTextField *titleTextField; + CPTextField *defaultTextField; + + CAGradientLayer *titleGradient; + + CocoaPropertyEnumerator *propertyEnumerator; +} + +- (void)_addLineWithDescription:(NSString *)desc string:(NSString *)value leftColor:(CPColor *)leftColor rightColor:(CPColor *)rightColor leftFont:(CPFont *)lFont rightFont:(CPFont *)rfont; ++ (CPImage *)_imageFromView:(CPView *)view; + +@end + + +@implementation CocoaDebugView + ++ (instancetype)debugView +{ + return [[self alloc] init]; +} + +/** + * @note: maybe could be simplyfied by calling '-debugViewWithProperties: ofObject:' by passing nil to array + * @note: this would mean we ignore includeSuperclasses and adding parameter includeSuberclasses to 'debugViewWithProperties:ofObject:' would be confusing. + */ ++ (instancetype)debugViewWithAllPropertiesOfObject:(NSObject *)obj includeSuperclasses:(BOOL)include +{ + CocoaDebugView *view = [self debugView]; + [view setObj:obj]; + + if (include) { + [view setTitle:[view traceSuperClassesOfObject:obj]]; + } else { + [view setTitle:NSStringFromClass([obj class])]; + } + + [view addAllPropertiesFromObject:obj includeSuperclasses:include]; + + if ([view save]) { + [view saveDebugView]; + } + + return view; +} + ++ (instancetype)debugViewWithProperties:(NSArray *)properties ofObject:(NSObject *)obj +{ + CocoaDebugView *view = [self debugView]; + [view setObj:obj]; + + [view setTitle:[view traceSuperClassesOfObject:obj]]; + [view addProperties:properties fromObject:obj]; + + if ([view save]) { + [view saveDebugView]; + } + + return view; +} + ++ (instancetype)debugViewWithExcludingProperties:(NSArray *)properties ofObject:(NSObject *)obj +{ + CocoaDebugView *view = [self debugView]; + [view setObj:obj]; + [view setTitle:[view traceSuperClassesOfObject:obj]]; + + CocoaPropertyEnumerator *enumerator = [[CocoaPropertyEnumerator alloc] init]; + Class currentClass = [obj class]; + + while (currentClass && currentClass != [NSObject class]) { + [enumerator enumeratePropertiesFromClass:currentClass allowed:nil block:^(NSString *type, NSString *name) { + BOOL found = false; + for (NSString *property in properties) { + if ([property isEqualToString:name]) { + found = true; + break; + } + } + + if (!found) { + [view addProperty:name type:type toObject:obj]; + } + }]; + + currentClass = [currentClass superclass]; + } + + return view; +} + +- (instancetype)init +{ + self = [super init]; + if (self) { + CocoaDebugSettings *settings = [CocoaDebugSettings sharedSettings]; + + self.lineSpace = settings.lineSpace; + self.highlightKeywords = settings.highlightKeywords; + self.highlightNumbers = settings.highlightNumbers; + + self.textColor = settings.textColor; + self.textFont = settings.textFont; + + self.keywordColor = settings.keywordColor; + self.keywordFont = settings.keywordFont; + + self.numberColor = settings.numberColor; + self.numberFont = settings.numberFont; + + self.propertyNameColor = settings.propertyNameColor; + self.propertyNameFont = settings.propertyNameFont; + + self.titleColor = settings.titleColor; + self.titleFont = settings.titleFont; + + self.backgroundColor = settings.backgroundColor; + self.frameColor = settings.frameColor; + + self.imageSize = settings.imageSize; + self.convertDataToImage = settings.convertDataToImage; + self.propertyNameContains = [NSMutableArray arrayWithArray:[settings propertyNameContains]]; + + self.save = settings.save; + self.saveUrl = settings.saveUrl; + self.saveAsPDF = settings.saveAsPDF; + + self.dateFormat = settings.dateFormat; + self.numberOfBitsPerColorComponent = settings.numberOfBitsPerColorComponent; + self.maxSizeOfField = settings.maxSizeOfField; + + + propertyEnumerator = [[CocoaPropertyEnumerator alloc] init]; + + + leftWidth = 0; + rightWidth = 0; + pos = 30; + + + [self setFrame:CPMakeRect(0, 0, 20, 55)]; + [self setTitle:@"CocoaDebugView"]; + [self setDefaultApperance]; + + self.layer.masksToBounds = YES; + +#if TARGET_OS_IPHONE + [super setBackgroundColor:_backgroundColor]; +#else + self.wantsLayer = YES; + [self.layer setBackgroundColor:[_backgroundColor CGColor]]; +#endif + + CPRect rect = CPMakeRect(0, 0, self.frame.size.width, 23); + titleGradient = [CAGradientLayer layer]; + titleGradient.frame = rect; + titleGradient.backgroundColor = [[CPColor whiteColor] CGColor]; + [self.layer insertSublayer:titleGradient atIndex:0]; + } + return self; +} + +- (void)drawRect:(CPRect)dirtyRect +{ + [super drawRect:dirtyRect]; + + [self.layer setCornerRadius:5]; + [self.layer setBorderColor:[_frameColor CGColor]]; + [self.layer setBorderWidth:1]; + [self.layer setBackgroundColor:[_backgroundColor CGColor]]; +} + +- (BOOL)isFlipped +{ + return YES; +} + +- (void)layoutSubviews +{ + [self resizeGradientLayer]; +} + +- (void)layoutSublayersOfLayer:(CALayer *)layer +{ + [self resizeGradientLayer]; +} + +- (void)resizeGradientLayer +{ + CPColor *startingColor = [_frameColor colorWithAlphaComponent:0.75]; + titleGradient.colors = @[(id) startingColor.CGColor, (id) _frameColor.CGColor]; + titleGradient.frame = CPMakeRect(titleGradient.frame.origin.x, titleGradient.frame.origin.y, self.frame.size.width, titleGradient.frame.size.height); +} + + +#pragma mark - Apperance + +- (void)setDefaultApperance +{ + [self removeDefaultApperance]; + + defaultTextField = [[CPTextField alloc] initWithFrame:CPMakeRect(10, pos, self.frame.size.width - 20, 20)]; + [defaultTextField cp_setText:@"No Variables"]; + [defaultTextField setTextColor:[CPColor grayColor]]; + [defaultTextField cp_setAlignment:CPAlignmentCenter]; + [defaultTextField cp_setBordered:NO]; + [defaultTextField cp_setEditable:NO]; + [defaultTextField setBackgroundColor:[CPColor clearColor]]; + [self addSubview:defaultTextField]; +} + +- (void)removeDefaultApperance +{ + if (defaultTextField) { + [defaultTextField removeFromSuperview]; + defaultTextField = nil; + } +} + +- (void)setTitle:(NSString *)title +{ + _title = title; + + if (titleTextField) { + [titleTextField removeFromSuperview]; + } + + +#if TARGET_OS_IPHONE + titleTextField = [self defaultLabelWithString:title point:CPMakePoint(10, 3) textAlignment:CPAlignmentLeft]; +#else + titleTextField = [self defaultLabelWithString:title point:CPMakePoint(10, 2) textAlignment:CPAlignmentLeft]; +#endif + + [titleTextField setIdentifier:@"title"]; + [titleTextField setFont:_titleFont]; + [titleTextField setTextColor:_titleColor]; + [titleTextField sizeToFit]; + + if (titleTextField.frame.size.width + 10 > self.frame.size.width) { + [self setFrame:CPMakeRect(self.frame.origin.x, self.frame.origin.y, titleTextField.frame.size.width + 10, self.frame.size.height)]; + } + + [self addSubview:titleTextField]; + + if (pos == 30) { + [self setDefaultApperance]; + } else { + [self removeDefaultApperance]; + } + + [self cp_update]; +} + +- (void)setColor:(CPColor *)color +{ + _frameColor = color; + [self cp_update]; +} + +// MARK: - Save + +- (CPImage *)imageRepresentation +{ + return [[self class] _imageFromView:self]; +} + +- (void)saveDebugView +{ + NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary]; + NSString *appVersion = [infoDict objectForKey:@"CFBundleShortVersionString"];// example: 1.0.0 + NSString *buildNumber = [infoDict objectForKey:@"CFBundleVersion"];// example: 42 + + NSURL *url = [_saveUrl URLByAppendingPathComponent:appVersion]; + url = [url URLByAppendingPathComponent:buildNumber]; + + NSError *error; + if (![[NSFileManager defaultManager] createDirectoryAtURL:url withIntermediateDirectories:YES attributes:nil error:&error]) { + NSLog(@"%@", error); + return; + } + + NSString *className = [self.obj cp_className]; + NSDictionary *debuggedObjects = [[CocoaDebugSettings sharedSettings] debuggedObjects]; + NSInteger debuggedNr = [[debuggedObjects valueForKey:className] integerValue]; + debuggedNr++; + [debuggedObjects setValue:[NSNumber numberWithInteger:debuggedNr] forKey:className]; + url = [url URLByAppendingPathComponent:[NSString stringWithFormat:@"%@ %li", className, (long) debuggedNr]]; + + if (_saveAsPDF) { + url = [url URLByAppendingPathExtension:@"pdf"]; + } else { + url = [url URLByAppendingPathExtension:@"png"]; + } + + [self saveDebugViewToUrl:url]; +} + +- (BOOL)saveDebugViewToUrl:(NSURL *)url +{ +#if TARGET_OS_IPHONE + CPImage *image = [CocoaDebugView _imageFromView:self]; + NSData *data = [self dataFromImage:image]; + return [data writeToURL:url atomically:YES]; +#else + if ([[url pathExtension] isEqualToString:@"pdf"]) { + NSData *data = [self dataWithPDFInsideRect:[self bounds]]; + return [data writeToURL:url atomically:YES]; + } + + CPImage *image = [CocoaDebugView _imageFromView:self]; + NSData *data = [self dataFromImage:image]; + return [data writeToURL:url atomically:YES]; +#endif +} + + +// MARK: - Add Data + +- (void)addAllPropertiesFromObject:(NSObject *)obj includeSuperclasses:(BOOL)include +{ + if (include) { + // enumerate all superclasses "class_copyPropertyList(...)" + Class currentClass = [obj class]; + + while (currentClass != nil && currentClass != [NSObject class]) { + [propertyEnumerator enumeratePropertiesFromClass:currentClass allowed:nil block:^(NSString *type, NSString *name) { + [self addProperty:name type:type toObject:obj]; + }]; + + [self addSeperator]; + + currentClass = [currentClass superclass]; + } + } else { + [propertyEnumerator enumeratePropertiesFromClass:[obj class] allowed:nil block:^(NSString *type, NSString *name) { + [self addProperty:name type:type toObject:obj]; + }]; + } +} + +- (void)addProperties:(NSArray *)array fromObject:(NSObject *)obj +{ + if (!array || array.count == 0) { return; } + + Class currentClass = [obj class]; + + while (currentClass && currentClass != [NSObject class]) { + [propertyEnumerator enumeratePropertiesFromClass:currentClass allowed:array block:^(NSString *type, NSString *name) { + [self addProperty:name type:type toObject:obj]; + }]; + + currentClass = [currentClass superclass]; + } +} + +#pragma mark - Add Objects + +- (void)addLineWithDescription:(NSString *)desc string:(NSString *)value +{ + if (value == nil || value == NULL || [value isEqualToString:@"(null)"]) { + value = @"nil"; + + if (_highlightKeywords == true) { + [self _addLineWithDescription:desc string:value leftColor:_propertyNameColor rightColor:_keywordColor leftFont:_propertyNameFont rightFont:_keywordFont]; + } else { + [self _addLineWithDescription:desc string:value leftColor:_propertyNameColor rightColor:_textColor leftFont:_propertyNameFont rightFont:_keywordFont]; + } + } else { + [self _addLineWithDescription:desc string:value leftColor:_propertyNameColor rightColor:_textColor leftFont:_propertyNameFont rightFont:_textFont]; + } +} + +- (void)addLineWithDescription:(NSString *)desc image:(CPImage *)image; +{ + if (!image) { + [self addLineWithDescription:desc string:nil]; + return; + } + + NSString *upperCaseDescription = [desc stringByReplacingCharactersInRange:NSMakeRange(0, 1) withString:[[desc substringToIndex:1] capitalizedString]]; + CPTextField *left = [self _addLeftLabel:upperCaseDescription color:_propertyNameColor font:_propertyNameFont]; + + CPImageView *imageView = [[CPImageView alloc] initWithFrame:CPMakeRect(10 + leftWidth + 20, pos, _imageSize.width, _imageSize.height)]; + [imageView setImage:image]; + [imageView setIdentifier:@"rightImage"]; + [imageView cp_setImageScaling:CPImageScaleProportionallyUpOrDown]; + [self synchroniseRightWidthFromView:imageView]; + [self addSubview:imageView]; + + [self synchroniseHeightOfView:left secondView:imageView]; + pos = pos + imageView.frame.size.height + _lineSpace; + [self resizeLeftTextViews]; + [self resizeRightTextViews]; + [self setFrame:CPMakeRect(0, 0, 10 + leftWidth + 20 + rightWidth + 10, pos)]; +} + +- (void)addLineWithDescription:(NSString *)desc date:(NSDate *)date +{ + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + [dateFormatter setDateFormat:_dateFormat]; + NSString *dateString = [dateFormatter stringFromDate:date]; + [self addLineWithDescription:desc string:dateString]; +} + +- (void)addLineWithDescription:(NSString *)desc view:(CPView *)view +{ + if (!view) { + [self addLineWithDescription:desc string:nil]; + return; + } + + // add left label + CPTextField *left = [self _addLeftLabel:desc color:_propertyNameColor font:_propertyNameFont]; + + // add right view + [view setFrame:CPMakeRect(10 + leftWidth + 20, pos, view.frame.size.width, view.frame.size.height)]; + [view setIdentifier:@"rightImage"]; + + [self synchroniseRightWidthFromView:view]; + + pos = pos + fmaxf(left.frame.size.height, view.frame.size.height) + _lineSpace; + [self addSubview:view]; + [self resizeLeftTextViews]; + [self resizeRightTextViews]; + [self setFrame:CPMakeRect(0, 0, 10 + leftWidth + 20 + rightWidth + 10, pos)]; +} + +- (void)addLineWithDescription:(NSString *)desc color:(CPColor *)color +{ + if (!color) { + [self addLineWithDescription:desc string:nil]; + return; + } + + CPView *view = [self detailViewFromColor:color]; + [self addLineWithDescription:desc view:view]; +} + +- (void)addLineWithDescription:(NSString *)desc error:(NSError *)error +{ + if (!error) { + [self addLineWithDescription:desc string:nil]; + return; + } + + CPView *view = [self detailViewFromError:error]; + [self addLineWithDescription:desc view:view]; +} + +- (void)addLineWithDescription:(NSString *)desc data:(NSData *)data +{ + if (!data) { + [self addLineWithDescription:desc string:nil]; + return; + } + + if (data.length > 20) { + NSData *clippedData = [data subdataWithRange:NSMakeRange(0, 20)]; + [self addLineWithDescription:desc string:[NSString stringWithFormat:@"%@ ...", clippedData]]; + } else { + [self addLineWithDescription:desc string:[NSString stringWithFormat:@"%@ ...", data]]; + } +} + + +#pragma mark - Add Scalar Properties + +- (void)addLineWithDescription:(NSString *)desc integer:(NSInteger)integer +{ + NSString *number = [NSString stringWithFormat:@"%li", (long) integer]; + + if (_highlightNumbers) { + [self _addLineWithDescription:desc string:number leftColor:_propertyNameColor rightColor:_numberColor leftFont:_propertyNameFont rightFont:_numberFont]; + } else { + [self _addLineWithDescription:desc string:number leftColor:_propertyNameColor rightColor:_textColor leftFont:_propertyNameFont rightFont:_textFont]; + } +} + +- (void)addLineWithDescription:(NSString *)desc unsignedInteger:(NSUInteger)uinteger +{ + NSString *number = [NSString stringWithFormat:@"%lu", (unsigned long) uinteger]; + + if (_highlightNumbers) { + [self _addLineWithDescription:desc string:number leftColor:_propertyNameColor rightColor:_numberColor leftFont:_propertyNameFont rightFont:_numberFont]; + } else { + [self _addLineWithDescription:desc string:number leftColor:_propertyNameColor rightColor:_textColor leftFont:_propertyNameFont rightFont:_keywordFont]; + } +} + +- (void)addLineWithDescription:(NSString *)desc longnumber:(long long)number +{ + NSString *num = [NSString stringWithFormat:@"%lli", number]; + + if (_highlightNumbers) { + [self _addLineWithDescription:desc string:num leftColor:_propertyNameColor rightColor:_numberColor leftFont:_propertyNameFont rightFont:_numberFont]; + } else { + [self _addLineWithDescription:desc string:num leftColor:_propertyNameColor rightColor:_textColor leftFont:_propertyNameFont rightFont:_keywordFont]; + } +} + +- (void)addLineWithDescription:(NSString *)desc unsignedLongnumber:(unsigned long long)number +{ + NSString *num = [NSString stringWithFormat:@"%llu", number]; + + if (_highlightNumbers) { + [self _addLineWithDescription:desc string:num leftColor:_propertyNameColor rightColor:_numberColor leftFont:_propertyNameFont rightFont:_numberFont]; + } else { + [self _addLineWithDescription:desc string:num leftColor:_propertyNameColor rightColor:_textColor leftFont:_propertyNameFont rightFont:_keywordFont]; + } +} + +- (void)addLineWithDescription:(NSString *)desc floating:(double)floating +{ + NSString *number = [NSString stringWithFormat:@"%3.8f", floating]; + + if (_highlightNumbers) { + [self _addLineWithDescription:desc string:number leftColor:_propertyNameColor rightColor:_numberColor leftFont:_propertyNameFont rightFont:_numberFont]; + } else { + [self _addLineWithDescription:desc string:number leftColor:_propertyNameColor rightColor:_textColor leftFont:_propertyNameFont rightFont:_keywordFont]; + } +} + +- (void)addLineWithDescription:(NSString *)desc boolean:(BOOL)boolean +{ + NSString *result = boolean ? @"YES" : @"NO"; + + if (_highlightKeywords) { + [self _addLineWithDescription:desc string:result leftColor:_propertyNameColor rightColor:_keywordColor leftFont:_propertyNameFont rightFont:_keywordFont]; + } else { + [self _addLineWithDescription:desc string:result leftColor:_propertyNameColor rightColor:_textColor leftFont:_propertyNameFont rightFont:_keywordFont]; + } +} + +- (void)addSeperator +{ + // TODO: draw dashed line here +} + + +#pragma mark - Intern + +- (void)addProperty:(NSString *)propertyName type:(NSString *)propertyType toObject:(id)obj +{ + if ([propertyType isEqualToString:@"id"]) { + NSString *string = [NSString stringWithFormat:@"%@", [obj valueForKey:propertyName]]; + [self addLineWithDescription:[self lineFromString:propertyName] string:string]; + return; + } + + if ([self addPrimitiveProperty:propertyName type:propertyType toObject:obj]) { + return; + } + + + Class class = NSClassFromString(propertyType); + + if ([class isSubclassOfClass:[NSString class]]) { + NSString *property = [obj valueForKey:propertyName]; + [self addLineWithDescription:[self lineFromString:propertyName] string:property]; + return; + } + + if ([class isSubclassOfClass:[NSData class]]) { + NSData *property = [obj valueForKey:propertyName]; + [self addDataProperty:property name:propertyName toObject:obj]; + return; + } + + if ([class isSubclassOfClass:[NSDate class]]) { + id property = [obj valueForKey:propertyName]; + [self addLineWithDescription:[self lineFromString:propertyName] date:property]; + return; + } + + if ([class isSubclassOfClass:[CPImage class]]) { + id property = [obj valueForKey:propertyName]; + [self addLineWithDescription:[self lineFromString:propertyName] image:property]; + return; + } + + if ([class isSubclassOfClass:[NSURL class]]) { + NSURL *url = [obj valueForKey:propertyName]; + [self addLineWithDescription:[self lineFromString:propertyName] string:[url absoluteString]]; + return; + } + + if ([class isSubclassOfClass:[NSSet class]]) { + NSSet *set = [obj valueForKey:propertyName]; + [self addLineWithDescription:[self lineFromString:propertyName] string:[set description]]; + return; + } + + if ([class isSubclassOfClass:[NSArray class]]) { + NSArray *array = [obj valueForKey:propertyName]; + [self addLineWithDescription:[self lineFromString:propertyName] string:[array description]]; + return; + } + + if ([class isSubclassOfClass:[NSDictionary class]]) { + NSDictionary *dictionary = [obj valueForKey:propertyName]; + [self addLineWithDescription:[self lineFromString:propertyName] string:[dictionary description]]; + return; + } + + if ([class isSubclassOfClass:[CPColor class]]) { + CPColor *color = [obj valueForKey:propertyName]; + [self addLineWithDescription:[self lineFromString:propertyName] color:color]; + return; + } + + if ([class isSubclassOfClass:[NSError class]]) { + NSError *error = [obj valueForKey:propertyName]; + [self addLineWithDescription:[self lineFromString:propertyName] error:error]; + return; + } + + if ([self propertyUsesProtocol:propertyType])// delegate, uses protocol + { + id property = [[obj valueForKey:propertyName] description]; + [self addLineWithDescription:[self lineFromString:propertyName] string:property]; + return; + } + + if ([class isSubclassOfClass:[NSNumber class]]) { + NSNumber *number = [obj valueForKey:propertyName]; + [self _addLineWithDescription:[self lineFromString:propertyName] string:[number descriptionWithLocale:nil] leftColor:_propertyNameColor rightColor:_numberColor leftFont:_propertyNameFont rightFont:_numberFont]; + return; + } + + + // probably something else, use description method + id property = [[obj valueForKey:propertyName] description]; + [self addLineWithDescription:[self lineFromString:propertyName] string:property]; + + return; +} + +- (CPView *)detailViewFromColor:(CPColor *)color +{ + if (self.numberOfBitsPerColorComponent < 0 || self.numberOfBitsPerColorComponent > 16) { + @throw @"numberOfBitsPerColorComponent out of range (0 - 16)"; + return nil; + } + + CPView *view = [[CPView alloc] initWithFrame:CPMakeRect(0, 0, 140, 80)]; + [view cp_setWantsLayer:YES]; + [[view layer] setMasksToBounds:YES]; + view.layer.borderColor = [[CPColor lightGrayColor] CGColor]; + view.layer.borderWidth = 1 / [[CPScreen mainScreen] cp_scale]; + [view cp_update]; + + CPView *colorView = [[CPView alloc] initWithFrame:CPMakeRect(0, 0, 20, 80)]; + [colorView cp_setWantsLayer:YES]; + [[colorView layer] setBackgroundColor:[color CGColor]]; + [view addSubview:colorView]; + + CPTextField *red = [[CPTextField alloc] initWithFrame:CPMakeRect(25, 60, 100, 20)]; + [red setTextColor:[CPColor grayColor]]; + [red cp_setBordered:NO]; + [red cp_setEditable:NO]; + [red cp_setSelectable:YES]; + [red setFont:_propertyNameFont]; + if (self.numberOfBitsPerColorComponent == 0) { + [red cp_setText:[NSString stringWithFormat:@"Red: %.3f", [color cp_redComponent]]]; + } else { + [red cp_setText:[NSString stringWithFormat:@"Red: %.0f", [color cp_redComponent] * (pow(2, self.numberOfBitsPerColorComponent) - 1)]]; + } + [view addSubview:red]; + + CPTextField *green = [[CPTextField alloc] initWithFrame:CPMakeRect(25, 40, 100, 20)]; + [green setTextColor:[CPColor grayColor]]; + [green cp_setBezeled:NO]; + [green cp_setEditable:NO]; + [green cp_setSelectable:YES]; + [green setFont:_propertyNameFont]; + if (self.numberOfBitsPerColorComponent == 0) { + [green cp_setText:[NSString stringWithFormat:@"Green: %.3f", [color cp_greenComponent]]]; + } else { + [green cp_setText:[NSString stringWithFormat:@"Green: %.0f", [color cp_greenComponent] * (pow(2, self.numberOfBitsPerColorComponent) - 1)]]; + } + [view addSubview:green]; + + CPTextField *blue = [[CPTextField alloc] initWithFrame:CPMakeRect(25, 20, 100, 20)]; + [blue setTextColor:[CPColor grayColor]]; + [blue cp_setBezeled:NO]; + [blue cp_setEditable:NO]; + [blue cp_setSelectable:YES]; + [blue setFont:_propertyNameFont]; + if (self.numberOfBitsPerColorComponent == 0) { + [blue cp_setText:[NSString stringWithFormat:@"Blue: %.3f", [color cp_blueComponent]]]; + } else { + [blue cp_setText:[NSString stringWithFormat:@"Blue: %.0f", [color cp_blueComponent] * (pow(2, self.numberOfBitsPerColorComponent) - 1)]]; + } + [view addSubview:blue]; + + CPTextField *alpha = [[CPTextField alloc] initWithFrame:CPMakeRect(25, 0, 100, 20)]; + [alpha setTextColor:[CPColor grayColor]]; + [alpha cp_setBezeled:NO]; + [alpha cp_setEditable:NO]; + [alpha cp_setSelectable:YES]; + [alpha setFont:_propertyNameFont]; + if (self.numberOfBitsPerColorComponent == 0) { + [alpha cp_setText:[NSString stringWithFormat:@"Alpha: %.3f", [color cp_alphaComponent]]]; + } else { + [alpha cp_setText:[NSString stringWithFormat:@"Alpha: %.0f", [color cp_alphaComponent] * (pow(2, self.numberOfBitsPerColorComponent) - 1)]]; + } + [view addSubview:alpha]; + + [red sizeToFit]; + [green sizeToFit]; + [blue sizeToFit]; + [alpha sizeToFit]; + CGFloat width = fmax(fmax(red.frame.size.width, green.frame.size.width), fmax(blue.frame.size.width, alpha.frame.size.width)); + view.frame = CPMakeRect(0, 0, width + colorView.frame.size.width + 5, 80); + + return view; +} + +/// @todo title should resize, maybe use custom subclass with -layoutSubviews +- (CPView *)detailViewFromError:(NSError *)error +{ + if (!error) { + return nil; + } + + CPView *view = [[CPView alloc] initWithFrame:CPMakeRect(0, 0, 300, 80)]; + [view cp_setWantsLayer:YES]; + [[view layer] setMasksToBounds:YES]; + [[view layer] setBorderWidth:1.0f / [[CPScreen mainScreen] cp_scale]]; + [view.layer setBorderColor:[[CPColor lightGrayColor] CGColor]]; + + CPImageView *imageView = [[CPImageView alloc] initWithFrame:CPMakeRect(0, 10, 60, 60)]; + NSURL *imageURL = [[NSBundle bundleForClass:[CocoaDebugView class]] URLForResource:@"AlertCautionIcon" withExtension:@"icns"]; + NSData *data = [NSData dataWithContentsOfURL:imageURL]; + [imageView setImage:[[CPImage alloc] initWithData:data]]; + [imageView cp_setImageScaling:CPImageScaleProportionallyUpOrDown]; + [imageView cp_setEditable:NO]; + [view addSubview:imageView]; + + CPTextField *title = [[CPTextField alloc] initWithFrame:CPMakeRect(60, 55, 240, 20)]; + [title cp_setEditable:NO]; + [title cp_setSelectable:YES]; + [title cp_setBezeled:NO]; + [title cp_setText:[error localizedDescription]]; + [title setFont:[CPFont boldSystemFontOfSize:12]]; + [view addSubview:title]; + + CPTextField *info = [[CPTextField alloc] initWithFrame:CPMakeRect(60, 0, 240, 60)]; + [info cp_setEditable:NO]; + [info cp_setSelectable:YES]; + [info cp_setBezeled:NO]; + [info cp_setText:[error localizedRecoverySuggestion]]; + [view addSubview:info]; + + return view; +} + +- (NSString *)traceSuperClassesOfObject:(NSObject *)obj +{ + Class currentClass = [obj class]; + NSString *classStructure = NSStringFromClass(currentClass); + + + while (NSStringFromClass([currentClass superclass]) != nil) { + currentClass = [currentClass superclass]; + classStructure = [classStructure stringByAppendingString:[NSString stringWithFormat:@" : %@", NSStringFromClass(currentClass)]]; + } + + return classStructure; +} + +#pragma mark - Custom Type Properties + +- (void)addDataProperty:(NSData *)data name:(NSString *)propertyName toObject:(id)obj +{ + if (_convertDataToImage && _propertyNameContains.count > 0) { + BOOL contains = false; + + for (NSString *name in _propertyNameContains) { + if ([propertyName rangeOfString:name options:NSCaseInsensitiveSearch].location != NSNotFound) { + contains = true; + break; + } + } + + + if (contains) { + // NSImage encoded as data + CPImage *image = [[CPImage alloc] initWithData:data]; + + if (image) { + [self addLineWithDescription:[self lineFromString:propertyName] image:image]; + return; + } + } + } + + [self addLineWithDescription:[self lineFromString:propertyName] data:data]; +} + +- (BOOL)addPrimitiveProperty:(NSString *)propertyName type:(NSString *)propertyType toObject:(id)obj +{ + if ([propertyType isEqualToString:@"char"])// Char & bool + { + char character = [[obj valueForKey:propertyName] charValue]; + + if (character == YES || character == true || character == NO || character == false) { + [self addLineWithDescription:[self lineFromString:propertyName] boolean:character]; + } else { + [self addLineWithDescription:[NSString stringWithFormat:@"%@:", propertyName] string:[NSString stringWithFormat:@"%c", [[obj valueForKey:propertyName] charValue]]]; + } + + return YES; + } + + if ([propertyType isEqualToString:@"int"])// Int + { + NSNumber *number = [obj valueForKey:propertyName]; + [self addLineWithDescription:[NSString stringWithFormat:@"%@:", propertyName] integer:[number integerValue]]; + return YES; + } + + if ([propertyType isEqualToString:@"short"])// Short + { + NSNumber *number = [obj valueForKey:propertyName]; + [self addLineWithDescription:[NSString stringWithFormat:@"%@:", propertyName] integer:[number shortValue]]; + return YES; + } + + if ([propertyType isEqualToString:@"long"])// long + { + NSNumber *number = [obj valueForKey:propertyName]; + [self addLineWithDescription:[NSString stringWithFormat:@"%@:", propertyName] integer:[number longValue]]; + return YES; + } + + if ([propertyType isEqualToString:@"long long"])// long long + { + NSNumber *number = [obj valueForKey:propertyName]; + [self addLineWithDescription:[NSString stringWithFormat:@"%@:", propertyName] longnumber:[number longLongValue]]; + return YES; + } + + if ([propertyType isEqualToString:@"unsigned char"])// unsigned char + { + NSNumber *number = [obj valueForKey:propertyName]; + char mchar = [number charValue]; + NSString *string = [NSString stringWithFormat:@"%c", mchar]; + [self addLineWithDescription:[NSString stringWithFormat:@"%@:", propertyName] string:string]; + return YES; + } + + if ([propertyType isEqualToString:@"unsigned int"])// unsigned Int + { + NSNumber *number = [obj valueForKey:propertyName]; + [self addLineWithDescription:[NSString stringWithFormat:@"%@:", propertyName] unsignedInteger:[number unsignedIntegerValue]]; + return YES; + } + + if ([propertyType isEqualToString:@"unsigned short"])// unsigned Short + { + NSNumber *number = [obj valueForKey:propertyName]; + [self addLineWithDescription:[NSString stringWithFormat:@"%@:", propertyName] integer:[number unsignedShortValue]]; + return YES; + } + + if ([propertyType isEqualToString:@"unsigned long"])// unsigned long + { + NSNumber *number = [obj valueForKey:propertyName]; + [self addLineWithDescription:[NSString stringWithFormat:@"%@:", propertyName] unsignedInteger:[number unsignedLongValue]]; + return YES; + } + + if ([propertyType isEqualToString:@"unsigned long long"])// unsigned long long + { + NSNumber *number = [obj valueForKey:propertyName]; + [self addLineWithDescription:[NSString stringWithFormat:@"%@:", propertyName] unsignedLongnumber:[number unsignedLongLongValue]]; + return YES; + } + + if ([propertyType isEqualToString:@"float"])// float + { + NSNumber *number = [obj valueForKey:propertyName]; + [self addLineWithDescription:[NSString stringWithFormat:@"%@:", propertyName] floating:[number floatValue]]; + return YES; + } + + if ([propertyType isEqualToString:@"bool"])// bool + { + NSNumber *number = [obj valueForKey:propertyName]; + [self addLineWithDescription:[self lineFromString:propertyName] boolean:[number boolValue]]; + return YES; + } + + if ([propertyType isEqualToString:@"void"])// char * (pointer) + { + NSString *string = [NSString stringWithFormat:@"%@", [obj valueForKey:propertyName]]; + [self addLineWithDescription:[self lineFromString:propertyName] string:string]; + return YES; + } + + return NO; +} + + +#pragma mark - Private + +- (void)_addLineWithDescription:(NSString *)desc string:(NSString *)value leftColor:(CPColor *)leftColor rightColor:(CPColor *)rightColor leftFont:(CPFont *)lFont rightFont:(CPFont *)rfont +{ + [self removeDefaultApperance]; + + // add left Label + CPTextField *left = [self _addLeftLabel:desc color:leftColor font:lFont]; + + // add right label + CPTextField *right = [self _addRightLabel:value color:rightColor font:rfont]; + + [self synchroniseHeightOfView:left secondView:right]; + pos = pos + fmaxf(left.frame.size.height, right.frame.size.height) + _lineSpace; + [self resizeLeftTextViews]; + [self resizeRightTextViews]; + [self setFrame:CPMakeRect(0, 0, 10 + leftWidth + 20 + rightWidth + 10, pos)]; +} + +- (CPTextField *)_addLeftLabel:(NSString *)desc color:(CPColor *)color font:(CPFont *)font +{ + CPTextField *left = [self defaultLabelWithString:desc point:CPMakePoint(10, pos) textAlignment:CPAlignmentRight]; + [left cp_setText:[left.cp_Text stringByReplacingCharactersInRange:NSMakeRange(0, 1) withString:[[left.cp_Text substringToIndex:1] capitalizedString]]]; + [left setIdentifier:@"left"]; + [left setTextColor:color]; + [left setFont:font]; + [left sizeToFit]; + + [self synchroniseLeftWidthFromView:left]; + [self addSubview:left]; + + return left; +} + +- (CPTextField *)_addRightLabel:(NSString *)desc color:(CPColor *)color font:(CPFont *)font +{ + CPTextField *right = [self defaultLabelWithString:desc point:CPMakePoint(10 + leftWidth + 20, pos) textAlignment:CPAlignmentLeft]; + [right setIdentifier:@"right"]; + [right setTextColor:color]; + [right setFont:font]; + + [self addSubview:right]; + [right sizeToFit]; + + // sizeThatsFits only availible in 10.10 and highter :( + CGFloat width = right.frame.size.width; + if (width > self.maxSizeOfField.width) { + NSInteger numberOfLines = ceil(width / self.maxSizeOfField.width); + CGFloat height = MIN(numberOfLines * right.font.pointSize * 1.5, self.maxSizeOfField.height);// 1.5 since I assume pointSize return points from baseline to top (not bottom to top) + right.frame = CGRectMake(right.frame.origin.x, right.frame.origin.y, self.maxSizeOfField.width, height); + } + [self synchroniseRightWidthFromView:right]; + + return right; +} + ++ (CPImage *)_imageFromView:(CPView *)view +{ +#if TARGET_OS_IPHONE + UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, 0.0); + [view.layer renderInContext:UIGraphicsGetCurrentContext()]; + UIImage *img = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + return img; +#else + NSBitmapImageRep *imageRep = [view bitmapImageRepForCachingDisplayInRect:[view bounds]]; + [view cacheDisplayInRect:[view bounds] toBitmapImageRep:imageRep]; + NSImage *renderedImage = [[NSImage alloc] initWithSize:[imageRep size]]; + [renderedImage addRepresentation:imageRep]; + return renderedImage; +#endif +} + + +#pragma mark - Helpers + +/** + * returns a string with ":" as last character + */ +- (NSString *)lineFromString:(NSString *)string +{ + return [NSString stringWithFormat:@"%@:", string]; +} + +- (BOOL)propertyUsesProtocol:(NSString *)property +{ + if (property.length > 2) { + NSString *firstChar = [property substringToIndex:1]; + NSString *lastChar = [property substringFromIndex:property.length - 1]; + + if ([firstChar isEqualToString:@"<"] && [lastChar isEqualToString:@">"]) { + return YES; + } + } + + return NO; +} + +- (NSData *)dataFromImage:(CPImage *)image +{ +#if TARGET_OS_IPHONE + return UIImagePNGRepresentation(image); +#else + CGImageRef cgRef = [image CGImageForProposedRect:NULL context:nil hints:nil]; + NSBitmapImageRep *newRep = [[NSBitmapImageRep alloc] initWithCGImage:cgRef]; + [newRep setSize:[image size]];// if you want the same resolution + return [newRep representationUsingType:NSPNGFileType properties:@{}]; +#endif +} + +- (void)synchroniseHeightOfView:(CPView *)left secondView:(CPView *)right +{ + CGFloat height = fmaxf(left.frame.size.height, right.frame.size.height); + [left setFrame:CPMakeRect(left.frame.origin.x, left.frame.origin.y, left.frame.size.width, height)]; + [right setFrame:CPMakeRect(right.frame.origin.x, right.frame.origin.y, right.frame.size.width, height)]; +} + +- (void)synchroniseRightWidthFromView:(CPView *)view +{ + CGFloat newWidth = view.frame.size.width; + + if (newWidth > rightWidth) { + rightWidth = newWidth; + } +} + +- (void)synchroniseLeftWidthFromView:(CPView *)view +{ + CGFloat newWidth = view.frame.size.width; + + if (newWidth > leftWidth) { + leftWidth = newWidth; + } +} + +- (CPTextField *)defaultLabelWithString:(NSString *)string point:(CPPoint)point textAlignment:(CPTextAlignment)align +{ + CPTextField *textField = [[CPTextField alloc] initWithFrame:CPMakeRect(point.x, point.y, 5000, 5000)]; + // textField.frame.size = [textField sizeThatFits:[CGSizeMake(5000.0, 5000.0)]] // Works in Swift + [textField setPreferredMaxLayoutWidth:5000]; + [textField cp_setBordered:NO]; + [textField cp_setEditable:NO]; + [textField cp_setSelectable:YES]; + [textField cp_setAlignment:align]; + [textField setBackgroundColor:[CPColor clearColor]]; + [textField setTextColor:[CPColor blackColor]]; + [textField cp_setNumberOfLines:0]; + + if (string) { + [textField cp_setText:string]; + } else { + NSLog(@"[CocoaDebugKit] failed to set nil value to NSTextField (%s, %s)", __FILE__, __PRETTY_FUNCTION__); + [textField cp_setText:@"nil"]; + } + + return textField; +} + +- (void)resizeLeftTextViews +{ + for (CPView *view in self.subviews) { + if ([[view identifier] isEqualToString:@"left"]) { + [view setFrame:CPMakeRect(10, view.frame.origin.y, leftWidth + 10, view.frame.size.height)]; + } + } +} + +- (void)resizeRightTextViews +{ + for (CPView *view in self.subviews) { + if ([[view identifier] isEqualToString:@"right"]) { + // need an extra pixel to prevent line wrap. Only on iOS thow + [view setFrame:CPMakeRect(10 + leftWidth + 20, view.frame.origin.y, rightWidth + 1, view.frame.size.height)]; + } + + if ([[view identifier] isEqualToString:@"rightImage"]) { + [view setFrame:CPMakeRect(10 + leftWidth + 20, view.frame.origin.y, view.frame.size.width, view.frame.size.height)]; + } + } +} + +@end diff --git a/Shared/CocoaPropertyEnumerator.h b/CocoaDebugKit/CocoaDebugKit/CocoaPropertyEnumerator.h similarity index 100% rename from Shared/CocoaPropertyEnumerator.h rename to CocoaDebugKit/CocoaDebugKit/CocoaPropertyEnumerator.h diff --git a/CocoaDebugKit/CocoaDebugKit/CocoaPropertyEnumerator.m b/CocoaDebugKit/CocoaDebugKit/CocoaPropertyEnumerator.m new file mode 100644 index 0000000..5d4035b --- /dev/null +++ b/CocoaDebugKit/CocoaDebugKit/CocoaPropertyEnumerator.m @@ -0,0 +1,203 @@ +// +// CocoaPropertyEnumerator.m +// CocoaDebugKit +// +// Created by Patrick Kladek on 25.04.16. +// Copyright (c) 2016 Patrick Kladek. All rights reserved. +// + +#import +#import "CocoaPropertyEnumerator.h" + + +@implementation CocoaPropertyEnumerator + +static const char *getPropertyType(objc_property_t property) +{ + const char *attributes = property_getAttributes(property); + char buffer[1 + strlen(attributes)]; + strcpy(buffer, attributes); + char *state = buffer, *attribute; + + /* + * Content of 'attribute' + * + T@"NSString",&,N,V_hallo + T@"",W,N,V_delegate + T@"NSData",&,N,V_data + T@"NSDate",&,N,V_date + T@"NSImage",&,N,V_image + T@,&,N,V_prop + T@"NSSet",&,N,V_set + T@"NSString",&,N,V_name + T@"NSString",&,N,V_test + Tc,N,GisCheck,V_check + TC,N,V_ccheck + Ti,N,V_inum + Tq,N,V_lnum + T@"NSURL",&,N,V_url + T@"TestObject",&,N,V_object + T@"NSString",&,N,V_hallo + T@"",W,N,V_delegate + T@"NSData",&,N,V_data + T@"NSDate",&,N,V_date + T@"NSImage",&,N,V_image + T@,&,N,V_prop + T@"NSSet",&,N,V_set + T@"NSString",&,N,V_name + T@"NSString",&,N,V_test + Tc,N,GisCheck,V_check + TC,N,V_ccheck + Ti,N,V_inum + Tq,N,V_lnum + T@"NSURL",&,N,V_url + T@"TestObject",&,N,V_object + */ + + while ((attribute = strsep(&state, ",")) != NULL) { + if (attribute[0] == 'T' && attribute[1] != '@') { + // it's a C primitive type: + /* + if you want a list of what will be returned for these primitives, search online for + "objective-c" "Property Attribute Description Examples" + apple docs list plenty of examples of what you get for int "i", long "l", unsigned "I", struct, etc. + */ + + switch (attribute[1]) { + case 'c': + return "char"; + break; + case 'i': + return "int"; + break; + + case 's': + return "short"; + break; + + case 'l': + return "long"; + break; + + case 'q': + return "long long"; + break; + + case 'C': + return "unsigned char"; + break; + + case 'I': + return "unsigned int"; + break; + + case 'S': + return "unsigned short"; + break; + + case 'L': + return "unsigned long"; + break; + + case 'Q': + return "unsigned long long"; + break; + + case 'f': + return "float"; + break; + + case 'd': + return "double"; + break; + + case 'B': + return "bool"; + break; + + case 'v': + return "void"; + break; + + case '*': + return "char *"; + break; + + default: + break; + } + + return (const char *) [[NSData dataWithBytes:(attribute + 1) length:strlen(attribute) - 1] bytes]; + } else if (attribute[0] == 'T' && attribute[1] == '@' && strlen(attribute) == 2) { + // it's an ObjC id type: + return "id"; + } else if (attribute[0] == 'T' && attribute[1] == '@') { + // it's another ObjC object type: + return (const char *) [[NSData dataWithBytes:(attribute + 3) length:strlen(attribute) - 4] bytes]; + } + } + return ""; +} + +- (void)enumeratePropertiesFromClass:(Class)objectClass allowed:(NSArray *)allowed block:(void (^)(NSString *type, NSString *value))callbackBlock +{ + // get all properties and Display them in DebugView ... + unsigned int outCount, i; + objc_property_t *properties = class_copyPropertyList(objectClass, &outCount); + + for (i = 0; i < outCount; i++) { + objc_property_t property = properties[i]; + const char *propName = property_getName(property); + + if (propName) { + const char *type = getPropertyType(property); + NSString *propertyName = [NSString stringWithUTF8String:propName]; + NSString *propertyType = [NSString stringWithUTF8String:type]; + + if (allowed && [self object:propertyName existsInArray:allowed]) { + callbackBlock(propertyType, propertyName); + } else { + callbackBlock(propertyType, propertyName); + } + } + } + free(properties); +} + +- (NSString *)propertyTypeFromName:(NSString *)name object:(NSObject *)obj +{ + // get all properties and Display them in DebugView ... + unsigned int outCount, i; + objc_property_t *properties = class_copyPropertyList([obj class], &outCount); + + for (i = 0; i < outCount; i++) { + objc_property_t property = properties[i]; + const char *propName = property_getName(property); + + if (propName) { + const char *type = getPropertyType(property); + NSString *propertyName = [NSString stringWithUTF8String:propName]; + NSString *propertyType = [NSString stringWithUTF8String:type]; + + if ([propertyName isEqualToString:name]) { + free(properties); + return propertyType; + } + } + } + free(properties); + return nil; +} + +- (BOOL)object:(NSString *)object existsInArray:(NSArray *)array +{ + for (NSString *property in array) { + if ([property isEqualToString:object]) { + return true; + } + } + + return false; +} + +@end diff --git a/Shared/CocoaPropertyLine.h b/CocoaDebugKit/CocoaDebugKit/CocoaPropertyLine.h similarity index 96% rename from Shared/CocoaPropertyLine.h rename to CocoaDebugKit/CocoaDebugKit/CocoaPropertyLine.h index ccb8820..d1d91a3 100644 --- a/Shared/CocoaPropertyLine.h +++ b/CocoaDebugKit/CocoaDebugKit/CocoaPropertyLine.h @@ -1,6 +1,6 @@ // // CocoaPropertyLine.h -// CocoaTouchDebugKit +// CocoaDebugKit // // Created by Patrick Kladek on 25.05.17. // Copyright (c) 2017 Patrick Kladek. All rights reserved. @@ -8,6 +8,7 @@ #import + @interface CocoaPropertyLine : NSObject @property (nonatomic, readonly) NSString *type; diff --git a/Shared/CocoaPropertyLine.m b/CocoaDebugKit/CocoaDebugKit/CocoaPropertyLine.m similarity index 96% rename from Shared/CocoaPropertyLine.m rename to CocoaDebugKit/CocoaDebugKit/CocoaPropertyLine.m index 2b3a8dd..3a87cee 100644 --- a/Shared/CocoaPropertyLine.m +++ b/CocoaDebugKit/CocoaDebugKit/CocoaPropertyLine.m @@ -1,6 +1,6 @@ // // CocoaPropertyLine.m -// CocoaTouchDebugKit +// CocoaDebugKit // // Created by Patrick Kladek on 25.05.17. // Copyright (c) 2017 Patrick Kladek. All rights reserved. @@ -8,6 +8,7 @@ #import "CocoaPropertyLine.h" + @implementation CocoaPropertyLine + (CocoaPropertyLine *)lineWithType:(NSString *)type name:(NSString *)name value:(NSString *)value diff --git a/Shared/CrossPlatform/CPColor+CPAdditions.h b/CocoaDebugKit/CocoaDebugKit/CrossPlatform/CPColor+CPAdditions.h similarity index 56% rename from Shared/CrossPlatform/CPColor+CPAdditions.h rename to CocoaDebugKit/CocoaDebugKit/CrossPlatform/CPColor+CPAdditions.h index d5e5c7d..cbfdba2 100644 --- a/Shared/CrossPlatform/CPColor+CPAdditions.h +++ b/CocoaDebugKit/CocoaDebugKit/CrossPlatform/CPColor+CPAdditions.h @@ -15,9 +15,9 @@ @interface NSColor (CPAdditions) #endif -- (CGFloat)cp_redComponent; -- (CGFloat)cp_greenComponent; -- (CGFloat)cp_blueComponent; -- (CGFloat)cp_alphaComponent; +@property (nonatomic, readonly) CGFloat cp_redComponent; +@property (nonatomic, readonly) CGFloat cp_greenComponent; +@property (nonatomic, readonly) CGFloat cp_blueComponent; +@property (nonatomic, readonly) CGFloat cp_alphaComponent; @end diff --git a/Shared/CrossPlatform/CPColor+CPAdditions.m b/CocoaDebugKit/CocoaDebugKit/CrossPlatform/CPColor+CPAdditions.m similarity index 100% rename from Shared/CrossPlatform/CPColor+CPAdditions.m rename to CocoaDebugKit/CocoaDebugKit/CrossPlatform/CPColor+CPAdditions.m diff --git a/Shared/CrossPlatform/CPImageView+CPAdditions.h b/CocoaDebugKit/CocoaDebugKit/CrossPlatform/CPImageView+CPAdditions.h similarity index 100% rename from Shared/CrossPlatform/CPImageView+CPAdditions.h rename to CocoaDebugKit/CocoaDebugKit/CrossPlatform/CPImageView+CPAdditions.h diff --git a/Shared/CrossPlatform/CPImageView+CPAdditions.m b/CocoaDebugKit/CocoaDebugKit/CrossPlatform/CPImageView+CPAdditions.m similarity index 100% rename from Shared/CrossPlatform/CPImageView+CPAdditions.m rename to CocoaDebugKit/CocoaDebugKit/CrossPlatform/CPImageView+CPAdditions.m diff --git a/Shared/CrossPlatform/CPScreen+CPAdditions.h b/CocoaDebugKit/CocoaDebugKit/CrossPlatform/CPScreen+CPAdditions.h similarity index 85% rename from Shared/CrossPlatform/CPScreen+CPAdditions.h rename to CocoaDebugKit/CocoaDebugKit/CrossPlatform/CPScreen+CPAdditions.h index ce670f7..150a1e1 100644 --- a/Shared/CrossPlatform/CPScreen+CPAdditions.h +++ b/CocoaDebugKit/CocoaDebugKit/CrossPlatform/CPScreen+CPAdditions.h @@ -14,6 +14,6 @@ @interface NSScreen (CPAdditions) #endif -- (CGFloat)cp_scale; +@property (nonatomic, readonly) CGFloat cp_scale; @end diff --git a/Shared/CrossPlatform/CPScreen+CPAdditions.m b/CocoaDebugKit/CocoaDebugKit/CrossPlatform/CPScreen+CPAdditions.m similarity index 100% rename from Shared/CrossPlatform/CPScreen+CPAdditions.m rename to CocoaDebugKit/CocoaDebugKit/CrossPlatform/CPScreen+CPAdditions.m diff --git a/Shared/CrossPlatform/CPTextField+CPAdditions.h b/CocoaDebugKit/CocoaDebugKit/CrossPlatform/CPTextField+CPAdditions.h similarity index 90% rename from Shared/CrossPlatform/CPTextField+CPAdditions.h rename to CocoaDebugKit/CocoaDebugKit/CrossPlatform/CPTextField+CPAdditions.h index 54a9e13..e5587b7 100644 --- a/Shared/CrossPlatform/CPTextField+CPAdditions.h +++ b/CocoaDebugKit/CocoaDebugKit/CrossPlatform/CPTextField+CPAdditions.h @@ -17,9 +17,7 @@ #endif - -- (void)cp_setText:(NSString *)string; -- (NSString *)cp_Text; +@property (nonatomic, setter=cp_setText:) NSString *cp_Text; - (void)cp_setAlignment:(CPTextAlignment)alignment; - (void)cp_setBordered:(BOOL)border; diff --git a/Shared/CrossPlatform/CPTextField+CPAdditions.m b/CocoaDebugKit/CocoaDebugKit/CrossPlatform/CPTextField+CPAdditions.m similarity index 100% rename from Shared/CrossPlatform/CPTextField+CPAdditions.m rename to CocoaDebugKit/CocoaDebugKit/CrossPlatform/CPTextField+CPAdditions.m diff --git a/Shared/CrossPlatform/CPView+CPAdditions.h b/CocoaDebugKit/CocoaDebugKit/CrossPlatform/CPView+CPAdditions.h similarity index 100% rename from Shared/CrossPlatform/CPView+CPAdditions.h rename to CocoaDebugKit/CocoaDebugKit/CrossPlatform/CPView+CPAdditions.h diff --git a/Shared/CrossPlatform/CPView+CPAdditions.m b/CocoaDebugKit/CocoaDebugKit/CrossPlatform/CPView+CPAdditions.m similarity index 96% rename from Shared/CrossPlatform/CPView+CPAdditions.m rename to CocoaDebugKit/CocoaDebugKit/CrossPlatform/CPView+CPAdditions.m index d593ec8..71cbf84 100644 --- a/Shared/CrossPlatform/CPView+CPAdditions.m +++ b/CocoaDebugKit/CocoaDebugKit/CrossPlatform/CPView+CPAdditions.m @@ -36,6 +36,7 @@ - (void)cp_update [self setNeedsDisplay]; #else [self setNeedsDisplay:YES]; + [self.layer setNeedsLayout]; #endif } diff --git a/Shared/CrossPlatform/CrossPlatformDefinitions.h b/CocoaDebugKit/CocoaDebugKit/CrossPlatform/CrossPlatformDefinitions.h similarity index 85% rename from Shared/CrossPlatform/CrossPlatformDefinitions.h rename to CocoaDebugKit/CocoaDebugKit/CrossPlatform/CrossPlatformDefinitions.h index 45b3925..b9f6db2 100644 --- a/Shared/CrossPlatform/CrossPlatformDefinitions.h +++ b/CocoaDebugKit/CocoaDebugKit/CrossPlatform/CrossPlatformDefinitions.h @@ -6,12 +6,15 @@ // Copyright (c) 2017 Patrick Kladek. All rights reserved. // +#include + #ifndef CocoaDebugKit_CrossPlatformDefinitions_h #define CocoaDebugKit_CrossPlatformDefinitions_h #if TARGET_OS_IPHONE + #import - #import + #import typedef UIView CPView; typedef UIColor CPColor; typedef UIFont CPFont; @@ -24,7 +27,7 @@ typedef CGSize CPSize; typedef CGRect CPRect; - // iOS don´t has Image scaling + // iOS doesn´t have Image scaling typedef NS_ENUM(NSUInteger, CPImageScaling) { CPImageScaleProportionallyDown = 0, CPImageScaleAxesIndependently = 0, @@ -70,11 +73,11 @@ CPImageScaleProportionallyUpOrDown = NSImageScaleProportionallyUpOrDown }; typedef NS_ENUM(NSUInteger, CPTextAlignment) { - CPAlignmentCenter = NSCenterTextAlignment, - CPAlignmentLeft = NSLeftTextAlignment, - CPAlignmentRight = NSRightTextAlignment, - CPAlignmentJustified = NSJustifiedTextAlignment, - CPAlignmentNatural = NSNaturalTextAlignment + CPAlignmentCenter = NSTextAlignmentCenter, + CPAlignmentLeft = NSTextAlignmentLeft, + CPAlignmentRight = NSTextAlignmentRight, + CPAlignmentJustified = NSTextAlignmentJustified, + CPAlignmentNatural = NSTextAlignmentNatural }; diff --git a/Shared/CrossPlatform/NSObject+CPAdditions.h b/CocoaDebugKit/CocoaDebugKit/CrossPlatform/NSObject+CPAdditions.h similarity index 100% rename from Shared/CrossPlatform/NSObject+CPAdditions.h rename to CocoaDebugKit/CocoaDebugKit/CrossPlatform/NSObject+CPAdditions.h diff --git a/Shared/CrossPlatform/NSObject+CPAdditions.m b/CocoaDebugKit/CocoaDebugKit/CrossPlatform/NSObject+CPAdditions.m similarity index 100% rename from Shared/CrossPlatform/NSObject+CPAdditions.m rename to CocoaDebugKit/CocoaDebugKit/CrossPlatform/NSObject+CPAdditions.m diff --git a/Shared/AlertCautionIcon.icns b/CocoaDebugKit/CocoaDebugKit/Supporting Files/AlertCautionIcon.icns similarity index 100% rename from Shared/AlertCautionIcon.icns rename to CocoaDebugKit/CocoaDebugKit/Supporting Files/AlertCautionIcon.icns diff --git a/macOS/CocoaDebugKit/Info.plist b/CocoaDebugKit/CocoaDebugKit/Supporting Files/Info.plist similarity index 90% rename from macOS/CocoaDebugKit/Info.plist rename to CocoaDebugKit/CocoaDebugKit/Supporting Files/Info.plist index 9c16bbf..b076888 100644 --- a/macOS/CocoaDebugKit/Info.plist +++ b/CocoaDebugKit/CocoaDebugKit/Supporting Files/Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier - com.kladek.$(PRODUCT_NAME:rfc1034identifier) + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName @@ -19,7 +19,7 @@ CFBundleSignature ???? CFBundleVersion - 1410 + 1466 NSHumanReadableCopyright Copyright © 2015 Patrick Kladek. All rights reserved. NSPrincipalClass diff --git a/Example/Example.xcodeproj/project.pbxproj b/Example/Example.xcodeproj/project.pbxproj new file mode 100644 index 0000000..b8b675c --- /dev/null +++ b/Example/Example.xcodeproj/project.pbxproj @@ -0,0 +1,610 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + CD6334FD23E2D04F00293E4B /* CocoaDebugKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD6334FC23E2D04F00293E4B /* CocoaDebugKit.framework */; }; + CD6334FE23E2D04F00293E4B /* CocoaDebugKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = CD6334FC23E2D04F00293E4B /* CocoaDebugKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + CD63352523E2D28900293E4B /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = CD63352423E2D28900293E4B /* AppDelegate.m */; }; + CD63352D23E2D28B00293E4B /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = CD63352C23E2D28B00293E4B /* main.m */; }; + CD63354023E2D2F200293E4B /* com.kladek.CocoaDebugKit.settings.dusk.plist in Resources */ = {isa = PBXBuildFile; fileRef = CD63353323E2D2F200293E4B /* com.kladek.CocoaDebugKit.settings.dusk.plist */; }; + CD63354123E2D2F200293E4B /* com.kladek.CocoaDebugKit.settings.basic.plist in Resources */ = {isa = PBXBuildFile; fileRef = CD63353423E2D2F200293E4B /* com.kladek.CocoaDebugKit.settings.basic.plist */; }; + CD63354323E2D2F200293E4B /* image.jpg in Resources */ = {isa = PBXBuildFile; fileRef = CD63353823E2D2F200293E4B /* image.jpg */; }; + CD63354423E2D2F200293E4B /* Person.m in Sources */ = {isa = PBXBuildFile; fileRef = CD63353A23E2D2F200293E4B /* Person.m */; }; + CD63354523E2D2F200293E4B /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CD63353B23E2D2F200293E4B /* Images.xcassets */; }; + CD63354623E2D2F200293E4B /* TestObject.m in Sources */ = {isa = PBXBuildFile; fileRef = CD63353C23E2D2F200293E4B /* TestObject.m */; }; + CD63354723E2D2F200293E4B /* SecondObject.m in Sources */ = {isa = PBXBuildFile; fileRef = CD63353D23E2D2F200293E4B /* SecondObject.m */; }; + CD63354823E2D2F200293E4B /* com.kladek.CocoaDebugKit.settings.default.plist in Resources */ = {isa = PBXBuildFile; fileRef = CD63353F23E2D2F200293E4B /* com.kladek.CocoaDebugKit.settings.default.plist */; }; + CD63354A23E2D34600293E4B /* CocoaDebugKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD63354923E2D34600293E4B /* CocoaDebugKit.framework */; }; + CD63354B23E2D34600293E4B /* CocoaDebugKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = CD63354923E2D34600293E4B /* CocoaDebugKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + CD63354D23E2D7F500293E4B /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = CD63352823E2D28B00293E4B /* MainMenu.xib */; }; + CD63A1131ED33EE400D04814 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = CD63A1121ED33EE400D04814 /* main.m */; }; + CD63A1161ED33EE400D04814 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = CD63A1151ED33EE400D04814 /* AppDelegate.m */; }; + CD63A1191ED33EE400D04814 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CD63A1181ED33EE400D04814 /* ViewController.m */; }; + CD63A11C1ED33EE400D04814 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CD63A11A1ED33EE400D04814 /* Main.storyboard */; }; + CD63A11E1ED33EE400D04814 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CD63A11D1ED33EE400D04814 /* Images.xcassets */; }; + CD63A1211ED33EE400D04814 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = CD63A11F1ED33EE400D04814 /* LaunchScreen.xib */; }; + CD63A1401ED37CBE00D04814 /* TestClass.m in Sources */ = {isa = PBXBuildFile; fileRef = CD63A13F1ED37CBE00D04814 /* TestClass.m */; }; + CD63A1431ED5E12C00D04814 /* image.jpg in Resources */ = {isa = PBXBuildFile; fileRef = CD63A1421ED5E12C00D04814 /* image.jpg */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + CD63354C23E2D34700293E4B /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + CD63354B23E2D34600293E4B /* CocoaDebugKit.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + CD63A1381ED3405100D04814 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + CD6334FE23E2D04F00293E4B /* CocoaDebugKit.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + CD6334FC23E2D04F00293E4B /* CocoaDebugKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = CocoaDebugKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CD63352123E2D28900293E4B /* macOS-TestApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "macOS-TestApp.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + CD63352323E2D28900293E4B /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + CD63352423E2D28900293E4B /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + CD63352923E2D28B00293E4B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + CD63352B23E2D28B00293E4B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + CD63352C23E2D28B00293E4B /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + CD63352E23E2D28B00293E4B /* macOS_TestApp.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = macOS_TestApp.entitlements; sourceTree = ""; }; + CD63353223E2D2F100293E4B /* SecondObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SecondObject.h; sourceTree = ""; }; + CD63353323E2D2F200293E4B /* com.kladek.CocoaDebugKit.settings.dusk.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = com.kladek.CocoaDebugKit.settings.dusk.plist; sourceTree = ""; }; + CD63353423E2D2F200293E4B /* com.kladek.CocoaDebugKit.settings.basic.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = com.kladek.CocoaDebugKit.settings.basic.plist; sourceTree = ""; }; + CD63353723E2D2F200293E4B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = MainMenu.xib; sourceTree = ""; }; + CD63353823E2D2F200293E4B /* image.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = image.jpg; sourceTree = ""; }; + CD63353923E2D2F200293E4B /* Person.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Person.h; sourceTree = ""; }; + CD63353A23E2D2F200293E4B /* Person.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Person.m; sourceTree = ""; }; + CD63353B23E2D2F200293E4B /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; + CD63353C23E2D2F200293E4B /* TestObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TestObject.m; sourceTree = ""; }; + CD63353D23E2D2F200293E4B /* SecondObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SecondObject.m; sourceTree = ""; }; + CD63353E23E2D2F200293E4B /* TestObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TestObject.h; sourceTree = ""; }; + CD63353F23E2D2F200293E4B /* com.kladek.CocoaDebugKit.settings.default.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = com.kladek.CocoaDebugKit.settings.default.plist; sourceTree = ""; }; + CD63354923E2D34600293E4B /* CocoaDebugKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = CocoaDebugKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CD63A10E1ED33EE400D04814 /* iOS-TestApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "iOS-TestApp.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + CD63A1111ED33EE400D04814 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + CD63A1121ED33EE400D04814 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + CD63A1141ED33EE400D04814 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + CD63A1151ED33EE400D04814 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + CD63A1171ED33EE400D04814 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; + CD63A1181ED33EE400D04814 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; + CD63A11B1ED33EE400D04814 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + CD63A11D1ED33EE400D04814 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; + CD63A1201ED33EE400D04814 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; + CD63A13E1ED37CBE00D04814 /* TestClass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TestClass.h; sourceTree = ""; }; + CD63A13F1ED37CBE00D04814 /* TestClass.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TestClass.m; sourceTree = ""; }; + CD63A1421ED5E12C00D04814 /* image.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = image.jpg; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + CD63351E23E2D28900293E4B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + CD63354A23E2D34600293E4B /* CocoaDebugKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CD63A10B1ED33EE400D04814 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + CD6334FD23E2D04F00293E4B /* CocoaDebugKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + CD6334FB23E2D04F00293E4B /* Frameworks */ = { + isa = PBXGroup; + children = ( + CD63354923E2D34600293E4B /* CocoaDebugKit.framework */, + CD6334FC23E2D04F00293E4B /* CocoaDebugKit.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + CD63352223E2D28900293E4B /* macOS-TestApp */ = { + isa = PBXGroup; + children = ( + CD63353523E2D2F200293E4B /* Base.lproj */, + CD63353423E2D2F200293E4B /* com.kladek.CocoaDebugKit.settings.basic.plist */, + CD63353F23E2D2F200293E4B /* com.kladek.CocoaDebugKit.settings.default.plist */, + CD63353323E2D2F200293E4B /* com.kladek.CocoaDebugKit.settings.dusk.plist */, + CD63353823E2D2F200293E4B /* image.jpg */, + CD63353B23E2D2F200293E4B /* Images.xcassets */, + CD63353923E2D2F200293E4B /* Person.h */, + CD63353A23E2D2F200293E4B /* Person.m */, + CD63353223E2D2F100293E4B /* SecondObject.h */, + CD63353D23E2D2F200293E4B /* SecondObject.m */, + CD63353E23E2D2F200293E4B /* TestObject.h */, + CD63353C23E2D2F200293E4B /* TestObject.m */, + CD63352323E2D28900293E4B /* AppDelegate.h */, + CD63352423E2D28900293E4B /* AppDelegate.m */, + CD63352823E2D28B00293E4B /* MainMenu.xib */, + CD63352B23E2D28B00293E4B /* Info.plist */, + CD63352C23E2D28B00293E4B /* main.m */, + CD63352E23E2D28B00293E4B /* macOS_TestApp.entitlements */, + ); + path = "macOS-TestApp"; + sourceTree = ""; + }; + CD63353523E2D2F200293E4B /* Base.lproj */ = { + isa = PBXGroup; + children = ( + CD63353623E2D2F200293E4B /* MainMenu.xib */, + ); + path = Base.lproj; + sourceTree = ""; + }; + CD63A10F1ED33EE400D04814 /* iOS-TestApp */ = { + isa = PBXGroup; + children = ( + CD63A1141ED33EE400D04814 /* AppDelegate.h */, + CD63A1151ED33EE400D04814 /* AppDelegate.m */, + CD63A1171ED33EE400D04814 /* ViewController.h */, + CD63A1181ED33EE400D04814 /* ViewController.m */, + CD63A1411ED37CC000D04814 /* Class */, + CD63A11A1ED33EE400D04814 /* Main.storyboard */, + CD63A11D1ED33EE400D04814 /* Images.xcassets */, + CD63A11F1ED33EE400D04814 /* LaunchScreen.xib */, + CD63A1101ED33EE400D04814 /* Supporting Files */, + ); + path = "iOS-TestApp"; + sourceTree = ""; + }; + CD63A1101ED33EE400D04814 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + CD63A1421ED5E12C00D04814 /* image.jpg */, + CD63A1111ED33EE400D04814 /* Info.plist */, + CD63A1121ED33EE400D04814 /* main.m */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + CD63A1411ED37CC000D04814 /* Class */ = { + isa = PBXGroup; + children = ( + CD63A13E1ED37CBE00D04814 /* TestClass.h */, + CD63A13F1ED37CBE00D04814 /* TestClass.m */, + ); + name = Class; + sourceTree = ""; + }; + CDB4E14A1ED1D3DA00DE6714 = { + isa = PBXGroup; + children = ( + CD63A10F1ED33EE400D04814 /* iOS-TestApp */, + CD63352223E2D28900293E4B /* macOS-TestApp */, + CDB4E1551ED1D3DA00DE6714 /* Products */, + CD6334FB23E2D04F00293E4B /* Frameworks */, + ); + sourceTree = ""; + }; + CDB4E1551ED1D3DA00DE6714 /* Products */ = { + isa = PBXGroup; + children = ( + CD63A10E1ED33EE400D04814 /* iOS-TestApp.app */, + CD63352123E2D28900293E4B /* macOS-TestApp.app */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + CD63352023E2D28900293E4B /* macOS-TestApp */ = { + isa = PBXNativeTarget; + buildConfigurationList = CD63352F23E2D28B00293E4B /* Build configuration list for PBXNativeTarget "macOS-TestApp" */; + buildPhases = ( + CD63351D23E2D28900293E4B /* Sources */, + CD63351E23E2D28900293E4B /* Frameworks */, + CD63351F23E2D28900293E4B /* Resources */, + CD63354C23E2D34700293E4B /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "macOS-TestApp"; + productName = "macOS-TestApp"; + productReference = CD63352123E2D28900293E4B /* macOS-TestApp.app */; + productType = "com.apple.product-type.application"; + }; + CD63A10D1ED33EE400D04814 /* iOS-TestApp */ = { + isa = PBXNativeTarget; + buildConfigurationList = CD63A1321ED33EE400D04814 /* Build configuration list for PBXNativeTarget "iOS-TestApp" */; + buildPhases = ( + CD63A10A1ED33EE400D04814 /* Sources */, + CD63A10B1ED33EE400D04814 /* Frameworks */, + CD63A10C1ED33EE400D04814 /* Resources */, + CD63A1381ED3405100D04814 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "iOS-TestApp"; + productName = TestApp; + productReference = CD63A10E1ED33EE400D04814 /* iOS-TestApp.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + CDB4E14B1ED1D3DA00DE6714 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1140; + ORGANIZATIONNAME = "Patrick Kladek"; + TargetAttributes = { + CD63352023E2D28900293E4B = { + CreatedOnToolsVersion = 11.3.1; + DevelopmentTeam = BQ6K935NHJ; + ProvisioningStyle = Automatic; + }; + CD63A10D1ED33EE400D04814 = { + CreatedOnToolsVersion = 6.2; + }; + }; + }; + buildConfigurationList = CDB4E14E1ED1D3DA00DE6714 /* Build configuration list for PBXProject "Example" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = CDB4E14A1ED1D3DA00DE6714; + productRefGroup = CDB4E1551ED1D3DA00DE6714 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + CD63A10D1ED33EE400D04814 /* iOS-TestApp */, + CD63352023E2D28900293E4B /* macOS-TestApp */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + CD63351F23E2D28900293E4B /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CD63354123E2D2F200293E4B /* com.kladek.CocoaDebugKit.settings.basic.plist in Resources */, + CD63354023E2D2F200293E4B /* com.kladek.CocoaDebugKit.settings.dusk.plist in Resources */, + CD63354D23E2D7F500293E4B /* MainMenu.xib in Resources */, + CD63354823E2D2F200293E4B /* com.kladek.CocoaDebugKit.settings.default.plist in Resources */, + CD63354523E2D2F200293E4B /* Images.xcassets in Resources */, + CD63354323E2D2F200293E4B /* image.jpg in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CD63A10C1ED33EE400D04814 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CD63A11C1ED33EE400D04814 /* Main.storyboard in Resources */, + CD63A1211ED33EE400D04814 /* LaunchScreen.xib in Resources */, + CD63A11E1ED33EE400D04814 /* Images.xcassets in Resources */, + CD63A1431ED5E12C00D04814 /* image.jpg in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + CD63351D23E2D28900293E4B /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CD63354423E2D2F200293E4B /* Person.m in Sources */, + CD63352D23E2D28B00293E4B /* main.m in Sources */, + CD63354623E2D2F200293E4B /* TestObject.m in Sources */, + CD63354723E2D2F200293E4B /* SecondObject.m in Sources */, + CD63352523E2D28900293E4B /* AppDelegate.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CD63A10A1ED33EE400D04814 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CD63A1401ED37CBE00D04814 /* TestClass.m in Sources */, + CD63A1191ED33EE400D04814 /* ViewController.m in Sources */, + CD63A1161ED33EE400D04814 /* AppDelegate.m in Sources */, + CD63A1131ED33EE400D04814 /* main.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + CD63352823E2D28B00293E4B /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + CD63352923E2D28B00293E4B /* Base */, + ); + name = MainMenu.xib; + sourceTree = ""; + }; + CD63353623E2D2F200293E4B /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + CD63353723E2D2F200293E4B /* Base */, + ); + name = MainMenu.xib; + sourceTree = ""; + }; + CD63A11A1ED33EE400D04814 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + CD63A11B1ED33EE400D04814 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + CD63A11F1ED33EE400D04814 /* LaunchScreen.xib */ = { + isa = PBXVariantGroup; + children = ( + CD63A1201ED33EE400D04814 /* Base */, + ); + name = LaunchScreen.xib; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + CD63353023E2D28B00293E4B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_ENTITLEMENTS = "macOS-TestApp/macOS_TestApp.entitlements"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = BQ6K935NHJ; + ENABLE_HARDENED_RUNTIME = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + INFOPLIST_FILE = "macOS-TestApp/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = "com.kladek.cocoadebugkit.macOS-TestApp"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + }; + name = Debug; + }; + CD63353123E2D28B00293E4B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_ENTITLEMENTS = "macOS-TestApp/macOS_TestApp.entitlements"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = BQ6K935NHJ; + ENABLE_HARDENED_RUNTIME = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + INFOPLIST_FILE = "macOS-TestApp/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = "com.kladek.cocoadebugkit.macOS-TestApp"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + }; + name = Release; + }; + CD63A12E1ED33EE400D04814 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = NO; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + INFOPLIST_FILE = "$(SRCROOT)/iOS-TestApp/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MACH_O_TYPE = mh_execute; + PRODUCT_BUNDLE_IDENTIFIER = com.kladek.TestApp; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + CD63A12F1ED33EE400D04814 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = NO; + FRAMEWORK_SEARCH_PATHS = ""; + INFOPLIST_FILE = "$(SRCROOT)/iOS-TestApp/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MACH_O_TYPE = mh_execute; + PRODUCT_BUNDLE_IDENTIFIER = com.kladek.TestApp; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; + CDB4E1681ED1D3DA00DE6714 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + CDB4E1691ED1D3DA00DE6714 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + CD63352F23E2D28B00293E4B /* Build configuration list for PBXNativeTarget "macOS-TestApp" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + CD63353023E2D28B00293E4B /* Debug */, + CD63353123E2D28B00293E4B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + CD63A1321ED33EE400D04814 /* Build configuration list for PBXNativeTarget "iOS-TestApp" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + CD63A12E1ED33EE400D04814 /* Debug */, + CD63A12F1ED33EE400D04814 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + CDB4E14E1ED1D3DA00DE6714 /* Build configuration list for PBXProject "Example" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + CDB4E1681ED1D3DA00DE6714 /* Debug */, + CDB4E1691ED1D3DA00DE6714 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = CDB4E14B1ED1D3DA00DE6714 /* Project object */; +} diff --git a/iOS/CocoaTouchDebugKit.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Example/Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from iOS/CocoaTouchDebugKit.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to Example/Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/iOS/CocoaTouchDebugKit.xcodeproj/project.xcworkspace/xcshareddata/CocoaTouchDebugKit.xccheckout b/Example/Example.xcodeproj/project.xcworkspace/xcshareddata/CocoaTouchDebugKit.xccheckout similarity index 100% rename from iOS/CocoaTouchDebugKit.xcodeproj/project.xcworkspace/xcshareddata/CocoaTouchDebugKit.xccheckout rename to Example/Example.xcodeproj/project.xcworkspace/xcshareddata/CocoaTouchDebugKit.xccheckout diff --git a/iOS/TestApp/AppDelegate.h b/Example/iOS-TestApp/AppDelegate.h similarity index 78% rename from iOS/TestApp/AppDelegate.h rename to Example/iOS-TestApp/AppDelegate.h index 951147e..b447b65 100644 --- a/iOS/TestApp/AppDelegate.h +++ b/Example/iOS-TestApp/AppDelegate.h @@ -8,10 +8,9 @@ #import -@interface AppDelegate : UIResponder -@property (strong, nonatomic) UIWindow *window; +@interface AppDelegate: UIResponder +@property (strong, nonatomic) UIWindow *window; @end - diff --git a/iOS/TestApp/AppDelegate.m b/Example/iOS-TestApp/AppDelegate.m similarity index 99% rename from iOS/TestApp/AppDelegate.m rename to Example/iOS-TestApp/AppDelegate.m index a34c3b3..5a978d9 100644 --- a/iOS/TestApp/AppDelegate.m +++ b/Example/iOS-TestApp/AppDelegate.m @@ -8,12 +8,13 @@ #import "AppDelegate.h" + @interface AppDelegate () @end -@implementation AppDelegate +@implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. diff --git a/iOS/TestApp/Base.lproj/LaunchScreen.xib b/Example/iOS-TestApp/Base.lproj/LaunchScreen.xib similarity index 100% rename from iOS/TestApp/Base.lproj/LaunchScreen.xib rename to Example/iOS-TestApp/Base.lproj/LaunchScreen.xib diff --git a/iOS/TestApp/Base.lproj/Main.storyboard b/Example/iOS-TestApp/Base.lproj/Main.storyboard similarity index 100% rename from iOS/TestApp/Base.lproj/Main.storyboard rename to Example/iOS-TestApp/Base.lproj/Main.storyboard diff --git a/iOS/TestApp/Images.xcassets/AppIcon.appiconset/Contents.json b/Example/iOS-TestApp/Images.xcassets/AppIcon.appiconset/Contents.json similarity index 67% rename from iOS/TestApp/Images.xcassets/AppIcon.appiconset/Contents.json rename to Example/iOS-TestApp/Images.xcassets/AppIcon.appiconset/Contents.json index 36d2c80..d8db8d6 100644 --- a/iOS/TestApp/Images.xcassets/AppIcon.appiconset/Contents.json +++ b/Example/iOS-TestApp/Images.xcassets/AppIcon.appiconset/Contents.json @@ -1,5 +1,15 @@ { "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, { "idiom" : "iphone", "size" : "29x29", @@ -30,6 +40,16 @@ "size" : "60x60", "scale" : "3x" }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, { "idiom" : "ipad", "size" : "29x29", @@ -59,6 +79,16 @@ "idiom" : "ipad", "size" : "76x76", "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" + }, + { + "idiom" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" } ], "info" : { diff --git a/iOS/TestApp/Info.plist b/Example/iOS-TestApp/Info.plist similarity index 95% rename from iOS/TestApp/Info.plist rename to Example/iOS-TestApp/Info.plist index 67ac323..40c6215 100644 --- a/iOS/TestApp/Info.plist +++ b/Example/iOS-TestApp/Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier - com.kladek.$(PRODUCT_NAME:rfc1034identifier) + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/iOS/TestApp/TestClass.h b/Example/iOS-TestApp/TestClass.h similarity index 96% rename from iOS/TestApp/TestClass.h rename to Example/iOS-TestApp/TestClass.h index efd7908..a7dcdb5 100644 --- a/iOS/TestApp/TestClass.h +++ b/Example/iOS-TestApp/TestClass.h @@ -1,6 +1,6 @@ // // TestClass.h -// CocoaTouchDebugKit +// CocoaDebugKit // // Created by Patrick Kladek on 22.05.17. // Copyright (c) 2017 Patrick Kladek. All rights reserved. diff --git a/iOS/TestApp/TestClass.m b/Example/iOS-TestApp/TestClass.m similarity index 93% rename from iOS/TestApp/TestClass.m rename to Example/iOS-TestApp/TestClass.m index f4d99e2..cf51d92 100644 --- a/iOS/TestApp/TestClass.m +++ b/Example/iOS-TestApp/TestClass.m @@ -1,13 +1,13 @@ // // TestClass.m -// CocoaTouchDebugKit +// CocoaDebugKit // // Created by Patrick Kladek on 22.05.17. // Copyright (c) 2017 Patrick Kladek. All rights reserved. // #import "TestClass.h" -#import +#import @implementation TestClass diff --git a/iOS/TestApp/ViewController.h b/Example/iOS-TestApp/ViewController.h similarity index 99% rename from iOS/TestApp/ViewController.h rename to Example/iOS-TestApp/ViewController.h index 9e02e7e..3c60ac1 100644 --- a/iOS/TestApp/ViewController.h +++ b/Example/iOS-TestApp/ViewController.h @@ -10,6 +10,4 @@ @interface ViewController : UIViewController - @end - diff --git a/iOS/TestApp/ViewController.m b/Example/iOS-TestApp/ViewController.m similarity index 87% rename from iOS/TestApp/ViewController.m rename to Example/iOS-TestApp/ViewController.m index eaddb17..4cf3112 100644 --- a/iOS/TestApp/ViewController.m +++ b/Example/iOS-TestApp/ViewController.m @@ -6,16 +6,16 @@ // Copyright (c) 2017 Patrick Kladek. All rights reserved. // -#import "ViewController.h" +#import #import "TestClass.h" -#import +#import "ViewController.h" + @interface ViewController () @end - @implementation ViewController - (void)viewDidLoad @@ -30,15 +30,11 @@ - (void)viewDidLoad view.frame = CGRectMake(50, 20, view.frame.size.width, view.frame.size.height); [self.view addSubview:view]; - - + TestClass *test = [TestClass new]; NSLog(@"%@", [test debugDescription]); - - - - UIImageView *view1 = [[UIImageView alloc] initWithImage:[test debugQuickLookObject]]; - + + UIImageView *view1 = [[UIImageView alloc] initWithImage:[test debugQuickLookObject]]; view1.frame = CGRectMake(10, 150, view1.frame.size.width, view1.frame.size.height); [self.view addSubview:view1]; } diff --git a/iOS/TestApp/image.jpg b/Example/iOS-TestApp/image.jpg similarity index 100% rename from iOS/TestApp/image.jpg rename to Example/iOS-TestApp/image.jpg diff --git a/iOS/TestApp/main.m b/Example/iOS-TestApp/main.m similarity index 100% rename from iOS/TestApp/main.m rename to Example/iOS-TestApp/main.m diff --git a/macOS/Test Application/AppDelegate.h b/Example/macOS-TestApp/AppDelegate.h similarity index 99% rename from macOS/Test Application/AppDelegate.h rename to Example/macOS-TestApp/AppDelegate.h index 78edb9a..8e87f2d 100644 --- a/macOS/Test Application/AppDelegate.h +++ b/Example/macOS-TestApp/AppDelegate.h @@ -10,6 +10,4 @@ @interface AppDelegate : NSObject - @end - diff --git a/Example/macOS-TestApp/AppDelegate.m b/Example/macOS-TestApp/AppDelegate.m new file mode 100644 index 0000000..3a343c7 --- /dev/null +++ b/Example/macOS-TestApp/AppDelegate.m @@ -0,0 +1,141 @@ +// +// AppDelegate.m +// Test Application +// +// Created by Patrick Kladek on 21.05.15. +// Copyright (c) 2015 Patrick Kladek. All rights reserved. +// + +#import +#import "AppDelegate.h" +#import "Person.h" +#import "SecondObject.h" +#import "TestObject.h" + +@interface AppDelegate () + +@property (weak) IBOutlet NSWindow *window; + +@end + + +@implementation AppDelegate + +- (void)applicationDidFinishLaunching:(NSNotification *)aNotification +{ + // init debugFramework + // Note: if sharedInstance is not initialized default values are used. + // Note: in this example every debugView is saved to ~/Desktop/debugView. You can turn this off by setting the key: debugView.appearance.key in plist to false. + NSURL *url = [[NSBundle mainBundle] URLForResource:@"com.kladek.CocoaDebugKit.settings.default" withExtension:@"plist"]; + [[CocoaDebugSettings sharedSettings] loadSettings:url]; + + [self createStaticDebugView]; + [self createDynamicDebugView]; + [self createDynamicDebugViewPerson]; +} + +- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender +{ + return YES; +} + +// MARK: - DebugViews + +- (void)createStaticDebugView +{ + CocoaDebugView *view = [CocoaDebugView debugView]; + [view setTitle:@"ClassName"]; + [view setFrameColor:[NSColor purpleColor]]; + + [view addLineWithDescription:@"Name:" string:@"Value"]; + [view addLineWithDescription:@"Name:" string:@"Value12315645"]; + [view addLineWithDescription:@"Name:" string:@"Value"]; + [view addLineWithDescription:@"NameHalloskfajds:" string:@"Value"]; + [view addLineWithDescription:@"NameHalloskfajds:" integer:12384]; + [view addLineWithDescription:@"dfg:" floating:456462.56451354615135468]; + + + NSArray *array = @[ + @"file:///Users/patrick/Desktop/myAwesomeProject1/", + @"file:///Users/patrick/Desktop/myAwesomeProject2/", + @"file:///Users/patrick/Desktop/myAwesomeProject3/" + ]; + [view addLineWithDescription:@"array" string:array.description]; + + [view addLineWithDescription:@"test" string:nil]; + [view addLineWithDescription:@"test" boolean:YES]; + [view addLineWithDescription:@"test" boolean:NO]; + + [view setFrame:NSOffsetRect(view.frame, 460, 20)]; + [[[self window] contentView] addSubview:view]; +} + +- (void)createDynamicDebugView +{ + SecondObject *obj = [[SecondObject alloc] init]; + [obj setDelegate:self]; + [obj setDate:[NSDate date]]; + + NSImage *image = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image" ofType:@"jpg"]]; + [obj setDataImage:[image TIFFRepresentation]]; + + [obj setHallo:@"Hello World"]; + [obj setSet:[NSSet setWithObject:@"Hallo"]]; + [obj setImage:image]; + [obj setTest:@"Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.\nDuis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.\nUt wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.\nNam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.\nDuis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis.\nAt vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, At accusam aliquyam diam diam dolore dolores duo eirmod eos erat, et nonumy sed tempor et et invidunt justo labore Stet clita ea et gubergren, kasd magna no rebum. sanctus sea sed takimata ut vero voluptua. est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur"]; + [obj setName:@"Name yxcvb"]; + [obj setCheck_bool:YES]; + [obj setInum:32000]; + [obj setLnum:64000]; + [obj setCcheck:'r']; + [obj setUrl:[NSURL URLWithString:@"file:///Users/patrick/Desktop/"]]; + [obj setColor:[NSColor colorWithCalibratedRed:0.461 green:1.000 blue:0.962 alpha:0.540]]; + [obj setError:[NSError errorWithDomain:@"com.kladek.CocoaDebugKit" code:5645 userInfo:@{ + NSLocalizedFailureReasonErrorKey: @"LocalizedFailureReason", + NSLocalizedDescriptionKey: @"Something went wrong", + NSLocalizedRecoverySuggestionErrorKey: @"LocalizedRecoverySuggestion, do some thing, need some text for testing, do something more to reproduce this error", + NSLocalizedRecoveryOptionsErrorKey: @"LocalizedRecoveryOptions", + NSRecoveryAttempterErrorKey: @"RecoveryAttempter", + NSHelpAnchorErrorKey: @"HelpAnchor", + NSStringEncodingErrorKey: @"NSStringEncodingError", + NSURLErrorKey: @"NSURLError", + NSFilePathErrorKey: @" NSFilePathError" + }]]; + TestObject *obj2 = [[TestObject alloc] init]; + [obj setObject:obj2]; + + NSView *newView = [obj debugQuickLookObject]; + [newView setFrame:NSOffsetRect(newView.frame, 20, 20)]; + [[[self window] contentView] addSubview:newView]; +} + +- (void)createDynamicDebugViewPerson +{ + NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; + NSDateComponents *dateComponents = [[NSDateComponents alloc] init]; + dateComponents.year = 1996; + dateComponents.month = 7; + dateComponents.day = 4; + + Person *person = [[Person alloc] init]; + person.image = [NSImage imageNamed:@"image.jpg"]; + person.firstName = @"Patrick"; + person.lastName = @"Kladek"; + person.birthday = [gregorianCalendar dateFromComponents:dateComponents]; + + NSView *view2 = [person debugQuickLookObject]; + [view2 setFrame:NSOffsetRect(view2.frame, 460, 385)]; + + [[[self window] contentView] addSubview:view2]; + NSLog(@"%@", [person debugDescription]); +} + +/** + * CocoaTestObjectDelegate + */ +- (void)smt +{ + NSLog(@"%s", __PRETTY_FUNCTION__); +} + +@end diff --git a/macOS/Test Application/Base.lproj/MainMenu.xib b/Example/macOS-TestApp/Base.lproj/MainMenu.xib similarity index 99% rename from macOS/Test Application/Base.lproj/MainMenu.xib rename to Example/macOS-TestApp/Base.lproj/MainMenu.xib index 9af3527..fdcdb5a 100644 --- a/macOS/Test Application/Base.lproj/MainMenu.xib +++ b/Example/macOS-TestApp/Base.lproj/MainMenu.xib @@ -1,8 +1,8 @@ - - + + - - + + @@ -666,16 +666,18 @@ + - + + diff --git a/macOS/Test Application/Images.xcassets/AppIcon.appiconset/Contents.json b/Example/macOS-TestApp/Images.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from macOS/Test Application/Images.xcassets/AppIcon.appiconset/Contents.json rename to Example/macOS-TestApp/Images.xcassets/AppIcon.appiconset/Contents.json diff --git a/macOS/Test Application/Images.xcassets/AppIcon.appiconset/icon_128x128.png b/Example/macOS-TestApp/Images.xcassets/AppIcon.appiconset/icon_128x128.png similarity index 100% rename from macOS/Test Application/Images.xcassets/AppIcon.appiconset/icon_128x128.png rename to Example/macOS-TestApp/Images.xcassets/AppIcon.appiconset/icon_128x128.png diff --git a/macOS/Test Application/Images.xcassets/AppIcon.appiconset/icon_128x128@2x.png b/Example/macOS-TestApp/Images.xcassets/AppIcon.appiconset/icon_128x128@2x.png similarity index 100% rename from macOS/Test Application/Images.xcassets/AppIcon.appiconset/icon_128x128@2x.png rename to Example/macOS-TestApp/Images.xcassets/AppIcon.appiconset/icon_128x128@2x.png diff --git a/macOS/Test Application/Images.xcassets/AppIcon.appiconset/icon_16x16.png b/Example/macOS-TestApp/Images.xcassets/AppIcon.appiconset/icon_16x16.png similarity index 100% rename from macOS/Test Application/Images.xcassets/AppIcon.appiconset/icon_16x16.png rename to Example/macOS-TestApp/Images.xcassets/AppIcon.appiconset/icon_16x16.png diff --git a/macOS/Test Application/Images.xcassets/AppIcon.appiconset/icon_16x16@2x.png b/Example/macOS-TestApp/Images.xcassets/AppIcon.appiconset/icon_16x16@2x.png similarity index 100% rename from macOS/Test Application/Images.xcassets/AppIcon.appiconset/icon_16x16@2x.png rename to Example/macOS-TestApp/Images.xcassets/AppIcon.appiconset/icon_16x16@2x.png diff --git a/macOS/Test Application/Images.xcassets/AppIcon.appiconset/icon_256x256.png b/Example/macOS-TestApp/Images.xcassets/AppIcon.appiconset/icon_256x256.png similarity index 100% rename from macOS/Test Application/Images.xcassets/AppIcon.appiconset/icon_256x256.png rename to Example/macOS-TestApp/Images.xcassets/AppIcon.appiconset/icon_256x256.png diff --git a/macOS/Test Application/Images.xcassets/AppIcon.appiconset/icon_256x256@2x.png b/Example/macOS-TestApp/Images.xcassets/AppIcon.appiconset/icon_256x256@2x.png similarity index 100% rename from macOS/Test Application/Images.xcassets/AppIcon.appiconset/icon_256x256@2x.png rename to Example/macOS-TestApp/Images.xcassets/AppIcon.appiconset/icon_256x256@2x.png diff --git a/macOS/Test Application/Images.xcassets/AppIcon.appiconset/icon_32x32.png b/Example/macOS-TestApp/Images.xcassets/AppIcon.appiconset/icon_32x32.png similarity index 100% rename from macOS/Test Application/Images.xcassets/AppIcon.appiconset/icon_32x32.png rename to Example/macOS-TestApp/Images.xcassets/AppIcon.appiconset/icon_32x32.png diff --git a/macOS/Test Application/Images.xcassets/AppIcon.appiconset/icon_32x32@2x.png b/Example/macOS-TestApp/Images.xcassets/AppIcon.appiconset/icon_32x32@2x.png similarity index 100% rename from macOS/Test Application/Images.xcassets/AppIcon.appiconset/icon_32x32@2x.png rename to Example/macOS-TestApp/Images.xcassets/AppIcon.appiconset/icon_32x32@2x.png diff --git a/macOS/Test Application/Images.xcassets/AppIcon.appiconset/icon_512x512.png b/Example/macOS-TestApp/Images.xcassets/AppIcon.appiconset/icon_512x512.png similarity index 100% rename from macOS/Test Application/Images.xcassets/AppIcon.appiconset/icon_512x512.png rename to Example/macOS-TestApp/Images.xcassets/AppIcon.appiconset/icon_512x512.png diff --git a/macOS/Test Application/Images.xcassets/AppIcon.appiconset/icon_512x512@2x.png b/Example/macOS-TestApp/Images.xcassets/AppIcon.appiconset/icon_512x512@2x.png similarity index 100% rename from macOS/Test Application/Images.xcassets/AppIcon.appiconset/icon_512x512@2x.png rename to Example/macOS-TestApp/Images.xcassets/AppIcon.appiconset/icon_512x512@2x.png diff --git a/macOS/Test Application/Info.plist b/Example/macOS-TestApp/Info.plist similarity index 72% rename from macOS/Test Application/Info.plist rename to Example/macOS-TestApp/Info.plist index 2243330..9efa27f 100644 --- a/macOS/Test Application/Info.plist +++ b/Example/macOS-TestApp/Info.plist @@ -3,32 +3,34 @@ CFBundleDevelopmentRegion - en + $(DEVELOPMENT_LANGUAGE) CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIconFile CFBundleIdentifier - com.kladek.$(PRODUCT_NAME:rfc1034identifier) + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType - APPL + $(PRODUCT_BUNDLE_PACKAGE_TYPE) CFBundleShortVersionString 1.0 - CFBundleSignature - ???? CFBundleVersion - 635 + 1 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) NSHumanReadableCopyright - Copyright © 2015 Patrick Kladek. All rights reserved. + Copyright © 2020 Patrick Kladek. All rights reserved. NSMainNibFile MainMenu NSPrincipalClass NSApplication + NSSupportsAutomaticTermination + + NSSupportsSuddenTermination + diff --git a/macOS/Test Application/Person.h b/Example/macOS-TestApp/Person.h similarity index 100% rename from macOS/Test Application/Person.h rename to Example/macOS-TestApp/Person.h diff --git a/macOS/Test Application/Person.m b/Example/macOS-TestApp/Person.m similarity index 100% rename from macOS/Test Application/Person.m rename to Example/macOS-TestApp/Person.m diff --git a/macOS/Test Application/SecondObject.h b/Example/macOS-TestApp/SecondObject.h similarity index 99% rename from macOS/Test Application/SecondObject.h rename to Example/macOS-TestApp/SecondObject.h index c76d1ee..dafc03e 100644 --- a/macOS/Test Application/SecondObject.h +++ b/Example/macOS-TestApp/SecondObject.h @@ -8,6 +8,7 @@ #import "TestObject.h" + @interface SecondObject : TestObject @property (nonatomic) NSString *hallo; diff --git a/macOS/Test Application/SecondObject.m b/Example/macOS-TestApp/SecondObject.m similarity index 100% rename from macOS/Test Application/SecondObject.m rename to Example/macOS-TestApp/SecondObject.m diff --git a/macOS/Test Application/TestObject.h b/Example/macOS-TestApp/TestObject.h similarity index 94% rename from macOS/Test Application/TestObject.h rename to Example/macOS-TestApp/TestObject.h index 988ce89..f39deba 100644 --- a/macOS/Test Application/TestObject.h +++ b/Example/macOS-TestApp/TestObject.h @@ -10,16 +10,15 @@ @class TestObject; + @protocol TestObjectDelegate --(void)smt; +- (void)smt; @end - - -@interface TestObject : NSObject +@interface TestObject: NSObject @property (nonatomic, weak) id delegate; @@ -41,8 +40,6 @@ @property (nonatomic) NSURL *url; - - @property (nonatomic) TestObject *object; - (id)debugQuickLookObject; diff --git a/macOS/Test Application/TestObject.m b/Example/macOS-TestApp/TestObject.m similarity index 100% rename from macOS/Test Application/TestObject.m rename to Example/macOS-TestApp/TestObject.m diff --git a/macOS/Test Application/com.kladek.CocoaDebugKit.settings.basic.plist b/Example/macOS-TestApp/com.kladek.CocoaDebugKit.settings.basic.plist similarity index 100% rename from macOS/Test Application/com.kladek.CocoaDebugKit.settings.basic.plist rename to Example/macOS-TestApp/com.kladek.CocoaDebugKit.settings.basic.plist diff --git a/macOS/Test Application/com.kladek.CocoaDebugKit.settings.default.plist b/Example/macOS-TestApp/com.kladek.CocoaDebugKit.settings.default.plist similarity index 100% rename from macOS/Test Application/com.kladek.CocoaDebugKit.settings.default.plist rename to Example/macOS-TestApp/com.kladek.CocoaDebugKit.settings.default.plist diff --git a/macOS/Test Application/com.kladek.CocoaDebugKit.settings.dusk.plist b/Example/macOS-TestApp/com.kladek.CocoaDebugKit.settings.dusk.plist similarity index 100% rename from macOS/Test Application/com.kladek.CocoaDebugKit.settings.dusk.plist rename to Example/macOS-TestApp/com.kladek.CocoaDebugKit.settings.dusk.plist diff --git a/macOS/Test Application/image.jpg b/Example/macOS-TestApp/image.jpg similarity index 100% rename from macOS/Test Application/image.jpg rename to Example/macOS-TestApp/image.jpg diff --git a/Example/macOS-TestApp/macOS_TestApp.entitlements b/Example/macOS-TestApp/macOS_TestApp.entitlements new file mode 100644 index 0000000..f2ef3ae --- /dev/null +++ b/Example/macOS-TestApp/macOS_TestApp.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.files.user-selected.read-only + + + diff --git a/Example/macOS-TestApp/main.m b/Example/macOS-TestApp/main.m new file mode 100644 index 0000000..aaae798 --- /dev/null +++ b/Example/macOS-TestApp/main.m @@ -0,0 +1,16 @@ +// +// main.m +// macOS-TestApp +// +// Created by Patrick Kladek on 30.01.20. +// Copyright © 2020 Patrick Kladek. All rights reserved. +// + +#import + +int main(int argc, const char * argv[]) { + @autoreleasepool { + // Setup code that might create autoreleased objects goes here. + } + return NSApplicationMain(argc, argv); +} diff --git a/README.md b/README.md index 1f74aa5..b3dd5b3 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,11 @@ CocoaDebugKit ============ [![Twitter: @PatrickKladek](https://img.shields.io/badge/twitter-@PatrickKladek-orange.svg?style=flat)](https://twitter.com/PatrickKladek) [![License](https://img.shields.io/badge/license-MIT-green.svg?style=flat)](https://github.com/Patrick-Kladek/CocoaDebugKit/blob/master/LICENSE.md) -![Build](https://img.shields.io/badge/build-Xcode%206.2-blue.svg) +![Build](https://img.shields.io/badge/build-Xcode%2011-blue.svg) ![Platform](https://img.shields.io/badge/platform-macOS%2010.9+%20|%20iOS%208.0+-blue.svg) ![Tested](https://img.shields.io/badge/tested-macOS%2010.9%20|%20iOS%208.0-blue.svg) +[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) + Debugging made easy. Automatically create QuickLook images of custom objects. @@ -43,7 +45,22 @@ After that set a breakpoint in your code, select an object you want to inspect a ## Requirements - macOS 10.9+ -- Xcode 6.2+ +- iOS 8+ +- Xcode 11+ + +## Installation + +The prefered way to use CocoaDebugKit is via Carthage. Simply add this line to your cartfile: + +``` +github "Patrick-Kladek/CocoaDebugKit" +``` + +and run: + +``` +carthage update --platform ios +``` ## Known Limitations - NSObject rootclass required diff --git a/Shared/CocoaDebugDescription.m b/Shared/CocoaDebugDescription.m deleted file mode 100644 index 65a9ad9..0000000 --- a/Shared/CocoaDebugDescription.m +++ /dev/null @@ -1,181 +0,0 @@ -// -// CocoaDebugDescription.m -// CocoaDebugKit -// -// Created by Patrick Kladek on 19.04.16. -// Copyright (c) 2016 Patrick Kladek. All rights reserved. -// - -#import "CocoaDebugDescription.h" -#import "CocoaPropertyEnumerator.h" -#import "CocoaDebugSettings.h" -#import "NSObject+CPAdditions.h" - - -@interface CocoaDebugDescription () -{ - CocoaPropertyEnumerator *propertyEnumerator; - NSMutableArray *lines; - NSInteger typeLenght; -} - -@end - - - -@implementation CocoaDebugDescription - -+ (CocoaDebugDescription *)debugDescription -{ - CocoaDebugDescription *description = [[self alloc] init]; - return description; -} - -+ (CocoaDebugDescription *)debugDescriptionForObject:(NSObject *)obj -{ - CocoaDebugDescription *description = [[self alloc] init]; - [description addAllPropertiesFromObject:obj]; - return description; -} - -- (instancetype)init -{ - self = [super init]; - if (self) - { - propertyEnumerator = [[CocoaPropertyEnumerator alloc] init]; - lines = [NSMutableArray array]; - typeLenght = 0; - - CocoaDebugSettings *settings = [CocoaDebugSettings sharedSettings]; - - self.dataMaxLenght = settings.maxDataLenght; - self.save = settings.save; - self.saveUrl = settings.saveUrl; - } - return self; -} - - -- (void)addAllPropertiesFromObject:(NSObject *)obj -{ - _obj = obj; - - Class currentClass = [obj class]; - - while (currentClass != nil && currentClass != [NSObject class]) - { - [propertyEnumerator enumeratePropertiesFromClass:currentClass allowed:nil block:^(NSString *type, NSString *name) { - [self addProperty:name type:type fromObject:obj]; - }]; - - currentClass = [currentClass superclass]; - } -} - -- (void)addProperty:(NSString *)name type:(NSString *)type fromObject:(NSObject *)obj -{ - if (!_obj) { - _obj = obj; - } - - - Class class = NSClassFromString(type); - - if ([class isSubclassOfClass:[NSData class]]) - { - NSData *data = [obj valueForKey:name]; - - // cut lenght to 100 byte - if ([data length] > self.dataMaxLenght.integerValue) - { - data = [data subdataWithRange:NSMakeRange(0, self.dataMaxLenght.integerValue)]; - } - - [self addDescriptionLine:[CocoaPropertyLine lineWithType:type name:name value:[data description]]]; - return; - } - - if ([class isSubclassOfClass:[CPImage class]]) - { - CPImage *image = [obj valueForKey:name]; - NSString *imageDescription = [NSString stringWithFormat:@"size: %.0fx%.0f", image.size.width, image.size.height]; - [self addDescriptionLine:[CocoaPropertyLine lineWithType:type name:name value:imageDescription]]; - return; - } - - - id value = [obj valueForKey:name]; - NSString *description = [[value description] stringByReplacingOccurrencesOfString:@"\n" withString:[NSString stringWithFormat:@"\n%@", [self _spaceFromLenght:4]]]; - [self addDescriptionLine:[CocoaPropertyLine lineWithType:type name:name value:description]]; -} - -- (NSString *)stringRepresentation -{ - NSMutableString *string = [NSMutableString stringWithFormat:@"<%p> %@ {\n", _obj, _obj.cp_className]; - for (CocoaPropertyLine *line in lines) - { - NSInteger deltaLenght = typeLenght - (line.type.length + line.name.length); - [string appendFormat:@"\t%@%@ %@ = %@\n", line.type, [self _spaceFromLenght:deltaLenght], line.name, line.value]; - } - - [string appendString:@"}"]; - return string; -} - - - - -- (void)saveDebugDescription -{ - NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary]; - NSString *appVersion = [infoDict objectForKey:@"CFBundleShortVersionString"]; // example: 1.0.0 - NSString *buildNumber = [infoDict objectForKey:@"CFBundleVersion"]; // example: 42 - - NSURL *url = [_saveUrl URLByAppendingPathComponent:appVersion]; - url = [url URLByAppendingPathComponent:buildNumber]; - - NSError *error; - if (![[NSFileManager defaultManager] createDirectoryAtURL:url withIntermediateDirectories:YES attributes:nil error:&error]) - { - NSLog(@"%@", error); - return; - } - - NSString *className = [_obj cp_className]; - - NSDictionary *debuggedObjects = [[CocoaDebugSettings sharedSettings] debuggedObjects]; - NSInteger debuggedCount = [[debuggedObjects valueForKey:className] integerValue]; - debuggedCount++; - [debuggedObjects setValue:[NSNumber numberWithInteger:debuggedCount] forKey:className]; - url = [url URLByAppendingPathComponent:[NSString stringWithFormat:@"%@ %li.txt", className, (long)debuggedCount]]; - - [self saveDebugDescriptionToUrl:url error:nil]; -} - -- (BOOL)saveDebugDescriptionToUrl:(NSURL *)url error:(NSError **)error -{ - return [[self stringRepresentation] writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:error]; -} - -#pragma mark - Private - -- (NSString *)_spaceFromLenght:(NSInteger)lenght -{ - NSMutableString *string = [[NSMutableString alloc] initWithCapacity:lenght]; - for (NSInteger i = 0; i < lenght; i++) { - [string appendString:@" "]; - } - return string; -} - -- (void)addDescriptionLine:(CocoaPropertyLine *)line -{ - if (line.type.length + line.name.length > typeLenght) { - typeLenght = line.type.length + line.name.length; - } - - [lines addObject:line]; -} - -@end diff --git a/Shared/CocoaDebugSettings.m b/Shared/CocoaDebugSettings.m deleted file mode 100644 index 3a380d1..0000000 --- a/Shared/CocoaDebugSettings.m +++ /dev/null @@ -1,252 +0,0 @@ -// -// CocoaDebugSettings.m -// CocoaDebugKit -// -// Created by Patrick Kladek on 19.04.16. -// Copyright (c) 2016 Patrick Kladek. All rights reserved. -// - -#import "CocoaDebugSettings.h" - - -static CPColor *NSColorFromHexString(NSString *inColorString) -{ - CPColor *result = nil; - unsigned colorCode = 0; - unsigned char redByte, greenByte, blueByte, alphaByte; - - if (nil != inColorString) - { - NSScanner *scanner = [NSScanner scannerWithString:inColorString]; - (void) [scanner scanHexInt:&colorCode]; // ignore error - } - redByte = (unsigned char)(colorCode >> 24); - greenByte = (unsigned char)(colorCode >> 16); - blueByte = (unsigned char)(colorCode >> 8); - alphaByte = (unsigned char)(colorCode); // masks off high bits - - result = [CPColor colorWithRed:(CGFloat)redByte / 0xff green:(CGFloat)greenByte / 0xff blue:(CGFloat)blueByte / 0xff alpha:(CGFloat)alphaByte / 0xff]; - return result; -} - - -@interface CocoaDebugSettings () -{ - NSDictionary *settings; -} - -@end - - - -@implementation CocoaDebugSettings - -+ (CocoaDebugSettings *)sharedSettings -{ - __strong static id _sharedObject = nil; - - static dispatch_once_t p = 0; - - dispatch_once(&p, ^{ - _sharedObject = [[self alloc] init]; - }); - - return _sharedObject; -} - -- (instancetype)init -{ - self = [super init]; - if (self) - { - _lineSpace = 7; - _highlightKeywords = true; - _highlightNumbers = true; - - _textColor = [CPColor blackColor]; - _textFont = [CPFont fontWithName:@"Menlo" size:12]; - - _keywordColor = [CPColor colorWithRed:0.592 green:0.000 blue:0.496 alpha:1.000]; - _keywordFont = [CPFont fontWithName:@"Menlo" size:12]; - - _numberColor = [CPColor colorWithRed:0.077 green:0.000 blue:0.766 alpha:1.000]; - _numberFont = [CPFont fontWithName:@"Menlo" size:12]; - - _propertyNameColor = [CPColor grayColor]; - _propertyNameFont = [CPFont fontWithName:@"Menlo" size:12]; - - _titleColor = [CPColor whiteColor]; - _titleFont = [CPFont fontWithName:@"Menlo-Bold" size:13]; - - - _frameColor = [CPColor blueColor]; - _backgroundColor = [CPColor whiteColor]; - _imageSize = CPMakeSize(30, 30); - - _maxSizeOfField = CGSizeMake(300, 500); - _maxDataLenght = [NSNumber numberWithInteger:50]; - _convertDataToImage = true; - _propertyNameContains = @[@"image", @"icon"]; - - _dateFormat = @"yyyy-MM-dd 'at' HH:mm"; - _numberOfBitsPerColorComponent = 8; - - _save = NO; - _saveUrl = [NSURL fileURLWithPath:[@"~/Desktop" stringByExpandingTildeInPath]]; - _saveAsPDF = NO; - - _debuggedObjects = [NSMutableDictionary dictionary]; - } - return self; -} - -- (BOOL)loadSettings:(NSURL *)url -{ - _url = url; - - settings = [NSDictionary dictionaryWithContentsOfURL:_url]; - - if (settings) - { - [self importSettings]; - return YES; - } - - return NO; -} - -- (BOOL)saveSettings:(NSURL *)url -{ - @throw @"not implemented"; - return NO; -} - -- (void)importSettings -{ - if ([settings valueForKeyPath:@"debugView.keywords.highlight"]) { - _highlightKeywords = [[settings valueForKeyPath:@"debugView.keywords.highlight"] boolValue]; - } - - if ([settings valueForKeyPath:@"debugView.keywords.color"]) { - _keywordColor = NSColorFromHexString([settings valueForKeyPath:@"debugView.keywords.color"]); - } - - if ([settings valueForKeyPath:@"debugView.keywords.font"] && [settings valueForKeyPath:@"debugView.keywords.size"]) { - _keywordFont = [CPFont fontWithName:[settings valueForKeyPath:@"debugView.keywords.font"] size:[[settings valueForKeyPath:@"debugView.keywords.size"] integerValue]]; - } - - - - - if ([settings valueForKeyPath:@"debugView.numbers.highlight"]) { - _highlightNumbers = [[settings valueForKeyPath:@"debugView.numbers.highlight"] boolValue]; - } - - if ([settings valueForKeyPath:@"debugView.numbers.color"]) { - _numberColor = NSColorFromHexString([settings valueForKeyPath:@"debugView.numbers.color"]); - } - - if ([settings valueForKeyPath:@"debugView.numbers.font"] && [settings valueForKeyPath:@"debugView.numbers.size"]) { - _numberFont = [CPFont fontWithName:[settings valueForKeyPath:@"debugView.numbers.font"] size:[[settings valueForKeyPath:@"debugView.numbers.size"] integerValue]]; - } - - - - - - if ([settings valueForKeyPath:@"debugView.text.color"]) { - _textColor = NSColorFromHexString([settings valueForKeyPath:@"debugView.text.color"]); - } - - if ([settings valueForKeyPath:@"debugView.text.font"] && [settings valueForKeyPath:@"debugView.text.size"]) { - _textFont = [CPFont fontWithName:[settings valueForKeyPath:@"debugView.text.font"] size:[[settings valueForKeyPath:@"debugView.text.size"] integerValue]]; - } - - - - - if ([settings valueForKeyPath:@"debugView.propertyName.color"]) { - _propertyNameColor = NSColorFromHexString([settings valueForKeyPath:@"debugView.propertyName.color"]); - } - - if ([settings valueForKeyPath:@"debugView.propertyName.font"] && [settings valueForKeyPath:@"debugView.propertyName.size"]) { - _propertyNameFont = [CPFont fontWithName:[settings valueForKeyPath:@"debugView.propertyName.font"] size:[[settings valueForKeyPath:@"debugView.propertyName.size"] integerValue]]; - } - - - - if ([settings valueForKeyPath:@"debugView.title.color"]) { - _titleColor = NSColorFromHexString([settings valueForKeyPath:@"debugView.title.color"]); - } - - if ([settings valueForKeyPath:@"debugView.title.font"] && [settings valueForKeyPath:@"debugView.title.size"]) { - _titleFont = [CPFont fontWithName:[settings valueForKeyPath:@"debugView.title.font"] size:[[settings valueForKeyPath:@"debugView.title.size"] integerValue]]; - } - - - - if ([settings valueForKeyPath:@"debugView.image.size"]) { - _imageSize = CPSizeFromString([settings valueForKeyPath:@"debugView.image.size"]); - } - - - - - if ([settings valueForKeyPath:@"debugView.appearance.lineSpace"]) { - _lineSpace = [[settings valueForKeyPath:@"debugView.appearance.lineSpace"] integerValue]; - } - - if ([settings valueForKeyPath:@"debugView.appearance.backgroundColor"]) { - _backgroundColor = NSColorFromHexString([settings valueForKeyPath:@"debugView.appearance.backgroundColor"]); - } - - if ([settings valueForKeyPath:@"debugView.appearance.frameColor"]) { - _frameColor = NSColorFromHexString([settings valueForKeyPath:@"debugView.appearance.frameColor"]); - } - - if ([settings valueForKeyPath:@"debugView.appearance.numberOfBitsPerColorComponent"]) { - _numberOfBitsPerColorComponent = [[settings valueForKeyPath:@"debugView.appearance.numberOfBitsPerColorComponent"] integerValue]; - } - - - - - if ([settings valueForKeyPath:@"debugDescription.NSData.cutLenght"]) - { - _maxDataLenght = [settings valueForKeyPath:@"debugDescription.NSData.cutLenght"]; - } - - if ([settings valueForKeyPath:@"debugView.image.dataToImage"]) { - _convertDataToImage = [[settings valueForKeyPath:@"debugView.image.dataToImage"] boolValue]; - } - - if ([settings valueForKeyPath:@"debugView.image.propertyNameContains"]) { - _propertyNameContains = [settings valueForKeyPath:@"debugView.image.propertyNameContains"]; - } - - - if ([settings valueForKeyPath:@"debugView.appearance.save"]) { - _save = [[settings valueForKeyPath:@"debugView.appearance.save"] boolValue]; - } - - if ([settings valueForKeyPath:@"debugView.appearance.path"]) { - _saveUrl = [NSURL fileURLWithPath:[[settings valueForKeyPath:@"debugView.appearance.path"] stringByExpandingTildeInPath]]; - } - - if ([settings valueForKeyPath:@"debugView.appearance.usePDF"]) { - _saveAsPDF = [[settings valueForKeyPath:@"debugView.appearance.usePDF"] boolValue]; - } - - if ([settings valueForKeyPath:@"debugView.appearance.maxFieldSize.width"] && [settings valueForKeyPath:@"debugView.appearance.maxFieldSize.height"]) { - _maxSizeOfField.width = [[settings valueForKeyPath:@"debugView.appearance.maxFieldSize.width"] floatValue]; - _maxSizeOfField.height = [[settings valueForKeyPath:@"debugView.appearance.maxFieldSize.height"] floatValue]; - } - - - - if ([settings valueForKeyPath:@"debugView.NSDate.format"]) { - _dateFormat = [settings valueForKeyPath:@"debugView.NSDate.format"]; - } -} - -@end diff --git a/Shared/CocoaDebugView.m b/Shared/CocoaDebugView.m deleted file mode 100644 index f68a1c2..0000000 --- a/Shared/CocoaDebugView.m +++ /dev/null @@ -1,1210 +0,0 @@ -// -// CocoaDebugView.m -// CocoaDebugKit -// -// Created by Patrick Kladek on 21.05.15. -// Copyright (c) 2015 Patrick Kladek. All rights reserved. -// - -#import "CocoaDebugView.h" -#import "CocoaDebugSettings.h" -#import "CocoaPropertyEnumerator.h" - -#import "CPTextField+CPAdditions.h" -#import "CPView+CPAdditions.h" -#import "CPScreen+CPAdditions.h" -#import "CPColor+CPAdditions.h" -#import "CPImageView+CPAdditions.h" -#import "NSObject+CPAdditions.h" - -#import - -/** - * @todo - implement a protocol to support custom classes in debugView (simple representation like Color) - * - detailViewForError: find a way to resize the view based on its content - * - CoreData Relationships may not work - */ - -@interface CocoaDebugView () -{ - NSInteger pos; - NSInteger leftWidth; - NSInteger rightWidth; - - CPTextField *titleTextField; - CPTextField *defaultTextField; - - CAGradientLayer *titleGradient; - - CocoaPropertyEnumerator *propertyEnumerator; -} - -- (void)_addLineWithDescription:(NSString *)desc string:(NSString *)value leftColor:(CPColor *)leftColor rightColor:(CPColor *)rightColor leftFont:(CPFont *)lFont rightFont:(CPFont *)rfont; -+ (CPImage *)_imageFromView:(CPView *)view; - -@end - - - -@implementation CocoaDebugView - - -+ (instancetype)debugView -{ - return [[self alloc] init]; -} - -/** - * @note: maybe could be simplyfied by calling '-debugViewWithProperties: ofObject:' by passing nil to array - * @note: this would mean we ignore includeSuperclasses and adding parameter includeSuberclasses to 'debugViewWithProperties:ofObject:' would be confusing. - */ -+ (instancetype)debugViewWithAllPropertiesOfObject:(NSObject *)obj includeSuperclasses:(BOOL)include -{ - CocoaDebugView *view = [self debugView]; - [view setObj:obj]; - - if (include) { - [view setTitle:[view traceSuperClassesOfObject:obj]]; - } else { - [view setTitle:NSStringFromClass([obj class])]; - } - - [view addAllPropertiesFromObject:obj includeSuperclasses:include]; - - if ([view save]) { - [view saveDebugView]; - } - - return view; -} - -+ (instancetype)debugViewWithProperties:(NSArray *)properties ofObject:(NSObject *)obj -{ - CocoaDebugView *view = [self debugView]; - [view setObj:obj]; - - [view setTitle:[view traceSuperClassesOfObject:obj]]; - [view addProperties:properties fromObject:obj]; - - if ([view save]) { - [view saveDebugView]; - } - - return view; -} - -+ (instancetype)debugViewWithExcludingProperties:(NSArray *)properties ofObject:(NSObject *)obj -{ - CocoaDebugView *view = [self debugView]; - [view setObj:obj]; - [view setTitle:[view traceSuperClassesOfObject:obj]]; - - CocoaPropertyEnumerator *enumerator = [[CocoaPropertyEnumerator alloc] init]; - Class currentClass = [obj class]; - - while (currentClass && currentClass != [NSObject class]) { - - [enumerator enumeratePropertiesFromClass:currentClass allowed:nil block:^(NSString *type, NSString *name) { - BOOL found = false; - for (NSString *property in properties) - { - if ([property isEqualToString:name]) { - found = true; - break; - } - } - - if (!found) { - [view addProperty:name type:type toObject:obj]; - } - }]; - - currentClass = [currentClass superclass]; - } - - return view; -} - - - -- (instancetype)init -{ - self = [super init]; - if (self) - { - CocoaDebugSettings *settings = [CocoaDebugSettings sharedSettings]; - - self.lineSpace = settings.lineSpace; - self.highlightKeywords = settings.highlightKeywords; - self.highlightNumbers = settings.highlightNumbers; - - self.textColor = settings.textColor; - self.textFont = settings.textFont; - - self.keywordColor = settings.keywordColor; - self.keywordFont = settings.keywordFont; - - self.numberColor = settings.numberColor; - self.numberFont = settings.numberFont; - - self.propertyNameColor = settings.propertyNameColor; - self.propertyNameFont = settings.propertyNameFont; - - self.titleColor = settings.titleColor; - self.titleFont = settings.titleFont; - - self.backgroundColor = settings.backgroundColor; - self.frameColor = settings.frameColor; - - self.imageSize = settings.imageSize; - self.convertDataToImage = settings.convertDataToImage; - self.propertyNameContains = [NSMutableArray arrayWithArray:[settings propertyNameContains]]; - - self.save = settings.save; - self.saveUrl = settings.saveUrl; - self.saveAsPDF = settings.saveAsPDF; - - self.dateFormat = settings.dateFormat; - self.numberOfBitsPerColorComponent = settings.numberOfBitsPerColorComponent; - self.maxSizeOfField = settings.maxSizeOfField; - - - propertyEnumerator = [[CocoaPropertyEnumerator alloc] init]; - - - leftWidth = 0; - rightWidth = 0; - pos = 30; - - - [self setFrame:CPMakeRect(0, 0, 20, 55)]; - [self setTitle:@"CocoaDebugView"]; - [self setDefaultApperance]; - - self.layer.masksToBounds = YES; - -#if TARGET_OS_IPHONE - [super setBackgroundColor:_backgroundColor]; -#else - self.layer = _layer; - self.wantsLayer = YES; - [self.layer setBackgroundColor:[_backgroundColor CGColor]]; -#endif - - CPRect rect = CPMakeRect(0, 0, self.frame.size.width, 23); - titleGradient = [CAGradientLayer layer]; - titleGradient.frame = rect; - titleGradient.backgroundColor = [[CPColor whiteColor] CGColor]; - [self.layer insertSublayer:titleGradient atIndex:0]; - } - return self; -} - -- (void)drawRect:(CPRect)dirtyRect -{ - [super drawRect:dirtyRect]; - - // Uncomment this to resize view based on title lenght -// if (titleTextField.frame.size.width + 20 > self.frame.size.width) // +20 => | 10 --- label ----- 10 | -// { -// [self setFrame:CPMakeRect(self.frame.origin.x, self.frame.origin.y, titleTextField.frame.size.width + 20, self.frame.size.height)]; -// } - - [self.layer setCornerRadius:5]; - [self.layer setBorderColor:[_frameColor CGColor]]; - [self.layer setBorderWidth:1]; - [self.layer setBackgroundColor:[_backgroundColor CGColor]]; - - - -#if TARGET_OS_IPHONE - -// [super setBackgroundColor:_backgroundColor]; - -#else - -// [self.layer setBackgroundColor:[_backgroundColor CGColor]]; - -// NSGradient *aGradient = [[NSGradient alloc] initWithStartingColor:startingColor endingColor:_frameColor]; -// [aGradient drawInRect:rect angle:90]; - -#endif -} - -- (BOOL)isFlipped -{ - return YES; -} - -- (void)layoutSubviews -{ - [self resizeGradientLayer]; -} - -- (void)layoutSublayersOfLayer:(CALayer *)layer -{ - [self resizeGradientLayer]; -} - -- (void)resizeGradientLayer -{ - CPColor *startingColor = [_frameColor colorWithAlphaComponent:0.75]; - titleGradient.colors = @[(id)startingColor.CGColor, (id)_frameColor.CGColor]; - titleGradient.frame = CPMakeRect(titleGradient.frame.origin.x, titleGradient.frame.origin.y, self.frame.size.width, titleGradient.frame.size.height); -} - - - -#pragma mark - Apperance - -- (void)setDefaultApperance -{ - [self removeDefaultApperance]; - - defaultTextField = [[CPTextField alloc] initWithFrame:CPMakeRect(10, pos, self.frame.size.width - 20, 20)]; - [defaultTextField cp_setText:@"No Variables"]; - [defaultTextField setTextColor:[CPColor grayColor]]; - [defaultTextField cp_setAlignment:CPAlignmentCenter]; - [defaultTextField cp_setBordered:NO]; - [defaultTextField cp_setEditable:NO]; - [defaultTextField setBackgroundColor:[CPColor clearColor]]; - [self addSubview:defaultTextField]; -} - -- (void)removeDefaultApperance -{ - if (defaultTextField) { - [defaultTextField removeFromSuperview]; - defaultTextField = nil; - } -} - -- (void)setTitle:(NSString *)title -{ - _title = title; - - if (titleTextField) { - [titleTextField removeFromSuperview]; - } - - -#if TARGET_OS_IPHONE - titleTextField = [self defaultLabelWithString:title point:CPMakePoint(10, 3) textAlignment:CPAlignmentLeft]; -#else - titleTextField = [self defaultLabelWithString:title point:CPMakePoint(10, 2) textAlignment:CPAlignmentLeft]; -#endif - - [titleTextField setIdentifier:@"title"]; - [titleTextField setFont:_titleFont]; - [titleTextField setTextColor:_titleColor]; - [titleTextField sizeToFit]; - - if (titleTextField.frame.size.width + 10 > self.frame.size.width) { - [self setFrame:CPMakeRect(self.frame.origin.x, self.frame.origin.y, titleTextField.frame.size.width + 10, self.frame.size.height)]; - } - - [self addSubview:titleTextField]; - - if (pos == 30) { - [self setDefaultApperance]; - } else { - [self removeDefaultApperance]; - } - - [self cp_update]; -} - -- (void)setColor:(CPColor *)color -{ - _frameColor = color; - [self cp_update]; -} - - - - -#pragma mark - Save - -- (CPImage *)imageRepresentation -{ - return [[self class] _imageFromView:self]; -} - -- (void)saveDebugView -{ - NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary]; - NSString *appVersion = [infoDict objectForKey:@"CFBundleShortVersionString"]; // example: 1.0.0 - NSString *buildNumber = [infoDict objectForKey:@"CFBundleVersion"]; // example: 42 - - NSURL *url = [_saveUrl URLByAppendingPathComponent:appVersion]; - url = [url URLByAppendingPathComponent:buildNumber]; - - NSError *error; - if (![[NSFileManager defaultManager] createDirectoryAtURL:url withIntermediateDirectories:YES attributes:nil error:&error]) - { - NSLog(@"%@", error); - return; - } - - NSString *className = [self.obj cp_className]; - NSDictionary *debuggedObjects = [[CocoaDebugSettings sharedSettings] debuggedObjects]; - NSInteger debuggedNr = [[debuggedObjects valueForKey:className] integerValue]; - debuggedNr++; - [debuggedObjects setValue:[NSNumber numberWithInteger:debuggedNr] forKey:className]; - url = [url URLByAppendingPathComponent:[NSString stringWithFormat:@"%@ %li", className, (long)debuggedNr]]; - - if (_saveAsPDF) { - url = [url URLByAppendingPathExtension:@"pdf"]; - } else { - url = [url URLByAppendingPathExtension:@"png"]; - } - - - [self saveDebugViewToUrl:url]; -} - -- (BOOL)saveDebugViewToUrl:(NSURL *)url -{ -#if TARGET_OS_IPHONE - - CPImage *image = [CocoaDebugView _imageFromView:self]; - NSData *data = [self dataFromImage:image]; - return [data writeToURL:url atomically:YES]; - -#else - - if ([[url pathExtension] isEqualToString:@"pdf"]) - { - NSData *data = [self dataWithPDFInsideRect:[self bounds]]; - return [data writeToURL:url atomically:YES]; - } - - CPImage *image = [CocoaDebugView _imageFromView:self]; - NSData *data = [self dataFromImage:image]; - - return [data writeToURL:url atomically:YES]; - -#endif -} - - - -#pragma mark - Add Data - -- (void)addAllPropertiesFromObject:(NSObject *)obj includeSuperclasses:(BOOL)include -{ - if (include) - { - // enumerate all superclasses "class_copyPropertyList(...)" - Class currentClass = [obj class]; - - while (currentClass != nil && currentClass != [NSObject class]) - { - [propertyEnumerator enumeratePropertiesFromClass:currentClass allowed:nil block:^(NSString *type, NSString *name) { - [self addProperty:name type:type toObject:obj]; - }]; - - [self addSeperator]; - - currentClass = [currentClass superclass]; - } - } - else - { - [propertyEnumerator enumeratePropertiesFromClass:[obj class] allowed:nil block:^(NSString *type, NSString *name) { - [self addProperty:name type:type toObject:obj]; - }]; - } -} - -- (void)addProperties:(NSArray *)array fromObject:(NSObject *)obj -{ - if (!array || array.count == 0) { - return; - } - - Class currentClass = [obj class]; - - while (currentClass && currentClass != [NSObject class]) - { - [propertyEnumerator enumeratePropertiesFromClass:currentClass allowed:array block:^(NSString *type, NSString *name) { - [self addProperty:name type:type toObject:obj]; - }]; - - currentClass = [currentClass superclass]; - } -} - - - - -#pragma mark - Add Objects - -- (void)addLineWithDescription:(NSString *)desc string:(NSString *)value -{ - if (value == nil || value == NULL || [value isEqualToString:@"(null)"]) - { - value = @"nil"; - - if (_highlightKeywords == true) { - [self _addLineWithDescription:desc string:value leftColor:_propertyNameColor rightColor:_keywordColor leftFont:_propertyNameFont rightFont:_keywordFont]; - } else { - [self _addLineWithDescription:desc string:value leftColor:_propertyNameColor rightColor:_textColor leftFont:_propertyNameFont rightFont:_keywordFont]; - } - } - else - { - [self _addLineWithDescription:desc string:value leftColor:_propertyNameColor rightColor:_textColor leftFont:_propertyNameFont rightFont:_textFont]; - } -} - -- (void)addLineWithDescription:(NSString *)desc image:(CPImage *)image; -{ - if (!image) { - [self addLineWithDescription:desc string:nil]; - return; - } - - - NSString *upperCaseDescription = [desc stringByReplacingCharactersInRange:NSMakeRange(0, 1) withString:[[desc substringToIndex:1] capitalizedString]]; - CPTextField *left = [self _addLeftLabel:upperCaseDescription color:_propertyNameColor font:_propertyNameFont]; - - CPImageView *imageView = [[CPImageView alloc] initWithFrame:CPMakeRect(10 + leftWidth + 20, pos, _imageSize.width, _imageSize.height)]; - [imageView setImage:image]; - [imageView setIdentifier:@"rightImage"]; - [imageView cp_setImageScaling:CPImageScaleProportionallyUpOrDown]; - [self synchroniseRightWidthFromView:imageView]; - [self addSubview:imageView]; - - [self synchroniseHeightOfView:left secondView:imageView]; - pos = pos + imageView.frame.size.height + _lineSpace; - [self resizeLeftTextViews]; - [self resizeRightTextViews]; - [self setFrame:CPMakeRect(0, 0, 10 + leftWidth + 20 + rightWidth + 10, pos)]; -} - -- (void)addLineWithDescription:(NSString *)desc date:(NSDate *)date -{ - NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; - [dateFormatter setDateFormat:_dateFormat]; - NSString *dateString = [dateFormatter stringFromDate:date]; - [self addLineWithDescription:desc string:dateString]; -} - -- (void)addLineWithDescription:(NSString *)desc view:(CPView *)view -{ - if (!view) { - [self addLineWithDescription:desc string:nil]; - return; - } - - - // add left label - CPTextField *left = [self _addLeftLabel:desc color:_propertyNameColor font:_propertyNameFont]; - - // add right view - [view setFrame:CPMakeRect(10 + leftWidth + 20, pos, view.frame.size.width, view.frame.size.height)]; - [view setIdentifier:@"rightImage"]; - - - [self synchroniseRightWidthFromView:view]; - - pos = pos + fmaxf(left.frame.size.height, view.frame.size.height) + _lineSpace; - [self addSubview:view]; - [self resizeLeftTextViews]; - [self resizeRightTextViews]; - [self setFrame:CPMakeRect(0, 0, 10 + leftWidth + 20 + rightWidth + 10, pos)]; -} - -- (void)addLineWithDescription:(NSString *)desc color:(CPColor *)color -{ - if (!color) { - [self addLineWithDescription:desc string:nil]; - return; - } - - CPView *view = [self detailViewFromColor:color]; - [self addLineWithDescription:desc view:view]; -} - -- (void)addLineWithDescription:(NSString *)desc error:(NSError *)error -{ - if (!error) { - [self addLineWithDescription:desc string:nil]; - return; - } - - CPView *view = [self detailViewFromError:error]; - [self addLineWithDescription:desc view:view]; -} - -- (void)addLineWithDescription:(NSString *)desc data:(NSData *)data -{ - if (!data) { - [self addLineWithDescription:desc string:nil]; - return; - } - - if (data.length > 20) { - NSData *clippedData = [data subdataWithRange:NSMakeRange(0, 20)]; - [self addLineWithDescription:desc string:[NSString stringWithFormat:@"%@ ...", clippedData]]; - } else { - [self addLineWithDescription:desc string:[NSString stringWithFormat:@"%@ ...", data]]; - } -} - - - -#pragma mark - Add Scalar Properties - -- (void)addLineWithDescription:(NSString *)desc integer:(NSInteger)integer -{ - NSString *number = [NSString stringWithFormat:@"%li", (long)integer]; - - if (_highlightNumbers) { - [self _addLineWithDescription:desc string:number leftColor:_propertyNameColor rightColor:_numberColor leftFont:_propertyNameFont rightFont:_numberFont]; - } else { - [self _addLineWithDescription:desc string:number leftColor:_propertyNameColor rightColor:_textColor leftFont:_propertyNameFont rightFont:_textFont]; - } -} - -- (void)addLineWithDescription:(NSString *)desc unsignedInteger:(NSUInteger)uinteger -{ - NSString *number = [NSString stringWithFormat:@"%lu", (unsigned long)uinteger]; - - if (_highlightNumbers) { - [self _addLineWithDescription:desc string:number leftColor:_propertyNameColor rightColor:_numberColor leftFont:_propertyNameFont rightFont:_numberFont]; - } else { - [self _addLineWithDescription:desc string:number leftColor:_propertyNameColor rightColor:_textColor leftFont:_propertyNameFont rightFont:_keywordFont]; - } -} - -- (void)addLineWithDescription:(NSString *)desc longnumber:(long long)number -{ - NSString *num = [NSString stringWithFormat:@"%lli", number]; - - if (_highlightNumbers) { - [self _addLineWithDescription:desc string:num leftColor:_propertyNameColor rightColor:_numberColor leftFont:_propertyNameFont rightFont:_numberFont]; - } else { - [self _addLineWithDescription:desc string:num leftColor:_propertyNameColor rightColor:_textColor leftFont:_propertyNameFont rightFont:_keywordFont]; - } -} - -- (void)addLineWithDescription:(NSString *)desc unsignedLongnumber:(unsigned long long)number -{ - NSString *num = [NSString stringWithFormat:@"%llu", number]; - - if (_highlightNumbers) { - [self _addLineWithDescription:desc string:num leftColor:_propertyNameColor rightColor:_numberColor leftFont:_propertyNameFont rightFont:_numberFont]; - } else { - [self _addLineWithDescription:desc string:num leftColor:_propertyNameColor rightColor:_textColor leftFont:_propertyNameFont rightFont:_keywordFont]; - } -} - -- (void)addLineWithDescription:(NSString *)desc floating:(double)floating -{ - NSString *number = [NSString stringWithFormat:@"%3.8f", floating]; - - if (_highlightNumbers) { - [self _addLineWithDescription:desc string:number leftColor:_propertyNameColor rightColor:_numberColor leftFont:_propertyNameFont rightFont:_numberFont]; - } else { - [self _addLineWithDescription:desc string:number leftColor:_propertyNameColor rightColor:_textColor leftFont:_propertyNameFont rightFont:_keywordFont]; - } -} - -- (void)addLineWithDescription:(NSString *)desc boolean:(BOOL)boolean -{ - NSString *result = boolean ? @"YES" : @"NO"; - - if (_highlightKeywords) { - [self _addLineWithDescription:desc string:result leftColor:_propertyNameColor rightColor:_keywordColor leftFont:_propertyNameFont rightFont:_keywordFont]; - } else { - [self _addLineWithDescription:desc string:result leftColor:_propertyNameColor rightColor:_textColor leftFont:_propertyNameFont rightFont:_keywordFont]; - } -} - -- (void)addSeperator -{ - // TODO: draw dashed line here -} - - - -#pragma mark - Intern - -- (void)addProperty:(NSString *)propertyName type:(NSString *)propertyType toObject:(id)obj -{ - if ([propertyType isEqualToString:@"id"]) - { - NSString *string = [NSString stringWithFormat:@"%@", [obj valueForKey:propertyName]]; - [self addLineWithDescription:[self lineFromString:propertyName] string:string]; - return; - } - - if ([self addPrimitiveProperty:propertyName type:propertyType toObject:obj]) - { - return; - } - - - Class class = NSClassFromString(propertyType); - - if ([class isSubclassOfClass:[NSString class]]) - { - NSString *property = [obj valueForKey:propertyName]; - [self addLineWithDescription:[self lineFromString:propertyName] string:property]; - return; - } - - if ([class isSubclassOfClass:[NSData class]]) - { - NSData *property = [obj valueForKey:propertyName]; - [self addDataProperty:property name:propertyName toObject:obj]; - return; - } - - if ([class isSubclassOfClass:[NSDate class]]) - { - id property = [obj valueForKey:propertyName]; - [self addLineWithDescription:[self lineFromString:propertyName] date:property]; - return; - } - - if ([class isSubclassOfClass:[CPImage class]]) - { - id property = [obj valueForKey:propertyName]; - [self addLineWithDescription:[self lineFromString:propertyName] image:property]; - return; - } - - if ([class isSubclassOfClass:[NSURL class]]) - { - NSURL *url = [obj valueForKey:propertyName]; - [self addLineWithDescription:[self lineFromString:propertyName] string:[url absoluteString]]; - return; - - } - - if ([class isSubclassOfClass:[NSSet class]]) - { - NSSet *set = [obj valueForKey:propertyName]; - [self addLineWithDescription:[self lineFromString:propertyName] string:[set description]]; - return; - } - - if ([class isSubclassOfClass:[NSArray class]]) - { - NSArray *array = [obj valueForKey:propertyName]; - [self addLineWithDescription:[self lineFromString:propertyName] string:[array description]]; - return; - } - - if ([class isSubclassOfClass:[NSDictionary class]]) - { - NSDictionary *dictionary = [obj valueForKey:propertyName]; - [self addLineWithDescription:[self lineFromString:propertyName] string:[dictionary description]]; - return; - } - - if ([class isSubclassOfClass:[CPColor class]]) - { - CPColor *color = [obj valueForKey:propertyName]; - [self addLineWithDescription:[self lineFromString:propertyName] color:color]; - return; - } - - if ([class isSubclassOfClass:[NSError class]]) - { - NSError *error = [obj valueForKey:propertyName]; - [self addLineWithDescription:[self lineFromString:propertyName] error:error]; - return; - } - - if ([self propertyUsesProtocol:propertyType]) // delegate, uses protocol - { - id property = [[obj valueForKey:propertyName] description]; - [self addLineWithDescription:[self lineFromString:propertyName] string:property]; - return; - } - - if ([class isSubclassOfClass:[NSNumber class]]) { - NSNumber *number = [obj valueForKey:propertyName]; - [self _addLineWithDescription:[self lineFromString:propertyName] string:[number descriptionWithLocale:nil] leftColor:_propertyNameColor rightColor:_numberColor leftFont:_propertyNameFont rightFont:_numberFont]; - return; - - } - - - // probably something else, use description method - id property = [[obj valueForKey:propertyName] description]; - [self addLineWithDescription:[self lineFromString:propertyName] string:property]; - - return; -} - -- (CPView *)detailViewFromColor:(CPColor *)color -{ - if (self.numberOfBitsPerColorComponent < 0 || self.numberOfBitsPerColorComponent > 16) { - @throw @"numberOfBitsPerColorComponent out of range (0 - 16)"; - return nil; - } - - CPView *view = [[CPView alloc] initWithFrame:CPMakeRect(0, 0, 140, 80)]; - [view cp_setWantsLayer:YES]; - [[view layer] setMasksToBounds:YES]; - view.layer.borderColor = [[CPColor lightGrayColor] CGColor]; - view.layer.borderWidth = 1 / [[CPScreen mainScreen] cp_scale]; - [view cp_update]; - - CPView *colorView = [[CPView alloc] initWithFrame:CPMakeRect(0, 0, 20, 80)]; - [colorView cp_setWantsLayer:YES]; - [[colorView layer] setBackgroundColor:[color CGColor]]; - [view addSubview:colorView]; - - CPTextField *red = [[CPTextField alloc] initWithFrame:CPMakeRect(25, 60, 100, 20)]; - [red setTextColor:[CPColor grayColor]]; - [red cp_setBordered:NO]; - [red cp_setEditable:NO]; - [red cp_setSelectable:YES]; - [red setFont:_propertyNameFont]; - if (self.numberOfBitsPerColorComponent == 0) { - [red cp_setText:[NSString stringWithFormat:@"Red: %.3f", [color cp_redComponent]]]; - } else { - [red cp_setText:[NSString stringWithFormat:@"Red: %.0f", [color cp_redComponent] * (pow(2, self.numberOfBitsPerColorComponent)-1)]]; - } - [view addSubview:red]; - - CPTextField *green = [[CPTextField alloc] initWithFrame:CPMakeRect(25, 40, 100, 20)]; - [green setTextColor:[CPColor grayColor]]; - [green cp_setBezeled:NO]; - [green cp_setEditable:NO]; - [green cp_setSelectable:YES]; - [green setFont:_propertyNameFont]; - if (self.numberOfBitsPerColorComponent == 0) { - [green cp_setText:[NSString stringWithFormat:@"Green: %.3f", [color cp_greenComponent]]]; - } else { - [green cp_setText:[NSString stringWithFormat:@"Green: %.0f", [color cp_greenComponent] * (pow(2, self.numberOfBitsPerColorComponent)-1)]]; - } - [view addSubview:green]; - - CPTextField *blue = [[CPTextField alloc] initWithFrame:CPMakeRect(25, 20, 100, 20)]; - [blue setTextColor:[CPColor grayColor]]; - [blue cp_setBezeled:NO]; - [blue cp_setEditable:NO]; - [blue cp_setSelectable:YES]; - [blue setFont:_propertyNameFont]; - if (self.numberOfBitsPerColorComponent == 0) { - [blue cp_setText:[NSString stringWithFormat:@"Blue: %.3f", [color cp_blueComponent]]]; - } else { - [blue cp_setText:[NSString stringWithFormat:@"Blue: %.0f", [color cp_blueComponent] * (pow(2, self.numberOfBitsPerColorComponent)-1)]]; - } - [view addSubview:blue]; - - CPTextField *alpha = [[CPTextField alloc] initWithFrame:CPMakeRect(25, 0, 100, 20)]; - [alpha setTextColor:[CPColor grayColor]]; - [alpha cp_setBezeled:NO]; - [alpha cp_setEditable:NO]; - [alpha cp_setSelectable:YES]; - [alpha setFont:_propertyNameFont]; - if (self.numberOfBitsPerColorComponent == 0) { - [alpha cp_setText:[NSString stringWithFormat:@"Alpha: %.3f", [color cp_alphaComponent]]]; - } else { - [alpha cp_setText:[NSString stringWithFormat:@"Alpha: %.0f", [color cp_alphaComponent] * (pow(2, self.numberOfBitsPerColorComponent)-1)]]; - } - [view addSubview:alpha]; - - [red sizeToFit]; - [green sizeToFit]; - [blue sizeToFit]; - [alpha sizeToFit]; - CGFloat width = fmax(fmax(red.frame.size.width, green.frame.size.width), fmax(blue.frame.size.width, alpha.frame.size.width)); - view.frame = CPMakeRect(0, 0, width + colorView.frame.size.width + 5, 80); - - return view; -} - -/// @todo title should resize, maybe use custom subclass with -layoutSubviews -- (CPView *)detailViewFromError:(NSError *)error -{ - if (!error) { - return nil; - } - - CPView *view = [[CPView alloc] initWithFrame:CPMakeRect(0, 0, 300, 80)]; - [view cp_setWantsLayer:YES]; - [[view layer] setMasksToBounds:YES]; - [[view layer] setBorderWidth:1.0f / [[CPScreen mainScreen] cp_scale]]; - [view.layer setBorderColor:[[CPColor lightGrayColor] CGColor]]; - - CPImageView *imageView = [[CPImageView alloc] initWithFrame:CPMakeRect(0, 10, 60, 60)]; - NSURL *imageURL = [[NSBundle bundleForClass:[CocoaDebugView class]] URLForResource:@"AlertCautionIcon" withExtension:@"icns"]; - NSData *data = [NSData dataWithContentsOfURL:imageURL]; - [imageView setImage:[[CPImage alloc] initWithData:data]]; - [imageView cp_setImageScaling:CPImageScaleProportionallyUpOrDown]; - [imageView cp_setEditable:NO]; - [view addSubview:imageView]; - - CPTextField *title = [[CPTextField alloc] initWithFrame:CPMakeRect(60, 55, 240, 20)]; - [title cp_setEditable:NO]; - [title cp_setSelectable:YES]; - [title cp_setBezeled:NO]; - [title cp_setText:[error localizedDescription]]; - [title setFont:[CPFont boldSystemFontOfSize:12]]; - [view addSubview:title]; - - CPTextField *info = [[CPTextField alloc] initWithFrame:CPMakeRect(60, 0, 240, 60)]; - [info cp_setEditable:NO]; - [info cp_setSelectable:YES]; - [info cp_setBezeled:NO]; - [info cp_setText:[error localizedRecoverySuggestion]]; - [view addSubview:info]; - - return view; -} - -- (NSString *)traceSuperClassesOfObject:(NSObject *)obj -{ - Class currentClass = [obj class]; - NSString *classStructure = NSStringFromClass(currentClass); - - - while (NSStringFromClass([currentClass superclass]) != nil) - { - currentClass = [currentClass superclass]; - classStructure = [classStructure stringByAppendingString:[NSString stringWithFormat:@" : %@", NSStringFromClass(currentClass)]]; - } - - return classStructure; -} - -#pragma mark - Custom Type Properties - -- (void)addDataProperty:(NSData *)data name:(NSString *)propertyName toObject:(id)obj -{ - if (_convertDataToImage && _propertyNameContains.count > 0) - { - BOOL contains = false; - - for (NSString *name in _propertyNameContains) - { - if ([propertyName rangeOfString:name options:NSCaseInsensitiveSearch].location != NSNotFound) - { - contains = true; - break; - } - } - - - if (contains) - { - // NSImage encoded as data - CPImage *image = [[CPImage alloc] initWithData:data]; - - if (image) { - [self addLineWithDescription:[self lineFromString:propertyName] image:image]; - return; - } - } - } - - [self addLineWithDescription:[self lineFromString:propertyName] data:data]; - -} - -- (BOOL)addPrimitiveProperty:(NSString *)propertyName type:(NSString *)propertyType toObject:(id)obj -{ - if ([propertyType isEqualToString:@"char"]) // Char & bool - { - char character = [[obj valueForKey:propertyName] charValue]; - - if (character == YES || character == true || character == NO || character == false) { - [self addLineWithDescription:[self lineFromString:propertyName] boolean:character]; - } else { - [self addLineWithDescription:[NSString stringWithFormat:@"%@:", propertyName] string:[NSString stringWithFormat:@"%c", [[obj valueForKey:propertyName] charValue]]]; - } - - return YES; - } - - if ([propertyType isEqualToString:@"int"]) // Int - { - NSNumber *number = [obj valueForKey:propertyName]; - [self addLineWithDescription:[NSString stringWithFormat:@"%@:", propertyName] integer:[number integerValue]]; - return YES; - } - - if ([propertyType isEqualToString:@"short"]) // Short - { - NSNumber *number = [obj valueForKey:propertyName]; - [self addLineWithDescription:[NSString stringWithFormat:@"%@:", propertyName] integer:[number shortValue]]; - return YES; - } - - if ([propertyType isEqualToString:@"long"]) // long - { - NSNumber *number = [obj valueForKey:propertyName]; - [self addLineWithDescription:[NSString stringWithFormat:@"%@:", propertyName] integer:[number longValue]]; - return YES; - } - - if ([propertyType isEqualToString:@"long long"]) // long long - { - NSNumber *number = [obj valueForKey:propertyName]; - [self addLineWithDescription:[NSString stringWithFormat:@"%@:", propertyName] longnumber:[number longLongValue]]; - return YES; - } - - if ([propertyType isEqualToString:@"unsigned char"]) // unsigned char - { - NSNumber *number = [obj valueForKey:propertyName]; - char mchar = [number charValue]; - NSString *string = [NSString stringWithFormat:@"%c", mchar]; - [self addLineWithDescription:[NSString stringWithFormat:@"%@:", propertyName] string:string]; - return YES; - } - - if ([propertyType isEqualToString:@"unsigned int"]) // unsigned Int - { - NSNumber *number = [obj valueForKey:propertyName]; - [self addLineWithDescription:[NSString stringWithFormat:@"%@:", propertyName] unsignedInteger:[number unsignedIntegerValue]]; - return YES; - } - - if ([propertyType isEqualToString:@"unsigned short"]) // unsigned Short - { - NSNumber *number = [obj valueForKey:propertyName]; - [self addLineWithDescription:[NSString stringWithFormat:@"%@:", propertyName] integer:[number unsignedShortValue]]; - return YES; - } - - if ([propertyType isEqualToString:@"unsigned long"]) // unsigned long - { - NSNumber *number = [obj valueForKey:propertyName]; - [self addLineWithDescription:[NSString stringWithFormat:@"%@:", propertyName] unsignedInteger:[number unsignedLongValue]]; - return YES; - } - - if ([propertyType isEqualToString:@"unsigned long long"]) // unsigned long long - { - NSNumber *number = [obj valueForKey:propertyName]; - [self addLineWithDescription:[NSString stringWithFormat:@"%@:", propertyName] unsignedLongnumber:[number unsignedLongLongValue]]; - return YES; - } - - if ([propertyType isEqualToString:@"float"]) // float - { - NSNumber *number = [obj valueForKey:propertyName]; - [self addLineWithDescription:[NSString stringWithFormat:@"%@:", propertyName] floating:[number floatValue]]; - return YES; - } - - if ([propertyType isEqualToString:@"bool"]) // bool - { - NSNumber *number = [obj valueForKey:propertyName]; - [self addLineWithDescription:[self lineFromString:propertyName] boolean:[number boolValue]]; - return YES; - } - - if ([propertyType isEqualToString:@"void"]) // char * (pointer) - { - NSString *string = [NSString stringWithFormat:@"%@", [obj valueForKey:propertyName]]; - [self addLineWithDescription:[self lineFromString:propertyName] string:string]; - return YES; - } - - return NO; -} - - - - -#pragma mark - Private - -- (void)_addLineWithDescription:(NSString *)desc string:(NSString *)value leftColor:(CPColor *)leftColor rightColor:(CPColor *)rightColor leftFont:(CPFont *)lFont rightFont:(CPFont *)rfont -{ - [self removeDefaultApperance]; - - // add left Label - CPTextField *left = [self _addLeftLabel:desc color:leftColor font:lFont]; - - // add right label - CPTextField *right = [self _addRightLabel:value color:rightColor font:rfont]; - - [self synchroniseHeightOfView:left secondView:right]; - pos = pos + fmaxf(left.frame.size.height, right.frame.size.height) + _lineSpace; - [self resizeLeftTextViews]; - [self resizeRightTextViews]; - [self setFrame:CPMakeRect(0, 0, 10 + leftWidth + 20 + rightWidth + 10, pos)]; -} - -- (CPTextField *)_addLeftLabel:(NSString *)desc color:(CPColor *)color font:(CPFont *)font -{ - CPTextField *left = [self defaultLabelWithString:desc point:CPMakePoint(10, pos) textAlignment:CPAlignmentRight]; - [left cp_setText:[left.cp_Text stringByReplacingCharactersInRange:NSMakeRange(0,1) withString:[[left.cp_Text substringToIndex:1] capitalizedString]]]; - [left setIdentifier:@"left"]; - [left setTextColor:color]; - [left setFont:font]; - [left sizeToFit]; - - [self synchroniseLeftWidthFromView:left]; - [self addSubview:left]; - - return left; -} - -- (CPTextField *)_addRightLabel:(NSString *)desc color:(CPColor *)color font:(CPFont *)font -{ - CPTextField *right = [self defaultLabelWithString:desc point:CPMakePoint(10 + leftWidth + 20, pos) textAlignment:CPAlignmentLeft]; - [right setIdentifier:@"right"]; - [right setTextColor:color]; - [right setFont:font]; - - [self addSubview:right]; - [right sizeToFit]; - - // sizeThatsFits only availible in 10.10 and highter :( - CGFloat width = right.frame.size.width; - if (width > self.maxSizeOfField.width) { - NSInteger numberOfLines = ceil(width / self.maxSizeOfField.width); - CGFloat height = MIN(numberOfLines * right.font.pointSize * 1.5, self.maxSizeOfField.height); // 1.5 since I assume pointSize return points from baseline to top (not bottom to top) - right.frame = CGRectMake(right.frame.origin.x, right.frame.origin.y, self.maxSizeOfField.width, height); - } - [self synchroniseRightWidthFromView:right]; - - return right; -} - -+ (CPImage *)_imageFromView:(CPView *)view -{ -#if TARGET_OS_IPHONE - UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, 0.0); - [view.layer renderInContext:UIGraphicsGetCurrentContext()]; - UIImage * img = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - return img; -#else - NSBitmapImageRep *imageRep = [view bitmapImageRepForCachingDisplayInRect:[view bounds]]; - [view cacheDisplayInRect:[view bounds] toBitmapImageRep:imageRep]; - NSImage *renderedImage = [[NSImage alloc] initWithSize:[imageRep size]]; - [renderedImage addRepresentation:imageRep]; - return renderedImage; -#endif -} - - - -#pragma mark - Helpers - -/** - * returns a string with ":" as last character - */ -- (NSString *)lineFromString:(NSString *)string -{ - return [NSString stringWithFormat:@"%@:", string]; -} - -- (BOOL)propertyUsesProtocol:(NSString *)property -{ - if (property.length > 2) - { - NSString *firstChar = [property substringToIndex:1]; - NSString *lastChar = [property substringFromIndex:property.length-1]; - - if ([firstChar isEqualToString:@"<"] && [lastChar isEqualToString:@">"]) - { - return YES; - } - } - - return NO; -} - -- (NSData *)dataFromImage:(CPImage *)image -{ -#if TARGET_OS_IPHONE - return UIImagePNGRepresentation(image); -#else - CGImageRef cgRef = [image CGImageForProposedRect:NULL context:nil hints:nil]; - NSBitmapImageRep *newRep = [[NSBitmapImageRep alloc] initWithCGImage:cgRef]; - [newRep setSize:[image size]]; // if you want the same resolution - return [newRep representationUsingType:NSPNGFileType properties:@{}]; -#endif -} - -- (void)synchroniseHeightOfView:(CPView *)left secondView:(CPView *)right -{ - CGFloat height = fmaxf(left.frame.size.height, right.frame.size.height); - [left setFrame:CPMakeRect(left.frame.origin.x, left.frame.origin.y, left.frame.size.width, height)]; - [right setFrame:CPMakeRect(right.frame.origin.x, right.frame.origin.y, right.frame.size.width, height)]; -} - -- (void)synchroniseRightWidthFromView:(CPView *)view -{ - CGFloat newWidth = view.frame.size.width; - - if (newWidth > rightWidth) { - rightWidth = newWidth; - } -} - -- (void)synchroniseLeftWidthFromView:(CPView *)view -{ - CGFloat newWidth = view.frame.size.width; - - if (newWidth > leftWidth) { - leftWidth = newWidth; - } -} - -- (CPTextField *)defaultLabelWithString:(NSString *)string point:(CPPoint)point textAlignment:(CPTextAlignment)align -{ - CPTextField *textField = [[CPTextField alloc] initWithFrame:CPMakeRect(point.x, point.y, 5000, 5000)]; -// textField.frame.size = [textField sizeThatFits:[CGSizeMake(5000.0, 5000.0)]] // Works in Swift - [textField setPreferredMaxLayoutWidth:5000]; - [textField cp_setBordered:NO]; - [textField cp_setEditable:NO]; - [textField cp_setSelectable:YES]; - [textField cp_setAlignment:align]; - [textField setBackgroundColor:[CPColor clearColor]]; - [textField setTextColor:[CPColor blackColor]]; - [textField cp_setNumberOfLines:0]; - - if (string) { - [textField cp_setText:string]; - } else { - NSLog(@"[CocoaDebugKit] failed to set nil value to NSTextField (%s, %s)", __FILE__, __PRETTY_FUNCTION__); - [textField cp_setText:@"nil"]; - } - - return textField; -} - -- (void)resizeLeftTextViews -{ - for (CPView *view in self.subviews) - { - if ([[view identifier] isEqualToString:@"left"]) - { - [view setFrame:CPMakeRect(10, view.frame.origin.y, leftWidth + 10, view.frame.size.height)]; - } - } -} - -- (void)resizeRightTextViews -{ - for (CPView *view in self.subviews) - { - if ([[view identifier] isEqualToString:@"right"]) - { - // need an extra pixel to prevent line wrap. Only on iOS thow - [view setFrame:CPMakeRect(10 + leftWidth + 20, view.frame.origin.y, rightWidth + 1, view.frame.size.height)]; - } - - if ([[view identifier] isEqualToString:@"rightImage"]) - { - [view setFrame:CPMakeRect(10 + leftWidth + 20, view.frame.origin.y, view.frame.size.width, view.frame.size.height)]; - } - } -} - -@end diff --git a/Shared/CocoaPropertyEnumerator.m b/Shared/CocoaPropertyEnumerator.m deleted file mode 100644 index e642a2b..0000000 --- a/Shared/CocoaPropertyEnumerator.m +++ /dev/null @@ -1,220 +0,0 @@ -// -// CocoaPropertyEnumerator.m -// CocoaDebugKit -// -// Created by Patrick Kladek on 25.04.16. -// Copyright (c) 2016 Patrick Kladek. All rights reserved. -// - -#import "CocoaPropertyEnumerator.h" -#import - -@implementation CocoaPropertyEnumerator - -static const char *getPropertyType(objc_property_t property) -{ - const char *attributes = property_getAttributes(property); - char buffer[1 + strlen(attributes)]; - strcpy(buffer, attributes); - char *state = buffer, *attribute; - - /* - * Content of 'attribute' - * - T@"NSString",&,N,V_hallo - T@"",W,N,V_delegate - T@"NSData",&,N,V_data - T@"NSDate",&,N,V_date - T@"NSImage",&,N,V_image - T@,&,N,V_prop - T@"NSSet",&,N,V_set - T@"NSString",&,N,V_name - T@"NSString",&,N,V_test - Tc,N,GisCheck,V_check - TC,N,V_ccheck - Ti,N,V_inum - Tq,N,V_lnum - T@"NSURL",&,N,V_url - T@"TestObject",&,N,V_object - T@"NSString",&,N,V_hallo - T@"",W,N,V_delegate - T@"NSData",&,N,V_data - T@"NSDate",&,N,V_date - T@"NSImage",&,N,V_image - T@,&,N,V_prop - T@"NSSet",&,N,V_set - T@"NSString",&,N,V_name - T@"NSString",&,N,V_test - Tc,N,GisCheck,V_check - TC,N,V_ccheck - Ti,N,V_inum - Tq,N,V_lnum - T@"NSURL",&,N,V_url - T@"TestObject",&,N,V_object - */ - - while ((attribute = strsep(&state, ",")) != NULL) - { - if (attribute[0] == 'T' && attribute[1] != '@') - { - // it's a C primitive type: - /* - if you want a list of what will be returned for these primitives, search online for - "objective-c" "Property Attribute Description Examples" - apple docs list plenty of examples of what you get for int "i", long "l", unsigned "I", struct, etc. - */ - - switch (attribute[1]) { - case 'c': - return "char"; - break; - case 'i': - return "int"; - break; - - case 's': - return "short"; - break; - - case 'l': - return "long"; - break; - - case 'q': - return "long long"; - break; - - case 'C': - return "unsigned char"; - break; - - case 'I': - return "unsigned int"; - break; - - case 'S': - return "unsigned short"; - break; - - case 'L': - return "unsigned long"; - break; - - case 'Q': - return "unsigned long long"; - break; - - case 'f': - return "float"; - break; - - case 'd': - return "double"; - break; - - case 'B': - return "bool"; - break; - - case 'v': - return "void"; - break; - - case '*': - return "char *"; - break; - - default: - break; - } - - return (const char *)[[NSData dataWithBytes:(attribute + 1) length:strlen(attribute) - 1] bytes]; - } - else if (attribute[0] == 'T' && attribute[1] == '@' && strlen(attribute) == 2) - { - // it's an ObjC id type: - return "id"; - } - else if (attribute[0] == 'T' && attribute[1] == '@') - { - // it's another ObjC object type: - return (const char *)[[NSData dataWithBytes:(attribute + 3) length:strlen(attribute) - 4] bytes]; - } - } - return ""; -} - -- (void)enumeratePropertiesFromClass:(Class)objectClass allowed:(NSArray *)allowed block:(void (^)(NSString *type, NSString *value))callbackBlock -{ - // get all properties and Display them in DebugView ... - unsigned int outCount, i; - objc_property_t *properties = class_copyPropertyList(objectClass, &outCount); - - for (i = 0; i < outCount; i++) - { - objc_property_t property = properties[i]; - const char *propName = property_getName(property); - - if (propName) - { - const char *type = getPropertyType(property); - NSString *propertyName = [NSString stringWithUTF8String:propName]; - NSString *propertyType = [NSString stringWithUTF8String:type]; - - if (allowed) - { - if ([self object:propertyName existsInArray:allowed]) { - callbackBlock(propertyType, propertyName); - } - } - else - { - callbackBlock(propertyType, propertyName); - } - } - } - free(properties); -} - -- (NSString *)propertyTypeFromName:(NSString *)name object:(NSObject *)obj -{ - // get all properties and Display them in DebugView ... - unsigned int outCount, i; - objc_property_t *properties = class_copyPropertyList([obj class], &outCount); - - for (i = 0; i < outCount; i++) - { - objc_property_t property = properties[i]; - const char *propName = property_getName(property); - - if (propName) - { - const char *type = getPropertyType(property); - NSString *propertyName = [NSString stringWithUTF8String:propName]; - NSString *propertyType = [NSString stringWithUTF8String:type]; - - if ([propertyName isEqualToString:name]) - { - return propertyType; - } - } - } - free(properties); - - return nil; -} - -- (BOOL)object:(NSString *)object existsInArray:(NSArray *)array -{ - for (NSString *property in array) - { - if ([property isEqualToString:object]) - { - return true; - } - } - - return false; -} - -@end diff --git a/iOS/CocoaTouchDebugKit.xcodeproj/project.pbxproj b/iOS/CocoaTouchDebugKit.xcodeproj/project.pbxproj deleted file mode 100644 index 0b548d0..0000000 --- a/iOS/CocoaTouchDebugKit.xcodeproj/project.pbxproj +++ /dev/null @@ -1,697 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - CD63A0F51ED32B8300D04814 /* CrossPlatformDefinitions.h in Headers */ = {isa = PBXBuildFile; fileRef = CD63A0D51ED32B8300D04814 /* CrossPlatformDefinitions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CD63A0F61ED32B8300D04814 /* CPColor+CPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = CD63A0D61ED32B8300D04814 /* CPColor+CPAdditions.h */; }; - CD63A0F71ED32B8300D04814 /* CPColor+CPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = CD63A0D71ED32B8300D04814 /* CPColor+CPAdditions.m */; }; - CD63A0F81ED32B8300D04814 /* CPImageView+CPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = CD63A0D91ED32B8300D04814 /* CPImageView+CPAdditions.h */; }; - CD63A0F91ED32B8300D04814 /* CPImageView+CPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = CD63A0DA1ED32B8300D04814 /* CPImageView+CPAdditions.m */; }; - CD63A0FA1ED32B8300D04814 /* CPScreen+CPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = CD63A0DC1ED32B8300D04814 /* CPScreen+CPAdditions.h */; }; - CD63A0FB1ED32B8300D04814 /* CPScreen+CPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = CD63A0DD1ED32B8300D04814 /* CPScreen+CPAdditions.m */; }; - CD63A0FC1ED32B8300D04814 /* CPTextField+CPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = CD63A0DF1ED32B8300D04814 /* CPTextField+CPAdditions.h */; }; - CD63A0FD1ED32B8300D04814 /* CPTextField+CPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = CD63A0E01ED32B8300D04814 /* CPTextField+CPAdditions.m */; }; - CD63A0FE1ED32B8300D04814 /* CPView+CPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = CD63A0E21ED32B8300D04814 /* CPView+CPAdditions.h */; }; - CD63A0FF1ED32B8300D04814 /* CPView+CPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = CD63A0E31ED32B8300D04814 /* CPView+CPAdditions.m */; }; - CD63A1001ED32B8300D04814 /* NSObject+CPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = CD63A0E51ED32B8300D04814 /* NSObject+CPAdditions.h */; }; - CD63A1011ED32B8300D04814 /* NSObject+CPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = CD63A0E61ED32B8300D04814 /* NSObject+CPAdditions.m */; }; - CD63A1021ED32B8300D04814 /* CocoaDebugSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = CD63A0E91ED32B8300D04814 /* CocoaDebugSettings.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CD63A1031ED32B8300D04814 /* CocoaDebugSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = CD63A0EA1ED32B8300D04814 /* CocoaDebugSettings.m */; }; - CD63A1041ED32B8300D04814 /* CocoaPropertyEnumerator.h in Headers */ = {isa = PBXBuildFile; fileRef = CD63A0EC1ED32B8300D04814 /* CocoaPropertyEnumerator.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CD63A1051ED32B8300D04814 /* CocoaPropertyEnumerator.m in Sources */ = {isa = PBXBuildFile; fileRef = CD63A0ED1ED32B8300D04814 /* CocoaPropertyEnumerator.m */; }; - CD63A1061ED32B8300D04814 /* CocoaDebugView.h in Headers */ = {isa = PBXBuildFile; fileRef = CD63A0EF1ED32B8300D04814 /* CocoaDebugView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CD63A1071ED32B8300D04814 /* CocoaDebugView.m in Sources */ = {isa = PBXBuildFile; fileRef = CD63A0F01ED32B8300D04814 /* CocoaDebugView.m */; }; - CD63A1081ED32B8300D04814 /* CocoaDebugDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = CD63A0F21ED32B8300D04814 /* CocoaDebugDescription.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CD63A1091ED32B8300D04814 /* CocoaDebugDescription.m in Sources */ = {isa = PBXBuildFile; fileRef = CD63A0F31ED32B8300D04814 /* CocoaDebugDescription.m */; }; - CD63A1131ED33EE400D04814 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = CD63A1121ED33EE400D04814 /* main.m */; }; - CD63A1161ED33EE400D04814 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = CD63A1151ED33EE400D04814 /* AppDelegate.m */; }; - CD63A1191ED33EE400D04814 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CD63A1181ED33EE400D04814 /* ViewController.m */; }; - CD63A11C1ED33EE400D04814 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CD63A11A1ED33EE400D04814 /* Main.storyboard */; }; - CD63A11E1ED33EE400D04814 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CD63A11D1ED33EE400D04814 /* Images.xcassets */; }; - CD63A1211ED33EE400D04814 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = CD63A11F1ED33EE400D04814 /* LaunchScreen.xib */; }; - CD63A1341ED3405000D04814 /* CocoaTouchDebugKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDB4E1541ED1D3DA00DE6714 /* CocoaTouchDebugKit.framework */; }; - CD63A1351ED3405000D04814 /* CocoaTouchDebugKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = CDB4E1541ED1D3DA00DE6714 /* CocoaTouchDebugKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - CD63A13A1ED3706800D04814 /* AlertCautionIcon.icns in Resources */ = {isa = PBXBuildFile; fileRef = CD63A1391ED3706800D04814 /* AlertCautionIcon.icns */; }; - CD63A1401ED37CBE00D04814 /* TestClass.m in Sources */ = {isa = PBXBuildFile; fileRef = CD63A13F1ED37CBE00D04814 /* TestClass.m */; }; - CD63A1431ED5E12C00D04814 /* image.jpg in Resources */ = {isa = PBXBuildFile; fileRef = CD63A1421ED5E12C00D04814 /* image.jpg */; }; - CD63A1461ED72F7F00D04814 /* CocoaPropertyLine.h in Headers */ = {isa = PBXBuildFile; fileRef = CD63A1441ED72F7F00D04814 /* CocoaPropertyLine.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CD63A1471ED72F7F00D04814 /* CocoaPropertyLine.m in Sources */ = {isa = PBXBuildFile; fileRef = CD63A1451ED72F7F00D04814 /* CocoaPropertyLine.m */; }; - CDB4E15A1ED1D3DA00DE6714 /* CocoaTouchDebugKit.h in Headers */ = {isa = PBXBuildFile; fileRef = CDB4E1591ED1D3DA00DE6714 /* CocoaTouchDebugKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - CD63A1361ED3405000D04814 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CDB4E14B1ED1D3DA00DE6714 /* Project object */; - proxyType = 1; - remoteGlobalIDString = CDB4E1531ED1D3DA00DE6714; - remoteInfo = CocoaTouchDebugKit; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - CD63A1381ED3405100D04814 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - CD63A1351ED3405000D04814 /* CocoaTouchDebugKit.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - CD63A0D51ED32B8300D04814 /* CrossPlatformDefinitions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CrossPlatformDefinitions.h; path = ../../Shared/CrossPlatform/CrossPlatformDefinitions.h; sourceTree = ""; }; - CD63A0D61ED32B8300D04814 /* CPColor+CPAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "CPColor+CPAdditions.h"; path = "../../Shared/CrossPlatform/CPColor+CPAdditions.h"; sourceTree = ""; }; - CD63A0D71ED32B8300D04814 /* CPColor+CPAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "CPColor+CPAdditions.m"; path = "../../Shared/CrossPlatform/CPColor+CPAdditions.m"; sourceTree = ""; }; - CD63A0D91ED32B8300D04814 /* CPImageView+CPAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "CPImageView+CPAdditions.h"; path = "../../Shared/CrossPlatform/CPImageView+CPAdditions.h"; sourceTree = ""; }; - CD63A0DA1ED32B8300D04814 /* CPImageView+CPAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "CPImageView+CPAdditions.m"; path = "../../Shared/CrossPlatform/CPImageView+CPAdditions.m"; sourceTree = ""; }; - CD63A0DC1ED32B8300D04814 /* CPScreen+CPAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "CPScreen+CPAdditions.h"; path = "../../Shared/CrossPlatform/CPScreen+CPAdditions.h"; sourceTree = ""; }; - CD63A0DD1ED32B8300D04814 /* CPScreen+CPAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "CPScreen+CPAdditions.m"; path = "../../Shared/CrossPlatform/CPScreen+CPAdditions.m"; sourceTree = ""; }; - CD63A0DF1ED32B8300D04814 /* CPTextField+CPAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "CPTextField+CPAdditions.h"; path = "../../Shared/CrossPlatform/CPTextField+CPAdditions.h"; sourceTree = ""; }; - CD63A0E01ED32B8300D04814 /* CPTextField+CPAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "CPTextField+CPAdditions.m"; path = "../../Shared/CrossPlatform/CPTextField+CPAdditions.m"; sourceTree = ""; }; - CD63A0E21ED32B8300D04814 /* CPView+CPAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "CPView+CPAdditions.h"; path = "../../Shared/CrossPlatform/CPView+CPAdditions.h"; sourceTree = ""; }; - CD63A0E31ED32B8300D04814 /* CPView+CPAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "CPView+CPAdditions.m"; path = "../../Shared/CrossPlatform/CPView+CPAdditions.m"; sourceTree = ""; }; - CD63A0E51ED32B8300D04814 /* NSObject+CPAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSObject+CPAdditions.h"; path = "../../Shared/CrossPlatform/NSObject+CPAdditions.h"; sourceTree = ""; }; - CD63A0E61ED32B8300D04814 /* NSObject+CPAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSObject+CPAdditions.m"; path = "../../Shared/CrossPlatform/NSObject+CPAdditions.m"; sourceTree = ""; }; - CD63A0E91ED32B8300D04814 /* CocoaDebugSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CocoaDebugSettings.h; path = ../../Shared/CocoaDebugSettings.h; sourceTree = ""; }; - CD63A0EA1ED32B8300D04814 /* CocoaDebugSettings.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CocoaDebugSettings.m; path = ../../Shared/CocoaDebugSettings.m; sourceTree = ""; }; - CD63A0EC1ED32B8300D04814 /* CocoaPropertyEnumerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CocoaPropertyEnumerator.h; path = ../../Shared/CocoaPropertyEnumerator.h; sourceTree = ""; }; - CD63A0ED1ED32B8300D04814 /* CocoaPropertyEnumerator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CocoaPropertyEnumerator.m; path = ../../Shared/CocoaPropertyEnumerator.m; sourceTree = ""; }; - CD63A0EF1ED32B8300D04814 /* CocoaDebugView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CocoaDebugView.h; path = ../../Shared/CocoaDebugView.h; sourceTree = ""; }; - CD63A0F01ED32B8300D04814 /* CocoaDebugView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CocoaDebugView.m; path = ../../Shared/CocoaDebugView.m; sourceTree = ""; }; - CD63A0F21ED32B8300D04814 /* CocoaDebugDescription.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CocoaDebugDescription.h; path = ../../Shared/CocoaDebugDescription.h; sourceTree = ""; }; - CD63A0F31ED32B8300D04814 /* CocoaDebugDescription.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CocoaDebugDescription.m; path = ../../Shared/CocoaDebugDescription.m; sourceTree = ""; }; - CD63A10E1ED33EE400D04814 /* TestApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TestApp.app; sourceTree = BUILT_PRODUCTS_DIR; }; - CD63A1111ED33EE400D04814 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - CD63A1121ED33EE400D04814 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - CD63A1141ED33EE400D04814 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; - CD63A1151ED33EE400D04814 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; - CD63A1171ED33EE400D04814 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; - CD63A1181ED33EE400D04814 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; - CD63A11B1ED33EE400D04814 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - CD63A11D1ED33EE400D04814 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; - CD63A1201ED33EE400D04814 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; - CD63A1391ED3706800D04814 /* AlertCautionIcon.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = AlertCautionIcon.icns; path = ../../Shared/AlertCautionIcon.icns; sourceTree = ""; }; - CD63A13E1ED37CBE00D04814 /* TestClass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TestClass.h; sourceTree = ""; }; - CD63A13F1ED37CBE00D04814 /* TestClass.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TestClass.m; sourceTree = ""; }; - CD63A1421ED5E12C00D04814 /* image.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = image.jpg; sourceTree = ""; }; - CD63A1441ED72F7F00D04814 /* CocoaPropertyLine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CocoaPropertyLine.h; path = ../../Shared/CocoaPropertyLine.h; sourceTree = ""; }; - CD63A1451ED72F7F00D04814 /* CocoaPropertyLine.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CocoaPropertyLine.m; path = ../../Shared/CocoaPropertyLine.m; sourceTree = ""; }; - CDB4E1541ED1D3DA00DE6714 /* CocoaTouchDebugKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CocoaTouchDebugKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - CDB4E1581ED1D3DA00DE6714 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - CDB4E1591ED1D3DA00DE6714 /* CocoaTouchDebugKit.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CocoaTouchDebugKit.h; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - CD63A10B1ED33EE400D04814 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - CD63A1341ED3405000D04814 /* CocoaTouchDebugKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - CDB4E1501ED1D3DA00DE6714 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - CD63A0D81ED32B8300D04814 /* Color */ = { - isa = PBXGroup; - children = ( - CD63A0D61ED32B8300D04814 /* CPColor+CPAdditions.h */, - CD63A0D71ED32B8300D04814 /* CPColor+CPAdditions.m */, - ); - name = Color; - sourceTree = ""; - }; - CD63A0DB1ED32B8300D04814 /* ImageView */ = { - isa = PBXGroup; - children = ( - CD63A0D91ED32B8300D04814 /* CPImageView+CPAdditions.h */, - CD63A0DA1ED32B8300D04814 /* CPImageView+CPAdditions.m */, - ); - name = ImageView; - sourceTree = ""; - }; - CD63A0DE1ED32B8300D04814 /* Screen */ = { - isa = PBXGroup; - children = ( - CD63A0DC1ED32B8300D04814 /* CPScreen+CPAdditions.h */, - CD63A0DD1ED32B8300D04814 /* CPScreen+CPAdditions.m */, - ); - name = Screen; - sourceTree = ""; - }; - CD63A0E11ED32B8300D04814 /* TextField */ = { - isa = PBXGroup; - children = ( - CD63A0DF1ED32B8300D04814 /* CPTextField+CPAdditions.h */, - CD63A0E01ED32B8300D04814 /* CPTextField+CPAdditions.m */, - ); - name = TextField; - sourceTree = ""; - }; - CD63A0E41ED32B8300D04814 /* View */ = { - isa = PBXGroup; - children = ( - CD63A0E21ED32B8300D04814 /* CPView+CPAdditions.h */, - CD63A0E31ED32B8300D04814 /* CPView+CPAdditions.m */, - ); - name = View; - sourceTree = ""; - }; - CD63A0E71ED32B8300D04814 /* NSObject */ = { - isa = PBXGroup; - children = ( - CD63A0E51ED32B8300D04814 /* NSObject+CPAdditions.h */, - CD63A0E61ED32B8300D04814 /* NSObject+CPAdditions.m */, - ); - name = NSObject; - sourceTree = ""; - }; - CD63A0E81ED32B8300D04814 /* Cross Platform */ = { - isa = PBXGroup; - children = ( - CD63A0D51ED32B8300D04814 /* CrossPlatformDefinitions.h */, - CD63A0D81ED32B8300D04814 /* Color */, - CD63A0DB1ED32B8300D04814 /* ImageView */, - CD63A0DE1ED32B8300D04814 /* Screen */, - CD63A0E11ED32B8300D04814 /* TextField */, - CD63A0E41ED32B8300D04814 /* View */, - CD63A0E71ED32B8300D04814 /* NSObject */, - ); - name = "Cross Platform"; - path = ../../macOS/CocoaDebugKit; - sourceTree = ""; - }; - CD63A0EB1ED32B8300D04814 /* Settings */ = { - isa = PBXGroup; - children = ( - CD63A0E91ED32B8300D04814 /* CocoaDebugSettings.h */, - CD63A0EA1ED32B8300D04814 /* CocoaDebugSettings.m */, - ); - name = Settings; - path = ../../macOS/CocoaDebugKit; - sourceTree = ""; - }; - CD63A0EE1ED32B8300D04814 /* PropertyEnumerator */ = { - isa = PBXGroup; - children = ( - CD63A0EC1ED32B8300D04814 /* CocoaPropertyEnumerator.h */, - CD63A0ED1ED32B8300D04814 /* CocoaPropertyEnumerator.m */, - ); - name = PropertyEnumerator; - path = ../../macOS/CocoaDebugKit; - sourceTree = ""; - }; - CD63A0F11ED32B8300D04814 /* Debug View */ = { - isa = PBXGroup; - children = ( - CD63A0EF1ED32B8300D04814 /* CocoaDebugView.h */, - CD63A0F01ED32B8300D04814 /* CocoaDebugView.m */, - ); - name = "Debug View"; - path = ../../macOS/CocoaDebugKit; - sourceTree = ""; - }; - CD63A0F41ED32B8300D04814 /* Debug Description */ = { - isa = PBXGroup; - children = ( - CD63A0F21ED32B8300D04814 /* CocoaDebugDescription.h */, - CD63A0F31ED32B8300D04814 /* CocoaDebugDescription.m */, - CD63A1481ED72F8500D04814 /* Property Line */, - ); - name = "Debug Description"; - path = ../../macOS/CocoaDebugKit; - sourceTree = ""; - }; - CD63A10F1ED33EE400D04814 /* TestApp */ = { - isa = PBXGroup; - children = ( - CD63A1141ED33EE400D04814 /* AppDelegate.h */, - CD63A1151ED33EE400D04814 /* AppDelegate.m */, - CD63A1171ED33EE400D04814 /* ViewController.h */, - CD63A1181ED33EE400D04814 /* ViewController.m */, - CD63A1411ED37CC000D04814 /* Class */, - CD63A11A1ED33EE400D04814 /* Main.storyboard */, - CD63A11D1ED33EE400D04814 /* Images.xcassets */, - CD63A11F1ED33EE400D04814 /* LaunchScreen.xib */, - CD63A1101ED33EE400D04814 /* Supporting Files */, - ); - path = TestApp; - sourceTree = ""; - }; - CD63A1101ED33EE400D04814 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - CD63A1421ED5E12C00D04814 /* image.jpg */, - CD63A1111ED33EE400D04814 /* Info.plist */, - CD63A1121ED33EE400D04814 /* main.m */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - CD63A1411ED37CC000D04814 /* Class */ = { - isa = PBXGroup; - children = ( - CD63A13E1ED37CBE00D04814 /* TestClass.h */, - CD63A13F1ED37CBE00D04814 /* TestClass.m */, - ); - name = Class; - sourceTree = ""; - }; - CD63A1481ED72F8500D04814 /* Property Line */ = { - isa = PBXGroup; - children = ( - CD63A1441ED72F7F00D04814 /* CocoaPropertyLine.h */, - CD63A1451ED72F7F00D04814 /* CocoaPropertyLine.m */, - ); - name = "Property Line"; - sourceTree = ""; - }; - CDB4E14A1ED1D3DA00DE6714 = { - isa = PBXGroup; - children = ( - CDB4E1561ED1D3DA00DE6714 /* CocoaTouchDebugKit */, - CD63A10F1ED33EE400D04814 /* TestApp */, - CDB4E1551ED1D3DA00DE6714 /* Products */, - ); - sourceTree = ""; - }; - CDB4E1551ED1D3DA00DE6714 /* Products */ = { - isa = PBXGroup; - children = ( - CDB4E1541ED1D3DA00DE6714 /* CocoaTouchDebugKit.framework */, - CD63A10E1ED33EE400D04814 /* TestApp.app */, - ); - name = Products; - sourceTree = ""; - }; - CDB4E1561ED1D3DA00DE6714 /* CocoaTouchDebugKit */ = { - isa = PBXGroup; - children = ( - CDB4E1591ED1D3DA00DE6714 /* CocoaTouchDebugKit.h */, - CDB4E1571ED1D3DA00DE6714 /* Supporting Files */, - ); - path = CocoaTouchDebugKit; - sourceTree = ""; - }; - CDB4E1571ED1D3DA00DE6714 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - CD63A0E81ED32B8300D04814 /* Cross Platform */, - CD63A0EB1ED32B8300D04814 /* Settings */, - CD63A0EE1ED32B8300D04814 /* PropertyEnumerator */, - CD63A0F11ED32B8300D04814 /* Debug View */, - CD63A0F41ED32B8300D04814 /* Debug Description */, - CD63A1391ED3706800D04814 /* AlertCautionIcon.icns */, - CDB4E1581ED1D3DA00DE6714 /* Info.plist */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - CDB4E1511ED1D3DA00DE6714 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - CDB4E15A1ED1D3DA00DE6714 /* CocoaTouchDebugKit.h in Headers */, - CD63A1001ED32B8300D04814 /* NSObject+CPAdditions.h in Headers */, - CD63A1461ED72F7F00D04814 /* CocoaPropertyLine.h in Headers */, - CD63A0F81ED32B8300D04814 /* CPImageView+CPAdditions.h in Headers */, - CD63A0F61ED32B8300D04814 /* CPColor+CPAdditions.h in Headers */, - CD63A1061ED32B8300D04814 /* CocoaDebugView.h in Headers */, - CD63A1081ED32B8300D04814 /* CocoaDebugDescription.h in Headers */, - CD63A1021ED32B8300D04814 /* CocoaDebugSettings.h in Headers */, - CD63A0F51ED32B8300D04814 /* CrossPlatformDefinitions.h in Headers */, - CD63A0FE1ED32B8300D04814 /* CPView+CPAdditions.h in Headers */, - CD63A0FC1ED32B8300D04814 /* CPTextField+CPAdditions.h in Headers */, - CD63A0FA1ED32B8300D04814 /* CPScreen+CPAdditions.h in Headers */, - CD63A1041ED32B8300D04814 /* CocoaPropertyEnumerator.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - CD63A10D1ED33EE400D04814 /* TestApp */ = { - isa = PBXNativeTarget; - buildConfigurationList = CD63A1321ED33EE400D04814 /* Build configuration list for PBXNativeTarget "TestApp" */; - buildPhases = ( - CD63A10A1ED33EE400D04814 /* Sources */, - CD63A10B1ED33EE400D04814 /* Frameworks */, - CD63A10C1ED33EE400D04814 /* Resources */, - CD63A1381ED3405100D04814 /* Embed Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - CD63A1371ED3405000D04814 /* PBXTargetDependency */, - ); - name = TestApp; - productName = TestApp; - productReference = CD63A10E1ED33EE400D04814 /* TestApp.app */; - productType = "com.apple.product-type.application"; - }; - CDB4E1531ED1D3DA00DE6714 /* CocoaTouchDebugKit */ = { - isa = PBXNativeTarget; - buildConfigurationList = CDB4E16A1ED1D3DA00DE6714 /* Build configuration list for PBXNativeTarget "CocoaTouchDebugKit" */; - buildPhases = ( - CDB4E14F1ED1D3DA00DE6714 /* Sources */, - CDB4E1501ED1D3DA00DE6714 /* Frameworks */, - CDB4E1511ED1D3DA00DE6714 /* Headers */, - CDB4E1521ED1D3DA00DE6714 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = CocoaTouchDebugKit; - productName = CocoaTouchDebugKit; - productReference = CDB4E1541ED1D3DA00DE6714 /* CocoaTouchDebugKit.framework */; - productType = "com.apple.product-type.framework"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - CDB4E14B1ED1D3DA00DE6714 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0620; - ORGANIZATIONNAME = "Patrick Kladek"; - TargetAttributes = { - CD63A10D1ED33EE400D04814 = { - CreatedOnToolsVersion = 6.2; - }; - CDB4E1531ED1D3DA00DE6714 = { - CreatedOnToolsVersion = 6.2; - }; - }; - }; - buildConfigurationList = CDB4E14E1ED1D3DA00DE6714 /* Build configuration list for PBXProject "CocoaTouchDebugKit" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = CDB4E14A1ED1D3DA00DE6714; - productRefGroup = CDB4E1551ED1D3DA00DE6714 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - CDB4E1531ED1D3DA00DE6714 /* CocoaTouchDebugKit */, - CD63A10D1ED33EE400D04814 /* TestApp */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - CD63A10C1ED33EE400D04814 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - CD63A11C1ED33EE400D04814 /* Main.storyboard in Resources */, - CD63A1211ED33EE400D04814 /* LaunchScreen.xib in Resources */, - CD63A11E1ED33EE400D04814 /* Images.xcassets in Resources */, - CD63A1431ED5E12C00D04814 /* image.jpg in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - CDB4E1521ED1D3DA00DE6714 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - CD63A13A1ED3706800D04814 /* AlertCautionIcon.icns in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - CD63A10A1ED33EE400D04814 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - CD63A1401ED37CBE00D04814 /* TestClass.m in Sources */, - CD63A1191ED33EE400D04814 /* ViewController.m in Sources */, - CD63A1161ED33EE400D04814 /* AppDelegate.m in Sources */, - CD63A1131ED33EE400D04814 /* main.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - CDB4E14F1ED1D3DA00DE6714 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - CD63A1051ED32B8300D04814 /* CocoaPropertyEnumerator.m in Sources */, - CD63A0F91ED32B8300D04814 /* CPImageView+CPAdditions.m in Sources */, - CD63A0FD1ED32B8300D04814 /* CPTextField+CPAdditions.m in Sources */, - CD63A1011ED32B8300D04814 /* NSObject+CPAdditions.m in Sources */, - CD63A1071ED32B8300D04814 /* CocoaDebugView.m in Sources */, - CD63A0FF1ED32B8300D04814 /* CPView+CPAdditions.m in Sources */, - CD63A0FB1ED32B8300D04814 /* CPScreen+CPAdditions.m in Sources */, - CD63A1031ED32B8300D04814 /* CocoaDebugSettings.m in Sources */, - CD63A1091ED32B8300D04814 /* CocoaDebugDescription.m in Sources */, - CD63A1471ED72F7F00D04814 /* CocoaPropertyLine.m in Sources */, - CD63A0F71ED32B8300D04814 /* CPColor+CPAdditions.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - CD63A1371ED3405000D04814 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = CDB4E1531ED1D3DA00DE6714 /* CocoaTouchDebugKit */; - targetProxy = CD63A1361ED3405000D04814 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - CD63A11A1ED33EE400D04814 /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - CD63A11B1ED33EE400D04814 /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - CD63A11F1ED33EE400D04814 /* LaunchScreen.xib */ = { - isa = PBXVariantGroup; - children = ( - CD63A1201ED33EE400D04814 /* Base */, - ); - name = LaunchScreen.xib; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - CD63A12E1ED33EE400D04814 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = NO; - FRAMEWORK_SEARCH_PATHS = ""; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = TestApp/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MACH_O_TYPE = mh_execute; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Debug; - }; - CD63A12F1ED33EE400D04814 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = NO; - FRAMEWORK_SEARCH_PATHS = ""; - INFOPLIST_FILE = TestApp/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MACH_O_TYPE = mh_execute; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Release; - }; - CDB4E1681ED1D3DA00DE6714 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - CDB4E1691ED1D3DA00DE6714 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - CDB4E16B1ED1D3DA00DE6714 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = NO; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - TARGET_OS_IPHONE, - ); - INFOPLIST_FILE = CocoaTouchDebugKit/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - }; - name = Debug; - }; - CDB4E16C1ED1D3DA00DE6714 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = NO; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREPROCESSOR_DEFINITIONS = TARGET_OS_IPHONE; - INFOPLIST_FILE = CocoaTouchDebugKit/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - CD63A1321ED33EE400D04814 /* Build configuration list for PBXNativeTarget "TestApp" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - CD63A12E1ED33EE400D04814 /* Debug */, - CD63A12F1ED33EE400D04814 /* Release */, - ); - defaultConfigurationIsVisible = 0; - }; - CDB4E14E1ED1D3DA00DE6714 /* Build configuration list for PBXProject "CocoaTouchDebugKit" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - CDB4E1681ED1D3DA00DE6714 /* Debug */, - CDB4E1691ED1D3DA00DE6714 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - CDB4E16A1ED1D3DA00DE6714 /* Build configuration list for PBXNativeTarget "CocoaTouchDebugKit" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - CDB4E16B1ED1D3DA00DE6714 /* Debug */, - CDB4E16C1ED1D3DA00DE6714 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = CDB4E14B1ED1D3DA00DE6714 /* Project object */; -} diff --git a/iOS/CocoaTouchDebugKit/CocoaTouchDebugKit.h b/iOS/CocoaTouchDebugKit/CocoaTouchDebugKit.h deleted file mode 100644 index 0fb2bcc..0000000 --- a/iOS/CocoaTouchDebugKit/CocoaTouchDebugKit.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// CocoaTouchDebugKit.h -// CocoaTouchDebugKit -// -// Created by Patrick Kladek on 21.05.17. -// Copyright (c) 2017 Patrick Kladek. All rights reserved. -// - -#import - -//! Project version number for CocoaTouchDebugKit. -FOUNDATION_EXPORT double CocoaTouchDebugKitVersionNumber; - -//! Project version string for CocoaTouchDebugKit. -FOUNDATION_EXPORT const unsigned char CocoaTouchDebugKitVersionString[]; - -// In this header, you should import all the public headers of your framework using statements like #import - -#import -#import -#import -#import - diff --git a/iOS/CocoaTouchDebugKit/Info.plist b/iOS/CocoaTouchDebugKit/Info.plist deleted file mode 100644 index c6a174d..0000000 --- a/iOS/CocoaTouchDebugKit/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - com.kladek.$(PRODUCT_NAME:rfc1034identifier) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - NSPrincipalClass - - - diff --git a/macOS/Test Application/AppDelegate.m b/macOS/Test Application/AppDelegate.m deleted file mode 100644 index 17d2d8f..0000000 --- a/macOS/Test Application/AppDelegate.m +++ /dev/null @@ -1,147 +0,0 @@ -// -// AppDelegate.m -// Test Application -// -// Created by Patrick Kladek on 21.05.15. -// Copyright (c) 2015 Patrick Kladek. All rights reserved. -// - -#import "AppDelegate.h" -#import -#import "TestObject.h" -#import "Person.h" -#import "SecondObject.h" - -@interface AppDelegate () - -@property (weak) IBOutlet NSWindow *window; -@end - - - -@implementation AppDelegate - -- (void)applicationDidFinishLaunching:(NSNotification *)aNotification -{ - // Insert code here to initialize your application - - // init debugFramework - // Note: if sharedInstance is not initialized default values are used. - // Note: in this example every debugView is saved to ~/Desktop/debugView. You can turn this off by setting the key: debugView.appearance.key in plist to false. - NSURL *url = [[NSBundle mainBundle] URLForResource:@"com.kladek.CocoaDebugKit.settings.default" withExtension:@"plist"]; - [[CocoaDebugSettings sharedSettings] loadSettings:url]; - - [self createStaticDebugView]; - [self createDynamicDebugView]; - [self createDynamicDebugViewPerson]; -} - -- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender -{ - return YES; -} - - - -// ----------------------------- -#pragma mark - DebugViews - -- (void)createStaticDebugView -{ - CocoaDebugView *view = [CocoaDebugView debugView]; - [view setTitle:@"ClassName"]; - [view setFrameColor:[NSColor purpleColor]]; - - [view addLineWithDescription:@"Name:" string:@"Value"]; - [view addLineWithDescription:@"Name:" string:@"Value12315645"]; - [view addLineWithDescription:@"Name:" string:@"Value"]; - [view addLineWithDescription:@"NameHalloskfajds:" string:@"Value"]; - [view addLineWithDescription:@"NameHalloskfajds:" integer:12384]; - [view addLineWithDescription:@"dfg:" floating:456462.56451354615135468]; - - - NSArray *array = [NSArray arrayWithObjects: - @"file:///Users/patrick/Desktop/myAwesomeProject/", - @"file:///Users/patrick/Desktop/myAwesomeProject/", - @"file:///Users/patrick/Desktop/myAwesomeProject/", nil]; - [view addLineWithDescription:@"array" string:array.description]; - - - - [view addLineWithDescription:@"test" string:nil]; - [view addLineWithDescription:@"test" boolean:YES]; - [view addLineWithDescription:@"test" boolean:NO]; - - - [view setFrame:NSOffsetRect(view.frame, 460, 20)]; - [[[self window] contentView] addSubview:view]; -} - -- (void)createDynamicDebugView -{ - SecondObject *obj = [[SecondObject alloc] init]; - [obj setDelegate:self]; - [obj setDate:[NSDate date]]; - - NSImage *image = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image" ofType:@"jpg"]]; - [obj setDataImage:[image TIFFRepresentation]]; - - [obj setHallo:@"Hello World"]; - [obj setSet:[NSSet setWithObject:@"Hallo"]]; - [obj setImage:image]; - [obj setTest:@"Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.\nDuis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.\nUt wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.\nNam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.\nDuis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis.\nAt vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, At accusam aliquyam diam diam dolore dolores duo eirmod eos erat, et nonumy sed tempor et et invidunt justo labore Stet clita ea et gubergren, kasd magna no rebum. sanctus sea sed takimata ut vero voluptua. est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur"]; - [obj setName:@"Name yxcvb"]; - [obj setCheck_bool:YES]; - [obj setInum:32000]; - [obj setLnum:64000]; - [obj setCcheck:'r']; - [obj setUrl:[NSURL URLWithString:@"file:///Users/patrick/Desktop/"]]; - [obj setColor:[NSColor colorWithCalibratedRed:0.461 green:1.000 blue:0.962 alpha:0.540]]; - [obj setError:[NSError errorWithDomain:@"com.kladek.CocoaDebugKit" code:5645 userInfo:@{ NSLocalizedFailureReasonErrorKey:@"LocalizedFailureReason", - NSLocalizedDescriptionKey:@"Something went wrong", - NSLocalizedRecoverySuggestionErrorKey:@"LocalizedRecoverySuggestion, do some thing, need some text for testing, do something more to reproduce this error", - NSLocalizedRecoveryOptionsErrorKey:@"LocalizedRecoveryOptions", - NSRecoveryAttempterErrorKey:@"RecoveryAttempter", - NSHelpAnchorErrorKey:@"HelpAnchor", - NSStringEncodingErrorKey:@"NSStringEncodingError", - NSURLErrorKey:@"NSURLError", - NSFilePathErrorKey:@" NSFilePathError" - }]]; - TestObject *obj2 = [[TestObject alloc] init]; - [obj setObject:obj2]; - - - NSView *newView = [obj debugQuickLookObject]; - [newView setFrame:NSOffsetRect(newView.frame, 20, 20)]; - [[[self window] contentView] addSubview:newView]; -} - -- (void)createDynamicDebugViewPerson -{ - Person *person = [[Person alloc] init]; - [person setImage:[NSImage imageNamed:@"image.jpg"]]; - [person setFirstName:@"Patrick"]; - [person setLastName:@"Kladek"]; - [person setBirthday:[NSDate dateWithString:@"1996-07-04 01:00:00 +0100"]]; - - NSView *view2 = [person debugQuickLookObject]; - [view2 setFrame:NSOffsetRect(view2.frame, 460, 385)]; - - [[[self window] contentView] addSubview:view2]; - - - - NSLog(@"%@", [person debugDescription]); -} - - -/** - * CocoaTestObjectDelegate - */ --(void)smt -{ - NSLog(@"%s", __PRETTY_FUNCTION__); -} - - -@end diff --git a/macOS/Test Application/main.m b/macOS/Test Application/main.m deleted file mode 100644 index 26224f9..0000000 --- a/macOS/Test Application/main.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// main.m -// Test Application -// -// Created by Patrick Kladek on 21.05.15. -// Copyright (c) 2015 Patrick Kladek. All rights reserved. -// - -#import - -int main(int argc, const char * argv[]) { - return NSApplicationMain(argc, argv); -}