From a180b34eb28f47ef472f38869309ed375cecba1a Mon Sep 17 00:00:00 2001 From: Damon Date: Tue, 29 Mar 2022 15:53:29 +0800 Subject: [PATCH] update pod --- example/Podfile.lock | 14 +- example/Pods/Manifest.lock | 14 +- example/Pods/Pods.xcodeproj/project.pbxproj | 1618 ++++++++--------- .../xcschemes/Pods-netfox-zxkit.xcscheme | 2 +- .../xcschemes/SnapKit.xcscheme | 24 +- .../xcschemes/ZXKitCore-ZXKitCore.xcscheme | 2 +- .../xcschemes/ZXKitCore.xcscheme | 24 +- .../xcschemes/ZXKitUtil.xcscheme | 24 +- .../xcschemes/netfox.xcscheme | 24 +- .../Pods-netfox-zxkit-frameworks.sh | 1 + .../Pods-netfox-zxkit.debug.xcconfig | 5 +- .../Pods-netfox-zxkit.release.xcconfig | 5 +- .../SnapKit/SnapKit.debug.xcconfig | 1 + .../SnapKit/SnapKit.release.xcconfig | 1 + .../ZXKitCore/ZXKitCore.debug.xcconfig | 2 + .../ZXKitCore/ZXKitCore.release.xcconfig | 2 + .../ZXKitUtil/ZXKitUtil-Info.plist | 2 +- .../ZXKitUtil/ZXKitUtil.debug.xcconfig | 2 + .../ZXKitUtil/ZXKitUtil.release.xcconfig | 2 + .../netfox/netfox-Info.plist | 2 +- .../netfox/netfox-umbrella.h | 1 - .../netfox/netfox.debug.xcconfig | 1 + .../netfox/netfox.release.xcconfig | 1 + example/Pods/ZXKitUtil/README.md | 50 +- example/Pods/ZXKitUtil/pod/ZXKitUtil+UI.swift | 71 +- .../Pods/ZXKitUtil/pod/ZXKitUtil+media.swift | 2 +- .../Pods/ZXKitUtil/pod/ZXKitUtil+system.swift | 34 +- example/Pods/ZXKitUtil/pod/ZXKitUtil.swift | 60 + .../Pods/ZXKitUtil/pod/extend/Data+zx.swift | 302 ++- .../Pods/ZXKitUtil/pod/extend/String+zx.swift | 107 +- .../ZXKitUtil/pod/extend/UIImage+zx.swift | 85 +- .../Pods/ZXKitUtil/pod/extend/UIView+zx.swift | 8 + .../ZXKitUtil/pod/extend/ZXKitNameSpace.swift | 17 +- example/Pods/netfox/README.md | 21 +- example/Pods/netfox/netfox/Core/NFX.swift | 319 ++-- .../Pods/netfox/netfox/Core/NFXAssets.swift | 18 +- .../netfox/Core/NFXDetailsController.swift | 30 +- .../NFXGenericBodyDetailsController.swift | 11 +- .../netfox/Core/NFXGenericController.swift | 40 +- .../netfox/netfox/Core/NFXHTTPModel.swift | 213 +-- .../netfox/Core/NFXHTTPModelManager.swift | 81 +- .../Pods/netfox/netfox/Core/NFXHelper.swift | 426 +++-- .../Core/NFXImageBodyDetailsController.swift | 28 +- .../netfox/Core/NFXInfoController.swift | 6 +- .../netfox/Core/NFXListController.swift | 69 +- example/Pods/netfox/netfox/Core/NFXLoader.h | 12 - example/Pods/netfox/netfox/Core/NFXLoader.m | 21 - .../Pods/netfox/netfox/Core/NFXProtocol.swift | 64 +- .../netfox/Core/NFXSettingsController.swift | 2 +- .../netfox/Core/NFXStatisticsController.swift | 88 +- .../netfox/Core/NFXWindowController.swift | 4 +- .../netfox/iOS/NFXDetailsController_iOS.swift | 120 +- .../netfox/netfox/iOS/NFXHelper_iOS.swift | 159 +- .../netfox/iOS/NFXInfoController_iOS.swift | 38 +- .../netfox/netfox/iOS/NFXListCell_iOS.swift | 170 +- .../netfox/iOS/NFXListController_iOS.swift | 193 +- .../NFXRawBodyDetailsController.swift | 35 +- .../iOS/NFXSettingsController_iOS.swift | 154 +- .../iOS/NFXStatisticsController_iOS.swift | 54 +- ...FXURLDetailsControllerViewController.swift | 19 +- .../UserInterfaceState.xcuserstate | Bin 26067 -> 25773 bytes example/netfox-zxkit/ViewController.swift | 48 +- netfox-zxkit.podspec | 4 +- 63 files changed, 2705 insertions(+), 2252 deletions(-) delete mode 100644 example/Pods/netfox/netfox/Core/NFXLoader.h delete mode 100644 example/Pods/netfox/netfox/Core/NFXLoader.m rename example/Pods/netfox/netfox/{Core => iOS}/NFXRawBodyDetailsController.swift (62%) diff --git a/example/Podfile.lock b/example/Podfile.lock index 25e0acf..77ffcde 100644 --- a/example/Podfile.lock +++ b/example/Podfile.lock @@ -1,14 +1,14 @@ PODS: - - netfox (1.19.0) + - netfox (1.21.0) - SnapKit (5.0.1) - ZXKitCore (0.1.5): - ZXKitCore/core (= 0.1.5) - ZXKitCore/core (0.1.5): - SnapKit - ZXKitUtil - - ZXKitUtil (3.0.1): - - ZXKitUtil/core (= 3.0.1) - - ZXKitUtil/core (3.0.1) + - ZXKitUtil (3.2.4): + - ZXKitUtil/core (= 3.2.4) + - ZXKitUtil/core (3.2.4) DEPENDENCIES: - netfox @@ -22,11 +22,11 @@ SPEC REPOS: - ZXKitUtil SPEC CHECKSUMS: - netfox: efeec1d23406df6cd605212f09a40957bb5654eb + netfox: 9d5cc727fe7576c4c7688a2504618a156b7d44b7 SnapKit: 97b92857e3df3a0c71833cce143274bf6ef8e5eb ZXKitCore: 51a3cdf16252e8e023c7bcc6d52b3d251faaed3c - ZXKitUtil: 7f8782b19f1696fe259d07f4048196be5f2ea6b7 + ZXKitUtil: f44e73f0a06f5cacecd6d138e295e0dd530eb055 PODFILE CHECKSUM: 8b52ac7ae2b29fc3ba9e96de382c47754e538d0f -COCOAPODS: 1.10.1 +COCOAPODS: 1.11.2 diff --git a/example/Pods/Manifest.lock b/example/Pods/Manifest.lock index 25e0acf..77ffcde 100644 --- a/example/Pods/Manifest.lock +++ b/example/Pods/Manifest.lock @@ -1,14 +1,14 @@ PODS: - - netfox (1.19.0) + - netfox (1.21.0) - SnapKit (5.0.1) - ZXKitCore (0.1.5): - ZXKitCore/core (= 0.1.5) - ZXKitCore/core (0.1.5): - SnapKit - ZXKitUtil - - ZXKitUtil (3.0.1): - - ZXKitUtil/core (= 3.0.1) - - ZXKitUtil/core (3.0.1) + - ZXKitUtil (3.2.4): + - ZXKitUtil/core (= 3.2.4) + - ZXKitUtil/core (3.2.4) DEPENDENCIES: - netfox @@ -22,11 +22,11 @@ SPEC REPOS: - ZXKitUtil SPEC CHECKSUMS: - netfox: efeec1d23406df6cd605212f09a40957bb5654eb + netfox: 9d5cc727fe7576c4c7688a2504618a156b7d44b7 SnapKit: 97b92857e3df3a0c71833cce143274bf6ef8e5eb ZXKitCore: 51a3cdf16252e8e023c7bcc6d52b3d251faaed3c - ZXKitUtil: 7f8782b19f1696fe259d07f4048196be5f2ea6b7 + ZXKitUtil: f44e73f0a06f5cacecd6d138e295e0dd530eb055 PODFILE CHECKSUM: 8b52ac7ae2b29fc3ba9e96de382c47754e538d0f -COCOAPODS: 1.10.1 +COCOAPODS: 1.11.2 diff --git a/example/Pods/Pods.xcodeproj/project.pbxproj b/example/Pods/Pods.xcodeproj/project.pbxproj index a190eea..ad76075 100644 --- a/example/Pods/Pods.xcodeproj/project.pbxproj +++ b/example/Pods/Pods.xcodeproj/project.pbxproj @@ -7,368 +7,343 @@ objects = { /* Begin PBXBuildFile section */ - 01C550A53C9E2047C83F8E85BBB558E6 /* ConstraintLayoutSupportDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B3C76FFD714D3E6F89161D68ACC802F /* ConstraintLayoutSupportDSL.swift */; }; - 039EAFE7935113805F3FC21BF1B7C9D5 /* LayoutConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8AAAC80C6677AFF5196F94BFF11EBF6B /* LayoutConstraint.swift */; }; - 0951830FDA7053E1A4C11B1B6142B39D /* NFXInfoController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EE2330C67C1F1F3B33E386B7FAC5F51 /* NFXInfoController.swift */; }; - 09F20300429DCB4C2F17A9B1BA2DC03A /* NFXSettingsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2FA2DAF1DD47344089EE97CF55F3E97 /* NFXSettingsController.swift */; }; - 0AE42422D52C3733A6BBA38CF8E38DD0 /* Localizable.strings in Sources */ = {isa = PBXBuildFile; fileRef = F6769BBD30634D019F1F0F4E2B7B64D6 /* Localizable.strings */; }; - 12EA824D7BB93529DF764CC730F1A1AA /* NFXLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = DF99ECE4442A7A5AA91CDC1F0EAF153A /* NFXLoader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1956E392D500F3CD899D39A5F805736D /* Typealiases.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2194B707C1ED5B1C5F1724A4ACBE1D8F /* Typealiases.swift */; }; - 1AFB1E9136716C0B61D6C700FF1E60FD /* ConstraintLayoutGuide+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A277E2235F9F575B5AD559F3136BA7B7 /* ConstraintLayoutGuide+Extensions.swift */; }; - 1D76824C5852CAEE74416DD6ECDBF717 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 3CED72882ACE336898E9F42009D79022 /* Localizable.strings */; }; - 21409832FC254ACC88EFFA9C0C8064EA /* SnapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 753EF59389BB1B8D29B58C5DC3EDB22D /* SnapKit.framework */; }; - 21AB1101BBE4D28D74ED4EDF0D59025A /* ConstraintInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A30208EA1F96FE6B6A3DFFFB1C020D1 /* ConstraintInsets.swift */; }; - 232B2F922E972D9F43D2EE15ACECE734 /* ConstraintPriority.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA3D45C7DD153A3358E1350A6A699376 /* ConstraintPriority.swift */; }; - 254C8E20B6582C0EB3BD7F0AA0843BFF /* ZXKitCore.bundle in Resources */ = {isa = PBXBuildFile; fileRef = B462C8B2CB78AE609523A787505C2EB4 /* ZXKitCore.bundle */; }; - 29270C7B84244D3D64D944AE7329B368 /* NFXHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD4F36B54C7F6F3D49D1EBC77861EE12 /* NFXHelper.swift */; }; - 2A1BBBC87AC2367BD14610A9D10D285E /* ConstraintAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC21CCCF816B0B99A7D9743ED2CAD334 /* ConstraintAttributes.swift */; }; - 2C06F2E972444D359754D21AC46BFFE2 /* ConstraintInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D2A95317E94E18EB57E940E6B7DA4BD /* ConstraintInsetTarget.swift */; }; - 2E24EB68D973DDF34473AA589996AF46 /* Pods-netfox-zxkit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BB501C722F1746B3F5A78D2964EB50A9 /* Pods-netfox-zxkit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 36C662CBC52DECF60A7C44B42B490FFD /* ZXKitUtil-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 450836B70EBCA1392B4EFD18C19E733A /* ZXKitUtil-dummy.m */; }; - 37B1F67C8521F3516D605A7D151E91A4 /* NFXProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F37A18729AE4948C91DDDD93437F84F /* NFXProtocol.swift */; }; - 3816866BA7E0280765C0CF191A175683 /* NFXListCell_iOS.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DAFD3AB72F9DBFF29632C4D321AD2F9 /* NFXListCell_iOS.swift */; }; - 3BFC243AB9BD579969F0D5756560BCAA /* Constraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7C78454B9DDD3DE23A68232ADE8428E /* Constraint.swift */; }; - 3E5285F4F36EAD77ECABBFB7F36BB1BB /* ConstraintView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1030AE88F38B61D29F1612C5BDF60FB4 /* ConstraintView+Extensions.swift */; }; - 42F7AFDAE23EC0C6A8D4CE02F8C27CEB /* String+zx.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFC9312BF2E067710C55BACB13DCE5FF /* String+zx.swift */; }; - 44F990AD8069E624447997A4DEA21583 /* NFXHTTPModelManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BE914D2C3F695F011266A4DBF83DEC3 /* NFXHTTPModelManager.swift */; }; - 4516100C50B168B31CE852B9A5BAD7FD /* ZXKitUtil-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B615DBF9D362C70992ECDC4737A4072E /* ZXKitUtil-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 454F28B51036B10A0EE942B957679CE1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B18C060852812D3AA0A91A55B45BCC8A /* Foundation.framework */; }; - 49CFA45370B1B4E850E143D3FB6AEC2C /* ZXKitPluginProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FE897E8C7E75A70BB808ECC413E7655 /* ZXKitPluginProtocol.swift */; }; - 4BE239D23BE78D4174C2EF3D447D8CB2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B18C060852812D3AA0A91A55B45BCC8A /* Foundation.framework */; }; - 4C7A676DAE95EEAC3787A75349F0862D /* SnapKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CF2FA138AD088298DE6C4CBE90F865B /* SnapKit-dummy.m */; }; - 51CD5887014967E77E58F5A163996454 /* ConstraintMaker.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA8A442AA73F487926B1241A9357D52F /* ConstraintMaker.swift */; }; - 57B1876F2BE4168E5BFDB63D8CC849A0 /* ConstraintLayoutSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = F975E0F1948537323DD2CA732916D7BA /* ConstraintLayoutSupport.swift */; }; - 5854DF509E8A016B6235793D04083035 /* ConstraintConstantTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AE33883C83C7D6103F7EB06DCE328AD /* ConstraintConstantTarget.swift */; }; - 613142E0E3AADC9FE2C81551AD78D4AC /* NFXInfoController_iOS.swift in Sources */ = {isa = PBXBuildFile; fileRef = E84DF16F447056B4AE4548E4C39879D0 /* NFXInfoController_iOS.swift */; }; - 69CCBEEDFCA6D743D80026568D961919 /* ConstraintMakerExtendable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D9790D327DD39EC5EC35B07226A1882 /* ConstraintMakerExtendable.swift */; }; - 69E3A06BBDFDC7D06A9D4BDC4E895E73 /* ConstraintRelatableTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 208D2C82AFD76FE79CB039CA16246374 /* ConstraintRelatableTarget.swift */; }; - 6B0B56EEA4A07332CBFDE6ECAAA9432F /* NFXGenericBodyDetailsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26F0AF40C8D77DB89CD1FD3AEBCB6FD3 /* NFXGenericBodyDetailsController.swift */; }; - 6C0D413D5E458B86E896C228D91F6BBF /* ZXKitFloatWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76E12A1052C7ED3EF0755D604B3041BC /* ZXKitFloatWindow.swift */; }; - 6DBA5C3250DA0A10F3836AFFEB62E4D2 /* NFXConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 554A569B1BFBDD3BE1A9DF60EEAF7793 /* NFXConstants.swift */; }; - 6E0EB9E7FAAEDBB7A73ECF3095F69C4A /* UILayoutSupport+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D730AF7770302DD229006655F8E5551C /* UILayoutSupport+Extensions.swift */; }; - 710BDC837E8F1FDA9E2E2C773F8CFA69 /* ZXKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57D4DBB8C81A0A72D8086E149FB29E9C /* ZXKit.swift */; }; - 71DE9DC2FA583526AB4D1FD7F00C099C /* ConstraintDirectionalInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFBDC0389AFDC0C27FFCED5D6B6A7B78 /* ConstraintDirectionalInsetTarget.swift */; }; - 75E146C12D1287228A0B493E87CDE31F /* ConstraintMakerRelatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = B28D6C006C1DBB8BD907A2006F73B6F9 /* ConstraintMakerRelatable.swift */; }; - 77C9889055A3B32EA13A9616824DB0ED /* ConstraintLayoutGuideDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 278223B2383AA6562B20494D39070732 /* ConstraintLayoutGuideDSL.swift */; }; - 7813A09B8F9242BBF63900D45EF15054 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B18C060852812D3AA0A91A55B45BCC8A /* Foundation.framework */; }; - 7905407C27F35EBC33BA7751E68EBCD2 /* netfox-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CB0B54856B823606AB66970310EA9AB /* netfox-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7B06DB58DED9FFA56356EA721CBA3C6F /* NFXGenericController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E19AEFD99009D08E27EDA994DA2FEBB /* NFXGenericController.swift */; }; - 7C1702076F3A31D8D2D45A4A9F09B266 /* ConstraintMakerEditable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73121D2A939AFC2822BFC49196705524 /* ConstraintMakerEditable.swift */; }; - 7D93DBEFC712D37DDC5E6B43EE4CBEB9 /* NFXDetailsController_iOS.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB035D05CE06F19D0496893FF7785098 /* NFXDetailsController_iOS.swift */; }; - 7F2BB0C28C46D48AE36D2C88A06ED634 /* NFXDetailsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A21E9B458794D1605480C502BC204B7C /* NFXDetailsController.swift */; }; - 810F2009624E076ACF40052628980980 /* ZXKitUtil+system.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59190723A965FE4904CE82B7D5519E0D /* ZXKitUtil+system.swift */; }; - 8277256ADEC3C4DCF79957D1CA681A9A /* ConstraintDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = C345F3FC0C8D58D0C2C4D7279BD5BC68 /* ConstraintDSL.swift */; }; - 85BDDE45509ACF47CFAB997C0149B620 /* UIView+zx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90E517CB0C858F05F65B6B68C1DC29F4 /* UIView+zx.swift */; }; - 8705BBF0D428BF0AE1B554A377ECC540 /* ConstraintOffsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7B718F33851C7C95CE639443B2E888C /* ConstraintOffsetTarget.swift */; }; - 8B03A1BDC53BCF824A5BFB2B8005C897 /* NFXImageBodyDetailsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 187B2F1859FAC1A981712BB342712C39 /* NFXImageBodyDetailsController.swift */; }; - 8E939619FCBAC321106C9A094DE95A48 /* NFXWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 164AC8AD55BAFC1AD8659ACBA11AB3FA /* NFXWindowController.swift */; }; - 903BE2F69609C9E1FD2041CBAC5745BE /* NFXRawBodyDetailsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF4FAD3CD8653D6C593C3D5652F2AD79 /* NFXRawBodyDetailsController.swift */; }; - 940C5B6904718C38E5DE1A79411B55CD /* NFXAssets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3534EBD4ECB370BEF5C408B7E3CF57C1 /* NFXAssets.swift */; }; - 9594ACCBB886BB70FFD48D031ED7ADA7 /* Date+zx.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4FC9043A027291150A2B828B6087044 /* Date+zx.swift */; }; - 989CB0A8AF3D2EB7FB54BCEA528B20BA /* NFXSettingsController_iOS.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6183A6CC87959A99BB8A97BD1AC355EB /* NFXSettingsController_iOS.swift */; }; - 99B5296A5EDECE0557B9DA53D9E19CA1 /* ConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32DFBF496F95EDF92690672E9175A315 /* ConstraintItem.swift */; }; - 9B09968922C73D50040C6EEF57890D6E /* ConstraintConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4564B57AE4EFD7CD3BCB9C18FD7FD849 /* ConstraintConfig.swift */; }; - A21BC68E8BFE3C87E3FAD1D150F1076E /* netfox-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C07C6EAB4EE3337B38E6798A5144831 /* netfox-dummy.m */; }; - A270CD9EC3C541FE86E65AEDCEF500CF /* ConstraintLayoutGuide.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB5DD3217770C958FECF36198969350E /* ConstraintLayoutGuide.swift */; }; - A5196398D5690357C218B4CEA194C79F /* NFXListController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC78F278CFB56AB2C019C9B79F1F218D /* NFXListController.swift */; }; - A66ED57B365A35434C5BAF4B990819B7 /* SnapKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C6FC7DEE21CEBD810BE6A92E07BCC60 /* SnapKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AC35C9341C4BB156BB26FDD237EE3721 /* ConstraintDirectionalInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BBB7FB44E361242BC52EE9E50F0100A /* ConstraintDirectionalInsets.swift */; }; - B1AC2E3388C825F95A911BC017C0EEDA /* NFXAuthenticationChallengeSender.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90A6739DBD844E426AAD208C9C6CC4B9 /* NFXAuthenticationChallengeSender.swift */; }; - B4A88E097EB42B2A4AD9029D8934974F /* NFXLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BFD19277863D5F8AB00F3F53A5D74FE /* NFXLoader.m */; }; - B599696DFEF6B2A5ECF528F4E5BB1846 /* ConstraintDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD10A8E7D9DFAD89179750A7A8898410 /* ConstraintDescription.swift */; }; - B780B272106411CBE258BB60FFC45410 /* Debugging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43E3F8BA84F338B9FA469A4CFEC33A0D /* Debugging.swift */; }; - B94E51E6BB91A3EDFFD7FC393190ED4A /* NFXURLDetailsControllerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E00D9F22AA96FF9D212E167B5846EC4 /* NFXURLDetailsControllerViewController.swift */; }; - BD5EE149150AA9EFB2402CF06D39F257 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B18C060852812D3AA0A91A55B45BCC8A /* Foundation.framework */; }; - BECA67DFB5E0984DFAEFCB775C31972E /* ConstraintView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E90B0832DAC692D48621203EF882CC31 /* ConstraintView.swift */; }; - BEFA9B4474547E4A78BEA13812187BF0 /* NFXHTTPModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C29A59E1D5D738CBF768AF8104379E8C /* NFXHTTPModel.swift */; }; - C1213ECA02979B6241766454167B0316 /* UIColor+zx.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB29F6B7C420C8F2D61EDC7D0B0F77D0 /* UIColor+zx.swift */; }; - C412F27D75AFC0DF0F0289DBB270931C /* ConstraintMakerFinalizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = A23DCF37AC9733154D375FBF29711EC7 /* ConstraintMakerFinalizable.swift */; }; - C538F92EDD5D104F8D8D3512CF22ED6C /* Pods-netfox-zxkit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EB0A317A10F31E2920626E042626CC /* Pods-netfox-zxkit-dummy.m */; }; - C80F60BC21BCA5693F4EDDB8A5A889F8 /* ZXKitUtil+UI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 390641870E3F7B9FF933D4AC365BF2DA /* ZXKitUtil+UI.swift */; }; - CCD94D4F222C54235AA89EB5B0E7CE14 /* ZXKitCollectionViewHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1544D5087E6CA0C88770F63911BC54C /* ZXKitCollectionViewHeaderView.swift */; }; - CD80EA633F58BA32818CC6E0A7F0E3A0 /* NFXListController_iOS.swift in Sources */ = {isa = PBXBuildFile; fileRef = 403218CB74051B4E79724A3E6831EC24 /* NFXListController_iOS.swift */; }; - CE62FEABA57B2B53EABF8C7DCCC6B2C4 /* ConstraintRelation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3115CF8C0720449D94F93C74E6FD35B7 /* ConstraintRelation.swift */; }; - CF100FF8BBDDF8937FF6F612C37EA20A /* NFX.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D3214786B9008D4CC1AF2111191AC14 /* NFX.swift */; }; - CF5CEAE5762FC7ACA006966307E5B9BE /* ZXKitPluginCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98B453A213F0177FD4C7323CEB27348D /* ZXKitPluginCollectionViewCell.swift */; }; - D3CFBF5873E3901E010E5D02F4EABFF2 /* ZXKitCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DD1ED79276EFC951D47AB15657A6370A /* ZXKitCore-dummy.m */; }; - D40FB0606F91BDD8D41443F698E6AFD7 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B18C060852812D3AA0A91A55B45BCC8A /* Foundation.framework */; }; - D4697DC40F3B059E4A0867838CA1814E /* ConstraintMultiplierTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB37240DFEFF835C300876D573C4BD5E /* ConstraintMultiplierTarget.swift */; }; - D7264EFCBC291DF35F15FAB37E1B6ADB /* Data+zx.swift in Sources */ = {isa = PBXBuildFile; fileRef = D64E5293874E3317A5AC4C6F639099EB /* Data+zx.swift */; }; - D8DAE9E46FDE304CF021B99AB1B8EE25 /* NFXStatisticsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FA113A64339FD2C333D8B9BB501BC32 /* NFXStatisticsController.swift */; }; - DCF65FAF1D61BEF90078B45B87068A9A /* NFXHelper_iOS.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295C4EC30BA83CCF5DE2F536CFEAC4E9 /* NFXHelper_iOS.swift */; }; - DD349661044F23A1E8BC342C5736E9C1 /* ZXKitUtil.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 11B3CF7AB85BD0C25899D32C3BD83AAE /* ZXKitUtil.framework */; }; - DEA0B271BAAF43E9A79356B55B76BC1D /* ZXKitUtil+permission.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BFAA3765007FC59E3B33744CE92390F /* ZXKitUtil+permission.swift */; }; - DFD61B16B75DFF64BA4A8E03397DB3AA /* ZXKitWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = B268886699E21D7E01CB730211D64579 /* ZXKitWindow.swift */; }; - E139C31C679563B0A5D7AB45C50BE1A9 /* UIImage+zx.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1F91BAAF2C23CE50AC59D35AB39F8CD /* UIImage+zx.swift */; }; - E8F2429683B3015CBD39CE883770BCA7 /* ConstraintPriorityTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 315F25FFBF5307D43B427489E471C781 /* ConstraintPriorityTarget.swift */; }; - E9A970BC24EA15832F248EA020072746 /* LayoutConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFF370A9A60E5F6CFAB2F880797E7316 /* LayoutConstraintItem.swift */; }; - EB1726F5E0D0EEBA20E4528B1E37A8FA /* ConstraintViewDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = B13F38DE8B15A45F86770AA09880274B /* ConstraintViewDSL.swift */; }; - EC1A50CFBABA6C547F796673BD3B33D7 /* ZXKitCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C2078D297A9F5EAF7FAED2D8F1A93568 /* ZXKitCore-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EE909C7C786140109051BC9562EEC7C8 /* ConstraintMakerPriortizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7340F3BEDB120837081A40CED0FAF488 /* ConstraintMakerPriortizable.swift */; }; - EFA2FC826E040C827F46E93C63631CAD /* Localizable.strings in Sources */ = {isa = PBXBuildFile; fileRef = 90F5954051188ED8A08773F4A960E643 /* Localizable.strings */; }; - F8BCC61D569F64AB86507C36A08D1BA3 /* ZXKitNameSpace.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02AD7400EC8B885EFC6E75504685AA57 /* ZXKitNameSpace.swift */; }; - F976942E7D4D2F373180B301E4FD31A2 /* NFXStatisticsController_iOS.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC0D2A38A9CC9E6DF3BA6A39923F2BED /* NFXStatisticsController_iOS.swift */; }; - FAE6A3BC88795DD3612F210F1E021E62 /* ZXKitUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 377BD67454568412F7E95BB5662B7772 /* ZXKitUtil.swift */; }; - FB24D2C574A4FB49D47CC23ED08D353F /* ZXKitUtil+file.swift in Sources */ = {isa = PBXBuildFile; fileRef = 400515BFB1F4CB6CFAF578FB829AB5E9 /* ZXKitUtil+file.swift */; }; - FB4C26CAD2850814732032D6480A2267 /* ZXKitUtil+media.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9F393D9CF6858ADF645AFAC42C7C17D /* ZXKitUtil+media.swift */; }; + 03A3C6313E9B3F808CE58B8E59C60A8B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */; }; + 08351D5F16E7FCEDADFE44FDB6A48F2A /* ZXKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DD708713816DF64D93298D29A332A3A /* ZXKit.swift */; }; + 0D8A5C7D89BE153AAD91A4984F17ACED /* ZXKitPluginCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0702CDAA1C3BCF1DC98F1E3EAE5A9AF7 /* ZXKitPluginCollectionViewCell.swift */; }; + 128CE09CD1B5963378F625E4C96C42FF /* NFXStatisticsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB831C07884BED3AACFA5925436F4549 /* NFXStatisticsController.swift */; }; + 144DA93A55A598F5197F10C729FBDD69 /* UILayoutSupport+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7974E94CB3492637D6759459B6640057 /* UILayoutSupport+Extensions.swift */; }; + 17BE0F4E51B0FB968125F1A520607FD8 /* ConstraintMultiplierTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 754833B4C64058F87562E93A101AAB00 /* ConstraintMultiplierTarget.swift */; }; + 1A30B64DC2707675EBB6A8AA35177F2B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */; }; + 1E9EEA756F2774D73347F1660EEFE3E9 /* ConstraintView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65F46016DBEAD3D8749BDAD47E3523DF /* ConstraintView+Extensions.swift */; }; + 25F2502AB3332EEBBABBA84F8AE91497 /* ZXKitNameSpace.swift in Sources */ = {isa = PBXBuildFile; fileRef = F785BAF49D8DDC2A583F69A651F740CA /* ZXKitNameSpace.swift */; }; + 26A29E1970F9BB29B3C8DF42C7892BD9 /* NFXHelper_iOS.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4C8E4C45A6859A89F3A7C7BFEB85268 /* NFXHelper_iOS.swift */; }; + 274DF0E2BF04F6F4F9F1E70CF513A4F2 /* ConstraintLayoutSupportDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 458B8DE3C86254B2D2ACEB00B1ACA06F /* ConstraintLayoutSupportDSL.swift */; }; + 29C0A13CDFB6C06D01BF30E9461C56EC /* UIView+zx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23B58BA6717CAF8B009186A2F89A035B /* UIView+zx.swift */; }; + 2CEC993669E1B2A01DEDE716B8287C68 /* NFXSettingsController_iOS.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90D15609B4D2DFC00807BB2A986A7FB2 /* NFXSettingsController_iOS.swift */; }; + 2EBA956236E27833ECE117D50A9AF432 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */; }; + 31212EE57AA39C409AF4C6D3AD801B1A /* NFXInfoController_iOS.swift in Sources */ = {isa = PBXBuildFile; fileRef = 352D61A0034B355906B5A861F5F6804D /* NFXInfoController_iOS.swift */; }; + 34F3AE11E7B776D13119B3B773A9A695 /* String+zx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BD6C16D9274371C0483351F1B37ECDD /* String+zx.swift */; }; + 3574700CB4882DD22F2B6E45E071E01D /* NFXGenericBodyDetailsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A41A91480BBC72F44B1DAB86B9D2EAF /* NFXGenericBodyDetailsController.swift */; }; + 3B60C02F6E42FD06B128473E00A94224 /* ConstraintLayoutSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5286C6C4C9DA466E06398B7FCC19A54F /* ConstraintLayoutSupport.swift */; }; + 3CD5FAFC746A76D73C3F501734199DFF /* Typealiases.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C36B3A842976C9DDB09EFDDB3C00E62 /* Typealiases.swift */; }; + 3DEDFA52B3A196F6D3E1F0937617628A /* ConstraintLayoutGuide+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C406CD9809A5E0CD49ABCB2FFF4EDDAB /* ConstraintLayoutGuide+Extensions.swift */; }; + 4204E981117688B0E01EEA0F1FE87DAE /* netfox-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = AD7777FACA288E4856015624E46E9DA1 /* netfox-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 43863B6D6A0E47B6648BB7B469736EDD /* LayoutConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33F3934C78493AA0BA88581284F0AD05 /* LayoutConstraint.swift */; }; + 440C26312EC06978D78ADDE59A2165B8 /* ZXKitUtil+media.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC352C422537522C265DFC3A3FA3F5EC /* ZXKitUtil+media.swift */; }; + 48481D11F19F6F4CAC62800613A49F27 /* NFXAssets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8261145D2CE767E7F9A279C529E8C50E /* NFXAssets.swift */; }; + 4CA13A0527BC57DE2C54A0F3B5ED8652 /* LayoutConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD95988E5BD55B47D9E5F33D422F2C1D /* LayoutConstraintItem.swift */; }; + 4FCFA47F67EF81A296E13C70D38B77D2 /* ZXKitUtil-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4750445FE9EE5B100C48B870C585DDDF /* ZXKitUtil-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 51A4A1046676D304410544EB56732A49 /* Constraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E3CF1A8E384E4821193D4970C95F383 /* Constraint.swift */; }; + 55BCF3E6AF495AED09D1E4B856D7E38B /* NFXInfoController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14CF5BCF6059A059E565AB6782EEA871 /* NFXInfoController.swift */; }; + 5815697429E348EC76907DC972098DB0 /* NFXAuthenticationChallengeSender.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0E373269BA00135B75FBAE50B9E8E1E /* NFXAuthenticationChallengeSender.swift */; }; + 58D07C314EB9F7838A8CB3562B9767C2 /* NFXConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63FBF8AA1D0862355B76C2657FFB0E30 /* NFXConstants.swift */; }; + 5E8BA529DFB4529006967624044FEC1C /* ConstraintViewDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FF0BA12C8F7D527B80A581CDDC381A1 /* ConstraintViewDSL.swift */; }; + 5EE19D11EC2B845FBD4824C4AC22CAE0 /* ZXKitUtil+file.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8372AD483F72E3EFE923F1CC5C63D077 /* ZXKitUtil+file.swift */; }; + 62F299B4704A7C95FB5866C6CDE2E2FD /* ConstraintOffsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8FC92E2918F4F875538314634664345 /* ConstraintOffsetTarget.swift */; }; + 6427FAB86AAD055250B3AAA1068F1DA3 /* ZXKitCore-ZXKitCore in Resources */ = {isa = PBXBuildFile; fileRef = B462C8B2CB78AE609523A787505C2EB4 /* ZXKitCore-ZXKitCore */; }; + 6758A2A271E34D7E1388132C5D77B053 /* Data+zx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08D8EAC3DA62BA9C0EEC24C058B79B8E /* Data+zx.swift */; }; + 691193D4939AF2BE59C3782E1D0BC81A /* NFXRawBodyDetailsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 743A1576BBC51858C42B6A0073570447 /* NFXRawBodyDetailsController.swift */; }; + 6BD2F1D189566DDC6ED95C1F6857C9C5 /* Localizable.strings in Sources */ = {isa = PBXBuildFile; fileRef = B21B67E3E274B74FBA0B7A18EC588945 /* Localizable.strings */; }; + 72C62EBC46C4E21D0B94059D440832E7 /* ZXKitCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CBA6B191E598CE742A34A1D528692007 /* ZXKitCore-dummy.m */; }; + 7358B9EBDDC8C1A425EB5702739B4DA2 /* NFXURLDetailsControllerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7924D683E656D0795243710947BFDF22 /* NFXURLDetailsControllerViewController.swift */; }; + 7420C989D8335B236142E0E7EE9677CC /* ZXKitUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3589C54714129F349D9E8016169D792 /* ZXKitUtil.swift */; }; + 74229E1865DD1520975E777775B80BB1 /* NFXProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9EC70902F23686F7C61C2A17FE7256E /* NFXProtocol.swift */; }; + 7580FAAB1BDA52F5A969E5571D1A5973 /* ConstraintAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B87AB1416C7A9F430D5D553B85B4EEF /* ConstraintAttributes.swift */; }; + 761C78E0E1256C52E8A351F9428FA902 /* NFXListCell_iOS.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1278896BE15041AD8A819E1723316CF8 /* NFXListCell_iOS.swift */; }; + 7764AA5F6BBFC6ECE43959923DD007D3 /* ConstraintDirectionalInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0E3AA389F3A575B2F92984B7287348D /* ConstraintDirectionalInsetTarget.swift */; }; + 789C4C0254597F302EE2A8CD591DFD92 /* Date+zx.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD877CF223002004D4E3E387DEE7464C /* Date+zx.swift */; }; + 825062025906CE93C5D124E1FD9A811E /* ConstraintMakerExtendable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 455EA80E0B78242D6A85685D9091B5FD /* ConstraintMakerExtendable.swift */; }; + 8328BF4D90D98651921F1518F3BD0EA4 /* ZXKitUtil+system.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFF4FCDB3C9389C79A495D3051C8A2D5 /* ZXKitUtil+system.swift */; }; + 8338498A37A0E552818CB72FA9EDB996 /* NFXHTTPModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C2B2D33B6F592D785A3B986182AE77E /* NFXHTTPModel.swift */; }; + 8449EB1DFD43E222D687D5A8D2088D2D /* ConstraintLayoutGuideDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64D3701903B8A00628621B89D4F74B8A /* ConstraintLayoutGuideDSL.swift */; }; + 8AB42E959E8F7F2B75841D73A507BAD6 /* NFXWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1530EE5D697EED61BEE58D64D543C4B0 /* NFXWindowController.swift */; }; + 8C6546C1EF4F153DF3795CC6FE189E5B /* ConstraintInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4798ECA375D0E2AB582C4B3D9B6D9DFF /* ConstraintInsets.swift */; }; + 8FD9CD608C4EAAFDE6AC7B8B9EF0FF5E /* ConstraintDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA63B20B577C9D25E06E688092663229 /* ConstraintDescription.swift */; }; + 90FD5AE525E138A473723FD79AF73273 /* ConstraintDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 782F87A0E0282B06C6A5717328695E27 /* ConstraintDSL.swift */; }; + 915772E184E67D0D98E2951F7D63FAE0 /* UIColor+zx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31E7F21E2CDB8792C344D146C1E36C4B /* UIColor+zx.swift */; }; + 924D84FFE882F897B2DC78FF115DE145 /* Pods-netfox-zxkit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BB501C722F1746B3F5A78D2964EB50A9 /* Pods-netfox-zxkit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9334E518B0185C5F6235BC843B7F8A27 /* NFXDetailsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41933C450C66DB0F1B38793634361262 /* NFXDetailsController.swift */; }; + 968B4874A9F12D67C8B901136C9C8157 /* SnapKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 77B03756ACCEF9FD526E691B0B54A4A5 /* SnapKit-dummy.m */; }; + 9B02620470A827EBBF81C4BDD9B49218 /* UIImage+zx.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7F3E7C3EA1C6581B272A8C4DB023540 /* UIImage+zx.swift */; }; + 9F5FDED37CD24A190F4F58A2999179DF /* ZXKitUtil+permission.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A1D8185746C8E05C93847D7E98935F9 /* ZXKitUtil+permission.swift */; }; + A0F754C88A64972A40A9008B0AD52109 /* ConstraintDirectionalInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76BEA802D0E1CC7C01444BFC8C4CF167 /* ConstraintDirectionalInsets.swift */; }; + A4467357581E8345DD348683CC4111AF /* SnapKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B5F277354776B49B5FDAAD49E8DEEA2B /* SnapKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A53D3AF15CE8D348306EF11619C5D166 /* ConstraintMakerEditable.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0AC01F48708A0DCAD7392E59857B75B /* ConstraintMakerEditable.swift */; }; + A58A6F7C912F16944059473C8E6E2128 /* ZXKitCollectionViewHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43F89DC5C24A95641CB5D47D03336F65 /* ZXKitCollectionViewHeaderView.swift */; }; + A765C743DF5507090C4388457DF4B7C6 /* ZXKitFloatWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7688C6414E89C1BDE593364CF6CCB00B /* ZXKitFloatWindow.swift */; }; + A78DEBED2C64EF9631725BAE4BEE3244 /* ZXKitWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8AE7D444804601541EC9A23167B74E2F /* ZXKitWindow.swift */; }; + A906F9C6CE62FC269ECD62C8EC41C033 /* ZXKitPluginProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28ACD3FE197F391EAB54639C79D1DBAC /* ZXKitPluginProtocol.swift */; }; + AF805773B122FABF5737C4A1A3731779 /* Localizable.strings in Sources */ = {isa = PBXBuildFile; fileRef = F9295A5E145EC863BBE5C1B44C0CA68E /* Localizable.strings */; }; + B05C6FC0332B40E5092FFA97827C76C9 /* NFXListController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8BA607CF47F815EEC86750EC52267348 /* NFXListController.swift */; }; + B529041E4C15D801791215F8E311FF47 /* NFXSettingsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86361B9A2F36856C4D52D395257B1EC0 /* NFXSettingsController.swift */; }; + B543FD108C1C6AF6129CB4991553218B /* ConstraintConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEF2233542C69AAB3273253D659181D2 /* ConstraintConfig.swift */; }; + B85218C188A0342EC73ECEFD1CB43F8D /* NFXHTTPModelManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11CBF55F58FEE2F7F9FDC8702A912CCD /* NFXHTTPModelManager.swift */; }; + B88E75160457951F03BA84516B672B05 /* NFXGenericController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5E6FB3DF7AE08AD3134F6639FAE4E19 /* NFXGenericController.swift */; }; + BC3E233426CD2291B903EB4C3262EAA1 /* ZXKitUtil+UI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EE92A49DE1AC3870DBA0FBA6AE9395F /* ZXKitUtil+UI.swift */; }; + BCEA9245D650D5153C9A0FD9F18DD4AC /* NFXListController_iOS.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9E39F447F65E47F1B526CDA2740EA07 /* NFXListController_iOS.swift */; }; + BD333CDBCF5D2FD55920336FC271DF33 /* ConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = F06DF47FB33227F97999366656488EBB /* ConstraintItem.swift */; }; + BE2A85CDC220639F0FD59C626175335A /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 5AE81FD00E24031DC780A4C171810194 /* Localizable.strings */; }; + BEBF920FEB959B46A76BAADF22E5CD15 /* ConstraintInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67E13CDAA5E4924FBC7E5B45B412DC6C /* ConstraintInsetTarget.swift */; }; + C61D3BC32A28A405C934C00039AD2583 /* ConstraintConstantTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E718A03C284610B107D349672DFE4D8 /* ConstraintConstantTarget.swift */; }; + C87EBB15A003FA72F40D37B6F5518990 /* ZXKitCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F7EF73FB8383D38B9C216D8604A046A6 /* ZXKitCore-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CB194156C900B767B0160AF72EDF354D /* ConstraintMaker.swift in Sources */ = {isa = PBXBuildFile; fileRef = D13431406326A5340226ADF5FA8BC5BD /* ConstraintMaker.swift */; }; + CB8E4BF0D710970BE2CB4C87ED1043E4 /* ConstraintMakerRelatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8BD54509775C53C3DFCE4998BC8E7F4B /* ConstraintMakerRelatable.swift */; }; + CC74C8DD11E72BCA7DB2704B3E771C54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */; }; + CCA22C9F421C9E8C13009947816D8C82 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */; }; + D13D417B236E736EEAE7217B5CE3EC5C /* ConstraintMakerFinalizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C9DD3358AD7CF17C14E523E84A41614 /* ConstraintMakerFinalizable.swift */; }; + D21459EB156B909DAB65DC64B8256C3B /* NFXHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8BCDB60CA7D55B31201CB61D3766B363 /* NFXHelper.swift */; }; + D477756D27AD85A8C3C5F169BE218B76 /* NFXDetailsController_iOS.swift in Sources */ = {isa = PBXBuildFile; fileRef = B136B28DCB497B87BFECC4E45CE9FE35 /* NFXDetailsController_iOS.swift */; }; + D59C2826AD288ECFF576B2AFA312716C /* ConstraintRelation.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2446388055797858A6C02D3CB184D60 /* ConstraintRelation.swift */; }; + D7EC5FF54630FE4D546D546E22304CD0 /* NFXImageBodyDetailsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAFA1E31EF185131894EA1D2BA38310C /* NFXImageBodyDetailsController.swift */; }; + E36244E8BF4AC941E82DAF16DDF4BBC2 /* ConstraintPriorityTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42ACA346E055FD7467D49EFF442369D3 /* ConstraintPriorityTarget.swift */; }; + E87444DCDB53BC7FA5BEB0316E97E34F /* NFX.swift in Sources */ = {isa = PBXBuildFile; fileRef = 336BB82BB1BF79BA4F89C07345CB8534 /* NFX.swift */; }; + E8EAADACF3BAE33BDECBC7214EAE9CD2 /* ConstraintRelatableTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46FBF1AA0058E8E9522E506BC928CD94 /* ConstraintRelatableTarget.swift */; }; + EC4867F2D2D1D8ACB4818BD39B3DC6A8 /* netfox-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C693C0F0C78CBDA49E3BD885066D8F2 /* netfox-dummy.m */; }; + EE6C364198A763EBBF49237035D86439 /* ConstraintLayoutGuide.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45427C92FB16DC63710A2CEC3455B31A /* ConstraintLayoutGuide.swift */; }; + EFE0AC8B55B6BF754DCC7C3747ACD481 /* ZXKitUtil-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0274C2A2963EBAC071475CE955FC7853 /* ZXKitUtil-dummy.m */; }; + F10586462FB54CEA169A1A7A469A926D /* Debugging.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF0D0DA689A0CDC1ABF5DB20E67CAAF2 /* Debugging.swift */; }; + F24D06C23DAB2F52A30C886A7A8177C7 /* ConstraintView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43A6286EC98D5A52BCF1E98D95F843EF /* ConstraintView.swift */; }; + F2C817C166B2DE613222C41015A586C9 /* ConstraintMakerPriortizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CFAA5F0DA8439D4AEAE502AE9585CB6 /* ConstraintMakerPriortizable.swift */; }; + F343BA4E457FFDB0165492AECAEF0BCC /* ConstraintPriority.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BB684D26724990474575FB70BE02E79 /* ConstraintPriority.swift */; }; + F5E88E33B66D6530B1C6C9E929C68595 /* Pods-netfox-zxkit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EB0A317A10F31E2920626E042626CC /* Pods-netfox-zxkit-dummy.m */; }; + FA7EFA6CCA3D70907B15CCE8E3A4FBEE /* NFXStatisticsController_iOS.swift in Sources */ = {isa = PBXBuildFile; fileRef = D66B9DB2C6E03A4C595C71ADFB7F5984 /* NFXStatisticsController_iOS.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 1D4303621EDB226A2CEF0600E4875D08 /* PBXContainerItemProxy */ = { + 0BA6785FA142EDF6D0674CBB1B20B7B5 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 4B09DDD2A3083E311C984F301582897A; - remoteInfo = ZXKitUtil; + remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4; + remoteInfo = SnapKit; }; - 59B0C53BBEC6436E3AF725428337F5F1 /* PBXContainerItemProxy */ = { + 7EB1B1A35F63B9ED5B839465721FAEA3 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4; - remoteInfo = SnapKit; + remoteGlobalIDString = 23CC5B423FA68CF6FCACD593F1FEDCF6; + remoteInfo = ZXKitCore; }; - 6612165D5D5E45226195DD0D3E5DC133 /* PBXContainerItemProxy */ = { + 844674814186537517C1227BBD55435A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 4B09DDD2A3083E311C984F301582897A; - remoteInfo = ZXKitUtil; + remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4; + remoteInfo = SnapKit; }; - A0694E8F2B471429E786284D31718808 /* PBXContainerItemProxy */ = { + 9A66E8EC12D02768610B69321D3DE2CE /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 23CC5B423FA68CF6FCACD593F1FEDCF6; - remoteInfo = ZXKitCore; + remoteGlobalIDString = 4B09DDD2A3083E311C984F301582897A; + remoteInfo = ZXKitUtil; }; - A6EDC7F8576E574E283F580590D888CA /* PBXContainerItemProxy */ = { + C7461A72387F410DB31F0B1CFCE2927F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 6535447A49D8AE5353316E9D3CA44597; remoteInfo = "ZXKitCore-ZXKitCore"; }; - AD1C282C84AEDF915E548351B526F599 /* PBXContainerItemProxy */ = { + F1FE910FAAC766BBB84ADF1414968C2A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 33426EFE1931E100B59ABF41FD14377D; - remoteInfo = netfox; + remoteGlobalIDString = 4B09DDD2A3083E311C984F301582897A; + remoteInfo = ZXKitUtil; }; - C768A3C6BD4812103A21FAE78374FB76 /* PBXContainerItemProxy */ = { + FAC14BCAC4A12F819B25D438C576B303 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4; - remoteInfo = SnapKit; + remoteGlobalIDString = 33426EFE1931E100B59ABF41FD14377D; + remoteInfo = netfox; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 02AD7400EC8B885EFC6E75504685AA57 /* ZXKitNameSpace.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZXKitNameSpace.swift; path = pod/extend/ZXKitNameSpace.swift; sourceTree = ""; }; - 0AE33883C83C7D6103F7EB06DCE328AD /* ConstraintConstantTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConstantTarget.swift; path = Source/ConstraintConstantTarget.swift; sourceTree = ""; }; - 0D341A77CD427A872FC7E8F5CDD9E3C6 /* Pods_netfox_zxkit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_netfox_zxkit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 1030AE88F38B61D29F1612C5BDF60FB4 /* ConstraintView+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintView+Extensions.swift"; path = "Source/ConstraintView+Extensions.swift"; sourceTree = ""; }; - 11B3CF7AB85BD0C25899D32C3BD83AAE /* ZXKitUtil.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ZXKitUtil.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 164AC8AD55BAFC1AD8659ACBA11AB3FA /* NFXWindowController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXWindowController.swift; path = netfox/Core/NFXWindowController.swift; sourceTree = ""; }; - 165D458949074B642577380D89222466 /* netfox.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = netfox.debug.xcconfig; sourceTree = ""; }; - 187B2F1859FAC1A981712BB342712C39 /* NFXImageBodyDetailsController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXImageBodyDetailsController.swift; path = netfox/Core/NFXImageBodyDetailsController.swift; sourceTree = ""; }; - 19B4CCFF6F020B12DD03BF84C2EC2D54 /* ZXKitCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ZXKitCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 1DAFD3AB72F9DBFF29632C4D321AD2F9 /* NFXListCell_iOS.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXListCell_iOS.swift; path = netfox/iOS/NFXListCell_iOS.swift; sourceTree = ""; }; - 208D2C82AFD76FE79CB039CA16246374 /* ConstraintRelatableTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelatableTarget.swift; path = Source/ConstraintRelatableTarget.swift; sourceTree = ""; }; - 2194B707C1ED5B1C5F1724A4ACBE1D8F /* Typealiases.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Typealiases.swift; path = Source/Typealiases.swift; sourceTree = ""; }; - 25C5185AD20E55BDFE5DA1AA83EB21BA /* ZXKitCore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ZXKitCore-prefix.pch"; sourceTree = ""; }; - 262FAF0E10152563BC9E0E2B89C3118B /* netfox.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = netfox.release.xcconfig; sourceTree = ""; }; - 26C08CA26D76CAEB9E0BCE851FADFBB5 /* ZXKitUtil-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ZXKitUtil-Info.plist"; sourceTree = ""; }; - 26F0AF40C8D77DB89CD1FD3AEBCB6FD3 /* NFXGenericBodyDetailsController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXGenericBodyDetailsController.swift; path = netfox/Core/NFXGenericBodyDetailsController.swift; sourceTree = ""; }; - 278223B2383AA6562B20494D39070732 /* ConstraintLayoutGuideDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuideDSL.swift; path = Source/ConstraintLayoutGuideDSL.swift; sourceTree = ""; }; - 295C4EC30BA83CCF5DE2F536CFEAC4E9 /* NFXHelper_iOS.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXHelper_iOS.swift; path = netfox/iOS/NFXHelper_iOS.swift; sourceTree = ""; }; - 2A30208EA1F96FE6B6A3DFFFB1C020D1 /* ConstraintInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsets.swift; path = Source/ConstraintInsets.swift; sourceTree = ""; }; - 2DD86A35A440A3D03F4341584B93EF64 /* ZXKitUtil.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ZXKitUtil.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2EE2330C67C1F1F3B33E386B7FAC5F51 /* NFXInfoController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXInfoController.swift; path = netfox/Core/NFXInfoController.swift; sourceTree = ""; }; + 0274C2A2963EBAC071475CE955FC7853 /* ZXKitUtil-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ZXKitUtil-dummy.m"; sourceTree = ""; }; + 06CC22C85CA6084D765C59FFB10112FA /* netfox.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = netfox.modulemap; sourceTree = ""; }; + 0702CDAA1C3BCF1DC98F1E3EAE5A9AF7 /* ZXKitPluginCollectionViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZXKitPluginCollectionViewCell.swift; path = pod/ZXKitPluginCollectionViewCell.swift; sourceTree = ""; }; + 08D8EAC3DA62BA9C0EEC24C058B79B8E /* Data+zx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+zx.swift"; path = "pod/extend/Data+zx.swift"; sourceTree = ""; }; + 0912BC17B1B35C9A88A5E789D986D8E6 /* netfox-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "netfox-prefix.pch"; sourceTree = ""; }; + 0A41A91480BBC72F44B1DAB86B9D2EAF /* NFXGenericBodyDetailsController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXGenericBodyDetailsController.swift; path = netfox/Core/NFXGenericBodyDetailsController.swift; sourceTree = ""; }; + 0AE648049FEE95B7E990698787216C5D /* SnapKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SnapKit-Info.plist"; sourceTree = ""; }; + 0D341A77CD427A872FC7E8F5CDD9E3C6 /* Pods-netfox-zxkit */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-netfox-zxkit"; path = Pods_netfox_zxkit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 11CBF55F58FEE2F7F9FDC8702A912CCD /* NFXHTTPModelManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXHTTPModelManager.swift; path = netfox/Core/NFXHTTPModelManager.swift; sourceTree = ""; }; + 1278896BE15041AD8A819E1723316CF8 /* NFXListCell_iOS.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXListCell_iOS.swift; path = netfox/iOS/NFXListCell_iOS.swift; sourceTree = ""; }; + 14CF5BCF6059A059E565AB6782EEA871 /* NFXInfoController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXInfoController.swift; path = netfox/Core/NFXInfoController.swift; sourceTree = ""; }; + 1530EE5D697EED61BEE58D64D543C4B0 /* NFXWindowController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXWindowController.swift; path = netfox/Core/NFXWindowController.swift; sourceTree = ""; }; + 19B4CCFF6F020B12DD03BF84C2EC2D54 /* ZXKitCore */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = ZXKitCore; path = ZXKitCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1B5BDA8A7E121171A98681D319180B26 /* ZXKitCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ZXKitCore.modulemap; sourceTree = ""; }; + 1BB2E68A8D99910824FC93D3175C1B6C /* ResourceBundle-ZXKitCore-ZXKitCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-ZXKitCore-ZXKitCore-Info.plist"; sourceTree = ""; }; + 23B58BA6717CAF8B009186A2F89A035B /* UIView+zx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+zx.swift"; path = "pod/extend/UIView+zx.swift"; sourceTree = ""; }; + 28ACD3FE197F391EAB54639C79D1DBAC /* ZXKitPluginProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZXKitPluginProtocol.swift; path = pod/ZXKitPluginProtocol.swift; sourceTree = ""; }; + 2BB684D26724990474575FB70BE02E79 /* ConstraintPriority.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintPriority.swift; path = Source/ConstraintPriority.swift; sourceTree = ""; }; + 2DD708713816DF64D93298D29A332A3A /* ZXKit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZXKit.swift; path = pod/ZXKit.swift; sourceTree = ""; }; + 2DD86A35A440A3D03F4341584B93EF64 /* ZXKitUtil */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = ZXKitUtil; path = ZXKitUtil.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 2EEDA1CDABECE662BA9346AEA4B9CEF9 /* Pods-netfox-zxkit-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-netfox-zxkit-acknowledgements.markdown"; sourceTree = ""; }; - 3115CF8C0720449D94F93C74E6FD35B7 /* ConstraintRelation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelation.swift; path = Source/ConstraintRelation.swift; sourceTree = ""; }; - 315F25FFBF5307D43B427489E471C781 /* ConstraintPriorityTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintPriorityTarget.swift; path = Source/ConstraintPriorityTarget.swift; sourceTree = ""; }; - 32DFBF496F95EDF92690672E9175A315 /* ConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintItem.swift; path = Source/ConstraintItem.swift; sourceTree = ""; }; - 343A3A9C82C1A91023E0068CB2C6555D /* ZXKitCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ZXKitCore-Info.plist"; sourceTree = ""; }; - 3534EBD4ECB370BEF5C408B7E3CF57C1 /* NFXAssets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXAssets.swift; path = netfox/Core/NFXAssets.swift; sourceTree = ""; }; - 377BD67454568412F7E95BB5662B7772 /* ZXKitUtil.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZXKitUtil.swift; path = pod/ZXKitUtil.swift; sourceTree = ""; }; - 390641870E3F7B9FF933D4AC365BF2DA /* ZXKitUtil+UI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ZXKitUtil+UI.swift"; path = "pod/ZXKitUtil+UI.swift"; sourceTree = ""; }; - 3BFAA3765007FC59E3B33744CE92390F /* ZXKitUtil+permission.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ZXKitUtil+permission.swift"; path = "pod/ZXKitUtil+permission.swift"; sourceTree = ""; }; - 400515BFB1F4CB6CFAF578FB829AB5E9 /* ZXKitUtil+file.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ZXKitUtil+file.swift"; path = "pod/ZXKitUtil+file.swift"; sourceTree = ""; }; - 403218CB74051B4E79724A3E6831EC24 /* NFXListController_iOS.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXListController_iOS.swift; path = netfox/iOS/NFXListController_iOS.swift; sourceTree = ""; }; - 43E3F8BA84F338B9FA469A4CFEC33A0D /* Debugging.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Debugging.swift; path = Source/Debugging.swift; sourceTree = ""; }; - 450836B70EBCA1392B4EFD18C19E733A /* ZXKitUtil-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ZXKitUtil-dummy.m"; sourceTree = ""; }; - 4564B57AE4EFD7CD3BCB9C18FD7FD849 /* ConstraintConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConfig.swift; path = Source/ConstraintConfig.swift; sourceTree = ""; }; - 4591B6E6A0580D96C33A583EA4EF5444 /* netfox-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "netfox-prefix.pch"; sourceTree = ""; }; - 4CB0B54856B823606AB66970310EA9AB /* netfox-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "netfox-umbrella.h"; sourceTree = ""; }; - 4FA113A64339FD2C333D8B9BB501BC32 /* NFXStatisticsController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXStatisticsController.swift; path = netfox/Core/NFXStatisticsController.swift; sourceTree = ""; }; - 4FE897E8C7E75A70BB808ECC413E7655 /* ZXKitPluginProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZXKitPluginProtocol.swift; path = pod/ZXKitPluginProtocol.swift; sourceTree = ""; }; - 554A569B1BFBDD3BE1A9DF60EEAF7793 /* NFXConstants.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXConstants.swift; path = netfox/Core/NFXConstants.swift; sourceTree = ""; }; - 57D4DBB8C81A0A72D8086E149FB29E9C /* ZXKit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZXKit.swift; path = pod/ZXKit.swift; sourceTree = ""; }; - 59190723A965FE4904CE82B7D5519E0D /* ZXKitUtil+system.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ZXKitUtil+system.swift"; path = "pod/ZXKitUtil+system.swift"; sourceTree = ""; }; - 5BBB7FB44E361242BC52EE9E50F0100A /* ConstraintDirectionalInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDirectionalInsets.swift; path = Source/ConstraintDirectionalInsets.swift; sourceTree = ""; }; - 5BE914D2C3F695F011266A4DBF83DEC3 /* NFXHTTPModelManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXHTTPModelManager.swift; path = netfox/Core/NFXHTTPModelManager.swift; sourceTree = ""; }; - 5D2A95317E94E18EB57E940E6B7DA4BD /* ConstraintInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsetTarget.swift; path = Source/ConstraintInsetTarget.swift; sourceTree = ""; }; - 5D3214786B9008D4CC1AF2111191AC14 /* NFX.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFX.swift; path = netfox/Core/NFX.swift; sourceTree = ""; }; - 5E00D9F22AA96FF9D212E167B5846EC4 /* NFXURLDetailsControllerViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXURLDetailsControllerViewController.swift; path = netfox/iOS/NFXURLDetailsControllerViewController.swift; sourceTree = ""; }; - 60079A7BF365A483F686146A67E7E1AA /* ResourceBundle-ZXKitCore-ZXKitCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-ZXKitCore-ZXKitCore-Info.plist"; sourceTree = ""; }; - 6183A6CC87959A99BB8A97BD1AC355EB /* NFXSettingsController_iOS.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXSettingsController_iOS.swift; path = netfox/iOS/NFXSettingsController_iOS.swift; sourceTree = ""; }; - 62EAF1C753CB6AC78727857C4111EC95 /* ZXKitCore.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ZXKitCore.debug.xcconfig; sourceTree = ""; }; - 64B3985C9A3DE6B0CA5C26A9708862B8 /* SnapKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-prefix.pch"; sourceTree = ""; }; - 680CCF5A86223E73265BF2EB0D80BBD5 /* netfox-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "netfox-Info.plist"; sourceTree = ""; }; + 31E7F21E2CDB8792C344D146C1E36C4B /* UIColor+zx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIColor+zx.swift"; path = "pod/extend/UIColor+zx.swift"; sourceTree = ""; }; + 336BB82BB1BF79BA4F89C07345CB8534 /* NFX.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFX.swift; path = netfox/Core/NFX.swift; sourceTree = ""; }; + 33F3934C78493AA0BA88581284F0AD05 /* LayoutConstraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraint.swift; path = Source/LayoutConstraint.swift; sourceTree = ""; }; + 34506009AAF4B86F2AC5EC16D67BF77B /* ZXKitUtil.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ZXKitUtil.release.xcconfig; sourceTree = ""; }; + 352D61A0034B355906B5A861F5F6804D /* NFXInfoController_iOS.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXInfoController_iOS.swift; path = netfox/iOS/NFXInfoController_iOS.swift; sourceTree = ""; }; + 41933C450C66DB0F1B38793634361262 /* NFXDetailsController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXDetailsController.swift; path = netfox/Core/NFXDetailsController.swift; sourceTree = ""; }; + 42ACA346E055FD7467D49EFF442369D3 /* ConstraintPriorityTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintPriorityTarget.swift; path = Source/ConstraintPriorityTarget.swift; sourceTree = ""; }; + 43A6286EC98D5A52BCF1E98D95F843EF /* ConstraintView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintView.swift; path = Source/ConstraintView.swift; sourceTree = ""; }; + 43F89DC5C24A95641CB5D47D03336F65 /* ZXKitCollectionViewHeaderView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZXKitCollectionViewHeaderView.swift; path = pod/ZXKitCollectionViewHeaderView.swift; sourceTree = ""; }; + 45427C92FB16DC63710A2CEC3455B31A /* ConstraintLayoutGuide.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuide.swift; path = Source/ConstraintLayoutGuide.swift; sourceTree = ""; }; + 455EA80E0B78242D6A85685D9091B5FD /* ConstraintMakerExtendable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerExtendable.swift; path = Source/ConstraintMakerExtendable.swift; sourceTree = ""; }; + 458B8DE3C86254B2D2ACEB00B1ACA06F /* ConstraintLayoutSupportDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupportDSL.swift; path = Source/ConstraintLayoutSupportDSL.swift; sourceTree = ""; }; + 46FBF1AA0058E8E9522E506BC928CD94 /* ConstraintRelatableTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelatableTarget.swift; path = Source/ConstraintRelatableTarget.swift; sourceTree = ""; }; + 4750445FE9EE5B100C48B870C585DDDF /* ZXKitUtil-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ZXKitUtil-umbrella.h"; sourceTree = ""; }; + 4798ECA375D0E2AB582C4B3D9B6D9DFF /* ConstraintInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsets.swift; path = Source/ConstraintInsets.swift; sourceTree = ""; }; + 4B87AB1416C7A9F430D5D553B85B4EEF /* ConstraintAttributes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintAttributes.swift; path = Source/ConstraintAttributes.swift; sourceTree = ""; }; + 4E3CF1A8E384E4821193D4970C95F383 /* Constraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Constraint.swift; path = Source/Constraint.swift; sourceTree = ""; }; + 521051A8125394ABD4C991A1D1E62C35 /* netfox-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "netfox-Info.plist"; sourceTree = ""; }; + 5286C6C4C9DA466E06398B7FCC19A54F /* ConstraintLayoutSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupport.swift; path = Source/ConstraintLayoutSupport.swift; sourceTree = ""; }; + 54322A48177658A9B582961DA2AF778C /* SnapKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SnapKit.modulemap; sourceTree = ""; }; + 597ED1D6F6D0266E437700E72D4D6A4B /* SnapKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapKit.debug.xcconfig; sourceTree = ""; }; + 5CFAA5F0DA8439D4AEAE502AE9585CB6 /* ConstraintMakerPriortizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerPriortizable.swift; path = Source/ConstraintMakerPriortizable.swift; sourceTree = ""; }; + 63FBF8AA1D0862355B76C2657FFB0E30 /* NFXConstants.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXConstants.swift; path = netfox/Core/NFXConstants.swift; sourceTree = ""; }; + 64D3701903B8A00628621B89D4F74B8A /* ConstraintLayoutGuideDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuideDSL.swift; path = Source/ConstraintLayoutGuideDSL.swift; sourceTree = ""; }; + 65F46016DBEAD3D8749BDAD47E3523DF /* ConstraintView+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintView+Extensions.swift"; path = "Source/ConstraintView+Extensions.swift"; sourceTree = ""; }; + 67E13CDAA5E4924FBC7E5B45B412DC6C /* ConstraintInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsetTarget.swift; path = Source/ConstraintInsetTarget.swift; sourceTree = ""; }; 68BCDC39105B20BE7FC85B7C0CDA03A6 /* Pods-netfox-zxkit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-netfox-zxkit.release.xcconfig"; sourceTree = ""; }; - 6BFD19277863D5F8AB00F3F53A5D74FE /* NFXLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NFXLoader.m; path = netfox/Core/NFXLoader.m; sourceTree = ""; }; - 6C6FC7DEE21CEBD810BE6A92E07BCC60 /* SnapKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-umbrella.h"; sourceTree = ""; }; - 6CF2FA138AD088298DE6C4CBE90F865B /* SnapKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SnapKit-dummy.m"; sourceTree = ""; }; - 6F37A18729AE4948C91DDDD93437F84F /* NFXProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXProtocol.swift; path = netfox/Core/NFXProtocol.swift; sourceTree = ""; }; - 73121D2A939AFC2822BFC49196705524 /* ConstraintMakerEditable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerEditable.swift; path = Source/ConstraintMakerEditable.swift; sourceTree = ""; }; - 7340F3BEDB120837081A40CED0FAF488 /* ConstraintMakerPriortizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerPriortizable.swift; path = Source/ConstraintMakerPriortizable.swift; sourceTree = ""; }; - 753EF59389BB1B8D29B58C5DC3EDB22D /* SnapKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SnapKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 76E12A1052C7ED3EF0755D604B3041BC /* ZXKitFloatWindow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZXKitFloatWindow.swift; path = pod/ZXKitFloatWindow.swift; sourceTree = ""; }; - 7E19AEFD99009D08E27EDA994DA2FEBB /* NFXGenericController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXGenericController.swift; path = netfox/Core/NFXGenericController.swift; sourceTree = ""; }; - 81AF2596D152AF5B6A99B1F6A5FC025E /* SnapKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SnapKit-Info.plist"; sourceTree = ""; }; - 81F21440AE7DA4C3ACD6DC5D7DAF59EF /* ZXKitCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ZXKitCore.modulemap; sourceTree = ""; }; - 87BBC6969E0F7348764517C79A84B548 /* netfox.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = netfox.modulemap; sourceTree = ""; }; - 8AAAC80C6677AFF5196F94BFF11EBF6B /* LayoutConstraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraint.swift; path = Source/LayoutConstraint.swift; sourceTree = ""; }; - 8B3C76FFD714D3E6F89161D68ACC802F /* ConstraintLayoutSupportDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupportDSL.swift; path = Source/ConstraintLayoutSupportDSL.swift; sourceTree = ""; }; + 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + 743A1576BBC51858C42B6A0073570447 /* NFXRawBodyDetailsController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXRawBodyDetailsController.swift; path = netfox/iOS/NFXRawBodyDetailsController.swift; sourceTree = ""; }; + 754833B4C64058F87562E93A101AAB00 /* ConstraintMultiplierTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMultiplierTarget.swift; path = Source/ConstraintMultiplierTarget.swift; sourceTree = ""; }; + 756095FBDB3FD0B1FD54DC3716D1BB2A /* ZXKitUtil.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ZXKitUtil.modulemap; sourceTree = ""; }; + 7688C6414E89C1BDE593364CF6CCB00B /* ZXKitFloatWindow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZXKitFloatWindow.swift; path = pod/ZXKitFloatWindow.swift; sourceTree = ""; }; + 76BEA802D0E1CC7C01444BFC8C4CF167 /* ConstraintDirectionalInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDirectionalInsets.swift; path = Source/ConstraintDirectionalInsets.swift; sourceTree = ""; }; + 77B03756ACCEF9FD526E691B0B54A4A5 /* SnapKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SnapKit-dummy.m"; sourceTree = ""; }; + 782F87A0E0282B06C6A5717328695E27 /* ConstraintDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDSL.swift; path = Source/ConstraintDSL.swift; sourceTree = ""; }; + 7924D683E656D0795243710947BFDF22 /* NFXURLDetailsControllerViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXURLDetailsControllerViewController.swift; path = netfox/iOS/NFXURLDetailsControllerViewController.swift; sourceTree = ""; }; + 7974E94CB3492637D6759459B6640057 /* UILayoutSupport+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UILayoutSupport+Extensions.swift"; path = "Source/UILayoutSupport+Extensions.swift"; sourceTree = ""; }; + 7AE9B47CBED4FD5A97088EF633000E1B /* ZXKitUtil-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ZXKitUtil-prefix.pch"; sourceTree = ""; }; + 7BD6C16D9274371C0483351F1B37ECDD /* String+zx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+zx.swift"; path = "pod/extend/String+zx.swift"; sourceTree = ""; }; + 7E718A03C284610B107D349672DFE4D8 /* ConstraintConstantTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConstantTarget.swift; path = Source/ConstraintConstantTarget.swift; sourceTree = ""; }; + 7EE92A49DE1AC3870DBA0FBA6AE9395F /* ZXKitUtil+UI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ZXKitUtil+UI.swift"; path = "pod/ZXKitUtil+UI.swift"; sourceTree = ""; }; + 8261145D2CE767E7F9A279C529E8C50E /* NFXAssets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXAssets.swift; path = netfox/Core/NFXAssets.swift; sourceTree = ""; }; + 8338D8DD4FF9F8C22C5284182A33201B /* ZXKitUtil.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ZXKitUtil.debug.xcconfig; sourceTree = ""; }; + 8372AD483F72E3EFE923F1CC5C63D077 /* ZXKitUtil+file.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ZXKitUtil+file.swift"; path = "pod/ZXKitUtil+file.swift"; sourceTree = ""; }; + 86361B9A2F36856C4D52D395257B1EC0 /* NFXSettingsController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXSettingsController.swift; path = netfox/Core/NFXSettingsController.swift; sourceTree = ""; }; + 8AE7D444804601541EC9A23167B74E2F /* ZXKitWindow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZXKitWindow.swift; path = pod/ZXKitWindow.swift; sourceTree = ""; }; + 8BA607CF47F815EEC86750EC52267348 /* NFXListController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXListController.swift; path = netfox/Core/NFXListController.swift; sourceTree = ""; }; + 8BCDB60CA7D55B31201CB61D3766B363 /* NFXHelper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXHelper.swift; path = netfox/Core/NFXHelper.swift; sourceTree = ""; }; + 8BD54509775C53C3DFCE4998BC8E7F4B /* ConstraintMakerRelatable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerRelatable.swift; path = Source/ConstraintMakerRelatable.swift; sourceTree = ""; }; + 8C2B2D33B6F592D785A3B986182AE77E /* NFXHTTPModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXHTTPModel.swift; path = netfox/Core/NFXHTTPModel.swift; sourceTree = ""; }; 8F38D985BE628643645FFC19916D74FD /* Pods-netfox-zxkit-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-netfox-zxkit-acknowledgements.plist"; sourceTree = ""; }; - 90A6739DBD844E426AAD208C9C6CC4B9 /* NFXAuthenticationChallengeSender.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXAuthenticationChallengeSender.swift; path = netfox/Core/NFXAuthenticationChallengeSender.swift; sourceTree = ""; }; - 90E517CB0C858F05F65B6B68C1DC29F4 /* UIView+zx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+zx.swift"; path = "pod/extend/UIView+zx.swift"; sourceTree = ""; }; - 90F5954051188ED8A08773F4A960E643 /* Localizable.strings */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.strings; name = Localizable.strings; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; - 979486118B3E90C08386079D57962701 /* SnapKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SnapKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 98B453A213F0177FD4C7323CEB27348D /* ZXKitPluginCollectionViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZXKitPluginCollectionViewCell.swift; path = pod/ZXKitPluginCollectionViewCell.swift; sourceTree = ""; }; - 9C07C6EAB4EE3337B38E6798A5144831 /* netfox-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "netfox-dummy.m"; sourceTree = ""; }; - 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 9D9790D327DD39EC5EC35B07226A1882 /* ConstraintMakerExtendable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerExtendable.swift; path = Source/ConstraintMakerExtendable.swift; sourceTree = ""; }; - 9DD37AC7099FD253BA340743CE058962 /* SnapKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapKit.debug.xcconfig; sourceTree = ""; }; - A21E9B458794D1605480C502BC204B7C /* NFXDetailsController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXDetailsController.swift; path = netfox/Core/NFXDetailsController.swift; sourceTree = ""; }; - A23DCF37AC9733154D375FBF29711EC7 /* ConstraintMakerFinalizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerFinalizable.swift; path = Source/ConstraintMakerFinalizable.swift; sourceTree = ""; }; - A277E2235F9F575B5AD559F3136BA7B7 /* ConstraintLayoutGuide+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintLayoutGuide+Extensions.swift"; path = "Source/ConstraintLayoutGuide+Extensions.swift"; sourceTree = ""; }; - A2FA2DAF1DD47344089EE97CF55F3E97 /* NFXSettingsController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXSettingsController.swift; path = netfox/Core/NFXSettingsController.swift; sourceTree = ""; }; - A7B718F33851C7C95CE639443B2E888C /* ConstraintOffsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintOffsetTarget.swift; path = Source/ConstraintOffsetTarget.swift; sourceTree = ""; }; + 90D15609B4D2DFC00807BB2A986A7FB2 /* NFXSettingsController_iOS.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXSettingsController_iOS.swift; path = netfox/iOS/NFXSettingsController_iOS.swift; sourceTree = ""; }; + 979486118B3E90C08386079D57962701 /* SnapKit */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SnapKit; path = SnapKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9A1D8185746C8E05C93847D7E98935F9 /* ZXKitUtil+permission.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ZXKitUtil+permission.swift"; path = "pod/ZXKitUtil+permission.swift"; sourceTree = ""; }; + 9C36B3A842976C9DDB09EFDDB3C00E62 /* Typealiases.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Typealiases.swift; path = Source/Typealiases.swift; sourceTree = ""; }; + 9C693C0F0C78CBDA49E3BD885066D8F2 /* netfox-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "netfox-dummy.m"; sourceTree = ""; }; + 9C9DD3358AD7CF17C14E523E84A41614 /* ConstraintMakerFinalizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerFinalizable.swift; path = Source/ConstraintMakerFinalizable.swift; sourceTree = ""; }; + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 9FF0BA12C8F7D527B80A581CDDC381A1 /* ConstraintViewDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintViewDSL.swift; path = Source/ConstraintViewDSL.swift; sourceTree = ""; }; + A0AC01F48708A0DCAD7392E59857B75B /* ConstraintMakerEditable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerEditable.swift; path = Source/ConstraintMakerEditable.swift; sourceTree = ""; }; + A3589C54714129F349D9E8016169D792 /* ZXKitUtil.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZXKitUtil.swift; path = pod/ZXKitUtil.swift; sourceTree = ""; }; + A5E6FB3DF7AE08AD3134F6639FAE4E19 /* NFXGenericController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXGenericController.swift; path = netfox/Core/NFXGenericController.swift; sourceTree = ""; }; A95B25DE6C477B23C737B4D2D3383BAA /* Pods-netfox-zxkit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-netfox-zxkit.debug.xcconfig"; sourceTree = ""; }; - B13F38DE8B15A45F86770AA09880274B /* ConstraintViewDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintViewDSL.swift; path = Source/ConstraintViewDSL.swift; sourceTree = ""; }; - B18C060852812D3AA0A91A55B45BCC8A /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - B1F91BAAF2C23CE50AC59D35AB39F8CD /* UIImage+zx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIImage+zx.swift"; path = "pod/extend/UIImage+zx.swift"; sourceTree = ""; }; - B268886699E21D7E01CB730211D64579 /* ZXKitWindow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZXKitWindow.swift; path = pod/ZXKitWindow.swift; sourceTree = ""; }; - B28D6C006C1DBB8BD907A2006F73B6F9 /* ConstraintMakerRelatable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerRelatable.swift; path = Source/ConstraintMakerRelatable.swift; sourceTree = ""; }; - B2A54B567BAD761AFA8F1402B90C0A83 /* SnapKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SnapKit.modulemap; sourceTree = ""; }; - B462C8B2CB78AE609523A787505C2EB4 /* ZXKitCore.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ZXKitCore.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - B615DBF9D362C70992ECDC4737A4072E /* ZXKitUtil-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ZXKitUtil-umbrella.h"; sourceTree = ""; }; - BB37240DFEFF835C300876D573C4BD5E /* ConstraintMultiplierTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMultiplierTarget.swift; path = Source/ConstraintMultiplierTarget.swift; sourceTree = ""; }; + AB961DF2727F1D6903A532B7FD35414A /* ZXKitCore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ZXKitCore-prefix.pch"; sourceTree = ""; }; + AC352C422537522C265DFC3A3FA3F5EC /* ZXKitUtil+media.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ZXKitUtil+media.swift"; path = "pod/ZXKitUtil+media.swift"; sourceTree = ""; }; + AD7777FACA288E4856015624E46E9DA1 /* netfox-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "netfox-umbrella.h"; sourceTree = ""; }; + AD877CF223002004D4E3E387DEE7464C /* Date+zx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Date+zx.swift"; path = "pod/extend/Date+zx.swift"; sourceTree = ""; }; + AF81509E55F503038C4DF72E0A35DAB1 /* SnapKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-prefix.pch"; sourceTree = ""; }; + B0E3AA389F3A575B2F92984B7287348D /* ConstraintDirectionalInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDirectionalInsetTarget.swift; path = Source/ConstraintDirectionalInsetTarget.swift; sourceTree = ""; }; + B136B28DCB497B87BFECC4E45CE9FE35 /* NFXDetailsController_iOS.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXDetailsController_iOS.swift; path = netfox/iOS/NFXDetailsController_iOS.swift; sourceTree = ""; }; + B1A90BA8D9700CDDB0812B65B18BE5A9 /* netfox.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = netfox.release.xcconfig; sourceTree = ""; }; + B21B67E3E274B74FBA0B7A18EC588945 /* Localizable.strings */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.strings; name = Localizable.strings; path = en.lproj/Localizable.strings; sourceTree = ""; }; + B462C8B2CB78AE609523A787505C2EB4 /* ZXKitCore-ZXKitCore */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "ZXKitCore-ZXKitCore"; path = ZXKitCore.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + B5F277354776B49B5FDAAD49E8DEEA2B /* SnapKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-umbrella.h"; sourceTree = ""; }; + B8D0643A2E559B90A729B21EE8621C7E /* ZXKitCore.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ZXKitCore.debug.xcconfig; sourceTree = ""; }; BB501C722F1746B3F5A78D2964EB50A9 /* Pods-netfox-zxkit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-netfox-zxkit-umbrella.h"; sourceTree = ""; }; - BC21CCCF816B0B99A7D9743ED2CAD334 /* ConstraintAttributes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintAttributes.swift; path = Source/ConstraintAttributes.swift; sourceTree = ""; }; - BD4F36B54C7F6F3D49D1EBC77861EE12 /* NFXHelper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXHelper.swift; path = netfox/Core/NFXHelper.swift; sourceTree = ""; }; - BF1952EA0085A4CE36B4AE041BE60B82 /* netfox.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = netfox.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BF1952EA0085A4CE36B4AE041BE60B82 /* netfox */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = netfox; path = netfox.framework; sourceTree = BUILT_PRODUCTS_DIR; }; BF6E5831221D11DEE5D47155071601FB /* Pods-netfox-zxkit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-netfox-zxkit.modulemap"; sourceTree = ""; }; - BFF370A9A60E5F6CFAB2F880797E7316 /* LayoutConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraintItem.swift; path = Source/LayoutConstraintItem.swift; sourceTree = ""; }; - C2078D297A9F5EAF7FAED2D8F1A93568 /* ZXKitCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ZXKitCore-umbrella.h"; sourceTree = ""; }; - C29A59E1D5D738CBF768AF8104379E8C /* NFXHTTPModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXHTTPModel.swift; path = netfox/Core/NFXHTTPModel.swift; sourceTree = ""; }; - C345F3FC0C8D58D0C2C4D7279BD5BC68 /* ConstraintDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDSL.swift; path = Source/ConstraintDSL.swift; sourceTree = ""; }; - C4FC9043A027291150A2B828B6087044 /* Date+zx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Date+zx.swift"; path = "pod/extend/Date+zx.swift"; sourceTree = ""; }; - CA8A442AA73F487926B1241A9357D52F /* ConstraintMaker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMaker.swift; path = Source/ConstraintMaker.swift; sourceTree = ""; }; + BFF4FCDB3C9389C79A495D3051C8A2D5 /* ZXKitUtil+system.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ZXKitUtil+system.swift"; path = "pod/ZXKitUtil+system.swift"; sourceTree = ""; }; + C406CD9809A5E0CD49ABCB2FFF4EDDAB /* ConstraintLayoutGuide+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintLayoutGuide+Extensions.swift"; path = "Source/ConstraintLayoutGuide+Extensions.swift"; sourceTree = ""; }; + CBA6B191E598CE742A34A1D528692007 /* ZXKitCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ZXKitCore-dummy.m"; sourceTree = ""; }; CE0D1741E29B6A59B724C43908975932 /* Pods-netfox-zxkit-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-netfox-zxkit-frameworks.sh"; sourceTree = ""; }; - CF4FAD3CD8653D6C593C3D5652F2AD79 /* NFXRawBodyDetailsController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXRawBodyDetailsController.swift; path = netfox/Core/NFXRawBodyDetailsController.swift; sourceTree = ""; }; - D0850B03A86A9E80C62853B43871B403 /* ZXKitCore.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ZXKitCore.release.xcconfig; sourceTree = ""; }; - D64E5293874E3317A5AC4C6F639099EB /* Data+zx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+zx.swift"; path = "pod/extend/Data+zx.swift"; sourceTree = ""; }; - D730AF7770302DD229006655F8E5551C /* UILayoutSupport+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UILayoutSupport+Extensions.swift"; path = "Source/UILayoutSupport+Extensions.swift"; sourceTree = ""; }; + D0B324776D80F0DF6E2E520B25E5B298 /* ZXKitCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ZXKitCore-Info.plist"; sourceTree = ""; }; + D13431406326A5340226ADF5FA8BC5BD /* ConstraintMaker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMaker.swift; path = Source/ConstraintMaker.swift; sourceTree = ""; }; + D56A9189892886F6A93A4395B1063BDB /* netfox.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = netfox.debug.xcconfig; sourceTree = ""; }; + D66B9DB2C6E03A4C595C71ADFB7F5984 /* NFXStatisticsController_iOS.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXStatisticsController_iOS.swift; path = netfox/iOS/NFXStatisticsController_iOS.swift; sourceTree = ""; }; D9EB0A317A10F31E2920626E042626CC /* Pods-netfox-zxkit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-netfox-zxkit-dummy.m"; sourceTree = ""; }; - DA3D45C7DD153A3358E1350A6A699376 /* ConstraintPriority.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintPriority.swift; path = Source/ConstraintPriority.swift; sourceTree = ""; }; - DB035D05CE06F19D0496893FF7785098 /* NFXDetailsController_iOS.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXDetailsController_iOS.swift; path = netfox/iOS/NFXDetailsController_iOS.swift; sourceTree = ""; }; - DC0D2A38A9CC9E6DF3BA6A39923F2BED /* NFXStatisticsController_iOS.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXStatisticsController_iOS.swift; path = netfox/iOS/NFXStatisticsController_iOS.swift; sourceTree = ""; }; - DCCB327B50E8235C98D8616334278BA0 /* SnapKit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapKit.release.xcconfig; sourceTree = ""; }; - DD10A8E7D9DFAD89179750A7A8898410 /* ConstraintDescription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDescription.swift; path = Source/ConstraintDescription.swift; sourceTree = ""; }; - DD1ED79276EFC951D47AB15657A6370A /* ZXKitCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ZXKitCore-dummy.m"; sourceTree = ""; }; - DF99ECE4442A7A5AA91CDC1F0EAF153A /* NFXLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NFXLoader.h; path = netfox/Core/NFXLoader.h; sourceTree = ""; }; - DFBDC0389AFDC0C27FFCED5D6B6A7B78 /* ConstraintDirectionalInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDirectionalInsetTarget.swift; path = Source/ConstraintDirectionalInsetTarget.swift; sourceTree = ""; }; - DFC9312BF2E067710C55BACB13DCE5FF /* String+zx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+zx.swift"; path = "pod/extend/String+zx.swift"; sourceTree = ""; }; - E05C6C59F961FB5A61A355B566589E9D /* ZXKitUtil.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ZXKitUtil.modulemap; sourceTree = ""; }; - E4711F70FE37F1B4CFF332766048E001 /* ZXKitUtil.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ZXKitUtil.release.xcconfig; sourceTree = ""; }; - E7C78454B9DDD3DE23A68232ADE8428E /* Constraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Constraint.swift; path = Source/Constraint.swift; sourceTree = ""; }; - E84DF16F447056B4AE4548E4C39879D0 /* NFXInfoController_iOS.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXInfoController_iOS.swift; path = netfox/iOS/NFXInfoController_iOS.swift; sourceTree = ""; }; - E90B0832DAC692D48621203EF882CC31 /* ConstraintView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintView.swift; path = Source/ConstraintView.swift; sourceTree = ""; }; - EB5DD3217770C958FECF36198969350E /* ConstraintLayoutGuide.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuide.swift; path = Source/ConstraintLayoutGuide.swift; sourceTree = ""; }; - EC78F278CFB56AB2C019C9B79F1F218D /* NFXListController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXListController.swift; path = netfox/Core/NFXListController.swift; sourceTree = ""; }; + DAFA1E31EF185131894EA1D2BA38310C /* NFXImageBodyDetailsController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXImageBodyDetailsController.swift; path = netfox/Core/NFXImageBodyDetailsController.swift; sourceTree = ""; }; + DB831C07884BED3AACFA5925436F4549 /* NFXStatisticsController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXStatisticsController.swift; path = netfox/Core/NFXStatisticsController.swift; sourceTree = ""; }; + E0E373269BA00135B75FBAE50B9E8E1E /* NFXAuthenticationChallengeSender.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXAuthenticationChallengeSender.swift; path = netfox/Core/NFXAuthenticationChallengeSender.swift; sourceTree = ""; }; + E2F60C027DF181C69B2EDBFC850779F0 /* SnapKit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapKit.release.xcconfig; sourceTree = ""; }; + E483C5F6321A6726D03DDF67272F6541 /* ZXKitCore.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ZXKitCore.release.xcconfig; sourceTree = ""; }; + E4C8E4C45A6859A89F3A7C7BFEB85268 /* NFXHelper_iOS.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXHelper_iOS.swift; path = netfox/iOS/NFXHelper_iOS.swift; sourceTree = ""; }; + E9E39F447F65E47F1B526CDA2740EA07 /* NFXListController_iOS.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXListController_iOS.swift; path = netfox/iOS/NFXListController_iOS.swift; sourceTree = ""; }; + E9EC70902F23686F7C61C2A17FE7256E /* NFXProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NFXProtocol.swift; path = netfox/Core/NFXProtocol.swift; sourceTree = ""; }; + EA63B20B577C9D25E06E688092663229 /* ConstraintDescription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDescription.swift; path = Source/ConstraintDescription.swift; sourceTree = ""; }; + EAA3C7F6F249E14701C6AFAC99BD289B /* ZXKitUtil-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ZXKitUtil-Info.plist"; sourceTree = ""; }; EF7F4FD5A359F07F53C2673A9360C1EA /* Pods-netfox-zxkit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-netfox-zxkit-Info.plist"; sourceTree = ""; }; - F1544D5087E6CA0C88770F63911BC54C /* ZXKitCollectionViewHeaderView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZXKitCollectionViewHeaderView.swift; path = pod/ZXKitCollectionViewHeaderView.swift; sourceTree = ""; }; - F6769BBD30634D019F1F0F4E2B7B64D6 /* Localizable.strings */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.strings; name = Localizable.strings; path = en.lproj/Localizable.strings; sourceTree = ""; }; - F975E0F1948537323DD2CA732916D7BA /* ConstraintLayoutSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupport.swift; path = Source/ConstraintLayoutSupport.swift; sourceTree = ""; }; - F9F393D9CF6858ADF645AFAC42C7C17D /* ZXKitUtil+media.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ZXKitUtil+media.swift"; path = "pod/ZXKitUtil+media.swift"; sourceTree = ""; }; - FAD79813214CEFD599132D47F4DF6997 /* ZXKitUtil-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ZXKitUtil-prefix.pch"; sourceTree = ""; }; - FB29F6B7C420C8F2D61EDC7D0B0F77D0 /* UIColor+zx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIColor+zx.swift"; path = "pod/extend/UIColor+zx.swift"; sourceTree = ""; }; - FE317F70EC695CAC8021D35AD09F4509 /* ZXKitUtil.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ZXKitUtil.debug.xcconfig; sourceTree = ""; }; + F06DF47FB33227F97999366656488EBB /* ConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintItem.swift; path = Source/ConstraintItem.swift; sourceTree = ""; }; + F2446388055797858A6C02D3CB184D60 /* ConstraintRelation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelation.swift; path = Source/ConstraintRelation.swift; sourceTree = ""; }; + F785BAF49D8DDC2A583F69A651F740CA /* ZXKitNameSpace.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZXKitNameSpace.swift; path = pod/extend/ZXKitNameSpace.swift; sourceTree = ""; }; + F7EF73FB8383D38B9C216D8604A046A6 /* ZXKitCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ZXKitCore-umbrella.h"; sourceTree = ""; }; + F7F3E7C3EA1C6581B272A8C4DB023540 /* UIImage+zx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIImage+zx.swift"; path = "pod/extend/UIImage+zx.swift"; sourceTree = ""; }; + F8FC92E2918F4F875538314634664345 /* ConstraintOffsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintOffsetTarget.swift; path = Source/ConstraintOffsetTarget.swift; sourceTree = ""; }; + F9295A5E145EC863BBE5C1B44C0CA68E /* Localizable.strings */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.strings; name = Localizable.strings; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; + FD95988E5BD55B47D9E5F33D422F2C1D /* LayoutConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraintItem.swift; path = Source/LayoutConstraintItem.swift; sourceTree = ""; }; + FEF2233542C69AAB3273253D659181D2 /* ConstraintConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConfig.swift; path = Source/ConstraintConfig.swift; sourceTree = ""; }; + FF0D0DA689A0CDC1ABF5DB20E67CAAF2 /* Debugging.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Debugging.swift; path = Source/Debugging.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 3C8B1704CC97EF12D3409771318C6433 /* Frameworks */ = { + 08B8C6D76A979D7834644088521908F9 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7813A09B8F9242BBF63900D45EF15054 /* Foundation.framework in Frameworks */, + 1A30B64DC2707675EBB6A8AA35177F2B /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 4F4484307C0FA80E3DFF1E51A286E3F8 /* Frameworks */ = { + 23A10129A089826722DA3C72AB9660E5 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 68FCCB6B0F8FB19436C9363B94012758 /* Frameworks */ = { + 5103A0C004E78246B9C76DF2426B3108 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BD5EE149150AA9EFB2402CF06D39F257 /* Foundation.framework in Frameworks */, + 03A3C6313E9B3F808CE58B8E59C60A8B /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 73DC17047AF80EB5286FDE658924DD97 /* Frameworks */ = { + 9B30433E568C40FCE04D5188A9715448 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4BE239D23BE78D4174C2EF3D447D8CB2 /* Foundation.framework in Frameworks */, + CCA22C9F421C9E8C13009947816D8C82 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C6F7C3703EA87BF6E07C3D2999521ACE /* Frameworks */ = { + C010E9C405F742D4FA34250F42848BB7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 454F28B51036B10A0EE942B957679CE1 /* Foundation.framework in Frameworks */, - 21409832FC254ACC88EFFA9C0C8064EA /* SnapKit.framework in Frameworks */, - DD349661044F23A1E8BC342C5736E9C1 /* ZXKitUtil.framework in Frameworks */, + 2EBA956236E27833ECE117D50A9AF432 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - FC3F5FC9E495C54C57FCF34381AD4C27 /* Frameworks */ = { + C2CF429957CFD43269E33D6909288802 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D40FB0606F91BDD8D41443F698E6AFD7 /* Foundation.framework in Frameworks */, + CC74C8DD11E72BCA7DB2704B3E771C54 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0701BFD6996A4FA60587C02E855BA890 /* Support Files */ = { - isa = PBXGroup; - children = ( - E05C6C59F961FB5A61A355B566589E9D /* ZXKitUtil.modulemap */, - 450836B70EBCA1392B4EFD18C19E733A /* ZXKitUtil-dummy.m */, - 26C08CA26D76CAEB9E0BCE851FADFBB5 /* ZXKitUtil-Info.plist */, - FAD79813214CEFD599132D47F4DF6997 /* ZXKitUtil-prefix.pch */, - B615DBF9D362C70992ECDC4737A4072E /* ZXKitUtil-umbrella.h */, - FE317F70EC695CAC8021D35AD09F4509 /* ZXKitUtil.debug.xcconfig */, - E4711F70FE37F1B4CFF332766048E001 /* ZXKitUtil.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/ZXKitUtil"; - sourceTree = ""; - }; 18FA90B3EB2DE21BCD4C4674787E7F6E /* Pods-netfox-zxkit */ = { isa = PBXGroup; children = ( @@ -386,294 +361,308 @@ path = "Target Support Files/Pods-netfox-zxkit"; sourceTree = ""; }; - 1AC03F8EDEA333B57397A0CF9D080A22 /* Support Files */ = { + 29619FCEECD9FF67ACA01A28E3A70FDB /* Support Files */ = { isa = PBXGroup; children = ( - 87BBC6969E0F7348764517C79A84B548 /* netfox.modulemap */, - 9C07C6EAB4EE3337B38E6798A5144831 /* netfox-dummy.m */, - 680CCF5A86223E73265BF2EB0D80BBD5 /* netfox-Info.plist */, - 4591B6E6A0580D96C33A583EA4EF5444 /* netfox-prefix.pch */, - 4CB0B54856B823606AB66970310EA9AB /* netfox-umbrella.h */, - 165D458949074B642577380D89222466 /* netfox.debug.xcconfig */, - 262FAF0E10152563BC9E0E2B89C3118B /* netfox.release.xcconfig */, + 06CC22C85CA6084D765C59FFB10112FA /* netfox.modulemap */, + 9C693C0F0C78CBDA49E3BD885066D8F2 /* netfox-dummy.m */, + 521051A8125394ABD4C991A1D1E62C35 /* netfox-Info.plist */, + 0912BC17B1B35C9A88A5E789D986D8E6 /* netfox-prefix.pch */, + AD7777FACA288E4856015624E46E9DA1 /* netfox-umbrella.h */, + D56A9189892886F6A93A4395B1063BDB /* netfox.debug.xcconfig */, + B1A90BA8D9700CDDB0812B65B18BE5A9 /* netfox.release.xcconfig */, ); name = "Support Files"; path = "../Target Support Files/netfox"; sourceTree = ""; }; - 1DB4284CE76DB82D60568F8703B1606F /* Products */ = { + 2F6821F91FE4A630E2429CF0A0E7F237 /* Products */ = { isa = PBXGroup; children = ( - BF1952EA0085A4CE36B4AE041BE60B82 /* netfox.framework */, - 0D341A77CD427A872FC7E8F5CDD9E3C6 /* Pods_netfox_zxkit.framework */, - 979486118B3E90C08386079D57962701 /* SnapKit.framework */, - B462C8B2CB78AE609523A787505C2EB4 /* ZXKitCore.bundle */, - 19B4CCFF6F020B12DD03BF84C2EC2D54 /* ZXKitCore.framework */, - 2DD86A35A440A3D03F4341584B93EF64 /* ZXKitUtil.framework */, + BF1952EA0085A4CE36B4AE041BE60B82 /* netfox */, + 0D341A77CD427A872FC7E8F5CDD9E3C6 /* Pods-netfox-zxkit */, + 979486118B3E90C08386079D57962701 /* SnapKit */, + 19B4CCFF6F020B12DD03BF84C2EC2D54 /* ZXKitCore */, + B462C8B2CB78AE609523A787505C2EB4 /* ZXKitCore-ZXKitCore */, + 2DD86A35A440A3D03F4341584B93EF64 /* ZXKitUtil */, ); name = Products; sourceTree = ""; }; - 369767D63B305CC6657C77870C0519A0 /* Pods */ = { + 3A0AE15514CADDBFB0F2D39CE50F3299 /* Support Files */ = { isa = PBXGroup; children = ( - E87D89002EE30B1C239CDC32A36B297E /* netfox */, - A3E0724C3B1CDBBEDF2AF1F0F855E96C /* SnapKit */, - FEE222638B089E486BCC255DCA560530 /* ZXKitCore */, - 5792397B0A0E63256219CC75F085C57C /* ZXKitUtil */, + 756095FBDB3FD0B1FD54DC3716D1BB2A /* ZXKitUtil.modulemap */, + 0274C2A2963EBAC071475CE955FC7853 /* ZXKitUtil-dummy.m */, + EAA3C7F6F249E14701C6AFAC99BD289B /* ZXKitUtil-Info.plist */, + 7AE9B47CBED4FD5A97088EF633000E1B /* ZXKitUtil-prefix.pch */, + 4750445FE9EE5B100C48B870C585DDDF /* ZXKitUtil-umbrella.h */, + 8338D8DD4FF9F8C22C5284182A33201B /* ZXKitUtil.debug.xcconfig */, + 34506009AAF4B86F2AC5EC16D67BF77B /* ZXKitUtil.release.xcconfig */, ); - name = Pods; + name = "Support Files"; + path = "../Target Support Files/ZXKitUtil"; sourceTree = ""; }; - 3A3B8EA0000B6CBE1CB1D84F594131F0 /* iOS */ = { + 3A34C6C0C9EA9B45B9386C3C35BAC721 /* netfox */ = { isa = PBXGroup; children = ( - B18C060852812D3AA0A91A55B45BCC8A /* Foundation.framework */, + 336BB82BB1BF79BA4F89C07345CB8534 /* NFX.swift */, + 8261145D2CE767E7F9A279C529E8C50E /* NFXAssets.swift */, + E0E373269BA00135B75FBAE50B9E8E1E /* NFXAuthenticationChallengeSender.swift */, + 63FBF8AA1D0862355B76C2657FFB0E30 /* NFXConstants.swift */, + 41933C450C66DB0F1B38793634361262 /* NFXDetailsController.swift */, + B136B28DCB497B87BFECC4E45CE9FE35 /* NFXDetailsController_iOS.swift */, + 0A41A91480BBC72F44B1DAB86B9D2EAF /* NFXGenericBodyDetailsController.swift */, + A5E6FB3DF7AE08AD3134F6639FAE4E19 /* NFXGenericController.swift */, + 8BCDB60CA7D55B31201CB61D3766B363 /* NFXHelper.swift */, + E4C8E4C45A6859A89F3A7C7BFEB85268 /* NFXHelper_iOS.swift */, + 8C2B2D33B6F592D785A3B986182AE77E /* NFXHTTPModel.swift */, + 11CBF55F58FEE2F7F9FDC8702A912CCD /* NFXHTTPModelManager.swift */, + DAFA1E31EF185131894EA1D2BA38310C /* NFXImageBodyDetailsController.swift */, + 14CF5BCF6059A059E565AB6782EEA871 /* NFXInfoController.swift */, + 352D61A0034B355906B5A861F5F6804D /* NFXInfoController_iOS.swift */, + 1278896BE15041AD8A819E1723316CF8 /* NFXListCell_iOS.swift */, + 8BA607CF47F815EEC86750EC52267348 /* NFXListController.swift */, + E9E39F447F65E47F1B526CDA2740EA07 /* NFXListController_iOS.swift */, + E9EC70902F23686F7C61C2A17FE7256E /* NFXProtocol.swift */, + 743A1576BBC51858C42B6A0073570447 /* NFXRawBodyDetailsController.swift */, + 86361B9A2F36856C4D52D395257B1EC0 /* NFXSettingsController.swift */, + 90D15609B4D2DFC00807BB2A986A7FB2 /* NFXSettingsController_iOS.swift */, + DB831C07884BED3AACFA5925436F4549 /* NFXStatisticsController.swift */, + D66B9DB2C6E03A4C595C71ADFB7F5984 /* NFXStatisticsController_iOS.swift */, + 7924D683E656D0795243710947BFDF22 /* NFXURLDetailsControllerViewController.swift */, + 1530EE5D697EED61BEE58D64D543C4B0 /* NFXWindowController.swift */, + 29619FCEECD9FF67ACA01A28E3A70FDB /* Support Files */, ); - name = iOS; + name = netfox; + path = netfox; sourceTree = ""; }; - 413F0D8172D36BA01683A0A4256E6D76 /* core */ = { + 578452D2E740E91742655AC8F1636D1F /* iOS */ = { isa = PBXGroup; children = ( - 3CED72882ACE336898E9F42009D79022 /* Localizable.strings */, - 57D4DBB8C81A0A72D8086E149FB29E9C /* ZXKit.swift */, - F1544D5087E6CA0C88770F63911BC54C /* ZXKitCollectionViewHeaderView.swift */, - 76E12A1052C7ED3EF0755D604B3041BC /* ZXKitFloatWindow.swift */, - 98B453A213F0177FD4C7323CEB27348D /* ZXKitPluginCollectionViewCell.swift */, - 4FE897E8C7E75A70BB808ECC413E7655 /* ZXKitPluginProtocol.swift */, - B268886699E21D7E01CB730211D64579 /* ZXKitWindow.swift */, - C1493BF772BC14B9A26872BD9235CD05 /* Resources */, + 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */, ); - name = core; + name = iOS; sourceTree = ""; }; - 4351105C80FB5DF0188F66AF40C680DC /* Frameworks */ = { + 8D836B0241B5E040E30DB3AD0937653F /* ZXKitUtil */ = { isa = PBXGroup; children = ( - 753EF59389BB1B8D29B58C5DC3EDB22D /* SnapKit.framework */, - 11B3CF7AB85BD0C25899D32C3BD83AAE /* ZXKitUtil.framework */, - 3A3B8EA0000B6CBE1CB1D84F594131F0 /* iOS */, + 9D25D73E7781B401A3338CF98D0D295F /* core */, + 3A0AE15514CADDBFB0F2D39CE50F3299 /* Support Files */, ); - name = Frameworks; + name = ZXKitUtil; + path = ZXKitUtil; sourceTree = ""; }; - 576E8A2F74F9ADD06CA1494EE081B748 /* Support Files */ = { + 92D60074E62B7AE0E54ED59133B91434 /* Targets Support Files */ = { isa = PBXGroup; children = ( - B2A54B567BAD761AFA8F1402B90C0A83 /* SnapKit.modulemap */, - 6CF2FA138AD088298DE6C4CBE90F865B /* SnapKit-dummy.m */, - 81AF2596D152AF5B6A99B1F6A5FC025E /* SnapKit-Info.plist */, - 64B3985C9A3DE6B0CA5C26A9708862B8 /* SnapKit-prefix.pch */, - 6C6FC7DEE21CEBD810BE6A92E07BCC60 /* SnapKit-umbrella.h */, - 9DD37AC7099FD253BA340743CE058962 /* SnapKit.debug.xcconfig */, - DCCB327B50E8235C98D8616334278BA0 /* SnapKit.release.xcconfig */, + 18FA90B3EB2DE21BCD4C4674787E7F6E /* Pods-netfox-zxkit */, ); - name = "Support Files"; - path = "../Target Support Files/SnapKit"; + name = "Targets Support Files"; sourceTree = ""; }; - 5792397B0A0E63256219CC75F085C57C /* ZXKitUtil */ = { + 9D25D73E7781B401A3338CF98D0D295F /* core */ = { isa = PBXGroup; children = ( - D4EF8A6D9EC747B1E0767B584380B17C /* core */, - 0701BFD6996A4FA60587C02E855BA890 /* Support Files */, + 08D8EAC3DA62BA9C0EEC24C058B79B8E /* Data+zx.swift */, + AD877CF223002004D4E3E387DEE7464C /* Date+zx.swift */, + 7BD6C16D9274371C0483351F1B37ECDD /* String+zx.swift */, + 31E7F21E2CDB8792C344D146C1E36C4B /* UIColor+zx.swift */, + F7F3E7C3EA1C6581B272A8C4DB023540 /* UIImage+zx.swift */, + 23B58BA6717CAF8B009186A2F89A035B /* UIView+zx.swift */, + F785BAF49D8DDC2A583F69A651F740CA /* ZXKitNameSpace.swift */, + A3589C54714129F349D9E8016169D792 /* ZXKitUtil.swift */, + 8372AD483F72E3EFE923F1CC5C63D077 /* ZXKitUtil+file.swift */, + AC352C422537522C265DFC3A3FA3F5EC /* ZXKitUtil+media.swift */, + 9A1D8185746C8E05C93847D7E98935F9 /* ZXKitUtil+permission.swift */, + BFF4FCDB3C9389C79A495D3051C8A2D5 /* ZXKitUtil+system.swift */, + 7EE92A49DE1AC3870DBA0FBA6AE9395F /* ZXKitUtil+UI.swift */, ); - path = ZXKitUtil; + name = core; sourceTree = ""; }; - 92D60074E62B7AE0E54ED59133B91434 /* Targets Support Files */ = { + 9F621AE81110621E8CEE3600F090AA7F /* SnapKit */ = { isa = PBXGroup; children = ( - 18FA90B3EB2DE21BCD4C4674787E7F6E /* Pods-netfox-zxkit */, + 4E3CF1A8E384E4821193D4970C95F383 /* Constraint.swift */, + 4B87AB1416C7A9F430D5D553B85B4EEF /* ConstraintAttributes.swift */, + FEF2233542C69AAB3273253D659181D2 /* ConstraintConfig.swift */, + 7E718A03C284610B107D349672DFE4D8 /* ConstraintConstantTarget.swift */, + EA63B20B577C9D25E06E688092663229 /* ConstraintDescription.swift */, + 76BEA802D0E1CC7C01444BFC8C4CF167 /* ConstraintDirectionalInsets.swift */, + B0E3AA389F3A575B2F92984B7287348D /* ConstraintDirectionalInsetTarget.swift */, + 782F87A0E0282B06C6A5717328695E27 /* ConstraintDSL.swift */, + 4798ECA375D0E2AB582C4B3D9B6D9DFF /* ConstraintInsets.swift */, + 67E13CDAA5E4924FBC7E5B45B412DC6C /* ConstraintInsetTarget.swift */, + F06DF47FB33227F97999366656488EBB /* ConstraintItem.swift */, + 45427C92FB16DC63710A2CEC3455B31A /* ConstraintLayoutGuide.swift */, + C406CD9809A5E0CD49ABCB2FFF4EDDAB /* ConstraintLayoutGuide+Extensions.swift */, + 64D3701903B8A00628621B89D4F74B8A /* ConstraintLayoutGuideDSL.swift */, + 5286C6C4C9DA466E06398B7FCC19A54F /* ConstraintLayoutSupport.swift */, + 458B8DE3C86254B2D2ACEB00B1ACA06F /* ConstraintLayoutSupportDSL.swift */, + D13431406326A5340226ADF5FA8BC5BD /* ConstraintMaker.swift */, + A0AC01F48708A0DCAD7392E59857B75B /* ConstraintMakerEditable.swift */, + 455EA80E0B78242D6A85685D9091B5FD /* ConstraintMakerExtendable.swift */, + 9C9DD3358AD7CF17C14E523E84A41614 /* ConstraintMakerFinalizable.swift */, + 5CFAA5F0DA8439D4AEAE502AE9585CB6 /* ConstraintMakerPriortizable.swift */, + 8BD54509775C53C3DFCE4998BC8E7F4B /* ConstraintMakerRelatable.swift */, + 754833B4C64058F87562E93A101AAB00 /* ConstraintMultiplierTarget.swift */, + F8FC92E2918F4F875538314634664345 /* ConstraintOffsetTarget.swift */, + 2BB684D26724990474575FB70BE02E79 /* ConstraintPriority.swift */, + 42ACA346E055FD7467D49EFF442369D3 /* ConstraintPriorityTarget.swift */, + 46FBF1AA0058E8E9522E506BC928CD94 /* ConstraintRelatableTarget.swift */, + F2446388055797858A6C02D3CB184D60 /* ConstraintRelation.swift */, + 43A6286EC98D5A52BCF1E98D95F843EF /* ConstraintView.swift */, + 65F46016DBEAD3D8749BDAD47E3523DF /* ConstraintView+Extensions.swift */, + 9FF0BA12C8F7D527B80A581CDDC381A1 /* ConstraintViewDSL.swift */, + FF0D0DA689A0CDC1ABF5DB20E67CAAF2 /* Debugging.swift */, + 33F3934C78493AA0BA88581284F0AD05 /* LayoutConstraint.swift */, + FD95988E5BD55B47D9E5F33D422F2C1D /* LayoutConstraintItem.swift */, + 9C36B3A842976C9DDB09EFDDB3C00E62 /* Typealiases.swift */, + 7974E94CB3492637D6759459B6640057 /* UILayoutSupport+Extensions.swift */, + BA2F716090C14A701855BBBA067C8AAB /* Support Files */, ); - name = "Targets Support Files"; + name = SnapKit; + path = SnapKit; sourceTree = ""; }; - A3E0724C3B1CDBBEDF2AF1F0F855E96C /* SnapKit */ = { + ADE034105DF1613DE63BEEC533B90590 /* Resources */ = { isa = PBXGroup; children = ( - E7C78454B9DDD3DE23A68232ADE8428E /* Constraint.swift */, - BC21CCCF816B0B99A7D9743ED2CAD334 /* ConstraintAttributes.swift */, - 4564B57AE4EFD7CD3BCB9C18FD7FD849 /* ConstraintConfig.swift */, - 0AE33883C83C7D6103F7EB06DCE328AD /* ConstraintConstantTarget.swift */, - DD10A8E7D9DFAD89179750A7A8898410 /* ConstraintDescription.swift */, - 5BBB7FB44E361242BC52EE9E50F0100A /* ConstraintDirectionalInsets.swift */, - DFBDC0389AFDC0C27FFCED5D6B6A7B78 /* ConstraintDirectionalInsetTarget.swift */, - C345F3FC0C8D58D0C2C4D7279BD5BC68 /* ConstraintDSL.swift */, - 2A30208EA1F96FE6B6A3DFFFB1C020D1 /* ConstraintInsets.swift */, - 5D2A95317E94E18EB57E940E6B7DA4BD /* ConstraintInsetTarget.swift */, - 32DFBF496F95EDF92690672E9175A315 /* ConstraintItem.swift */, - EB5DD3217770C958FECF36198969350E /* ConstraintLayoutGuide.swift */, - A277E2235F9F575B5AD559F3136BA7B7 /* ConstraintLayoutGuide+Extensions.swift */, - 278223B2383AA6562B20494D39070732 /* ConstraintLayoutGuideDSL.swift */, - F975E0F1948537323DD2CA732916D7BA /* ConstraintLayoutSupport.swift */, - 8B3C76FFD714D3E6F89161D68ACC802F /* ConstraintLayoutSupportDSL.swift */, - CA8A442AA73F487926B1241A9357D52F /* ConstraintMaker.swift */, - 73121D2A939AFC2822BFC49196705524 /* ConstraintMakerEditable.swift */, - 9D9790D327DD39EC5EC35B07226A1882 /* ConstraintMakerExtendable.swift */, - A23DCF37AC9733154D375FBF29711EC7 /* ConstraintMakerFinalizable.swift */, - 7340F3BEDB120837081A40CED0FAF488 /* ConstraintMakerPriortizable.swift */, - B28D6C006C1DBB8BD907A2006F73B6F9 /* ConstraintMakerRelatable.swift */, - BB37240DFEFF835C300876D573C4BD5E /* ConstraintMultiplierTarget.swift */, - A7B718F33851C7C95CE639443B2E888C /* ConstraintOffsetTarget.swift */, - DA3D45C7DD153A3358E1350A6A699376 /* ConstraintPriority.swift */, - 315F25FFBF5307D43B427489E471C781 /* ConstraintPriorityTarget.swift */, - 208D2C82AFD76FE79CB039CA16246374 /* ConstraintRelatableTarget.swift */, - 3115CF8C0720449D94F93C74E6FD35B7 /* ConstraintRelation.swift */, - E90B0832DAC692D48621203EF882CC31 /* ConstraintView.swift */, - 1030AE88F38B61D29F1612C5BDF60FB4 /* ConstraintView+Extensions.swift */, - B13F38DE8B15A45F86770AA09880274B /* ConstraintViewDSL.swift */, - 43E3F8BA84F338B9FA469A4CFEC33A0D /* Debugging.swift */, - 8AAAC80C6677AFF5196F94BFF11EBF6B /* LayoutConstraint.swift */, - BFF370A9A60E5F6CFAB2F880797E7316 /* LayoutConstraintItem.swift */, - 2194B707C1ED5B1C5F1724A4ACBE1D8F /* Typealiases.swift */, - D730AF7770302DD229006655F8E5551C /* UILayoutSupport+Extensions.swift */, - 576E8A2F74F9ADD06CA1494EE081B748 /* Support Files */, ); - path = SnapKit; + name = Resources; sourceTree = ""; }; - C1493BF772BC14B9A26872BD9235CD05 /* Resources */ = { + B4303F80FF8C607EDEECDD0262552E9C /* Support Files */ = { isa = PBXGroup; children = ( + 1BB2E68A8D99910824FC93D3175C1B6C /* ResourceBundle-ZXKitCore-ZXKitCore-Info.plist */, + 1B5BDA8A7E121171A98681D319180B26 /* ZXKitCore.modulemap */, + CBA6B191E598CE742A34A1D528692007 /* ZXKitCore-dummy.m */, + D0B324776D80F0DF6E2E520B25E5B298 /* ZXKitCore-Info.plist */, + AB961DF2727F1D6903A532B7FD35414A /* ZXKitCore-prefix.pch */, + F7EF73FB8383D38B9C216D8604A046A6 /* ZXKitCore-umbrella.h */, + B8D0643A2E559B90A729B21EE8621C7E /* ZXKitCore.debug.xcconfig */, + E483C5F6321A6726D03DDF67272F6541 /* ZXKitCore.release.xcconfig */, ); - name = Resources; + name = "Support Files"; + path = "../Target Support Files/ZXKitCore"; sourceTree = ""; }; - CC9BD8C0B5FC1A720D5D955AEB9D00FE /* Support Files */ = { + BA2F716090C14A701855BBBA067C8AAB /* Support Files */ = { isa = PBXGroup; children = ( - 60079A7BF365A483F686146A67E7E1AA /* ResourceBundle-ZXKitCore-ZXKitCore-Info.plist */, - 81F21440AE7DA4C3ACD6DC5D7DAF59EF /* ZXKitCore.modulemap */, - DD1ED79276EFC951D47AB15657A6370A /* ZXKitCore-dummy.m */, - 343A3A9C82C1A91023E0068CB2C6555D /* ZXKitCore-Info.plist */, - 25C5185AD20E55BDFE5DA1AA83EB21BA /* ZXKitCore-prefix.pch */, - C2078D297A9F5EAF7FAED2D8F1A93568 /* ZXKitCore-umbrella.h */, - 62EAF1C753CB6AC78727857C4111EC95 /* ZXKitCore.debug.xcconfig */, - D0850B03A86A9E80C62853B43871B403 /* ZXKitCore.release.xcconfig */, + 54322A48177658A9B582961DA2AF778C /* SnapKit.modulemap */, + 77B03756ACCEF9FD526E691B0B54A4A5 /* SnapKit-dummy.m */, + 0AE648049FEE95B7E990698787216C5D /* SnapKit-Info.plist */, + AF81509E55F503038C4DF72E0A35DAB1 /* SnapKit-prefix.pch */, + B5F277354776B49B5FDAAD49E8DEEA2B /* SnapKit-umbrella.h */, + 597ED1D6F6D0266E437700E72D4D6A4B /* SnapKit.debug.xcconfig */, + E2F60C027DF181C69B2EDBFC850779F0 /* SnapKit.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/ZXKitCore"; + path = "../Target Support Files/SnapKit"; sourceTree = ""; }; CF1408CF629C7361332E53B88F7BD30C = { isa = PBXGroup; children = ( 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, - 4351105C80FB5DF0188F66AF40C680DC /* Frameworks */, - 369767D63B305CC6657C77870C0519A0 /* Pods */, - 1DB4284CE76DB82D60568F8703B1606F /* Products */, + D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */, + D6E62796586FD43D34F0580F5C34FB7B /* Pods */, + 2F6821F91FE4A630E2429CF0A0E7F237 /* Products */, 92D60074E62B7AE0E54ED59133B91434 /* Targets Support Files */, ); sourceTree = ""; }; - D4EF8A6D9EC747B1E0767B584380B17C /* core */ = { + D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */ = { isa = PBXGroup; children = ( - D64E5293874E3317A5AC4C6F639099EB /* Data+zx.swift */, - C4FC9043A027291150A2B828B6087044 /* Date+zx.swift */, - DFC9312BF2E067710C55BACB13DCE5FF /* String+zx.swift */, - FB29F6B7C420C8F2D61EDC7D0B0F77D0 /* UIColor+zx.swift */, - B1F91BAAF2C23CE50AC59D35AB39F8CD /* UIImage+zx.swift */, - 90E517CB0C858F05F65B6B68C1DC29F4 /* UIView+zx.swift */, - 02AD7400EC8B885EFC6E75504685AA57 /* ZXKitNameSpace.swift */, - 377BD67454568412F7E95BB5662B7772 /* ZXKitUtil.swift */, - 400515BFB1F4CB6CFAF578FB829AB5E9 /* ZXKitUtil+file.swift */, - F9F393D9CF6858ADF645AFAC42C7C17D /* ZXKitUtil+media.swift */, - 3BFAA3765007FC59E3B33744CE92390F /* ZXKitUtil+permission.swift */, - 59190723A965FE4904CE82B7D5519E0D /* ZXKitUtil+system.swift */, - 390641870E3F7B9FF933D4AC365BF2DA /* ZXKitUtil+UI.swift */, + 578452D2E740E91742655AC8F1636D1F /* iOS */, + ); + name = Frameworks; + sourceTree = ""; + }; + D349B5D65C5ABBE96C24C9A972012049 /* core */ = { + isa = PBXGroup; + children = ( + 5AE81FD00E24031DC780A4C171810194 /* Localizable.strings */, + 2DD708713816DF64D93298D29A332A3A /* ZXKit.swift */, + 43F89DC5C24A95641CB5D47D03336F65 /* ZXKitCollectionViewHeaderView.swift */, + 7688C6414E89C1BDE593364CF6CCB00B /* ZXKitFloatWindow.swift */, + 0702CDAA1C3BCF1DC98F1E3EAE5A9AF7 /* ZXKitPluginCollectionViewCell.swift */, + 28ACD3FE197F391EAB54639C79D1DBAC /* ZXKitPluginProtocol.swift */, + 8AE7D444804601541EC9A23167B74E2F /* ZXKitWindow.swift */, + ADE034105DF1613DE63BEEC533B90590 /* Resources */, ); name = core; sourceTree = ""; }; - E87D89002EE30B1C239CDC32A36B297E /* netfox */ = { + D6E62796586FD43D34F0580F5C34FB7B /* Pods */ = { isa = PBXGroup; children = ( - 5D3214786B9008D4CC1AF2111191AC14 /* NFX.swift */, - 3534EBD4ECB370BEF5C408B7E3CF57C1 /* NFXAssets.swift */, - 90A6739DBD844E426AAD208C9C6CC4B9 /* NFXAuthenticationChallengeSender.swift */, - 554A569B1BFBDD3BE1A9DF60EEAF7793 /* NFXConstants.swift */, - A21E9B458794D1605480C502BC204B7C /* NFXDetailsController.swift */, - DB035D05CE06F19D0496893FF7785098 /* NFXDetailsController_iOS.swift */, - 26F0AF40C8D77DB89CD1FD3AEBCB6FD3 /* NFXGenericBodyDetailsController.swift */, - 7E19AEFD99009D08E27EDA994DA2FEBB /* NFXGenericController.swift */, - BD4F36B54C7F6F3D49D1EBC77861EE12 /* NFXHelper.swift */, - 295C4EC30BA83CCF5DE2F536CFEAC4E9 /* NFXHelper_iOS.swift */, - C29A59E1D5D738CBF768AF8104379E8C /* NFXHTTPModel.swift */, - 5BE914D2C3F695F011266A4DBF83DEC3 /* NFXHTTPModelManager.swift */, - 187B2F1859FAC1A981712BB342712C39 /* NFXImageBodyDetailsController.swift */, - 2EE2330C67C1F1F3B33E386B7FAC5F51 /* NFXInfoController.swift */, - E84DF16F447056B4AE4548E4C39879D0 /* NFXInfoController_iOS.swift */, - 1DAFD3AB72F9DBFF29632C4D321AD2F9 /* NFXListCell_iOS.swift */, - EC78F278CFB56AB2C019C9B79F1F218D /* NFXListController.swift */, - 403218CB74051B4E79724A3E6831EC24 /* NFXListController_iOS.swift */, - DF99ECE4442A7A5AA91CDC1F0EAF153A /* NFXLoader.h */, - 6BFD19277863D5F8AB00F3F53A5D74FE /* NFXLoader.m */, - 6F37A18729AE4948C91DDDD93437F84F /* NFXProtocol.swift */, - CF4FAD3CD8653D6C593C3D5652F2AD79 /* NFXRawBodyDetailsController.swift */, - A2FA2DAF1DD47344089EE97CF55F3E97 /* NFXSettingsController.swift */, - 6183A6CC87959A99BB8A97BD1AC355EB /* NFXSettingsController_iOS.swift */, - 4FA113A64339FD2C333D8B9BB501BC32 /* NFXStatisticsController.swift */, - DC0D2A38A9CC9E6DF3BA6A39923F2BED /* NFXStatisticsController_iOS.swift */, - 5E00D9F22AA96FF9D212E167B5846EC4 /* NFXURLDetailsControllerViewController.swift */, - 164AC8AD55BAFC1AD8659ACBA11AB3FA /* NFXWindowController.swift */, - 1AC03F8EDEA333B57397A0CF9D080A22 /* Support Files */, + 3A34C6C0C9EA9B45B9386C3C35BAC721 /* netfox */, + 9F621AE81110621E8CEE3600F090AA7F /* SnapKit */, + F5D836CEE8107BEEF81945777B1A8C14 /* ZXKitCore */, + 8D836B0241B5E040E30DB3AD0937653F /* ZXKitUtil */, ); - path = netfox; + name = Pods; sourceTree = ""; }; - FEE222638B089E486BCC255DCA560530 /* ZXKitCore */ = { + F5D836CEE8107BEEF81945777B1A8C14 /* ZXKitCore */ = { isa = PBXGroup; children = ( - 413F0D8172D36BA01683A0A4256E6D76 /* core */, - CC9BD8C0B5FC1A720D5D955AEB9D00FE /* Support Files */, + D349B5D65C5ABBE96C24C9A972012049 /* core */, + B4303F80FF8C607EDEECDD0262552E9C /* Support Files */, ); + name = ZXKitCore; path = ZXKitCore; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 11BDBF1AA3D833803DE32CCE487093CE /* Headers */ = { + 3B921547E999920F44EBD58F955423CC /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 7905407C27F35EBC33BA7751E68EBCD2 /* netfox-umbrella.h in Headers */, - 12EA824D7BB93529DF764CC730F1A1AA /* NFXLoader.h in Headers */, + A4467357581E8345DD348683CC4111AF /* SnapKit-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 7DFCF5F12AEEED0500986DBC9BF76170 /* Headers */ = { + 65291404637D07A5ED182E253AD0F838 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - A66ED57B365A35434C5BAF4B990819B7 /* SnapKit-umbrella.h in Headers */, + 4204E981117688B0E01EEA0F1FE87DAE /* netfox-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 9AF893C5AE7397305E951D98FFFC7D5E /* Headers */ = { + 68D04E986A0EAA109CCA21FFEA1BD4FE /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 4516100C50B168B31CE852B9A5BAD7FD /* ZXKitUtil-umbrella.h in Headers */, + C87EBB15A003FA72F40D37B6F5518990 /* ZXKitCore-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - A34B0B44A3FA58CD7DA5A83A81B42053 /* Headers */ = { + 959C3B585EFF7F3C96F3EBAEFF08B629 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 2E24EB68D973DDF34473AA589996AF46 /* Pods-netfox-zxkit-umbrella.h in Headers */, + 4FCFA47F67EF81A296E13C70D38B77D2 /* ZXKitUtil-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - E58343DC23E2106E9D6D5F608772A19D /* Headers */ = { + E74A65CAE705FD87F633D3A61B391996 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - EC1A50CFBABA6C547F796673BD3B33D7 /* ZXKitCore-umbrella.h in Headers */, + 924D84FFE882F897B2DC78FF115DE145 /* Pods-netfox-zxkit-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -682,12 +671,12 @@ /* Begin PBXNativeTarget section */ 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */ = { isa = PBXNativeTarget; - buildConfigurationList = 7F8CE4DC18DBEA01587212F09727DB3D /* Build configuration list for PBXNativeTarget "SnapKit" */; + buildConfigurationList = 4949A940CD53B7E293859B71C91C88F3 /* Build configuration list for PBXNativeTarget "SnapKit" */; buildPhases = ( - 7DFCF5F12AEEED0500986DBC9BF76170 /* Headers */, - 89222AF845A30312C284F407BA48B98F /* Sources */, - 3C8B1704CC97EF12D3409771318C6433 /* Frameworks */, - 9C691CAA90D9565F2EFF5EF823D8A80C /* Resources */, + 3B921547E999920F44EBD58F955423CC /* Headers */, + 06A02EF810C9B8F84BA558BBDB9E5D6E /* Sources */, + 9B30433E568C40FCE04D5188A9715448 /* Frameworks */, + DBFBC99C6F5D9B1D57CC9D1C6E9209EB /* Resources */, ); buildRules = ( ); @@ -695,38 +684,38 @@ ); name = SnapKit; productName = SnapKit; - productReference = 979486118B3E90C08386079D57962701 /* SnapKit.framework */; + productReference = 979486118B3E90C08386079D57962701 /* SnapKit */; productType = "com.apple.product-type.framework"; }; 23CC5B423FA68CF6FCACD593F1FEDCF6 /* ZXKitCore */ = { isa = PBXNativeTarget; - buildConfigurationList = 0DB90D36757B34061DB3989D55141430 /* Build configuration list for PBXNativeTarget "ZXKitCore" */; + buildConfigurationList = 75D6BC64CE04CD06A0F1ECC871CFE769 /* Build configuration list for PBXNativeTarget "ZXKitCore" */; buildPhases = ( - E58343DC23E2106E9D6D5F608772A19D /* Headers */, - 6C811901F5A20E20C49D8DAF921FAEC2 /* Sources */, - C6F7C3703EA87BF6E07C3D2999521ACE /* Frameworks */, - 468B0AF31321B8C77DC464225EF66E31 /* Resources */, + 68D04E986A0EAA109CCA21FFEA1BD4FE /* Headers */, + CC74D952F87994350D751973D80BD656 /* Sources */, + C010E9C405F742D4FA34250F42848BB7 /* Frameworks */, + BD09869B861404E4AD72D9244C92F810 /* Resources */, ); buildRules = ( ); dependencies = ( - A39FB2FF091060DE1729443863CDD837 /* PBXTargetDependency */, - 489E0D62B459CB399EE05F63435587CA /* PBXTargetDependency */, - C0C4FC5ECC8FA7B3CA5CE832893A9E72 /* PBXTargetDependency */, + BB94F70E9D5F3A5B398D79F2694A3BC2 /* PBXTargetDependency */, + 946881095D04EA5D5250E49D2DE627D5 /* PBXTargetDependency */, + C82DCC7D64504035CF51109629A9BD24 /* PBXTargetDependency */, ); name = ZXKitCore; productName = ZXKitCore; - productReference = 19B4CCFF6F020B12DD03BF84C2EC2D54 /* ZXKitCore.framework */; + productReference = 19B4CCFF6F020B12DD03BF84C2EC2D54 /* ZXKitCore */; productType = "com.apple.product-type.framework"; }; 33426EFE1931E100B59ABF41FD14377D /* netfox */ = { isa = PBXNativeTarget; - buildConfigurationList = 7892CEEC13781101CA728B98D607D0FD /* Build configuration list for PBXNativeTarget "netfox" */; + buildConfigurationList = 14A279E0E52265F9827871C7B385FECF /* Build configuration list for PBXNativeTarget "netfox" */; buildPhases = ( - 11BDBF1AA3D833803DE32CCE487093CE /* Headers */, - DE013FE49A1CD5BDCA94B65EA36CF913 /* Sources */, - 73DC17047AF80EB5286FDE658924DD97 /* Frameworks */, - F4354C4E1A10C8049F85BD382B0AD9DD /* Resources */, + 65291404637D07A5ED182E253AD0F838 /* Headers */, + 1C26D5BA4615AB19B5D967FD06A2D1DA /* Sources */, + 5103A0C004E78246B9C76DF2426B3108 /* Frameworks */, + 1A6389CB6438FF76B4F60C2F69618033 /* Resources */, ); buildRules = ( ); @@ -734,17 +723,17 @@ ); name = netfox; productName = netfox; - productReference = BF1952EA0085A4CE36B4AE041BE60B82 /* netfox.framework */; + productReference = BF1952EA0085A4CE36B4AE041BE60B82 /* netfox */; productType = "com.apple.product-type.framework"; }; 4B09DDD2A3083E311C984F301582897A /* ZXKitUtil */ = { isa = PBXNativeTarget; - buildConfigurationList = F3C2833E7433075D3D0B799F85E3B666 /* Build configuration list for PBXNativeTarget "ZXKitUtil" */; + buildConfigurationList = A8D6E5B8E89662285A5D7678CAE7DCB8 /* Build configuration list for PBXNativeTarget "ZXKitUtil" */; buildPhases = ( - 9AF893C5AE7397305E951D98FFFC7D5E /* Headers */, - BF0CFC6BA84F1EF9D7C0C3A0E9A3365B /* Sources */, - 68FCCB6B0F8FB19436C9363B94012758 /* Frameworks */, - 07FFDF3D74EC106DC99F2EDA7CD9CF9B /* Resources */, + 959C3B585EFF7F3C96F3EBAEFF08B629 /* Headers */, + 80B96DE89B95DBA5D1914912E59F4924 /* Sources */, + C2CF429957CFD43269E33D6909288802 /* Frameworks */, + A6BE793E2B33F42E257E90FC28F47100 /* Resources */, ); buildRules = ( ); @@ -752,46 +741,46 @@ ); name = ZXKitUtil; productName = ZXKitUtil; - productReference = 2DD86A35A440A3D03F4341584B93EF64 /* ZXKitUtil.framework */; + productReference = 2DD86A35A440A3D03F4341584B93EF64 /* ZXKitUtil */; productType = "com.apple.product-type.framework"; }; 51EF85AAF6BA8A8BFEA992FFA83149F2 /* Pods-netfox-zxkit */ = { isa = PBXNativeTarget; - buildConfigurationList = E08B5A71FD65E991A465974D18832202 /* Build configuration list for PBXNativeTarget "Pods-netfox-zxkit" */; + buildConfigurationList = 20D200B8B282B84E7D7DC7218EFA8B78 /* Build configuration list for PBXNativeTarget "Pods-netfox-zxkit" */; buildPhases = ( - A34B0B44A3FA58CD7DA5A83A81B42053 /* Headers */, - EEDA5B573EDD0CB9733390DDF38BCC51 /* Sources */, - FC3F5FC9E495C54C57FCF34381AD4C27 /* Frameworks */, - 6A47CFB864C8691E4D1701B287354142 /* Resources */, + E74A65CAE705FD87F633D3A61B391996 /* Headers */, + 7146269B0145C1E35B0C279EF1AC6515 /* Sources */, + 08B8C6D76A979D7834644088521908F9 /* Frameworks */, + E15A0C945B93F9D1855FFBB8276CF648 /* Resources */, ); buildRules = ( ); dependencies = ( - F812A7B80D63AE525C1C8DD6F7BF5652 /* PBXTargetDependency */, - 084A54E0216E2A70CAF6F7D4D7C88A98 /* PBXTargetDependency */, - 60A24FAAE040CAA3B995A7653577ECED /* PBXTargetDependency */, - E38846342123F64CE86EE3E06F08C3CD /* PBXTargetDependency */, + 07A6AFE82F53D3E477A1A80DB846C238 /* PBXTargetDependency */, + 887C88EB4E31D222F42FC504D607910F /* PBXTargetDependency */, + 20A122789AB320E2DF60F5F828A6C354 /* PBXTargetDependency */, + 198310EFA124F03EDD7FBD4FAC0A9C87 /* PBXTargetDependency */, ); name = "Pods-netfox-zxkit"; - productName = "Pods-netfox-zxkit"; - productReference = 0D341A77CD427A872FC7E8F5CDD9E3C6 /* Pods_netfox_zxkit.framework */; + productName = Pods_netfox_zxkit; + productReference = 0D341A77CD427A872FC7E8F5CDD9E3C6 /* Pods-netfox-zxkit */; productType = "com.apple.product-type.framework"; }; 6535447A49D8AE5353316E9D3CA44597 /* ZXKitCore-ZXKitCore */ = { isa = PBXNativeTarget; - buildConfigurationList = 43DCA4A53BDBEF3E85627AD742C52BC4 /* Build configuration list for PBXNativeTarget "ZXKitCore-ZXKitCore" */; + buildConfigurationList = 9EB8B83DF384811E7EECDBEBAACEEBFA /* Build configuration list for PBXNativeTarget "ZXKitCore-ZXKitCore" */; buildPhases = ( - 7BF0AD03FCCF15D865AAE5697F9341C6 /* Sources */, - 4F4484307C0FA80E3DFF1E51A286E3F8 /* Frameworks */, - DA19ECB5A180C00FE7747532DBF942AC /* Resources */, + 6BC1A1413B719477E4DDEAC82EFD903D /* Sources */, + 23A10129A089826722DA3C72AB9660E5 /* Frameworks */, + 8F5431664DE01D575EA52093B217040F /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "ZXKitCore-ZXKitCore"; - productName = "ZXKitCore-ZXKitCore"; - productReference = B462C8B2CB78AE609523A787505C2EB4 /* ZXKitCore.bundle */; + productName = ZXKitCore; + productReference = B462C8B2CB78AE609523A787505C2EB4 /* ZXKitCore-ZXKitCore */; productType = "com.apple.product-type.bundle"; }; /* End PBXNativeTarget section */ @@ -800,20 +789,20 @@ BFDFE7DC352907FC980B868725387E98 /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 1100; - LastUpgradeCheck = 1100; + LastSwiftUpdateCheck = 1240; + LastUpgradeCheck = 1240; }; buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; compatibilityVersion = "Xcode 10.0"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( - en, Base, + en, "zh-Hans", ); mainGroup = CF1408CF629C7361332E53B88F7BD30C; - productRefGroup = 1DB4284CE76DB82D60568F8703B1606F /* Products */; + productRefGroup = 2F6821F91FE4A630E2429CF0A0E7F237 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( @@ -828,44 +817,44 @@ /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 07FFDF3D74EC106DC99F2EDA7CD9CF9B /* Resources */ = { + 1A6389CB6438FF76B4F60C2F69618033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 468B0AF31321B8C77DC464225EF66E31 /* Resources */ = { + 8F5431664DE01D575EA52093B217040F /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 254C8E20B6582C0EB3BD7F0AA0843BFF /* ZXKitCore.bundle in Resources */, + BE2A85CDC220639F0FD59C626175335A /* Localizable.strings in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 6A47CFB864C8691E4D1701B287354142 /* Resources */ = { + A6BE793E2B33F42E257E90FC28F47100 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 9C691CAA90D9565F2EFF5EF823D8A80C /* Resources */ = { + BD09869B861404E4AD72D9244C92F810 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 6427FAB86AAD055250B3AAA1068F1DA3 /* ZXKitCore-ZXKitCore in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - DA19ECB5A180C00FE7747532DBF942AC /* Resources */ = { + DBFBC99C6F5D9B1D57CC9D1C6E9209EB /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 1D76824C5852CAEE74416DD6ECDBF717 /* Localizable.strings in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - F4354C4E1A10C8049F85BD382B0AD9DD /* Resources */ = { + E15A0C945B93F9D1855FFBB8276CF648 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -875,190 +864,189 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 6C811901F5A20E20C49D8DAF921FAEC2 /* Sources */ = { + 06A02EF810C9B8F84BA558BBDB9E5D6E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 0AE42422D52C3733A6BBA38CF8E38DD0 /* Localizable.strings in Sources */, - EFA2FC826E040C827F46E93C63631CAD /* Localizable.strings in Sources */, - 710BDC837E8F1FDA9E2E2C773F8CFA69 /* ZXKit.swift in Sources */, - CCD94D4F222C54235AA89EB5B0E7CE14 /* ZXKitCollectionViewHeaderView.swift in Sources */, - D3CFBF5873E3901E010E5D02F4EABFF2 /* ZXKitCore-dummy.m in Sources */, - 6C0D413D5E458B86E896C228D91F6BBF /* ZXKitFloatWindow.swift in Sources */, - CF5CEAE5762FC7ACA006966307E5B9BE /* ZXKitPluginCollectionViewCell.swift in Sources */, - 49CFA45370B1B4E850E143D3FB6AEC2C /* ZXKitPluginProtocol.swift in Sources */, - DFD61B16B75DFF64BA4A8E03397DB3AA /* ZXKitWindow.swift in Sources */, + 51A4A1046676D304410544EB56732A49 /* Constraint.swift in Sources */, + 7580FAAB1BDA52F5A969E5571D1A5973 /* ConstraintAttributes.swift in Sources */, + B543FD108C1C6AF6129CB4991553218B /* ConstraintConfig.swift in Sources */, + C61D3BC32A28A405C934C00039AD2583 /* ConstraintConstantTarget.swift in Sources */, + 8FD9CD608C4EAAFDE6AC7B8B9EF0FF5E /* ConstraintDescription.swift in Sources */, + A0F754C88A64972A40A9008B0AD52109 /* ConstraintDirectionalInsets.swift in Sources */, + 7764AA5F6BBFC6ECE43959923DD007D3 /* ConstraintDirectionalInsetTarget.swift in Sources */, + 90FD5AE525E138A473723FD79AF73273 /* ConstraintDSL.swift in Sources */, + 8C6546C1EF4F153DF3795CC6FE189E5B /* ConstraintInsets.swift in Sources */, + BEBF920FEB959B46A76BAADF22E5CD15 /* ConstraintInsetTarget.swift in Sources */, + BD333CDBCF5D2FD55920336FC271DF33 /* ConstraintItem.swift in Sources */, + EE6C364198A763EBBF49237035D86439 /* ConstraintLayoutGuide.swift in Sources */, + 3DEDFA52B3A196F6D3E1F0937617628A /* ConstraintLayoutGuide+Extensions.swift in Sources */, + 8449EB1DFD43E222D687D5A8D2088D2D /* ConstraintLayoutGuideDSL.swift in Sources */, + 3B60C02F6E42FD06B128473E00A94224 /* ConstraintLayoutSupport.swift in Sources */, + 274DF0E2BF04F6F4F9F1E70CF513A4F2 /* ConstraintLayoutSupportDSL.swift in Sources */, + CB194156C900B767B0160AF72EDF354D /* ConstraintMaker.swift in Sources */, + A53D3AF15CE8D348306EF11619C5D166 /* ConstraintMakerEditable.swift in Sources */, + 825062025906CE93C5D124E1FD9A811E /* ConstraintMakerExtendable.swift in Sources */, + D13D417B236E736EEAE7217B5CE3EC5C /* ConstraintMakerFinalizable.swift in Sources */, + F2C817C166B2DE613222C41015A586C9 /* ConstraintMakerPriortizable.swift in Sources */, + CB8E4BF0D710970BE2CB4C87ED1043E4 /* ConstraintMakerRelatable.swift in Sources */, + 17BE0F4E51B0FB968125F1A520607FD8 /* ConstraintMultiplierTarget.swift in Sources */, + 62F299B4704A7C95FB5866C6CDE2E2FD /* ConstraintOffsetTarget.swift in Sources */, + F343BA4E457FFDB0165492AECAEF0BCC /* ConstraintPriority.swift in Sources */, + E36244E8BF4AC941E82DAF16DDF4BBC2 /* ConstraintPriorityTarget.swift in Sources */, + E8EAADACF3BAE33BDECBC7214EAE9CD2 /* ConstraintRelatableTarget.swift in Sources */, + D59C2826AD288ECFF576B2AFA312716C /* ConstraintRelation.swift in Sources */, + F24D06C23DAB2F52A30C886A7A8177C7 /* ConstraintView.swift in Sources */, + 1E9EEA756F2774D73347F1660EEFE3E9 /* ConstraintView+Extensions.swift in Sources */, + 5E8BA529DFB4529006967624044FEC1C /* ConstraintViewDSL.swift in Sources */, + F10586462FB54CEA169A1A7A469A926D /* Debugging.swift in Sources */, + 43863B6D6A0E47B6648BB7B469736EDD /* LayoutConstraint.swift in Sources */, + 4CA13A0527BC57DE2C54A0F3B5ED8652 /* LayoutConstraintItem.swift in Sources */, + 968B4874A9F12D67C8B901136C9C8157 /* SnapKit-dummy.m in Sources */, + 3CD5FAFC746A76D73C3F501734199DFF /* Typealiases.swift in Sources */, + 144DA93A55A598F5197F10C729FBDD69 /* UILayoutSupport+Extensions.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 7BF0AD03FCCF15D865AAE5697F9341C6 /* Sources */ = { + 1C26D5BA4615AB19B5D967FD06A2D1DA /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + EC4867F2D2D1D8ACB4818BD39B3DC6A8 /* netfox-dummy.m in Sources */, + E87444DCDB53BC7FA5BEB0316E97E34F /* NFX.swift in Sources */, + 48481D11F19F6F4CAC62800613A49F27 /* NFXAssets.swift in Sources */, + 5815697429E348EC76907DC972098DB0 /* NFXAuthenticationChallengeSender.swift in Sources */, + 58D07C314EB9F7838A8CB3562B9767C2 /* NFXConstants.swift in Sources */, + 9334E518B0185C5F6235BC843B7F8A27 /* NFXDetailsController.swift in Sources */, + D477756D27AD85A8C3C5F169BE218B76 /* NFXDetailsController_iOS.swift in Sources */, + 3574700CB4882DD22F2B6E45E071E01D /* NFXGenericBodyDetailsController.swift in Sources */, + B88E75160457951F03BA84516B672B05 /* NFXGenericController.swift in Sources */, + D21459EB156B909DAB65DC64B8256C3B /* NFXHelper.swift in Sources */, + 26A29E1970F9BB29B3C8DF42C7892BD9 /* NFXHelper_iOS.swift in Sources */, + 8338498A37A0E552818CB72FA9EDB996 /* NFXHTTPModel.swift in Sources */, + B85218C188A0342EC73ECEFD1CB43F8D /* NFXHTTPModelManager.swift in Sources */, + D7EC5FF54630FE4D546D546E22304CD0 /* NFXImageBodyDetailsController.swift in Sources */, + 55BCF3E6AF495AED09D1E4B856D7E38B /* NFXInfoController.swift in Sources */, + 31212EE57AA39C409AF4C6D3AD801B1A /* NFXInfoController_iOS.swift in Sources */, + 761C78E0E1256C52E8A351F9428FA902 /* NFXListCell_iOS.swift in Sources */, + B05C6FC0332B40E5092FFA97827C76C9 /* NFXListController.swift in Sources */, + BCEA9245D650D5153C9A0FD9F18DD4AC /* NFXListController_iOS.swift in Sources */, + 74229E1865DD1520975E777775B80BB1 /* NFXProtocol.swift in Sources */, + 691193D4939AF2BE59C3782E1D0BC81A /* NFXRawBodyDetailsController.swift in Sources */, + B529041E4C15D801791215F8E311FF47 /* NFXSettingsController.swift in Sources */, + 2CEC993669E1B2A01DEDE716B8287C68 /* NFXSettingsController_iOS.swift in Sources */, + 128CE09CD1B5963378F625E4C96C42FF /* NFXStatisticsController.swift in Sources */, + FA7EFA6CCA3D70907B15CCE8E3A4FBEE /* NFXStatisticsController_iOS.swift in Sources */, + 7358B9EBDDC8C1A425EB5702739B4DA2 /* NFXURLDetailsControllerViewController.swift in Sources */, + 8AB42E959E8F7F2B75841D73A507BAD6 /* NFXWindowController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 89222AF845A30312C284F407BA48B98F /* Sources */ = { + 6BC1A1413B719477E4DDEAC82EFD903D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 3BFC243AB9BD579969F0D5756560BCAA /* Constraint.swift in Sources */, - 2A1BBBC87AC2367BD14610A9D10D285E /* ConstraintAttributes.swift in Sources */, - 9B09968922C73D50040C6EEF57890D6E /* ConstraintConfig.swift in Sources */, - 5854DF509E8A016B6235793D04083035 /* ConstraintConstantTarget.swift in Sources */, - B599696DFEF6B2A5ECF528F4E5BB1846 /* ConstraintDescription.swift in Sources */, - AC35C9341C4BB156BB26FDD237EE3721 /* ConstraintDirectionalInsets.swift in Sources */, - 71DE9DC2FA583526AB4D1FD7F00C099C /* ConstraintDirectionalInsetTarget.swift in Sources */, - 8277256ADEC3C4DCF79957D1CA681A9A /* ConstraintDSL.swift in Sources */, - 21AB1101BBE4D28D74ED4EDF0D59025A /* ConstraintInsets.swift in Sources */, - 2C06F2E972444D359754D21AC46BFFE2 /* ConstraintInsetTarget.swift in Sources */, - 99B5296A5EDECE0557B9DA53D9E19CA1 /* ConstraintItem.swift in Sources */, - 1AFB1E9136716C0B61D6C700FF1E60FD /* ConstraintLayoutGuide+Extensions.swift in Sources */, - A270CD9EC3C541FE86E65AEDCEF500CF /* ConstraintLayoutGuide.swift in Sources */, - 77C9889055A3B32EA13A9616824DB0ED /* ConstraintLayoutGuideDSL.swift in Sources */, - 57B1876F2BE4168E5BFDB63D8CC849A0 /* ConstraintLayoutSupport.swift in Sources */, - 01C550A53C9E2047C83F8E85BBB558E6 /* ConstraintLayoutSupportDSL.swift in Sources */, - 51CD5887014967E77E58F5A163996454 /* ConstraintMaker.swift in Sources */, - 7C1702076F3A31D8D2D45A4A9F09B266 /* ConstraintMakerEditable.swift in Sources */, - 69CCBEEDFCA6D743D80026568D961919 /* ConstraintMakerExtendable.swift in Sources */, - C412F27D75AFC0DF0F0289DBB270931C /* ConstraintMakerFinalizable.swift in Sources */, - EE909C7C786140109051BC9562EEC7C8 /* ConstraintMakerPriortizable.swift in Sources */, - 75E146C12D1287228A0B493E87CDE31F /* ConstraintMakerRelatable.swift in Sources */, - D4697DC40F3B059E4A0867838CA1814E /* ConstraintMultiplierTarget.swift in Sources */, - 8705BBF0D428BF0AE1B554A377ECC540 /* ConstraintOffsetTarget.swift in Sources */, - 232B2F922E972D9F43D2EE15ACECE734 /* ConstraintPriority.swift in Sources */, - E8F2429683B3015CBD39CE883770BCA7 /* ConstraintPriorityTarget.swift in Sources */, - 69E3A06BBDFDC7D06A9D4BDC4E895E73 /* ConstraintRelatableTarget.swift in Sources */, - CE62FEABA57B2B53EABF8C7DCCC6B2C4 /* ConstraintRelation.swift in Sources */, - 3E5285F4F36EAD77ECABBFB7F36BB1BB /* ConstraintView+Extensions.swift in Sources */, - BECA67DFB5E0984DFAEFCB775C31972E /* ConstraintView.swift in Sources */, - EB1726F5E0D0EEBA20E4528B1E37A8FA /* ConstraintViewDSL.swift in Sources */, - B780B272106411CBE258BB60FFC45410 /* Debugging.swift in Sources */, - 039EAFE7935113805F3FC21BF1B7C9D5 /* LayoutConstraint.swift in Sources */, - E9A970BC24EA15832F248EA020072746 /* LayoutConstraintItem.swift in Sources */, - 4C7A676DAE95EEAC3787A75349F0862D /* SnapKit-dummy.m in Sources */, - 1956E392D500F3CD899D39A5F805736D /* Typealiases.swift in Sources */, - 6E0EB9E7FAAEDBB7A73ECF3095F69C4A /* UILayoutSupport+Extensions.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - BF0CFC6BA84F1EF9D7C0C3A0E9A3365B /* Sources */ = { + 7146269B0145C1E35B0C279EF1AC6515 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D7264EFCBC291DF35F15FAB37E1B6ADB /* Data+zx.swift in Sources */, - 9594ACCBB886BB70FFD48D031ED7ADA7 /* Date+zx.swift in Sources */, - 42F7AFDAE23EC0C6A8D4CE02F8C27CEB /* String+zx.swift in Sources */, - C1213ECA02979B6241766454167B0316 /* UIColor+zx.swift in Sources */, - E139C31C679563B0A5D7AB45C50BE1A9 /* UIImage+zx.swift in Sources */, - 85BDDE45509ACF47CFAB997C0149B620 /* UIView+zx.swift in Sources */, - F8BCC61D569F64AB86507C36A08D1BA3 /* ZXKitNameSpace.swift in Sources */, - FB24D2C574A4FB49D47CC23ED08D353F /* ZXKitUtil+file.swift in Sources */, - FB4C26CAD2850814732032D6480A2267 /* ZXKitUtil+media.swift in Sources */, - DEA0B271BAAF43E9A79356B55B76BC1D /* ZXKitUtil+permission.swift in Sources */, - 810F2009624E076ACF40052628980980 /* ZXKitUtil+system.swift in Sources */, - C80F60BC21BCA5693F4EDDB8A5A889F8 /* ZXKitUtil+UI.swift in Sources */, - 36C662CBC52DECF60A7C44B42B490FFD /* ZXKitUtil-dummy.m in Sources */, - FAE6A3BC88795DD3612F210F1E021E62 /* ZXKitUtil.swift in Sources */, + F5E88E33B66D6530B1C6C9E929C68595 /* Pods-netfox-zxkit-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - DE013FE49A1CD5BDCA94B65EA36CF913 /* Sources */ = { + 80B96DE89B95DBA5D1914912E59F4924 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - A21BC68E8BFE3C87E3FAD1D150F1076E /* netfox-dummy.m in Sources */, - CF100FF8BBDDF8937FF6F612C37EA20A /* NFX.swift in Sources */, - 940C5B6904718C38E5DE1A79411B55CD /* NFXAssets.swift in Sources */, - B1AC2E3388C825F95A911BC017C0EEDA /* NFXAuthenticationChallengeSender.swift in Sources */, - 6DBA5C3250DA0A10F3836AFFEB62E4D2 /* NFXConstants.swift in Sources */, - 7F2BB0C28C46D48AE36D2C88A06ED634 /* NFXDetailsController.swift in Sources */, - 7D93DBEFC712D37DDC5E6B43EE4CBEB9 /* NFXDetailsController_iOS.swift in Sources */, - 6B0B56EEA4A07332CBFDE6ECAAA9432F /* NFXGenericBodyDetailsController.swift in Sources */, - 7B06DB58DED9FFA56356EA721CBA3C6F /* NFXGenericController.swift in Sources */, - 29270C7B84244D3D64D944AE7329B368 /* NFXHelper.swift in Sources */, - DCF65FAF1D61BEF90078B45B87068A9A /* NFXHelper_iOS.swift in Sources */, - BEFA9B4474547E4A78BEA13812187BF0 /* NFXHTTPModel.swift in Sources */, - 44F990AD8069E624447997A4DEA21583 /* NFXHTTPModelManager.swift in Sources */, - 8B03A1BDC53BCF824A5BFB2B8005C897 /* NFXImageBodyDetailsController.swift in Sources */, - 0951830FDA7053E1A4C11B1B6142B39D /* NFXInfoController.swift in Sources */, - 613142E0E3AADC9FE2C81551AD78D4AC /* NFXInfoController_iOS.swift in Sources */, - 3816866BA7E0280765C0CF191A175683 /* NFXListCell_iOS.swift in Sources */, - A5196398D5690357C218B4CEA194C79F /* NFXListController.swift in Sources */, - CD80EA633F58BA32818CC6E0A7F0E3A0 /* NFXListController_iOS.swift in Sources */, - B4A88E097EB42B2A4AD9029D8934974F /* NFXLoader.m in Sources */, - 37B1F67C8521F3516D605A7D151E91A4 /* NFXProtocol.swift in Sources */, - 903BE2F69609C9E1FD2041CBAC5745BE /* NFXRawBodyDetailsController.swift in Sources */, - 09F20300429DCB4C2F17A9B1BA2DC03A /* NFXSettingsController.swift in Sources */, - 989CB0A8AF3D2EB7FB54BCEA528B20BA /* NFXSettingsController_iOS.swift in Sources */, - D8DAE9E46FDE304CF021B99AB1B8EE25 /* NFXStatisticsController.swift in Sources */, - F976942E7D4D2F373180B301E4FD31A2 /* NFXStatisticsController_iOS.swift in Sources */, - B94E51E6BB91A3EDFFD7FC393190ED4A /* NFXURLDetailsControllerViewController.swift in Sources */, - 8E939619FCBAC321106C9A094DE95A48 /* NFXWindowController.swift in Sources */, + 6758A2A271E34D7E1388132C5D77B053 /* Data+zx.swift in Sources */, + 789C4C0254597F302EE2A8CD591DFD92 /* Date+zx.swift in Sources */, + 34F3AE11E7B776D13119B3B773A9A695 /* String+zx.swift in Sources */, + 915772E184E67D0D98E2951F7D63FAE0 /* UIColor+zx.swift in Sources */, + 9B02620470A827EBBF81C4BDD9B49218 /* UIImage+zx.swift in Sources */, + 29C0A13CDFB6C06D01BF30E9461C56EC /* UIView+zx.swift in Sources */, + 25F2502AB3332EEBBABBA84F8AE91497 /* ZXKitNameSpace.swift in Sources */, + 7420C989D8335B236142E0E7EE9677CC /* ZXKitUtil.swift in Sources */, + 5EE19D11EC2B845FBD4824C4AC22CAE0 /* ZXKitUtil+file.swift in Sources */, + 440C26312EC06978D78ADDE59A2165B8 /* ZXKitUtil+media.swift in Sources */, + 9F5FDED37CD24A190F4F58A2999179DF /* ZXKitUtil+permission.swift in Sources */, + 8328BF4D90D98651921F1518F3BD0EA4 /* ZXKitUtil+system.swift in Sources */, + BC3E233426CD2291B903EB4C3262EAA1 /* ZXKitUtil+UI.swift in Sources */, + EFE0AC8B55B6BF754DCC7C3747ACD481 /* ZXKitUtil-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - EEDA5B573EDD0CB9733390DDF38BCC51 /* Sources */ = { + CC74D952F87994350D751973D80BD656 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - C538F92EDD5D104F8D8D3512CF22ED6C /* Pods-netfox-zxkit-dummy.m in Sources */, + 6BD2F1D189566DDC6ED95C1F6857C9C5 /* Localizable.strings in Sources */, + AF805773B122FABF5737C4A1A3731779 /* Localizable.strings in Sources */, + 08351D5F16E7FCEDADFE44FDB6A48F2A /* ZXKit.swift in Sources */, + A58A6F7C912F16944059473C8E6E2128 /* ZXKitCollectionViewHeaderView.swift in Sources */, + 72C62EBC46C4E21D0B94059D440832E7 /* ZXKitCore-dummy.m in Sources */, + A765C743DF5507090C4388457DF4B7C6 /* ZXKitFloatWindow.swift in Sources */, + 0D8A5C7D89BE153AAD91A4984F17ACED /* ZXKitPluginCollectionViewCell.swift in Sources */, + A906F9C6CE62FC269ECD62C8EC41C033 /* ZXKitPluginProtocol.swift in Sources */, + A78DEBED2C64EF9631725BAE4BEE3244 /* ZXKitWindow.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 084A54E0216E2A70CAF6F7D4D7C88A98 /* PBXTargetDependency */ = { + 07A6AFE82F53D3E477A1A80DB846C238 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = ZXKitCore; - target = 23CC5B423FA68CF6FCACD593F1FEDCF6 /* ZXKitCore */; - targetProxy = A0694E8F2B471429E786284D31718808 /* PBXContainerItemProxy */; + name = SnapKit; + target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */; + targetProxy = 0BA6785FA142EDF6D0674CBB1B20B7B5 /* PBXContainerItemProxy */; }; - 489E0D62B459CB399EE05F63435587CA /* PBXTargetDependency */ = { + 198310EFA124F03EDD7FBD4FAC0A9C87 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "ZXKitCore-ZXKitCore"; - target = 6535447A49D8AE5353316E9D3CA44597 /* ZXKitCore-ZXKitCore */; - targetProxy = A6EDC7F8576E574E283F580590D888CA /* PBXContainerItemProxy */; + name = netfox; + target = 33426EFE1931E100B59ABF41FD14377D /* netfox */; + targetProxy = FAC14BCAC4A12F819B25D438C576B303 /* PBXContainerItemProxy */; }; - 60A24FAAE040CAA3B995A7653577ECED /* PBXTargetDependency */ = { + 20A122789AB320E2DF60F5F828A6C354 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = ZXKitUtil; target = 4B09DDD2A3083E311C984F301582897A /* ZXKitUtil */; - targetProxy = 6612165D5D5E45226195DD0D3E5DC133 /* PBXContainerItemProxy */; + targetProxy = F1FE910FAAC766BBB84ADF1414968C2A /* PBXContainerItemProxy */; }; - A39FB2FF091060DE1729443863CDD837 /* PBXTargetDependency */ = { + 887C88EB4E31D222F42FC504D607910F /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SnapKit; - target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */; - targetProxy = C768A3C6BD4812103A21FAE78374FB76 /* PBXContainerItemProxy */; - }; - C0C4FC5ECC8FA7B3CA5CE832893A9E72 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = ZXKitUtil; - target = 4B09DDD2A3083E311C984F301582897A /* ZXKitUtil */; - targetProxy = 1D4303621EDB226A2CEF0600E4875D08 /* PBXContainerItemProxy */; + name = ZXKitCore; + target = 23CC5B423FA68CF6FCACD593F1FEDCF6 /* ZXKitCore */; + targetProxy = 7EB1B1A35F63B9ED5B839465721FAEA3 /* PBXContainerItemProxy */; }; - E38846342123F64CE86EE3E06F08C3CD /* PBXTargetDependency */ = { + 946881095D04EA5D5250E49D2DE627D5 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = netfox; - target = 33426EFE1931E100B59ABF41FD14377D /* netfox */; - targetProxy = AD1C282C84AEDF915E548351B526F599 /* PBXContainerItemProxy */; + name = "ZXKitCore-ZXKitCore"; + target = 6535447A49D8AE5353316E9D3CA44597 /* ZXKitCore-ZXKitCore */; + targetProxy = C7461A72387F410DB31F0B1CFCE2927F /* PBXContainerItemProxy */; }; - F812A7B80D63AE525C1C8DD6F7BF5652 /* PBXTargetDependency */ = { + BB94F70E9D5F3A5B398D79F2694A3BC2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = SnapKit; target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */; - targetProxy = 59B0C53BBEC6436E3AF725428337F5F1 /* PBXContainerItemProxy */; + targetProxy = 844674814186537517C1227BBD55435A /* PBXContainerItemProxy */; + }; + C82DCC7D64504035CF51109629A9BD24 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = ZXKitUtil; + target = 4B09DDD2A3083E311C984F301582897A /* ZXKitUtil */; + targetProxy = 9A66E8EC12D02768610B69321D3DE2CE /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ - 3CED72882ACE336898E9F42009D79022 /* Localizable.strings */ = { + 5AE81FD00E24031DC780A4C171810194 /* Localizable.strings */ = { isa = PBXVariantGroup; children = ( - F6769BBD30634D019F1F0F4E2B7B64D6 /* Localizable.strings */, - 90F5954051188ED8A08773F4A960E643 /* Localizable.strings */, + B21B67E3E274B74FBA0B7A18EC588945 /* Localizable.strings */, + F9295A5E145EC863BBE5C1B44C0CA68E /* Localizable.strings */, ); name = Localizable.strings; path = pod/localizable; @@ -1067,11 +1055,10 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ - 3894E10DAC62E2158CD96125037BD7F7 /* Debug */ = { + 19C834D3EC74B6F2DA25049518D5BF99 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A95B25DE6C477B23C737B4D2D3383BAA /* Pods-netfox-zxkit.debug.xcconfig */; + baseConfigurationReference = B8D0643A2E559B90A729B21EE8621C7E /* ZXKitCore.debug.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -1081,70 +1068,31 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-netfox-zxkit/Pods-netfox-zxkit-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/ZXKitCore/ZXKitCore-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/ZXKitCore/ZXKitCore-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 14.5; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-netfox-zxkit/Pods-netfox-zxkit.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + MODULEMAP_FILE = "Target Support Files/ZXKitCore/ZXKitCore.modulemap"; + PRODUCT_MODULE_NAME = ZXKitCore; + PRODUCT_NAME = ZXKitCore; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - 4155D5A5BF3297842D316347D43617BA /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 68BCDC39105B20BE7FC85B7C0CDA03A6 /* Pods-netfox-zxkit.release.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-netfox-zxkit/Pods-netfox-zxkit-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 14.5; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-netfox-zxkit/Pods-netfox-zxkit.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 5B4A3FB1004A429328C534FFCF9E290F /* Release */ = { + 38C44DCEE73675E9C2D9E6B0E98EC380 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D0850B03A86A9E80C62853B43871B403 /* ZXKitCore.release.xcconfig */; + baseConfigurationReference = E483C5F6321A6726D03DDF67272F6541 /* ZXKitCore.release.xcconfig */; buildSettings = { CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/ZXKitCore"; IBSC_MODULE = ZXKitCore; @@ -1158,44 +1106,9 @@ }; name = Release; }; - 77B25FC9CEE66CA6521DBC2E6517BD97 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9DD37AC7099FD253BA340743CE058962 /* SnapKit.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SnapKit/SnapKit-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SnapKit/SnapKit-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/SnapKit/SnapKit.modulemap"; - PRODUCT_MODULE_NAME = SnapKit; - PRODUCT_NAME = SnapKit; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 7B687E33A93A5E9C1B3225F8F8931BBF /* Debug */ = { + 46362AAFFAE91AB361FC2ACE8C195C08 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 62EAF1C753CB6AC78727857C4111EC95 /* ZXKitCore.debug.xcconfig */; + baseConfigurationReference = E483C5F6321A6726D03DDF67272F6541 /* ZXKitCore.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -1223,49 +1136,15 @@ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 8E3CA2C5E402BAEFC730011B19980508 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 262FAF0E10152563BC9E0E2B89C3118B /* netfox.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/netfox/netfox-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/netfox/netfox-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/netfox/netfox.modulemap"; - PRODUCT_MODULE_NAME = netfox; - PRODUCT_NAME = netfox; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; - 8E403E361CD6D3F32A530333F7435318 /* Release */ = { + 4BE0729CA264FD1C101BBFC1D29A5240 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DCCB327B50E8235C98D8616334278BA0 /* SnapKit.release.xcconfig */; + baseConfigurationReference = 8338D8DD4FF9F8C22C5284182A33201B /* ZXKitUtil.debug.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -1276,8 +1155,8 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SnapKit/SnapKit-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SnapKit/SnapKit-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/ZXKitUtil/ZXKitUtil-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/ZXKitUtil/ZXKitUtil-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -1285,23 +1164,22 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/SnapKit/SnapKit.modulemap"; - PRODUCT_MODULE_NAME = SnapKit; - PRODUCT_NAME = SnapKit; + MODULEMAP_FILE = "Target Support Files/ZXKitUtil/ZXKitUtil.modulemap"; + PRODUCT_MODULE_NAME = ZXKitUtil; + PRODUCT_NAME = ZXKitUtil; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 9AC65E810A150902D32C5023FC6D9C39 /* Release */ = { + 9CB81D88DE1345BFDEB45EFEE8E28BE4 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D0850B03A86A9E80C62853B43871B403 /* ZXKitCore.release.xcconfig */; + baseConfigurationReference = 34506009AAF4B86F2AC5EC16D67BF77B /* ZXKitUtil.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -1312,18 +1190,18 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/ZXKitCore/ZXKitCore-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/ZXKitCore/ZXKitCore-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/ZXKitUtil/ZXKitUtil-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/ZXKitUtil/ZXKitUtil-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/ZXKitCore/ZXKitCore.modulemap"; - PRODUCT_MODULE_NAME = ZXKitCore; - PRODUCT_NAME = ZXKitCore; + MODULEMAP_FILE = "Target Support Files/ZXKitUtil/ZXKitUtil.modulemap"; + PRODUCT_MODULE_NAME = ZXKitUtil; + PRODUCT_NAME = ZXKitUtil; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -1401,19 +1279,37 @@ }; name = Debug; }; - C1E2F6D46B68907FDB70DA1E6D57D199 /* Debug */ = { + BD05C31B9C4C10943E8FE140E37311A6 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 62EAF1C753CB6AC78727857C4111EC95 /* ZXKitCore.debug.xcconfig */; + baseConfigurationReference = D56A9189892886F6A93A4395B1063BDB /* netfox.debug.xcconfig */; buildSettings = { - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/ZXKitCore"; - IBSC_MODULE = ZXKitCore; - INFOPLIST_FILE = "Target Support Files/ZXKitCore/ResourceBundle-ZXKitCore-ZXKitCore-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - PRODUCT_NAME = ZXKitCore; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/netfox/netfox-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/netfox/netfox-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/netfox/netfox.modulemap"; + PRODUCT_MODULE_NAME = netfox; + PRODUCT_NAME = netfox; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; }; name = Debug; }; @@ -1479,10 +1375,11 @@ }; name = Release; }; - EAE80BAC1F7B5013E8580AAE1E600214 /* Debug */ = { + CB8A79F7382B0A1227C38D59E7968EEA /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 165D458949074B642577380D89222466 /* netfox.debug.xcconfig */; + baseConfigurationReference = 597ED1D6F6D0266E437700E72D4D6A4B /* SnapKit.debug.xcconfig */; buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -1491,18 +1388,18 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/netfox/netfox-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/netfox/netfox-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SnapKit/SnapKit-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SnapKit/SnapKit-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/netfox/netfox.modulemap"; - PRODUCT_MODULE_NAME = netfox; - PRODUCT_NAME = netfox; + MODULEMAP_FILE = "Target Support Files/SnapKit/SnapKit.modulemap"; + PRODUCT_MODULE_NAME = SnapKit; + PRODUCT_NAME = SnapKit; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -1513,10 +1410,11 @@ }; name = Debug; }; - EE44D413973A7D6054C6A0F593099D08 /* Release */ = { + D969B2F12F1BF83D733372E4597FF338 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E4711F70FE37F1B4CFF332766048E001 /* ZXKitUtil.release.xcconfig */; + baseConfigurationReference = A95B25DE6C477B23C737B4D2D3383BAA /* Pods-netfox-zxkit.debug.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -1526,22 +1424,60 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/ZXKitUtil/ZXKitUtil-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/ZXKitUtil/ZXKitUtil-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-netfox-zxkit/Pods-netfox-zxkit-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 14.5; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/ZXKitUtil/ZXKitUtil.modulemap"; - PRODUCT_MODULE_NAME = ZXKitUtil; - PRODUCT_NAME = ZXKitUtil; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-netfox-zxkit/Pods-netfox-zxkit.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + DFBD014A8D9C8A9A3E3CF12F7BC03DF2 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 68BCDC39105B20BE7FC85B7C0CDA03A6 /* Pods-netfox-zxkit.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-netfox-zxkit/Pods-netfox-zxkit-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 14.5; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-netfox-zxkit/Pods-netfox-zxkit.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; @@ -1549,9 +1485,9 @@ }; name = Release; }; - F0D3F433BCD6DFD027A4CB5834A1AECF /* Debug */ = { + DFFD31690F9CC8449FD1F803388E1D46 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FE317F70EC695CAC8021D35AD09F4509 /* ZXKitUtil.debug.xcconfig */; + baseConfigurationReference = E2F60C027DF181C69B2EDBFC850779F0 /* SnapKit.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -1562,8 +1498,8 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/ZXKitUtil/ZXKitUtil-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/ZXKitUtil/ZXKitUtil-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SnapKit/SnapKit-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SnapKit/SnapKit-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -1571,36 +1507,88 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/ZXKitUtil/ZXKitUtil.modulemap"; - PRODUCT_MODULE_NAME = ZXKitUtil; - PRODUCT_NAME = ZXKitUtil; + MODULEMAP_FILE = "Target Support Files/SnapKit/SnapKit.modulemap"; + PRODUCT_MODULE_NAME = SnapKit; + PRODUCT_NAME = SnapKit; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; + name = Release; + }; + E698E3AD9A469DA92A17DBCFABCCEA05 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B8D0643A2E559B90A729B21EE8621C7E /* ZXKitCore.debug.xcconfig */; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/ZXKitCore"; + IBSC_MODULE = ZXKitCore; + INFOPLIST_FILE = "Target Support Files/ZXKitCore/ResourceBundle-ZXKitCore-ZXKitCore-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + PRODUCT_NAME = ZXKitCore; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; name = Debug; }; + FE417CB1982DDFAA8AD674217609A905 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B1A90BA8D9700CDDB0812B65B18BE5A9 /* netfox.release.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/netfox/netfox-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/netfox/netfox-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/netfox/netfox.modulemap"; + PRODUCT_MODULE_NAME = netfox; + PRODUCT_NAME = netfox; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 0DB90D36757B34061DB3989D55141430 /* Build configuration list for PBXNativeTarget "ZXKitCore" */ = { + 14A279E0E52265F9827871C7B385FECF /* Build configuration list for PBXNativeTarget "netfox" */ = { isa = XCConfigurationList; buildConfigurations = ( - 7B687E33A93A5E9C1B3225F8F8931BBF /* Debug */, - 9AC65E810A150902D32C5023FC6D9C39 /* Release */, + BD05C31B9C4C10943E8FE140E37311A6 /* Debug */, + FE417CB1982DDFAA8AD674217609A905 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 43DCA4A53BDBEF3E85627AD742C52BC4 /* Build configuration list for PBXNativeTarget "ZXKitCore-ZXKitCore" */ = { + 20D200B8B282B84E7D7DC7218EFA8B78 /* Build configuration list for PBXNativeTarget "Pods-netfox-zxkit" */ = { isa = XCConfigurationList; buildConfigurations = ( - C1E2F6D46B68907FDB70DA1E6D57D199 /* Debug */, - 5B4A3FB1004A429328C534FFCF9E290F /* Release */, + D969B2F12F1BF83D733372E4597FF338 /* Debug */, + DFBD014A8D9C8A9A3E3CF12F7BC03DF2 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -1614,38 +1602,38 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 7892CEEC13781101CA728B98D607D0FD /* Build configuration list for PBXNativeTarget "netfox" */ = { + 4949A940CD53B7E293859B71C91C88F3 /* Build configuration list for PBXNativeTarget "SnapKit" */ = { isa = XCConfigurationList; buildConfigurations = ( - EAE80BAC1F7B5013E8580AAE1E600214 /* Debug */, - 8E3CA2C5E402BAEFC730011B19980508 /* Release */, + CB8A79F7382B0A1227C38D59E7968EEA /* Debug */, + DFFD31690F9CC8449FD1F803388E1D46 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 7F8CE4DC18DBEA01587212F09727DB3D /* Build configuration list for PBXNativeTarget "SnapKit" */ = { + 75D6BC64CE04CD06A0F1ECC871CFE769 /* Build configuration list for PBXNativeTarget "ZXKitCore" */ = { isa = XCConfigurationList; buildConfigurations = ( - 77B25FC9CEE66CA6521DBC2E6517BD97 /* Debug */, - 8E403E361CD6D3F32A530333F7435318 /* Release */, + 19C834D3EC74B6F2DA25049518D5BF99 /* Debug */, + 46362AAFFAE91AB361FC2ACE8C195C08 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - E08B5A71FD65E991A465974D18832202 /* Build configuration list for PBXNativeTarget "Pods-netfox-zxkit" */ = { + 9EB8B83DF384811E7EECDBEBAACEEBFA /* Build configuration list for PBXNativeTarget "ZXKitCore-ZXKitCore" */ = { isa = XCConfigurationList; buildConfigurations = ( - 3894E10DAC62E2158CD96125037BD7F7 /* Debug */, - 4155D5A5BF3297842D316347D43617BA /* Release */, + E698E3AD9A469DA92A17DBCFABCCEA05 /* Debug */, + 38C44DCEE73675E9C2D9E6B0E98EC380 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - F3C2833E7433075D3D0B799F85E3B666 /* Build configuration list for PBXNativeTarget "ZXKitUtil" */ = { + A8D6E5B8E89662285A5D7678CAE7DCB8 /* Build configuration list for PBXNativeTarget "ZXKitUtil" */ = { isa = XCConfigurationList; buildConfigurations = ( - F0D3F433BCD6DFD027A4CB5834A1AECF /* Debug */, - EE44D413973A7D6054C6A0F593099D08 /* Release */, + 4BE0729CA264FD1C101BBFC1D29A5240 /* Debug */, + 9CB81D88DE1345BFDEB45EFEE8E28BE4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/Pods-netfox-zxkit.xcscheme b/example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/Pods-netfox-zxkit.xcscheme index ee11747..8651c6d 100644 --- a/example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/Pods-netfox-zxkit.xcscheme +++ b/example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/Pods-netfox-zxkit.xcscheme @@ -1,6 +1,6 @@ + buildForArchiving = "YES" + buildForAnalyzing = "YES"> - - + shouldUseLaunchSchemeArgsEnv = "YES"> + + - - + debugDocumentVersioning = "YES"> diff --git a/example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/ZXKitCore-ZXKitCore.xcscheme b/example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/ZXKitCore-ZXKitCore.xcscheme index 6977c47..13f0ea7 100644 --- a/example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/ZXKitCore-ZXKitCore.xcscheme +++ b/example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/ZXKitCore-ZXKitCore.xcscheme @@ -1,6 +1,6 @@ + buildForArchiving = "YES" + buildForAnalyzing = "YES"> - - + shouldUseLaunchSchemeArgsEnv = "YES"> + + - - + debugDocumentVersioning = "YES"> diff --git a/example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/ZXKitUtil.xcscheme b/example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/ZXKitUtil.xcscheme index 8e9b6c6..586d336 100644 --- a/example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/ZXKitUtil.xcscheme +++ b/example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/ZXKitUtil.xcscheme @@ -1,17 +1,17 @@ + buildForArchiving = "YES" + buildForAnalyzing = "YES"> - - + shouldUseLaunchSchemeArgsEnv = "YES"> + + - - + debugDocumentVersioning = "YES"> diff --git a/example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/netfox.xcscheme b/example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/netfox.xcscheme index f7729cc..9fbfc25 100644 --- a/example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/netfox.xcscheme +++ b/example/Pods/Pods.xcodeproj/xcuserdata/damon.xcuserdatad/xcschemes/netfox.xcscheme @@ -1,17 +1,17 @@ + buildForArchiving = "YES" + buildForAnalyzing = "YES"> - - + shouldUseLaunchSchemeArgsEnv = "YES"> + + - - + debugDocumentVersioning = "YES"> diff --git a/example/Pods/Target Support Files/Pods-netfox-zxkit/Pods-netfox-zxkit-frameworks.sh b/example/Pods/Target Support Files/Pods-netfox-zxkit/Pods-netfox-zxkit-frameworks.sh index 27e454a..e669f13 100755 --- a/example/Pods/Target Support Files/Pods-netfox-zxkit/Pods-netfox-zxkit-frameworks.sh +++ b/example/Pods/Target Support Files/Pods-netfox-zxkit/Pods-netfox-zxkit-frameworks.sh @@ -113,6 +113,7 @@ install_dsym() { rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.dSYM" "${DWARF_DSYM_FOLDER_PATH}" else # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + mkdir -p "${DWARF_DSYM_FOLDER_PATH}" touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.dSYM" fi fi diff --git a/example/Pods/Target Support Files/Pods-netfox-zxkit/Pods-netfox-zxkit.debug.xcconfig b/example/Pods/Target Support Files/Pods-netfox-zxkit/Pods-netfox-zxkit.debug.xcconfig index aa5fbfa..7e8e314 100644 --- a/example/Pods/Target Support Files/Pods-netfox-zxkit/Pods-netfox-zxkit.debug.xcconfig +++ b/example/Pods/Target Support Files/Pods-netfox-zxkit/Pods-netfox-zxkit.debug.xcconfig @@ -3,8 +3,9 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/ZXKitCore" "${PODS_CONFIGURATION_BUILD_DIR}/ZXKitUtil" "${PODS_CONFIGURATION_BUILD_DIR}/netfox" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ZXKitCore/ZXKitCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ZXKitUtil/ZXKitUtil.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/netfox/netfox.framework/Headers" -LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_LDFLAGS = $(inherited) -framework "SnapKit" -framework "ZXKitCore" -framework "ZXKitUtil" -framework "netfox" +LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks' +LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift +OTHER_LDFLAGS = $(inherited) -framework "SnapKit" -framework "ZXKitCore" -framework "ZXKitUtil" -framework "netfox" -weak_framework "CryptoKit" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/example/Pods/Target Support Files/Pods-netfox-zxkit/Pods-netfox-zxkit.release.xcconfig b/example/Pods/Target Support Files/Pods-netfox-zxkit/Pods-netfox-zxkit.release.xcconfig index aa5fbfa..7e8e314 100644 --- a/example/Pods/Target Support Files/Pods-netfox-zxkit/Pods-netfox-zxkit.release.xcconfig +++ b/example/Pods/Target Support Files/Pods-netfox-zxkit/Pods-netfox-zxkit.release.xcconfig @@ -3,8 +3,9 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/ZXKitCore" "${PODS_CONFIGURATION_BUILD_DIR}/ZXKitUtil" "${PODS_CONFIGURATION_BUILD_DIR}/netfox" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ZXKitCore/ZXKitCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ZXKitUtil/ZXKitUtil.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/netfox/netfox.framework/Headers" -LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_LDFLAGS = $(inherited) -framework "SnapKit" -framework "ZXKitCore" -framework "ZXKitUtil" -framework "netfox" +LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks' +LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift +OTHER_LDFLAGS = $(inherited) -framework "SnapKit" -framework "ZXKitCore" -framework "ZXKitUtil" -framework "netfox" -weak_framework "CryptoKit" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/example/Pods/Target Support Files/SnapKit/SnapKit.debug.xcconfig b/example/Pods/Target Support Files/SnapKit/SnapKit.debug.xcconfig index 39fc265..03fb3c1 100644 --- a/example/Pods/Target Support Files/SnapKit/SnapKit.debug.xcconfig +++ b/example/Pods/Target Support Files/SnapKit/SnapKit.debug.xcconfig @@ -1,6 +1,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SnapKit GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/example/Pods/Target Support Files/SnapKit/SnapKit.release.xcconfig b/example/Pods/Target Support Files/SnapKit/SnapKit.release.xcconfig index 39fc265..03fb3c1 100644 --- a/example/Pods/Target Support Files/SnapKit/SnapKit.release.xcconfig +++ b/example/Pods/Target Support Files/SnapKit/SnapKit.release.xcconfig @@ -1,6 +1,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SnapKit GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/example/Pods/Target Support Files/ZXKitCore/ZXKitCore.debug.xcconfig b/example/Pods/Target Support Files/ZXKitCore/ZXKitCore.debug.xcconfig index 18bc2ee..3879164 100644 --- a/example/Pods/Target Support Files/ZXKitCore/ZXKitCore.debug.xcconfig +++ b/example/Pods/Target Support Files/ZXKitCore/ZXKitCore.debug.xcconfig @@ -2,6 +2,8 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ZXKitCore FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/ZXKitUtil" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift +OTHER_LDFLAGS = $(inherited) -framework "SnapKit" -framework "ZXKitUtil" -weak_framework "CryptoKit" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/example/Pods/Target Support Files/ZXKitCore/ZXKitCore.release.xcconfig b/example/Pods/Target Support Files/ZXKitCore/ZXKitCore.release.xcconfig index 18bc2ee..3879164 100644 --- a/example/Pods/Target Support Files/ZXKitCore/ZXKitCore.release.xcconfig +++ b/example/Pods/Target Support Files/ZXKitCore/ZXKitCore.release.xcconfig @@ -2,6 +2,8 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ZXKitCore FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/ZXKitUtil" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift +OTHER_LDFLAGS = $(inherited) -framework "SnapKit" -framework "ZXKitUtil" -weak_framework "CryptoKit" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil-Info.plist b/example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil-Info.plist index b0b461e..b6e86dd 100644 --- a/example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil-Info.plist +++ b/example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 3.0.1 + 3.2.4 CFBundleSignature ???? CFBundleVersion diff --git a/example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil.debug.xcconfig b/example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil.debug.xcconfig index 3f6858b..68756f1 100644 --- a/example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil.debug.xcconfig +++ b/example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil.debug.xcconfig @@ -1,6 +1,8 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ZXKitUtil GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift +OTHER_LDFLAGS = $(inherited) -weak_framework "CryptoKit" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil.release.xcconfig b/example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil.release.xcconfig index 3f6858b..68756f1 100644 --- a/example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil.release.xcconfig +++ b/example/Pods/Target Support Files/ZXKitUtil/ZXKitUtil.release.xcconfig @@ -1,6 +1,8 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ZXKitUtil GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift +OTHER_LDFLAGS = $(inherited) -weak_framework "CryptoKit" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/example/Pods/Target Support Files/netfox/netfox-Info.plist b/example/Pods/Target Support Files/netfox/netfox-Info.plist index 81967ed..cc9cc52 100644 --- a/example/Pods/Target Support Files/netfox/netfox-Info.plist +++ b/example/Pods/Target Support Files/netfox/netfox-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 1.19.0 + 1.21.0 CFBundleSignature ???? CFBundleVersion diff --git a/example/Pods/Target Support Files/netfox/netfox-umbrella.h b/example/Pods/Target Support Files/netfox/netfox-umbrella.h index d796b7f..42e0c22 100644 --- a/example/Pods/Target Support Files/netfox/netfox-umbrella.h +++ b/example/Pods/Target Support Files/netfox/netfox-umbrella.h @@ -10,7 +10,6 @@ #endif #endif -#import "NFXLoader.h" FOUNDATION_EXPORT double netfoxVersionNumber; FOUNDATION_EXPORT const unsigned char netfoxVersionString[]; diff --git a/example/Pods/Target Support Files/netfox/netfox.debug.xcconfig b/example/Pods/Target Support Files/netfox/netfox.debug.xcconfig index a71648f..164e67c 100644 --- a/example/Pods/Target Support Files/netfox/netfox.debug.xcconfig +++ b/example/Pods/Target Support Files/netfox/netfox.debug.xcconfig @@ -1,6 +1,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/netfox GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/example/Pods/Target Support Files/netfox/netfox.release.xcconfig b/example/Pods/Target Support Files/netfox/netfox.release.xcconfig index a71648f..164e67c 100644 --- a/example/Pods/Target Support Files/netfox/netfox.release.xcconfig +++ b/example/Pods/Target Support Files/netfox/netfox.release.xcconfig @@ -1,6 +1,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/netfox GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/example/Pods/ZXKitUtil/README.md b/example/Pods/ZXKitUtil/README.md index 3e857d0..81ffa62 100644 --- a/example/Pods/ZXKitUtil/README.md +++ b/example/Pods/ZXKitUtil/README.md @@ -41,11 +41,13 @@ Existing data type operations can be used through the syntax of `.zx`, and other |func UIColor(hexValue: Int, darkHexValue: Int = 0x333333, alpha: Float = 1.0, darkAlpha: Float = 1.0)|Get color by hexadecimal| UIColor.zx.color(hexValue: 0xffffff)| |UIScreenWidth|Screen width|| |UIScreenHeight|Screen height|| -|ZXKitUtil_StatusBar_Height|Status Bar Height|| +|ZXKitUtil_StatusBar_Height|Status Bar height|| +|ZXKitUtil_HomeIndicator_Height|Home Indicator height|| |func ZXKitUtil_Default_NavigationBar_Height(vc: UIViewController? = nil)|Navigation Bar Height|ZXKitUtil_Default_NavigationBar_Height()| |func func ZXKitUtil_Default_Tabbar_Height(vc: UIViewController? = nil)|tabbar height|ZXKitUtil_Default_Tabbar_Height()| |func addLayerShadow(color: UIColor, offset: CGSize, radius: CGFloat, cornerRadius: CGFloat? = nil)|Add a shadow to the view|view.zx.addLayerShadow(color: UIColor.black, offset: CGSize(width: 2, height : 0), radius: 10)| |func setFrame(x: CGFloat? = nil, y: CGFloat? = nil, width: CGFloat? = nil, height: CGFloat? = nil)|view individually sets a certain value of Frame|view.zx.setFrame(x: 10)| +|func className() -> String| get view's class name|button.zx.className()| ### System and software information @@ -53,6 +55,7 @@ Existing data type operations can be used through the syntax of `.zx`, and other |----|----|----| |func getAppVersionString()|Get software version|ZXKitUtil.shared.getAppVersionString()| |func getAppBuildVersionString()|Get software build version|ZXKitUtil.shared.getAppBuildVersionString()| +|func getAppNameString()|get app's Name|ZXKitUtil.shared.getAppNameString()| |func getIOSVersionString()|Get the iOS version of the system|ZXKitUtil.shared.getIOSVersionString()| |func getIOSLanguageStr()|Get system language|ZXKitUtil.shared.getIOSLanguageStr()| |func getBundleIdentifier()|Get Software Bundle Identifier|ZXKitUtil.shared.getBundleIdentifier()| @@ -70,8 +73,8 @@ Existing data type operations can be used through the syntax of `.zx`, and other |----|----|----| |func requestPermission(type: ZXKitUtilPermissionType, complete: @escaping ((ZXKitUtilPermissionStatus) -> Void))|Request permission|ZXKitUtil.shared.requestPermission(type: .notification) {(status) in print("Permission setting callback" , status) }| |func checkPermission(type: ZXKitUtilPermissionType, complete: @escaping ((ZXKitUtilPermissionStatus) -> Void))|Checking software permissions|ZXKitUtil.shared.checkPermission(type: .notification) {(status) in print("Current permission status ", status) }| -|func requestIDFAPermission(complete: @escaping ((ZXKitUtilPermissionStatus) -> Void)) -> Void|Detection software IDFA permission|ZXKitUtil.shared.requestIDFAPermission {(status) in print("Current idfa permission status", status)} | -|func checkIDFAPermission(type: ZXKitUtilPermissionType, complete: @escaping ((ZXKitUtilPermissionStatus) -> Void)) -> Void|Detection software idfa permission|ZXKitUtil.shared.checkIDFAPermission {(status) in print("Current Permission Status", status) }| +|func requestIDFAPermission(complete: @escaping ((ZXKitUtilPermissionStatus) -> Void)) -> Void|request idfa permission|ZXKitUtil.shared.requestIDFAPermission {(status) in print("Current idfa permission status", status)} | +|func checkIDFAPermission(type: ZXKitUtilPermissionType, complete: @escaping ((ZXKitUtilPermissionStatus) -> Void)) -> Void|check software idfa permission|ZXKitUtil.shared.checkIDFAPermission {(status) in print("Current Permission Status", status) }| ### Multimedia operation @@ -96,16 +99,41 @@ Existing data type operations can be used through the syntax of `.zx`, and other ### Other +#### ZXKitUtil + +|Name|Function description|Example| +|----|----|----| +|func getDictionary(object: Any, debug: Bool = false) -> [String: Any]| get all key and value from class\struct|ZXKitUtil.shared.getDictionary(object: testModel)| +|func runInMainThread(type: ZXMainThreadType = .default, function: @escaping ()->Void)|run function in main thread|ZXKitUtil.shared.runInMainThread(type: .sync) { ... }| + + +#### String + +|Name|Function description|Example| +|----|----|----| +|func subString(rang: NSRange)|截取字符串|string.zx.subString(rang: NSRange(location: 2, length: 5))| +|func unicodeDecode()|unicode转中文|"\\u54c8\\u54c8\\u54c8".zx.unicodeDecode()| +|func unicodeEncode()|字符串转unicode|"哈哈是电话费".zx.unicodeEncode()| +|func encodeString(from originType: ZXKitUtilEncodeType = .system(.utf8), to encodeType: ZXKitUtilEncodeType)|字符串修改编码显示|"5ZOI5ZOI5piv55S16K+d6LS5".zx.encodeString(from: .base64, to: .system(.utf8))| +|func aesCBCEncrypt(password: String, ivString: String = "abcdefghijklmnop")|aes cbc Encrypt |string.zx.aesCBCEncrypt(password: "password")| +|func aesCBCDecrypt(password: String, ivString: String = "abcdefghijklmnop")|aes cbc Decrypt |string.zx.aesCBCDecrypt(password: "password")| +|func hashString(hashType: ZXKitUtilHashType, lowercase: Bool = true)|get hash value of the string|string.zx.hashString(hashType: .md5)
Support md5/sha1/sha224/sha256/sha384/sha512| +|func aesGCMEncrypt(password: String, encodeType: ZXKitUtilEncodeType = .base64, nonce: AES.GCM.Nonce? = AES.GCM.Nonce())|aes gcm Encrypt |string.zx.aesGCMEncrypt(password: "password")| +|func aesGCMDecrypt(password: String, encodeType: ZXKitUtilEncodeType = .base64)|aes gcm Decrypt |string.zx.aesGCMDecrypt(password: "password")| +|func hmac(hashType: ZXKitUtilHashType, password: String, encodeType: ZXKitUtilEncodeType = .base64)|HMAC|"ZXKitUtil".zx.hmac(hashType: .sha1, password: "67FG", encodeType: .hex)| + +#### Data + |Name|Function description|Example| |----|----|----| -|func compare(anotherDate: Date, ignoreTime: Bool = false)|Compare dates and set whether to ignore time|Date().zx.compare(anotherDate: date)| -|func subString(rang: NSRange)|Intercept string|string.zx.subString(rang: NSRange(location: 2, length: 5))| -|func unicodeDecode()|unicode to Chinese|"\\u54c8\\u54c8\\u54c8".zx.unicodeDecode()| -|func unicodeEncode()|Character string to unicode|"Haha is the phone charge".zx.unicodeEncode()| -|func base64Decode(lowercase: Bool = true)|base64 decoding|"5ZOI5ZOI5piv55S16K+d6LS5".zx.base64Decode()| -|func aes256Decrypt(password: String, ivString: String = "abcdefghijklmnop")|aes256 decrypt|string.zx.aes256Decrypt(password: "password")| -|func aes256Encrypt(password: String, ivString: String = "abcdefghijklmnop")|aes256 encryption|string.zx.aes256Encrypt(password: "password")| -|func encryptString(encryType: ZXKitUtilEncryType, lowercase: Bool = true)|String encryption|string.zx.encryptString(encryType: ZXKitUtilEncryType.md5)
Support md5/sha1/sha224/sha256/sha384/sha512/base64 encryption | +|static func data(from string: String, encodeType: ZXKitUtilEncodeType)|get data from string with encodeType | Data.zx.data(from: "d5a423f64b607ea7c65b311d855dc48f36114b227bd0c7a3d403f6158a9e4412", encodeType: .hex)| +|func encodeString(encodeType: ZXKitUtilEncodeType)| encode data to string with encodeType | data.zx.encodeString(encodeType: .hex)| +|func aesCBCEncrypt(password: String, ivString: String = "abcdefghijklmnop")|aes cbc Encrypt|data.zx.aesCBCEncrypt(password: "password")| +|func aesCBCDecrypt(password: String, ivString: String = "abcdefghijklmnop")|aes cbc Decrypt|data.zx.aesCBCDecrypt(password: "password")| +|func hashString(hashType: ZXKitUtilHashType, lowercase: Bool = true)|get hash value of the string|data.zx. hashString(hashType: .md5)
支持md5/sha1/sha224/sha256/sha384/sha512| +|func aesGCMEncrypt(password: String, encodeType: ZXKitUtilEncodeType = .base64, nonce: AES.GCM.Nonce? = AES.GCM.Nonce())|aes gcm Encrypt|data.zx.aesGCMEncrypt(password: "password")| +|func aesGCMDecrypt(password: String, encodeType: ZXKitUtilEncodeType = .base64)|aes gcm Decrypt|data.zx.aesGCMDecrypt(password: "password")| +|func hmac(hashType: ZXKitUtilHashType, password: String, encodeType: ZXKitUtilEncodeType = .base64)|HMAC|data.zx.hmac(hashType: .sha1, password: "67FG", encodeType: .hex)| ## other diff --git a/example/Pods/ZXKitUtil/pod/ZXKitUtil+UI.swift b/example/Pods/ZXKitUtil/pod/ZXKitUtil+UI.swift index f604cdb..ce6d870 100644 --- a/example/Pods/ZXKitUtil/pod/ZXKitUtil+UI.swift +++ b/example/Pods/ZXKitUtil/pod/ZXKitUtil+UI.swift @@ -51,7 +51,7 @@ public extension ZXKitUtil { } ///获取当前显示的vc - func getCurrentVC() -> UIViewController? { + func getCurrentVC(ignoreChildren: Bool = true) -> UIViewController? { let currentWindow = self.getCurrentNormalWindow() guard let window = currentWindow else { return nil } var vc: UIViewController? @@ -66,24 +66,25 @@ public extension ZXKitUtil { vc = window.rootViewController } - if let currentVC = vc { - if currentVC is UITabBarController { - let tabBarController = currentVC as! UITabBarController + while (vc is UINavigationController) || (vc is UITabBarController) { + if vc is UITabBarController { + let tabBarController = vc as! UITabBarController vc = tabBarController.selectedViewController - } - } - if let currentVC = vc { - if currentVC is UINavigationController { - let navigationController = currentVC as! UINavigationController + } else if vc is UINavigationController { + let navigationController = vc as! UINavigationController vc = navigationController.visibleViewController } } + + if !ignoreChildren, let children = vc?.children, children.count > 0 { + return children.last + } return vc } ///通过颜色获取纯色图片 - func getImage(color: UIColor) -> UIImage { - let rect = CGRect(x: 0, y: 0, width: 1, height: 1) + func getImage(color: UIColor, size: CGSize = CGSize(width: 1, height: 1)) -> UIImage { + let rect = CGRect(x: 0, y: 0, width: size.width, height: size.height) var image: UIImage? UIGraphicsBeginImageContextWithOptions(rect.size, false, 0) @@ -194,10 +195,12 @@ public extension ZXKitUtil { } } -///高度坐标配置 +///屏幕宽度 public var UIScreenWidth: CGFloat { return UIScreen.main.bounds.size.width } + +///屏幕高度 public var UIScreenHeight: CGFloat { return UIScreen.main.bounds.size.height } @@ -207,21 +210,49 @@ public var ZXKitUtil_StatusBar_Height: CGFloat { return UIApplication.shared.statusBarFrame.size.height } +///底部Home Indicator高度 +public var ZXKitUtil_HomeIndicator_Height: CGFloat { + if #available(iOS 11.0, *) { + if let cacheHomeIndicatorHeight = ZXKitUtil.shared.cacheHomeIndicatorHeight { + return cacheHomeIndicatorHeight + } else if let window = ZXKitUtil.shared.getCurrentNormalWindow() { + let bottom = window.safeAreaInsets.bottom + ZXKitUtil.shared.cacheHomeIndicatorHeight = bottom + return bottom + } + } + return 0 +} + ///导航栏高度 -public func ZXKitUtil_Default_NavigationBar_Height(vc: UIViewController? = nil) -> CGFloat { - if let navigationController = vc?.navigationController { - return navigationController.navigationBar.frame.size.height +public func ZXKitUtil_Default_NavigationBar_Height(vc: UIViewController? = nil, cachePrior: Bool = true) -> CGFloat { + if cachePrior, let cacheDefaultNavigationBarHeight = ZXKitUtil.shared.cacheDefaultNavigationBarHeight { + return cacheDefaultNavigationBarHeight } else { - return UINavigationController(nibName: nil, bundle: nil).navigationBar.frame.size.height + var height: CGFloat = 0 + if let navigationController = vc?.navigationController { + height = navigationController.navigationBar.frame.size.height + } else { + height = UINavigationController(nibName: nil, bundle: nil).navigationBar.frame.size.height + } + ZXKitUtil.shared.cacheDefaultNavigationBarHeight = height + return height } } ///tabbar高度 -public func ZXKitUtil_Default_Tabbar_Height(vc: UIViewController? = nil) -> CGFloat { - if let tabbarViewController = vc?.tabBarController { - return tabbarViewController.tabBar.frame.size.height +public func ZXKitUtil_Default_Tabbar_Height(vc: UIViewController? = nil, cachePrior: Bool = true) -> CGFloat { + if cachePrior, let cacheDefaultTabbarHeight = ZXKitUtil.shared.cacheDefaultTabbarHeight { + return cacheDefaultTabbarHeight } else { - return UITabBarController(nibName: nil, bundle: nil).tabBar.frame.size.height + var height: CGFloat = 0 + if let tabbarViewController = vc?.tabBarController { + height = tabbarViewController.tabBar.frame.size.height + } else { + height = UITabBarController(nibName: nil, bundle: nil).tabBar.frame.size.height + } + ZXKitUtil.shared.cacheDefaultTabbarHeight = height + return height } } diff --git a/example/Pods/ZXKitUtil/pod/ZXKitUtil+media.swift b/example/Pods/ZXKitUtil/pod/ZXKitUtil+media.swift index c12d8d7..b88861a 100644 --- a/example/Pods/ZXKitUtil/pod/ZXKitUtil+media.swift +++ b/example/Pods/ZXKitUtil/pod/ZXKitUtil+media.swift @@ -46,7 +46,7 @@ public extension ZXKitUtil { if musicURL.absoluteString.hasPrefix("http://") || musicURL.absoluteString.hasPrefix("https://") { - guard let name = musicURL.path.zx.encryptString(encryType: .md5) else { return nil } + guard let name = musicURL.path.zx.hashString(hashType: .md5) else { return nil } let path = ZXKitUtil.shared.createFileDirectory(in: .caches, directoryName: "music").appendingPathComponent(name, isDirectory: false) let audioData = try? Data(contentsOf: musicURL) try? audioData?.write(to: path) diff --git a/example/Pods/ZXKitUtil/pod/ZXKitUtil+system.swift b/example/Pods/ZXKitUtil/pod/ZXKitUtil+system.swift index 729ced1..76ffc8e 100644 --- a/example/Pods/ZXKitUtil/pod/ZXKitUtil+system.swift +++ b/example/Pods/ZXKitUtil/pod/ZXKitUtil+system.swift @@ -88,34 +88,54 @@ public extension ZXKitUtil { } ///打开系统设置 - func openSystemSetting() -> Void { + func openSystemSetting(completion: ((Bool) -> Void)? = nil) -> Void { let url = URL(string: UIApplication.openSettingsURLString)! - UIApplication.shared.open(url, options: [:], completionHandler: nil) + UIApplication.shared.open(url, options: [:], completionHandler: completion) } ///打开软件对应的App Store页面 - func openAppStorePage(openType: ZXKitUtilOpenAppStoreType, appleID: String) -> Void { + func openAppStorePage(openType: ZXKitUtilOpenAppStoreType, appleID: String, completion: ((Bool, Error?) -> Void)? = nil) -> Void { switch openType { case .app: let storeProductVC = SKStoreProductViewController() storeProductVC.delegate = self storeProductVC.loadProduct(withParameters: [SKStoreProductParameterITunesItemIdentifier : appleID]) { (success, error) in if success { - self.getCurrentVC()?.present(storeProductVC, animated: true, completion: nil) + self.getCurrentVC()?.present(storeProductVC, animated: true, completion: { + if let completion = completion { + completion(true, nil) + } + }) + } else { + if let completion = completion { + completion(false, error) + } } } case .appStore: let url = URL(string: "https://itunes.apple.com/app/id\(appleID)")! - UIApplication.shared.open(url, options: [:], completionHandler: nil) + UIApplication.shared.open(url, options: [:]) { success in + if let completion = completion { + completion(success, nil) + } + } case .auto: let storeProductVC = SKStoreProductViewController() storeProductVC.delegate = self storeProductVC.loadProduct(withParameters: [SKStoreProductParameterITunesItemIdentifier : appleID]) { (success, error) in if success { - self.getCurrentVC()?.present(storeProductVC, animated: true, completion: nil) + self.getCurrentVC()?.present(storeProductVC, animated: true, completion: { + if let completion = completion { + completion(true, nil) + } + }) } else { let url = URL(string: "https://itunes.apple.com/app/id\(appleID)")! - UIApplication.shared.open(url, options: [:], completionHandler: nil) + UIApplication.shared.open(url, options: [:]) { success in + if let completion = completion { + completion(success, nil) + } + } } } } diff --git a/example/Pods/ZXKitUtil/pod/ZXKitUtil.swift b/example/Pods/ZXKitUtil/pod/ZXKitUtil.swift index 96a0ca8..5b76d82 100644 --- a/example/Pods/ZXKitUtil/pod/ZXKitUtil.swift +++ b/example/Pods/ZXKitUtil/pod/ZXKitUtil.swift @@ -7,10 +7,70 @@ // import Foundation +import UIKit open class ZXKitUtil: NSObject { private static let instance = ZXKitUtil() open class var shared: ZXKitUtil { return instance } + + //缓存的数据 + var cacheHomeIndicatorHeight: CGFloat? + var cacheDefaultNavigationBarHeight: CGFloat? + var cacheDefaultTabbarHeight: CGFloat? +} + +public enum ZXMainThreadType { + case `default` //在主线程顺序执行,在其他线程异步回归到主线程(后续操作会优先执行,之后再执行任务,不阻塞界面) + case async //不论是否在主线程,都异步操作 + case sync //在主线程顺序执行,在其他线程同步回归到主线程(后续操作等待当前任务完毕之后继续执行,可能会阻塞界面) +} + +public extension ZXKitUtil { + /// 获取class\struct的所有属性 + /// - Parameters: + /// - object: 需要获取的属性 + /// - debug: 是否输入调试信息 + /// - Returns: 属性 + func getDictionary(object: Any, debug: Bool = false) -> [String: Any] { + let reflection = Mirror(reflecting: object).children + var dictionary = [String : Any]() + + if debug { + print("--- ZXKitUtil.getDictionary(object:debug:) ---") + } + for (key, value) in reflection { + if let key = key { + if debug { + print("--- \(key) --- \(type(of: value)) --- \(value)") + } + dictionary[key] = value + } + } + return dictionary + } + + /// 主线程执行function + /// - Parameters: + /// - type: ZXMainThreadType + /// case `default` //在主线程顺序执行,在其他线程异步回归到主线程(即在function后面的任务会优先执行,之后再执行function任务,不阻塞界面) + /// case async //不论是否在主线程,都异步操作 (即使当前在主线程,在function后面的任务会优先执行,之后再执行function任务,不阻塞界面) + /// case sync //在主线程顺序执行,在其他线程同步回归到主线程(同一个线程中,function后面的任务会等待function任务完毕之后继续执行,可能会阻塞界面) + /// - function: 执行的函数 + func runInMainThread(type: ZXMainThreadType = .default, function: @escaping ()->Void) { + if type == .async { + DispatchQueue.main.async { + function() + } + } else { + if Thread.isMainThread { + function() + } else if type == .sync { + DispatchQueue.main.sync { + function() + } + } + } + } } diff --git a/example/Pods/ZXKitUtil/pod/extend/Data+zx.swift b/example/Pods/ZXKitUtil/pod/extend/Data+zx.swift index 44f99ee..b03daa4 100644 --- a/example/Pods/ZXKitUtil/pod/extend/Data+zx.swift +++ b/example/Pods/ZXKitUtil/pod/extend/Data+zx.swift @@ -8,15 +8,23 @@ import Foundation import CommonCrypto +#if canImport(CryptoKit) +import CryptoKit +#endif -public enum ZXKitUtilEncryType { +public enum ZXKitUtilHashType { case md5 case sha1 case sha224 case sha256 case sha384 case sha512 +} + +public enum ZXKitUtilEncodeType { + case hex case base64 + case system(String.Encoding) } extension Data: ZXKitUtilNameSpaceWrappable { @@ -24,121 +32,223 @@ extension Data: ZXKitUtilNameSpaceWrappable { } public extension ZXKitUtilNameSpace where T == Data { - ///base64解码 - func base64Decode(lowercase: Bool = true) -> String? { - guard var string = String(data: object, encoding: String.Encoding.utf8) else { - return nil - } - if !lowercase { - string = string.uppercased() + //string生成Data,兼容hex和base64 + static func data(from string: String, encodeType: ZXKitUtilEncodeType) -> Data? { + switch encodeType { + case .hex: + let len = string.count / 2 + var data = Data(capacity: len) + var i = string.startIndex + for _ in 0.. String? { - let encryptData = self._crypt(data: object, password: password, ivString: ivString, option: CCOperation(kCCDecrypt)) - return String(data: encryptData, encoding: String.Encoding.utf8) } - - ///aes256加密 - func aes256Encrypt(password: String, ivString: String = "abcdefghijklmnop") -> String { - let encryptData = self._crypt(data: object, password: password, ivString: ivString, option: CCOperation(kCCEncrypt)) - return encryptData.base64EncodedString() + + //编码 + func encodeString(encodeType: ZXKitUtilEncodeType) -> String? { + switch encodeType { + case .hex: + return object.map { String(format: "%02hhx", $0) }.joined() + case .base64: + return object.base64EncodedString() + case .system(let encode): + return String(data: object, encoding: encode) + } } - - //MARK: 加密 - func encryptString(encryType: ZXKitUtilEncryType, lowercase: Bool = true) -> String { + + ///hash计算 + func hashString(hashType: ZXKitUtilHashType, lowercase: Bool = true) -> String { var output = NSMutableString() - - switch encryType { - case .md5: - var digest = [UInt8](repeating: 0, count: Int(CC_MD5_DIGEST_LENGTH)) - _ = object.withUnsafeBytes { (messageBytes) -> Bool in - CC_MD5(messageBytes.baseAddress, CC_LONG(object.count), &digest) - return true - } + switch hashType { + case .md5: + var digest = [UInt8](repeating: 0, count: Int(CC_MD5_DIGEST_LENGTH)) + _ = object.withUnsafeBytes { (messageBytes) -> Bool in + CC_MD5(messageBytes.baseAddress, CC_LONG(object.count), &digest) + return true + } - output = NSMutableString(capacity: Int(CC_MD5_DIGEST_LENGTH)) - for byte in digest{ - output.appendFormat("%02x", byte) - } - case .sha1: - var digest = [UInt8](repeating: 0, count: Int(CC_SHA1_DIGEST_LENGTH)) - _ = object.withUnsafeBytes { (messageBytes) -> Bool in - CC_SHA1(messageBytes.baseAddress, CC_LONG(object.count), &digest) - return true - } + output = NSMutableString(capacity: Int(CC_MD5_DIGEST_LENGTH)) + for byte in digest{ + output.appendFormat("%02x", byte) + } + case .sha1: + var digest = [UInt8](repeating: 0, count: Int(CC_SHA1_DIGEST_LENGTH)) + _ = object.withUnsafeBytes { (messageBytes) -> Bool in + CC_SHA1(messageBytes.baseAddress, CC_LONG(object.count), &digest) + return true + } - output = NSMutableString(capacity: Int(CC_SHA1_DIGEST_LENGTH)) - for byte in digest{ - output.appendFormat("%02x", byte) - } - case .sha224: - var digest = [UInt8](repeating: 0, count: Int(CC_SHA224_DIGEST_LENGTH)) - _ = object.withUnsafeBytes { (messageBytes) -> Bool in - CC_SHA224(messageBytes.baseAddress, CC_LONG(object.count), &digest) - return true - } + output = NSMutableString(capacity: Int(CC_SHA1_DIGEST_LENGTH)) + for byte in digest{ + output.appendFormat("%02x", byte) + } + case .sha224: + var digest = [UInt8](repeating: 0, count: Int(CC_SHA224_DIGEST_LENGTH)) + _ = object.withUnsafeBytes { (messageBytes) -> Bool in + CC_SHA224(messageBytes.baseAddress, CC_LONG(object.count), &digest) + return true + } - output = NSMutableString(capacity: Int(CC_SHA224_DIGEST_LENGTH)) - for byte in digest{ - output.appendFormat("%02x", byte) - } - case .sha256: - var digest = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH)) - _ = object.withUnsafeBytes { (messageBytes) -> Bool in - CC_SHA256(messageBytes.baseAddress, CC_LONG(object.count), &digest) - return true - } + output = NSMutableString(capacity: Int(CC_SHA224_DIGEST_LENGTH)) + for byte in digest{ + output.appendFormat("%02x", byte) + } + case .sha256: + var digest = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH)) + _ = object.withUnsafeBytes { (messageBytes) -> Bool in + CC_SHA256(messageBytes.baseAddress, CC_LONG(object.count), &digest) + return true + } - output = NSMutableString(capacity: Int(CC_SHA256_DIGEST_LENGTH)) - for byte in digest{ - output.appendFormat("%02x", byte) - } - case .sha384: - var digest = [UInt8](repeating: 0, count: Int(CC_SHA384_DIGEST_LENGTH)) - _ = object.withUnsafeBytes { (messageBytes) -> Bool in - CC_SHA384(messageBytes.baseAddress, CC_LONG(object.count), &digest) - return true - } + output = NSMutableString(capacity: Int(CC_SHA256_DIGEST_LENGTH)) + for byte in digest{ + output.appendFormat("%02x", byte) + } + case .sha384: + var digest = [UInt8](repeating: 0, count: Int(CC_SHA384_DIGEST_LENGTH)) + _ = object.withUnsafeBytes { (messageBytes) -> Bool in + CC_SHA384(messageBytes.baseAddress, CC_LONG(object.count), &digest) + return true + } - output = NSMutableString(capacity: Int(CC_SHA384_DIGEST_LENGTH)) - for byte in digest{ - output.appendFormat("%02x", byte) - } - case .sha512: - var digest = [UInt8](repeating: 0, count: Int(CC_SHA512_DIGEST_LENGTH)) - _ = object.withUnsafeBytes { (messageBytes) -> Bool in - CC_SHA512(messageBytes.baseAddress, CC_LONG(object.count), &digest) - return true - } + output = NSMutableString(capacity: Int(CC_SHA384_DIGEST_LENGTH)) + for byte in digest{ + output.appendFormat("%02x", byte) + } + case .sha512: + var digest = [UInt8](repeating: 0, count: Int(CC_SHA512_DIGEST_LENGTH)) + _ = object.withUnsafeBytes { (messageBytes) -> Bool in + CC_SHA512(messageBytes.baseAddress, CC_LONG(object.count), &digest) + return true + } - output = NSMutableString(capacity: Int(CC_SHA512_DIGEST_LENGTH)) - for byte in digest{ - output.appendFormat("%02x", byte) - } - case .base64: - let base64Encoded:String = object.base64EncodedString() - output = NSMutableString (string: base64Encoded) + output = NSMutableString(capacity: Int(CC_SHA512_DIGEST_LENGTH)) + for byte in digest{ + output.appendFormat("%02x", byte) + } } - + if !lowercase { return String(output).uppercased() } return String(output) } + + /* + AES CBC加密 + model: CBC + padding: PKCS7Padding + AES block Size: 128 + **/ + func aesCBCEncrypt(password: String, ivString: String = "abcdefghijklmnop", encodeType: ZXKitUtilEncodeType = .base64) -> String? { + assert(ivString.count == kCCKeySizeAES128, "iv should be \(kCCKeySizeAES128) bytes") + assert(password.count == kCCKeySizeAES128 || password.count == kCCKeySizeAES192 || password.count == kCCKeySizeAES256, "Invalid key length. Available length is \(kCCKeySizeAES128) \(kCCKeySizeAES192) \(kCCKeySizeAES256)") + let encryptData = self._crypt(data: object, password: password, ivString: ivString, option: CCOperation(kCCEncrypt)) + return encryptData?.zx.encodeString(encodeType: encodeType) + } + + ///AES CBC解密 + func aesCBCDecrypt(password: String, ivString: String = "abcdefghijklmnop") -> String? { + assert(ivString.count == kCCKeySizeAES128, "iv should be \(kCCKeySizeAES128) bytes") + assert(password.count == kCCKeySizeAES128 || password.count == kCCKeySizeAES192 || password.count == kCCKeySizeAES256, "Invalid key length. Available length is \(kCCKeySizeAES128) \(kCCKeySizeAES192) \(kCCKeySizeAES256)") + guard let encryptData = self._crypt(data: object, password: password, ivString: ivString, option: CCOperation(kCCDecrypt)) else { + return nil + } + return String(data: encryptData, encoding: String.Encoding.utf8) + } + + /**deprecated*/ + @available(*, deprecated, message: "Use hashString(hashType: ZXKitUtilHashType, lowercase: Bool) instead") + func encryptString(encryType: ZXKitUtilHashType, lowercase: Bool = true) -> String { + return self.hashString(hashType: encryType, lowercase: lowercase) + } } -private extension ZXKitUtilNameSpace where T == Data { - func _crypt(data: Data, password: String, ivString: String, option: CCOperation) -> Data { - guard let iv = ivString.data(using:String.Encoding.utf8) else { return Data() } - guard let key = password.data(using:String.Encoding.utf8) else { return Data() } +#if canImport(CryptoKit) +@available(iOS 13.0, *) +public extension ZXKitUtilNameSpace where T == Data { + //AES GCM加密 + func aesGCMEncrypt(password: String, encodeType: ZXKitUtilEncodeType = .base64, nonce: AES.GCM.Nonce? = AES.GCM.Nonce()) -> String? { + assert(password.count == kCCKeySizeAES128 || password.count == kCCKeySizeAES192 || password.count == kCCKeySizeAES256, "Invalid key length. Available length is \(kCCKeySizeAES128) \(kCCKeySizeAES192) \(kCCKeySizeAES256)") + return self.aesGCMEncrypt(key: SymmetricKey.init(data: password.data(using:String.Encoding.utf8)!), encodeType: encodeType, nonce: nonce) + } + + ///AES GCM加密 + func aesGCMEncrypt(key: SymmetricKey, encodeType: ZXKitUtilEncodeType = .base64, nonce: AES.GCM.Nonce? = AES.GCM.Nonce()) -> String? { + assert(key.bitCount / 8 == kCCKeySizeAES128 || key.bitCount / 8 == kCCKeySizeAES192 || key.bitCount / 8 == kCCKeySizeAES256, "Invalid key length. Available length is \(kCCKeySizeAES128) \(kCCKeySizeAES192) \(kCCKeySizeAES256)") + guard let sealedBox = try? AES.GCM.seal(object, using: key, nonce: nonce) else { return nil } + guard let encode = sealedBox.combined else { return nil } + return encode.zx.encodeString(encodeType: encodeType) + } + //AES GCM解密 + func aesGCMDecrypt(password: String) -> String? { + assert(password.count == kCCKeySizeAES128 || password.count == kCCKeySizeAES192 || password.count == kCCKeySizeAES256, "Invalid key length. Available length is \(kCCKeySizeAES128) \(kCCKeySizeAES192) \(kCCKeySizeAES256)") + let key = SymmetricKey.init(data: password.data(using:String.Encoding.utf8)!) + return self.aesGCMDecrypt(key: key) + } + + //AES GCM解密 + func aesGCMDecrypt(key: SymmetricKey) -> String? { + assert(key.bitCount / 8 == kCCKeySizeAES128 || key.bitCount / 8 == kCCKeySizeAES192 || key.bitCount / 8 == kCCKeySizeAES256, "Invalid key length. Available length is \(kCCKeySizeAES128) \(kCCKeySizeAES192) \(kCCKeySizeAES256)") + guard let sealedBox = try? AES.GCM.SealedBox.init(combined: object) else { return nil } + guard let decry = try? AES.GCM.open(sealedBox, using: key) else { return nil } + return String(decoding: decry, as: UTF8.self) + } + + ///HMAC计算 + func hmac(hashType: ZXKitUtilHashType, password: String, encodeType: ZXKitUtilEncodeType = .base64) -> String? { + let key = SymmetricKey.init(data: password.data(using:String.Encoding.utf8)!) + return self.hmac(hashType: hashType, key: key, encodeType: encodeType) + } + ///HMAC计算 + func hmac(hashType: ZXKitUtilHashType, key: SymmetricKey, encodeType: ZXKitUtilEncodeType = .base64) -> String? { + switch hashType { + case .md5: + let sign = HMAC.authenticationCode(for: object, using: key) + return Data(sign).zx.encodeString(encodeType: encodeType) + case .sha1: + let sign = HMAC.authenticationCode(for: object, using: key) + return Data(sign).zx.encodeString(encodeType: encodeType) + case .sha224: + assert(false, "unsupported hash type") + return nil + case .sha256: + let sign = HMAC.authenticationCode(for: object, using: key) + return Data(sign).zx.encodeString(encodeType: encodeType) + case .sha384: + let sign = HMAC.authenticationCode(for: object, using: key) + return Data(sign).zx.encodeString(encodeType: encodeType) + case .sha512: + let sign = HMAC.authenticationCode(for: object, using: key) + return Data(sign).zx.encodeString(encodeType: encodeType) + } + } +} +#endif + +private extension ZXKitUtilNameSpace where T == Data { + func _crypt(data: Data, password: String, ivString: String, option: CCOperation) -> Data? { + guard let iv = ivString.data(using:String.Encoding.utf8) else { return nil } + guard let key = password.data(using:String.Encoding.utf8) else { return nil } + let cryptLength = data.count + kCCBlockSizeAES128 var cryptData = Data(count: cryptLength) - let keyLength = kCCKeySizeAES256 + let keyLength = key.count let options = CCOptions(kCCOptionPKCS7Padding) var bytesLength = Int(0) @@ -154,10 +264,12 @@ private extension ZXKitUtilNameSpace where T == Data { } guard UInt32(status) == UInt32(kCCSuccess) else { - return Data() + return nil } cryptData.removeSubrange(bytesLength.. String? { - guard let dataEncode = object.data(using: String.Encoding.nonLossyASCII) else { return nil } - let unicodeStr = String(data: dataEncode, encoding: String.Encoding.utf8) - return unicodeStr + return self.encodeString(from: .system(.nonLossyASCII), to: .system(.utf8)) } - - ///base64解码 - func base64Decode(lowercase: Bool = true) -> String? { - let decodeData = Data(base64Encoded: object) - return decodeData?.zx.base64Decode(lowercase: lowercase) - } - - ///aes256解密 - func aes256Decrypt(password: String, ivString: String = "abcdefghijklmnop") -> String? { - let data = Data(base64Encoded: object) - return data?.zx.aes256Decrypt(password: password, ivString: ivString) + + /// 字符串转格式 + /// - Parameters: + /// - originType: 字符串原来的编码格式 + /// - encodeType: 即将转换的编码格式 + /// - Returns: 转换成功的新字符串 + func encodeString(from originType: ZXKitUtilEncodeType = .system(.utf8), to encodeType: ZXKitUtilEncodeType) -> String? { + let data = Data.zx.data(from: object, encodeType: originType) + return data?.zx.encodeString(encodeType: encodeType) } - ///aes256加密 - func aes256Encrypt(password: String, ivString: String = "abcdefghijklmnop") -> String? { + /* + AES加密 + model: CBC + padding: PKCS7Padding + AES block Size: 128 + **/ + func aesCBCEncrypt(password: String, ivString: String = "abcdefghijklmnop", encodeType: ZXKitUtilEncodeType = .base64) -> String? { let data = object.data(using:String.Encoding.utf8) - return data?.zx.aes256Encrypt(password: password, ivString: ivString) + return data?.zx.aesCBCEncrypt(password: password, ivString: ivString, encodeType: encodeType) } + ///aes CBC解密 + func aesCBCDecrypt(password: String, ivString: String = "abcdefghijklmnop", encodeType: ZXKitUtilEncodeType = .base64) -> String? { + let data = Data.zx.data(from: object, encodeType: encodeType) + return data?.zx.aesCBCDecrypt(password: password, ivString: ivString) + } + //MARK: 加密 - func encryptString(encryType: ZXKitUtilEncryType, lowercase: Bool = true) -> String? { + func hashString(hashType: ZXKitUtilHashType, lowercase: Bool = true) -> String? { let data = object.data(using: String.Encoding.utf8) - return data?.zx.encryptString(encryType: encryType, lowercase: lowercase) + return data?.zx.hashString(hashType: hashType, lowercase: lowercase) + } + + + @available(*, deprecated, message: "Use hashString(hashType: ZXKitUtilHashType, lowercase: Bool) instead") + func encryptString(encryType: ZXKitUtilHashType, lowercase: Bool = true) -> String? { + return self.hashString(hashType: encryType, lowercase: lowercase) + } +} + +#if canImport(CryptoKit) +@available(iOS 13.0, *) +public extension ZXKitUtilNameSpace where T == String { + /* + AES加密 + model: GCM + **/ + func aesGCMEncrypt(password: String, encodeType: ZXKitUtilEncodeType = .base64, nonce: AES.GCM.Nonce? = AES.GCM.Nonce()) -> String? { + let data = object.data(using:String.Encoding.utf8) + return data?.zx.aesGCMEncrypt(password: password, encodeType: encodeType, nonce: nonce) + } + + /* + AES加密 + model: GCM + **/ + func aesGCMEncrypt(key: SymmetricKey, encodeType: ZXKitUtilEncodeType = .base64, nonce: AES.GCM.Nonce? = AES.GCM.Nonce()) -> String? { + let data = object.data(using:String.Encoding.utf8) + return data?.zx.aesGCMEncrypt(key: key, encodeType: encodeType, nonce: nonce) + } + + /* + AES解密 + model: GCM + **/ + func aesGCMDecrypt(password: String, encodeType: ZXKitUtilEncodeType = .base64) -> String? { + let data = Data.zx.data(from: object, encodeType: encodeType) + return data?.zx.aesGCMDecrypt(password: password) + } + + /* + AES解密 + model: GCM + **/ + func aesGCMDecrypt(key: SymmetricKey, encodeType: ZXKitUtilEncodeType = .base64) -> String? { + let data = Data.zx.data(from: object, encodeType: encodeType) + return data?.zx.aesGCMDecrypt(key: key) + } + + ///HMAC计算 + func hmac(hashType: ZXKitUtilHashType, password: String, encodeType: ZXKitUtilEncodeType = .base64) -> String? { + let data = object.data(using:String.Encoding.utf8) + return data?.zx.hmac(hashType: hashType, password: password, encodeType: encodeType) + } + + ///HMAC计算 + func hmac(hashType: ZXKitUtilHashType, key: SymmetricKey, encodeType: ZXKitUtilEncodeType = .base64) -> String? { + let data = object.data(using:String.Encoding.utf8) + return data?.zx.hmac(hashType: hashType, key: key, encodeType: encodeType) } } +#endif diff --git a/example/Pods/ZXKitUtil/pod/extend/UIImage+zx.swift b/example/Pods/ZXKitUtil/pod/extend/UIImage+zx.swift index 6a6f848..30a6011 100644 --- a/example/Pods/ZXKitUtil/pod/extend/UIImage+zx.swift +++ b/example/Pods/ZXKitUtil/pod/extend/UIImage+zx.swift @@ -14,8 +14,8 @@ extension UIImage: ZXKitUtilNameSpaceWrappable { public extension ZXKitUtilNameSpace where T : UIImage { ///通过颜色获取纯色图片 - static func getImage(color: UIColor) -> UIImage { - return ZXKitUtil.shared.getImage(color: color) + static func getImage(color: UIColor, size: CGSize = CGSize(width: 1, height: 1)) -> UIImage { + return ZXKitUtil.shared.getImage(color: color, size: size) } ///线性渐变 @@ -27,4 +27,85 @@ public extension ZXKitUtilNameSpace where T : UIImage { static func getRadialGradientImage(colors: [UIColor], raduis: CGFloat, size: CGSize = CGSize(width: 100, height: 100)) -> UIImage { return ZXKitUtil.shared.getRadialGradientImage(colors: colors, raduis: raduis, size: size) } + + ///通过view专为图片 + static func getImage(view: UIView) -> UIImage? { + if view is UIScrollView { + return self._getImage(scrollView: view as! UIScrollView) + } else { + return self._getImage(view: view) + } + } + + ///合成两张图片合成 + static func combineImage(bgImage: UIImage, frontImage: UIImage?, frontPosition: CGPoint = CGPoint(x: 0, y: 0), frontSize: CGSize = CGSize.zero, bounderWidth: CGFloat = 0, bounderColor: UIColor = UIColor.clear) -> UIImage? { + //生成图片大小,如果为0,就根据图片判断 + let frontImageWidth = frontSize.width == 0 ? frontImage?.size.width ?? 0 : frontSize.width + let frontImageHeight = frontSize.height == 0 ? frontImage?.size.height ?? 0 : frontSize.height + + let imageSize = CGSize(width: max(bgImage.size.width, frontImageWidth) + bounderWidth * 2, height: max(bgImage.size.height, frontImageHeight) + bounderWidth * 2) + + UIGraphicsBeginImageContextWithOptions(imageSize, false, 0); + let context = UIGraphicsGetCurrentContext(); + if let imageContext = context { + //画背景色 + imageContext.addRect(CGRect(x: 0, y: 0, width: imageSize.width, height: imageSize.height)); + bounderColor.set() + imageContext.fillPath() + //背景图片 + bgImage.draw(in: CGRect(x: bounderWidth, y: bounderWidth, width: bgImage.size.width, height: bgImage.size.height)) + //前面的图 + if let frontImg = frontImage { + let drwqF = CGRect(x: frontPosition.x + bounderWidth, y: frontPosition.y + bounderWidth, width: frontImageWidth, height: frontImageHeight) + frontImg.draw(in: drwqF) + } + let image = UIGraphicsGetImageFromCurrentImageContext();//返回一个基于当前图形上下文的图片 + UIGraphicsEndImageContext(); + return image; + } else { + return nil + } + } + +} + +private extension ZXKitUtilNameSpace where T : UIImage { + static func _getImage(view: UIView) -> UIImage? { + view.layoutIfNeeded() + UIGraphicsBeginImageContextWithOptions(view.bounds.size, false, 0) + let context = UIGraphicsGetCurrentContext(); + if let imageContext = context { + view.layer.render(in: imageContext) + let image = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + view.layer.contents = nil; + return image; + } else { + return nil + } + } + + static func _getImage(scrollView: UIScrollView) -> UIImage? { + scrollView.layoutIfNeeded() + //备份位置和父类 + let backupFrame = scrollView.frame + let backupContentOffset = scrollView.contentOffset + let backupSuperView = scrollView.superview + + scrollView.contentOffset = CGPoint.zero + + scrollView.frame = CGRect(x: 0, y:0, width: max(scrollView.contentSize.width, backupFrame.size.width), height: max(scrollView.contentSize.height, backupFrame.size.height)) + + let tempSuperView = UIView(frame: CGRect(origin: CGPoint.zero, size: scrollView.frame.size)) + scrollView.removeFromSuperview() + tempSuperView.addSubview(scrollView) + + let image = self.getImage(view: tempSuperView) + + scrollView.removeFromSuperview() + backupSuperView?.addSubview(scrollView) + scrollView.contentOffset = backupContentOffset + + return image + } } diff --git a/example/Pods/ZXKitUtil/pod/extend/UIView+zx.swift b/example/Pods/ZXKitUtil/pod/extend/UIView+zx.swift index efe7761..202e8ab 100644 --- a/example/Pods/ZXKitUtil/pod/extend/UIView+zx.swift +++ b/example/Pods/ZXKitUtil/pod/extend/UIView+zx.swift @@ -45,4 +45,12 @@ public extension ZXKitUtilNameSpace where T : UIView { object.frame = CGRect(x: frame.origin.x, y: frame.origin.y, width: frame.size.width, height: height) } } + + func className() -> String { + return String("\(type(of: object))") + } + + static func className() -> String { + return String("\(classObject.self)") + } } diff --git a/example/Pods/ZXKitUtil/pod/extend/ZXKitNameSpace.swift b/example/Pods/ZXKitUtil/pod/extend/ZXKitNameSpace.swift index 7c6ad62..c81ce05 100644 --- a/example/Pods/ZXKitUtil/pod/extend/ZXKitNameSpace.swift +++ b/example/Pods/ZXKitUtil/pod/extend/ZXKitNameSpace.swift @@ -8,14 +8,6 @@ import Foundation -public struct ZXKitUtilNameSpace { - let object: T //存储的实例对象 - - internal init(object: T) { - self.object = object - } -} - //实现命名空间需遵守的协议 public protocol ZXKitUtilNameSpaceWrappable { associatedtype WrapperType @@ -23,6 +15,15 @@ public protocol ZXKitUtilNameSpaceWrappable { static var zx: WrapperType.Type { get } } +public struct ZXKitUtilNameSpace { + let object: T //存储的实例对象 + static var classObject: T.Type { + return T.self + } + internal init(object: T) { + self.object = object + } +} //协议默认的实现方式 public extension ZXKitUtilNameSpaceWrappable { diff --git a/example/Pods/netfox/README.md b/example/Pods/netfox/README.md index 9ad7329..fd1cc05 100644 --- a/example/Pods/netfox/README.md +++ b/example/Pods/netfox/README.md @@ -1,7 +1,9 @@ -![Netfox: A lightweight, one line setup, network debugging library](https://raw.githubusercontent.com/kasketis/netfox/master/netfox-logo.png) +

+ +

-Version +Version CI Status Cocoapods Compatible Carthage Compatible @@ -9,12 +11,15 @@ License

+ Netfox provides a quick look on all executed network requests performed by your iOS or OSX app. It grabs all requests - of course yours, requests from 3rd party libraries (such as AFNetworking, Alamofire or else), UIWebViews, and more Very useful and handy for network related issues and bugs -Supports Swift 4 and above - bridged also for Objective-C. +Supports Swift 5 and above - bridged also for Objective-C. + +For Swift 4 support, use version [1.19.0](https://github.com/kasketis/netfox/releases/tag/1.19.0). For Swift 3.2 support, use version [1.12.1](https://github.com/kasketis/netfox/releases/tag/1.12.1). @@ -26,6 +31,14 @@ Feel free to contribute :) ## Installation +### SPM (beta, only iOS) + +The [Swift Package Manager](https://swift.org/package-manager/) is a tool for automating the distribution of Swift code and is integrated into the `swift` compiler. + +To add `netfox` as a package dependency to your Xcode project, select `File > Add Packages` and enter as repository URL the `https://github.com/kasketis/netfox` (always choose the latest release) + +For more info, please check [here](https://developer.apple.com/documentation/swift_packages/adding_package_dependencies_to_your_app) + ### CocoaPods [CocoaPods](http://cocoapods.org) is a dependency manager for Cocoa projects. To integrate netfox into your Xcode project using CocoaPods, specify it in your `Podfile`: @@ -49,8 +62,6 @@ pod 'netfox', :configurations => ['Debug', 'Test']
 github "kasketis/netfox"
 
- - ### Manually If you prefer not to use dependency managers, you can integrate netfox into your project manually. diff --git a/example/Pods/netfox/netfox/Core/NFX.swift b/example/Pods/netfox/netfox/Core/NFX.swift index 66d4510..eaf2eab 100755 --- a/example/Pods/netfox/netfox/Core/NFX.swift +++ b/example/Pods/netfox/netfox/Core/NFX.swift @@ -20,143 +20,153 @@ private func podPlistVersion() -> String? { // TODO: Carthage support let nfxVersion = podPlistVersion() ?? "0" -// Notifications posted when NFX opens/closes, for client application that wish to log that information. -let nfxWillOpenNotification = "NFXWillOpenNotification" -let nfxWillCloseNotification = "NFXWillCloseNotification" - @objc -open class NFX: NSObject -{ +open class NFX: NSObject { + + // MARK: - Properties #if os(OSX) var windowController: NFXWindowController? let mainMenu: NSMenu? = NSApp.mainMenu?.items[1].submenu var nfxMenuItem: NSMenuItem = NSMenuItem(title: "netfox", action: #selector(NFX.show), keyEquivalent: String.init(describing: (character: NSF9FunctionKey, length: 1))) #endif + #if os(iOS) + fileprivate var navigationViewController: UINavigationController? + #endif + + fileprivate enum Constants: String { + case alreadyStartedMessage = "Already started!" + case alreadyStoppedMessage = "Already stopped!" + case startedMessage = "Started!" + case stoppedMessage = "Stopped!" + case nibName = "NetfoxWindow" + } + + fileprivate var started: Bool = false + fileprivate var presented: Bool = false + fileprivate var enabled: Bool = false + fileprivate var selectedGesture: ENFXGesture = .shake + fileprivate var ignoredURLs = [String]() + fileprivate var ignoredURLsRegex = [NSRegularExpression]() + fileprivate var lastVisitDate: Date = Date() + + internal var cacheStoragePolicy = URLCache.StoragePolicy.notAllowed + // swiftSharedInstance is not accessible from ObjC - class var swiftSharedInstance: NFX - { - struct Singleton - { + class var swiftSharedInstance: NFX { + struct Singleton { static let instance = NFX() } return Singleton.instance } // the sharedInstance class method can be reached from ObjC - @objc open class func sharedInstance() -> NFX - { + @objc open class func sharedInstance() -> NFX { return NFX.swiftSharedInstance } - @objc public enum ENFXGesture: Int - { + @objc public enum ENFXGesture: Int { case shake case custom } - - fileprivate var started: Bool = false - fileprivate var presented: Bool = false - fileprivate var enabled: Bool = false - fileprivate var selectedGesture: ENFXGesture = .shake - fileprivate var ignoredURLs = [String]() - fileprivate var filters = [Bool]() - fileprivate var lastVisitDate: Date = Date() - internal var cacheStoragePolicy = URLCache.StoragePolicy.notAllowed - @objc open func start() - { - guard !self.started else { - showMessage("Already started!") + @objc open func start() { + guard !started else { + showMessage(Constants.alreadyStartedMessage.rawValue) return } - self.started = true + started = true + URLSessionConfiguration.implementNetfox() register() enable() - clearOldData() - showMessage("Started!") - #if os(OSX) - self.addNetfoxToMainMenu() - #endif + fileStorageInit() + showMessage(Constants.startedMessage.rawValue) + #if os(OSX) + addNetfoxToMainMenu() + #endif } - @objc open func stop() - { + @objc open func stop() { + guard started else { + showMessage(Constants.alreadyStoppedMessage.rawValue) + return + } + unregister() disable() clearOldData() - self.started = false - showMessage("Stopped!") - #if os(OSX) - self.removeNetfoxFromMainmenu() - #endif + started = false + showMessage(Constants.stoppedMessage.rawValue) + #if os(OSX) + removeNetfoxFromMainmenu() + #endif } fileprivate func showMessage(_ msg: String) { print("netfox \(nfxVersion) - [https://github.com/kasketis/netfox]: \(msg)") } - internal func isEnabled() -> Bool - { - return self.enabled + internal func isEnabled() -> Bool { + return enabled } - internal func enable() - { - self.enabled = true + internal func enable() { + enabled = true } - internal func disable() - { - self.enabled = false + internal func disable() { + enabled = false } - fileprivate func register() - { + fileprivate func register() { URLProtocol.registerClass(NFXProtocol.self) } - fileprivate func unregister() - { + fileprivate func unregister() { URLProtocol.unregisterClass(NFXProtocol.self) } - @objc func motionDetected() - { - guard self.started else { return } + @objc func motionDetected() { + guard started else { return } toggleNFX() } @objc open func isStarted() -> Bool { - return self.started + return started } @objc open func setCachePolicy(_ policy: URLCache.StoragePolicy) { cacheStoragePolicy = policy } - @objc open func setGesture(_ gesture: ENFXGesture) - { - self.selectedGesture = gesture - #if os(OSX) + @objc open func setGesture(_ gesture: ENFXGesture) { + selectedGesture = gesture + #if os(OSX) if gesture == .shake { - self.addNetfoxToMainMenu() + addNetfoxToMainMenu() } else { - self.removeNetfoxFromMainmenu() + removeNetfoxFromMainmenu() } - #endif + #endif } - @objc open func show() - { - guard self.started else { return } + @objc open func show() { + guard started else { return } showNFX() } - @objc open func hide() - { - guard self.started else { return } + #if os(iOS) + @objc open func show(on rootViewController: UIViewController) { + guard started, presented == false else { return } + + showNFX(on: rootViewController) + presented = true + } + #endif + + @objc open func hide() { + guard started else { return } hideNFX() } @@ -166,82 +176,77 @@ open class NFX: NSObject toggleNFX() } - @objc open func ignoreURL(_ url: String) - { - self.ignoredURLs.append(url) + @objc open func ignoreURL(_ url: String) { + ignoredURLs.append(url) } - internal func getLastVisitDate() -> Date - { - return self.lastVisitDate + @objc open func getSessionLog() -> Data? { + return try? Data(contentsOf: NFXPath.sessionLogURL) } - fileprivate func showNFX() - { - if self.presented { + @objc open func ignoreURLs(_ urls: [String]) { + ignoredURLs.append(contentsOf: urls) + } + + @objc open func ignoreURLsWithRegex(_ regex: String) { + ignoredURLsRegex.append(NSRegularExpression(regex)) + } + + @objc open func ignoreURLsWithRegexes(_ regexes: [String]) { + ignoredURLsRegex.append(contentsOf: regexes.map { NSRegularExpression($0) }) + } + + internal func getLastVisitDate() -> Date { + return lastVisitDate + } + + fileprivate func showNFX() { + if presented { return } - self.showNFXFollowingPlatform() - self.presented = true - + showNFXFollowingPlatform() + presented = true } - fileprivate func hideNFX() - { - if !self.presented { + fileprivate func hideNFX() { + if !presented { return } - NotificationCenter.default.post(name: Notification.Name.NFXDeactivateSearch, object: nil) - self.hideNFXFollowingPlatform { () -> Void in + hideNFXFollowingPlatform { () -> Void in self.presented = false self.lastVisitDate = Date() } } - fileprivate func toggleNFX() - { - self.presented ? hideNFX() : showNFX() + fileprivate func toggleNFX() { + presented ? hideNFX() : showNFX() } - internal func clearOldData() - { - NFXHTTPModelManager.sharedInstance.clear() - do { - let documentsPath = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.allDomainsMask, true).first! - let filePathsArray = try FileManager.default.subpathsOfDirectory(atPath: documentsPath) - for filePath in filePathsArray { - if filePath.hasPrefix("nfx") { - try FileManager.default.removeItem(atPath: (documentsPath as NSString).appendingPathComponent(filePath)) - } - } - - try FileManager.default.removeItem(atPath: NFXPath.SessionLog) - } catch {} + private func fileStorageInit() { + clearOldData() + NFXPath.deleteOldNFXLogs() + NFXPath.createNFXDirIfNotExist() } - func getIgnoredURLs() -> [String] - { - return self.ignoredURLs + internal func clearOldData() { + NFXHTTPModelManager.shared.clear() + + NFXPath.deleteNFXDir() + NFXPath.createNFXDirIfNotExist() } - func getSelectedGesture() -> ENFXGesture - { - return self.selectedGesture + func getIgnoredURLs() -> [String] { + return ignoredURLs } - func cacheFilters(_ selectedFilters: [Bool]) - { - self.filters = selectedFilters + func getIgnoredURLsRegexes() -> [NSRegularExpression] { + return ignoredURLsRegex } - func getCachedFilters() -> [Bool] - { - if self.filters.count == 0 { - self.filters = [Bool](repeating: true, count: HTTPModelShortType.allValues.count) - } - return self.filters + func getSelectedGesture() -> ENFXGesture { + return selectedGesture } } @@ -250,15 +255,18 @@ open class NFX: NSObject extension NFX { fileprivate var presentingViewController: UIViewController? { - var rootViewController = UIApplication.shared.keyWindow?.rootViewController + var rootViewController = UIWindow.keyWindow?.rootViewController while let controller = rootViewController?.presentedViewController { rootViewController = controller } return rootViewController } - fileprivate func showNFXFollowingPlatform() - { + fileprivate func showNFXFollowingPlatform() { + showNFX(on: presentingViewController) + } + + fileprivate func showNFX(on rootViewController: UIViewController?) { let navigationController = UINavigationController(rootViewController: NFXListController_iOS()) navigationController.navigationBar.isTranslucent = false navigationController.navigationBar.tintColor = UIColor.NFXOrangeColor() @@ -266,19 +274,29 @@ extension NFX { navigationController.navigationBar.titleTextAttributes = [.foregroundColor: UIColor.NFXOrangeColor()] if #available(iOS 13.0, *) { + let appearence = UINavigationBarAppearance() + + appearence.configureWithOpaqueBackground() + appearence.backgroundColor = UIColor.NFXStarkWhiteColor() + appearence.titleTextAttributes = [.foregroundColor: UIColor.black] + + navigationController.navigationBar.standardAppearance = appearence + navigationController.navigationBar.scrollEdgeAppearance = appearence + + if #available(iOS 15.0, *) { + navigationController.navigationBar.compactScrollEdgeAppearance = appearence + } + navigationController.presentationController?.delegate = self } - - presentingViewController?.present(navigationController, animated: true, completion: nil) + + rootViewController?.present(navigationController, animated: true, completion: nil) + navigationViewController = navigationController } - fileprivate func hideNFXFollowingPlatform(_ completion: (() -> Void)?) - { - presentingViewController?.dismiss(animated: true, completion: { () -> Void in - if let notNilCompletion = completion { - notNilCompletion() - } - }) + fileprivate func hideNFXFollowingPlatform(_ completion: (() -> Void)?) { + navigationViewController?.presentingViewController?.dismiss(animated: true, completion: completion) + navigationViewController = nil } } @@ -296,49 +314,44 @@ extension NFX: UIAdaptivePresentationControllerDelegate { extension NFX { public func windowDidClose() { - self.presented = false + presented = false } private func setupNetfoxMenuItem() { - self.nfxMenuItem.target = self - self.nfxMenuItem.action = #selector(NFX.motionDetected) - self.nfxMenuItem.keyEquivalent = "n" - self.nfxMenuItem.keyEquivalentModifierMask = NSEvent.ModifierFlags(rawValue: UInt(Int(NSEvent.ModifierFlags.command.rawValue | NSEvent.ModifierFlags.shift.rawValue))) + nfxMenuItem.target = self + nfxMenuItem.action = #selector(NFX.motionDetected) + nfxMenuItem.keyEquivalent = "n" + nfxMenuItem.keyEquivalentModifierMask = NSEvent.ModifierFlags(rawValue: UInt(Int(NSEvent.ModifierFlags.command.rawValue | NSEvent.ModifierFlags.shift.rawValue))) } public func addNetfoxToMainMenu() { - self.setupNetfoxMenuItem() - if let menu = self.mainMenu { - menu.insertItem(self.nfxMenuItem, at: 0) + setupNetfoxMenuItem() + if let menu = mainMenu { + menu.insertItem(nfxMenuItem, at: 0) } } public func removeNetfoxFromMainmenu() { - if let menu = self.mainMenu { - menu.removeItem(self.nfxMenuItem) + if let menu = mainMenu { + menu.removeItem(nfxMenuItem) } } public func showNFXFollowingPlatform() { - if self.windowController == nil { - #if swift(>=4.2) - let nibName = "NetfoxWindow" - #else - let nibName = NSNib.Name(rawValue: "NetfoxWindow") - #endif + if windowController == nil { + let nibName = Constants.nibName.rawValue - self.windowController = NFXWindowController(windowNibName: nibName) + windowController = NFXWindowController(windowNibName: nibName) } - self.windowController?.showWindow(nil) + windowController?.showWindow(nil) } - public func hideNFXFollowingPlatform(completion: (() -> Void)?) - { - self.windowController?.close() + public func hideNFXFollowingPlatform(completion: (() -> Void)?) { + windowController?.close() if let notNilCompletion = completion { notNilCompletion() } } } - + #endif diff --git a/example/Pods/netfox/netfox/Core/NFXAssets.swift b/example/Pods/netfox/netfox/Core/NFXAssets.swift index cff3403..a29a396 100644 --- a/example/Pods/netfox/netfox/Core/NFXAssets.swift +++ b/example/Pods/netfox/netfox/Core/NFXAssets.swift @@ -14,10 +14,8 @@ enum NFXAssetName { case statistics } -class NFXAssets -{ - class func getImage(_ image: NFXAssetName) -> Data - { +class NFXAssets { + class func getImage(_ image: NFXAssetName) -> Data { let base64Image: String = { switch image { case .settings: return getSettingsImageBase64() @@ -30,23 +28,19 @@ class NFXAssets return Data(base64Encoded: base64Image, options: NSData.Base64DecodingOptions.ignoreUnknownCharacters) ?? Data() } - class func getSettingsImageBase64() -> String - { + class func getSettingsImageBase64() -> String { return "iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAjVBMVEUAAADsXijtXSfsXSftXijsXibsXSftXibtXSftXijtXSftXSXtXijtXijtXibtXSftXSfsXijsXSfuXSbsXijtXiftXSfuXSbtXijsXSjsXSjsXSjsXSftXSbsXSftXijtXibtXSftXSbuXSXtXSfsXifsXSftXibtXibsXSjtXSjtXSbtXyXtXibsXigoILJHAAAALnRSTlMA+wPDvSDAgdqtlhUH1GpRGOnIk/j0XS7vz6mkdR0PtJw7MguQZFl8VuzMRSaGMJ3GQwAAAi5JREFUOMulVdm2ojAQTEJYZRcQBBQVl+tS//95MwGDAQev50xeslWS7upONXlvfp4kNMkz8k1bo9A0D85XYC8/ELKh2jfYBb12R9LDPGa5ZP1gh1J0Nvb93F2WbIoFilU3CnAWnYmgm648wJ5iuQNaiU3eoy7g4rBPseRYq1gHhksuCZyTBli6WNItgAct6IW4HPbLklZgu0sBO9j0i5tgC8D4a7lAlwP4Id9Z2nf1wdXWkdQ/Xqsc/ic2fXCV2xSreewK6UKdZyjYLLjAacqdmguuO6KqnZy+YSuHuqlFkXbW5VzDbgK+Qm5WACwLQPVc2MMYY/UhpA1Sv2as9lM0w9XhAGTh7mjg1k9MGIsnQwZM6f022y2YeLW0IB7uE7LGz2Lg8wd1NwgjANQrKwL8XMvqEsqLj2RoR3m1fjqX1xwgSbFRbI+pQn9IY2VrUyRk9H3cyFLdtiKVb40SanwLNihJvJCpZoQzZrDQS4jw0z7/5qBpexQgxzZOX9Tps9SlWpt1fu6z34Jy2iuc3Ydwl8jfw70goxZ/SiT+IUXP4xSN31K0QTuf/M70S37QwRjHUTrTVJ8H3ylVdlmBgHxoJ+U7s8HgZkZkHDRMgh1wEcDdtZOvgypfsWDiwLFmqjAy4gNmEANePQjj7QH4hElhHGTDWCPKRAiMkeRmOdZSchU0eP30plLFXDekmKtok8gy0YzKBDHLeWULEcsC9FVpc2Vp+/+iOS3H9N/l+A8JizxgzuMcJQAAAABJRU5ErkJggg==" } - class func getCloseImageBase64() -> String - { + class func getCloseImageBase64() -> String { return "iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAYAAAAehFoBAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAfhJREFUeNrs2FFOwzAMANA2qrgAp+BUfFGkZZPaIcEV4Gfjo+WD7YdTcQoOgIYojuQgq2ppHLvdhhop6jZNy6vnuEnSpmmSc2rpDJ7B/xX8cX1lL9/e66EfgO+JADAGa2zTg1jCpYJrNXUEYcwtjr0OBsPdOai7QzslGrEF9B0YNsFgRC8Jup4Ym/d9zwzkl0O/QF+MGWn47U0INrhKINa6iONNqE06aA5bhmAHI9yTHpqRZmGDwSPl9JaLZYE7croWYl3O7jnY6CcdYheIt5HYV+i3XQ8OtQiTSFsfaVfkY7ExY5vY/xTRNUa4YmB3sVgRuD0R8RqCzSVjZgqz3ddlh27Ie3WsFriN/oR+h++fNLGaYI92WL/K+oJ+j/m90hpEE5yQyHq0KlY86Xraoef1SUb4EfoDRvaAj14a8ZMC+4VMOw3cZxcd1eOo4N9VVwu7RqyrHmnEY3wUMMXmAyUvkaJFYLqtGaizauhsAixFp7hg+o4td5kQy111WcT6iLPRRoKFxU/MqmuFlWQ5sGCSgwl2H4ml6Kidi2Fg6Vb8RqG6+CUp6wjBMLAlpoHKqotMRNZu3ASmQSnIWdUjBMM4PlLHxhwhmMBqkCcjN4L+cyL2HbdaYemSoH31KILBeJhcTolt7cYLuD6rHaQcs83gGXzu4B8BBgBA+BOxy8YHYQAAAABJRU5ErkJggg==" } - class func getInfoImageBase64() -> String - { + class func getInfoImageBase64() -> String { return "iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAb1BMVEUAAADsXijsXijsXCbtXCfsXijsXijsXijsXijsXifsXijsXifsXijsXijsXijsXSfsXijsXSjsXijsXijsXijsXijsXijsXifsXSjsXiftXSfsXijsXSfsXSbsXijsXijsXijsXijtXifsXSjsXihHY9oeAAAAJHRSTlMA+mMTBO/VUeM3CqHe9KwOmj/nx7ymmJF7a1s4MyabRN1nG4QDLG4nAAABaklEQVQ4y5WV626DMAyFHXInhDuMcm07v/8zTt0mNEiykvPT+mQ5ju0DR7FUD7moEWuRDzplEBadeoKEq7sQd8UJkn6iAbSQLdpmTWbKABidk7Wx2MrCx+oOeSkPmagsOXbaZW8KTeXUyCqD6naOfhA+puBROnLycQwZzBYIaMnQHPKioBAUFfgn941kO+ulM7LXrRVf4F8tXOnf/nY4whuN2P30W6I59aEyZjv1xKD8LqjlFRz1QPw8hSreUgCYsGTvYVbiBMB6K53Xb9vzHJO2Z5CShsIF0YanoHGFS1pRw0ASJ/6U8ukEEzJAzmdP3JNh5jkIRa/BVAmo7+wazLIaUMA1GARGwVFlRD0wrnUDSUKw+yka12vwitoZpBBMG5vuI+rC7ojuw+/A7vAH1+rhWSv/wm557lnYwClgRcHcUxBzZGLOV8xhjDm5Mcc82ibiDShsbeVubQHTtC/TzITIXqZpHdOMsOMvY4Ib6juEh/AAAAAASUVORK5CYII=" } - class func getStatisticsImageBase64() -> String - { + class func getStatisticsImageBase64() -> String { return "iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAflBMVEUAAADsXijsXijsXijsXijtXSfsXijsXSjsXijsXijsXSbsXijtXSjsXijsXifsXijsXiftXifsXifsXCfsXifsXifsXifsXifsXSftXSfsWyjsXijsXifsXifsXijtXifsXiftXybsXSfsXijtXSftXifsWibsXijuYCfsXijgd1NoAAAAKXRSTlMANNuwVBbuh/CUA9UG+t/QvCz0D+jYy3RKOQrlxqmOgGUgv7VvVwxbHXzMYTYAAAEjSURBVDjL7ZRJcoMwEEVlEgkhMU8GzOgp+fe/YChXxQSqK27vvPBbQfdbSD1IkMSxYONb6/Nta+n4B4XWZFjgCQTCZMciCWfZEUyctzzTDH3GlgfgSMmTCuXWlREQUXILbIcz0UijiZC/AiC4/FXNgOBMXdCckI4jEPvLYLdId1Q1pgOi+dZZhDRZjlASpfO7MsXZv32OCNxbdh9gT9U5BoLqN1orlNI0HnRNNiUHvCUsj8htiJOkO/gdlauMi3sRiXabTSc0ULFnI2kvLzaiLyjn1SeLKsdzb92OoA7DmooLClMURnDxAI/ruphxua4+HDTP9qAyazMFj+VK4zhGMmwXqplXdV7URsF96Mr7tjywe6jr8ndV6P+Ru0KuNrHoVukfuacsKwHjtUEAAAAASUVORK5CYII=" } diff --git a/example/Pods/netfox/netfox/Core/NFXDetailsController.swift b/example/Pods/netfox/netfox/Core/NFXDetailsController.swift index 3a7f00f..93740e9 100644 --- a/example/Pods/netfox/netfox/Core/NFXDetailsController.swift +++ b/example/Pods/netfox/netfox/Core/NFXDetailsController.swift @@ -29,20 +29,24 @@ fileprivate func > (lhs: T?, rhs: T?) -> Bool { class NFXDetailsController: NFXGenericController { - enum EDetailsView - { + enum EDetailsView { case info case request case response } + + private enum Constants: String { + case headersTitle = "-- Headers --\n\n" + case bodyTitle = "\n-- Body --\n\n" + case tooLongToShowTitle = "Too long to show. If you want to see it, please tap the following button\n" + } override func viewDidLoad() { super.viewDidLoad() // Do view setup here. } - func getInfoStringFromObject(_ object: NFXHTTPModel) -> NSAttributedString - { + func getInfoStringFromObject(_ object: NFXHTTPModel) -> NSAttributedString { var tempString: String tempString = String() @@ -62,12 +66,11 @@ class NFXDetailsController: NFXGenericController { return formatNFXString(tempString) } - func getRequestStringFromObject(_ object: NFXHTTPModel) -> NSAttributedString - { + func getRequestStringFromObject(_ object: NFXHTTPModel) -> NSAttributedString { var tempString: String tempString = String() - tempString += "-- Headers --\n\n" + tempString += Constants.headersTitle.rawValue if object.requestHeaders?.count > 0 { for (key, val) in (object.requestHeaders)! { @@ -84,19 +87,18 @@ class NFXDetailsController: NFXGenericController { } func getRequestBodyStringFooter(_ object: NFXHTTPModel) -> String { - var tempString = "\n-- Body --\n\n" + var tempString = Constants.bodyTitle.rawValue if (object.requestBodyLength == 0) { tempString += "Request body is empty\n" } else if (object.requestBodyLength > 1024) { - tempString += "Too long to show. If you want to see it, please tap the following button\n" + tempString += Constants.tooLongToShowTitle.rawValue } else { tempString += "\(object.getRequestBody())\n" } return tempString } - func getResponseStringFromObject(_ object: NFXHTTPModel) -> NSAttributedString - { + func getResponseStringFromObject(_ object: NFXHTTPModel) -> NSAttributedString { if (object.noResponse) { return NSMutableAttributedString(string: "No response") } @@ -104,7 +106,7 @@ class NFXDetailsController: NFXGenericController { var tempString: String tempString = String() - tempString += "-- Headers --\n\n" + tempString += Constants.headersTitle.rawValue if object.responseHeaders?.count > 0 { for (key, val) in object.responseHeaders! { @@ -122,11 +124,11 @@ class NFXDetailsController: NFXGenericController { } func getResponseBodyStringFooter(_ object: NFXHTTPModel) -> String { - var tempString = "\n-- Body --\n\n" + var tempString = Constants.bodyTitle.rawValue if (object.responseBodyLength == 0) { tempString += "Response body is empty\n" } else if (object.responseBodyLength > 1024) { - tempString += "Too long to show. If you want to see it, please tap the following button\n" + tempString += Constants.tooLongToShowTitle.rawValue } else { tempString += "\(object.getResponseBody())\n" } diff --git a/example/Pods/netfox/netfox/Core/NFXGenericBodyDetailsController.swift b/example/Pods/netfox/netfox/Core/NFXGenericBodyDetailsController.swift index 0225d18..0051698 100644 --- a/example/Pods/netfox/netfox/Core/NFXGenericBodyDetailsController.swift +++ b/example/Pods/netfox/netfox/Core/NFXGenericBodyDetailsController.swift @@ -7,18 +7,11 @@ import Foundation -enum NFXBodyType: Int -{ +enum NFXBodyType: Int { case request = 0 case response = 1 } -class NFXGenericBodyDetailsController: NFXGenericController -{ +class NFXGenericBodyDetailsController: NFXGenericController { var bodyType: NFXBodyType = NFXBodyType.response - - override func viewDidLoad() - { - super.viewDidLoad() - } } diff --git a/example/Pods/netfox/netfox/Core/NFXGenericController.swift b/example/Pods/netfox/netfox/Core/NFXGenericController.swift index 393e06f..642eb66 100755 --- a/example/Pods/netfox/netfox/Core/NFXGenericController.swift +++ b/example/Pods/netfox/netfox/Core/NFXGenericController.swift @@ -12,36 +12,34 @@ import UIKit import Cocoa #endif -class NFXGenericController: NFXViewController -{ +class NFXGenericController: NFXViewController { + var selectedModel: NFXHTTPModel = NFXHTTPModel() - override func viewDidLoad() - { + override func viewDidLoad() { super.viewDidLoad() - #if os(iOS) - self.edgesForExtendedLayout = UIRectEdge.all - self.view.backgroundColor = NFXColor.NFXGray95Color() - #elseif os(OSX) - self.view.wantsLayer = true - self.view.layer?.backgroundColor = NFXColor.NFXGray95Color().cgColor - #endif + + #if os(iOS) + edgesForExtendedLayout = UIRectEdge.all + view.backgroundColor = NFXColor.NFXGray95Color() + #elseif os(OSX) + view.wantsLayer = true + view.layer?.backgroundColor = NFXColor.NFXGray95Color().cgColor + #endif } - func selectedModel(_ model: NFXHTTPModel) - { - self.selectedModel = model + func selectedModel(_ model: NFXHTTPModel) { + selectedModel = model } - func formatNFXString(_ string: String) -> NSAttributedString - { + func formatNFXString(_ string: String) -> NSAttributedString { var tempMutableString = NSMutableAttributedString() tempMutableString = NSMutableAttributedString(string: string) - let l = string.count + let stringCount = string.count let regexBodyHeaders = try! NSRegularExpression(pattern: "(\\-- Body \\--)|(\\-- Headers \\--)", options: NSRegularExpression.Options.caseInsensitive) - let matchesBodyHeaders = regexBodyHeaders.matches(in: string, options: NSRegularExpression.MatchingOptions.withoutAnchoringBounds, range: NSMakeRange(0, l)) as Array + let matchesBodyHeaders = regexBodyHeaders.matches(in: string, options: NSRegularExpression.MatchingOptions.withoutAnchoringBounds, range: NSMakeRange(0, stringCount)) as Array for match in matchesBodyHeaders { tempMutableString.addAttribute(.font, value: NFXFont.NFXFontBold(size: 14), range: match.range) @@ -49,7 +47,7 @@ class NFXGenericController: NFXViewController } let regexKeys = try! NSRegularExpression(pattern: "\\[.+?\\]", options: NSRegularExpression.Options.caseInsensitive) - let matchesKeys = regexKeys.matches(in: string, options: NSRegularExpression.MatchingOptions.withoutAnchoringBounds, range: NSMakeRange(0, l)) as Array + let matchesKeys = regexKeys.matches(in: string, options: NSRegularExpression.MatchingOptions.withoutAnchoringBounds, range: NSMakeRange(0, stringCount)) as Array for match in matchesKeys { tempMutableString.addAttribute(.foregroundColor, value: NFXColor.NFXBlackColor(), range: match.range) @@ -61,7 +59,5 @@ class NFXGenericController: NFXViewController return tempMutableString } - @objc func reloadData() - { - } + @objc func reloadData() { } } diff --git a/example/Pods/netfox/netfox/Core/NFXHTTPModel.swift b/example/Pods/netfox/netfox/Core/NFXHTTPModel.swift index 8572ec9..bddf617 100755 --- a/example/Pods/netfox/netfox/Core/NFXHTTPModel.swift +++ b/example/Pods/netfox/netfox/Core/NFXHTTPModel.swift @@ -18,8 +18,7 @@ fileprivate func < (lhs: T?, rhs: T?) -> Bool { } -@objc public class NFXHTTPModel: NSObject -{ +@objc public class NFXHTTPModel: NSObject { @objc public var requestURL: String? @objc public var requestURLComponents: URLComponents? @objc public var requestURLQueryItems: [URLQueryItem]? @@ -42,175 +41,145 @@ fileprivate func < (lhs: T?, rhs: T?) -> Bool { public var timeInterval: Float? - @objc public var randomHash: NSString? + @objc public lazy var randomHash = UUID().uuidString + public var shortType = HTTPModelShortType.OTHER + @objc public var shortTypeString: String { return shortType.rawValue } - @objc public var shortType: NSString = HTTPModelShortType.OTHER.rawValue as NSString + @objc public var noResponse = true - @objc public var noResponse: Bool = true - - - - func saveRequest(_ request: URLRequest) - { - self.requestDate = Date() - self.requestTime = getTimeFromDate(self.requestDate!) - self.requestURL = request.getNFXURL() - self.requestURLComponents = request.getNFXURLComponents() - self.requestURLQueryItems = request.getNFXURLComponents()?.queryItems - self.requestMethod = request.getNFXMethod() - self.requestCachePolicy = request.getNFXCachePolicy() - self.requestTimeout = request.getNFXTimeout() - self.requestHeaders = request.getNFXHeaders() - self.requestType = requestHeaders?["Content-Type"] as! String? - self.requestCurl = request.getCurl() + func saveRequest(_ request: URLRequest) { + requestDate = Date() + requestTime = getTimeFromDate(requestDate!) + requestURL = request.getNFXURL() + requestURLComponents = request.getNFXURLComponents() + requestURLQueryItems = request.getNFXURLComponents()?.queryItems + requestMethod = request.getNFXMethod() + requestCachePolicy = request.getNFXCachePolicy() + requestTimeout = request.getNFXTimeout() + requestHeaders = request.getNFXHeaders() + requestType = requestHeaders?["Content-Type"] as! String? + requestCurl = request.getCurl() } - func saveRequestBody(_ request: URLRequest) - { + func saveRequestBody(_ request: URLRequest) { saveRequestBodyData(request.getNFXBody()) } - func logRequest(_ request: URLRequest) - { - formattedRequestLogEntry().appendToFile(filePath: NFXPath.SessionLog) + func logRequest(_ request: URLRequest) { + formattedRequestLogEntry().appendToFileURL(NFXPath.sessionLogURL) } - func saveErrorResponse() - { - self.responseDate = Date() + func saveErrorResponse() { + responseDate = Date() } - func saveResponse(_ response: URLResponse, data: Data) - { - self.noResponse = false - - self.responseDate = Date() - self.responseTime = getTimeFromDate(self.responseDate!) - self.responseStatus = response.getNFXStatus() - self.responseHeaders = response.getNFXHeaders() + func saveResponse(_ response: URLResponse, data: Data) { + noResponse = false + responseDate = Date() + responseTime = getTimeFromDate(responseDate!) + responseStatus = response.getNFXStatus() + responseHeaders = response.getNFXHeaders() let headers = response.getNFXHeaders() if let contentType = headers["Content-Type"] as? String { - self.responseType = contentType.components(separatedBy: ";")[0] - self.shortType = getShortTypeFrom(self.responseType!).rawValue as NSString + let responseType = contentType.components(separatedBy: ";")[0] + shortType = HTTPModelShortType(contentType: responseType) + self.responseType = responseType } - self.timeInterval = Float(self.responseDate!.timeIntervalSince(self.requestDate!)) + timeInterval = Float(responseDate!.timeIntervalSince(requestDate!)) saveResponseBodyData(data) - formattedResponseLogEntry().appendToFile(filePath: NFXPath.SessionLog) + formattedResponseLogEntry().appendToFileURL(NFXPath.sessionLogURL) } - - func saveRequestBodyData(_ data: Data) - { - let tempBodyString = NSString.init(data: data, encoding: String.Encoding.utf8.rawValue) + func saveRequestBodyData(_ data: Data) { + let tempBodyString = String.init(data: data, encoding: String.Encoding.utf8) self.requestBodyLength = data.count if (tempBodyString != nil) { - saveData(tempBodyString!, toFile: getRequestBodyFilepath()) + saveData(tempBodyString!, to: getRequestBodyFileURL()) } } - func saveResponseBodyData(_ data: Data) - { - var bodyString: NSString? + func saveResponseBodyData(_ data: Data) { + var bodyString: String? - if self.shortType as String == HTTPModelShortType.IMAGE.rawValue { - bodyString = data.base64EncodedString(options: .endLineWithLineFeed) as NSString? + if shortType == .IMAGE { + bodyString = data.base64EncodedString(options: .endLineWithLineFeed) } else { - if let tempBodyString = NSString.init(data: data, encoding: String.Encoding.utf8.rawValue) { + if let tempBodyString = String(data: data, encoding: String.Encoding.utf8) { bodyString = tempBodyString } } - if (bodyString != nil) { - self.responseBodyLength = data.count - saveData(bodyString!, toFile: getResponseBodyFilepath()) + if let bodyString = bodyString { + responseBodyLength = data.count + saveData(bodyString, to: getResponseBodyFileURL()) } } - fileprivate func prettyOutput(_ rawData: Data, contentType: String? = nil) -> NSString - { - if let contentType = contentType { - let shortType = getShortTypeFrom(contentType) - if let output = prettyPrint(rawData, type: shortType) { - return output as NSString - } + fileprivate func prettyOutput(_ rawData: Data, contentType: String? = nil) -> String { + guard let contentType = contentType, + let output = prettyPrint(rawData, type: .init(contentType: contentType)) + else { + return String(data: rawData, encoding: String.Encoding.utf8) ?? "" } - return NSString(data: rawData, encoding: String.Encoding.utf8.rawValue) ?? "" + + return output } - @objc public func getRequestBody() -> NSString - { - guard let data = readRawData(getRequestBodyFilepath()) else { + @objc public func getRequestBody() -> String { + guard let data = readRawData(from: getRequestBodyFileURL()) else { return "" } return prettyOutput(data, contentType: requestType) } - @objc public func getResponseBody() -> NSString - { - guard let data = readRawData(getResponseBodyFilepath()) else { + @objc public func getResponseBody() -> String { + guard let data = readRawData(from: getResponseBodyFileURL()) else { return "" } return prettyOutput(data, contentType: responseType) } - @objc public func getRandomHash() -> NSString - { - if !(self.randomHash != nil) { - self.randomHash = UUID().uuidString as NSString? - } - return self.randomHash! - } - - @objc public func getRequestBodyFilepath() -> String - { - let dir = getDocumentsPath() as NSString - return dir.appendingPathComponent(getRequestBodyFilename()) + @objc public func getRequestBodyFileURL() -> URL { + return NFXPath.pathURLToFile(getRequestBodyFilename()) } - @objc public func getRequestBodyFilename() -> String - { - return String("nfx_request_body_") + "\(self.requestTime!)_\(getRandomHash() as String)" + @objc public func getRequestBodyFilename() -> String { + return "request_body_\(requestTime!)_\(randomHash)" } - @objc public func getResponseBodyFilepath() -> String - { - let dir = getDocumentsPath() as NSString - return dir.appendingPathComponent(getResponseBodyFilename()) + @objc public func getResponseBodyFileURL() -> URL { + return NFXPath.pathURLToFile(getResponseBodyFilename()) } - @objc public func getResponseBodyFilename() -> String - { - return String("nfx_response_body_") + "\(self.requestTime!)_\(getRandomHash() as String)" + @objc public func getResponseBodyFilename() -> String { + return "response_body_\(requestTime!)_\(randomHash)" } - @objc public func getDocumentsPath() -> String - { - return NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.allDomainsMask, true).first! - } - - @objc public func saveData(_ dataString: NSString, toFile: String) - { + @objc public func saveData(_ dataString: String, to fileURL: URL) { do { - try dataString.write(toFile: toFile, atomically: false, encoding: String.Encoding.utf8.rawValue) - } catch { - print("catch !!!") + try dataString.write(to: fileURL, atomically: true, encoding: .utf8) + } catch let error { + print("[NFX]: Failed to save data to [\(fileURL)] - \(error.localizedDescription)") } } - @objc public func readRawData(_ fromFile: String) -> Data? - { - return (try? Data(contentsOf: URL(fileURLWithPath: fromFile))) + @objc public func readRawData(from fileURL: URL) -> Data? { + do { + return try Data(contentsOf: fileURL) + } catch let error { + print("[NFX]: Failed to load data from [\(fileURL)] - \(error.localizedDescription)") + return nil + } } - @objc public func getTimeFromDate(_ date: Date) -> String? - { + @objc public func getTimeFromDate(_ date: Date) -> String? { let calendar = Calendar.current let components = (calendar as NSCalendar).components([.hour, .minute], from: date) guard let hour = components.hour, let minutes = components.minute else { @@ -223,48 +192,22 @@ fileprivate func < (lhs: T?, rhs: T?) -> Bool { } } - public func getShortTypeFrom(_ contentType: String) -> HTTPModelShortType - { - if NSPredicate(format: "SELF MATCHES %@", - "^application/(vnd\\.(.*)\\+)?json$").evaluate(with: contentType) { - return .JSON - } - - if (contentType == "application/xml") || (contentType == "text/xml") { - return .XML - } - - if contentType == "text/html" { - return .HTML - } - - if contentType.hasPrefix("image/") { - return .IMAGE - } - - return .OTHER - } - - public func prettyPrint(_ rawData: Data, type: HTTPModelShortType) -> NSString? - { + public func prettyPrint(_ rawData: Data, type: HTTPModelShortType) -> String? { switch type { case .JSON: do { let rawJsonData = try JSONSerialization.jsonObject(with: rawData, options: []) let prettyPrintedString = try JSONSerialization.data(withJSONObject: rawJsonData, options: [.prettyPrinted]) - return NSString(data: prettyPrintedString, encoding: String.Encoding.utf8.rawValue) + return String(data: prettyPrintedString, encoding: String.Encoding.utf8) } catch { return nil } - default: return nil - } } - @objc public func isSuccessful() -> Bool - { + @objc public func isSuccessful() -> Bool { if (self.responseStatus != nil) && (self.responseStatus < 400) { return true } else { diff --git a/example/Pods/netfox/netfox/Core/NFXHTTPModelManager.swift b/example/Pods/netfox/netfox/Core/NFXHTTPModelManager.swift index 0cb549d..1582012 100755 --- a/example/Pods/netfox/netfox/Core/NFXHTTPModelManager.swift +++ b/example/Pods/netfox/netfox/Core/NFXHTTPModelManager.swift @@ -7,52 +7,55 @@ import Foundation -private let _sharedInstance = NFXHTTPModelManager() -final class NFXHTTPModelManager: NSObject -{ - static let sharedInstance = NFXHTTPModelManager() - fileprivate var models = [NFXHTTPModel]() - private let syncQueue = DispatchQueue(label: "NFXSyncQueue") - - func add(_ obj: NFXHTTPModel) - { - syncQueue.async { - self.models.insert(obj, at: 0) - NotificationCenter.default.post(name: NSNotification.Name.NFXAddedModel, object: obj) +final class NFXHTTPModelManager: NSObject { + + static let shared = NFXHTTPModelManager() + + let publisher = Publisher<[NFXHTTPModel]>() + + /// Not thread safe. Use only from main thread/queue + private(set) var models = [NFXHTTPModel]() { + didSet { + notifySubscribers() } } - func clear() - { - syncQueue.async { - self.models.removeAll() - NotificationCenter.default.post(name: NSNotification.Name.NFXClearedModels, object: nil) + /// Not thread safe. Use only from main thread/queue + var filters = [Bool](repeating: true, count: HTTPModelShortType.allCases.count) { + didSet { + notifySubscribers() } } - func getModels() -> [NFXHTTPModel] - { - var predicates = [NSPredicate]() - - let filterValues = NFX.sharedInstance().getCachedFilters() - let filterNames = HTTPModelShortType.allValues - - var index = 0 - for filterValue in filterValues { - if filterValue { - let filterName = filterNames[index].rawValue - let predicate = NSPredicate(format: "shortType == '\(filterName)'") - predicates.append(predicate) - - } - index += 1 + /// Not thread safe. Use only from main thread/queue + var filteredModels: [NFXHTTPModel] { + let filteredTypes = getCachedFilterTypes() + return models.filter { filteredTypes.contains($0.shortType) } + } + + /// Thread safe + func add(_ obj: NFXHTTPModel) { + DispatchQueue.main.async { + self.models.insert(obj, at: 0) } - - let searchPredicate = NSCompoundPredicate(orPredicateWithSubpredicates: predicates) - - let array = (self.models as NSArray).filtered(using: searchPredicate) - - return array as! [NFXHTTPModel] } + + /// Not thread safe. Use only from main thread/queue + func clear() { + models.removeAll() + } + + private func getCachedFilterTypes() -> [HTTPModelShortType] { + return filters + .enumerated() + .compactMap { $1 ? HTTPModelShortType.allCases[$0] : nil } + } + + private func notifySubscribers() { + if publisher.hasSubscribers { + publisher(filteredModels) + } + } + } diff --git a/example/Pods/netfox/netfox/Core/NFXHelper.swift b/example/Pods/netfox/netfox/Core/NFXHelper.swift index d70e27b..0894a6e 100644 --- a/example/Pods/netfox/netfox/Core/NFXHelper.swift +++ b/example/Pods/netfox/netfox/Core/NFXHelper.swift @@ -12,21 +12,35 @@ import Cocoa import UIKit #endif -public enum HTTPModelShortType: String -{ +public enum HTTPModelShortType: String, CaseIterable { case JSON = "JSON" case XML = "XML" case HTML = "HTML" case IMAGE = "Image" case OTHER = "Other" - - static let allValues = [JSON, XML, HTML, IMAGE, OTHER] } -extension NFXColor -{ - convenience init(red: Int, green: Int, blue: Int) - { + +public extension HTTPModelShortType { + + init(contentType: String) { + if NSPredicate(format: "SELF MATCHES %@", "^application/(vnd\\.(.*)\\+)?json$").evaluate(with: contentType) { + self = .JSON + } else if (contentType == "application/xml") || (contentType == "text/xml") { + self = .XML + } else if contentType == "text/html" { + self = .HTML + } else if contentType.hasPrefix("image/") { + self = .IMAGE + } else { + self = .OTHER + } + } +} + + +extension NFXColor { + convenience init(red: Int, green: Int, blue: Int) { assert(red >= 0 && red <= 255, "Invalid red component") assert(green >= 0 && green <= 255, "Invalid green component") assert(blue >= 0 && blue <= 255, "Invalid blue component") @@ -34,97 +48,78 @@ extension NFXColor self.init(red: CGFloat(red) / 255.0, green: CGFloat(green) / 255.0, blue: CGFloat(blue) / 255.0, alpha: 1.0) } - convenience init(netHex: Int) - { + convenience init(netHex: Int) { self.init(red:(netHex >> 16) & 0xff, green:(netHex >> 8) & 0xff, blue:netHex & 0xff) } - class func NFXOrangeColor() -> NFXColor - { + class func NFXOrangeColor() -> NFXColor { return NFXColor.init(netHex: 0xec5e28) } - class func NFXGreenColor() -> NFXColor - { + class func NFXGreenColor() -> NFXColor { return NFXColor.init(netHex: 0x38bb93) } - class func NFXDarkGreenColor() -> NFXColor - { + class func NFXDarkGreenColor() -> NFXColor { return NFXColor.init(netHex: 0x2d7c6e) } - class func NFXRedColor() -> NFXColor - { + class func NFXRedColor() -> NFXColor { return NFXColor.init(netHex: 0xd34a33) } - class func NFXDarkRedColor() -> NFXColor - { + class func NFXDarkRedColor() -> NFXColor { return NFXColor.init(netHex: 0x643026) } - class func NFXStarkWhiteColor() -> NFXColor - { + class func NFXStarkWhiteColor() -> NFXColor { return NFXColor.init(netHex: 0xccc5b9) } - class func NFXDarkStarkWhiteColor() -> NFXColor - { + class func NFXDarkStarkWhiteColor() -> NFXColor { return NFXColor.init(netHex: 0x9b958d) } - class func NFXLightGrayColor() -> NFXColor - { + class func NFXLightGrayColor() -> NFXColor { return NFXColor.init(netHex: 0x9b9b9b) } - class func NFXGray44Color() -> NFXColor - { + class func NFXGray44Color() -> NFXColor { return NFXColor.init(netHex: 0x707070) } - class func NFXGray95Color() -> NFXColor - { + class func NFXGray95Color() -> NFXColor { return NFXColor.init(netHex: 0xf2f2f2) } - class func NFXBlackColor() -> NFXColor - { + class func NFXBlackColor() -> NFXColor { return NFXColor.init(netHex: 0x231f20) } } -extension NFXFont -{ -#if os(iOS) - class func NFXFont(size: CGFloat) -> UIFont - { +extension NFXFont { + #if os(iOS) + class func NFXFont(size: CGFloat) -> UIFont { return UIFont(name: "HelveticaNeue", size: size)! } - class func NFXFontBold(size: CGFloat) -> UIFont - { + class func NFXFontBold(size: CGFloat) -> UIFont { return UIFont(name: "HelveticaNeue-Bold", size: size)! } -#elseif os(OSX) - class func NFXFont(size: CGFloat) -> NSFont - { + #elseif os(OSX) + class func NFXFont(size: CGFloat) -> NSFont { return NSFont(name: "HelveticaNeue", size: size)! } - class func NFXFontBold(size: CGFloat) -> NSFont - { + class func NFXFontBold(size: CGFloat) -> NSFont { return NSFont(name: "HelveticaNeue-Bold", size: size)! } -#endif + #endif } -extension URLRequest -{ - func getNFXURL() -> String - { +extension URLRequest { + func getNFXURL() -> String { if (url != nil) { return url!.absoluteString; } else { @@ -132,16 +127,14 @@ extension URLRequest } } - func getNFXURLComponents() -> URLComponents? - { + func getNFXURLComponents() -> URLComponents? { guard let url = self.url else { return nil } return URLComponents(string: url.absoluteString) } - func getNFXMethod() -> String - { + func getNFXMethod() -> String { if (httpMethod != nil) { return httpMethod! } else { @@ -149,8 +142,7 @@ extension URLRequest } } - func getNFXCachePolicy() -> String - { + func getNFXCachePolicy() -> String { switch cachePolicy { case .useProtocolCachePolicy: return "UseProtocolCachePolicy" case .reloadIgnoringLocalCacheData: return "ReloadIgnoringLocalCacheData" @@ -160,31 +152,27 @@ extension URLRequest case .reloadRevalidatingCacheData: return "ReloadRevalidatingCacheData" @unknown default: return "Unknown \(cachePolicy)" } - } - func getNFXTimeout() -> String - { + func getNFXTimeout() -> String { return String(Double(timeoutInterval)) } - func getNFXHeaders() -> [AnyHashable: Any] - { - if (allHTTPHeaderFields != nil) { - return allHTTPHeaderFields! + func getNFXHeaders() -> [AnyHashable: Any] { + if let httpHeaders = allHTTPHeaderFields { + return httpHeaders } else { return Dictionary() } } - func getNFXBody() -> Data - { + func getNFXBody() -> Data { return httpBodyStream?.readfully() ?? URLProtocol.property(forKey: "NFXBodyData", in: self) as? Data ?? Data() } func getCurl() -> String { guard let url = url else { return "" } - let baseCommand = "curl \(url.absoluteString)" + let baseCommand = "curl \"\(url.absoluteString)\"" var command = [baseCommand] @@ -204,55 +192,47 @@ extension URLRequest } } -extension URLResponse -{ - func getNFXStatus() -> Int - { +extension URLResponse { + func getNFXStatus() -> Int { return (self as? HTTPURLResponse)?.statusCode ?? 999 } - func getNFXHeaders() -> [AnyHashable: Any] - { + func getNFXHeaders() -> [AnyHashable: Any] { return (self as? HTTPURLResponse)?.allHeaderFields ?? [:] } } -extension NFXImage -{ - class func NFXSettings() -> NFXImage - { - #if os (iOS) +extension NFXImage { + class func NFXSettings() -> NFXImage { + #if os (iOS) return UIImage(data: NFXAssets.getImage(NFXAssetName.settings), scale: 1.7)! - #elseif os(OSX) + #elseif os(OSX) return NSImage(data: NFXAssets.getImage(NFXAssetName.settings))! - #endif + #endif } - class func NFXClose() -> NFXImage - { - #if os (iOS) + class func NFXClose() -> NFXImage { + #if os (iOS) return UIImage(data: NFXAssets.getImage(NFXAssetName.close), scale: 1.7)! - #elseif os(OSX) + #elseif os(OSX) return NSImage(data: NFXAssets.getImage(NFXAssetName.close))! - #endif + #endif } - class func NFXInfo() -> NFXImage - { - #if os (iOS) + class func NFXInfo() -> NFXImage { + #if os (iOS) return UIImage(data: NFXAssets.getImage(NFXAssetName.info), scale: 1.7)! - #elseif os(OSX) + #elseif os(OSX) return NSImage(data: NFXAssets.getImage(NFXAssetName.info))! - #endif + #endif } - class func NFXStatistics() -> NFXImage - { - #if os (iOS) + class func NFXStatistics() -> NFXImage { + #if os (iOS) return UIImage(data: NFXAssets.getImage(NFXAssetName.statistics), scale: 1.7)! - #elseif os(OSX) + #elseif os(OSX) return NSImage(data: NFXAssets.getImage(NFXAssetName.statistics))! - #endif + #endif } } @@ -277,77 +257,62 @@ extension InputStream { } } -extension Date -{ - func isGreaterThanDate(_ dateToCompare: Date) -> Bool - { - if self.compare(dateToCompare) == ComparisonResult.orderedDescending { - return true - } else { - return false - } +extension Date { + func isGreaterThanDate(_ dateToCompare: Date) -> Bool { + return compare(dateToCompare) == ComparisonResult.orderedDescending } } -class NFXDebugInfo -{ +class NFXDebugInfo { - class func getNFXAppName() -> String - { + class func getNFXAppName() -> String { return Bundle.main.infoDictionary?["CFBundleName"] as? String ?? "" } - class func getNFXAppVersionNumber() -> String - { + class func getNFXAppVersionNumber() -> String { return Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "" } - class func getNFXAppBuildNumber() -> String - { + class func getNFXAppBuildNumber() -> String { return Bundle.main.infoDictionary?["CFBundleVersion"] as? String ?? "" } - class func getNFXBundleIdentifier() -> String - { + class func getNFXBundleIdentifier() -> String { return Bundle.main.bundleIdentifier ?? "" } - class func getNFXOSVersion() -> String - { - #if os(iOS) + class func getNFXOSVersion() -> String { + #if os(iOS) return UIDevice.current.systemVersion - #elseif os(OSX) + #elseif os(OSX) return ProcessInfo.processInfo.operatingSystemVersionString - #endif + #endif } - class func getNFXDeviceType() -> String - { - #if os(iOS) + class func getNFXDeviceType() -> String { + #if os(iOS) return UIDevice.getNFXDeviceType() - #elseif os(OSX) + #elseif os(OSX) return "Not implemented yet. PR welcomes" - #endif + #endif } - class func getNFXDeviceScreenResolution() -> String - { - #if os(iOS) + class func getNFXDeviceScreenResolution() -> String { + #if os(iOS) let scale = UIScreen.main.scale let bounds = UIScreen.main.bounds let width = bounds.size.width * scale let height = bounds.size.height * scale return "\(width) x \(height)" - #elseif os(OSX) + #elseif os(OSX) return "0" - #endif + #endif } - class func getNFXIP(_ completion:@escaping (_ result: String) -> Void) - { + class func getNFXIP(_ completion:@escaping (_ result: String) -> Void) { var req: NSMutableURLRequest req = NSMutableURLRequest(url: URL(string: "https://api.ipify.org/?format=json")!) - URLProtocol.setProperty("1", forKey: "NFXInternal", in: req) + URLProtocol.setProperty(true, forKey: NFXProtocol.nfxInternalKey, in: req) let session = URLSession.shared session.dataTask(with: req as URLRequest, completionHandler: { (data, response, error) in @@ -368,36 +333,88 @@ class NFXDebugInfo } -struct NFXPath -{ - static let Documents = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.allDomainsMask, true).first! as NSString +struct NFXPath { + + static let sessionLogName = "session.log" + static let tmpDirURL = URL(fileURLWithPath: NSTemporaryDirectory()) + static let nfxDirURL = tmpDirURL.appendingPathComponent("NFX", isDirectory: true) + static let sessionLogURL = nfxDirURL.appendingPathComponent(sessionLogName) + + static func createNFXDirIfNotExist() { + do { + try FileManager.default.createDirectory(at: nfxDirURL, withIntermediateDirectories: true, attributes: nil) + } catch let error { + print("[NFX]: failed to create working dir - \(error.localizedDescription)") + } + } + + static func deleteNFXDir() { + guard FileManager.default.fileExists(atPath: nfxDirURL.path, isDirectory: nil) else { return } + + do { + try FileManager.default.removeItem(at: nfxDirURL) + } catch let error { + print("[NFX]: failed to delete working dir - \(error.localizedDescription)") + } + } - static let SessionLog = NFXPath.Documents.appendingPathComponent("session.log"); + static func deleteOldNFXLogs() { + let oldSessionLogName = "session.log" + let oldRequestPrefixName = "nfx_re" + let fileManager = FileManager.default + guard let documentsDir = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first, + let fileEnumarator = fileManager.enumerator(at: documentsDir, includingPropertiesForKeys: nil, options: [.skipsSubdirectoryDescendants], errorHandler: nil) else { return } + + for case let fileURL as URL in fileEnumarator { + if fileURL.lastPathComponent == oldSessionLogName || fileURL.lastPathComponent.hasPrefix(oldRequestPrefixName) { + try? fileManager.removeItem(at: fileURL) + } + } + } + + static func pathURLToFile(_ fileName: String) -> URL { + return nfxDirURL.appendingPathComponent(fileName) + } + } -extension String -{ - func appendToFile(filePath: String) { - let contentToAppend = self +extension String { + + func appendToFileURL(_ fileURL: URL) { + guard let fileHandle = try? FileHandle(forWritingTo: fileURL) else { + write(to: fileURL) + return + } + + let data = data(using: .utf8)! - if let fileHandle = FileHandle(forWritingAtPath: filePath) { - /* Append to file */ - fileHandle.seekToEndOfFile() - fileHandle.write(contentToAppend.data(using: String.Encoding.utf8)!) - } else { - /* Create new file */ + if #available(iOS 13.4, macOS 10.15.4, *) { do { - try contentToAppend.write(toFile: filePath, atomically: true, encoding: String.Encoding.utf8) - } catch { - print("Error creating \(filePath)") + try fileHandle.seekToEnd() + try fileHandle.write(contentsOf: data) + } catch let error { + print("[NFX]: Failed to append [\(self.prefix(128))] to \(fileURL), trying to create new file - \(error.localizedDescription)") + write(to: fileURL) } + } else { + // TODO: replace FileHandle with more safe way, possible crash on iOS <13.4 https://github.com/kasketis/netfox/issues/221 + fileHandle.seekToEndOfFile() + fileHandle.write(data) + } + } + + private func write(to fileURL: URL) { + do { + try write(to: fileURL, atomically: true, encoding: .utf8) + } catch let error { + print("[NFX]: Failed to save [\(self.prefix(128))] to \(fileURL) - \(error.localizedDescription)") } } + } -@objc private extension URLSessionConfiguration -{ +@objc extension URLSessionConfiguration { private static var firstOccurrence = true static func implementNetfox() { @@ -435,14 +452,12 @@ extension String } set { guard let newTypes = newValue else { self.protocolClasses_Swizzled = nil; return } - + var types = [AnyClass]() // de-dup for newType in newTypes { - if !types.contains(where: { (existingType) -> Bool in - existingType == newType - }) { + if !types.contains(where: { $0 == newType }) { types.append(newType) } } @@ -498,9 +513,104 @@ extension String } } -public extension NSNotification.Name { - static let NFXDeactivateSearch = Notification.Name("NFXDeactivateSearch") - static let NFXReloadData = Notification.Name("NFXReloadData") - static let NFXAddedModel = Notification.Name("NFXAddedModel") - static let NFXClearedModels = Notification.Name("NFXClearedModels") +#if os(iOS) +extension UIWindow { + static var keyWindow: UIWindow? { + if #available(iOS 13.0, *) { + return UIApplication.shared.connectedScenes + .sorted { $0.activationState.sortPriority < $1.activationState.sortPriority } + .compactMap { $0 as? UIWindowScene } + .compactMap { $0.windows.first { $0.isKeyWindow } } + .first + } else { + return UIApplication.shared.keyWindow + } + } +} + +@available(iOS 13.0, *) +private extension UIScene.ActivationState { + var sortPriority: Int { + switch self { + case .foregroundActive: return 1 + case .foregroundInactive: return 2 + case .background: return 3 + case .unattached: return 4 + @unknown default: return 5 + } + } +} +#endif + + +class Publisher { + + private var subscriptions = Set>() + + var hasSubscribers: Bool { subscriptions.isEmpty == false } + + init() where T == Void { } + + init() { } + + func subscribe(_ subscription: Subscription) { + subscriptions.insert(subscription) + } + + @discardableResult func subscribe(_ callback: @escaping (T) -> Void) -> Subscription { + let subscription = Subscription(callback) + subscriptions.insert(subscription) + return subscription + } + + func trigger(_ obj: T) { + subscriptions.forEach { + if $0.isCancelled { + unsubscribe($0) + } else { + $0.callback(obj) + } + } + } + + func unsubscribe(_ subscription: Subscription) { + subscriptions.remove(subscription) + } + + func unsubscribeAll() { + subscriptions.removeAll() + } + + func callAsFunction(_ value: T) { + trigger(value) + } + + func callAsFunction() where T == Void { + trigger(()) + } + +} + +class Subscription: Equatable, Hashable { + + let id = UUID() + private(set) var isCancelled = false + fileprivate let callback: (T) -> Void + + init(_ callback: @escaping (T) -> Void) { + self.callback = callback + } + + func cancel() { + isCancelled = true + } + + static func == (lhs: Subscription, rhs: Subscription) -> Bool { + lhs.id == rhs.id + } + + func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + } diff --git a/example/Pods/netfox/netfox/Core/NFXImageBodyDetailsController.swift b/example/Pods/netfox/netfox/Core/NFXImageBodyDetailsController.swift index 095a638..681a82d 100644 --- a/example/Pods/netfox/netfox/Core/NFXImageBodyDetailsController.swift +++ b/example/Pods/netfox/netfox/Core/NFXImageBodyDetailsController.swift @@ -10,24 +10,28 @@ import Foundation import UIKit -class NFXImageBodyDetailsController: NFXGenericBodyDetailsController -{ +class NFXImageBodyDetailsController: NFXGenericBodyDetailsController { var imageView: UIImageView = UIImageView() - override func viewDidLoad() - { + override func viewDidLoad() { super.viewDidLoad() - self.title = "Image preview" + let viewFrame = view.frame - self.imageView.frame = CGRect(x: 10, y: 10, width: self.view.frame.width - 2*10, height: self.view.frame.height - 2*10) - self.imageView.autoresizingMask = [.flexibleWidth, .flexibleHeight] - self.imageView.contentMode = .scaleAspectFit - let data = Data.init(base64Encoded: self.selectedModel.getResponseBody() as String, options: NSData.Base64DecodingOptions.ignoreUnknownCharacters) - - self.imageView.image = UIImage(data: data!) + title = "Image preview" + + imageView.frame = CGRect(x: 10, + y: 10, + width: viewFrame.width - 2*10, + height: viewFrame.height - 2*10) + imageView.autoresizingMask = [.flexibleWidth, + .flexibleHeight] + imageView.contentMode = .scaleAspectFit + let data = Data.init(base64Encoded: selectedModel.getResponseBody() as String, + options: NSData.Base64DecodingOptions.ignoreUnknownCharacters) - self.view.addSubview(self.imageView) + imageView.image = UIImage(data: data!) + view.addSubview(imageView) } } diff --git a/example/Pods/netfox/netfox/Core/NFXInfoController.swift b/example/Pods/netfox/netfox/Core/NFXInfoController.swift index a3fd392..817fba8 100644 --- a/example/Pods/netfox/netfox/Core/NFXInfoController.swift +++ b/example/Pods/netfox/netfox/Core/NFXInfoController.swift @@ -7,11 +7,9 @@ import Foundation -class NFXInfoController: NFXGenericController -{ +class NFXInfoController: NFXGenericController { - func generateInfoString(_ ipAddress: String) -> NSAttributedString - { + func generateInfoString(_ ipAddress: String) -> NSAttributedString { var tempString: String tempString = String() diff --git a/example/Pods/netfox/netfox/Core/NFXListController.swift b/example/Pods/netfox/netfox/Core/NFXListController.swift index 32b423d..cbab059 100644 --- a/example/Pods/netfox/netfox/Core/NFXListController.swift +++ b/example/Pods/netfox/netfox/Core/NFXListController.swift @@ -7,28 +7,65 @@ import Foundation -class NFXListController: NFXGenericController { - var tableData = [NFXHTTPModel]() - var filteredTableData = [NFXHTTPModel]() +class NFXListController: NFXGenericController { - override func viewDidLoad() { - super.viewDidLoad() + // MARK: - Public Properties + + private(set) var tableData = [NFXHTTPModel]() { + didSet { + reloadData() + } + } + + var filter: String? = nil { + didSet { + filterModels() + } + } + + // MARK: - Private Properties + + private lazy var dataSubscription = Subscription<[NFXHTTPModel]> { [weak self] in self?.allModels = $0 } + + private var allModels = [NFXHTTPModel]() { + didSet { + filterModels() + } } - func updateSearchResultsForSearchControllerWithString(_ searchString: String) - { - let predicateURL = NSPredicate(format: "requestURL contains[cd] '\(searchString)'") - let predicateMethod = NSPredicate(format: "requestMethod contains[cd] '\(searchString)'") - let predicateType = NSPredicate(format: "responseType contains[cd] '\(searchString)'") - let predicates = [predicateURL, predicateMethod, predicateType] - let searchPredicate = NSCompoundPredicate(orPredicateWithSubpredicates: predicates) + // MARK: - Overloads + + deinit { + dataSubscription.cancel() + } + + override func viewDidLoad() { + super.viewDidLoad() - let array = (NFXHTTPModelManager.sharedInstance.getModels() as NSArray).filtered(using: searchPredicate) - self.filteredTableData = array as! [NFXHTTPModel] + NFXHTTPModelManager.shared.publisher.subscribe(dataSubscription) + populate(with: NFXHTTPModelManager.shared.filteredModels) + } + + // MARK: - Public Methods + + func populate(with models: [NFXHTTPModel]) { + allModels = models } - @objc func reloadTableViewData() - { + // MARK: - Private Methods + + private func filterModels() { + guard let filter = filter, filter.isEmpty == false else { + tableData = allModels + return + } + + tableData = allModels.filter { + $0.requestURL?.range(of: filter, options: [.caseInsensitive, .diacriticInsensitive]) != nil || + $0.requestMethod?.range(of: filter, options: [.caseInsensitive, .diacriticInsensitive]) != nil || + $0.responseType?.range(of: filter, options: [.caseInsensitive, .diacriticInsensitive]) != nil + } } + } diff --git a/example/Pods/netfox/netfox/Core/NFXLoader.h b/example/Pods/netfox/netfox/Core/NFXLoader.h deleted file mode 100644 index 5603344..0000000 --- a/example/Pods/netfox/netfox/Core/NFXLoader.h +++ /dev/null @@ -1,12 +0,0 @@ -// -// NFXLoader.h -// netfox -// -// Copyright © 2017 kasketis. All rights reserved. -// - -#import - -@interface NFXLoader : NSObject - -@end diff --git a/example/Pods/netfox/netfox/Core/NFXLoader.m b/example/Pods/netfox/netfox/Core/NFXLoader.m deleted file mode 100644 index d20c0c6..0000000 --- a/example/Pods/netfox/netfox/Core/NFXLoader.m +++ /dev/null @@ -1,21 +0,0 @@ -// -// NFXLoader.m -// netfox -// -// Copyright © 2017 kasketis. All rights reserved. -// - -#import "NFXLoader.h" - -@implementation NFXLoader - -+ (void)load -{ - SEL implementNetfoxSelector = NSSelectorFromString(@"implementNetfox"); - if ([NSURLSessionConfiguration respondsToSelector:implementNetfoxSelector]) - { - [NSURLSessionConfiguration performSelector:implementNetfoxSelector]; - } -} - -@end diff --git a/example/Pods/netfox/netfox/Core/NFXProtocol.swift b/example/Pods/netfox/netfox/Core/NFXProtocol.swift index 405805f..db49585 100755 --- a/example/Pods/netfox/netfox/Core/NFXProtocol.swift +++ b/example/Pods/netfox/netfox/Core/NFXProtocol.swift @@ -8,9 +8,8 @@ import Foundation @objc -open class NFXProtocol: URLProtocol -{ - private static let nfxInternalKey = "com.netfox.NFXInternal" +open class NFXProtocol: URLProtocol { + static let nfxInternalKey = "com.netfox.NFXInternal" private lazy var session: URLSession = { [unowned self] in return URLSession(configuration: .default, delegate: self, delegateQueue: nil) @@ -20,28 +19,29 @@ open class NFXProtocol: URLProtocol private var response: URLResponse? private var responseData: NSMutableData? - override open class func canInit(with request: URLRequest) -> Bool - { + override open class func canInit(with request: URLRequest) -> Bool { return canServeRequest(request) } - override open class func canInit(with task: URLSessionTask) -> Bool - { + override open class func canInit(with task: URLSessionTask) -> Bool { + if #available(iOS 13.0, macOS 10.15, *) { + if task is URLSessionWebSocketTask { + return false + } + } + guard let request = task.currentRequest else { return false } return canServeRequest(request) } - private class func canServeRequest(_ request: URLRequest) -> Bool - { + private class func canServeRequest(_ request: URLRequest) -> Bool { guard NFX.sharedInstance().isEnabled() else { return false } - guard - URLProtocol.property(forKey: NFXProtocol.nfxInternalKey, in: request) == nil, + guard URLProtocol.property(forKey: NFXProtocol.nfxInternalKey, in: request) == nil, let url = request.url, - (url.absoluteString.hasPrefix("http") || url.absoluteString.hasPrefix("https")) - else { + (url.absoluteString.hasPrefix("http") || url.absoluteString.hasPrefix("https")) else { return false } @@ -50,11 +50,18 @@ open class NFXProtocol: URLProtocol return false } + let regexMatches = NFX.sharedInstance().getIgnoredURLsRegexes() + .map({return $0.matches(url.absoluteString)}) + .reduce(false) {$0 || $1} + + guard regexMatches == false else { + return false + } + return true } - override open func startLoading() - { + override open func startLoading() { model.saveRequest(request) let mutableRequest = (request as NSURLRequest).mutableCopy() as! NSMutableURLRequest @@ -62,19 +69,33 @@ open class NFXProtocol: URLProtocol session.dataTask(with: mutableRequest as URLRequest).resume() } - override open func stopLoading() - { + override open func stopLoading() { session.getTasksWithCompletionHandler { dataTasks, _, _ in dataTasks.forEach { $0.cancel() } + self.session.invalidateAndCancel() } } - override open class func canonicalRequest(for request: URLRequest) -> URLRequest - { + override open class func canonicalRequest(for request: URLRequest) -> URLRequest { return request } } +extension NSRegularExpression { + convenience init(_ pattern: String) { + do { + try self.init(pattern: pattern) + } catch { + preconditionFailure("Illegal regular expression: \(pattern).") + } + } + + func matches(_ string: String) -> Bool { + let range = NSRange(location: 0, length: string.count) + return firstMatch(in: string, options: [], range: range) != nil + } +} + extension NFXProtocol: URLSessionDataDelegate { public func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) { responseData?.append(data) @@ -84,7 +105,7 @@ extension NFXProtocol: URLSessionDataDelegate { public func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive response: URLResponse, completionHandler: @escaping (URLSession.ResponseDisposition) -> Void) { self.response = response - self.responseData = NSMutableData() + responseData = NSMutableData() client?.urlProtocol(self, didReceive: response, cacheStoragePolicy: NFX.swiftSharedInstance.cacheStoragePolicy) completionHandler(.allow) @@ -113,8 +134,7 @@ extension NFXProtocol: URLSessionDataDelegate { model.saveResponse(response, data: data) } - NFXHTTPModelManager.sharedInstance.add(model) - NotificationCenter.default.post(name: .NFXReloadData, object: nil) + NFXHTTPModelManager.shared.add(model) } public func urlSession(_ session: URLSession, task: URLSessionTask, willPerformHTTPRedirection response: HTTPURLResponse, newRequest request: URLRequest, completionHandler: @escaping (URLRequest?) -> Void) { diff --git a/example/Pods/netfox/netfox/Core/NFXSettingsController.swift b/example/Pods/netfox/netfox/Core/NFXSettingsController.swift index 622451c..b771085 100755 --- a/example/Pods/netfox/netfox/Core/NFXSettingsController.swift +++ b/example/Pods/netfox/netfox/Core/NFXSettingsController.swift @@ -14,5 +14,5 @@ class NFXSettingsController: NFXGenericController { var nfxURL = "https://github.com/kasketis/netfox" var tableData = [HTTPModelShortType]() - var filters = [Bool]() + var filters = NFXHTTPModelManager.shared.filters } diff --git a/example/Pods/netfox/netfox/Core/NFXStatisticsController.swift b/example/Pods/netfox/netfox/Core/NFXStatisticsController.swift index 2199521..021bca8 100755 --- a/example/Pods/netfox/netfox/Core/NFXStatisticsController.swift +++ b/example/Pods/netfox/netfox/Core/NFXStatisticsController.swift @@ -27,8 +27,7 @@ fileprivate func > (lhs: T?, rhs: T?) -> Bool { } -class NFXStatisticsController: NFXGenericController -{ +class NFXStatisticsController: NFXGenericController { var totalModels: Int = 0 var successfulRequests: Int = 0 @@ -42,49 +41,66 @@ class NFXStatisticsController: NFXGenericController var fastestResponseTime: Float = 999 var slowestResponseTime: Float = 0 - func getReportString() -> NSAttributedString - { + private lazy var dataSubscription = Subscription<[NFXHTTPModel]> { [weak self] in self?.reloadData(with: $0) } + + deinit { + dataSubscription.cancel() + } + + override func viewDidLoad() { + super.viewDidLoad() + + NFXHTTPModelManager.shared.publisher.subscribe(dataSubscription) + reloadData(with: NFXHTTPModelManager.shared.filteredModels) + } + + + func getReportString() -> NSAttributedString { var tempString: String tempString = String() - tempString += "[Total requests] \n\(self.totalModels)\n\n" + tempString += "[Total requests] \n\(totalModels)\n\n" - tempString += "[Successful requests] \n\(self.successfulRequests)\n\n" - tempString += "[Failed requests] \n\(self.failedRequests)\n\n" + tempString += "[Successful requests] \n\(successfulRequests)\n\n" + tempString += "[Failed requests] \n\(failedRequests)\n\n" - tempString += "[Total request size] \n\(Float(self.totalRequestSize/1024)) KB\n\n" - if self.totalModels == 0 { + tempString += "[Total request size] \n\(Float(totalRequestSize/1024)) KB\n\n" + if totalModels == 0 { tempString += "[Avg request size] \n0.0 KB\n\n" } else { - tempString += "[Avg request size] \n\(Float((self.totalRequestSize/self.totalModels)/1024)) KB\n\n" + tempString += "[Avg request size] \n\(Float((totalRequestSize/totalModels)/1024)) KB\n\n" } - tempString += "[Total response size] \n\(Float(self.totalResponseSize/1024)) KB\n\n" - if self.totalModels == 0 { + tempString += "[Total response size] \n\(Float(totalResponseSize/1024)) KB\n\n" + if totalModels == 0 { tempString += "[Avg response size] \n0.0 KB\n\n" } else { - tempString += "[Avg response size] \n\(Float((self.totalResponseSize/self.totalModels)/1024)) KB\n\n" + tempString += "[Avg response size] \n\(Float((totalResponseSize/totalModels)/1024)) KB\n\n" } if self.totalModels == 0 { tempString += "[Avg response time] \n0.0s\n\n" tempString += "[Fastest response time] \n0.0s\n\n" } else { - tempString += "[Avg response time] \n\(Float(self.totalResponseTime/Float(self.totalModels)))s\n\n" - if self.fastestResponseTime == 999 { + tempString += "[Avg response time] \n\(Float(totalResponseTime/Float(totalModels)))s\n\n" + if fastestResponseTime == 999 { tempString += "[Fastest response time] \n0.0s\n\n" } else { - tempString += "[Fastest response time] \n\(self.fastestResponseTime)s\n\n" + tempString += "[Fastest response time] \n\(fastestResponseTime)s\n\n" } } - tempString += "[Slowest response time] \n\(self.slowestResponseTime)s\n\n" + tempString += "[Slowest response time] \n\(slowestResponseTime)s\n\n" return formatNFXString(tempString) } - func generateStatics() - { - let models = NFXHTTPModelManager.sharedInstance.getModels() + private func reloadData(with models: [NFXHTTPModel]) { + clearStatistics() + generateStatistics(models) + reloadData() + } + + private func generateStatistics(_ models: [NFXHTTPModel]) { totalModels = models.count for model in models { @@ -106,32 +122,26 @@ class NFXStatisticsController: NFXGenericController if (model.timeInterval != nil) { totalResponseTime += model.timeInterval! - if model.timeInterval < self.fastestResponseTime { - self.fastestResponseTime = model.timeInterval! + if model.timeInterval < fastestResponseTime { + fastestResponseTime = model.timeInterval! } - if model.timeInterval > self.slowestResponseTime { - self.slowestResponseTime = model.timeInterval! + if model.timeInterval > slowestResponseTime { + slowestResponseTime = model.timeInterval! } } } } - func clearStatistics() - { - self.totalModels = 0 - self.successfulRequests = 0 - self.failedRequests = 0 - self.totalRequestSize = 0 - self.totalResponseSize = 0 - self.totalResponseTime = 0 - self.fastestResponseTime = 999 - self.slowestResponseTime = 0 + private func clearStatistics() { + totalModels = 0 + successfulRequests = 0 + failedRequests = 0 + totalRequestSize = 0 + totalResponseSize = 0 + totalResponseTime = 0 + fastestResponseTime = 999 + slowestResponseTime = 0 } - override func reloadData() - { - clearStatistics() - generateStatics() - } } diff --git a/example/Pods/netfox/netfox/Core/NFXWindowController.swift b/example/Pods/netfox/netfox/Core/NFXWindowController.swift index aa4788e..189f24f 100644 --- a/example/Pods/netfox/netfox/Core/NFXWindowController.swift +++ b/example/Pods/netfox/netfox/Core/NFXWindowController.swift @@ -58,7 +58,7 @@ class NFXWindowController: NSWindowController, NSWindowDelegate, NFXWindowContro override func windowDidLoad() { super.windowDidLoad() - self.window?.delegate = self + window?.delegate = self } // MARK: NSWindowDelegate @@ -87,7 +87,7 @@ class NFXWindowController: NSWindowController, NSWindowDelegate, NFXWindowContro extension NFXWindowController { func httpModelSelectedDidChange(model: NFXHTTPModel) { - self.detailsViewController.selectedModel(model) + detailsViewController.selectedModel(model) } } diff --git a/example/Pods/netfox/netfox/iOS/NFXDetailsController_iOS.swift b/example/Pods/netfox/netfox/iOS/NFXDetailsController_iOS.swift index b6ce015..dd8744b 100755 --- a/example/Pods/netfox/netfox/iOS/NFXDetailsController_iOS.swift +++ b/example/Pods/netfox/netfox/iOS/NFXDetailsController_iOS.swift @@ -10,6 +10,7 @@ import Foundation import UIKit import MessageUI + fileprivate func < (lhs: T?, rhs: T?) -> Bool { switch (lhs, rhs) { case let (l?, r?): @@ -31,8 +32,7 @@ fileprivate func > (lhs: T?, rhs: T?) -> Bool { } -class NFXDetailsController_iOS: NFXDetailsController, MFMailComposeViewControllerDelegate -{ +class NFXDetailsController_iOS: NFXDetailsController, MFMailComposeViewControllerDelegate { var infoButton: UIButton = UIButton() var requestButton: UIButton = UIButton() var responseButton: UIButton = UIButton() @@ -53,44 +53,42 @@ class NFXDetailsController_iOS: NFXDetailsController, MFMailComposeViewControlle internal var sharedContent: String? - override func viewDidLoad() - { + override func viewDidLoad() { super.viewDidLoad() - self.title = "Details" - self.view.layer.masksToBounds = true + title = "Details" + view.layer.masksToBounds = true - self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .action, target: self, action: #selector(NFXDetailsController_iOS.actionButtonPressed(_:))) + navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .action, target: self, action: #selector(NFXDetailsController_iOS.actionButtonPressed(_:))) // Header buttons - self.infoButton = createHeaderButton("Info", x: 0, selector: #selector(NFXDetailsController_iOS.infoButtonPressed)) - self.requestButton = createHeaderButton("Request", x: self.infoButton.frame.maxX, selector: #selector(NFXDetailsController_iOS.requestButtonPressed)) - self.responseButton = createHeaderButton("Response", x: self.requestButton.frame.maxX, selector: #selector(NFXDetailsController_iOS.responseButtonPressed)) - self.headerButtons.forEach { self.view.addSubview($0) } + infoButton = createHeaderButton("Info", x: 0, selector: #selector(NFXDetailsController_iOS.infoButtonPressed)) + requestButton = createHeaderButton("Request", x: infoButton.frame.maxX, selector: #selector(NFXDetailsController_iOS.requestButtonPressed)) + responseButton = createHeaderButton("Response", x: requestButton.frame.maxX, selector: #selector(NFXDetailsController_iOS.responseButtonPressed)) + headerButtons.forEach { view.addSubview($0) } // Info views - self.infoView = createDetailsView(getInfoStringFromObject(self.selectedModel), forView: .info) - self.requestView = createDetailsView(getRequestStringFromObject(self.selectedModel), forView: .request) - self.responseView = createDetailsView(getResponseStringFromObject(self.selectedModel), forView: .response) - self.infoViews.forEach { self.view.addSubview($0) } + infoView = createDetailsView(getInfoStringFromObject(selectedModel), forView: .info) + requestView = createDetailsView(getRequestStringFromObject(selectedModel), forView: .request) + responseView = createDetailsView(getResponseStringFromObject(selectedModel), forView: .response) + infoViews.forEach { view.addSubview($0) } // Swipe gestures let lswgr = UISwipeGestureRecognizer(target: self, action: #selector(NFXDetailsController_iOS.handleSwipe(_:))) lswgr.direction = .left - self.view.addGestureRecognizer(lswgr) + view.addGestureRecognizer(lswgr) let rswgr = UISwipeGestureRecognizer(target: self, action: #selector(NFXDetailsController_iOS.handleSwipe(_:))) rswgr.direction = .right - self.view.addGestureRecognizer(rswgr) + view.addGestureRecognizer(rswgr) infoButtonPressed() } - func createHeaderButton(_ title: String, x: CGFloat, selector: Selector) -> UIButton - { + func createHeaderButton(_ title: String, x: CGFloat, selector: Selector) -> UIButton { var tempButton: UIButton tempButton = UIButton() - tempButton.frame = CGRect(x: x, y: 0, width: self.view.frame.width / 3, height: 44) + tempButton.frame = CGRect(x: x, y: 0, width: view.frame.width / 3, height: 44) tempButton.autoresizingMask = [.flexibleLeftMargin, .flexibleRightMargin, .flexibleWidth] tempButton.backgroundColor = UIColor.NFXDarkStarkWhiteColor() tempButton.setTitle(title, for: .init()) @@ -102,7 +100,7 @@ class NFXDetailsController_iOS: NFXDetailsController, MFMailComposeViewControlle } @objc fileprivate func copyLabel(lpgr: UILongPressGestureRecognizer) { - guard let text = (lpgr.view as? UILabel)?.text, + guard let text = (lpgr.view as? UILabel)?.text ?? (lpgr.view as? UITextView)?.text, copyAlert == nil else { return } UIPasteboard.general.string = text @@ -110,7 +108,7 @@ class NFXDetailsController_iOS: NFXDetailsController, MFMailComposeViewControlle let alert = UIAlertController(title: "Text Copied!", message: nil, preferredStyle: .alert) copyAlert = alert - self.present(alert, animated: true) { [weak self] in + present(alert, animated: true) { [weak self] in guard let `self` = self else { return } Timer.scheduledTimer(timeInterval: 0.45, @@ -125,11 +123,10 @@ class NFXDetailsController_iOS: NFXDetailsController, MFMailComposeViewControlle copyAlert?.dismiss(animated: true) { [weak self] in self?.copyAlert = nil } } - func createDetailsView(_ content: NSAttributedString, forView: EDetailsView) -> UIScrollView - { + func createDetailsView(_ content: NSAttributedString, forView: EDetailsView) -> UIScrollView { var scrollView: UIScrollView scrollView = UIScrollView() - scrollView.frame = CGRect(x: 0, y: 44, width: self.view.frame.width, height: self.view.frame.height - 44) + scrollView.frame = CGRect(x: 0, y: 44, width: view.frame.width, height: view.frame.height - 44) scrollView.autoresizingMask = [.flexibleWidth, .flexibleHeight] scrollView.autoresizesSubviews = true scrollView.backgroundColor = UIColor.clear @@ -154,13 +151,13 @@ class NFXDetailsController_iOS: NFXDetailsController, MFMailComposeViewControlle moreButton = UIButton.init(frame: CGRect(x: 20, y: textView.frame.maxY + 10, width: scrollView.frame.width - 40, height: 40)) moreButton.backgroundColor = UIColor.NFXGray44Color() - if ((forView == EDetailsView.request) && (self.selectedModel.requestBodyLength > 1024)) { + if ((forView == EDetailsView.request) && (selectedModel.requestBodyLength > 1024)) { moreButton.setTitle("Show request body", for: .init()) moreButton.addTarget(self, action: #selector(NFXDetailsController_iOS.requestBodyButtonPressed), for: .touchUpInside) scrollView.addSubview(moreButton) scrollView.contentSize = CGSize(width: textView.frame.width, height: moreButton.frame.maxY + 16) - } else if ((forView == EDetailsView.response) && (self.selectedModel.responseBodyLength > 1024)) { + } else if ((forView == EDetailsView.response) && (selectedModel.responseBodyLength > 1024)) { moreButton.setTitle("Show response body", for: .init()) moreButton.addTarget(self, action: #selector(NFXDetailsController_iOS.responseBodyButtonPressed), for: .touchUpInside) scrollView.addSubview(moreButton) @@ -173,8 +170,7 @@ class NFXDetailsController_iOS: NFXDetailsController, MFMailComposeViewControlle return scrollView } - @objc func actionButtonPressed(_ sender: UIBarButtonItem) - { + @objc func actionButtonPressed(_ sender: UIBarButtonItem) { let actionSheetController: UIAlertController = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet) let cancelAction: UIAlertAction = UIAlertAction(title: "Cancel", style: .cancel) @@ -190,7 +186,7 @@ class NFXDetailsController_iOS: NFXDetailsController, MFMailComposeViewControlle } actionSheetController.addAction(fullLogAction) - if let reqCurl = self.selectedModel.requestCurl { + if let reqCurl = selectedModel.requestCurl { let curlAction: UIAlertAction = UIAlertAction(title: "Export request as curl", style: .default) { [unowned self] action -> Void in let activityViewController = UIActivityViewController(activityItems: [reqCurl], applicationActivities: nil) activityViewController.popoverPresentationController?.barButtonItem = sender @@ -198,27 +194,23 @@ class NFXDetailsController_iOS: NFXDetailsController, MFMailComposeViewControlle } actionSheetController.addAction(curlAction) } - actionSheetController.view.tintColor = UIColor.NFXOrangeColor() actionSheetController.popoverPresentationController?.barButtonItem = sender - self.present(actionSheetController, animated: true, completion: nil) + present(actionSheetController, animated: true, completion: nil) } - @objc func infoButtonPressed() - { - buttonPressed(self.infoButton) + @objc func infoButtonPressed() { + buttonPressed(infoButton) } - @objc func requestButtonPressed() - { - buttonPressed(self.requestButton) + @objc func requestButtonPressed() { + buttonPressed(requestButton) } - @objc func responseButtonPressed() - { - buttonPressed(self.responseButton) + @objc func responseButtonPressed() { + buttonPressed(responseButton) } @objc func handleSwipe(_ gesture: UISwipeGestureRecognizer) { @@ -236,10 +228,9 @@ class NFXDetailsController_iOS: NFXDetailsController, MFMailComposeViewControlle } } - func buttonPressed(_ sender: UIButton) - { - guard let selectedButtonIdx = self.headerButtons.firstIndex(of: sender) else { return } - let infoViews = [self.infoView, self.requestView, self.responseView] + func buttonPressed(_ sender: UIButton) { + guard let selectedButtonIdx = headerButtons.firstIndex(of: sender) else { return } + let infoViews = [infoView, requestView, responseView] UIView.animate(withDuration: 0.4, delay: 0.0, @@ -261,13 +252,11 @@ class NFXDetailsController_iOS: NFXDetailsController, MFMailComposeViewControlle completion: nil) } - @objc func responseBodyButtonPressed() - { + @objc func responseBodyButtonPressed() { bodyButtonPressed().bodyType = NFXBodyType.response } - @objc func requestBodyButtonPressed() - { + @objc func requestBodyButtonPressed() { bodyButtonPressed().bodyType = NFXBodyType.request } @@ -275,42 +264,42 @@ class NFXDetailsController_iOS: NFXDetailsController, MFMailComposeViewControlle var bodyDetailsController: NFXGenericBodyDetailsController - if self.selectedModel.shortType as String == HTTPModelShortType.IMAGE.rawValue { + if selectedModel.shortType == .IMAGE { bodyDetailsController = NFXImageBodyDetailsController() } else { bodyDetailsController = NFXRawBodyDetailsController() } - bodyDetailsController.selectedModel(self.selectedModel) - self.navigationController?.pushViewController(bodyDetailsController, animated: true) + bodyDetailsController.selectedModel(selectedModel) + navigationController?.pushViewController(bodyDetailsController, animated: true) return bodyDetailsController } - func shareLog(full: Bool, sender: UIBarButtonItem) - { + func shareLog(full: Bool, sender: UIBarButtonItem) { var tempString = String() tempString += "** INFO **\n" - tempString += "\(getInfoStringFromObject(self.selectedModel).string)\n\n" + tempString += "\(getInfoStringFromObject(selectedModel).string)\n\n" tempString += "** REQUEST **\n" - tempString += "\(getRequestStringFromObject(self.selectedModel).string)\n\n" + tempString += "\(getRequestStringFromObject(selectedModel).string)\n\n" tempString += "** RESPONSE **\n" - tempString += "\(getResponseStringFromObject(self.selectedModel).string)\n\n" + tempString += "\(getResponseStringFromObject(selectedModel).string)\n\n" tempString += "logged via netfox - [https://github.com/kasketis/netfox]\n" if full { - let requestFilePath = self.selectedModel.getRequestBodyFilepath() - if let requestFileData = try? String(contentsOf: URL(fileURLWithPath: requestFilePath as String), encoding: .utf8) { + let requestFileURL = selectedModel.getRequestBodyFileURL() + if let requestFileData = try? String(contentsOf: requestFileURL, encoding: .utf8) { tempString += requestFileData } - let responseFilePath = self.selectedModel.getResponseBodyFilepath() - if let responseFileData = try? String(contentsOf: URL(fileURLWithPath: responseFilePath as String), encoding: .utf8) { + let responseFileURL = selectedModel.getResponseBodyFileURL() + if let responseFileData = try? String(contentsOf: responseFileURL, encoding: .utf8) { tempString += responseFileData } } + displayShareSheet(shareContent: tempString, sender: sender) } @@ -334,7 +323,7 @@ extension NFXDetailsController_iOS: UIActivityItemSource { } func activityViewController(_ activityViewController: UIActivityViewController, subjectForActivityType activityType: UIActivityType?) -> String { - return "netfox log - \(self.selectedModel.requestURL!)" + return "netfox log - \(selectedModel.requestURL!)" } } @@ -344,17 +333,16 @@ extension NFXDetailsController_iOS: UITextViewDelegate { let decodedURL = URL.absoluteString.removingPercentEncoding switch decodedURL { case "[URL]": - guard let queryItems = self.selectedModel.requestURLQueryItems, queryItems.count > 0 else { + guard let queryItems = selectedModel.requestURLQueryItems, queryItems.count > 0 else { return false } let urlDetailsController = NFXURLDetailsController() - urlDetailsController.selectedModel = self.selectedModel - self.navigationController?.pushViewController(urlDetailsController, animated: true) + urlDetailsController.selectedModel = selectedModel + navigationController?.pushViewController(urlDetailsController, animated: true) return true default: return false } - } } diff --git a/example/Pods/netfox/netfox/iOS/NFXHelper_iOS.swift b/example/Pods/netfox/netfox/iOS/NFXHelper_iOS.swift index a58c720..6cb42e7 100755 --- a/example/Pods/netfox/netfox/iOS/NFXHelper_iOS.swift +++ b/example/Pods/netfox/netfox/iOS/NFXHelper_iOS.swift @@ -9,13 +9,8 @@ import UIKit -#if swift(>=4.2) -public typealias UIEventSubtype = UIEvent.EventSubtype -#endif - extension UIWindow { - override open func motionEnded(_ motion: UIEventSubtype, with event: UIEvent?) - { + override open func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?) { if NFX.sharedInstance().getSelectedGesture() == .shake { if (event!.type == .motion && event!.subtype == .motionShake) { NFX.sharedInstance().motionDetected() @@ -26,11 +21,9 @@ extension UIWindow { } } -public extension UIDevice -{ +public extension UIDevice { - class func getNFXDeviceType() -> String - { + class func getNFXDeviceType() -> String { var systemInfo = utsname() uname(&systemInfo) @@ -48,53 +41,112 @@ public extension UIDevice } class func parseDeviceType(_ identifier: String) -> String { - - if identifier == "i386" || identifier == "x86_64" { - return "Simulator" - } - switch identifier { - case "iPhone1,1": return "iPhone 2G" + case "i386": return "iPhone Simulator" + case "x86_64": return "iPhone Simulator" + case "iPhone1,1": return "iPhone" case "iPhone1,2": return "iPhone 3G" case "iPhone2,1": return "iPhone 3GS" - case "iPhone3,1", "iPhone3,2", "iPhone3,3": return "IPhone 4" + case "iPhone3,1": return "iPhone 4" + case "iPhone3,2": return "iPhone 4 GSM Rev A" + case "iPhone3,3": return "iPhone 4 CDMA" case "iPhone4,1": return "iPhone 4S" - case "iPhone5,1", "iPhone5,2": return "iPhone 5" - case "iPhone5,3", "iPhone5,4": return "iPhone 5C" - case "iPhone6,1", "iPhone6,2": return "iPhone 5S" + case "iPhone5,1": return "iPhone 5 (GSM)" + case "iPhone5,2": return "iPhone 5 (GSM+CDMA)" + case "iPhone5,3": return "iPhone 5C (GSM)" + case "iPhone5,4": return "iPhone 5C (Global)" + case "iPhone6,1": return "iPhone 5S (GSM)" + case "iPhone6,2": return "iPhone 5S (Global)" case "iPhone7,1": return "iPhone 6 Plus" case "iPhone7,2": return "iPhone 6" - case "iPhone8,1": return "iPhone 6S Plus" - case "iPhone8,2": return "iPhone 6S" - case "iPhone8,4": return "iPhone SE" - case "iPhone9,1", "iPhone9,3": return "iPhone 7" - case "iPhone9,2", "iPhone9,4": return "iPhone 7 Plus" - case "iPhone10,1", "iPhone10,4": return "iPhone 8" - case "iPhone10,2", "iPhone10,5": return "iPhone 8 Plus" - case "iPhone10,3", "iPhone10,6": return "iPhone X" - - case "iPod1,1": return "iPodTouch 1G" - case "iPod2,1": return "iPodTouch 2G" - case "iPod3,1": return "iPodTouch 3G" - case "iPod4,1": return "iPodTouch 4G" - case "iPod5,1": return "iPodTouch 5G" - case "iPod7,1": return "iPodTouch 6G" - - case "iPad1,1", "iPad1,2": return "iPad" - case "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4": return "iPad 2" - case "iPad2,5", "iPad2,6", "iPad2,7": return "iPad Mini" - case "iPad3,1", "iPad3,2", "iPad3,3": return "iPad 3" - case "iPad3,4", "iPad3,5", "iPad3,6": return "iPad 4" - case "iPad4,1", "iPad4,2", "iPad4,3": return "iPad Air" - case "iPad4,4", "iPad4,5", "iPad4,6": return "iPad Mini Retina" - case "iPad4,7", "iPad4,8": return "iPad Mini 3" - case "iPad5,3", "iPad5,4": return "iPad Air 2" - case "iPad6,3", "iPad6,4": return "iPad Pro 9.7-inch" - case "iPad6,7", "iPad6,8": return "iPad Pro 12.9-inch" - case "iPad6,11", "iPad6,12": return "iPad 5" - case "iPad7,1", "iPad7,2": return "iPad Pro 12.9-inch" - case "iPad7,3", "iPad7,4": return "iPad Pro 10.5-inch" - + case "iPhone8,1": return "iPhone 6s" + case "iPhone8,2": return "iPhone 6s Plus" + case "iPhone8,4": return "iPhone SE (GSM)" + case "iPhone9,1": return "iPhone 7" + case "iPhone9,2": return "iPhone 7 Plus" + case "iPhone9,3": return "iPhone 7" + case "iPhone9,4": return "iPhone 7 Plus" + case "iPhone10,1": return "iPhone 8" + case "iPhone10,2": return "iPhone 8 Plus" + case "iPhone10,3": return "iPhone X Global" + case "iPhone10,4": return "iPhone 8" + case "iPhone10,5": return "iPhone 8 Plus" + case "iPhone10,6": return "iPhone X GSM" + case "iPhone11,2": return "iPhone XS" + case "iPhone11,4": return "iPhone XS Max" + case "iPhone11,6": return "iPhone XS Max Global" + case "iPhone11,8": return "iPhone XR" + case "iPhone12,1": return "iPhone 11" + case "iPhone12,3": return "iPhone 11 Pro" + case "iPhone12,5": return "iPhone 11 Pro Max" + case "iPhone12,8": return "iPhone SE 2nd Gen" + + case "iPod1,1": return "1st Gen iPod" + case "iPod2,1": return "2nd Gen iPod" + case "iPod3,1": return "3rd Gen iPod" + case "iPod4,1": return "4th Gen iPod" + case "iPod5,1": return "5th Gen iPod" + case "iPod7,1": return "6th Gen iPod" + case "iPod9,1": return "7th Gen iPod" + + case "iPad1,1": return "iPad" + case "iPad1,2": return "iPad 3G" + case "iPad2,1": return "2nd Gen iPad" + case "iPad2,2": return "2nd Gen iPad GSM" + case "iPad2,3": return "2nd Gen iPad CDMA" + case "iPad2,4": return "2nd Gen iPad New Revision" + case "iPad3,1": return "3rd Gen iPad" + case "iPad3,2": return "3rd Gen iPad CDMA" + case "iPad3,3": return "3rd Gen iPad GSM" + case "iPad2,5": return "iPad mini" + case "iPad2,6": return "iPad mini GSM+LTE" + case "iPad2,7": return "iPad mini CDMA+LTE" + case "iPad3,4": return "4th Gen iPad" + case "iPad3,5": return "4th Gen iPad GSM+LTE" + case "iPad3,6": return "4th Gen iPad CDMA+LTE" + case "iPad4,1": return "iPad Air (WiFi)" + case "iPad4,2": return "iPad Air (GSM+CDMA)" + case "iPad4,3": return "1st Gen iPad Air (China)" + case "iPad4,4": return "iPad mini Retina (WiFi)" + case "iPad4,5": return "iPad mini Retina (GSM+CDMA)" + case "iPad4,6": return "iPad mini Retina (China)" + case "iPad4,7": return "iPad mini 3 (WiFi)" + case "iPad4,8": return "iPad mini 3 (GSM+CDMA)" + case "iPad4,9": return "iPad Mini 3 (China)" + case "iPad5,1": return "iPad mini 4 (WiFi)" + case "iPad5,2": return "4th Gen iPad mini (WiFi+Cellular)" + case "iPad5,3": return "iPad Air 2 (WiFi)" + case "iPad5,4": return "iPad Air 2 (Cellular)" + case "iPad6,3": return "iPad Pro (9.7 inch, WiFi)" + case "iPad6,4": return "iPad Pro (9.7 inch, WiFi+LTE)" + case "iPad6,7": return "iPad Pro (12.9 inch, WiFi)" + case "iPad6,8": return "iPad Pro (12.9 inch, WiFi+LTE)" + case "iPad6,11": return "iPad (2017)" + case "iPad6,12": return "iPad (2017)" + case "iPad7,1": return "iPad Pro 2nd Gen (WiFi)" + case "iPad7,2": return "iPad Pro 2nd Gen (WiFi+Cellular)" + case "iPad7,3": return "iPad Pro 10.5-inch" + case "iPad7,4": return "iPad Pro 10.5-inch" + case "iPad7,5": return "iPad 6th Gen (WiFi)" + case "iPad7,6": return "iPad 6th Gen (WiFi+Cellular)" + case "iPad7,11": return "iPad 7th Gen 10.2-inch (WiFi)" + case "iPad7,12": return "iPad 7th Gen 10.2-inch (WiFi+Cellular)" + case "iPad8,1": return "iPad Pro 11 inch (WiFi)" + case "iPad8,2": return "iPad Pro 11 inch (1TB, WiFi)" + case "iPad8,3": return "iPad Pro 11 inch (WiFi+Cellular)" + case "iPad8,4": return "iPad Pro 11 inch (1TB, WiFi+Cellular)" + case "iPad8,5": return "iPad Pro 12.9 inch 3rd Gen (WiFi)" + case "iPad8,6": return "iPad Pro 12.9 inch 3rd Gen (1TB, WiFi)" + case "iPad8,7": return "iPad Pro 12.9 inch 3rd Gen (WiFi+Cellular)" + case "iPad8,8": return "iPad Pro 12.9 inch 3rd Gen (1TB, WiFi+Cellular)" + case "iPad8,9": return "iPad Pro 11 inch 2nd Gen (WiFi)" + case "iPad8,10": return "iPad Pro 11 inch 2nd Gen (WiFi+Cellular)" + case "iPad8,11": return "iPad Pro 12.9 inch 4th Gen (WiFi)" + case "iPad8,12": return "iPad Pro 12.9 inch 4th Gen (WiFi+Cellular)" + case "iPad11,1": return "iPad mini 5th Gen (WiFi)" + case "iPad11,2": return "iPad mini 5th Gen" + case "iPad11,3": return "iPad Air 3rd Gen (WiFi)" + case "iPad11,4": return "iPad Air 3rd Gen" default: return "Not Available" } } @@ -110,8 +162,7 @@ protocol DataCleaner { extension DataCleaner where Self: UIViewController { - func clearData(sourceView: UIView, originingIn sourceRect: CGRect?, then: @escaping () -> ()) - { + func clearData(sourceView: UIView, originingIn sourceRect: CGRect?, then: @escaping () -> ()) { let actionSheetController: UIAlertController = UIAlertController(title: "Clear data?", message: "", preferredStyle: .actionSheet) actionSheetController.popoverPresentationController?.sourceView = sourceView if let sourceRect = sourceRect { @@ -130,6 +181,6 @@ extension DataCleaner where Self: UIViewController { let noAction = UIAlertAction(title: "No", style: .default) { _ in } actionSheetController.addAction(noAction) - self.present(actionSheetController, animated: true, completion: nil) + present(actionSheetController, animated: true, completion: nil) } } diff --git a/example/Pods/netfox/netfox/iOS/NFXInfoController_iOS.swift b/example/Pods/netfox/netfox/iOS/NFXInfoController_iOS.swift index bbe2bfd..08d10dd 100644 --- a/example/Pods/netfox/netfox/iOS/NFXInfoController_iOS.swift +++ b/example/Pods/netfox/netfox/iOS/NFXInfoController_iOS.swift @@ -14,35 +14,33 @@ class NFXInfoController_iOS: NFXInfoController { var scrollView: UIScrollView = UIScrollView() var textLabel: UILabel = UILabel() - override func viewDidLoad() - { + override func viewDidLoad() { super.viewDidLoad() - self.title = "Info" + title = "Info" - self.scrollView = UIScrollView() - self.scrollView.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height) - self.scrollView.autoresizingMask = [.flexibleWidth, .flexibleHeight] - self.scrollView.autoresizesSubviews = true - self.scrollView.backgroundColor = UIColor.clear - self.view.addSubview(self.scrollView) + scrollView = UIScrollView() + scrollView.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height) + scrollView.autoresizingMask = [.flexibleWidth, .flexibleHeight] + scrollView.autoresizesSubviews = true + scrollView.backgroundColor = UIColor.clear + view.addSubview(scrollView) - self.textLabel = UILabel() - self.textLabel.frame = CGRect(x: 20, y: 20, width: scrollView.frame.width - 40, height: scrollView.frame.height - 20); - self.textLabel.font = UIFont.NFXFont(size: 13) - self.textLabel.textColor = UIColor.NFXGray44Color() - self.textLabel.attributedText = self.generateInfoString("Retrieving IP address..") - self.textLabel.numberOfLines = 0 - self.textLabel.sizeToFit() - self.scrollView.addSubview(self.textLabel) + textLabel = UILabel() + textLabel.frame = CGRect(x: 20, y: 20, width: scrollView.frame.width - 40, height: scrollView.frame.height - 20); + textLabel.font = UIFont.NFXFont(size: 13) + textLabel.textColor = UIColor.NFXGray44Color() + textLabel.attributedText = generateInfoString("Retrieving IP address..") + textLabel.numberOfLines = 0 + textLabel.sizeToFit() + scrollView.addSubview(textLabel) - self.scrollView.contentSize = CGSize(width: scrollView.frame.width, height: self.textLabel.frame.maxY) + scrollView.contentSize = CGSize(width: scrollView.frame.width, height: textLabel.frame.maxY) generateInfo() } - func generateInfo() - { + func generateInfo() { NFXDebugInfo.getNFXIP { (result) -> Void in DispatchQueue.main.async { () -> Void in self.textLabel.attributedText = self.generateInfoString(result) diff --git a/example/Pods/netfox/netfox/iOS/NFXListCell_iOS.swift b/example/Pods/netfox/netfox/iOS/NFXListCell_iOS.swift index 53e3311..99e33e8 100755 --- a/example/Pods/netfox/netfox/iOS/NFXListCell_iOS.swift +++ b/example/Pods/netfox/netfox/iOS/NFXListCell_iOS.swift @@ -11,12 +11,7 @@ import Foundation import UIKit -#if swift(>=4.2) -typealias UITableViewCellStyle = UITableViewCell.CellStyle -#endif - -class NFXListCell: UITableViewCell -{ +class NFXListCell: UITableViewCell { let padding: CGFloat = 5 var URLLabel: UILabel! @@ -30,99 +25,93 @@ class NFXListCell: UITableViewCell var circleView: UIView! - override init(style: UITableViewCellStyle, reuseIdentifier: String?) - { + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { super.init(style: style, reuseIdentifier: reuseIdentifier) backgroundColor = UIColor.white selectionStyle = .none - self.statusView = UIView(frame: CGRect.zero) - contentView.addSubview(self.statusView) + statusView = UIView(frame: CGRect.zero) + contentView.addSubview(statusView) - self.requestTimeLabel = UILabel(frame: CGRect.zero) - self.requestTimeLabel.textAlignment = .center - self.requestTimeLabel.textColor = UIColor.white - self.requestTimeLabel.font = UIFont.NFXFontBold(size: 13) - contentView.addSubview(self.requestTimeLabel) + requestTimeLabel = UILabel(frame: CGRect.zero) + requestTimeLabel.textAlignment = .center + requestTimeLabel.textColor = UIColor.white + requestTimeLabel.font = UIFont.NFXFontBold(size: 13) + contentView.addSubview(requestTimeLabel) - self.timeIntervalLabel = UILabel(frame: CGRect.zero) - self.timeIntervalLabel.textAlignment = .center - self.timeIntervalLabel.font = UIFont.NFXFont(size: 12) - contentView.addSubview(self.timeIntervalLabel) + timeIntervalLabel = UILabel(frame: CGRect.zero) + timeIntervalLabel.textAlignment = .center + timeIntervalLabel.font = UIFont.NFXFont(size: 12) + contentView.addSubview(timeIntervalLabel) - self.URLLabel = UILabel(frame: CGRect.zero) - self.URLLabel.textColor = UIColor.NFXBlackColor() - self.URLLabel.font = UIFont.NFXFont(size: 12) - self.URLLabel.numberOfLines = 2 - contentView.addSubview(self.URLLabel) + URLLabel = UILabel(frame: CGRect.zero) + URLLabel.textColor = UIColor.NFXBlackColor() + URLLabel.font = UIFont.NFXFont(size: 12) + URLLabel.numberOfLines = 2 + contentView.addSubview(URLLabel) - self.methodLabel = UILabel(frame: CGRect.zero) - self.methodLabel.textAlignment = .left - self.methodLabel.textColor = UIColor.NFXGray44Color() - self.methodLabel.font = UIFont.NFXFont(size: 12) - contentView.addSubview(self.methodLabel) + methodLabel = UILabel(frame: CGRect.zero) + methodLabel.textAlignment = .left + methodLabel.textColor = UIColor.NFXGray44Color() + methodLabel.font = UIFont.NFXFont(size: 12) + contentView.addSubview(methodLabel) - self.typeLabel = UILabel(frame: CGRect.zero) - self.typeLabel.textColor = UIColor.NFXGray44Color() - self.typeLabel.font = UIFont.NFXFont(size: 12) - contentView.addSubview(self.typeLabel) + typeLabel = UILabel(frame: CGRect.zero) + typeLabel.textColor = UIColor.NFXGray44Color() + typeLabel.font = UIFont.NFXFont(size: 12) + contentView.addSubview(typeLabel) - self.circleView = UIView(frame: CGRect.zero) - self.circleView.backgroundColor = UIColor.NFXGray44Color() - self.circleView.layer.cornerRadius = 4 - self.circleView.alpha = 0.2 - contentView.addSubview(self.circleView) + circleView = UIView(frame: CGRect.zero) + circleView.backgroundColor = UIColor.NFXGray44Color() + circleView.layer.cornerRadius = 4 + circleView.alpha = 0.2 + contentView.addSubview(circleView) - self.leftSeparator = UIView(frame: CGRect.zero) - self.leftSeparator.backgroundColor = UIColor.white - contentView.addSubview(self.leftSeparator) + leftSeparator = UIView(frame: CGRect.zero) + leftSeparator.backgroundColor = UIColor.white + contentView.addSubview(leftSeparator) - self.rightSeparator = UIView(frame: CGRect.zero) - self.rightSeparator.backgroundColor = UIColor.NFXLightGrayColor() - contentView.addSubview(self.rightSeparator) + rightSeparator = UIView(frame: CGRect.zero) + rightSeparator.backgroundColor = UIColor.NFXLightGrayColor() + contentView.addSubview(rightSeparator) } - required init(coder aDecoder: NSCoder) - { + required init(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } - override func layoutSubviews() - { + override func layoutSubviews() { super.layoutSubviews() - self.statusView.frame = CGRect(x: 0, y: 0, width: 50, height: frame.height - 1) + statusView.frame = CGRect(x: 0, y: 0, width: 50, height: frame.height - 1) - self.requestTimeLabel.frame = CGRect(x: 0, y: 13, width: statusView.frame.width, height: 14) + requestTimeLabel.frame = CGRect(x: 0, y: 13, width: statusView.frame.width, height: 14) - self.timeIntervalLabel.frame = CGRect(x: 0, y: requestTimeLabel.frame.maxY + 5, width: statusView.frame.width, height: 14) + timeIntervalLabel.frame = CGRect(x: 0, y: requestTimeLabel.frame.maxY + 5, width: statusView.frame.width, height: 14) - self.URLLabel.frame = CGRect(x: statusView.frame.maxX + padding, y: 0, width: frame.width - URLLabel.frame.minX - 25 - padding, height: 40) - self.URLLabel.autoresizingMask = .flexibleWidth + URLLabel.frame = CGRect(x: statusView.frame.maxX + padding, y: 0, width: frame.width - URLLabel.frame.minX - 25 - padding, height: 40) + URLLabel.autoresizingMask = .flexibleWidth - self.methodLabel.frame = CGRect(x: statusView.frame.maxX + padding, y: URLLabel.frame.maxY - 2, width: 40, height: frame.height - URLLabel.frame.maxY - 2) + methodLabel.frame = CGRect(x: statusView.frame.maxX + padding, y: URLLabel.frame.maxY - 2, width: 40, height: frame.height - URLLabel.frame.maxY - 2) - self.typeLabel.frame = CGRect(x: methodLabel.frame.maxX + padding, y: URLLabel.frame.maxY - 2, width: 180, height: frame.height - URLLabel.frame.maxY - 2) + typeLabel.frame = CGRect(x: methodLabel.frame.maxX + padding, y: URLLabel.frame.maxY - 2, width: 180, height: frame.height - URLLabel.frame.maxY - 2) - self.circleView.frame = CGRect(x: self.URLLabel.frame.maxX + 5, y: 17, width: 8, height: 8) + circleView.frame = CGRect(x: URLLabel.frame.maxX + 5, y: 17, width: 8, height: 8) - self.leftSeparator.frame = CGRect(x: 0, y: frame.height - 1, width: self.statusView.frame.width, height: 1) - self.rightSeparator.frame = CGRect(x: self.leftSeparator.frame.maxX, y: frame.height - 1, width: frame.width - self.leftSeparator.frame.maxX, height: 1) + leftSeparator.frame = CGRect(x: 0, y: frame.height - 1, width: statusView.frame.width, height: 1) + rightSeparator.frame = CGRect(x: leftSeparator.frame.maxX, y: frame.height - 1, width: frame.width - leftSeparator.frame.maxX, height: 1) } - func isNew() - { - self.circleView.isHidden = false + func isNew() { + circleView.isHidden = false } - func isOld() - { - self.circleView.isHidden = true + func isOld() { + circleView.isHidden = true } - func configForObject(_ obj: NFXHTTPModel) - { + func configForObject(_ obj: NFXHTTPModel) { setURL(obj.requestURL ?? "-") setStatus(obj.responseStatus ?? 999) setTimeInterval(obj.timeInterval ?? 999) @@ -132,57 +121,50 @@ class NFXListCell: UITableViewCell isNewBasedOnDate(obj.responseDate as Date? ?? Date()) } - func setURL(_ url: String) - { - self.URLLabel.text = url + func setURL(_ url: String) { + URLLabel.text = url } - func setStatus(_ status: Int) - { + func setStatus(_ status: Int) { if status == 999 { - self.statusView.backgroundColor = UIColor.NFXGray44Color() //gray - self.timeIntervalLabel.textColor = UIColor.white + statusView.backgroundColor = UIColor.NFXGray44Color() //gray + timeIntervalLabel.textColor = UIColor.white } else if status < 400 { - self.statusView.backgroundColor = UIColor.NFXGreenColor() //green - self.timeIntervalLabel.textColor = UIColor.NFXDarkGreenColor() + statusView.backgroundColor = UIColor.NFXGreenColor() //green + timeIntervalLabel.textColor = UIColor.NFXDarkGreenColor() } else { - self.statusView.backgroundColor = UIColor.NFXRedColor() //red - self.timeIntervalLabel.textColor = UIColor.NFXDarkRedColor() + statusView.backgroundColor = UIColor.NFXRedColor() //red + timeIntervalLabel.textColor = UIColor.NFXDarkRedColor() } } - func setRequestTime(_ requestTime: String) - { - self.requestTimeLabel.text = requestTime + func setRequestTime(_ requestTime: String) { + requestTimeLabel.text = requestTime } - func setTimeInterval(_ timeInterval: Float) - { + func setTimeInterval(_ timeInterval: Float) { if timeInterval == 999 { - self.timeIntervalLabel.text = "-" + timeIntervalLabel.text = "-" } else { - self.timeIntervalLabel.text = NSString(format: "%.2f", timeInterval) as String + timeIntervalLabel.text = NSString(format: "%.2f", timeInterval) as String } } - func setType(_ type: String) - { - self.typeLabel.text = type + func setType(_ type: String) { + typeLabel.text = type } - func setMethod(_ method: String) - { - self.methodLabel.text = method + func setMethod(_ method: String) { + methodLabel.text = method } - func isNewBasedOnDate(_ responseDate: Date) - { + func isNewBasedOnDate(_ responseDate: Date) { if responseDate.isGreaterThanDate(NFX.sharedInstance().getLastVisitDate()) { - self.isNew() + isNew() } else { - self.isOld() + isOld() } } } diff --git a/example/Pods/netfox/netfox/iOS/NFXListController_iOS.swift b/example/Pods/netfox/netfox/iOS/NFXListController_iOS.swift index bdd8e7c..541a856 100755 --- a/example/Pods/netfox/netfox/iOS/NFXListController_iOS.swift +++ b/example/Pods/netfox/netfox/iOS/NFXListController_iOS.swift @@ -10,33 +10,36 @@ import Foundation import UIKit -class NFXListController_iOS: NFXListController, UITableViewDelegate, UITableViewDataSource, UISearchResultsUpdating, UISearchControllerDelegate, DataCleaner -{ + +class NFXListController_iOS: NFXListController, UITableViewDelegate, UITableViewDataSource, UISearchResultsUpdating, UISearchControllerDelegate, DataCleaner { + // MARK: Properties - var tableView: UITableView = UITableView() + var tableView = UITableView(frame: .zero, style: .grouped) var searchController: UISearchController! // MARK: View Life Cycle - override func viewDidLoad() - { + override func viewDidLoad() { super.viewDidLoad() - self.edgesForExtendedLayout = UIRectEdge.all - self.extendedLayoutIncludesOpaqueBars = true - self.automaticallyAdjustsScrollViewInsets = false + title = "Requests" - self.tableView.frame = self.view.frame - self.tableView.autoresizingMask = [.flexibleWidth, .flexibleHeight] - self.tableView.translatesAutoresizingMaskIntoConstraints = true - self.tableView.delegate = self - self.tableView.dataSource = self - self.view.addSubview(self.tableView) + edgesForExtendedLayout = UIRectEdge.all + extendedLayoutIncludesOpaqueBars = true + automaticallyAdjustsScrollViewInsets = false + tableView.frame = self.view.frame + tableView.autoresizingMask = [.flexibleWidth, .flexibleHeight] + tableView.translatesAutoresizingMaskIntoConstraints = true + tableView.delegate = self + tableView.dataSource = self + tableView.backgroundColor = .white + tableView.separatorInset = .zero + view.addSubview(self.tableView) - self.tableView.register(NFXListCell.self, forCellReuseIdentifier: NSStringFromClass(NFXListCell.self)) + tableView.register(NFXListCell.self, forCellReuseIdentifier: NSStringFromClass(NFXListCell.self)) - self.navigationItem.leftBarButtonItem = UIBarButtonItem(image: UIImage.NFXClose(), style: .plain, target: self, action: #selector(NFXListController_iOS.closeButtonPressed)) + navigationItem.leftBarButtonItem = UIBarButtonItem(image: UIImage.NFXClose(), style: .plain, target: self, action: #selector(NFXListController_iOS.closeButtonPressed)) let rightButtons = [ UIBarButtonItem(barButtonSystemItem: .trash, target: self, action: #selector(NFXListController_iOS.trashButtonPressed)), @@ -45,155 +48,99 @@ class NFXListController_iOS: NFXListController, UITableViewDelegate, UITableView self.navigationItem.rightBarButtonItems = rightButtons - - self.searchController = UISearchController(searchResultsController: nil) - self.searchController.searchResultsUpdater = self - self.searchController.delegate = self - self.searchController.hidesNavigationBarDuringPresentation = false - self.searchController.dimsBackgroundDuringPresentation = false - self.searchController.searchBar.autoresizingMask = [.flexibleWidth] - self.searchController.searchBar.backgroundColor = UIColor.clear - self.searchController.searchBar.barTintColor = UIColor.NFXOrangeColor() - self.searchController.searchBar.tintColor = UIColor.NFXOrangeColor() - self.searchController.searchBar.searchBarStyle = .minimal - self.searchController.view.backgroundColor = UIColor.clear + searchController = UISearchController(searchResultsController: nil) + searchController.searchResultsUpdater = self + searchController.delegate = self + searchController.hidesNavigationBarDuringPresentation = false + searchController.dimsBackgroundDuringPresentation = false + searchController.searchBar.autoresizingMask = [.flexibleWidth] + searchController.searchBar.backgroundColor = UIColor.clear + searchController.searchBar.barTintColor = UIColor.NFXOrangeColor() + searchController.searchBar.tintColor = UIColor.NFXOrangeColor() + searchController.searchBar.searchBarStyle = .minimal + searchController.view.backgroundColor = UIColor.clear if #available(iOS 11.0, *) { - self.navigationItem.searchController = self.searchController - self.definesPresentationContext = true + navigationItem.searchController = searchController + definesPresentationContext = true } else { let searchView = UIView() - searchView.frame = CGRect(x: 0, y: 0, width: self.view.frame.width - 60, height: 0) + searchView.frame = CGRect(x: 0, y: 0, width: view.frame.width - 60, height: 0) searchView.autoresizingMask = [.flexibleWidth] searchView.autoresizesSubviews = true searchView.backgroundColor = UIColor.clear - searchView.addSubview(self.searchController.searchBar) - self.searchController.searchBar.sizeToFit() - searchView.frame = self.searchController.searchBar.frame + searchView.addSubview(searchController.searchBar) + searchController.searchBar.sizeToFit() + searchView.frame = searchController.searchBar.frame - self.navigationItem.titleView = searchView - } - - NotificationCenter.default.addObserver( - self, - selector: #selector(NFXListController.reloadTableViewData), - name: NSNotification.Name.NFXReloadData, - object: nil) - - NotificationCenter.default.addObserver( - self, - selector: #selector(NFXListController_iOS.deactivateSearchController), - name: NSNotification.Name.NFXDeactivateSearch, - object: nil) + navigationItem.titleView = searchView + } } - override func viewWillAppear(_ animated: Bool) - { + override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) - reloadTableViewData() + + reloadData() } - - @objc func settingsButtonPressed() - { + + override func reloadData() { + self.tableView.reloadData() + } + + @objc func settingsButtonPressed() { var settingsController: NFXSettingsController_iOS settingsController = NFXSettingsController_iOS() - self.navigationController?.pushViewController(settingsController, animated: true) + navigationController?.pushViewController(settingsController, animated: true) } - @objc func trashButtonPressed() - { - self.clearData(sourceView: tableView, originingIn: nil) { - - self.reloadTableViewData() + @objc func trashButtonPressed() { + clearData(sourceView: tableView, originingIn: nil) { [weak self] in + self?.reloadData() } } - @objc func closeButtonPressed() - { + @objc func closeButtonPressed() { NFX.sharedInstance().hide() } // MARK: UISearchResultsUpdating - func updateSearchResults(for searchController: UISearchController) - { - self.updateSearchResultsForSearchControllerWithString(searchController.searchBar.text!) - reloadTableViewData() - } - - @objc func deactivateSearchController() - { - self.searchController.isActive = false + func updateSearchResults(for searchController: UISearchController) { + filter = searchController.searchBar.text } // MARK: UITableViewDataSource - func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int - { - if (self.searchController.isActive) { - return self.filteredTableData.count - } else { - return NFXHTTPModelManager.sharedInstance.getModels().count - } + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return tableData.count } - func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell - { - let cell = self.tableView.dequeueReusableCell(withIdentifier: NSStringFromClass(NFXListCell.self), for: indexPath) as! NFXListCell + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: NSStringFromClass(NFXListCell.self), for: indexPath) as! NFXListCell - if (self.searchController.isActive) { - if self.filteredTableData.count > 0 { - let obj = self.filteredTableData[(indexPath as NSIndexPath).row] - cell.configForObject(obj) - } - } else { - if NFXHTTPModelManager.sharedInstance.getModels().count > 0 { - let obj = NFXHTTPModelManager.sharedInstance.getModels()[(indexPath as NSIndexPath).row] - cell.configForObject(obj) - } - } + cell.configForObject(tableData[indexPath.row]) return cell } - func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? - { - return UIView.init(frame: CGRect.zero) - } - - override func reloadTableViewData() - { - DispatchQueue.main.async { () -> Void in - self.tableView.reloadData() - self.tableView.setNeedsDisplay() - } - } - - func numberOfSections(in tableView: UITableView) -> Int - { - return 1 + func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? { + return UIView(frame: .zero) } - func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) - { - var detailsController : NFXDetailsController_iOS - detailsController = NFXDetailsController_iOS() - var model: NFXHTTPModel - if (self.searchController.isActive) { - model = self.filteredTableData[(indexPath as NSIndexPath).row] - } else { - model = NFXHTTPModelManager.sharedInstance.getModels()[(indexPath as NSIndexPath).row] - } + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + let detailsController = NFXDetailsController_iOS() + let model = tableData[indexPath.row] + detailsController.selectedModel(model) - self.navigationController?.pushViewController(detailsController, animated: true) - + + navigationController?.pushViewController(detailsController, animated: true) } - func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat - { + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return 58 } - + } #endif + diff --git a/example/Pods/netfox/netfox/Core/NFXRawBodyDetailsController.swift b/example/Pods/netfox/netfox/iOS/NFXRawBodyDetailsController.swift similarity index 62% rename from example/Pods/netfox/netfox/Core/NFXRawBodyDetailsController.swift rename to example/Pods/netfox/netfox/iOS/NFXRawBodyDetailsController.swift index 21e59a9..a4c7642 100755 --- a/example/Pods/netfox/netfox/Core/NFXRawBodyDetailsController.swift +++ b/example/Pods/netfox/netfox/iOS/NFXRawBodyDetailsController.swift @@ -10,37 +10,36 @@ import Foundation import UIKit -class NFXRawBodyDetailsController: NFXGenericBodyDetailsController -{ +class NFXRawBodyDetailsController: NFXGenericBodyDetailsController { var bodyView: UITextView = UITextView() private var copyAlert: UIAlertController? - override func viewDidLoad() - { + override func viewDidLoad() { super.viewDidLoad() + let viewFrame = view.frame - self.title = "Body details" + title = "Body details" - self.bodyView.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height) - self.bodyView.autoresizingMask = [.flexibleWidth, .flexibleHeight] - self.bodyView.backgroundColor = UIColor.clear - self.bodyView.textColor = UIColor.NFXGray44Color() - self.bodyView.textAlignment = .left - self.bodyView.isEditable = false - self.bodyView.isSelectable = false - self.bodyView.font = UIFont.NFXFont(size: 13) + bodyView.frame = CGRect(x: 0, y: 0, width: viewFrame.width, height: viewFrame.height) + bodyView.autoresizingMask = [.flexibleWidth, .flexibleHeight] + bodyView.backgroundColor = UIColor.clear + bodyView.textColor = UIColor.NFXGray44Color() + bodyView.textAlignment = .left + bodyView.isEditable = false + bodyView.isSelectable = false + bodyView.font = UIFont.NFXFont(size: 13) let lpgr = UILongPressGestureRecognizer(target: self, action: #selector(NFXRawBodyDetailsController.copyLabel)) - self.bodyView.addGestureRecognizer(lpgr) + bodyView.addGestureRecognizer(lpgr) switch bodyType { case .request: - self.bodyView.text = self.selectedModel.getRequestBody() as String + bodyView.text = selectedModel.getRequestBody() as String default: - self.bodyView.text = self.selectedModel.getResponseBody() as String + bodyView.text = selectedModel.getResponseBody() as String } - self.view.addSubview(self.bodyView) + view.addSubview(bodyView) } @objc fileprivate func copyLabel(lpgr: UILongPressGestureRecognizer) { @@ -52,7 +51,7 @@ class NFXRawBodyDetailsController: NFXGenericBodyDetailsController let alert = UIAlertController(title: "Text Copied!", message: nil, preferredStyle: .alert) copyAlert = alert - self.present(alert, animated: true) { [weak self] in + present(alert, animated: true) { [weak self] in guard let `self` = self else { return } Timer.scheduledTimer(timeInterval: 0.45, diff --git a/example/Pods/netfox/netfox/iOS/NFXSettingsController_iOS.swift b/example/Pods/netfox/netfox/iOS/NFXSettingsController_iOS.swift index 9ab4c79..2f7c574 100644 --- a/example/Pods/netfox/netfox/iOS/NFXSettingsController_iOS.swift +++ b/example/Pods/netfox/netfox/iOS/NFXSettingsController_iOS.swift @@ -12,106 +12,100 @@ import MessageUI class NFXSettingsController_iOS: NFXSettingsController, UITableViewDelegate, UITableViewDataSource, MFMailComposeViewControllerDelegate, DataCleaner { - var tableView: UITableView = UITableView() + var tableView: UITableView = UITableView(frame: .zero, style: .grouped) // MARK: View Life Cycle - override func viewDidLoad() - { + override func viewDidLoad() { super.viewDidLoad() nfxURL = "https://github.com/kasketis/netfox" - self.title = "Settings" + title = "Settings" - self.tableData = HTTPModelShortType.allValues - self.filters = NFX.sharedInstance().getCachedFilters() + tableData = HTTPModelShortType.allCases - self.edgesForExtendedLayout = UIRectEdge() - self.extendedLayoutIncludesOpaqueBars = false - self.automaticallyAdjustsScrollViewInsets = false + edgesForExtendedLayout = UIRectEdge() + extendedLayoutIncludesOpaqueBars = false + automaticallyAdjustsScrollViewInsets = false - self.navigationItem.rightBarButtonItems = [UIBarButtonItem(image: UIImage.NFXStatistics(), style: .plain, target: self, action: #selector(NFXSettingsController_iOS.statisticsButtonPressed)), UIBarButtonItem(image: UIImage.NFXInfo(), style: .plain, target: self, action: #selector(NFXSettingsController_iOS.infoButtonPressed))] + navigationItem.rightBarButtonItems = [UIBarButtonItem(image: UIImage.NFXStatistics(), style: .plain, target: self, action: #selector(NFXSettingsController_iOS.statisticsButtonPressed)), UIBarButtonItem(image: UIImage.NFXInfo(), style: .plain, target: self, action: #selector(NFXSettingsController_iOS.infoButtonPressed))] - self.tableView.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height - 60) - self.tableView.autoresizingMask = [.flexibleWidth, .flexibleHeight] - self.tableView.translatesAutoresizingMaskIntoConstraints = true - self.tableView.delegate = self - self.tableView.dataSource = self - self.tableView.alwaysBounceVertical = false - self.tableView.backgroundColor = UIColor.clear - self.tableView.tableFooterView = UIView(frame: CGRect.zero) - self.tableView.tableFooterView?.isHidden = true - self.view.addSubview(self.tableView) + tableView.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height - 60) + tableView.autoresizingMask = [.flexibleWidth, .flexibleHeight] + tableView.translatesAutoresizingMaskIntoConstraints = true + tableView.delegate = self + tableView.dataSource = self + tableView.alwaysBounceVertical = false + tableView.backgroundColor = UIColor.clear + tableView.separatorInset = .zero + + tableView.tableFooterView = UIView(frame: CGRect.zero) + tableView.tableFooterView?.isHidden = true + view.addSubview(tableView) var nfxVersionLabel: UILabel - nfxVersionLabel = UILabel(frame: CGRect(x: 10, y: self.view.frame.height - 60, width: self.view.frame.width - 2*10, height: 30)) + nfxVersionLabel = UILabel(frame: CGRect(x: 10, y: view.frame.height - 60, width: view.frame.width - 2*10, height: 30)) nfxVersionLabel.autoresizingMask = [.flexibleTopMargin, .flexibleWidth] nfxVersionLabel.font = UIFont.NFXFont(size: 14) nfxVersionLabel.textColor = UIColor.NFXOrangeColor() nfxVersionLabel.textAlignment = .center nfxVersionLabel.text = nfxVersionString - self.view.addSubview(nfxVersionLabel) + view.addSubview(nfxVersionLabel) var nfxURLButton: UIButton - nfxURLButton = UIButton(frame: CGRect(x: 10, y: self.view.frame.height - 40, width: self.view.frame.width - 2*10, height: 30)) + nfxURLButton = UIButton(frame: CGRect(x: 10, y: view.frame.height - 40, width: view.frame.width - 2*10, height: 30)) nfxURLButton.autoresizingMask = [.flexibleTopMargin, .flexibleWidth] nfxURLButton.titleLabel?.font = UIFont.NFXFont(size: 12) nfxURLButton.setTitleColor(UIColor.NFXGray44Color(), for: .init()) nfxURLButton.titleLabel?.textAlignment = .center nfxURLButton.setTitle(nfxURL, for: .init()) nfxURLButton.addTarget(self, action: #selector(NFXSettingsController_iOS.nfxURLButtonPressed), for: .touchUpInside) - self.view.addSubview(nfxURLButton) + view.addSubview(nfxURLButton) } - override func viewWillDisappear(_ animated: Bool) - { + override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) - NFX.sharedInstance().cacheFilters(self.filters) + NFXHTTPModelManager.shared.filters = filters } - @objc func nfxURLButtonPressed() - { + @objc func nfxURLButtonPressed() { UIApplication.shared.openURL(URL(string: nfxURL)!) } - @objc func infoButtonPressed() - { + @objc func infoButtonPressed() { var infoController: NFXInfoController_iOS infoController = NFXInfoController_iOS() - self.navigationController?.pushViewController(infoController, animated: true) + navigationController?.pushViewController(infoController, animated: true) } - @objc func statisticsButtonPressed() - { + @objc func statisticsButtonPressed() { var statisticsController: NFXStatisticsController_iOS statisticsController = NFXStatisticsController_iOS() - self.navigationController?.pushViewController(statisticsController, animated: true) + navigationController?.pushViewController(statisticsController, animated: true) } // MARK: UITableViewDataSource - func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int - { + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { switch section { case 0: return 1 case 1: return self.tableData.count case 2: return 1 case 3: return 1 - default: return 0 } } - func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell - { + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = UITableViewCell() cell.textLabel?.font = UIFont.NFXFont(size: 14) + cell.textLabel?.textColor = .black cell.tintColor = UIColor.NFXOrangeColor() + cell.backgroundColor = .white - switch (indexPath as NSIndexPath).section - { + switch indexPath.section { case 0: cell.textLabel?.text = "Logging" let nfxEnabledSwitch: UISwitch @@ -122,7 +116,7 @@ class NFXSettingsController_iOS: NFXSettingsController, UITableViewDelegate, UIT return cell case 1: - let shortType = tableData[(indexPath as NSIndexPath).row] + let shortType = tableData[indexPath.row] cell.textLabel?.text = shortType.rawValue configureCell(cell, indexPath: indexPath) return cell @@ -143,26 +137,15 @@ class NFXSettingsController_iOS: NFXSettingsController, UITableViewDelegate, UIT return cell default: return UITableViewCell() - - } - - } - - func reloadTableData() - { - DispatchQueue.main.async { () -> Void in - self.tableView.reloadData() - self.tableView.setNeedsDisplay() + } } - func numberOfSections(in tableView: UITableView) -> Int - { + func numberOfSections(in tableView: UITableView) -> Int { return 4 } - func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? - { + func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { let headerView = UIView() headerView.backgroundColor = UIColor.NFXGray95Color() @@ -185,46 +168,35 @@ class NFXSettingsController_iOS: NFXSettingsController, UITableViewDelegate, UIT } return headerView - } - func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) - { - switch (indexPath as NSIndexPath).section - { + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + switch indexPath.section { case 1: let cell = tableView.cellForRow(at: indexPath) - self.filters[(indexPath as NSIndexPath).row] = !self.filters[(indexPath as NSIndexPath).row] + self.filters[indexPath.row] = !self.filters[indexPath.row] configureCell(cell, indexPath: indexPath) - break - case 2: shareSessionLogsPressed() - break - case 3: clearDataButtonPressedOnTableIndex(indexPath) + default: break - - default: break } tableView.deselectRow(at: indexPath, animated: true) } - func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat - { - switch (indexPath as NSIndexPath).section { + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { + switch indexPath.section { case 0: return 44 case 1: return 33 case 2,3: return 44 - default: return 0 } } - func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat - { + func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { let iPhone4s = (UIScreen.main.bounds.height == 480) switch section { case 0: @@ -250,19 +222,11 @@ class NFXSettingsController_iOS: NFXSettingsController, UITableViewDelegate, UIT } } - func configureCell(_ cell: UITableViewCell?, indexPath: IndexPath) - { - if (cell != nil) { - if self.filters[(indexPath as NSIndexPath).row] { - cell!.accessoryType = .checkmark - } else { - cell!.accessoryType = .none - } - } + func configureCell(_ cell: UITableViewCell?, indexPath: IndexPath) { + cell?.accessoryType = filters[indexPath.row] ? .checkmark : .none } - @objc func nfxEnabledSwitchValueChanged(_ sender: UISwitch) - { + @objc func nfxEnabledSwitchValueChanged(_ sender: UISwitch) { if sender.isOn { NFX.sharedInstance().enable() } else { @@ -270,30 +234,26 @@ class NFXSettingsController_iOS: NFXSettingsController, UITableViewDelegate, UIT } } - func clearDataButtonPressedOnTableIndex(_ index: IndexPath) - { - + func clearDataButtonPressedOnTableIndex(_ index: IndexPath) { clearData(sourceView: tableView, originingIn: tableView.rectForRow(at: index)) { } } - func shareSessionLogsPressed() - { + func shareSessionLogsPressed() { if (MFMailComposeViewController.canSendMail()) { let mailComposer = MFMailComposeViewController() mailComposer.mailComposeDelegate = self mailComposer.setSubject("netfox log - Session Log \(NSDate())") - if let sessionLogData = NSData(contentsOfFile: NFXPath.SessionLog as String) { - mailComposer.addAttachmentData(sessionLogData as Data, mimeType: "text/plain", fileName: "session.log") + if let sessionLogData = try? Data(contentsOf: NFXPath.sessionLogURL) { + mailComposer.addAttachmentData(sessionLogData as Data, mimeType: "text/plain", fileName: NFXPath.sessionLogName) } - self.present(mailComposer, animated: true, completion: nil) + present(mailComposer, animated: true, completion: nil) } } - func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) - { - self.dismiss(animated: true, completion: nil) + func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) { + dismiss(animated: true, completion: nil) } } diff --git a/example/Pods/netfox/netfox/iOS/NFXStatisticsController_iOS.swift b/example/Pods/netfox/netfox/iOS/NFXStatisticsController_iOS.swift index 152d739..f634c55 100644 --- a/example/Pods/netfox/netfox/iOS/NFXStatisticsController_iOS.swift +++ b/example/Pods/netfox/netfox/iOS/NFXStatisticsController_iOS.swift @@ -11,50 +11,36 @@ import UIKit class NFXStatisticsController_iOS: NFXStatisticsController { - var scrollView: UIScrollView = UIScrollView() - var textLabel: UILabel = UILabel() + private let scrollView: UIScrollView = UIScrollView() + private let textLabel: UILabel = UILabel() - override func viewDidLoad() - { + override func viewDidLoad() { super.viewDidLoad() - self.title = "Statistics" + title = "Statistics" - generateStatics() + scrollView.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height) + scrollView.autoresizingMask = [.flexibleWidth, .flexibleHeight] + scrollView.autoresizesSubviews = true + scrollView.backgroundColor = UIColor.clear + view.addSubview(scrollView) - self.scrollView = UIScrollView() - self.scrollView.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height) - self.scrollView.autoresizingMask = [.flexibleWidth, .flexibleHeight] - self.scrollView.autoresizesSubviews = true - self.scrollView.backgroundColor = UIColor.clear - self.view.addSubview(self.scrollView) - - self.textLabel = UILabel() - self.textLabel.frame = CGRect(x: 20, y: 20, width: scrollView.frame.width - 40, height: scrollView.frame.height - 20); - self.textLabel.font = UIFont.NFXFont(size: 13) - self.textLabel.textColor = UIColor.NFXGray44Color() - self.textLabel.numberOfLines = 0 - self.textLabel.attributedText = getReportString() - self.textLabel.sizeToFit() - self.scrollView.addSubview(self.textLabel) - - self.scrollView.contentSize = CGSize(width: scrollView.frame.width, height: self.textLabel.frame.maxY) - - NotificationCenter.default.addObserver( - self, - selector: #selector(NFXGenericController.reloadData), - name: NSNotification.Name.NFXReloadData, - object: nil) + textLabel.frame = CGRect(x: 20, y: 20, width: scrollView.frame.width - 40, height: scrollView.frame.height - 20); + textLabel.font = UIFont.NFXFont(size: 13) + textLabel.textColor = UIColor.NFXGray44Color() + textLabel.numberOfLines = 0 + textLabel.sizeToFit() + scrollView.addSubview(textLabel) + scrollView.contentSize = CGSize(width: scrollView.frame.width, height: textLabel.frame.maxY) } - override func reloadData() - { + override func reloadData() { super.reloadData() - DispatchQueue.main.async { () -> Void in - self.textLabel.attributedText = self.getReportString() - } + + textLabel.attributedText = getReportString() } + } #endif diff --git a/example/Pods/netfox/netfox/iOS/NFXURLDetailsControllerViewController.swift b/example/Pods/netfox/netfox/iOS/NFXURLDetailsControllerViewController.swift index 2592452..6199c8b 100644 --- a/example/Pods/netfox/netfox/iOS/NFXURLDetailsControllerViewController.swift +++ b/example/Pods/netfox/netfox/iOS/NFXURLDetailsControllerViewController.swift @@ -15,32 +15,28 @@ class NFXURLDetailsController: NFXDetailsController { override func viewDidLoad() { super.viewDidLoad() - self.title = "URL Query Strings" - self.view.layer.masksToBounds = true - self.view.translatesAutoresizingMaskIntoConstraints = true + title = "URL Query Strings" + view.layer.masksToBounds = true + view.translatesAutoresizingMaskIntoConstraints = true let tableView: UITableView = UITableView() - tableView.frame = self.view.bounds + tableView.frame = view.bounds tableView.dataSource = self tableView.autoresizingMask = [.flexibleWidth, .flexibleHeight] - self.view.addSubview(tableView) + view.addSubview(tableView) } } extension NFXURLDetailsController: UITableViewDataSource { - func numberOfSections(in tableView: UITableView) -> Int { - return 1 - } - func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { var cell: UITableViewCell! cell = tableView.dequeueReusableCell(withIdentifier: "cell") if cell == nil { cell = UITableViewCell(style: .value1, reuseIdentifier: "cell") } - if let queryItem = self.selectedModel.requestURLQueryItems?[indexPath.row] { + if let queryItem = selectedModel.requestURLQueryItems?[indexPath.row] { cell.textLabel?.text = queryItem.name cell.detailTextLabel?.text = queryItem.value } @@ -48,7 +44,7 @@ extension NFXURLDetailsController: UITableViewDataSource { } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - guard let queryItems = self.selectedModel.requestURLQueryItems else { + guard let queryItems = selectedModel.requestURLQueryItems else { return 0 } return queryItems.count @@ -56,5 +52,4 @@ extension NFXURLDetailsController: UITableViewDataSource { } - #endif diff --git a/example/netfox-zxkit.xcworkspace/xcuserdata/damon.xcuserdatad/UserInterfaceState.xcuserstate b/example/netfox-zxkit.xcworkspace/xcuserdata/damon.xcuserdatad/UserInterfaceState.xcuserstate index b9c48a7b39db6d0d90c23823f82f1f0c7a2d5f68..42ea2868d791924df617c939709e7b1d16c74be9 100644 GIT binary patch literal 25773 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 literal 26067 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 "Apache-2.0", :file => "LICENSE" } s.summary = 'a quick look on all executed network requests performed by netfox' s.homepage = 'https://github.com/ZXKitCode/netfox-zxkit' @@ -13,7 +13,7 @@ s.resource_bundles = { 'NetFoxZXKit' => ['pod/assets/**/*'] } s.source_files = "pod/zxkit/*.swift" -s.dependency 'netfox' +s.dependency 'netfox', '1.21.0' s.dependency 'ZXKitCore' s.documentation_url = 'https://blog.hudongdong.com/ios/1169.html' end