Browse Source

New build

marinofaggiana 5 years ago
parent
commit
4cdac9006d
100 changed files with 72 additions and 12912 deletions
  1. 1 1
      Cartfile
  2. 2 2
      Cartfile.resolved
  3. 7 27
      Carthage/Checkouts/CocoaLumberjack/.gitignore
  4. 20 16
      Carthage/Checkouts/CocoaLumberjack/.travis.yml
  5. 10 0
      Carthage/Checkouts/CocoaLumberjack/CHANGELOG.md
  6. 0 48
      Carthage/Checkouts/CocoaLumberjack/Classes/CLI/CLIColor.h
  7. 0 59
      Carthage/Checkouts/CocoaLumberjack/Classes/CLI/CLIColor.m
  8. 0 103
      Carthage/Checkouts/CocoaLumberjack/Classes/CocoaLumberjack.h
  9. 0 188
      Carthage/Checkouts/CocoaLumberjack/Classes/CocoaLumberjack.swift
  10. 0 42
      Carthage/Checkouts/CocoaLumberjack/Classes/DDASLLogCapture.h
  11. 0 200
      Carthage/Checkouts/CocoaLumberjack/Classes/DDASLLogCapture.m
  12. 0 59
      Carthage/Checkouts/CocoaLumberjack/Classes/DDASLLogger.h
  13. 0 125
      Carthage/Checkouts/CocoaLumberjack/Classes/DDASLLogger.m
  14. 0 123
      Carthage/Checkouts/CocoaLumberjack/Classes/DDAbstractDatabaseLogger.h
  15. 0 659
      Carthage/Checkouts/CocoaLumberjack/Classes/DDAbstractDatabaseLogger.m
  16. 0 26
      Carthage/Checkouts/CocoaLumberjack/Classes/DDAssertMacros.h
  17. 0 545
      Carthage/Checkouts/CocoaLumberjack/Classes/DDFileLogger.h
  18. 0 1712
      Carthage/Checkouts/CocoaLumberjack/Classes/DDFileLogger.m
  19. 0 75
      Carthage/Checkouts/CocoaLumberjack/Classes/DDLegacyMacros.h
  20. 0 83
      Carthage/Checkouts/CocoaLumberjack/Classes/DDLog+LOGV.h
  21. 0 912
      Carthage/Checkouts/CocoaLumberjack/Classes/DDLog.h
  22. 0 1300
      Carthage/Checkouts/CocoaLumberjack/Classes/DDLog.m
  23. 0 101
      Carthage/Checkouts/CocoaLumberjack/Classes/DDLogMacros.h
  24. 0 50
      Carthage/Checkouts/CocoaLumberjack/Classes/DDOSLogger.h
  25. 0 120
      Carthage/Checkouts/CocoaLumberjack/Classes/DDOSLogger.m
  26. 0 178
      Carthage/Checkouts/CocoaLumberjack/Classes/DDTTYLogger.h
  27. 0 1487
      Carthage/Checkouts/CocoaLumberjack/Classes/DDTTYLogger.m
  28. 0 117
      Carthage/Checkouts/CocoaLumberjack/Classes/Extensions/DDContextFilterLogFormatter.h
  29. 0 196
      Carthage/Checkouts/CocoaLumberjack/Classes/Extensions/DDContextFilterLogFormatter.m
  30. 0 191
      Carthage/Checkouts/CocoaLumberjack/Classes/Extensions/DDDispatchQueueLogFormatter.h
  31. 0 330
      Carthage/Checkouts/CocoaLumberjack/Classes/Extensions/DDDispatchQueueLogFormatter.m
  32. 0 56
      Carthage/Checkouts/CocoaLumberjack/Classes/Extensions/DDMultiFormatter.h
  33. 0 112
      Carthage/Checkouts/CocoaLumberjack/Classes/Extensions/DDMultiFormatter.m
  34. 4 5
      Carthage/Checkouts/CocoaLumberjack/CocoaLumberjack.podspec
  35. 0 47
      Carthage/Checkouts/CocoaLumberjack/Framework/Lumberjack.xcworkspace/contents.xcworkspacedata
  36. 0 8
      Carthage/Checkouts/CocoaLumberjack/Framework/Lumberjack.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
  37. 0 28
      Carthage/Checkouts/CocoaLumberjack/Framework/Lumberjack/CocoaLumberjack-Info.plist
  38. 0 22
      Carthage/Checkouts/CocoaLumberjack/Framework/Lumberjack/CocoaLumberjack-Prefix.pch
  39. 0 28
      Carthage/Checkouts/CocoaLumberjack/Framework/Lumberjack/CocoaLumberjackSwift-Info.plist
  40. 0 21
      Carthage/Checkouts/CocoaLumberjack/Framework/Lumberjack/CocoaLumberjackSwift.h
  41. 0 207
      Carthage/Checkouts/CocoaLumberjack/Tests/Tests/DDBasicLoggingTests.m
  42. 0 226
      Carthage/Checkouts/CocoaLumberjack/Tests/Tests/DDLogMessageTests.m
  43. 0 94
      Carthage/Checkouts/CocoaLumberjack/Tests/Tests/DDLogTests.m
  44. 0 280
      Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Pods/Headers/Private/DZNEmptyDataSet/UIScrollView+EmptyDataSet.h
  45. 1 0
      Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Pods/Headers/Private/DZNEmptyDataSet/UIScrollView+EmptyDataSet.h
  46. 0 280
      Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Pods/Headers/Public/DZNEmptyDataSet/UIScrollView+EmptyDataSet.h
  47. 1 0
      Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Pods/Headers/Public/DZNEmptyDataSet/UIScrollView+EmptyDataSet.h
  48. 0 280
      Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Pods/Headers/Private/DZNEmptyDataSet/UIScrollView+EmptyDataSet.h
  49. 1 0
      Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Pods/Headers/Private/DZNEmptyDataSet/UIScrollView+EmptyDataSet.h
  50. 0 280
      Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Pods/Headers/Public/DZNEmptyDataSet/UIScrollView+EmptyDataSet.h
  51. 1 0
      Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Pods/Headers/Public/DZNEmptyDataSet/UIScrollView+EmptyDataSet.h
  52. 0 280
      Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Pods/Headers/Private/DZNEmptyDataSet/UIScrollView+EmptyDataSet.h
  53. 1 0
      Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Pods/Headers/Private/DZNEmptyDataSet/UIScrollView+EmptyDataSet.h
  54. 0 87
      Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Pods/Headers/Private/NSManagedObjectContext-Hydrate/NSManagedObjectContext+Hydrate.h
  55. 1 0
      Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Pods/Headers/Private/NSManagedObjectContext-Hydrate/NSManagedObjectContext+Hydrate.h
  56. 0 280
      Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Pods/Headers/Public/DZNEmptyDataSet/UIScrollView+EmptyDataSet.h
  57. 1 0
      Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Pods/Headers/Public/DZNEmptyDataSet/UIScrollView+EmptyDataSet.h
  58. 0 87
      Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Pods/Headers/Public/NSManagedObjectContext-Hydrate/NSManagedObjectContext+Hydrate.h
  59. 1 0
      Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Pods/Headers/Public/NSManagedObjectContext-Hydrate/NSManagedObjectContext+Hydrate.h
  60. 0 280
      Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Private/DZNEmptyDataSet/UIScrollView+EmptyDataSet.h
  61. 1 0
      Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Private/DZNEmptyDataSet/UIScrollView+EmptyDataSet.h
  62. 0 45
      Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Private/DZNWebViewController/DZNPolyActivity.h
  63. 1 0
      Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Private/DZNWebViewController/DZNPolyActivity.h
  64. 0 75
      Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Private/DZNWebViewController/DZNWebViewController.h
  65. 1 0
      Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Private/DZNWebViewController/DZNWebViewController.h
  66. 0 35
      Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Private/NJKWebViewProgress/NJKWebViewProgress.h
  67. 1 0
      Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Private/NJKWebViewProgress/NJKWebViewProgress.h
  68. 0 21
      Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Private/NJKWebViewProgress/NJKWebViewProgressView.h
  69. 1 0
      Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Private/NJKWebViewProgress/NJKWebViewProgressView.h
  70. 0 280
      Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Public/DZNEmptyDataSet/UIScrollView+EmptyDataSet.h
  71. 1 0
      Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Public/DZNEmptyDataSet/UIScrollView+EmptyDataSet.h
  72. 0 45
      Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Public/DZNWebViewController/DZNPolyActivity.h
  73. 1 0
      Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Public/DZNWebViewController/DZNPolyActivity.h
  74. 0 75
      Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Public/DZNWebViewController/DZNWebViewController.h
  75. 1 0
      Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Public/DZNWebViewController/DZNWebViewController.h
  76. 0 35
      Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Public/NJKWebViewProgress/NJKWebViewProgress.h
  77. 1 0
      Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Public/NJKWebViewProgress/NJKWebViewProgress.h
  78. 0 21
      Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Public/NJKWebViewProgress/NJKWebViewProgressView.h
  79. 1 0
      Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Public/NJKWebViewProgress/NJKWebViewProgressView.h
  80. 0 42
      Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/EARestrictedScrollView/EARestrictedScrollView.h
  81. 1 0
      Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/EARestrictedScrollView/EARestrictedScrollView.h
  82. 0 14
      Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/Expecta+Snapshots/EXPMatchers+FBSnapshotTest.h
  83. 1 0
      Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/Expecta+Snapshots/EXPMatchers+FBSnapshotTest.h
  84. 0 17
      Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/Expecta+Snapshots/ExpectaObject+FBSnapshotTest.h
  85. 1 0
      Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/Expecta+Snapshots/ExpectaObject+FBSnapshotTest.h
  86. 0 25
      Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/Expecta/EXPBlockDefinedMatcher.h
  87. 1 0
      Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/Expecta/EXPBlockDefinedMatcher.h
  88. 0 17
      Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/Expecta/EXPDefines.h
  89. 1 0
      Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/Expecta/EXPDefines.h
  90. 0 13
      Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/Expecta/EXPDoubleTuple.h
  91. 1 0
      Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/Expecta/EXPDoubleTuple.h
  92. 0 45
      Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/Expecta/EXPExpect.h
  93. 1 0
      Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/Expecta/EXPExpect.h
  94. 0 13
      Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/Expecta/EXPFloatTuple.h
  95. 1 0
      Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/Expecta/EXPFloatTuple.h
  96. 0 20
      Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/Expecta/EXPMatcher.h
  97. 1 0
      Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/Expecta/EXPMatcher.h
  98. 0 4
      Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/Expecta/EXPMatcherHelpers.h
  99. 1 0
      Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/Expecta/EXPMatcherHelpers.h
  100. 0 7
      Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/Expecta/EXPMatchers+beCloseTo.h

+ 1 - 1
Cartfile

@@ -16,7 +16,7 @@ github "weichsel/ZIPFoundation" == 0.9.9
 github "rechsteiner/Parchment" == 1.6.0
 github "WenchaoD/FSCalendar"
 github "AssistoLab/DropDown"
-github "krzyzanowskim/OpenSSL"
+github "krzyzanowskim/OpenSSL" "1.0.218"
 
 github "https://github.com/marinofaggiana/FastScroll" "master"
 github "https://github.com/marinofaggiana/AFNetworking" "master"

+ 2 - 2
Cartfile.resolved

@@ -1,8 +1,8 @@
 github "AssistoLab/DropDown" "v2.3.13"
 github "ChangbaDevs/KTVHTTPCache" "2.0.1"
-github "CocoaLumberjack/CocoaLumberjack" "3.5.3"
+github "CocoaLumberjack/CocoaLumberjack" "3.6.0"
 github "MortimerGoro/MGSwipeTableCell" "1.6.8"
-github "SVGKit/SVGKit" "2.1.0"
+github "SVGKit/SVGKit" "39dd210fd47e3195f57f914354ffd2d0b4b8ff1c"
 github "WeTransfer/WeScan" "v1.1.0"
 github "WenchaoD/FSCalendar" "2.8.0"
 github "calimarkus/JDStatusBarNotification" "1.6.0"

+ 7 - 27
Carthage/Checkouts/CocoaLumberjack/.gitignore

@@ -1,34 +1,14 @@
 # Xcode
 #
-build/
-*.pbxuser
-!default.pbxuser
-*.mode1v3
-!default.mode1v3
-*.mode2v3
-!default.mode2v3
-*.perspectivev3
-!default.perspectivev3
-project.xcworkspace
-!default.xcworkspace
-xcuserdata
-*.xccheckout
-*.moved-aside
-DerivedData
-*.hmap
-*.ipa
-*.xcuserstate
+.DS_Store
+/.build
+/.swiftpm
+/Packages
+/*.xcodeproj
+xcuserdata/
 
 # Carthage
 Carthage/Build
 
-# CocoaPods
-#
-# We recommend against adding the Pods directory to your .gitignore. However
-# you should judge for yourself, the pros and cons are mentioned at:
-# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control
-#
-Pods/
-Podfile.lock
+# Lumberjack generated files
 LumberjackUser*.h
-.DS_Store

+ 20 - 16
Carthage/Checkouts/CocoaLumberjack/.travis.yml

@@ -1,6 +1,6 @@
 
 language: objective-c
-osx_image: xcode10.2
+osx_image: xcode11
 
 branches:
     only:
@@ -25,24 +25,28 @@ before_install:
 script:
     - set -o pipefail
 
-    - echo "Check if the library described by the podspec can be built"
+    - echo "Check external deployment platforms"
+    - echo "Check CocoaPods CocoaLumberjack.podspec"
     - pod lib lint
 
+    - echo "Check Swift Package manager Package.swift"
+    - swift test
+
     - echo "Build as static library"
-    - xcodebuild clean build -workspace Framework/Lumberjack.xcworkspace -scheme 'CocoaLumberjack-Static' -sdk iphonesimulator PLATFORM_NAME=iphonesimulator -configuration Release | xcpretty -c
-    - xcodebuild clean build -workspace Framework/Lumberjack.xcworkspace -scheme 'CocoaLumberjack-Static' -sdk macosx -configuration Release | xcpretty -c
+    - xcodebuild clean build -workspace Xcode/Lumberjack.xcworkspace -scheme 'CocoaLumberjack-Static' -sdk iphonesimulator PLATFORM_NAME=iphonesimulator -configuration Release | xcpretty -c
+    - xcodebuild clean build -workspace Xcode/Lumberjack.xcworkspace -scheme 'CocoaLumberjack-Static' -sdk macosx -configuration Release | xcpretty -c
 
     - echo "Build as dynamic framework (ObjectiveC), each platform (iOS, macOS, tvOS, watchOS)"
-    - xcodebuild clean build -workspace Framework/Lumberjack.xcworkspace -scheme 'CocoaLumberjack' -configuration Release -sdk iphonesimulator | xcpretty -c
-    - xcodebuild clean build -workspace Framework/Lumberjack.xcworkspace -scheme 'CocoaLumberjack' -configuration Release -sdk macosx | xcpretty -c
-    - xcodebuild clean build -workspace Framework/Lumberjack.xcworkspace -scheme 'CocoaLumberjack' -destination 'platform=tvOS Simulator,name=Apple TV 4K' -configuration Release -sdk appletvsimulator | xcpretty -c
-    - xcodebuild clean build -workspace Framework/Lumberjack.xcworkspace -scheme 'CocoaLumberjack' -configuration Release -sdk watchsimulator | xcpretty -c
+    - xcodebuild clean build -workspace Xcode/Lumberjack.xcworkspace -scheme 'CocoaLumberjack' -configuration Release -sdk iphonesimulator | xcpretty -c
+    - xcodebuild clean build -workspace Xcode/Lumberjack.xcworkspace -scheme 'CocoaLumberjack' -configuration Release -sdk macosx | xcpretty -c
+    - xcodebuild clean build -workspace Xcode/Lumberjack.xcworkspace -scheme 'CocoaLumberjack' -destination 'platform=tvOS Simulator,name=Apple TV 4K' -configuration Release -sdk appletvsimulator | xcpretty -c
+    - xcodebuild clean build -workspace Xcode/Lumberjack.xcworkspace -scheme 'CocoaLumberjack' -configuration Release -sdk watchsimulator | xcpretty -c
 
     - echo "Build as dynamic framework (Swift), each platform (iOS, macOS, tvOS, watchOS)"
-    - xcodebuild clean build -workspace Framework/Lumberjack.xcworkspace -scheme 'CocoaLumberjackSwift' -configuration Release -sdk iphonesimulator | xcpretty -c
-    - xcodebuild clean build -workspace Framework/Lumberjack.xcworkspace -scheme 'CocoaLumberjackSwift' -configuration Release -sdk macosx | xcpretty -c
-    - xcodebuild clean build -workspace Framework/Lumberjack.xcworkspace -scheme 'CocoaLumberjackSwift' -destination 'platform=tvOS Simulator,name=Apple TV 4K' -configuration Release -sdk appletvsimulator | xcpretty -c
-    - xcodebuild clean build -workspace Framework/Lumberjack.xcworkspace -scheme 'CocoaLumberjackSwift' -configuration Release -sdk watchsimulator | xcpretty -c
+    - xcodebuild clean build -workspace Xcode/Lumberjack.xcworkspace -scheme 'CocoaLumberjackSwift' -configuration Release -sdk iphonesimulator | xcpretty -c
+    - xcodebuild clean build -workspace Xcode/Lumberjack.xcworkspace -scheme 'CocoaLumberjackSwift' -configuration Release -sdk macosx | xcpretty -c
+    - xcodebuild clean build -workspace Xcode/Lumberjack.xcworkspace -scheme 'CocoaLumberjackSwift' -destination 'platform=tvOS Simulator,name=Apple TV 4K' -configuration Release -sdk appletvsimulator | xcpretty -c
+    - xcodebuild clean build -workspace Xcode/Lumberjack.xcworkspace -scheme 'CocoaLumberjackSwift' -configuration Release -sdk watchsimulator | xcpretty -c
 
     - echo "Build test app using the static library"
     - xcodebuild clean build -project Integration/Integration.xcodeproj -scheme 'iOSStaticLibraryIntegration' -sdk iphonesimulator PLATFORM_NAME=iphonesimulator -configuration Release | xcpretty -c
@@ -51,12 +55,12 @@ script:
     - xcodebuild clean build -project Integration/Integration.xcodeproj -scheme 'macOSSwiftIntegration' -configuration Release -sdk macosx | xcpretty -c
     - xcodebuild clean build -project Integration/Integration.xcodeproj -scheme 'iOSFrameworkIntegration' -sdk iphonesimulator PLATFORM_NAME=iphonesimulator -configuration Release | xcpretty -c
     - xcodebuild clean build -project Integration/Integration.xcodeproj -scheme 'tvOSSwiftIntegration' -destination 'platform=tvOS Simulator,name=Apple TV 4K' -configuration Release -sdk appletvsimulator | xcpretty -c
-    - xcodebuild clean build -project Integration/Integration.xcodeproj -scheme 'watchOSSwiftIntegration' -configuration Release -sdk watchsimulator -destination 'platform=iOS Simulator,name=iPhone XS Max,OS=12.2' | xcpretty -c
+    - xcodebuild clean build -project Integration/Integration.xcodeproj -scheme 'watchOSSwiftIntegration' -configuration Release -sdk watchsimulator -destination 'platform=iOS Simulator,name=iPhone 11 Pro' | xcpretty -c
 
     - echo "Run the tests"
-    - xcodebuild test -skip-testing:'iOS Tests/DDFileLoggerPerformanceTests' -project Tests/Tests.xcodeproj -scheme 'iOS Tests' -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 6,OS=9.3' GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=YES GCC_GENERATE_TEST_COVERAGE_FILES=YES | xcpretty -c
-    - xcodebuild test -skip-testing:'iOS Tests/DDFileLoggerPerformanceTests' -project Tests/Tests.xcodeproj -scheme 'iOS Tests' -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 7,OS=latest' GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=YES GCC_GENERATE_TEST_COVERAGE_FILES=YES | xcpretty -c
-    - xcodebuild test -skip-testing:'OS X Tests/DDFileLoggerPerformanceTests' -project Tests/Tests.xcodeproj -scheme 'OS X Tests' -sdk macosx GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=YES GCC_GENERATE_TEST_COVERAGE_FILES=YES | xcpretty -c
+    - xcodebuild test -skip-testing:'iOS Tests/DDFileLoggerPerformanceTests' -project Tests/Tests.xcodeproj -scheme 'iOS Tests' -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 7,OS=10.3.1' GCC_GENERATE_TEST_COVERAGE_FILES=YES | xcpretty -c
+    - xcodebuild test -skip-testing:'iOS Tests/DDFileLoggerPerformanceTests' -project Tests/Tests.xcodeproj -scheme 'iOS Tests' -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 11 Pro,OS=latest' GCC_GENERATE_TEST_COVERAGE_FILES=YES | xcpretty -c
+    - xcodebuild test -skip-testing:'OS X Tests/DDFileLoggerPerformanceTests' -project Tests/Tests.xcodeproj -scheme 'OS X Tests' -sdk macosx GCC_GENERATE_TEST_COVERAGE_FILES=YES | xcpretty -c
 
     - echo "Building the Demos"
     - xcodebuild clean build -workspace Demos/Demos.xcworkspace -scheme 'BenchmarkIPhone' -configuration Release -sdk iphonesimulator | xcpretty -c

+ 10 - 0
Carthage/Checkouts/CocoaLumberjack/CHANGELOG.md

@@ -1,3 +1,13 @@
+## [3.6.0 - Xcode 11 on October 2nd, 2019](https://github.com/CocoaLumberjack/CocoaLumberjack/releases/tag/3.6.0)
+
+### Public
+- Swift Package Manager Support (#1083)
+- New `willLogMessage:` and `didLogMessage:` methods on `DDFileLogger` which provide access to the current log file info.
+
+### Internal
+- Fix issue with log archiving in the simulator (#1098)
+- Limit assertion to non-simulator build (#1100)
+
 ## [3.5.3 - Xcode 10.2 on Apr 24th, 2019](https://github.com/CocoaLumberjack/CocoaLumberjack/releases/tag/3.5.3)
 
 ### Public

+ 0 - 48
Carthage/Checkouts/CocoaLumberjack/Classes/CLI/CLIColor.h

@@ -1,48 +0,0 @@
-// Software License Agreement (BSD License)
-//
-// Copyright (c) 2010-2019, Deusty, LLC
-// All rights reserved.
-//
-// Redistribution and use of this software in source and binary forms,
-// with or without modification, are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above copyright notice,
-//   this list of conditions and the following disclaimer.
-//
-// * Neither the name of Deusty nor the names of its contributors may be used
-//   to endorse or promote products derived from this software without specific
-//   prior written permission of Deusty, LLC.
-
-#if TARGET_OS_OSX
-
-#import <Foundation/Foundation.h>
-#import <QuartzCore/QuartzCore.h>
-
-/**
- * This class represents an NSColor replacement for CLI projects that don't link with AppKit
- **/
-@interface CLIColor : NSObject
-
-/**
- *  Convenience method for creating a `CLIColor` instance from RGBA params
- *
- *  @param red   red channel, between 0 and 1
- *  @param green green channel, between 0 and 1
- *  @param blue  blue channel, between 0 and 1
- *  @param alpha alpha channel, between 0 and 1
- */
-+ (CLIColor *)colorWithCalibratedRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha;
-
-/**
- *  Get the RGBA components from a `CLIColor`
- *
- *  @param red   red channel, between 0 and 1
- *  @param green green channel, between 0 and 1
- *  @param blue  blue channel, between 0 and 1
- *  @param alpha alpha channel, between 0 and 1
- */
-- (void)getRed:(CGFloat *)red green:(CGFloat *)green blue:(CGFloat *)blue alpha:(CGFloat *)alpha NS_SWIFT_NAME(get(red:green:blue:alpha:));
-
-@end
-
-#endif

+ 0 - 59
Carthage/Checkouts/CocoaLumberjack/Classes/CLI/CLIColor.m

@@ -1,59 +0,0 @@
-// Software License Agreement (BSD License)
-//
-// Copyright (c) 2010-2019, Deusty, LLC
-// All rights reserved.
-//
-// Redistribution and use of this software in source and binary forms,
-// with or without modification, are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above copyright notice,
-//   this list of conditions and the following disclaimer.
-//
-// * Neither the name of Deusty nor the names of its contributors may be used
-//   to endorse or promote products derived from this software without specific
-//   prior written permission of Deusty, LLC.
-
-#if TARGET_OS_OSX
-
-#import "CLIColor.h"
-
-@interface CLIColor () {
-    CGFloat _red, _green, _blue, _alpha;
-}
-
-@end
-
-
-@implementation CLIColor
-
-+ (CLIColor *)colorWithCalibratedRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha {
-    CLIColor *color = [CLIColor new];
-
-    color->_red     = red;
-    color->_green   = green;
-    color->_blue    = blue;
-    color->_alpha   = alpha;
-    return color;
-}
-
-- (void)getRed:(CGFloat *)red green:(CGFloat *)green blue:(CGFloat *)blue alpha:(CGFloat *)alpha {
-    if (red) {
-        *red    = _red;
-    }
-
-    if (green) {
-        *green  = _green;
-    }
-
-    if (blue) {
-        *blue   = _blue;
-    }
-
-    if (alpha) {
-        *alpha  = _alpha;
-    }
-}
-
-@end
-
-#endif

+ 0 - 103
Carthage/Checkouts/CocoaLumberjack/Classes/CocoaLumberjack.h

@@ -1,103 +0,0 @@
-// Software License Agreement (BSD License)
-//
-// Copyright (c) 2010-2019, Deusty, LLC
-// All rights reserved.
-//
-// Redistribution and use of this software in source and binary forms,
-// with or without modification, are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above copyright notice,
-//   this list of conditions and the following disclaimer.
-//
-// * Neither the name of Deusty nor the names of its contributors may be used
-//   to endorse or promote products derived from this software without specific
-//   prior written permission of Deusty, LLC.
-
-/**
- * Welcome to CocoaLumberjack!
- *
- * The project page has a wealth of documentation if you have any questions.
- * https://github.com/CocoaLumberjack/CocoaLumberjack
- *
- * If you're new to the project you may wish to read "Getting Started" at:
- * Documentation/GettingStarted.md
- *
- * Otherwise, here is a quick refresher.
- * There are three steps to using the macros:
- *
- * Step 1:
- * Import the header in your implementation or prefix file:
- *
- * #import <CocoaLumberjack/CocoaLumberjack.h>
- *
- * Step 2:
- * Define your logging level in your implementation file:
- *
- * // Log levels: off, error, warn, info, verbose
- * static const DDLogLevel ddLogLevel = DDLogLevelVerbose;
- *
- * Step 2 [3rd party frameworks]:
- *
- * Define your LOG_LEVEL_DEF to a different variable/function than ddLogLevel:
- *
- * // #undef LOG_LEVEL_DEF // Undefine first only if needed
- * #define LOG_LEVEL_DEF myLibLogLevel
- *
- * Define your logging level in your implementation file:
- *
- * // Log levels: off, error, warn, info, verbose
- * static const DDLogLevel myLibLogLevel = DDLogLevelVerbose;
- *
- * Step 3:
- * Replace your NSLog statements with DDLog statements according to the severity of the message.
- *
- * NSLog(@"Fatal error, no dohickey found!"); -> DDLogError(@"Fatal error, no dohickey found!");
- *
- * DDLog works exactly the same as NSLog.
- * This means you can pass it multiple variables just like NSLog.
- **/
-
-#import <Foundation/Foundation.h>
-
-//! Project version number for CocoaLumberjack.
-FOUNDATION_EXPORT double CocoaLumberjackVersionNumber;
-
-//! Project version string for CocoaLumberjack.
-FOUNDATION_EXPORT const unsigned char CocoaLumberjackVersionString[];
-
-// Disable legacy macros
-#ifndef DD_LEGACY_MACROS
-    #define DD_LEGACY_MACROS 0
-#endif
-
-// Core
-#import <CocoaLumberjack/DDLog.h>
-
-// Main macros
-#import <CocoaLumberjack/DDLogMacros.h>
-#import <CocoaLumberjack/DDAssertMacros.h>
-
-// Capture ASL
-#import <CocoaLumberjack/DDASLLogCapture.h>
-
-// Loggers
-#import <CocoaLumberjack/DDLoggerNames.h>
-
-#import <CocoaLumberjack/DDTTYLogger.h>
-#import <CocoaLumberjack/DDASLLogger.h>
-#import <CocoaLumberjack/DDFileLogger.h>
-#import <CocoaLumberjack/DDOSLogger.h>
-
-// Extensions
-#import <CocoaLumberjack/DDContextFilterLogFormatter.h>
-#import <CocoaLumberjack/DDDispatchQueueLogFormatter.h>
-#import <CocoaLumberjack/DDMultiFormatter.h>
-#import <CocoaLumberjack/DDFileLogger+Buffering.h>
-
-// CLI
-#import <CocoaLumberjack/CLIColor.h>
-
-// etc
-#import <CocoaLumberjack/DDAbstractDatabaseLogger.h>
-#import <CocoaLumberjack/DDLog+LOGV.h>
-#import <CocoaLumberjack/DDLegacyMacros.h>

+ 0 - 188
Carthage/Checkouts/CocoaLumberjack/Classes/CocoaLumberjack.swift

@@ -1,188 +0,0 @@
-// Software License Agreement (BSD License)
-//
-// Copyright (c) 2010-2019, Deusty, LLC
-// All rights reserved.
-//
-// Redistribution and use of this software in source and binary forms,
-// with or without modification, are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above copyright notice,
-//   this list of conditions and the following disclaimer.
-//
-// * Neither the name of Deusty nor the names of its contributors may be used
-//   to endorse or promote products derived from this software without specific
-//   prior written permission of Deusty, LLC.
-
-extension DDLogFlag {
-    public static func from(_ logLevel: DDLogLevel) -> DDLogFlag {
-        return DDLogFlag(rawValue: logLevel.rawValue)
-    }
-
-	public init(_ logLevel: DDLogLevel) {
-        self = DDLogFlag(rawValue: logLevel.rawValue)
-	}
-
-    /// Returns the log level, or the lowest equivalent.
-    public func toLogLevel() -> DDLogLevel {
-        if let ourValid = DDLogLevel(rawValue: rawValue) {
-            return ourValid
-        } else {
-            if contains(.verbose) {
-                return .verbose
-            } else if contains(.debug) {
-                return .debug
-            } else if contains(.info) {
-                return .info
-            } else if contains(.warning) {
-                return .warning
-            } else if contains(.error) {
-                return .error
-            } else {
-                return .off
-            }
-        }
-    }
-}
-
-/// The log level that can dynamically limit log messages (vs. the static DDDefaultLogLevel). This log level will only be checked, if the message passes the `DDDefaultLogLevel`.
-public var dynamicLogLevel = DDLogLevel.all
-
-/// Resets the `dynamicLogLevel` to `.all`.
-/// - SeeAlso: `dynamicLogLevel`
-@inlinable
-public func resetDynamicLogLevel() {
-    dynamicLogLevel = .all
-}
-
-@available(*, deprecated, message: "Please use dynamicLogLevel", renamed: "dynamicLogLevel")
-public var defaultDebugLevel: DDLogLevel {
-    get {
-        return dynamicLogLevel
-    }
-    set {
-        dynamicLogLevel = newValue
-    }
-}
-
-@available(*, deprecated, message: "Please use resetDynamicLogLevel", renamed: "resetDynamicLogLevel")
-public func resetDefaultDebugLevel() {
-    resetDynamicLogLevel()
-}
-
-/// If `true`, all logs (except errors) are logged asynchronously by default.
-public var asyncLoggingEnabled = true
-
-@inlinable
-public func _DDLogMessage(_ message: @autoclosure () -> String,
-                          level: DDLogLevel,
-                          flag: DDLogFlag,
-                          context: Int,
-                          file: StaticString,
-                          function: StaticString,
-                          line: UInt,
-                          tag: Any?,
-                          asynchronous: Bool,
-                          ddlog: DDLog) {
-    // The `dynamicLogLevel` will always be checked here (instead of being passed in).
-    // We cannot "mix" it with the `DDDefaultLogLevel`, because otherwise the compiler won't strip strings that are not logged.
-    if level.rawValue & flag.rawValue != 0 && dynamicLogLevel.rawValue & flag.rawValue != 0 {
-        // Tell the DDLogMessage constructor to copy the C strings that get passed to it.
-        let logMessage = DDLogMessage(message: message(),
-                                      level: level,
-                                      flag: flag,
-                                      context: context,
-                                      file: String(describing: file),
-                                      function: String(describing: function),
-                                      line: line,
-                                      tag: tag,
-                                      options: [.copyFile, .copyFunction],
-                                      timestamp: nil)
-        ddlog.log(asynchronous: asynchronous, message: logMessage)
-    }
-}
-
-@inlinable
-public func DDLogDebug(_ message: @autoclosure () -> String,
-                       level: DDLogLevel = DDDefaultLogLevel,
-                       context: Int = 0,
-                       file: StaticString = #file,
-                       function: StaticString = #function,
-                       line: UInt = #line,
-                       tag: Any? = nil,
-                       asynchronous async: Bool = asyncLoggingEnabled,
-                       ddlog: DDLog = .sharedInstance) {
-    _DDLogMessage(message(), level: level, flag: .debug, context: context, file: file, function: function, line: line, tag: tag, asynchronous: async, ddlog: ddlog)
-}
-
-@inlinable
-public func DDLogInfo(_ message: @autoclosure () -> String,
-                      level: DDLogLevel = DDDefaultLogLevel,
-                      context: Int = 0,
-                      file: StaticString = #file,
-                      function: StaticString = #function,
-                      line: UInt = #line,
-                      tag: Any? = nil,
-                      asynchronous async: Bool = asyncLoggingEnabled,
-                      ddlog: DDLog = .sharedInstance) {
-    _DDLogMessage(message(), level: level, flag: .info, context: context, file: file, function: function, line: line, tag: tag, asynchronous: async, ddlog: ddlog)
-}
-
-@inlinable
-public func DDLogWarn(_ message: @autoclosure () -> String,
-                      level: DDLogLevel = DDDefaultLogLevel,
-                      context: Int = 0,
-                      file: StaticString = #file,
-                      function: StaticString = #function,
-                      line: UInt = #line,
-                      tag: Any? = nil,
-                      asynchronous async: Bool = asyncLoggingEnabled,
-                      ddlog: DDLog = .sharedInstance) {
-    _DDLogMessage(message(), level: level, flag: .warning, context: context, file: file, function: function, line: line, tag: tag, asynchronous: async, ddlog: ddlog)
-}
-
-@inlinable
-public func DDLogVerbose(_ message: @autoclosure () -> String,
-                         level: DDLogLevel = DDDefaultLogLevel,
-                         context: Int = 0,
-                         file: StaticString = #file,
-                         function: StaticString = #function,
-                         line: UInt = #line,
-                         tag: Any? = nil,
-                         asynchronous async: Bool = asyncLoggingEnabled,
-                         ddlog: DDLog = .sharedInstance) {
-    _DDLogMessage(message(), level: level, flag: .verbose, context: context, file: file, function: function, line: line, tag: tag, asynchronous: async, ddlog: ddlog)
-}
-
-@inlinable
-public func DDLogError(_ message: @autoclosure () -> String,
-                       level: DDLogLevel = DDDefaultLogLevel,
-                       context: Int = 0,
-                       file: StaticString = #file,
-                       function: StaticString = #function,
-                       line: UInt = #line,
-                       tag: Any? = nil,
-                       asynchronous async: Bool = false,
-                       ddlog: DDLog = .sharedInstance) {
-    _DDLogMessage(message(), level: level, flag: .error, context: context, file: file, function: function, line: line, tag: tag, asynchronous: async, ddlog: ddlog)
-}
-
-/// Returns a String of the current filename, without full path or extension.
-///
-/// Analogous to the C preprocessor macro `THIS_FILE`.
-public func currentFileName(_ fileName: StaticString = #file) -> String {
-    var str = String(describing: fileName)
-    if let idx = str.range(of: "/", options: .backwards)?.upperBound {
-        str = String(str[idx...])
-    }
-    if let idx = str.range(of: ".", options: .backwards)?.lowerBound {
-        str = String(str[..<idx])
-    }
-    return str
-}
-
-// swiftlint:disable identifier_name
-// swiftlint doesn't like func names that begin with a capital letter - deprecated
-@available(*, deprecated, message: "Please use currentFileName", renamed: "currentFileName")
-public func CurrentFileName(_ fileName: StaticString = #file) -> String {
-    return currentFileName(fileName)
-}

+ 0 - 42
Carthage/Checkouts/CocoaLumberjack/Classes/DDASLLogCapture.h

@@ -1,42 +0,0 @@
-// Software License Agreement (BSD License)
-//
-// Copyright (c) 2010-2019, Deusty, LLC
-// All rights reserved.
-//
-// Redistribution and use of this software in source and binary forms,
-// with or without modification, are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above copyright notice,
-//   this list of conditions and the following disclaimer.
-//
-// * Neither the name of Deusty nor the names of its contributors may be used
-//   to endorse or promote products derived from this software without specific
-//   prior written permission of Deusty, LLC.
-
-#import <CocoaLumberjack/DDASLLogger.h>
-
-@protocol DDLogger;
-
-/**
- *  This class provides the ability to capture the ASL (Apple System Logs)
- */
-API_DEPRECATED("Use DDOSLogger instead", macosx(10.4,10.12), ios(2.0,10.0), watchos(2.0,3.0), tvos(9.0,10.0))
-@interface DDASLLogCapture : NSObject
-
-/**
- *  Start capturing logs
- */
-+ (void)start;
-
-/**
- *  Stop capturing logs
- */
-+ (void)stop;
-
-/**
- *  The current capture level.
- *  @note Default log level: DDLogLevelVerbose (i.e. capture all ASL messages).
- */
-@property (class) DDLogLevel captureLevel;
-
-@end

+ 0 - 200
Carthage/Checkouts/CocoaLumberjack/Classes/DDASLLogCapture.m

@@ -1,200 +0,0 @@
-// Software License Agreement (BSD License)
-//
-// Copyright (c) 2010-2019, Deusty, LLC
-// All rights reserved.
-//
-// Redistribution and use of this software in source and binary forms,
-// with or without modification, are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above copyright notice,
-//   this list of conditions and the following disclaimer.
-//
-// * Neither the name of Deusty nor the names of its contributors may be used
-//   to endorse or promote products derived from this software without specific
-//   prior written permission of Deusty, LLC.
-
-#import "DDASLLogCapture.h"
-
-// Disable legacy macros
-#ifndef DD_LEGACY_MACROS
-    #define DD_LEGACY_MACROS 0
-#endif
-
-#if !TARGET_OS_WATCH
-
-#include <asl.h>
-#include <notify.h>
-#include <notify_keys.h>
-#include <sys/time.h>
-
-static BOOL _cancel = YES;
-static DDLogLevel _captureLevel = DDLogLevelVerbose;
-
-@implementation DDASLLogCapture
-
-+ (void)start {
-    // Ignore subsequent calls
-    if (!_cancel) {
-        return;
-    }
-    
-    _cancel = NO;
-    
-    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {
-        [self captureAslLogs];
-    });
-}
-
-+ (void)stop {
-    _cancel = YES;
-}
-
-+ (DDLogLevel)captureLevel {
-    return _captureLevel;
-}
-
-+ (void)setCaptureLevel:(DDLogLevel)level {
-    _captureLevel = level;
-}
-
-#pragma mark - Private methods
-
-+ (void)configureAslQuery:(aslmsg)query {
-    const char param[] = "7";  // ASL_LEVEL_DEBUG, which is everything. We'll rely on regular DDlog log level to filter
-    
-    asl_set_query(query, ASL_KEY_LEVEL, param, ASL_QUERY_OP_LESS_EQUAL | ASL_QUERY_OP_NUMERIC);
-
-    // Don't retrieve logs from our own DDASLLogger
-    asl_set_query(query, kDDASLKeyDDLog, kDDASLDDLogValue, ASL_QUERY_OP_NOT_EQUAL);
-    
-#if !TARGET_OS_IPHONE || (defined(TARGET_SIMULATOR) && TARGET_SIMULATOR)
-    int processId = [[NSProcessInfo processInfo] processIdentifier];
-    char pid[16];
-    snprintf(pid, sizeof(pid), "%d", processId);
-    asl_set_query(query, ASL_KEY_PID, pid, ASL_QUERY_OP_EQUAL | ASL_QUERY_OP_NUMERIC);
-#endif
-}
-
-+ (void)aslMessageReceived:(aslmsg)msg {
-    const char* messageCString = asl_get( msg, ASL_KEY_MSG );
-    if ( messageCString == NULL )
-        return;
-
-    DDLogFlag flag;
-    BOOL async;
-
-    const char* levelCString = asl_get(msg, ASL_KEY_LEVEL);
-    switch (levelCString? atoi(levelCString) : 0) {
-        // By default all NSLog's with a ASL_LEVEL_WARNING level
-        case ASL_LEVEL_EMERG    :
-        case ASL_LEVEL_ALERT    :
-        case ASL_LEVEL_CRIT     : flag = DDLogFlagError;    async = NO;  break;
-        case ASL_LEVEL_ERR      : flag = DDLogFlagWarning;  async = YES; break;
-        case ASL_LEVEL_WARNING  : flag = DDLogFlagInfo;     async = YES; break;
-        case ASL_LEVEL_NOTICE   : flag = DDLogFlagDebug;    async = YES; break;
-        case ASL_LEVEL_INFO     :
-        case ASL_LEVEL_DEBUG    :
-        default                 : flag = DDLogFlagVerbose;  async = YES;  break;
-    }
-
-    if (!(_captureLevel & flag)) {
-        return;
-    }
-
-    //  NSString * sender = [NSString stringWithCString:asl_get(msg, ASL_KEY_SENDER) encoding:NSUTF8StringEncoding];
-    NSString *message = @(messageCString);
-
-    const char* secondsCString = asl_get( msg, ASL_KEY_TIME );
-    const char* nanoCString = asl_get( msg, ASL_KEY_TIME_NSEC );
-    NSTimeInterval seconds = secondsCString ? strtod(secondsCString, NULL) : [NSDate timeIntervalSinceReferenceDate] - NSTimeIntervalSince1970;
-    double nanoSeconds = nanoCString? strtod(nanoCString, NULL) : 0;
-    NSTimeInterval totalSeconds = seconds + (nanoSeconds / 1e9);
-
-    NSDate *timeStamp = [NSDate dateWithTimeIntervalSince1970:totalSeconds];
-
-    DDLogMessage *logMessage = [[DDLogMessage alloc]initWithMessage:message
-                                                              level:_captureLevel
-                                                               flag:flag
-                                                            context:0
-                                                               file:@"DDASLLogCapture"
-                                                           function:nil
-                                                               line:0
-                                                                tag:nil
-                                                            options:0
-                                                          timestamp:timeStamp];
-    
-    [DDLog log:async message:logMessage];
-}
-
-+ (void)captureAslLogs {
-    @autoreleasepool
-    {
-        /*
-           We use ASL_KEY_MSG_ID to see each message once, but there's no
-           obvious way to get the "next" ID. To bootstrap the process, we'll
-           search by timestamp until we've seen a message.
-         */
-
-        struct timeval timeval = {
-            .tv_sec = 0
-        };
-        gettimeofday(&timeval, NULL);
-        unsigned long long startTime = (unsigned long long)timeval.tv_sec;
-        __block unsigned long long lastSeenID = 0;
-
-        /*
-           syslogd posts kNotifyASLDBUpdate (com.apple.system.logger.message)
-           through the notify API when it saves messages to the ASL database.
-           There is some coalescing - currently it is sent at most twice per
-           second - but there is no documented guarantee about this. In any
-           case, there may be multiple messages per notification.
-
-           Notify notifications don't carry any payload, so we need to search
-           for the messages.
-         */
-        int notifyToken = 0;  // Can be used to unregister with notify_cancel().
-        notify_register_dispatch(kNotifyASLDBUpdate, &notifyToken, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^(int token)
-        {
-            // At least one message has been posted; build a search query.
-            @autoreleasepool
-            {
-                aslmsg query = asl_new(ASL_TYPE_QUERY);
-                char stringValue[64];
-
-                if (lastSeenID > 0) {
-                    snprintf(stringValue, sizeof stringValue, "%llu", lastSeenID);
-                    asl_set_query(query, ASL_KEY_MSG_ID, stringValue, ASL_QUERY_OP_GREATER | ASL_QUERY_OP_NUMERIC);
-                } else {
-                    snprintf(stringValue, sizeof stringValue, "%llu", startTime);
-                    asl_set_query(query, ASL_KEY_TIME, stringValue, ASL_QUERY_OP_GREATER_EQUAL | ASL_QUERY_OP_NUMERIC);
-                }
-
-                [self configureAslQuery:query];
-
-                // Iterate over new messages.
-                aslmsg msg;
-                aslresponse response = asl_search(NULL, query);
-                
-                while ((msg = asl_next(response)))
-                {
-                    [self aslMessageReceived:msg];
-
-                    // Keep track of which messages we've seen.
-                    lastSeenID = (unsigned long long)atoll(asl_get(msg, ASL_KEY_MSG_ID));
-                }
-                asl_release(response);
-                asl_free(query);
-
-                if (_cancel) {
-                    notify_cancel(token);
-                    return;
-                }
-
-            }
-        });
-    }
-}
-
-@end
-
-#endif

+ 0 - 59
Carthage/Checkouts/CocoaLumberjack/Classes/DDASLLogger.h

@@ -1,59 +0,0 @@
-// Software License Agreement (BSD License)
-//
-// Copyright (c) 2010-2019, Deusty, LLC
-// All rights reserved.
-//
-// Redistribution and use of this software in source and binary forms,
-// with or without modification, are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above copyright notice,
-//   this list of conditions and the following disclaimer.
-//
-// * Neither the name of Deusty nor the names of its contributors may be used
-//   to endorse or promote products derived from this software without specific
-//   prior written permission of Deusty, LLC.
-
-#import <Foundation/Foundation.h>
-
-// Disable legacy macros
-#ifndef DD_LEGACY_MACROS
-    #define DD_LEGACY_MACROS 0
-#endif
-
-#import <CocoaLumberjack/DDLog.h>
-
-// Custom key set on messages sent to ASL
-extern const char* const kDDASLKeyDDLog;
-
-// Value set for kDDASLKeyDDLog
-extern const char* const kDDASLDDLogValue;
-
-/**
- * This class provides a logger for the Apple System Log facility.
- *
- * As described in the "Getting Started" page,
- * the traditional NSLog() function directs its output to two places:
- *
- * - Apple System Log
- * - StdErr (if stderr is a TTY) so log statements show up in Xcode console
- *
- * To duplicate NSLog() functionality you can simply add this logger and a tty logger.
- * However, if you instead choose to use file logging (for faster performance),
- * you may choose to use a file logger and a tty logger.
- **/
-API_DEPRECATED("Use DDOSLogger instead", macosx(10.4,10.12), ios(2.0,10.0), watchos(2.0,3.0), tvos(9.0,10.0))
-@interface DDASLLogger : DDAbstractLogger <DDLogger>
-
-/**
- *  Singleton method
- *
- *  @return the shared instance
- */
-@property (class, readonly, strong) DDASLLogger *sharedInstance;
-
-// Inherited from DDAbstractLogger
-
-// - (id <DDLogFormatter>)logFormatter;
-// - (void)setLogFormatter:(id <DDLogFormatter>)formatter;
-
-@end

+ 0 - 125
Carthage/Checkouts/CocoaLumberjack/Classes/DDASLLogger.m

@@ -1,125 +0,0 @@
-// Software License Agreement (BSD License)
-//
-// Copyright (c) 2010-2019, Deusty, LLC
-// All rights reserved.
-//
-// Redistribution and use of this software in source and binary forms,
-// with or without modification, are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above copyright notice,
-//   this list of conditions and the following disclaimer.
-//
-// * Neither the name of Deusty nor the names of its contributors may be used
-//   to endorse or promote products derived from this software without specific
-//   prior written permission of Deusty, LLC.
-
-#import "DDASLLogger.h"
-
-#if !TARGET_OS_WATCH
-#import <asl.h>
-
-#if !__has_feature(objc_arc)
-#error This file must be compiled with ARC. Use -fobjc-arc flag (or convert project to ARC).
-#endif
-
-const char* const kDDASLKeyDDLog = "DDLog";
-
-const char* const kDDASLDDLogValue = "1";
-
-static DDASLLogger *sharedInstance;
-
-@interface DDASLLogger () {
-    aslclient _client;
-}
-
-@end
-
-
-@implementation DDASLLogger
-
-+ (instancetype)sharedInstance {
-    static dispatch_once_t DDASLLoggerOnceToken;
-
-    dispatch_once(&DDASLLoggerOnceToken, ^{
-        sharedInstance = [[[self class] alloc] init];
-    });
-
-    return sharedInstance;
-}
-
-- (instancetype)init {
-    if (sharedInstance != nil) {
-        return nil;
-    }
-
-    if ((self = [super init])) {
-        // A default asl client is provided for the main thread,
-        // but background threads need to create their own client.
-
-        _client = asl_open(NULL, "com.apple.console", 0);
-    }
-
-    return self;
-}
-
-- (void)logMessage:(DDLogMessage *)logMessage {
-    // Skip captured log messages
-    if ([logMessage->_fileName isEqualToString:@"DDASLLogCapture"]) {
-        return;
-    }
-
-    NSString * message = _logFormatter ? [_logFormatter formatLogMessage:logMessage] : logMessage->_message;
-
-    if (message) {
-        const char *msg = [message UTF8String];
-
-        size_t aslLogLevel;
-        switch (logMessage->_flag) {
-            // Note: By default ASL will filter anything above level 5 (Notice).
-            // So our mappings shouldn't go above that level.
-            case DDLogFlagError     : aslLogLevel = ASL_LEVEL_CRIT;     break;
-            case DDLogFlagWarning   : aslLogLevel = ASL_LEVEL_ERR;      break;
-            case DDLogFlagInfo      : aslLogLevel = ASL_LEVEL_WARNING;  break; // Regular NSLog's level
-            case DDLogFlagDebug     :
-            case DDLogFlagVerbose   :
-            default                 : aslLogLevel = ASL_LEVEL_NOTICE;   break;
-        }
-
-        static char const *const level_strings[] = { "0", "1", "2", "3", "4", "5", "6", "7" };
-
-        // NSLog uses the current euid to set the ASL_KEY_READ_UID.
-        uid_t const readUID = geteuid();
-
-        char readUIDString[16];
-#ifndef NS_BLOCK_ASSERTIONS
-        size_t l = (size_t)snprintf(readUIDString, sizeof(readUIDString), "%d", readUID);
-#else
-        snprintf(readUIDString, sizeof(readUIDString), "%d", readUID);
-#endif
-
-        NSAssert(l < sizeof(readUIDString),
-                 @"Formatted euid is too long.");
-        NSAssert(aslLogLevel < (sizeof(level_strings) / sizeof(level_strings[0])),
-                 @"Unhandled ASL log level.");
-
-        aslmsg m = asl_new(ASL_TYPE_MSG);
-        if (m != NULL) {
-            if (asl_set(m, ASL_KEY_LEVEL, level_strings[aslLogLevel]) == 0 &&
-                asl_set(m, ASL_KEY_MSG, msg) == 0 &&
-                asl_set(m, ASL_KEY_READ_UID, readUIDString) == 0 &&
-                asl_set(m, kDDASLKeyDDLog, kDDASLDDLogValue) == 0) {
-                asl_send(_client, m);
-            }
-            asl_free(m);
-        }
-        //TODO handle asl_* failures non-silently?
-    }
-}
-
-- (DDLoggerName)loggerName {
-    return DDLoggerNameASL;
-}
-
-@end
-
-#endif

+ 0 - 123
Carthage/Checkouts/CocoaLumberjack/Classes/DDAbstractDatabaseLogger.h

@@ -1,123 +0,0 @@
-// Software License Agreement (BSD License)
-//
-// Copyright (c) 2010-2019, Deusty, LLC
-// All rights reserved.
-//
-// Redistribution and use of this software in source and binary forms,
-// with or without modification, are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above copyright notice,
-//   this list of conditions and the following disclaimer.
-//
-// * Neither the name of Deusty nor the names of its contributors may be used
-//   to endorse or promote products derived from this software without specific
-//   prior written permission of Deusty, LLC.
-
-// Disable legacy macros
-#ifndef DD_LEGACY_MACROS
-    #define DD_LEGACY_MACROS 0
-#endif
-
-#import <CocoaLumberjack/DDLog.h>
-
-/**
- * This class provides an abstract implementation of a database logger.
- *
- * That is, it provides the base implementation for a database logger to build atop of.
- * All that is needed for a concrete database logger is to extend this class
- * and override the methods in the implementation file that are prefixed with "db_".
- **/
-@interface DDAbstractDatabaseLogger : DDAbstractLogger {
-    
-@protected
-    NSUInteger _saveThreshold;
-    NSTimeInterval _saveInterval;
-    NSTimeInterval _maxAge;
-    NSTimeInterval _deleteInterval;
-    BOOL _deleteOnEverySave;
-    
-    BOOL _saveTimerSuspended;
-    NSUInteger _unsavedCount;
-    dispatch_time_t _unsavedTime;
-    dispatch_source_t _saveTimer;
-    dispatch_time_t _lastDeleteTime;
-    dispatch_source_t _deleteTimer;
-}
-
-/**
- * Specifies how often to save the data to disk.
- * Since saving is an expensive operation (disk io) it is not done after every log statement.
- * These properties allow you to configure how/when the logger saves to disk.
- *
- * A save is done when either (whichever happens first):
- *
- * - The number of unsaved log entries reaches saveThreshold
- * - The amount of time since the oldest unsaved log entry was created reaches saveInterval
- *
- * You can optionally disable the saveThreshold by setting it to zero.
- * If you disable the saveThreshold you are entirely dependent on the saveInterval.
- *
- * You can optionally disable the saveInterval by setting it to zero (or a negative value).
- * If you disable the saveInterval you are entirely dependent on the saveThreshold.
- *
- * It's not wise to disable both saveThreshold and saveInterval.
- *
- * The default saveThreshold is 500.
- * The default saveInterval is 60 seconds.
- **/
-@property (assign, readwrite) NSUInteger saveThreshold;
-
-/**
- *  See the description for the `saveThreshold` property
- */
-@property (assign, readwrite) NSTimeInterval saveInterval;
-
-/**
- * It is likely you don't want the log entries to persist forever.
- * Doing so would allow the database to grow infinitely large over time.
- *
- * The maxAge property provides a way to specify how old a log statement can get
- * before it should get deleted from the database.
- *
- * The deleteInterval specifies how often to sweep for old log entries.
- * Since deleting is an expensive operation (disk io) is is done on a fixed interval.
- *
- * An alternative to the deleteInterval is the deleteOnEverySave option.
- * This specifies that old log entries should be deleted during every save operation.
- *
- * You can optionally disable the maxAge by setting it to zero (or a negative value).
- * If you disable the maxAge then old log statements are not deleted.
- *
- * You can optionally disable the deleteInterval by setting it to zero (or a negative value).
- *
- * If you disable both deleteInterval and deleteOnEverySave then old log statements are not deleted.
- *
- * It's not wise to enable both deleteInterval and deleteOnEverySave.
- *
- * The default maxAge is 7 days.
- * The default deleteInterval is 5 minutes.
- * The default deleteOnEverySave is NO.
- **/
-@property (assign, readwrite) NSTimeInterval maxAge;
-
-/**
- *  See the description for the `maxAge` property
- */
-@property (assign, readwrite) NSTimeInterval deleteInterval;
-
-/**
- *  See the description for the `maxAge` property
- */
-@property (assign, readwrite) BOOL deleteOnEverySave;
-
-/**
- * Forces a save of any pending log entries (flushes log entries to disk).
- **/
-- (void)savePendingLogEntries;
-
-/**
- * Removes any log entries that are older than maxAge.
- **/
-- (void)deleteOldLogEntries;
-
-@end

+ 0 - 659
Carthage/Checkouts/CocoaLumberjack/Classes/DDAbstractDatabaseLogger.m

@@ -1,659 +0,0 @@
-// Software License Agreement (BSD License)
-//
-// Copyright (c) 2010-2019, Deusty, LLC
-// All rights reserved.
-//
-// Redistribution and use of this software in source and binary forms,
-// with or without modification, are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above copyright notice,
-//   this list of conditions and the following disclaimer.
-//
-// * Neither the name of Deusty nor the names of its contributors may be used
-//   to endorse or promote products derived from this software without specific
-//   prior written permission of Deusty, LLC.
-
-#import "DDAbstractDatabaseLogger.h"
-
-
-#if !__has_feature(objc_arc)
-#error This file must be compiled with ARC. Use -fobjc-arc flag (or convert project to ARC).
-#endif
-
-@interface DDAbstractDatabaseLogger ()
-
-- (void)destroySaveTimer;
-- (void)destroyDeleteTimer;
-
-@end
-
-#pragma mark -
-
-@implementation DDAbstractDatabaseLogger
-
-- (instancetype)init {
-    if ((self = [super init])) {
-        _saveThreshold = 500;
-        _saveInterval = 60;           // 60 seconds
-        _maxAge = (60 * 60 * 24 * 7); //  7 days
-        _deleteInterval = (60 * 5);   //  5 minutes
-    }
-
-    return self;
-}
-
-- (void)dealloc {
-    [self destroySaveTimer];
-    [self destroyDeleteTimer];
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark Override Me
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-- (BOOL)db_log:(__unused DDLogMessage *)logMessage {
-    // Override me and add your implementation.
-    //
-    // Return YES if an item was added to the buffer.
-    // Return NO if the logMessage was ignored.
-
-    return NO;
-}
-
-- (void)db_save {
-    // Override me and add your implementation.
-}
-
-- (void)db_delete {
-    // Override me and add your implementation.
-}
-
-- (void)db_saveAndDelete {
-    // Override me and add your implementation.
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark Private API
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-- (void)performSaveAndSuspendSaveTimer {
-    if (_unsavedCount > 0) {
-        if (_deleteOnEverySave) {
-            [self db_saveAndDelete];
-        } else {
-            [self db_save];
-        }
-    }
-
-    _unsavedCount = 0;
-    _unsavedTime = 0;
-
-    if (_saveTimer && !_saveTimerSuspended) {
-        dispatch_suspend(_saveTimer);
-        _saveTimerSuspended = YES;
-    }
-}
-
-- (void)performDelete {
-    if (_maxAge > 0.0) {
-        [self db_delete];
-
-        _lastDeleteTime = dispatch_time(DISPATCH_TIME_NOW, 0);
-    }
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark Timers
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-- (void)destroySaveTimer {
-    if (_saveTimer) {
-        dispatch_source_cancel(_saveTimer);
-
-        if (_saveTimerSuspended) {
-            // Must resume a timer before releasing it (or it will crash)
-            dispatch_resume(_saveTimer);
-            _saveTimerSuspended = NO;
-        }
-
-        #if !OS_OBJECT_USE_OBJC
-        dispatch_release(_saveTimer);
-        #endif
-        _saveTimer = NULL;
-    }
-}
-
-- (void)updateAndResumeSaveTimer {
-    if ((_saveTimer != NULL) && (_saveInterval > 0.0) && (_unsavedTime > 0.0)) {
-        uint64_t interval = (uint64_t)(_saveInterval * (NSTimeInterval) NSEC_PER_SEC);
-        dispatch_time_t startTime = dispatch_time(_unsavedTime, (int64_t)interval);
-
-        dispatch_source_set_timer(_saveTimer, startTime, interval, 1ull * NSEC_PER_SEC);
-
-        if (_saveTimerSuspended) {
-            dispatch_resume(_saveTimer);
-            _saveTimerSuspended = NO;
-        }
-    }
-}
-
-- (void)createSuspendedSaveTimer {
-    if ((_saveTimer == NULL) && (_saveInterval > 0.0)) {
-        _saveTimer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, self.loggerQueue);
-
-        dispatch_source_set_event_handler(_saveTimer, ^{ @autoreleasepool {
-                                                            [self performSaveAndSuspendSaveTimer];
-                                                        } });
-
-        _saveTimerSuspended = YES;
-    }
-}
-
-- (void)destroyDeleteTimer {
-    if (_deleteTimer) {
-        dispatch_source_cancel(_deleteTimer);
-        #if !OS_OBJECT_USE_OBJC
-        dispatch_release(_deleteTimer);
-        #endif
-        _deleteTimer = NULL;
-    }
-}
-
-- (void)updateDeleteTimer {
-    if ((_deleteTimer != NULL) && (_deleteInterval > 0.0) && (_maxAge > 0.0)) {
-        int64_t interval = (int64_t)(_deleteInterval * (NSTimeInterval) NSEC_PER_SEC);
-        dispatch_time_t startTime;
-
-        if (_lastDeleteTime > 0) {
-            startTime = dispatch_time(_lastDeleteTime, interval);
-        } else {
-            startTime = dispatch_time(DISPATCH_TIME_NOW, interval);
-        }
-
-        dispatch_source_set_timer(_deleteTimer, startTime, (uint64_t)interval, 1ull * NSEC_PER_SEC);
-    }
-}
-
-- (void)createAndStartDeleteTimer {
-    if ((_deleteTimer == NULL) && (_deleteInterval > 0.0) && (_maxAge > 0.0)) {
-        _deleteTimer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, self.loggerQueue);
-
-        if (_deleteTimer != NULL) {
-            dispatch_source_set_event_handler(_deleteTimer, ^{ @autoreleasepool {
-                                                                  [self performDelete];
-                                                              } });
-
-            [self updateDeleteTimer];
-
-            if (_deleteTimer != NULL) {
-                dispatch_resume(_deleteTimer);
-            }
-        }
-    }
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark Configuration
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-- (NSUInteger)saveThreshold {
-    // The design of this method is taken from the DDAbstractLogger implementation.
-    // For extensive documentation please refer to the DDAbstractLogger implementation.
-
-    // Note: The internal implementation MUST access the colorsEnabled variable directly,
-    // This method is designed explicitly for external access.
-    //
-    // Using "self." syntax to go through this method will cause immediate deadlock.
-    // This is the intended result. Fix it by accessing the ivar directly.
-    // Great strides have been take to ensure this is safe to do. Plus it's MUCH faster.
-
-    NSAssert(![self isOnGlobalLoggingQueue], @"Core architecture requirement failure");
-    NSAssert(![self isOnInternalLoggerQueue], @"MUST access ivar directly, NOT via self.* syntax.");
-
-    dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
-
-    __block NSUInteger result;
-
-    dispatch_sync(globalLoggingQueue, ^{
-        dispatch_sync(self.loggerQueue, ^{
-            result = self->_saveThreshold;
-        });
-    });
-
-    return result;
-}
-
-- (void)setSaveThreshold:(NSUInteger)threshold {
-    dispatch_block_t block = ^{
-        @autoreleasepool {
-            if (self->_saveThreshold != threshold) {
-                self->_saveThreshold = threshold;
-
-                // Since the saveThreshold has changed,
-                // we check to see if the current unsavedCount has surpassed the new threshold.
-                //
-                // If it has, we immediately save the log.
-
-                if ((self->_unsavedCount >= self->_saveThreshold) && (self->_saveThreshold > 0)) {
-                    [self performSaveAndSuspendSaveTimer];
-                }
-            }
-        }
-    };
-
-    // The design of the setter logic below is taken from the DDAbstractLogger implementation.
-    // For documentation please refer to the DDAbstractLogger implementation.
-
-    if ([self isOnInternalLoggerQueue]) {
-        block();
-    } else {
-        dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
-        NSAssert(![self isOnGlobalLoggingQueue], @"Core architecture requirement failure");
-
-        dispatch_async(globalLoggingQueue, ^{
-            dispatch_async(self.loggerQueue, block);
-        });
-    }
-}
-
-- (NSTimeInterval)saveInterval {
-    // The design of this method is taken from the DDAbstractLogger implementation.
-    // For extensive documentation please refer to the DDAbstractLogger implementation.
-
-    // Note: The internal implementation MUST access the colorsEnabled variable directly,
-    // This method is designed explicitly for external access.
-    //
-    // Using "self." syntax to go through this method will cause immediate deadlock.
-    // This is the intended result. Fix it by accessing the ivar directly.
-    // Great strides have been take to ensure this is safe to do. Plus it's MUCH faster.
-
-    NSAssert(![self isOnGlobalLoggingQueue], @"Core architecture requirement failure");
-    NSAssert(![self isOnInternalLoggerQueue], @"MUST access ivar directly, NOT via self.* syntax.");
-
-    dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
-
-    __block NSTimeInterval result;
-
-    dispatch_sync(globalLoggingQueue, ^{
-        dispatch_sync(self.loggerQueue, ^{
-            result = self->_saveInterval;
-        });
-    });
-
-    return result;
-}
-
-- (void)setSaveInterval:(NSTimeInterval)interval {
-    dispatch_block_t block = ^{
-        @autoreleasepool {
-            // C99 recommended floating point comparison macro
-            // Read: isLessThanOrGreaterThan(floatA, floatB)
-
-            if (/* saveInterval != interval */ islessgreater(self->_saveInterval, interval)) {
-                self->_saveInterval = interval;
-
-                // There are several cases we need to handle here.
-                //
-                // 1. If the saveInterval was previously enabled and it just got disabled,
-                //    then we need to stop the saveTimer. (And we might as well release it.)
-                //
-                // 2. If the saveInterval was previously disabled and it just got enabled,
-                //    then we need to setup the saveTimer. (Plus we might need to do an immediate save.)
-                //
-                // 3. If the saveInterval increased, then we need to reset the timer so that it fires at the later date.
-                //
-                // 4. If the saveInterval decreased, then we need to reset the timer so that it fires at an earlier date.
-                //    (Plus we might need to do an immediate save.)
-
-                if (self->_saveInterval > 0.0) {
-                    if (self->_saveTimer == NULL) {
-                        // Handles #2
-                        //
-                        // Since the saveTimer uses the unsavedTime to calculate it's first fireDate,
-                        // if a save is needed the timer will fire immediately.
-
-                        [self createSuspendedSaveTimer];
-                        [self updateAndResumeSaveTimer];
-                    } else {
-                        // Handles #3
-                        // Handles #4
-                        //
-                        // Since the saveTimer uses the unsavedTime to calculate it's first fireDate,
-                        // if a save is needed the timer will fire immediately.
-
-                        [self updateAndResumeSaveTimer];
-                    }
-                } else if (self->_saveTimer) {
-                    // Handles #1
-
-                    [self destroySaveTimer];
-                }
-            }
-        }
-    };
-
-    // The design of the setter logic below is taken from the DDAbstractLogger implementation.
-    // For documentation please refer to the DDAbstractLogger implementation.
-
-    if ([self isOnInternalLoggerQueue]) {
-        block();
-    } else {
-        dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
-        NSAssert(![self isOnGlobalLoggingQueue], @"Core architecture requirement failure");
-
-        dispatch_async(globalLoggingQueue, ^{
-            dispatch_async(self.loggerQueue, block);
-        });
-    }
-}
-
-- (NSTimeInterval)maxAge {
-    // The design of this method is taken from the DDAbstractLogger implementation.
-    // For extensive documentation please refer to the DDAbstractLogger implementation.
-
-    // Note: The internal implementation MUST access the colorsEnabled variable directly,
-    // This method is designed explicitly for external access.
-    //
-    // Using "self." syntax to go through this method will cause immediate deadlock.
-    // This is the intended result. Fix it by accessing the ivar directly.
-    // Great strides have been take to ensure this is safe to do. Plus it's MUCH faster.
-
-    NSAssert(![self isOnGlobalLoggingQueue], @"Core architecture requirement failure");
-    NSAssert(![self isOnInternalLoggerQueue], @"MUST access ivar directly, NOT via self.* syntax.");
-
-    dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
-
-    __block NSTimeInterval result;
-
-    dispatch_sync(globalLoggingQueue, ^{
-        dispatch_sync(self.loggerQueue, ^{
-            result = self->_maxAge;
-        });
-    });
-
-    return result;
-}
-
-- (void)setMaxAge:(NSTimeInterval)interval {
-    dispatch_block_t block = ^{
-        @autoreleasepool {
-            // C99 recommended floating point comparison macro
-            // Read: isLessThanOrGreaterThan(floatA, floatB)
-
-            if (/* maxAge != interval */ islessgreater(self->_maxAge, interval)) {
-                NSTimeInterval oldMaxAge = self->_maxAge;
-                NSTimeInterval newMaxAge = interval;
-
-                self->_maxAge = interval;
-
-                // There are several cases we need to handle here.
-                //
-                // 1. If the maxAge was previously enabled and it just got disabled,
-                //    then we need to stop the deleteTimer. (And we might as well release it.)
-                //
-                // 2. If the maxAge was previously disabled and it just got enabled,
-                //    then we need to setup the deleteTimer. (Plus we might need to do an immediate delete.)
-                //
-                // 3. If the maxAge was increased,
-                //    then we don't need to do anything.
-                //
-                // 4. If the maxAge was decreased,
-                //    then we should do an immediate delete.
-
-                BOOL shouldDeleteNow = NO;
-
-                if (oldMaxAge > 0.0) {
-                    if (newMaxAge <= 0.0) {
-                        // Handles #1
-
-                        [self destroyDeleteTimer];
-                    } else if (oldMaxAge > newMaxAge) {
-                        // Handles #4
-                        shouldDeleteNow = YES;
-                    }
-                } else if (newMaxAge > 0.0) {
-                    // Handles #2
-                    shouldDeleteNow = YES;
-                }
-
-                if (shouldDeleteNow) {
-                    [self performDelete];
-
-                    if (self->_deleteTimer) {
-                        [self updateDeleteTimer];
-                    } else {
-                        [self createAndStartDeleteTimer];
-                    }
-                }
-            }
-        }
-    };
-
-    // The design of the setter logic below is taken from the DDAbstractLogger implementation.
-    // For documentation please refer to the DDAbstractLogger implementation.
-
-    if ([self isOnInternalLoggerQueue]) {
-        block();
-    } else {
-        dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
-        NSAssert(![self isOnGlobalLoggingQueue], @"Core architecture requirement failure");
-
-        dispatch_async(globalLoggingQueue, ^{
-            dispatch_async(self.loggerQueue, block);
-        });
-    }
-}
-
-- (NSTimeInterval)deleteInterval {
-    // The design of this method is taken from the DDAbstractLogger implementation.
-    // For extensive documentation please refer to the DDAbstractLogger implementation.
-
-    // Note: The internal implementation MUST access the colorsEnabled variable directly,
-    // This method is designed explicitly for external access.
-    //
-    // Using "self." syntax to go through this method will cause immediate deadlock.
-    // This is the intended result. Fix it by accessing the ivar directly.
-    // Great strides have been take to ensure this is safe to do. Plus it's MUCH faster.
-
-    NSAssert(![self isOnGlobalLoggingQueue], @"Core architecture requirement failure");
-    NSAssert(![self isOnInternalLoggerQueue], @"MUST access ivar directly, NOT via self.* syntax.");
-
-    dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
-
-    __block NSTimeInterval result;
-
-    dispatch_sync(globalLoggingQueue, ^{
-        dispatch_sync(self.loggerQueue, ^{
-            result = self->_deleteInterval;
-        });
-    });
-
-    return result;
-}
-
-- (void)setDeleteInterval:(NSTimeInterval)interval {
-    dispatch_block_t block = ^{
-        @autoreleasepool {
-            // C99 recommended floating point comparison macro
-            // Read: isLessThanOrGreaterThan(floatA, floatB)
-
-            if (/* deleteInterval != interval */ islessgreater(self->_deleteInterval, interval)) {
-                self->_deleteInterval = interval;
-
-                // There are several cases we need to handle here.
-                //
-                // 1. If the deleteInterval was previously enabled and it just got disabled,
-                //    then we need to stop the deleteTimer. (And we might as well release it.)
-                //
-                // 2. If the deleteInterval was previously disabled and it just got enabled,
-                //    then we need to setup the deleteTimer. (Plus we might need to do an immediate delete.)
-                //
-                // 3. If the deleteInterval increased, then we need to reset the timer so that it fires at the later date.
-                //
-                // 4. If the deleteInterval decreased, then we need to reset the timer so that it fires at an earlier date.
-                //    (Plus we might need to do an immediate delete.)
-
-                if (self->_deleteInterval > 0.0) {
-                    if (self->_deleteTimer == NULL) {
-                        // Handles #2
-                        //
-                        // Since the deleteTimer uses the lastDeleteTime to calculate it's first fireDate,
-                        // if a delete is needed the timer will fire immediately.
-
-                        [self createAndStartDeleteTimer];
-                    } else {
-                        // Handles #3
-                        // Handles #4
-                        //
-                        // Since the deleteTimer uses the lastDeleteTime to calculate it's first fireDate,
-                        // if a save is needed the timer will fire immediately.
-
-                        [self updateDeleteTimer];
-                    }
-                } else if (self->_deleteTimer) {
-                    // Handles #1
-
-                    [self destroyDeleteTimer];
-                }
-            }
-        }
-    };
-
-    // The design of the setter logic below is taken from the DDAbstractLogger implementation.
-    // For documentation please refer to the DDAbstractLogger implementation.
-
-    if ([self isOnInternalLoggerQueue]) {
-        block();
-    } else {
-        dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
-        NSAssert(![self isOnGlobalLoggingQueue], @"Core architecture requirement failure");
-
-        dispatch_async(globalLoggingQueue, ^{
-            dispatch_async(self.loggerQueue, block);
-        });
-    }
-}
-
-- (BOOL)deleteOnEverySave {
-    // The design of this method is taken from the DDAbstractLogger implementation.
-    // For extensive documentation please refer to the DDAbstractLogger implementation.
-
-    // Note: The internal implementation MUST access the colorsEnabled variable directly,
-    // This method is designed explicitly for external access.
-    //
-    // Using "self." syntax to go through this method will cause immediate deadlock.
-    // This is the intended result. Fix it by accessing the ivar directly.
-    // Great strides have been take to ensure this is safe to do. Plus it's MUCH faster.
-
-    NSAssert(![self isOnGlobalLoggingQueue], @"Core architecture requirement failure");
-    NSAssert(![self isOnInternalLoggerQueue], @"MUST access ivar directly, NOT via self.* syntax.");
-
-    dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
-
-    __block BOOL result;
-
-    dispatch_sync(globalLoggingQueue, ^{
-        dispatch_sync(self.loggerQueue, ^{
-            result = self->_deleteOnEverySave;
-        });
-    });
-
-    return result;
-}
-
-- (void)setDeleteOnEverySave:(BOOL)flag {
-    dispatch_block_t block = ^{
-        self->_deleteOnEverySave = flag;
-    };
-
-    // The design of the setter logic below is taken from the DDAbstractLogger implementation.
-    // For documentation please refer to the DDAbstractLogger implementation.
-
-    if ([self isOnInternalLoggerQueue]) {
-        block();
-    } else {
-        dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
-        NSAssert(![self isOnGlobalLoggingQueue], @"Core architecture requirement failure");
-
-        dispatch_async(globalLoggingQueue, ^{
-            dispatch_async(self.loggerQueue, block);
-        });
-    }
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark Public API
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-- (void)savePendingLogEntries {
-    dispatch_block_t block = ^{
-        @autoreleasepool {
-            [self performSaveAndSuspendSaveTimer];
-        }
-    };
-
-    if ([self isOnInternalLoggerQueue]) {
-        block();
-    } else {
-        dispatch_async(self.loggerQueue, block);
-    }
-}
-
-- (void)deleteOldLogEntries {
-    dispatch_block_t block = ^{
-        @autoreleasepool {
-            [self performDelete];
-        }
-    };
-
-    if ([self isOnInternalLoggerQueue]) {
-        block();
-    } else {
-        dispatch_async(self.loggerQueue, block);
-    }
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark DDLogger
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-- (void)didAddLogger {
-    // If you override me be sure to invoke [super didAddLogger];
-
-    [self createSuspendedSaveTimer];
-
-    [self createAndStartDeleteTimer];
-}
-
-- (void)willRemoveLogger {
-    // If you override me be sure to invoke [super willRemoveLogger];
-
-    [self performSaveAndSuspendSaveTimer];
-
-    [self destroySaveTimer];
-    [self destroyDeleteTimer];
-}
-
-- (void)logMessage:(DDLogMessage *)logMessage {
-    if ([self db_log:logMessage]) {
-        BOOL firstUnsavedEntry = (++_unsavedCount == 1);
-
-        if ((_unsavedCount >= _saveThreshold) && (_saveThreshold > 0)) {
-            [self performSaveAndSuspendSaveTimer];
-        } else if (firstUnsavedEntry) {
-            _unsavedTime = dispatch_time(DISPATCH_TIME_NOW, 0);
-            [self updateAndResumeSaveTimer];
-        }
-    }
-}
-
-- (void)flush {
-    // This method is invoked by DDLog's flushLog method.
-    //
-    // It is called automatically when the application quits,
-    // or if the developer invokes DDLog's flushLog method prior to crashing or something.
-
-    [self performSaveAndSuspendSaveTimer];
-}
-
-@end

+ 0 - 26
Carthage/Checkouts/CocoaLumberjack/Classes/DDAssertMacros.h

@@ -1,26 +0,0 @@
-// Software License Agreement (BSD License)
-//
-// Copyright (c) 2010-2019, Deusty, LLC
-// All rights reserved.
-//
-// Redistribution and use of this software in source and binary forms,
-// with or without modification, are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above copyright notice,
-//   this list of conditions and the following disclaimer.
-//
-// * Neither the name of Deusty nor the names of its contributors may be used
-//   to endorse or promote products derived from this software without specific
-//   prior written permission of Deusty, LLC.
-
-/**
- * NSAssert replacement that will output a log message even when assertions are disabled.
- **/
-#define DDAssert(condition, frmt, ...)                                                \
-        if (!(condition)) {                                                           \
-            NSString *description = [NSString stringWithFormat:frmt, ## __VA_ARGS__]; \
-            DDLogError(@"%@", description);                                           \
-            NSAssert(NO, @"%@", description);                                         \
-        }
-#define DDAssertCondition(condition) DDAssert(condition, @"Condition not satisfied: %s", #condition)
-

+ 0 - 545
Carthage/Checkouts/CocoaLumberjack/Classes/DDFileLogger.h

@@ -1,545 +0,0 @@
-// Software License Agreement (BSD License)
-//
-// Copyright (c) 2010-2019, Deusty, LLC
-// All rights reserved.
-//
-// Redistribution and use of this software in source and binary forms,
-// with or without modification, are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above copyright notice,
-//   this list of conditions and the following disclaimer.
-//
-// * Neither the name of Deusty nor the names of its contributors may be used
-//   to endorse or promote products derived from this software without specific
-//   prior written permission of Deusty, LLC.
-
-// Disable legacy macros
-#ifndef DD_LEGACY_MACROS
-    #define DD_LEGACY_MACROS 0
-#endif
-
-#import <CocoaLumberjack/DDLog.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@class DDLogFileInfo;
-
-/**
- * This class provides a logger to write log statements to a file.
- **/
-
-
-// Default configuration and safety/sanity values.
-//
-// maximumFileSize         -> kDDDefaultLogMaxFileSize
-// rollingFrequency        -> kDDDefaultLogRollingFrequency
-// maximumNumberOfLogFiles -> kDDDefaultLogMaxNumLogFiles
-// logFilesDiskQuota       -> kDDDefaultLogFilesDiskQuota
-//
-// You should carefully consider the proper configuration values for your application.
-
-extern unsigned long long const kDDDefaultLogMaxFileSize;
-extern NSTimeInterval     const kDDDefaultLogRollingFrequency;
-extern NSUInteger         const kDDDefaultLogMaxNumLogFiles;
-extern unsigned long long const kDDDefaultLogFilesDiskQuota;
-
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark -
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-/**
- *  The LogFileManager protocol is designed to allow you to control all aspects of your log files.
- *
- *  The primary purpose of this is to allow you to do something with the log files after they have been rolled.
- *  Perhaps you want to compress them to save disk space.
- *  Perhaps you want to upload them to an FTP server.
- *  Perhaps you want to run some analytics on the file.
- *
- *  A default LogFileManager is, of course, provided.
- *  The default LogFileManager simply deletes old log files according to the maximumNumberOfLogFiles property.
- *
- *  This protocol provides various methods to fetch the list of log files.
- *
- *  There are two variants: sorted and unsorted.
- *  If sorting is not necessary, the unsorted variant is obviously faster.
- *  The sorted variant will return an array sorted by when the log files were created,
- *  with the most recently created log file at index 0, and the oldest log file at the end of the array.
- *
- *  You can fetch only the log file paths (full path including name), log file names (name only),
- *  or an array of `DDLogFileInfo` objects.
- *  The `DDLogFileInfo` class is documented below, and provides a handy wrapper that
- *  gives you easy access to various file attributes such as the creation date or the file size.
- */
-@protocol DDLogFileManager <NSObject>
-@required
-
-// Public properties
-
-/**
- * The maximum number of archived log files to keep on disk.
- * For example, if this property is set to 3,
- * then the LogFileManager will only keep 3 archived log files (plus the current active log file) on disk.
- * Once the active log file is rolled/archived, then the oldest of the existing 3 rolled/archived log files is deleted.
- *
- * You may optionally disable this option by setting it to zero.
- **/
-@property (readwrite, assign, atomic) NSUInteger maximumNumberOfLogFiles;
-
-/**
- * The maximum space that logs can take. On rolling logfile all old log files that exceed logFilesDiskQuota will
- * be deleted.
- *
- * You may optionally disable this option by setting it to zero.
- **/
-@property (readwrite, assign, atomic) unsigned long long logFilesDiskQuota;
-
-// Public methods
-
-/**
- *  Returns the logs directory (path)
- */
-@property (nonatomic, readonly, copy) NSString *logsDirectory;
-
-/**
- * Returns an array of `NSString` objects,
- * each of which is the filePath to an existing log file on disk.
- **/
-@property (nonatomic, readonly, strong) NSArray<NSString *> *unsortedLogFilePaths;
-
-/**
- * Returns an array of `NSString` objects,
- * each of which is the fileName of an existing log file on disk.
- **/
-@property (nonatomic, readonly, strong) NSArray<NSString *> *unsortedLogFileNames;
-
-/**
- * Returns an array of `DDLogFileInfo` objects,
- * each representing an existing log file on disk,
- * and containing important information about the log file such as it's modification date and size.
- **/
-@property (nonatomic, readonly, strong) NSArray<DDLogFileInfo *> *unsortedLogFileInfos;
-
-/**
- * Just like the `unsortedLogFilePaths` method, but sorts the array.
- * The items in the array are sorted by creation date.
- * The first item in the array will be the most recently created log file.
- **/
-@property (nonatomic, readonly, strong) NSArray<NSString *> *sortedLogFilePaths;
-
-/**
- * Just like the `unsortedLogFileNames` method, but sorts the array.
- * The items in the array are sorted by creation date.
- * The first item in the array will be the most recently created log file.
- **/
-@property (nonatomic, readonly, strong) NSArray<NSString *> *sortedLogFileNames;
-
-/**
- * Just like the `unsortedLogFileInfos` method, but sorts the array.
- * The items in the array are sorted by creation date.
- * The first item in the array will be the most recently created log file.
- **/
-@property (nonatomic, readonly, strong) NSArray<DDLogFileInfo *> *sortedLogFileInfos;
-
-// Private methods (only to be used by DDFileLogger)
-
-/**
- * Generates a new unique log file path, and creates the corresponding log file.
- * This method is executed directly on the file logger's internal queue.
- * The file has to exist by the time the method returns.
- **/
-- (NSString *)createNewLogFile;
-
-@optional
-
-// Notifications from DDFileLogger
-
-/**
- *  Called when a log file was archived. Executed on global queue with default priority.
- */
-- (void)didArchiveLogFile:(NSString *)logFilePath NS_SWIFT_NAME(didArchiveLogFile(atPath:));
-
-/**
- *  Called when the roll action was executed and the log was archived.
- *  Executed on global queue with default priority.
- */
-- (void)didRollAndArchiveLogFile:(NSString *)logFilePath NS_SWIFT_NAME(didRollAndArchiveLogFile(atPath:));
-
-@end
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark -
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-/**
- * Default log file manager.
- *
- * All log files are placed inside the logsDirectory.
- * If a specific logsDirectory isn't specified, the default directory is used.
- * On Mac, this is in `~/Library/Logs/<Application Name>`.
- * On iPhone, this is in `~/Library/Caches/Logs`.
- *
- * Log files are named `"<bundle identifier> <date> <time>.log"`
- * Example: `com.organization.myapp 2013-12-03 17-14.log`
- *
- * Archived log files are automatically deleted according to the `maximumNumberOfLogFiles` property.
- **/
-@interface DDLogFileManagerDefault : NSObject <DDLogFileManager>
-
-/**
- *  Default initializer
- */
-- (instancetype)init;
-
-/**
- *  If logDirectory is not specified, then a folder called "Logs" is created in the app's cache directory.
- *  While running on the simulator, the "Logs" folder is located in the library temporary directory.
- */
-- (instancetype)initWithLogsDirectory:(NSString * __nullable)logsDirectory NS_DESIGNATED_INITIALIZER;
-
-#if TARGET_OS_IPHONE
-/*
- * Calling this constructor you can override the default "automagically" chosen NSFileProtection level.
- * Useful if you are writing a command line utility / CydiaSubstrate addon for iOS that has no NSBundle
- * or like SpringBoard no BackgroundModes key in the NSBundle:
- *    iPhone:~ root# cycript -p SpringBoard
- *    cy# [NSBundle mainBundle]
- *    #"NSBundle </System/Library/CoreServices/SpringBoard.app> (loaded)"
- *    cy# [[NSBundle mainBundle] objectForInfoDictionaryKey:@"UIBackgroundModes"];
- *    null
- *    cy#
- **/
-- (instancetype)initWithLogsDirectory:(NSString * __nullable)logsDirectory
-           defaultFileProtectionLevel:(NSFileProtectionType)fileProtectionLevel;
-#endif
-
-/*
- * Methods to override.
- *
- * Log files are named `"<bundle identifier> <date> <time>.log"`
- * Example: `com.organization.myapp 2013-12-03 17-14.log`
- *
- * If you wish to change default filename, you can override following two methods.
- * - `newLogFileName` method would be called on new logfile creation.
- * - `isLogFile:` method would be called to filter log files from all other files in logsDirectory.
- *   You have to parse given filename and return YES if it is logFile.
- *
- * **NOTE**
- * `newLogFileName` returns filename. If appropriate file already exists, number would be added
- * to filename before extension. You have to handle this case in isLogFile: method.
- *
- * Example:
- * - newLogFileName returns `"com.organization.myapp 2013-12-03.log"`,
- *   file `"com.organization.myapp 2013-12-03.log"` would be created.
- * - after some time `"com.organization.myapp 2013-12-03.log"` is archived
- * - newLogFileName again returns `"com.organization.myapp 2013-12-03.log"`,
- *   file `"com.organization.myapp 2013-12-03 2.log"` would be created.
- * - after some time `"com.organization.myapp 2013-12-03 1.log"` is archived
- * - newLogFileName again returns `"com.organization.myapp 2013-12-03.log"`,
- *   file `"com.organization.myapp 2013-12-03 3.log"` would be created.
- **/
-
-/**
- * Generates log file name with default format `"<bundle identifier> <date> <time>.log"`
- * Example: `MobileSafari 2013-12-03 17-14.log`
- *
- * You can change it by overriding `newLogFileName` and `isLogFile:` methods.
- **/
-@property (readonly, copy) NSString *newLogFileName;
-
-/**
- * Default log file name is `"<bundle identifier> <date> <time>.log"`.
- * Example: `MobileSafari 2013-12-03 17-14.log`
- *
- * You can change it by overriding `newLogFileName` and `isLogFile:` methods.
- **/
-- (BOOL)isLogFile:(NSString *)fileName NS_SWIFT_NAME(isLogFile(withName:));
-
-/**
- * New log files are created empty by default in `createNewLogFile:` method
- *
- * If you wish to specify a common file header to use in your log files,
- * you can set the initial log file contents by overriding `logFileHeader`
- **/
-@property (readonly, copy, nullable) NSString *logFileHeader;
-
-/* Inherited from DDLogFileManager protocol:
-
-   @property (readwrite, assign, atomic) NSUInteger maximumNumberOfLogFiles;
-   @property (readwrite, assign, atomic) NSUInteger logFilesDiskQuota;
-
-   - (NSString *)logsDirectory;
-
-   - (NSArray *)unsortedLogFilePaths;
-   - (NSArray *)unsortedLogFileNames;
-   - (NSArray *)unsortedLogFileInfos;
-
-   - (NSArray *)sortedLogFilePaths;
-   - (NSArray *)sortedLogFileNames;
-   - (NSArray *)sortedLogFileInfos;
-
- */
-
-@end
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark -
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-/**
- * Most users will want file log messages to be prepended with the date and time.
- * Rather than forcing the majority of users to write their own formatter,
- * we will supply a logical default formatter.
- * Users can easily replace this formatter with their own by invoking the `setLogFormatter:` method.
- * It can also be removed by calling `setLogFormatter:`, and passing a nil parameter.
- *
- * In addition to the convenience of having a logical default formatter,
- * it will also provide a template that makes it easy for developers to copy and change.
- **/
-@interface DDLogFileFormatterDefault : NSObject <DDLogFormatter>
-
-/**
- *  Default initializer
- */
-- (instancetype)init;
-
-/**
- *  Designated initializer, requires a date formatter
- */
-- (instancetype)initWithDateFormatter:(NSDateFormatter * __nullable)dateFormatter NS_DESIGNATED_INITIALIZER;
-
-@end
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark -
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-/**
- *  The standard implementation for a file logger
- */
-@interface DDFileLogger : DDAbstractLogger <DDLogger>
-
-/**
- *  Default initializer.
- */
-- (instancetype)init;
-
-/**
- *  Designated initializer, requires a `DDLogFileManager` instance.
- *  A global queue w/ default priority is used to run callbacks.
- *  If needed, specify queue using `initWithLogFileManager:completionQueue:`.
- */
-- (instancetype)initWithLogFileManager:(id <DDLogFileManager> __nullable)logFileManager;
-
-/**
- *  Designated initializer, requires a `DDLogFileManager` instance.
- *  The completionQueue is used to execute `didArchiveLogFile`, `didRollAndArchiveLogFile`,
- *  and the callback in `rollLog`. If nil, a global queue w/ default priority is used.
- */
-- (instancetype)initWithLogFileManager:(id <DDLogFileManager> __nullable)logFileManager
-                       completionQueue:(dispatch_queue_t __nullable)dispatchQueue NS_DESIGNATED_INITIALIZER;
-
-/**
- *  Called when the logger is about to write message. Call super before your implementation.
- */
-- (void)willLogMessage NS_REQUIRES_SUPER;
-
-/**
- *  Called when the logger wrote message. Call super after your implementation.
- */
-- (void)didLogMessage NS_REQUIRES_SUPER;
-
-/**
- *  Writes all in-memory log data to the permanent storage. Call super before your implementation.
- *  Don't call this method directly, instead use the `[DDLog flushLog]` to ensure all log messages are included in flush.
- */
-- (void)flush NS_REQUIRES_SUPER;
-
-/**
- *  Called when the logger checks archive or not current log file.
- *  Override this method to extend standard behavior. By default returns NO.
- *  This is executed directly on the logger's internal queue, so keep processing light!
- */
-- (BOOL)shouldArchiveRecentLogFileInfo:(DDLogFileInfo *)recentLogFileInfo;
-
-/**
- * Log File Rolling:
- *
- * `maximumFileSize`:
- *   The approximate maximum size (in bytes) to allow log files to grow.
- *   If a log file is larger than this value after a log statement is appended,
- *   then the log file is rolled.
- *
- * `rollingFrequency`
- *   How often to roll the log file.
- *   The frequency is given as an `NSTimeInterval`, which is a double that specifies the interval in seconds.
- *   Once the log file gets to be this old, it is rolled.
- *
- * `doNotReuseLogFiles`
- *   When set, will always create a new log file at application launch.
- *
- * Both the `maximumFileSize` and the `rollingFrequency` are used to manage rolling.
- * Whichever occurs first will cause the log file to be rolled.
- *
- * For example:
- * The `rollingFrequency` is 24 hours,
- * but the log file surpasses the `maximumFileSize` after only 20 hours.
- * The log file will be rolled at that 20 hour mark.
- * A new log file will be created, and the 24 hour timer will be restarted.
- *
- * You may optionally disable rolling due to filesize by setting `maximumFileSize` to zero.
- * If you do so, rolling is based solely on `rollingFrequency`.
- *
- * You may optionally disable rolling due to time by setting `rollingFrequency` to zero (or any non-positive number).
- * If you do so, rolling is based solely on `maximumFileSize`.
- *
- * If you disable both `maximumFileSize` and `rollingFrequency`, then the log file won't ever be rolled.
- * This is strongly discouraged.
- **/
-@property (readwrite, assign) unsigned long long maximumFileSize;
-
-/**
- *  See description for `maximumFileSize`
- */
-@property (readwrite, assign) NSTimeInterval rollingFrequency;
-
-/**
- *  See description for `maximumFileSize`
- */
-@property (readwrite, assign, atomic) BOOL doNotReuseLogFiles;
-
-/**
- * The DDLogFileManager instance can be used to retrieve the list of log files,
- * and configure the maximum number of archived log files to keep.
- *
- * @see DDLogFileManager.maximumNumberOfLogFiles
- **/
-@property (strong, nonatomic, readonly) id <DDLogFileManager> logFileManager;
-
-/**
- * When using a custom formatter you can set the `logMessage` method not to append
- * `\n` character after each output. This allows for some greater flexibility with
- * custom formatters. Default value is YES.
- **/
-@property (nonatomic, readwrite, assign) BOOL automaticallyAppendNewlineForCustomFormatters;
-
-/**
- *  You can optionally force the current log file to be rolled with this method.
- *  CompletionBlock will be called on main queue.
- */
-- (void)rollLogFileWithCompletionBlock:(void (^ __nullable)(void))completionBlock
-    NS_SWIFT_NAME(rollLogFile(withCompletion:));
-
-/**
- *  Method is deprecated.
- *  @deprecated Use `rollLogFileWithCompletionBlock:` method instead.
- */
-- (void)rollLogFile __attribute((deprecated));
-
-// Inherited from DDAbstractLogger
-
-// - (id <DDLogFormatter>)logFormatter;
-// - (void)setLogFormatter:(id <DDLogFormatter>)formatter;
-
-/**
- * Returns the log file that should be used.
- * If there is an existing log file that is suitable,
- * within the constraints of `maximumFileSize` and `rollingFrequency`, then it is returned.
- *
- * Otherwise a new file is created and returned.
- **/
-@property (nonatomic, readonly, strong) DDLogFileInfo *currentLogFileInfo;
-
-@end
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark -
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-/**
- * `DDLogFileInfo` is a simple class that provides access to various file attributes.
- * It provides good performance as it only fetches the information if requested,
- * and it caches the information to prevent duplicate fetches.
- *
- * It was designed to provide quick snapshots of the current state of log files,
- * and to help sort log files in an array.
- *
- * This class does not monitor the files, or update it's cached attribute values if the file changes on disk.
- * This is not what the class was designed for.
- *
- * If you absolutely must get updated values,
- * you can invoke the reset method which will clear the cache.
- **/
-@interface DDLogFileInfo : NSObject
-
-@property (strong, nonatomic, readonly) NSString *filePath;
-@property (strong, nonatomic, readonly) NSString *fileName;
-
-#if FOUNDATION_SWIFT_SDK_EPOCH_AT_LEAST(8)
-@property (strong, nonatomic, readonly) NSDictionary<NSFileAttributeKey, id> *fileAttributes;
-#else
-@property (strong, nonatomic, readonly) NSDictionary<NSString *, id> *fileAttributes;
-#endif
-
-@property (strong, nonatomic, readonly) NSDate *creationDate;
-@property (strong, nonatomic, readonly) NSDate *modificationDate;
-
-@property (nonatomic, readonly) unsigned long long fileSize;
-
-@property (nonatomic, readonly) NSTimeInterval age;
-
-@property (nonatomic, readwrite) BOOL isArchived;
-
-+ (instancetype)logFileWithPath:(NSString *)filePath NS_SWIFT_UNAVAILABLE("Use init(filePath:)");
-
-- (instancetype)init NS_UNAVAILABLE;
-- (instancetype)initWithFilePath:(NSString *)filePath NS_DESIGNATED_INITIALIZER;
-
-- (void)reset;
-- (void)renameFile:(NSString *)newFileName NS_SWIFT_NAME(renameFile(to:));
-
-#if TARGET_IPHONE_SIMULATOR
-
-// So here's the situation.
-// Extended attributes are perfect for what we're trying to do here (marking files as archived).
-// This is exactly what extended attributes were designed for.
-//
-// But Apple screws us over on the simulator.
-// Everytime you build-and-go, they copy the application into a new folder on the hard drive,
-// and as part of the process they strip extended attributes from our log files.
-// Normally, a copy of a file preserves extended attributes.
-// So obviously Apple has gone to great lengths to piss us off.
-//
-// Thus we use a slightly different tactic for marking log files as archived in the simulator.
-// That way it "just works" and there's no confusion when testing.
-//
-// The difference in method names is indicative of the difference in functionality.
-// On the simulator we add an attribute by appending a filename extension.
-//
-// For example:
-// "mylog.txt" -> "mylog.archived.txt"
-// "mylog"     -> "mylog.archived"
-
-- (BOOL)hasExtensionAttributeWithName:(NSString *)attrName;
-
-- (void)addExtensionAttributeWithName:(NSString *)attrName;
-- (void)removeExtensionAttributeWithName:(NSString *)attrName;
-
-#else /* if TARGET_IPHONE_SIMULATOR */
-
-// Normal use of extended attributes used everywhere else,
-// such as on Macs and on iPhone devices.
-
-- (BOOL)hasExtendedAttributeWithName:(NSString *)attrName;
-
-- (void)addExtendedAttributeWithName:(NSString *)attrName;
-- (void)removeExtendedAttributeWithName:(NSString *)attrName;
-
-#endif /* if TARGET_IPHONE_SIMULATOR */
-
-- (NSComparisonResult)reverseCompareByCreationDate:(DDLogFileInfo *)another;
-- (NSComparisonResult)reverseCompareByModificationDate:(DDLogFileInfo *)another;
-
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 1712
Carthage/Checkouts/CocoaLumberjack/Classes/DDFileLogger.m

@@ -1,1712 +0,0 @@
-// Software License Agreement (BSD License)
-//
-// Copyright (c) 2010-2019, Deusty, LLC
-// All rights reserved.
-//
-// Redistribution and use of this software in source and binary forms,
-// with or without modification, are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above copyright notice,
-//   this list of conditions and the following disclaimer.
-//
-// * Neither the name of Deusty nor the names of its contributors may be used
-//   to endorse or promote products derived from this software without specific
-//   prior written permission of Deusty, LLC.
-
-#import "DDFileLogger.h"
-
-#import "DDFileLogger+Internal.h"
-
-#import <sys/xattr.h>
-
-#if !__has_feature(objc_arc)
-#error This file must be compiled with ARC. Use -fobjc-arc flag (or convert project to ARC).
-#endif
-
-// We probably shouldn't be using DDLog() statements within the DDLog implementation.
-// But we still want to leave our log statements for any future debugging,
-// and to allow other developers to trace the implementation (which is a great learning tool).
-//
-// So we use primitive logging macros around NSLog.
-// We maintain the NS prefix on the macros to be explicit about the fact that we're using NSLog.
-
-#ifndef DD_NSLOG_LEVEL
-    #define DD_NSLOG_LEVEL 2
-#endif
-
-#define NSLogError(frmt, ...)    do{ if(DD_NSLOG_LEVEL >= 1) NSLog((frmt), ##__VA_ARGS__); } while(0)
-#define NSLogWarn(frmt, ...)     do{ if(DD_NSLOG_LEVEL >= 2) NSLog((frmt), ##__VA_ARGS__); } while(0)
-#define NSLogInfo(frmt, ...)     do{ if(DD_NSLOG_LEVEL >= 3) NSLog((frmt), ##__VA_ARGS__); } while(0)
-#define NSLogDebug(frmt, ...)    do{ if(DD_NSLOG_LEVEL >= 4) NSLog((frmt), ##__VA_ARGS__); } while(0)
-#define NSLogVerbose(frmt, ...)  do{ if(DD_NSLOG_LEVEL >= 5) NSLog((frmt), ##__VA_ARGS__); } while(0)
-
-
-#if TARGET_OS_IPHONE
-BOOL doesAppRunInBackground(void);
-#endif
-
-unsigned long long const kDDDefaultLogMaxFileSize      = 1024 * 1024;      // 1 MB
-NSTimeInterval     const kDDDefaultLogRollingFrequency = 60 * 60 * 24;     // 24 Hours
-NSUInteger         const kDDDefaultLogMaxNumLogFiles   = 5;                // 5 Files
-unsigned long long const kDDDefaultLogFilesDiskQuota   = 20 * 1024 * 1024; // 20 MB
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark -
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-@interface DDLogFileManagerDefault () {
-    NSUInteger _maximumNumberOfLogFiles;
-    unsigned long long _logFilesDiskQuota;
-    NSString *_logsDirectory;
-#if TARGET_OS_IPHONE
-    NSFileProtectionType _defaultFileProtectionLevel;
-#endif
-}
-
-@end
-
-@implementation DDLogFileManagerDefault
-
-@synthesize maximumNumberOfLogFiles = _maximumNumberOfLogFiles;
-@synthesize logFilesDiskQuota = _logFilesDiskQuota;
-
-- (instancetype)init {
-    return [self initWithLogsDirectory:nil];
-}
-
-- (instancetype)initWithLogsDirectory:(NSString * __nullable)aLogsDirectory {
-    if ((self = [super init])) {
-        _maximumNumberOfLogFiles = kDDDefaultLogMaxNumLogFiles;
-        _logFilesDiskQuota = kDDDefaultLogFilesDiskQuota;
-
-        if (aLogsDirectory.length > 0) {
-            _logsDirectory = [aLogsDirectory copy];
-        } else {
-            _logsDirectory = [[self defaultLogsDirectory] copy];
-        }
-
-        NSKeyValueObservingOptions kvoOptions = NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew;
-
-        [self addObserver:self forKeyPath:NSStringFromSelector(@selector(maximumNumberOfLogFiles)) options:kvoOptions context:nil];
-        [self addObserver:self forKeyPath:NSStringFromSelector(@selector(logFilesDiskQuota)) options:kvoOptions context:nil];
-
-        NSLogVerbose(@"DDFileLogManagerDefault: logsDirectory:\n%@", [self logsDirectory]);
-        NSLogVerbose(@"DDFileLogManagerDefault: sortedLogFileNames:\n%@", [self sortedLogFileNames]);
-    }
-
-    return self;
-}
-
-+ (BOOL)automaticallyNotifiesObserversForKey:(NSString *)theKey {
-
-    if ([theKey isEqualToString:@"maximumNumberOfLogFiles"] || [theKey isEqualToString:@"logFilesDiskQuota"]) {
-        return NO;
-    } else {
-        return [super automaticallyNotifiesObserversForKey:theKey];
-    }
-}
-
-#if TARGET_OS_IPHONE
-- (instancetype)initWithLogsDirectory:(NSString *)logsDirectory
-           defaultFileProtectionLevel:(NSFileProtectionType)fileProtectionLevel {
-
-    if ((self = [self initWithLogsDirectory:logsDirectory])) {
-        if ([fileProtectionLevel isEqualToString:NSFileProtectionNone] ||
-            [fileProtectionLevel isEqualToString:NSFileProtectionComplete] ||
-            [fileProtectionLevel isEqualToString:NSFileProtectionCompleteUnlessOpen] ||
-            [fileProtectionLevel isEqualToString:NSFileProtectionCompleteUntilFirstUserAuthentication]) {
-            _defaultFileProtectionLevel = fileProtectionLevel;
-        }
-    }
-
-    return self;
-}
-
-#endif
-
-- (void)dealloc {
-    // try-catch because the observer might be removed or never added. In this case, removeObserver throws and exception
-    @try {
-        [self removeObserver:self forKeyPath:NSStringFromSelector(@selector(maximumNumberOfLogFiles))];
-        [self removeObserver:self forKeyPath:NSStringFromSelector(@selector(logFilesDiskQuota))];
-    } @catch (NSException *exception) {
-    }
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark Configuration
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-- (void)observeValueForKeyPath:(NSString *)keyPath
-                      ofObject:(__unused id)object
-                        change:(NSDictionary *)change
-                       context:(__unused void *)context {
-    NSNumber *old = change[NSKeyValueChangeOldKey];
-    NSNumber *new = change[NSKeyValueChangeNewKey];
-
-    if ([old isEqual:new]) {
-        return;
-    }
-
-    if ([keyPath isEqualToString:NSStringFromSelector(@selector(maximumNumberOfLogFiles))] ||
-        [keyPath isEqualToString:NSStringFromSelector(@selector(logFilesDiskQuota))]) {
-        NSLogInfo(@"DDFileLogManagerDefault: Responding to configuration change: %@", keyPath);
-
-        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
-            @autoreleasepool {
-                // See method header for queue reasoning.
-                [self deleteOldLogFiles];
-            }
-        });
-    }
-}
-
-#if TARGET_OS_IPHONE
-- (NSFileProtectionType)logFileProtection {
-    if (_defaultFileProtectionLevel.length > 0) {
-        return _defaultFileProtectionLevel;
-    } else if (doesAppRunInBackground()) {
-        return NSFileProtectionCompleteUntilFirstUserAuthentication;
-    } else {
-        return NSFileProtectionCompleteUnlessOpen;
-    }
-}
-#endif
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark File Deleting
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-/**
- * Deletes archived log files that exceed the maximumNumberOfLogFiles or logFilesDiskQuota configuration values.
- * Method may take a while to execute since we're performing IO. It's not critical that this is synchronized with
- * log output, since the files we're deleting are all archived and not in use, therefore this method is called on a
- * background queue.
- **/
-- (void)deleteOldLogFiles {
-    NSLogVerbose(@"DDLogFileManagerDefault: deleteOldLogFiles");
-
-    NSArray *sortedLogFileInfos = [self sortedLogFileInfos];
-    NSUInteger firstIndexToDelete = NSNotFound;
-
-    const unsigned long long diskQuota = self.logFilesDiskQuota;
-    const NSUInteger maxNumLogFiles = self.maximumNumberOfLogFiles;
-
-    if (diskQuota) {
-        unsigned long long used = 0;
-
-        for (NSUInteger i = 0; i < sortedLogFileInfos.count; i++) {
-            DDLogFileInfo *info = sortedLogFileInfos[i];
-            used += info.fileSize;
-
-            if (used > diskQuota) {
-                firstIndexToDelete = i;
-                break;
-            }
-        }
-    }
-
-    if (maxNumLogFiles) {
-        if (firstIndexToDelete == NSNotFound) {
-            firstIndexToDelete = maxNumLogFiles;
-        } else {
-            firstIndexToDelete = MIN(firstIndexToDelete, maxNumLogFiles);
-        }
-    }
-
-    if (firstIndexToDelete == 0) {
-        // Do we consider the first file?
-        // We are only supposed to be deleting archived files.
-        // In most cases, the first file is likely the log file that is currently being written to.
-        // So in most cases, we do not want to consider this file for deletion.
-
-        if (sortedLogFileInfos.count > 0) {
-            DDLogFileInfo *logFileInfo = sortedLogFileInfos[0];
-
-            if (!logFileInfo.isArchived) {
-                // Don't delete active file.
-                ++firstIndexToDelete;
-            }
-        }
-    }
-
-    if (firstIndexToDelete != NSNotFound) {
-        // removing all log files starting with firstIndexToDelete
-
-        for (NSUInteger i = firstIndexToDelete; i < sortedLogFileInfos.count; i++) {
-            DDLogFileInfo *logFileInfo = sortedLogFileInfos[i];
-
-            NSError *error = nil;
-            BOOL success = [[NSFileManager defaultManager] removeItemAtPath:logFileInfo.filePath error:&error];
-            if (success) {
-                NSLogInfo(@"DDLogFileManagerDefault: Deleting file: %@", logFileInfo.fileName);
-            } else {
-                NSLogError(@"DDLogFileManagerDefault: Error deleting file %@", error);
-            }
-        }
-    }
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark Log Files
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-/**
- * Returns the path to the default logs directory.
- * If the logs directory doesn't exist, this method automatically creates it.
- **/
-- (NSString *)defaultLogsDirectory {
-
-#if TARGET_OS_IPHONE
-    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
-    NSString *baseDir = paths.firstObject;
-    NSString *logsDirectory = [baseDir stringByAppendingPathComponent:@"Logs"];
-#else
-    NSString *appName = [[NSProcessInfo processInfo] processName];
-    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
-    NSString *basePath = ([paths count] > 0) ? paths[0] : NSTemporaryDirectory();
-    NSString *logsDirectory = [[basePath stringByAppendingPathComponent:@"Logs"] stringByAppendingPathComponent:appName];
-#endif
-
-    return logsDirectory;
-}
-
-- (NSString *)logsDirectory {
-    // We could do this check once, during initialization, and not bother again.
-    // But this way the code continues to work if the directory gets deleted while the code is running.
-
-    NSAssert(_logsDirectory.length > 0, @"Directory must be set.");
-
-    NSError *err = nil;
-    BOOL success = [[NSFileManager defaultManager] createDirectoryAtPath:_logsDirectory
-                                             withIntermediateDirectories:YES
-                                                              attributes:nil
-                                                                   error:&err];
-    if (success == NO) {
-        NSLogError(@"DDFileLogManagerDefault: Error creating logsDirectory: %@", err);
-    }
-
-    return _logsDirectory;
-}
-
-- (BOOL)isLogFile:(NSString *)fileName {
-    NSString *appName = [self applicationName];
-
-    // We need to add a space to the name as otherwise we could match applications that have the name prefix.
-    BOOL hasProperPrefix = [fileName hasPrefix:[appName stringByAppendingString:@" "]];
-    BOOL hasProperSuffix = [fileName hasSuffix:@".log"];
-
-    return (hasProperPrefix && hasProperSuffix);
-}
-
-// if you change formatter, then change sortedLogFileInfos method also accordingly
-- (NSDateFormatter *)logFileDateFormatter {
-    NSMutableDictionary *dictionary = [[NSThread currentThread] threadDictionary];
-    NSString *dateFormat = @"yyyy'-'MM'-'dd'--'HH'-'mm'-'ss'-'SSS'";
-    NSString *key = [NSString stringWithFormat:@"logFileDateFormatter.%@", dateFormat];
-    NSDateFormatter *dateFormatter = dictionary[key];
-
-    if (dateFormatter == nil) {
-        dateFormatter = [[NSDateFormatter alloc] init];
-        [dateFormatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]];
-        [dateFormatter setDateFormat:dateFormat];
-        [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
-        dictionary[key] = dateFormatter;
-    }
-
-    return dateFormatter;
-}
-
-- (NSArray *)unsortedLogFilePaths {
-    NSString *logsDirectory = [self logsDirectory];
-    NSArray *fileNames = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:logsDirectory error:nil];
-
-    NSMutableArray *unsortedLogFilePaths = [NSMutableArray arrayWithCapacity:[fileNames count]];
-
-    for (NSString *fileName in fileNames) {
-        // Filter out any files that aren't log files. (Just for extra safety)
-
-    #if TARGET_IPHONE_SIMULATOR
-        // In case of iPhone simulator there can be 'archived' extension. isLogFile:
-        // method knows nothing about it. Thus removing it for this method.
-        //
-        // See full explanation in the header file.
-        NSString *theFileName = [fileName stringByReplacingOccurrencesOfString:@".archived"
-                                                                    withString:@""];
-
-        if ([self isLogFile:theFileName])
-    #else
-
-        if ([self isLogFile:fileName])
-    #endif
-        {
-            NSString *filePath = [logsDirectory stringByAppendingPathComponent:fileName];
-
-            [unsortedLogFilePaths addObject:filePath];
-        }
-    }
-
-    return unsortedLogFilePaths;
-}
-
-- (NSArray *)unsortedLogFileNames {
-    NSArray *unsortedLogFilePaths = [self unsortedLogFilePaths];
-
-    NSMutableArray *unsortedLogFileNames = [NSMutableArray arrayWithCapacity:[unsortedLogFilePaths count]];
-
-    for (NSString *filePath in unsortedLogFilePaths) {
-        [unsortedLogFileNames addObject:[filePath lastPathComponent]];
-    }
-
-    return unsortedLogFileNames;
-}
-
-- (NSArray *)unsortedLogFileInfos {
-    NSArray *unsortedLogFilePaths = [self unsortedLogFilePaths];
-
-    NSMutableArray *unsortedLogFileInfos = [NSMutableArray arrayWithCapacity:[unsortedLogFilePaths count]];
-
-    for (NSString *filePath in unsortedLogFilePaths) {
-        DDLogFileInfo *logFileInfo = [[DDLogFileInfo alloc] initWithFilePath:filePath];
-
-        [unsortedLogFileInfos addObject:logFileInfo];
-    }
-
-    return unsortedLogFileInfos;
-}
-
-- (NSArray *)sortedLogFilePaths {
-    NSArray *sortedLogFileInfos = [self sortedLogFileInfos];
-
-    NSMutableArray *sortedLogFilePaths = [NSMutableArray arrayWithCapacity:[sortedLogFileInfos count]];
-
-    for (DDLogFileInfo *logFileInfo in sortedLogFileInfos) {
-        [sortedLogFilePaths addObject:[logFileInfo filePath]];
-    }
-
-    return sortedLogFilePaths;
-}
-
-- (NSArray *)sortedLogFileNames {
-    NSArray *sortedLogFileInfos = [self sortedLogFileInfos];
-
-    NSMutableArray *sortedLogFileNames = [NSMutableArray arrayWithCapacity:[sortedLogFileInfos count]];
-
-    for (DDLogFileInfo *logFileInfo in sortedLogFileInfos) {
-        [sortedLogFileNames addObject:[logFileInfo fileName]];
-    }
-
-    return sortedLogFileNames;
-}
-
-- (NSArray *)sortedLogFileInfos {
-    return [[self unsortedLogFileInfos] sortedArrayUsingComparator:^NSComparisonResult(DDLogFileInfo *obj1,
-                                                                                       DDLogFileInfo *obj2) {
-        NSDate *date1 = [NSDate new];
-        NSDate *date2 = [NSDate new];
-
-        NSArray<NSString *> *arrayComponent = [[obj1 fileName] componentsSeparatedByString:@" "];
-        if (arrayComponent.count > 0) {
-            NSString *stringDate = arrayComponent.lastObject;
-            stringDate = [stringDate stringByReplacingOccurrencesOfString:@".log" withString:@""];
-            stringDate = [stringDate stringByReplacingOccurrencesOfString:@".archived" withString:@""];
-            date1 = [[self logFileDateFormatter] dateFromString:stringDate] ?: [obj1 creationDate];
-        }
-
-        arrayComponent = [[obj2 fileName] componentsSeparatedByString:@" "];
-        if (arrayComponent.count > 0) {
-            NSString *stringDate = arrayComponent.lastObject;
-            stringDate = [stringDate stringByReplacingOccurrencesOfString:@".log" withString:@""];
-            stringDate = [stringDate stringByReplacingOccurrencesOfString:@".archived" withString:@""];
-            date2 = [[self logFileDateFormatter] dateFromString:stringDate] ?: [obj2 creationDate];
-        }
-
-        return [date2 compare:date1 ?: [NSDate new]];
-    }];
-
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark Creation
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-//if you change newLogFileName , then  change isLogFile method also accordingly
-- (NSString *)newLogFileName {
-    NSString *appName = [self applicationName];
-
-    NSDateFormatter *dateFormatter = [self logFileDateFormatter];
-    NSString *formattedDate = [dateFormatter stringFromDate:[NSDate date]];
-
-    return [NSString stringWithFormat:@"%@ %@.log", appName, formattedDate];
-}
-
-- (NSString * __nullable)logFileHeader {
-    return nil;
-}
-
-- (NSData *)logFileHeaderData {
-    NSString *fileHeaderStr = [self logFileHeader];
-    
-    if (fileHeaderStr.length == 0) {
-        return nil;
-    }
-
-    if (![fileHeaderStr hasSuffix:@"\n"]) {
-        fileHeaderStr = [fileHeaderStr stringByAppendingString:@"\n"];
-    }
-
-    return [fileHeaderStr dataUsingEncoding:NSUTF8StringEncoding];
-}
-
-- (NSString *)createNewLogFile {
-    static NSUInteger MAX_ALLOWED_ERROR = 5;
-
-    NSString *fileName = [self newLogFileName];
-    NSString *logsDirectory = [self logsDirectory];
-    NSData *fileHeader = [self logFileHeaderData];
-    if (fileHeader == nil) {
-        fileHeader = [NSData new];
-    }
-
-    NSUInteger attempt = 1;
-    NSUInteger criticalErrors = 0;
-
-    do {
-        if (criticalErrors >= MAX_ALLOWED_ERROR) {
-            NSLogError(@"DDLogFileManagerDefault: Bailing file creation, encountered %ld errors.",
-                        (unsigned long)criticalErrors);
-            return nil;
-        }
-
-        NSString *actualFileName = fileName;
-
-        if (attempt > 1) {
-            NSString *extension = [actualFileName pathExtension];
-
-            actualFileName = [actualFileName stringByDeletingPathExtension];
-            actualFileName = [actualFileName stringByAppendingFormat:@" %lu", (unsigned long)attempt];
-
-            if (extension.length) {
-                actualFileName = [actualFileName stringByAppendingPathExtension:extension];
-            }
-        }
-
-        NSString *filePath = [logsDirectory stringByAppendingPathComponent:actualFileName];
-
-        NSError *error = nil;
-        BOOL success = [fileHeader writeToFile:filePath options:NSAtomicWrite error:&error];
-
-#if TARGET_OS_IPHONE
-        if (success) {
-            // When creating log file on iOS we're setting NSFileProtectionKey attribute to NSFileProtectionCompleteUnlessOpen.
-            //
-            // But in case if app is able to launch from background we need to have an ability to open log file any time we
-            // want (even if device is locked). Thats why that attribute have to be changed to
-            // NSFileProtectionCompleteUntilFirstUserAuthentication.
-            NSDictionary *attributes = @{NSFileProtectionKey: [self logFileProtection]};
-            success = [[NSFileManager defaultManager] setAttributes:attributes
-                                                       ofItemAtPath:filePath
-                                                              error:&error];
-        }
-#endif
-
-        if (success) {
-            NSLogVerbose(@"PURLogFileManagerDefault: Created new log file: %@", actualFileName);
-            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
-                // Since we just created a new log file, we may need to delete some old log files
-                [self deleteOldLogFiles];
-            });
-            return filePath;
-        } else if (error.code == NSFileWriteFileExistsError) {
-            attempt++;
-            continue;
-        } else {
-            NSLogError(@"PURLogFileManagerDefault: Critical error while creating log file: %@", error);
-            criticalErrors++;
-            continue;
-        }
-
-        return filePath;
-    } while (YES);
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark Utility
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-- (NSString *)applicationName {
-    static NSString *_appName;
-    static dispatch_once_t onceToken;
-
-    dispatch_once(&onceToken, ^{
-        _appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleIdentifier"];
-
-        if (_appName.length == 0) {
-            _appName = [[NSProcessInfo processInfo] processName];
-        }
-
-        if (_appName.length == 0) {
-            _appName = @"";
-        }
-    });
-
-    return _appName;
-}
-
-@end
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark -
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-@interface DDLogFileFormatterDefault () {
-    NSDateFormatter *_dateFormatter;
-}
-
-@end
-
-@implementation DDLogFileFormatterDefault
-
-- (instancetype)init {
-    return [self initWithDateFormatter:nil];
-}
-
-- (instancetype)initWithDateFormatter:(NSDateFormatter * __nullable)aDateFormatter {
-    if ((self = [super init])) {
-        if (aDateFormatter) {
-            _dateFormatter = aDateFormatter;
-        } else {
-            _dateFormatter = [[NSDateFormatter alloc] init];
-            [_dateFormatter setFormatterBehavior:NSDateFormatterBehavior10_4]; // 10.4+ style
-            [_dateFormatter setDateFormat:@"yyyy/MM/dd HH:mm:ss:SSS"];
-        }
-    }
-
-    return self;
-}
-
-- (NSString *)formatLogMessage:(DDLogMessage *)logMessage {
-    NSString *dateAndTime = [_dateFormatter stringFromDate:(logMessage->_timestamp)];
-
-    return [NSString stringWithFormat:@"%@  %@", dateAndTime, logMessage->_message];
-}
-
-@end
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark -
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-@interface DDFileLogger () {
-    id <DDLogFileManager> _logFileManager;
-
-    DDLogFileInfo *_currentLogFileInfo;
-    NSFileHandle *_currentLogFileHandle;
-
-    dispatch_source_t _currentLogFileVnode;
-
-    NSTimeInterval _rollingFrequency;
-    dispatch_source_t _rollingTimer;
-
-    unsigned long long _maximumFileSize;
-
-    dispatch_queue_t _completionQueue;
-}
-
-@end
-
-@implementation DDFileLogger
-
-- (instancetype)init {
-    DDLogFileManagerDefault *defaultLogFileManager = [[DDLogFileManagerDefault alloc] init];
-    return [self initWithLogFileManager:defaultLogFileManager completionQueue:nil];
-}
-
-- (instancetype)initWithLogFileManager:(id<DDLogFileManager>)logFileManager {
-    return [self initWithLogFileManager:logFileManager completionQueue:nil];
-}
-
-- (instancetype)initWithLogFileManager:(id <DDLogFileManager>)aLogFileManager
-                       completionQueue:(dispatch_queue_t __nullable)dispatchQueue {
-    if ((self = [super init])) {
-        _completionQueue = dispatchQueue ?: dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
-
-        _maximumFileSize = kDDDefaultLogMaxFileSize;
-        _rollingFrequency = kDDDefaultLogRollingFrequency;
-        _automaticallyAppendNewlineForCustomFormatters = YES;
-
-        _logFileManager = aLogFileManager;
-        _logFormatter = [DDLogFileFormatterDefault new];
-    }
-
-    return self;
-}
-
-- (void)lt_cleanup {
-    NSAssert([self isOnInternalLoggerQueue], @"lt_ methods should be on logger queue.");
-
-    [_currentLogFileHandle synchronizeFile];
-    [_currentLogFileHandle closeFile];
-
-    if (_currentLogFileVnode) {
-        dispatch_source_cancel(_currentLogFileVnode);
-        _currentLogFileVnode = NULL;
-    }
-
-    if (_rollingTimer) {
-        dispatch_source_cancel(_rollingTimer);
-        _rollingTimer = NULL;
-    }
-}
-
-- (void)dealloc {
-    if (self.isOnInternalLoggerQueue) {
-        [self lt_cleanup];
-    } else {
-        dispatch_sync(self.loggerQueue, ^{
-            [self lt_cleanup];
-        });
-    }
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark Properties
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-- (unsigned long long)maximumFileSize {
-    __block unsigned long long result;
-
-    dispatch_block_t block = ^{
-        result = self->_maximumFileSize;
-    };
-
-    // The design of this method is taken from the DDAbstractLogger implementation.
-    // For extensive documentation please refer to the DDAbstractLogger implementation.
-
-    // Note: The internal implementation MUST access the maximumFileSize variable directly,
-    // This method is designed explicitly for external access.
-    //
-    // Using "self." syntax to go through this method will cause immediate deadlock.
-    // This is the intended result. Fix it by accessing the ivar directly.
-    // Great strides have been take to ensure this is safe to do. Plus it's MUCH faster.
-
-    NSAssert(![self isOnGlobalLoggingQueue], @"Core architecture requirement failure");
-    NSAssert(![self isOnInternalLoggerQueue], @"MUST access ivar directly, NOT via self.* syntax.");
-
-    dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
-
-    dispatch_sync(globalLoggingQueue, ^{
-        dispatch_sync(self.loggerQueue, block);
-    });
-
-    return result;
-}
-
-- (void)setMaximumFileSize:(unsigned long long)newMaximumFileSize {
-    dispatch_block_t block = ^{
-        @autoreleasepool {
-            self->_maximumFileSize = newMaximumFileSize;
-            [self lt_maybeRollLogFileDueToSize];
-        }
-    };
-
-    // The design of this method is taken from the DDAbstractLogger implementation.
-    // For extensive documentation please refer to the DDAbstractLogger implementation.
-
-    // Note: The internal implementation MUST access the maximumFileSize variable directly,
-    // This method is designed explicitly for external access.
-    //
-    // Using "self." syntax to go through this method will cause immediate deadlock.
-    // This is the intended result. Fix it by accessing the ivar directly.
-    // Great strides have been take to ensure this is safe to do. Plus it's MUCH faster.
-
-    NSAssert(![self isOnGlobalLoggingQueue], @"Core architecture requirement failure");
-    NSAssert(![self isOnInternalLoggerQueue], @"MUST access ivar directly, NOT via self.* syntax.");
-
-    dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
-
-    dispatch_async(globalLoggingQueue, ^{
-        dispatch_async(self.loggerQueue, block);
-    });
-}
-
-- (NSTimeInterval)rollingFrequency {
-    __block NSTimeInterval result;
-
-    dispatch_block_t block = ^{
-        result = self->_rollingFrequency;
-    };
-
-    // The design of this method is taken from the DDAbstractLogger implementation.
-    // For extensive documentation please refer to the DDAbstractLogger implementation.
-
-    // Note: The internal implementation should access the rollingFrequency variable directly,
-    // This method is designed explicitly for external access.
-    //
-    // Using "self." syntax to go through this method will cause immediate deadlock.
-    // This is the intended result. Fix it by accessing the ivar directly.
-    // Great strides have been take to ensure this is safe to do. Plus it's MUCH faster.
-
-    NSAssert(![self isOnGlobalLoggingQueue], @"Core architecture requirement failure");
-    NSAssert(![self isOnInternalLoggerQueue], @"MUST access ivar directly, NOT via self.* syntax.");
-
-    dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
-
-    dispatch_sync(globalLoggingQueue, ^{
-        dispatch_sync(self.loggerQueue, block);
-    });
-
-    return result;
-}
-
-- (void)setRollingFrequency:(NSTimeInterval)newRollingFrequency {
-    dispatch_block_t block = ^{
-        @autoreleasepool {
-            self->_rollingFrequency = newRollingFrequency;
-            [self lt_maybeRollLogFileDueToAge];
-        }
-    };
-
-    // The design of this method is taken from the DDAbstractLogger implementation.
-    // For extensive documentation please refer to the DDAbstractLogger implementation.
-
-    // Note: The internal implementation should access the rollingFrequency variable directly,
-    // This method is designed explicitly for external access.
-    //
-    // Using "self." syntax to go through this method will cause immediate deadlock.
-    // This is the intended result. Fix it by accessing the ivar directly.
-    // Great strides have been take to ensure this is safe to do. Plus it's MUCH faster.
-
-    NSAssert(![self isOnGlobalLoggingQueue], @"Core architecture requirement failure");
-    NSAssert(![self isOnInternalLoggerQueue], @"MUST access ivar directly, NOT via self.* syntax.");
-
-    dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
-
-    dispatch_async(globalLoggingQueue, ^{
-        dispatch_async(self.loggerQueue, block);
-    });
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark File Rolling
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-- (void)lt_scheduleTimerToRollLogFileDueToAge {
-    NSAssert([self isOnInternalLoggerQueue], @"lt_ methods should be on logger queue.");
-
-    if (_rollingTimer) {
-        dispatch_source_cancel(_rollingTimer);
-        _rollingTimer = NULL;
-    }
-
-    if (_currentLogFileInfo == nil || _rollingFrequency <= 0.0) {
-        return;
-    }
-
-    NSDate *logFileCreationDate = [_currentLogFileInfo creationDate];
-    NSTimeInterval frequency = MIN(_rollingFrequency, DBL_MAX - [logFileCreationDate timeIntervalSinceReferenceDate]);
-    NSDate *logFileRollingDate = [logFileCreationDate dateByAddingTimeInterval:frequency];
-
-    NSLogVerbose(@"DDFileLogger: scheduleTimerToRollLogFileDueToAge");
-    NSLogVerbose(@"DDFileLogger: logFileCreationDate    : %@", logFileCreationDate);
-    NSLogVerbose(@"DDFileLogger: actual rollingFrequency: %f", frequency);
-    NSLogVerbose(@"DDFileLogger: logFileRollingDate     : %@", logFileRollingDate);
-
-    _rollingTimer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, _loggerQueue);
-
-    __weak __auto_type weakSelf = self;
-    dispatch_source_set_event_handler(_rollingTimer, ^{ @autoreleasepool {
-        [weakSelf lt_maybeRollLogFileDueToAge];
-    } });
-
-    #if !OS_OBJECT_USE_OBJC
-    dispatch_source_t theRollingTimer = _rollingTimer;
-    dispatch_source_set_cancel_handler(_rollingTimer, ^{
-        dispatch_release(theRollingTimer);
-    });
-    #endif
-
-    static NSTimeInterval const kDDMaxTimerDelay = LLONG_MAX / NSEC_PER_SEC;
-    int64_t delay = (int64_t)(MIN([logFileRollingDate timeIntervalSinceNow], kDDMaxTimerDelay) * (NSTimeInterval) NSEC_PER_SEC);
-    dispatch_time_t fireTime = dispatch_time(DISPATCH_TIME_NOW, delay);
-
-    dispatch_source_set_timer(_rollingTimer, fireTime, DISPATCH_TIME_FOREVER, 1ull * NSEC_PER_SEC);
-    dispatch_resume(_rollingTimer);
-}
-
-- (void)rollLogFile {
-    [self rollLogFileWithCompletionBlock:nil];
-}
-
-- (void)rollLogFileWithCompletionBlock:(void (^ __nullable)(void))completionBlock {
-    // This method is public.
-    // We need to execute the rolling on our logging thread/queue.
-
-    dispatch_block_t block = ^{
-        @autoreleasepool {
-            [self lt_rollLogFileNow];
-
-            if (completionBlock) {
-                dispatch_async(self->_completionQueue, ^{
-                    completionBlock();
-                });
-            }
-        }
-    };
-
-    // The design of this method is taken from the DDAbstractLogger implementation.
-    // For extensive documentation please refer to the DDAbstractLogger implementation.
-
-    if ([self isOnInternalLoggerQueue]) {
-        block();
-    } else {
-        dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
-        NSAssert(![self isOnGlobalLoggingQueue], @"Core architecture requirement failure");
-
-        dispatch_async(globalLoggingQueue, ^{
-            dispatch_async(self.loggerQueue, block);
-        });
-    }
-}
-
-- (void)lt_rollLogFileNow {
-    NSAssert([self isOnInternalLoggerQueue], @"lt_ methods should be on logger queue.");
-    NSLogVerbose(@"DDFileLogger: rollLogFileNow");
-
-    if (_currentLogFileHandle == nil) {
-        return;
-    }
-
-    [_currentLogFileHandle synchronizeFile];
-    [_currentLogFileHandle closeFile];
-    _currentLogFileHandle = nil;
-
-    _currentLogFileInfo.isArchived = YES;
-    NSString *archivedFilePath = [_currentLogFileInfo.filePath copy];
-    _currentLogFileInfo = nil;
-
-    if ([_logFileManager respondsToSelector:@selector(didRollAndArchiveLogFile:)]) {
-        dispatch_async(_completionQueue, ^{
-            [self->_logFileManager didRollAndArchiveLogFile:archivedFilePath];
-        });
-    }
-
-    if (_currentLogFileVnode) {
-        dispatch_source_cancel(_currentLogFileVnode);
-        _currentLogFileVnode = nil;
-    }
-
-    if (_rollingTimer) {
-        dispatch_source_cancel(_rollingTimer);
-        _rollingTimer = nil;
-    }
-}
-
-- (void)lt_maybeRollLogFileDueToAge {
-    NSAssert([self isOnInternalLoggerQueue], @"lt_ methods should be on logger queue.");
-
-    if (_rollingFrequency > 0.0 && _currentLogFileInfo.age >= _rollingFrequency) {
-        NSLogVerbose(@"DDFileLogger: Rolling log file due to age...");
-        [self lt_rollLogFileNow];
-    } else {
-        [self lt_scheduleTimerToRollLogFileDueToAge];
-    }
-}
-
-- (void)lt_maybeRollLogFileDueToSize {
-    NSAssert([self isOnInternalLoggerQueue], @"lt_ methods should be on logger queue.");
-
-    // This method is called from logMessage.
-    // Keep it FAST.
-
-    // Note: Use direct access to maximumFileSize variable.
-    // We specifically wrote our own getter/setter method to allow us to do this (for performance reasons).
-
-    if (_maximumFileSize > 0) {
-        unsigned long long fileSize = [_currentLogFileHandle offsetInFile];
-
-        if (fileSize >= _maximumFileSize) {
-            NSLogVerbose(@"DDFileLogger: Rolling log file due to size (%qu)...", fileSize);
-
-            [self lt_rollLogFileNow];
-        }
-    }
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark File Logging
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-- (BOOL)lt_shouldLogFileBeArchived:(DDLogFileInfo *)mostRecentLogFileInfo {
-    NSAssert([self isOnInternalLoggerQueue], @"lt_ methods should be on logger queue.");
-
-    if (mostRecentLogFileInfo.isArchived) {
-        return NO;
-    } else if ([self shouldArchiveRecentLogFileInfo:mostRecentLogFileInfo]) {
-        return YES;
-    } else if (_maximumFileSize > 0 && mostRecentLogFileInfo.fileSize >= _maximumFileSize) {
-        return YES;
-    } else if (_rollingFrequency > 0.0 && mostRecentLogFileInfo.age >= _rollingFrequency) {
-        return YES;
-    }
-
-#if TARGET_OS_IPHONE
-    // When creating log file on iOS we're setting NSFileProtectionKey attribute to NSFileProtectionCompleteUnlessOpen.
-    //
-    // But in case if app is able to launch from background we need to have an ability to open log file any time we
-    // want (even if device is locked). Thats why that attribute have to be changed to
-    // NSFileProtectionCompleteUntilFirstUserAuthentication.
-    //
-    // If previous log was created when app wasn't running in background, but now it is - we archive it and create
-    // a new one.
-    //
-    // If user has overwritten to NSFileProtectionNone there is no neeed to create a new one.
-    if (doesAppRunInBackground()) {
-        NSFileProtectionType key = mostRecentLogFileInfo.fileAttributes[NSFileProtectionKey];
-        BOOL isUntilFirstAuth = [key isEqualToString:NSFileProtectionCompleteUntilFirstUserAuthentication];
-        BOOL isNone = [key isEqualToString:NSFileProtectionNone];
-
-        if (!isUntilFirstAuth && !isNone) {
-            return YES;
-        }
-    }
-#endif
-
-    return NO;
-}
-
-/**
- * Returns the log file that should be used.
- * If there is an existing log file that is suitable, within the
- * constraints of maximumFileSize and rollingFrequency, then it is returned.
- *
- * Otherwise a new file is created and returned.
- **/
-- (DDLogFileInfo *)currentLogFileInfo {
-    // The design of this method is taken from the DDAbstractLogger implementation.
-    // For extensive documentation please refer to the DDAbstractLogger implementation.
-    // Do not access this method on any Lumberjack queue, will deadlock.
-
-    NSAssert(![self isOnGlobalLoggingQueue], @"Core architecture requirement failure");
-    NSAssert(![self isOnInternalLoggerQueue], @"MUST access ivar directly, NOT via self.* syntax.");
-
-    __block DDLogFileInfo *info = nil;
-    dispatch_block_t block = ^{
-        info = [self lt_currentLogFileInfo];
-    };
-
-    dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
-
-    dispatch_sync(globalLoggingQueue, ^{
-        dispatch_sync(self->_loggerQueue, block);
-    });
-
-    return info;
-}
-
-- (DDLogFileInfo *)lt_currentLogFileInfo {
-    NSAssert([self isOnInternalLoggerQueue], @"lt_ methods should be on logger queue.");
-
-    // Get the current log file info ivar (might be nil).
-    DDLogFileInfo *newCurrentLogFile = _currentLogFileInfo;
-
-    // Check if we're resuming and if so, get the first of the sorted log file infos.
-    BOOL isResuming = newCurrentLogFile == nil;
-    if (isResuming) {
-        NSArray *sortedLogFileInfos = [_logFileManager sortedLogFileInfos];
-        newCurrentLogFile = sortedLogFileInfos.firstObject;
-    }
-
-    // Check if the file we've found is still valid. Otherwise create a new one.
-    if (newCurrentLogFile != nil && [self lt_shouldUseLogFile:newCurrentLogFile isResuming:isResuming]) {
-        if (isResuming) {
-            NSLogVerbose(@"DDFileLogger: Resuming logging with file %@", newCurrentLogFile.fileName);
-        }
-        _currentLogFileInfo = newCurrentLogFile;
-    } else {
-        NSString *currentLogFilePath = [_logFileManager createNewLogFile];
-        _currentLogFileInfo = [[DDLogFileInfo alloc] initWithFilePath:currentLogFilePath];
-    }
-
-    return _currentLogFileInfo;
-}
-
-- (BOOL)lt_shouldUseLogFile:(nonnull DDLogFileInfo *)logFileInfo isResuming:(BOOL)isResuming {
-    NSAssert([self isOnInternalLoggerQueue], @"lt_ methods should be on logger queue.");
-    NSParameterAssert(logFileInfo);
-
-    // Check if the log file is archived. We must not use archived log files.
-    if (logFileInfo.isArchived) {
-        return NO;
-    }
-
-    // If we're resuming, we need to check if the log file is allowed for reuse or needs to be archived.
-    if (isResuming && (_doNotReuseLogFiles || [self lt_shouldLogFileBeArchived:logFileInfo])) {
-        logFileInfo.isArchived = YES;
-        NSString *archivedLogFilePath = [logFileInfo.fileName copy];
-
-        if ([_logFileManager respondsToSelector:@selector(didArchiveLogFile:)]) {
-            dispatch_async(_completionQueue, ^{
-                [self->_logFileManager didArchiveLogFile:archivedLogFilePath];
-            });
-        }
-
-        return NO;
-    }
-
-    // All checks have passed. It's valid.
-    return YES;
-}
-
-- (void)lt_monitorCurrentLogFileForExternalChanges {
-    NSAssert([self isOnInternalLoggerQueue], @"lt_ methods should be on logger queue.");
-    NSAssert(_currentLogFileHandle, @"Can not monitor without handle.");
-
-    dispatch_source_vnode_flags_t flags = DISPATCH_VNODE_DELETE | DISPATCH_VNODE_RENAME | DISPATCH_VNODE_REVOKE;
-    _currentLogFileVnode = dispatch_source_create(DISPATCH_SOURCE_TYPE_VNODE,
-                                                        (uintptr_t)[_currentLogFileHandle fileDescriptor],
-                                                        flags,
-                                                        _loggerQueue);
-
-    __weak __auto_type weakSelf = self;
-    dispatch_source_set_event_handler(_currentLogFileVnode, ^{ @autoreleasepool {
-        NSLogInfo(@"DDFileLogger: Current logfile was moved. Rolling it and creating a new one");
-        [weakSelf lt_rollLogFileNow];
-    } });
-
-#if !OS_OBJECT_USE_OBJC
-    dispatch_source_t vnode = _currentLogFileVnode;
-    dispatch_source_set_cancel_handler(_currentLogFileVnode, ^{
-        dispatch_release(vnode);
-    });
-#endif
-
-    dispatch_resume(_currentLogFileVnode);
-}
-
-- (NSFileHandle *)lt_currentLogFileHandle {
-    NSAssert([self isOnInternalLoggerQueue], @"lt_ methods should be on logger queue.");
-
-    if (!_currentLogFileHandle) {
-        NSString *logFilePath = [[self lt_currentLogFileInfo] filePath];
-        _currentLogFileHandle = [NSFileHandle fileHandleForWritingAtPath:logFilePath];
-        [_currentLogFileHandle seekToEndOfFile];
-
-        if (_currentLogFileHandle) {
-            [self lt_scheduleTimerToRollLogFileDueToAge];
-            [self lt_monitorCurrentLogFileForExternalChanges];
-        }
-    }
-
-    return _currentLogFileHandle;
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark DDLogger Protocol
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-static int exception_count = 0;
-
-- (void)logMessage:(DDLogMessage *)logMessage {
-    NSAssert([self isOnInternalLoggerQueue], @"logMessage should only be executed on internal queue.");
-
-    NSString *message = logMessage->_message;
-    BOOL isFormatted = NO;
-
-    if (_logFormatter != nil) {
-        message = [_logFormatter formatLogMessage:logMessage];
-        isFormatted = message != logMessage->_message;
-    }
-
-    if (message.length == 0) {
-        return;
-    }
-
-    BOOL shouldFormat = !isFormatted || _automaticallyAppendNewlineForCustomFormatters;
-    if (shouldFormat && ![message hasSuffix:@"\n"]) {
-        message = [message stringByAppendingString:@"\n"];
-    }
-
-    [self lt_logData:[message dataUsingEncoding:NSUTF8StringEncoding]];
-}
-
-- (void)willLogMessage {
-
-}
-
-- (void)didLogMessage {
-    [self lt_maybeRollLogFileDueToSize];
-}
-
-- (BOOL)shouldArchiveRecentLogFileInfo:(__unused DDLogFileInfo *)recentLogFileInfo {
-    return NO;
-}
-
-- (void)willRemoveLogger {
-    [self lt_rollLogFileNow];
-}
-
-- (void)flush {
-    // This method is public.
-    // We need to execute the rolling on our logging thread/queue.
-
-    dispatch_block_t block = ^{
-        @autoreleasepool {
-            [self lt_flush];
-        }
-    };
-
-    // The design of this method is taken from the DDAbstractLogger implementation.
-    // For extensive documentation please refer to the DDAbstractLogger implementation.
-
-    if ([self isOnInternalLoggerQueue]) {
-        block();
-    } else {
-        dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
-        NSAssert(![self isOnGlobalLoggingQueue], @"Core architecture requirement failure");
-
-        dispatch_sync(globalLoggingQueue, ^{
-            dispatch_sync(self.loggerQueue, block);
-        });
-    }
-}
-
-- (void)lt_flush {
-    NSAssert([self isOnInternalLoggerQueue], @"flush should only be executed on internal queue.");
-    [_currentLogFileHandle synchronizeFile];
-}
-
-- (DDLoggerName)loggerName {
-    return DDLoggerNameFile;
-}
-
-@end
-
-@implementation DDFileLogger (Internal)
-
-- (void)logData:(NSData *)data {
-    // This method is public.
-    // We need to execute the rolling on our logging thread/queue.
-
-    dispatch_block_t block = ^{
-        @autoreleasepool {
-            [self lt_logData:data];
-        }
-    };
-
-    // The design of this method is taken from the DDAbstractLogger implementation.
-    // For extensive documentation please refer to the DDAbstractLogger implementation.
-
-    if ([self isOnInternalLoggerQueue]) {
-        block();
-    } else {
-        dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
-        NSAssert(![self isOnGlobalLoggingQueue], @"Core architecture requirement failure");
-
-        dispatch_sync(globalLoggingQueue, ^{
-            dispatch_sync(self.loggerQueue, block);
-        });
-    }
-}
-
-- (void)lt_logData:(NSData *)data {
-    NSAssert([self isOnInternalLoggerQueue], @"logMessage should only be executed on internal queue.");
-
-    if (data.length == 0) {
-        return;
-    }
-
-    @try {
-        [self willLogMessage];
-
-        NSFileHandle *handle = [self lt_currentLogFileHandle];
-        [handle seekToEndOfFile];
-        [handle writeData:data];
-
-        [self didLogMessage];
-    } @catch (NSException *exception) {
-        exception_count++;
-
-        if (exception_count <= 10) {
-            NSLogError(@"DDFileLogger.logMessage: %@", exception);
-
-            if (exception_count == 10) {
-                NSLogError(@"DDFileLogger.logMessage: Too many exceptions -- will not log any more of them.");
-            }
-        }
-    }
-}
-
-- (NSData *)lt_dataForMessage:(DDLogMessage *)logMessage {
-    NSAssert([self isOnInternalLoggerQueue], @"logMessage should only be executed on internal queue.");
-
-    NSString *message = logMessage->_message;
-    BOOL isFormatted = NO;
-
-    if (_logFormatter != nil) {
-        message = [_logFormatter formatLogMessage:logMessage];
-        isFormatted = message != logMessage->_message;
-    }
-
-    if (message.length == 0) {
-        return [NSData new];
-    }
-
-    BOOL shouldFormat = !isFormatted || _automaticallyAppendNewlineForCustomFormatters;
-    if (shouldFormat && ![message hasSuffix:@"\n"]) {
-        message = [message stringByAppendingString:@"\n"];
-    }
-
-    return [message dataUsingEncoding:NSUTF8StringEncoding];
-}
-
-@end
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark -
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-#if TARGET_IPHONE_SIMULATOR
-    static NSString * const kDDXAttrArchivedName = @"archived";
-#else
-    static NSString * const kDDXAttrArchivedName = @"lumberjack.log.archived";
-#endif
-
-@interface DDLogFileInfo () {
-    __strong NSString *_filePath;
-    __strong NSString *_fileName;
-
-    __strong NSDictionary *_fileAttributes;
-
-    __strong NSDate *_creationDate;
-    __strong NSDate *_modificationDate;
-
-    unsigned long long _fileSize;
-}
-
-@end
-
-
-@implementation DDLogFileInfo
-
-@synthesize filePath;
-
-@dynamic fileName;
-@dynamic fileAttributes;
-@dynamic creationDate;
-@dynamic modificationDate;
-@dynamic fileSize;
-@dynamic age;
-
-@dynamic isArchived;
-
-
-#pragma mark Lifecycle
-
-+ (instancetype)logFileWithPath:(NSString *)aFilePath {
-    return [[self alloc] initWithFilePath:aFilePath];
-}
-
-- (instancetype)initWithFilePath:(NSString *)aFilePath {
-    if ((self = [super init])) {
-        filePath = [aFilePath copy];
-    }
-
-    return self;
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark Standard Info
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-- (NSDictionary *)fileAttributes {
-    if (_fileAttributes == nil && filePath != nil) {
-        NSError *error = nil;
-        _fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:&error];
-
-        if (error) {
-            NSLogError(@"DDLogFileInfo: Failed to read file attributes: %@", error);
-        }
-    }
-
-    return _fileAttributes ?: @{};
-}
-
-- (NSString *)fileName {
-    if (_fileName == nil) {
-        _fileName = [filePath lastPathComponent];
-    }
-
-    return _fileName;
-}
-
-- (NSDate *)modificationDate {
-    if (_modificationDate == nil) {
-        _modificationDate = self.fileAttributes[NSFileModificationDate];
-    }
-
-    return _modificationDate;
-}
-
-- (NSDate *)creationDate {
-    if (_creationDate == nil) {
-        _creationDate = self.fileAttributes[NSFileCreationDate];
-    }
-
-    return _creationDate;
-}
-
-- (unsigned long long)fileSize {
-    if (_fileSize == 0) {
-        _fileSize = [self.fileAttributes[NSFileSize] unsignedLongLongValue];
-    }
-
-    return _fileSize;
-}
-
-- (NSTimeInterval)age {
-    return -[[self creationDate] timeIntervalSinceNow];
-}
-
-- (NSString *)description {
-    return [@{ @"filePath": self.filePath ? : @"",
-               @"fileName": self.fileName ? : @"",
-               @"fileAttributes": self.fileAttributes ? : @"",
-               @"creationDate": self.creationDate ? : @"",
-               @"modificationDate": self.modificationDate ? : @"",
-               @"fileSize": @(self.fileSize),
-               @"age": @(self.age),
-               @"isArchived": @(self.isArchived) } description];
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark Archiving
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-- (BOOL)isArchived {
-#if TARGET_IPHONE_SIMULATOR
-
-    // Extended attributes don't work properly on the simulator.
-    // So we have to use a less attractive alternative.
-    // See full explanation in the header file.
-
-    return [self hasExtensionAttributeWithName:kDDXAttrArchivedName];
-
-#else
-
-    return [self hasExtendedAttributeWithName:kDDXAttrArchivedName];
-
-#endif
-}
-
-- (void)setIsArchived:(BOOL)flag {
-#if TARGET_IPHONE_SIMULATOR
-
-    // Extended attributes don't work properly on the simulator.
-    // So we have to use a less attractive alternative.
-    // See full explanation in the header file.
-
-    if (flag) {
-        [self addExtensionAttributeWithName:kDDXAttrArchivedName];
-    } else {
-        [self removeExtensionAttributeWithName:kDDXAttrArchivedName];
-    }
-
-#else
-
-    if (flag) {
-        [self addExtendedAttributeWithName:kDDXAttrArchivedName];
-    } else {
-        [self removeExtendedAttributeWithName:kDDXAttrArchivedName];
-    }
-
-#endif
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark Changes
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-- (void)reset {
-    _fileName = nil;
-    _fileAttributes = nil;
-    _creationDate = nil;
-    _modificationDate = nil;
-}
-
-- (void)renameFile:(NSString *)newFileName {
-    // This method is only used on the iPhone simulator, where normal extended attributes are broken.
-    // See full explanation in the header file.
-
-    if (![newFileName isEqualToString:[self fileName]]) {
-        NSString *fileDir = [filePath stringByDeletingLastPathComponent];
-        NSString *newFilePath = [fileDir stringByAppendingPathComponent:newFileName];
-
-#ifdef DEBUG
-        BOOL directory = NO;
-        [[NSFileManager defaultManager] fileExistsAtPath:fileDir isDirectory:&directory];
-        NSAssert(directory, @"Containing directory must exist.");
-#endif
-
-        NSError *error = nil;
-
-        BOOL success = [[NSFileManager defaultManager] removeItemAtPath:newFilePath error:&error];
-        if (!success && error.code != NSFileNoSuchFileError) {
-            NSLogError(@"DDLogFileInfo: Error deleting archive (%@): %@", self.fileName, error);
-        }
-
-        success = [[NSFileManager defaultManager] moveItemAtPath:filePath toPath:newFilePath error:&error];
-
-            // When a log file is deleted, moved or renamed on the simulator, we attempt to rename it as a
-            // result of "archiving" it, but since the file doesn't exist anymore, needless error logs are printed
-            // We therefore ignore this error, and assert that the directory we are copying into exists (which
-            // is the only other case where this error code can come up).
-#if TARGET_IPHONE_SIMULATOR
-        if (!success && error.code != NSFileNoSuchFileError) {
-#else
-        if (!success) {
-#endif
-            NSLogError(@"DDLogFileInfo: Error renaming file (%@): %@", self.fileName, error);
-        }
-
-        filePath = newFilePath;
-        [self reset];
-    }
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark Attribute Management
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-#if TARGET_IPHONE_SIMULATOR
-
-// Extended attributes don't work properly on the simulator.
-// So we have to use a less attractive alternative.
-// See full explanation in the header file.
-
-- (BOOL)hasExtensionAttributeWithName:(NSString *)attrName {
-    // This method is only used on the iPhone simulator, where normal extended attributes are broken.
-    // See full explanation in the header file.
-
-    // Split the file name into components. File name may have various format, but generally
-    // structure is same:
-    //
-    // <name part>.<extension part> and <name part>.archived.<extension part>
-    // or
-    // <name part> and <name part>.archived
-    //
-    // So we want to search for the attrName in the components (ignoring the first array index).
-
-    NSArray *components = [[self fileName] componentsSeparatedByString:@"."];
-
-    // Watch out for file names without an extension
-
-    for (NSUInteger i = 1; i < components.count; i++) {
-        NSString *attr = components[i];
-
-        if ([attrName isEqualToString:attr]) {
-            return YES;
-        }
-    }
-
-    return NO;
-}
-
-- (void)addExtensionAttributeWithName:(NSString *)attrName {
-    // This method is only used on the iPhone simulator, where normal extended attributes are broken.
-    // See full explanation in the header file.
-
-    if ([attrName length] == 0) {
-        return;
-    }
-
-    // Example:
-    // attrName = "archived"
-    //
-    // "mylog.txt" -> "mylog.archived.txt"
-    // "mylog"     -> "mylog.archived"
-
-    NSArray *components = [[self fileName] componentsSeparatedByString:@"."];
-
-    NSUInteger count = [components count];
-
-    NSUInteger estimatedNewLength = [[self fileName] length] + [attrName length] + 1;
-    NSMutableString *newFileName = [NSMutableString stringWithCapacity:estimatedNewLength];
-
-    if (count > 0) {
-        [newFileName appendString:components.firstObject];
-    }
-
-    NSString *lastExt = @"";
-
-    NSUInteger i;
-
-    for (i = 1; i < count; i++) {
-        NSString *attr = components[i];
-
-        if ([attr length] == 0) {
-            continue;
-        }
-
-        if ([attrName isEqualToString:attr]) {
-            // Extension attribute already exists in file name
-            return;
-        }
-
-        if ([lastExt length] > 0) {
-            [newFileName appendFormat:@".%@", lastExt];
-        }
-
-        lastExt = attr;
-    }
-
-    [newFileName appendFormat:@".%@", attrName];
-
-    if ([lastExt length] > 0) {
-        [newFileName appendFormat:@".%@", lastExt];
-    }
-
-    [self renameFile:newFileName];
-}
-
-- (void)removeExtensionAttributeWithName:(NSString *)attrName {
-    // This method is only used on the iPhone simulator, where normal extended attributes are broken.
-    // See full explanation in the header file.
-
-    if ([attrName length] == 0) {
-        return;
-    }
-
-    // Example:
-    // attrName = "archived"
-    //
-    // "mylog.archived.txt" -> "mylog.txt"
-    // "mylog.archived"     -> "mylog"
-
-    NSArray *components = [[self fileName] componentsSeparatedByString:@"."];
-
-    NSUInteger count = [components count];
-
-    NSUInteger estimatedNewLength = [[self fileName] length];
-    NSMutableString *newFileName = [NSMutableString stringWithCapacity:estimatedNewLength];
-
-    if (count > 0) {
-        [newFileName appendString:components.firstObject];
-    }
-
-    BOOL found = NO;
-
-    NSUInteger i;
-
-    for (i = 1; i < count; i++) {
-        NSString *attr = components[i];
-
-        if ([attrName isEqualToString:attr]) {
-            found = YES;
-        } else {
-            [newFileName appendFormat:@".%@", attr];
-        }
-    }
-
-    if (found) {
-        [self renameFile:newFileName];
-    }
-}
-
-#else /* if TARGET_IPHONE_SIMULATOR */
-
-- (BOOL)hasExtendedAttributeWithName:(NSString *)attrName {
-    const char *path = [filePath UTF8String];
-    const char *name = [attrName UTF8String];
-
-    ssize_t result = getxattr(path, name, NULL, 0, 0, 0);
-
-    return (result >= 0);
-}
-
-- (void)addExtendedAttributeWithName:(NSString *)attrName {
-    const char *path = [filePath UTF8String];
-    const char *name = [attrName UTF8String];
-
-    int result = setxattr(path, name, NULL, 0, 0, 0);
-
-    if (result < 0) {
-        NSLogError(@"DDLogFileInfo: setxattr(%@, %@): error = %s",
-                   attrName,
-                   filePath,
-                   strerror(errno));
-    }
-}
-
-- (void)removeExtendedAttributeWithName:(NSString *)attrName {
-    const char *path = [filePath UTF8String];
-    const char *name = [attrName UTF8String];
-
-    int result = removexattr(path, name, 0);
-
-    if (result < 0 && errno != ENOATTR) {
-        NSLogError(@"DDLogFileInfo: removexattr(%@, %@): error = %s",
-                   attrName,
-                   self.fileName,
-                   strerror(errno));
-    }
-}
-
-#endif /* if TARGET_IPHONE_SIMULATOR */
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark Comparisons
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-- (BOOL)isEqual:(id)object {
-    if ([object isKindOfClass:[self class]]) {
-        DDLogFileInfo *another = (DDLogFileInfo *)object;
-
-        return [filePath isEqualToString:[another filePath]];
-    }
-
-    return NO;
-}
-
-- (NSUInteger)hash {
-    return [filePath hash];
-}
-
-- (NSComparisonResult)reverseCompareByCreationDate:(DDLogFileInfo *)another {
-    __auto_type us = [self creationDate];
-    __auto_type them = [another creationDate];
-    return [them compare:us];
-}
-
-- (NSComparisonResult)reverseCompareByModificationDate:(DDLogFileInfo *)another {
-    __auto_type us = [self modificationDate];
-    __auto_type them = [another modificationDate];
-    return [them compare:us];
-}
-
-@end
-
-#if TARGET_OS_IPHONE
-/**
- * When creating log file on iOS we're setting NSFileProtectionKey attribute to NSFileProtectionCompleteUnlessOpen.
- *
- * But in case if app is able to launch from background we need to have an ability to open log file any time we
- * want (even if device is locked). Thats why that attribute have to be changed to
- * NSFileProtectionCompleteUntilFirstUserAuthentication.
- */
-BOOL doesAppRunInBackground() {
-    BOOL answer = NO;
-
-    NSArray *backgroundModes = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"UIBackgroundModes"];
-
-    for (NSString *mode in backgroundModes) {
-        if (mode.length > 0) {
-            answer = YES;
-            break;
-        }
-    }
-
-    return answer;
-}
-
-#endif

+ 0 - 75
Carthage/Checkouts/CocoaLumberjack/Classes/DDLegacyMacros.h

@@ -1,75 +0,0 @@
-// Software License Agreement (BSD License)
-//
-// Copyright (c) 2010-2019, Deusty, LLC
-// All rights reserved.
-//
-// Redistribution and use of this software in source and binary forms,
-// with or without modification, are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above copyright notice,
-//   this list of conditions and the following disclaimer.
-//
-// * Neither the name of Deusty nor the names of its contributors may be used
-//   to endorse or promote products derived from this software without specific
-//   prior written permission of Deusty, LLC.
-
-/**
- * Legacy macros used for 1.9.x backwards compatibility.
- *
- * Imported by default when importing a DDLog.h directly and DD_LEGACY_MACROS is not defined and set to 0.
- **/
-#if DD_LEGACY_MACROS
-
-#warning CocoaLumberjack 1.9.x legacy macros enabled. \
-Disable legacy macros by importing CocoaLumberjack.h or DDLogMacros.h instead of DDLog.h or add `#define DD_LEGACY_MACROS 0` before importing DDLog.h.
-
-#ifndef LOG_LEVEL_DEF
-    #define LOG_LEVEL_DEF ddLogLevel
-#endif
-
-#define LOG_FLAG_ERROR    DDLogFlagError
-#define LOG_FLAG_WARN     DDLogFlagWarning
-#define LOG_FLAG_INFO     DDLogFlagInfo
-#define LOG_FLAG_DEBUG    DDLogFlagDebug
-#define LOG_FLAG_VERBOSE  DDLogFlagVerbose
-
-#define LOG_LEVEL_OFF     DDLogLevelOff
-#define LOG_LEVEL_ERROR   DDLogLevelError
-#define LOG_LEVEL_WARN    DDLogLevelWarning
-#define LOG_LEVEL_INFO    DDLogLevelInfo
-#define LOG_LEVEL_DEBUG   DDLogLevelDebug
-#define LOG_LEVEL_VERBOSE DDLogLevelVerbose
-#define LOG_LEVEL_ALL     DDLogLevelAll
-
-#define LOG_ASYNC_ENABLED YES
-
-#define LOG_ASYNC_ERROR    ( NO && LOG_ASYNC_ENABLED)
-#define LOG_ASYNC_WARN     (YES && LOG_ASYNC_ENABLED)
-#define LOG_ASYNC_INFO     (YES && LOG_ASYNC_ENABLED)
-#define LOG_ASYNC_DEBUG    (YES && LOG_ASYNC_ENABLED)
-#define LOG_ASYNC_VERBOSE  (YES && LOG_ASYNC_ENABLED)
-
-#define LOG_MACRO(isAsynchronous, lvl, flg, ctx, atag, fnct, frmt, ...) \
-        [DDLog log : isAsynchronous                                     \
-             level : lvl                                                \
-              flag : flg                                                \
-           context : ctx                                                \
-              file : __FILE__                                           \
-          function : fnct                                               \
-              line : __LINE__                                           \
-               tag : atag                                               \
-            format : (frmt), ## __VA_ARGS__]
-
-#define LOG_MAYBE(async, lvl, flg, ctx, fnct, frmt, ...)                       \
-        do { if(lvl & flg) LOG_MACRO(async, lvl, flg, ctx, nil, fnct, frmt, ##__VA_ARGS__); } while(0)
-
-#define LOG_OBJC_MAYBE(async, lvl, flg, ctx, frmt, ...) \
-        LOG_MAYBE(async, lvl, flg, ctx, __PRETTY_FUNCTION__, frmt, ## __VA_ARGS__)
-
-#define DDLogError(frmt, ...)   LOG_OBJC_MAYBE(LOG_ASYNC_ERROR,   LOG_LEVEL_DEF, LOG_FLAG_ERROR,   0, frmt, ##__VA_ARGS__)
-#define DDLogWarn(frmt, ...)    LOG_OBJC_MAYBE(LOG_ASYNC_WARN,    LOG_LEVEL_DEF, LOG_FLAG_WARN,    0, frmt, ##__VA_ARGS__)
-#define DDLogInfo(frmt, ...)    LOG_OBJC_MAYBE(LOG_ASYNC_INFO,    LOG_LEVEL_DEF, LOG_FLAG_INFO,    0, frmt, ##__VA_ARGS__)
-#define DDLogDebug(frmt, ...)   LOG_OBJC_MAYBE(LOG_ASYNC_DEBUG,   LOG_LEVEL_DEF, LOG_FLAG_DEBUG,   0, frmt, ##__VA_ARGS__)
-#define DDLogVerbose(frmt, ...) LOG_OBJC_MAYBE(LOG_ASYNC_VERBOSE, LOG_LEVEL_DEF, LOG_FLAG_VERBOSE, 0, frmt, ##__VA_ARGS__)
-
-#endif

+ 0 - 83
Carthage/Checkouts/CocoaLumberjack/Classes/DDLog+LOGV.h

@@ -1,83 +0,0 @@
-// Software License Agreement (BSD License)
-//
-// Copyright (c) 2010-2019, Deusty, LLC
-// All rights reserved.
-//
-// Redistribution and use of this software in source and binary forms,
-// with or without modification, are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above copyright notice,
-//   this list of conditions and the following disclaimer.
-//
-// * Neither the name of Deusty nor the names of its contributors may be used
-//   to endorse or promote products derived from this software without specific
-//   prior written permission of Deusty, LLC.
-
-// Disable legacy macros
-#ifndef DD_LEGACY_MACROS
-    #define DD_LEGACY_MACROS 0
-#endif
-
-#import <CocoaLumberjack/DDLog.h>
-
-/**
- * The constant/variable/method responsible for controlling the current log level.
- **/
-#ifndef LOG_LEVEL_DEF
-    #define LOG_LEVEL_DEF ddLogLevel
-#endif
-
-/**
- * Whether async should be used by log messages, excluding error messages that are always sent sync.
- **/
-#ifndef LOG_ASYNC_ENABLED
-    #define LOG_ASYNC_ENABLED YES
-#endif
-
-/**
- * This is the single macro that all other macros below compile into.
- * This big multiline macro makes all the other macros easier to read.
- **/
-#define LOGV_MACRO(isAsynchronous, lvl, flg, ctx, atag, fnct, frmt, avalist) \
-        [DDLog log : isAsynchronous                                          \
-             level : lvl                                                     \
-              flag : flg                                                     \
-           context : ctx                                                     \
-              file : __FILE__                                                \
-          function : fnct                                                    \
-              line : __LINE__                                                \
-               tag : atag                                                    \
-            format : frmt                                                    \
-              args : avalist]
-
-/**
- * Define version of the macro that only execute if the log level is above the threshold.
- * The compiled versions essentially look like this:
- *
- * if (logFlagForThisLogMsg & ddLogLevel) { execute log message }
- *
- * When LOG_LEVEL_DEF is defined as ddLogLevel.
- *
- * As shown further below, Lumberjack actually uses a bitmask as opposed to primitive log levels.
- * This allows for a great amount of flexibility and some pretty advanced fine grained logging techniques.
- *
- * Note that when compiler optimizations are enabled (as they are for your release builds),
- * the log messages above your logging threshold will automatically be compiled out.
- *
- * (If the compiler sees LOG_LEVEL_DEF/ddLogLevel declared as a constant, the compiler simply checks to see
- *  if the 'if' statement would execute, and if not it strips it from the binary.)
- *
- * We also define shorthand versions for asynchronous and synchronous logging.
- **/
-#define LOGV_MAYBE(async, lvl, flg, ctx, tag, fnct, frmt, avalist) \
-        do { if(lvl & flg) LOGV_MACRO(async, lvl, flg, ctx, tag, fnct, frmt, avalist); } while(0)
-
-/**
- * Ready to use log macros with no context or tag.
- **/
-#define DDLogVError(frmt, avalist)   LOGV_MAYBE(NO,                LOG_LEVEL_DEF, DDLogFlagError,   0, nil, __PRETTY_FUNCTION__, frmt, avalist)
-#define DDLogVWarn(frmt, avalist)    LOGV_MAYBE(LOG_ASYNC_ENABLED, LOG_LEVEL_DEF, DDLogFlagWarning, 0, nil, __PRETTY_FUNCTION__, frmt, avalist)
-#define DDLogVInfo(frmt, avalist)    LOGV_MAYBE(LOG_ASYNC_ENABLED, LOG_LEVEL_DEF, DDLogFlagInfo,    0, nil, __PRETTY_FUNCTION__, frmt, avalist)
-#define DDLogVDebug(frmt, avalist)   LOGV_MAYBE(LOG_ASYNC_ENABLED, LOG_LEVEL_DEF, DDLogFlagDebug,   0, nil, __PRETTY_FUNCTION__, frmt, avalist)
-#define DDLogVVerbose(frmt, avalist) LOGV_MAYBE(LOG_ASYNC_ENABLED, LOG_LEVEL_DEF, DDLogFlagVerbose, 0, nil, __PRETTY_FUNCTION__, frmt, avalist)
-

+ 0 - 912
Carthage/Checkouts/CocoaLumberjack/Classes/DDLog.h

@@ -1,912 +0,0 @@
-// Software License Agreement (BSD License)
-//
-// Copyright (c) 2010-2019, Deusty, LLC
-// All rights reserved.
-//
-// Redistribution and use of this software in source and binary forms,
-// with or without modification, are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above copyright notice,
-//   this list of conditions and the following disclaimer.
-//
-// * Neither the name of Deusty nor the names of its contributors may be used
-//   to endorse or promote products derived from this software without specific
-//   prior written permission of Deusty, LLC.
-
-#import <Foundation/Foundation.h>
-
-// Enable 1.9.x legacy macros if imported directly
-#ifndef DD_LEGACY_MACROS
-    #define DD_LEGACY_MACROS 1
-#endif
-// DD_LEGACY_MACROS is checked in the file itself
-#import <CocoaLumberjack/DDLegacyMacros.h>
-
-// Names of loggers.
-#import <CocoaLumberjack/DDLoggerNames.h>
-
-#if OS_OBJECT_USE_OBJC
-    #define DISPATCH_QUEUE_REFERENCE_TYPE strong
-#else
-    #define DISPATCH_QUEUE_REFERENCE_TYPE assign
-#endif
-
-@class DDLogMessage;
-@class DDLoggerInformation;
-@protocol DDLogger;
-@protocol DDLogFormatter;
-
-/**
- * Define the standard options.
- *
- * We default to only 4 levels because it makes it easier for beginners
- * to make the transition to a logging framework.
- *
- * More advanced users may choose to completely customize the levels (and level names) to suite their needs.
- * For more information on this see the "Custom Log Levels" page:
- * Documentation/CustomLogLevels.md
- *
- * Advanced users may also notice that we're using a bitmask.
- * This is to allow for custom fine grained logging:
- * Documentation/FineGrainedLogging.md
- *
- * -- Flags --
- *
- * Typically you will use the LOG_LEVELS (see below), but the flags may be used directly in certain situations.
- * For example, say you have a lot of warning log messages, and you wanted to disable them.
- * However, you still needed to see your error and info log messages.
- * You could accomplish that with the following:
- *
- * static const DDLogLevel ddLogLevel = DDLogFlagError | DDLogFlagInfo;
- *
- * When LOG_LEVEL_DEF is defined as ddLogLevel.
- *
- * Flags may also be consulted when writing custom log formatters,
- * as the DDLogMessage class captures the individual flag that caused the log message to fire.
- *
- * -- Levels --
- *
- * Log levels are simply the proper bitmask of the flags.
- *
- * -- Booleans --
- *
- * The booleans may be used when your logging code involves more than one line.
- * For example:
- *
- * if (LOG_VERBOSE) {
- *     for (id sprocket in sprockets)
- *         DDLogVerbose(@"sprocket: %@", [sprocket description])
- * }
- *
- * -- Async --
- *
- * Defines the default asynchronous options.
- * The default philosophy for asynchronous logging is very simple:
- *
- * Log messages with errors should be executed synchronously.
- *     After all, an error just occurred. The application could be unstable.
- *
- * All other log messages, such as debug output, are executed asynchronously.
- *     After all, if it wasn't an error, then it was just informational output,
- *     or something the application was easily able to recover from.
- *
- * -- Changes --
- *
- * You are strongly discouraged from modifying this file.
- * If you do, you make it more difficult on yourself to merge future bug fixes and improvements from the project.
- * Instead, create your own MyLogging.h or ApplicationNameLogging.h or CompanyLogging.h
- *
- * For an example of customizing your logging experience, see the "Custom Log Levels" page:
- * Documentation/CustomLogLevels.md
- **/
-
-/**
- *  Flags accompany each log. They are used together with levels to filter out logs.
- */
-typedef NS_OPTIONS(NSUInteger, DDLogFlag){
-    /**
-     *  0...00001 DDLogFlagError
-     */
-    DDLogFlagError      = (1 << 0),
-    
-    /**
-     *  0...00010 DDLogFlagWarning
-     */
-    DDLogFlagWarning    = (1 << 1),
-    
-    /**
-     *  0...00100 DDLogFlagInfo
-     */
-    DDLogFlagInfo       = (1 << 2),
-    
-    /**
-     *  0...01000 DDLogFlagDebug
-     */
-    DDLogFlagDebug      = (1 << 3),
-    
-    /**
-     *  0...10000 DDLogFlagVerbose
-     */
-    DDLogFlagVerbose    = (1 << 4)
-};
-
-/**
- *  Log levels are used to filter out logs. Used together with flags.
- */
-typedef NS_ENUM(NSUInteger, DDLogLevel){
-    /**
-     *  No logs
-     */
-    DDLogLevelOff       = 0,
-    
-    /**
-     *  Error logs only
-     */
-    DDLogLevelError     = (DDLogFlagError),
-    
-    /**
-     *  Error and warning logs
-     */
-    DDLogLevelWarning   = (DDLogLevelError   | DDLogFlagWarning),
-    
-    /**
-     *  Error, warning and info logs
-     */
-    DDLogLevelInfo      = (DDLogLevelWarning | DDLogFlagInfo),
-    
-    /**
-     *  Error, warning, info and debug logs
-     */
-    DDLogLevelDebug     = (DDLogLevelInfo    | DDLogFlagDebug),
-    
-    /**
-     *  Error, warning, info, debug and verbose logs
-     */
-    DDLogLevelVerbose   = (DDLogLevelDebug   | DDLogFlagVerbose),
-    
-    /**
-     *  All logs (1...11111)
-     */
-    DDLogLevelAll       = NSUIntegerMax
-};
-
-NS_ASSUME_NONNULL_BEGIN
-
-/**
- *  Extracts just the file name, no path or extension
- *
- *  @param filePath input file path
- *  @param copy     YES if we want the result to be copied
- *
- *  @return the file name
- */
-FOUNDATION_EXTERN NSString * __nullable DDExtractFileNameWithoutExtension(const char *filePath, BOOL copy);
-
-/**
- * The THIS_FILE macro gives you an NSString of the file name.
- * For simplicity and clarity, the file name does not include the full path or file extension.
- *
- * For example: DDLogWarn(@"%@: Unable to find thingy", THIS_FILE) -> @"MyViewController: Unable to find thingy"
- **/
-#define THIS_FILE         (DDExtractFileNameWithoutExtension(__FILE__, NO))
-
-/**
- * The THIS_METHOD macro gives you the name of the current objective-c method.
- *
- * For example: DDLogWarn(@"%@ - Requires non-nil strings", THIS_METHOD) -> @"setMake:model: requires non-nil strings"
- *
- * Note: This does NOT work in straight C functions (non objective-c).
- * Instead you should use the predefined __FUNCTION__ macro.
- **/
-#define THIS_METHOD       NSStringFromSelector(_cmd)
-
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark -
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-/**
- *  The main class, exposes all logging mechanisms, loggers, ...
- *  For most of the users, this class is hidden behind the logging functions like `DDLogInfo`
- */
-@interface DDLog : NSObject
-
-/**
- *  Returns the singleton `DDLog`.
- *  The instance is used by `DDLog` class methods.
- */
-@property (class, nonatomic, strong, readonly) DDLog *sharedInstance;
-
-/**
- * Provides access to the underlying logging queue.
- * This may be helpful to Logger classes for things like thread synchronization.
- **/
-@property (class, nonatomic, DISPATCH_QUEUE_REFERENCE_TYPE, readonly) dispatch_queue_t loggingQueue;
-
-/**
- * Logging Primitive.
- *
- * This method is used by the macros or logging functions.
- * It is suggested you stick with the macros as they're easier to use.
- *
- *  @param asynchronous YES if the logging is done async, NO if you want to force sync
- *  @param level        the log level
- *  @param flag         the log flag
- *  @param context      the context (if any is defined)
- *  @param file         the current file
- *  @param function     the current function
- *  @param line         the current code line
- *  @param tag          potential tag
- *  @param format       the log format
- */
-+ (void)log:(BOOL)asynchronous
-      level:(DDLogLevel)level
-       flag:(DDLogFlag)flag
-    context:(NSInteger)context
-       file:(const char *)file
-   function:(const char *)function
-       line:(NSUInteger)line
-        tag:(id __nullable)tag
-     format:(NSString *)format, ... NS_FORMAT_FUNCTION(9,10);
-
-/**
- * Logging Primitive.
- *
- * This method is used by the macros or logging functions.
- * It is suggested you stick with the macros as they're easier to use.
- *
- *  @param asynchronous YES if the logging is done async, NO if you want to force sync
- *  @param level        the log level
- *  @param flag         the log flag
- *  @param context      the context (if any is defined)
- *  @param file         the current file
- *  @param function     the current function
- *  @param line         the current code line
- *  @param tag          potential tag
- *  @param format       the log format
- */
-- (void)log:(BOOL)asynchronous
-      level:(DDLogLevel)level
-       flag:(DDLogFlag)flag
-    context:(NSInteger)context
-       file:(const char *)file
-   function:(const char *)function
-       line:(NSUInteger)line
-        tag:(id __nullable)tag
-     format:(NSString *)format, ... NS_FORMAT_FUNCTION(9,10);
-
-/**
- * Logging Primitive.
- *
- * This method can be used if you have a prepared va_list.
- * Similar to `log:level:flag:context:file:function:line:tag:format:...`
- *
- *  @param asynchronous YES if the logging is done async, NO if you want to force sync
- *  @param level        the log level
- *  @param flag         the log flag
- *  @param context      the context (if any is defined)
- *  @param file         the current file
- *  @param function     the current function
- *  @param line         the current code line
- *  @param tag          potential tag
- *  @param format       the log format
- *  @param argList      the arguments list as a va_list
- */
-+ (void)log:(BOOL)asynchronous
-      level:(DDLogLevel)level
-       flag:(DDLogFlag)flag
-    context:(NSInteger)context
-       file:(const char *)file
-   function:(const char *)function
-       line:(NSUInteger)line
-        tag:(id __nullable)tag
-     format:(NSString *)format
-       args:(va_list)argList NS_SWIFT_NAME(log(asynchronous:level:flag:context:file:function:line:tag:format:arguments:));
-
-/**
- * Logging Primitive.
- *
- * This method can be used if you have a prepared va_list.
- * Similar to `log:level:flag:context:file:function:line:tag:format:...`
- *
- *  @param asynchronous YES if the logging is done async, NO if you want to force sync
- *  @param level        the log level
- *  @param flag         the log flag
- *  @param context      the context (if any is defined)
- *  @param file         the current file
- *  @param function     the current function
- *  @param line         the current code line
- *  @param tag          potential tag
- *  @param format       the log format
- *  @param argList      the arguments list as a va_list
- */
-- (void)log:(BOOL)asynchronous
-      level:(DDLogLevel)level
-       flag:(DDLogFlag)flag
-    context:(NSInteger)context
-       file:(const char *)file
-   function:(const char *)function
-       line:(NSUInteger)line
-        tag:(id __nullable)tag
-     format:(NSString *)format
-       args:(va_list)argList NS_SWIFT_NAME(log(asynchronous:level:flag:context:file:function:line:tag:format:arguments:));
-
-/**
- * Logging Primitive.
- *
- * This method can be used if you manually prepared DDLogMessage.
- *
- *  @param asynchronous YES if the logging is done async, NO if you want to force sync
- *  @param logMessage   the log message stored in a `DDLogMessage` model object
- */
-+ (void)log:(BOOL)asynchronous
-    message:(DDLogMessage *)logMessage NS_SWIFT_NAME(log(asynchronous:message:));
-
-/**
- * Logging Primitive.
- *
- * This method can be used if you manually prepared DDLogMessage.
- *
- *  @param asynchronous YES if the logging is done async, NO if you want to force sync
- *  @param logMessage   the log message stored in a `DDLogMessage` model object
- */
-- (void)log:(BOOL)asynchronous
-    message:(DDLogMessage *)logMessage NS_SWIFT_NAME(log(asynchronous:message:));
-
-/**
- * Since logging can be asynchronous, there may be times when you want to flush the logs.
- * The framework invokes this automatically when the application quits.
- **/
-+ (void)flushLog;
-
-/**
- * Since logging can be asynchronous, there may be times when you want to flush the logs.
- * The framework invokes this automatically when the application quits.
- **/
-- (void)flushLog;
-
-/**
- * Loggers
- *
- * In order for your log statements to go somewhere, you should create and add a logger.
- *
- * You can add multiple loggers in order to direct your log statements to multiple places.
- * And each logger can be configured separately.
- * So you could have, for example, verbose logging to the console, but a concise log file with only warnings & errors.
- **/
-
-/**
- * Adds the logger to the system.
- *
- * This is equivalent to invoking `[DDLog addLogger:logger withLogLevel:DDLogLevelAll]`.
- **/
-+ (void)addLogger:(id <DDLogger>)logger;
-
-/**
- * Adds the logger to the system.
- *
- * This is equivalent to invoking `[DDLog addLogger:logger withLogLevel:DDLogLevelAll]`.
- **/
-- (void)addLogger:(id <DDLogger>)logger;
-
-/**
- * Adds the logger to the system.
- *
- * The level that you provide here is a preemptive filter (for performance).
- * That is, the level specified here will be used to filter out logMessages so that
- * the logger is never even invoked for the messages.
- *
- * More information:
- * When you issue a log statement, the logging framework iterates over each logger,
- * and checks to see if it should forward the logMessage to the logger.
- * This check is done using the level parameter passed to this method.
- *
- * For example:
- *
- * `[DDLog addLogger:consoleLogger withLogLevel:DDLogLevelVerbose];`
- * `[DDLog addLogger:fileLogger    withLogLevel:DDLogLevelWarning];`
- *
- * `DDLogError(@"oh no");` => gets forwarded to consoleLogger & fileLogger
- * `DDLogInfo(@"hi");`     => gets forwarded to consoleLogger only
- *
- * It is important to remember that Lumberjack uses a BITMASK.
- * Many developers & third party frameworks may define extra log levels & flags.
- * For example:
- *
- * `#define SOME_FRAMEWORK_LOG_FLAG_TRACE (1 << 6) // 0...1000000`
- *
- * So if you specify `DDLogLevelVerbose` to this method, you won't see the framework's trace messages.
- *
- * `(SOME_FRAMEWORK_LOG_FLAG_TRACE & DDLogLevelVerbose) => (01000000 & 00011111) => NO`
- *
- * Consider passing `DDLogLevelAll` to this method, which has all bits set.
- * You can also use the exclusive-or bitwise operator to get a bitmask that has all flags set,
- * except the ones you explicitly don't want. For example, if you wanted everything except verbose & debug:
- *
- * `((DDLogLevelAll ^ DDLogLevelVerbose) | DDLogLevelInfo)`
- **/
-+ (void)addLogger:(id <DDLogger>)logger withLevel:(DDLogLevel)level;
-
-/**
- * Adds the logger to the system.
- *
- * The level that you provide here is a preemptive filter (for performance).
- * That is, the level specified here will be used to filter out logMessages so that
- * the logger is never even invoked for the messages.
- *
- * More information:
- * When you issue a log statement, the logging framework iterates over each logger,
- * and checks to see if it should forward the logMessage to the logger.
- * This check is done using the level parameter passed to this method.
- *
- * For example:
- *
- * `[DDLog addLogger:consoleLogger withLogLevel:DDLogLevelVerbose];`
- * `[DDLog addLogger:fileLogger    withLogLevel:DDLogLevelWarning];`
- *
- * `DDLogError(@"oh no");` => gets forwarded to consoleLogger & fileLogger
- * `DDLogInfo(@"hi");`     => gets forwarded to consoleLogger only
- *
- * It is important to remember that Lumberjack uses a BITMASK.
- * Many developers & third party frameworks may define extra log levels & flags.
- * For example:
- *
- * `#define SOME_FRAMEWORK_LOG_FLAG_TRACE (1 << 6) // 0...1000000`
- *
- * So if you specify `DDLogLevelVerbose` to this method, you won't see the framework's trace messages.
- *
- * `(SOME_FRAMEWORK_LOG_FLAG_TRACE & DDLogLevelVerbose) => (01000000 & 00011111) => NO`
- *
- * Consider passing `DDLogLevelAll` to this method, which has all bits set.
- * You can also use the exclusive-or bitwise operator to get a bitmask that has all flags set,
- * except the ones you explicitly don't want. For example, if you wanted everything except verbose & debug:
- *
- * `((DDLogLevelAll ^ DDLogLevelVerbose) | DDLogLevelInfo)`
- **/
-- (void)addLogger:(id <DDLogger>)logger withLevel:(DDLogLevel)level;
-
-/**
- *  Remove the logger from the system
- */
-+ (void)removeLogger:(id <DDLogger>)logger;
-
-/**
- *  Remove the logger from the system
- */
-- (void)removeLogger:(id <DDLogger>)logger;
-
-/**
- *  Remove all the current loggers
- */
-+ (void)removeAllLoggers;
-
-/**
- *  Remove all the current loggers
- */
-- (void)removeAllLoggers;
-
-/**
- *  Return all the current loggers
- */
-@property (class, nonatomic, copy, readonly) NSArray<id<DDLogger>> *allLoggers;
-
-/**
- *  Return all the current loggers
- */
-@property (nonatomic, copy, readonly) NSArray<id<DDLogger>> *allLoggers;
-
-/**
- *  Return all the current loggers with their level (aka DDLoggerInformation).
- */
-@property (class, nonatomic, copy, readonly) NSArray<DDLoggerInformation *> *allLoggersWithLevel;
-
-/**
- *  Return all the current loggers with their level (aka DDLoggerInformation).
- */
-@property (nonatomic, copy, readonly) NSArray<DDLoggerInformation *> *allLoggersWithLevel;
-
-/**
- * Registered Dynamic Logging
- *
- * These methods allow you to obtain a list of classes that are using registered dynamic logging,
- * and also provides methods to get and set their log level during run time.
- **/
-
-/**
- *  Returns an array with the classes that are using registered dynamic logging
- */
-@property (class, nonatomic, copy, readonly) NSArray<Class> *registeredClasses;
-
-/**
- *  Returns an array with the classes names that are using registered dynamic logging
- */
-@property (class, nonatomic, copy, readonly) NSArray<NSString*> *registeredClassNames;
-
-/**
- *  Returns the current log level for a certain class
- *
- *  @param aClass `Class` param
- */
-+ (DDLogLevel)levelForClass:(Class)aClass;
-
-/**
- *  Returns the current log level for a certain class
- *
- *  @param aClassName string param
- */
-+ (DDLogLevel)levelForClassWithName:(NSString *)aClassName;
-
-/**
- *  Set the log level for a certain class
- *
- *  @param level  the new level
- *  @param aClass `Class` param
- */
-+ (void)setLevel:(DDLogLevel)level forClass:(Class)aClass;
-
-/**
- *  Set the log level for a certain class
- *
- *  @param level      the new level
- *  @param aClassName string param
- */
-+ (void)setLevel:(DDLogLevel)level forClassWithName:(NSString *)aClassName;
-
-@end
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark -
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-/**
- *  This protocol describes a basic logger behavior. 
- *  Basically, it can log messages, store a logFormatter plus a bunch of optional behaviors.
- *  (i.e. flush, get its loggerQueue, get its name, ...
- */
-@protocol DDLogger <NSObject>
-
-/**
- *  The log message method
- *
- *  @param logMessage the message (model)
- */
-- (void)logMessage:(DDLogMessage *)logMessage NS_SWIFT_NAME(log(message:));
-
-/**
- * Formatters may optionally be added to any logger.
- *
- * If no formatter is set, the logger simply logs the message as it is given in logMessage,
- * or it may use its own built in formatting style.
- **/
-@property (nonatomic, strong) id <DDLogFormatter> logFormatter;
-
-@optional
-
-/**
- * Since logging is asynchronous, adding and removing loggers is also asynchronous.
- * In other words, the loggers are added and removed at appropriate times with regards to log messages.
- *
- * - Loggers will not receive log messages that were executed prior to when they were added.
- * - Loggers will not receive log messages that were executed after they were removed.
- *
- * These methods are executed in the logging thread/queue.
- * This is the same thread/queue that will execute every logMessage: invocation.
- * Loggers may use these methods for thread synchronization or other setup/teardown tasks.
- **/
-- (void)didAddLogger;
-
-/**
- * Since logging is asynchronous, adding and removing loggers is also asynchronous.
- * In other words, the loggers are added and removed at appropriate times with regards to log messages.
- *
- * - Loggers will not receive log messages that were executed prior to when they were added.
- * - Loggers will not receive log messages that were executed after they were removed.
- *
- * These methods are executed in the logging thread/queue given in parameter.
- * This is the same thread/queue that will execute every logMessage: invocation.
- * Loggers may use the queue parameter to set specific values on the queue with dispatch_set_specific() function.
- **/
-- (void)didAddLoggerInQueue:(dispatch_queue_t)queue;
-
-/**
- *  See the above description for `didAddLogger`
- */
-- (void)willRemoveLogger;
-
-/**
- * Some loggers may buffer IO for optimization purposes.
- * For example, a database logger may only save occasionally as the disk IO is slow.
- * In such loggers, this method should be implemented to flush any pending IO.
- *
- * This allows invocations of DDLog's flushLog method to be propogated to loggers that need it.
- *
- * Note that DDLog's flushLog method is invoked automatically when the application quits,
- * and it may be also invoked manually by the developer prior to application crashes, or other such reasons.
- **/
-- (void)flush;
-
-/**
- * Each logger is executed concurrently with respect to the other loggers.
- * Thus, a dedicated dispatch queue is used for each logger.
- * Logger implementations may optionally choose to provide their own dispatch queue.
- **/
-@property (nonatomic, DISPATCH_QUEUE_REFERENCE_TYPE, readonly) dispatch_queue_t loggerQueue;
-
-/**
- * If the logger implementation does not choose to provide its own queue,
- * one will automatically be created for it.
- * The created queue will receive its name from this method.
- * This may be helpful for debugging or profiling reasons.
- **/
-@property (copy, nonatomic, readonly) DDLoggerName loggerName;
-
-@end
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark -
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-/**
- *  This protocol describes the behavior of a log formatter
- */
-@protocol DDLogFormatter <NSObject>
-@required
-
-/**
- * Formatters may optionally be added to any logger.
- * This allows for increased flexibility in the logging environment.
- * For example, log messages for log files may be formatted differently than log messages for the console.
- *
- * For more information about formatters, see the "Custom Formatters" page:
- * Documentation/CustomFormatters.md
- *
- * The formatter may also optionally filter the log message by returning nil,
- * in which case the logger will not log the message.
- **/
-- (NSString * __nullable)formatLogMessage:(DDLogMessage *)logMessage NS_SWIFT_NAME(format(message:));
-
-@optional
-
-/**
- * A single formatter instance can be added to multiple loggers.
- * These methods provides hooks to notify the formatter of when it's added/removed.
- *
- * This is primarily for thread-safety.
- * If a formatter is explicitly not thread-safe, it may wish to throw an exception if added to multiple loggers.
- * Or if a formatter has potentially thread-unsafe code (e.g. NSDateFormatter),
- * it could possibly use these hooks to switch to thread-safe versions of the code.
- **/
-- (void)didAddToLogger:(id <DDLogger>)logger;
-
-/**
- * A single formatter instance can be added to multiple loggers.
- * These methods provides hooks to notify the formatter of when it's added/removed.
- *
- * This is primarily for thread-safety.
- * If a formatter is explicitly not thread-safe, it may wish to throw an exception if added to multiple loggers.
- * Or if a formatter has potentially thread-unsafe code (e.g. NSDateFormatter),
- * it could possibly use these hooks to switch to thread-safe versions of the code or use dispatch_set_specific()
-.* to add its own specific values.
- **/
-- (void)didAddToLogger:(id <DDLogger>)logger inQueue:(dispatch_queue_t)queue;
-
-/**
- *  See the above description for `didAddToLogger:`
- */
-- (void)willRemoveFromLogger:(id <DDLogger>)logger;
-
-@end
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark -
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-/**
- *  This protocol describes a dynamic logging component
- */
-@protocol DDRegisteredDynamicLogging
-
-/**
- * Implement these methods to allow a file's log level to be managed from a central location.
- *
- * This is useful if you'd like to be able to change log levels for various parts
- * of your code from within the running application.
- *
- * Imagine pulling up the settings for your application,
- * and being able to configure the logging level on a per file basis.
- *
- * The implementation can be very straight-forward:
- *
- * ```
- * + (int)ddLogLevel
- * {
- *     return ddLogLevel;
- * }
- *
- * + (void)ddSetLogLevel:(DDLogLevel)level
- * {
- *     ddLogLevel = level;
- * }
- * ```
- **/
-@property (class, nonatomic, readwrite, setter=ddSetLogLevel:) DDLogLevel ddLogLevel;
-
-@end
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark -
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-#ifndef NS_DESIGNATED_INITIALIZER
-    #define NS_DESIGNATED_INITIALIZER
-#endif
-
-/**
- *  Log message options, allow copying certain log elements
- */
-typedef NS_OPTIONS(NSInteger, DDLogMessageOptions){
-    /**
-     *  Use this to use a copy of the file path
-     */
-    DDLogMessageCopyFile        = 1 << 0,
-    /**
-     *  Use this to use a copy of the function name
-     */
-    DDLogMessageCopyFunction    = 1 << 1,
-    /**
-     *  Use this to use avoid a copy of the message
-     */
-    DDLogMessageDontCopyMessage = 1 << 2
-};
-
-/**
- * The `DDLogMessage` class encapsulates information about the log message.
- * If you write custom loggers or formatters, you will be dealing with objects of this class.
- **/
-@interface DDLogMessage : NSObject <NSCopying>
-{
-    // Direct accessors to be used only for performance
-    @public
-    NSString *_message;
-    DDLogLevel _level;
-    DDLogFlag _flag;
-    NSInteger _context;
-    NSString *_file;
-    NSString *_fileName;
-    NSString *_function;
-    NSUInteger _line;
-    id _tag;
-    DDLogMessageOptions _options;
-    NSDate *_timestamp;
-    NSString *_threadID;
-    NSString *_threadName;
-    NSString *_queueLabel;
-}
-
-/**
- *  Default `init` for empty messages.
- */
-- (instancetype)init NS_DESIGNATED_INITIALIZER;
-
-/**
- * Standard init method for a log message object.
- * Used by the logging primitives. (And the macros use the logging primitives.)
- *
- * If you find need to manually create logMessage objects, there is one thing you should be aware of:
- *
- * If no flags are passed, the method expects the file and function parameters to be string literals.
- * That is, it expects the given strings to exist for the duration of the object's lifetime,
- * and it expects the given strings to be immutable.
- * In other words, it does not copy these strings, it simply points to them.
- * This is due to the fact that __FILE__ and __FUNCTION__ are usually used to specify these parameters,
- * so it makes sense to optimize and skip the unnecessary allocations.
- * However, if you need them to be copied you may use the options parameter to specify this.
- *
- *  @param message   the message
- *  @param level     the log level
- *  @param flag      the log flag
- *  @param context   the context (if any is defined)
- *  @param file      the current file
- *  @param function  the current function
- *  @param line      the current code line
- *  @param tag       potential tag
- *  @param options   a bitmask which supports DDLogMessageCopyFile and DDLogMessageCopyFunction.
- *  @param timestamp the log timestamp
- *
- *  @return a new instance of a log message model object
- */
-- (instancetype)initWithMessage:(NSString *)message
-                          level:(DDLogLevel)level
-                           flag:(DDLogFlag)flag
-                        context:(NSInteger)context
-                           file:(NSString *)file
-                       function:(NSString * __nullable)function
-                           line:(NSUInteger)line
-                            tag:(id __nullable)tag
-                        options:(DDLogMessageOptions)options
-                      timestamp:(NSDate * __nullable)timestamp NS_DESIGNATED_INITIALIZER;
-
-/**
- * Read-only properties
- **/
-
-/**
- *  The log message
- */
-@property (readonly, nonatomic) NSString *message;
-@property (readonly, nonatomic) DDLogLevel level;
-@property (readonly, nonatomic) DDLogFlag flag;
-@property (readonly, nonatomic) NSInteger context;
-@property (readonly, nonatomic) NSString *file;
-@property (readonly, nonatomic) NSString *fileName;
-@property (readonly, nonatomic) NSString * __nullable function;
-@property (readonly, nonatomic) NSUInteger line;
-@property (readonly, nonatomic) id __nullable tag;
-@property (readonly, nonatomic) DDLogMessageOptions options;
-@property (readonly, nonatomic) NSDate *timestamp;
-@property (readonly, nonatomic) NSString *threadID; // ID as it appears in NSLog calculated from the machThreadID
-@property (readonly, nonatomic) NSString *threadName;
-@property (readonly, nonatomic) NSString *queueLabel;
-
-@end
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark -
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-/**
- * The `DDLogger` protocol specifies that an optional formatter can be added to a logger.
- * Most (but not all) loggers will want to support formatters.
- *
- * However, writing getters and setters in a thread safe manner,
- * while still maintaining maximum speed for the logging process, is a difficult task.
- *
- * To do it right, the implementation of the getter/setter has strict requirements:
- * - Must NOT require the `logMessage:` method to acquire a lock.
- * - Must NOT require the `logMessage:` method to access an atomic property (also a lock of sorts).
- *
- * To simplify things, an abstract logger is provided that implements the getter and setter.
- *
- * Logger implementations may simply extend this class,
- * and they can ACCESS THE FORMATTER VARIABLE DIRECTLY from within their `logMessage:` method!
- **/
-@interface DDAbstractLogger : NSObject <DDLogger>
-{
-    // Direct accessors to be used only for performance
-    @public
-    id <DDLogFormatter> _logFormatter;
-    dispatch_queue_t _loggerQueue;
-}
-
-@property (nonatomic, strong, nullable) id <DDLogFormatter> logFormatter;
-@property (nonatomic, DISPATCH_QUEUE_REFERENCE_TYPE) dispatch_queue_t loggerQueue;
-
-// For thread-safety assertions
-
-/**
- *  Return YES if the current logger uses a global queue for logging
- */
-@property (nonatomic, readonly, getter=isOnGlobalLoggingQueue)  BOOL onGlobalLoggingQueue;
-
-/**
- *  Return YES if the current logger uses the internal designated queue for logging
- */
-@property (nonatomic, readonly, getter=isOnInternalLoggerQueue) BOOL onInternalLoggerQueue;
-
-@end
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark -
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-@interface DDLoggerInformation : NSObject
-
-@property (nonatomic, readonly) id <DDLogger> logger;
-@property (nonatomic, readonly) DDLogLevel level;
-
-+ (DDLoggerInformation *)informationWithLogger:(id <DDLogger>)logger
-                           andLevel:(DDLogLevel)level;
-
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 1300
Carthage/Checkouts/CocoaLumberjack/Classes/DDLog.m

@@ -1,1300 +0,0 @@
-// Software License Agreement (BSD License)
-//
-// Copyright (c) 2010-2019, Deusty, LLC
-// All rights reserved.
-//
-// Redistribution and use of this software in source and binary forms,
-// with or without modification, are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above copyright notice,
-//   this list of conditions and the following disclaimer.
-//
-// * Neither the name of Deusty nor the names of its contributors may be used
-//   to endorse or promote products derived from this software without specific
-//   prior written permission of Deusty, LLC.
-
-// Disable legacy macros
-#ifndef DD_LEGACY_MACROS
-    #define DD_LEGACY_MACROS 0
-#endif
-
-#import "DDLog.h"
-
-#import <pthread.h>
-#import <objc/runtime.h>
-
-#if TARGET_OS_IOS
-    #import <UIKit/UIDevice.h>
-    #import <UIKit/UIApplication.h>
-#elif !defined(DD_CLI) && __has_include(<AppKit/NSApplication.h>)
-    #import <AppKit/NSApplication.h>
-#endif
-
-
-#if !__has_feature(objc_arc)
-#error This file must be compiled with ARC. Use -fobjc-arc flag (or convert project to ARC).
-#endif
-
-// We probably shouldn't be using DDLog() statements within the DDLog implementation.
-// But we still want to leave our log statements for any future debugging,
-// and to allow other developers to trace the implementation (which is a great learning tool).
-//
-// So we use a primitive logging macro around NSLog.
-// We maintain the NS prefix on the macros to be explicit about the fact that we're using NSLog.
-
-#ifndef DD_DEBUG
-    #define DD_DEBUG 0
-#endif
-
-#define NSLogDebug(frmt, ...) do{ if(DD_DEBUG) NSLog((frmt), ##__VA_ARGS__); } while(0)
-
-// Specifies the maximum queue size of the logging thread.
-//
-// Since most logging is asynchronous, its possible for rogue threads to flood the logging queue.
-// That is, to issue an abundance of log statements faster than the logging thread can keep up.
-// Typically such a scenario occurs when log statements are added haphazardly within large loops,
-// but may also be possible if relatively slow loggers are being used.
-//
-// This property caps the queue size at a given number of outstanding log statements.
-// If a thread attempts to issue a log statement when the queue is already maxed out,
-// the issuing thread will block until the queue size drops below the max again.
-
-#ifndef DDLOG_MAX_QUEUE_SIZE
-    #define DDLOG_MAX_QUEUE_SIZE 1000 // Should not exceed INT32_MAX
-#endif
-
-// The "global logging queue" refers to [DDLog loggingQueue].
-// It is the queue that all log statements go through.
-//
-// The logging queue sets a flag via dispatch_queue_set_specific using this key.
-// We can check for this key via dispatch_get_specific() to see if we're on the "global logging queue".
-
-static void *const GlobalLoggingQueueIdentityKey = (void *)&GlobalLoggingQueueIdentityKey;
-
-@interface DDLoggerNode : NSObject
-{
-    // Direct accessors to be used only for performance
-    @public
-    id <DDLogger> _logger;
-    DDLogLevel _level;
-    dispatch_queue_t _loggerQueue;
-}
-
-@property (nonatomic, readonly) id <DDLogger> logger;
-@property (nonatomic, readonly) DDLogLevel level;
-@property (nonatomic, readonly) dispatch_queue_t loggerQueue;
-
-+ (DDLoggerNode *)nodeWithLogger:(id <DDLogger>)logger
-                     loggerQueue:(dispatch_queue_t)loggerQueue
-                           level:(DDLogLevel)level;
-
-@end
-
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark -
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-@interface DDLog ()
-
-// An array used to manage all the individual loggers.
-// The array is only modified on the loggingQueue/loggingThread.
-@property (nonatomic, strong) NSMutableArray *_loggers;
-
-@end
-
-@implementation DDLog
-
-// All logging statements are added to the same queue to ensure FIFO operation.
-static dispatch_queue_t _loggingQueue;
-
-// Individual loggers are executed concurrently per log statement.
-// Each logger has it's own associated queue, and a dispatch group is used for synchronization.
-static dispatch_group_t _loggingGroup;
-
-// In order to prevent to queue from growing infinitely large,
-// a maximum size is enforced (DDLOG_MAX_QUEUE_SIZE).
-static dispatch_semaphore_t _queueSemaphore;
-
-// Minor optimization for uniprocessor machines
-static NSUInteger _numProcessors;
-
-/**
- *  Returns the singleton `DDLog`.
- *  The instance is used by `DDLog` class methods.
- *
- *  @return The singleton `DDLog`.
- */
-+ (instancetype)sharedInstance {
-    static id sharedInstance = nil;
-
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        sharedInstance = [[self alloc] init];
-    });
-
-    return sharedInstance;
-}
-
-/**
- * The runtime sends initialize to each class in a program exactly one time just before the class,
- * or any class that inherits from it, is sent its first message from within the program. (Thus the
- * method may never be invoked if the class is not used.) The runtime sends the initialize message to
- * classes in a thread-safe manner. Superclasses receive this message before their subclasses.
- *
- * This method may also be called directly, hence the safety mechanism.
- **/
-+ (void)initialize {
-    static dispatch_once_t DDLogOnceToken;
-
-    dispatch_once(&DDLogOnceToken, ^{
-        NSLogDebug(@"DDLog: Using grand central dispatch");
-
-        _loggingQueue = dispatch_queue_create("cocoa.lumberjack", NULL);
-        _loggingGroup = dispatch_group_create();
-
-        void *nonNullValue = GlobalLoggingQueueIdentityKey; // Whatever, just not null
-        dispatch_queue_set_specific(_loggingQueue, GlobalLoggingQueueIdentityKey, nonNullValue, NULL);
-
-        _queueSemaphore = dispatch_semaphore_create(DDLOG_MAX_QUEUE_SIZE);
-
-        // Figure out how many processors are available.
-        // This may be used later for an optimization on uniprocessor machines.
-
-        _numProcessors = MAX([NSProcessInfo processInfo].processorCount, (NSUInteger) 1);
-
-        NSLogDebug(@"DDLog: numProcessors = %@", @(_numProcessors));
-    });
-}
-
-/**
- *  The `DDLog` initializer.
- *  Static variables are set only once.
- *
- *  @return An initialized `DDLog` instance.
- */
-- (id)init {
-    self = [super init];
-
-    if (self) {
-        self._loggers = [[NSMutableArray alloc] initWithCapacity:4];
-
-#if TARGET_OS_IOS
-        NSString *notificationName = UIApplicationWillTerminateNotification;
-#else
-        NSString *notificationName = nil;
-
-        // On Command Line Tool apps AppKit may not be available
-#if !defined(DD_CLI) && __has_include(<AppKit/NSApplication.h>)
-        if (NSApp) {
-            notificationName = NSApplicationWillTerminateNotification;
-        }
-#endif
-
-        if (!notificationName) {
-            // If there is no NSApp -> we are running Command Line Tool app.
-            // In this case terminate notification wouldn't be fired, so we use workaround.
-            __weak __auto_type weakSelf = self;
-            atexit_b (^{
-                [weakSelf applicationWillTerminate:nil];
-            });
-        }
-
-#endif /* if TARGET_OS_IOS */
-
-        if (notificationName) {
-            [[NSNotificationCenter defaultCenter] addObserver:self
-                                                     selector:@selector(applicationWillTerminate:)
-                                                         name:notificationName
-                                                       object:nil];
-        }
-    }
-
-    return self;
-}
-
-/**
- * Provides access to the logging queue.
- **/
-+ (dispatch_queue_t)loggingQueue {
-    return _loggingQueue;
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark Notifications
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-- (void)applicationWillTerminate:(NSNotification * __attribute__((unused)))notification {
-    [self flushLog];
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark Logger Management
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-+ (void)addLogger:(id <DDLogger>)logger {
-    [self.sharedInstance addLogger:logger];
-}
-
-- (void)addLogger:(id <DDLogger>)logger {
-    [self addLogger:logger withLevel:DDLogLevelAll]; // DDLogLevelAll has all bits set
-}
-
-+ (void)addLogger:(id <DDLogger>)logger withLevel:(DDLogLevel)level {
-    [self.sharedInstance addLogger:logger withLevel:level];
-}
-
-- (void)addLogger:(id <DDLogger>)logger withLevel:(DDLogLevel)level {
-    if (!logger) {
-        return;
-    }
-
-    dispatch_async(_loggingQueue, ^{ @autoreleasepool {
-        [self lt_addLogger:logger level:level];
-    } });
-}
-
-+ (void)removeLogger:(id <DDLogger>)logger {
-    [self.sharedInstance removeLogger:logger];
-}
-
-- (void)removeLogger:(id <DDLogger>)logger {
-    if (!logger) {
-        return;
-    }
-
-    dispatch_async(_loggingQueue, ^{ @autoreleasepool {
-        [self lt_removeLogger:logger];
-    } });
-}
-
-+ (void)removeAllLoggers {
-    [self.sharedInstance removeAllLoggers];
-}
-
-- (void)removeAllLoggers {
-    dispatch_async(_loggingQueue, ^{ @autoreleasepool {
-        [self lt_removeAllLoggers];
-    } });
-}
-
-+ (NSArray<id<DDLogger>> *)allLoggers {
-    return [self.sharedInstance allLoggers];
-}
-
-- (NSArray<id<DDLogger>> *)allLoggers {
-    __block NSArray *theLoggers;
-
-    dispatch_sync(_loggingQueue, ^{ @autoreleasepool {
-        theLoggers = [self lt_allLoggers];
-    } });
-
-    return theLoggers;
-}
-
-+ (NSArray<DDLoggerInformation *> *)allLoggersWithLevel {
-    return [self.sharedInstance allLoggersWithLevel];
-}
-
-- (NSArray<DDLoggerInformation *> *)allLoggersWithLevel {
-    __block NSArray *theLoggersWithLevel;
-
-    dispatch_sync(_loggingQueue, ^{ @autoreleasepool {
-        theLoggersWithLevel = [self lt_allLoggersWithLevel];
-    } });
-
-    return theLoggersWithLevel;
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark - Master Logging
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-- (void)queueLogMessage:(DDLogMessage *)logMessage asynchronously:(BOOL)asyncFlag {
-    // We have a tricky situation here...
-    //
-    // In the common case, when the queueSize is below the maximumQueueSize,
-    // we want to simply enqueue the logMessage. And we want to do this as fast as possible,
-    // which means we don't want to block and we don't want to use any locks.
-    //
-    // However, if the queueSize gets too big, we want to block.
-    // But we have very strict requirements as to when we block, and how long we block.
-    //
-    // The following example should help illustrate our requirements:
-    //
-    // Imagine that the maximum queue size is configured to be 5,
-    // and that there are already 5 log messages queued.
-    // Let us call these 5 queued log messages A, B, C, D, and E. (A is next to be executed)
-    //
-    // Now if our thread issues a log statement (let us call the log message F),
-    // it should block before the message is added to the queue.
-    // Furthermore, it should be unblocked immediately after A has been unqueued.
-    //
-    // The requirements are strict in this manner so that we block only as long as necessary,
-    // and so that blocked threads are unblocked in the order in which they were blocked.
-    //
-    // Returning to our previous example, let us assume that log messages A through E are still queued.
-    // Our aforementioned thread is blocked attempting to queue log message F.
-    // Now assume we have another separate thread that attempts to issue log message G.
-    // It should block until log messages A and B have been unqueued.
-
-
-    // We are using a counting semaphore provided by GCD.
-    // The semaphore is initialized with our DDLOG_MAX_QUEUE_SIZE value.
-    // Every time we want to queue a log message we decrement this value.
-    // If the resulting value is less than zero,
-    // the semaphore function waits in FIFO order for a signal to occur before returning.
-    //
-    // A dispatch semaphore is an efficient implementation of a traditional counting semaphore.
-    // Dispatch semaphores call down to the kernel only when the calling thread needs to be blocked.
-    // If the calling semaphore does not need to block, no kernel call is made.
-
-    dispatch_block_t logBlock = ^{
-        dispatch_semaphore_wait(_queueSemaphore, DISPATCH_TIME_FOREVER);
-        // We're now sure we won't overflow the queue.
-        // It is time to queue our log message.
-        @autoreleasepool {
-            [self lt_log:logMessage];
-        }
-    };
-
-    if (asyncFlag) {
-        dispatch_async(_loggingQueue, logBlock);
-    } else if (dispatch_get_specific(GlobalLoggingQueueIdentityKey)) {
-        // We've logged an error message while on the logging queue...
-        logBlock();
-    } else {
-        dispatch_sync(_loggingQueue, logBlock);
-    }
-}
-
-+ (void)log:(BOOL)asynchronous
-      level:(DDLogLevel)level
-       flag:(DDLogFlag)flag
-    context:(NSInteger)context
-       file:(const char *)file
-   function:(const char *)function
-       line:(NSUInteger)line
-        tag:(id)tag
-     format:(NSString *)format, ... {
-    va_list args;
-
-    if (format) {
-        va_start(args, format);
-
-        NSString *message = [[NSString alloc] initWithFormat:format arguments:args];
-
-        va_end(args);
-
-        va_start(args, format);
-
-        [self log:asynchronous
-          message:message
-            level:level
-             flag:flag
-          context:context
-             file:file
-         function:function
-             line:line
-              tag:tag];
-
-        va_end(args);
-    }
-}
-
-- (void)log:(BOOL)asynchronous
-      level:(DDLogLevel)level
-       flag:(DDLogFlag)flag
-    context:(NSInteger)context
-       file:(const char *)file
-   function:(const char *)function
-       line:(NSUInteger)line
-        tag:(id)tag
-     format:(NSString *)format, ... {
-    va_list args;
-
-    if (format) {
-        va_start(args, format);
-
-        NSString *message = [[NSString alloc] initWithFormat:format arguments:args];
-
-        va_end(args);
-
-        va_start(args, format);
-
-        [self log:asynchronous
-          message:message
-            level:level
-             flag:flag
-          context:context
-             file:file
-         function:function
-             line:line
-              tag:tag];
-
-        va_end(args);
-    }
-}
-
-+ (void)log:(BOOL)asynchronous
-      level:(DDLogLevel)level
-       flag:(DDLogFlag)flag
-    context:(NSInteger)context
-       file:(const char *)file
-   function:(const char *)function
-       line:(NSUInteger)line
-        tag:(id)tag
-     format:(NSString *)format
-       args:(va_list)args {
-    [self.sharedInstance log:asynchronous level:level flag:flag context:context file:file function:function line:line tag:tag format:format args:args];
-}
-
-- (void)log:(BOOL)asynchronous
-      level:(DDLogLevel)level
-       flag:(DDLogFlag)flag
-    context:(NSInteger)context
-       file:(const char *)file
-   function:(const char *)function
-       line:(NSUInteger)line
-        tag:(id)tag
-     format:(NSString *)format
-       args:(va_list)args {
-    if (format) {
-        NSString *message = [[NSString alloc] initWithFormat:format arguments:args];
-        [self log:asynchronous
-          message:message
-            level:level
-             flag:flag
-          context:context
-             file:file
-         function:function
-             line:line
-              tag:tag];
-    }
-}
-
-+ (void)log:(BOOL)asynchronous
-    message:(NSString *)message
-      level:(DDLogLevel)level
-       flag:(DDLogFlag)flag
-    context:(NSInteger)context
-       file:(const char *)file
-   function:(const char *)function
-       line:(NSUInteger)line
-        tag:(id)tag {
-    [self.sharedInstance log:asynchronous message:message level:level flag:flag context:context file:file function:function line:line tag:tag];
-}
-
-- (void)log:(BOOL)asynchronous
-    message:(NSString *)message
-      level:(DDLogLevel)level
-       flag:(DDLogFlag)flag
-    context:(NSInteger)context
-       file:(const char *)file
-   function:(const char *)function
-       line:(NSUInteger)line
-        tag:(id)tag {
-    DDLogMessage *logMessage = [[DDLogMessage alloc] initWithMessage:message
-                                                               level:level
-                                                                flag:flag
-                                                             context:context
-                                                                file:[NSString stringWithFormat:@"%s", file]
-                                                            function:[NSString stringWithFormat:@"%s", function]
-                                                                line:line
-                                                                 tag:tag
-                                                             options:(DDLogMessageOptions)0
-                                                           timestamp:nil];
-
-    [self queueLogMessage:logMessage asynchronously:asynchronous];
-}
-
-+ (void)log:(BOOL)asynchronous
-    message:(DDLogMessage *)logMessage {
-    [self.sharedInstance log:asynchronous message:logMessage];
-}
-
-- (void)log:(BOOL)asynchronous
-    message:(DDLogMessage *)logMessage {
-    [self queueLogMessage:logMessage asynchronously:asynchronous];
-}
-
-+ (void)flushLog {
-    [self.sharedInstance flushLog];
-}
-
-- (void)flushLog {
-    dispatch_sync(_loggingQueue, ^{ @autoreleasepool {
-        [self lt_flush];
-    } });
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark Registered Dynamic Logging
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-+ (BOOL)isRegisteredClass:(Class)class {
-    SEL getterSel = @selector(ddLogLevel);
-    SEL setterSel = @selector(ddSetLogLevel:);
-
-#if TARGET_OS_IPHONE && !TARGET_OS_SIMULATOR
-
-    // Issue #6 (GoogleCode) - Crashes on iOS 4.2.1 and iPhone 4
-    //
-    // Crash caused by class_getClassMethod(2).
-    //
-    //     "It's a bug with UIAccessibilitySafeCategory__NSObject so it didn't pop up until
-    //      users had VoiceOver enabled [...]. I was able to work around it by searching the
-    //      result of class_copyMethodList() instead of calling class_getClassMethod()"
-
-    BOOL result = NO;
-
-    unsigned int methodCount, i;
-    Method *methodList = class_copyMethodList(object_getClass(class), &methodCount);
-
-    if (methodList != NULL) {
-        BOOL getterFound = NO;
-        BOOL setterFound = NO;
-
-        for (i = 0; i < methodCount; ++i) {
-            SEL currentSel = method_getName(methodList[i]);
-
-            if (currentSel == getterSel) {
-                getterFound = YES;
-            } else if (currentSel == setterSel) {
-                setterFound = YES;
-            }
-
-            if (getterFound && setterFound) {
-                result = YES;
-                break;
-            }
-        }
-
-        free(methodList);
-    }
-
-    return result;
-
-#else /* if TARGET_OS_IPHONE && !TARGET_OS_SIMULATOR */
-
-    // Issue #24 (GitHub) - Crashing in in ARC+Simulator
-    //
-    // The method +[DDLog isRegisteredClass] will crash a project when using it with ARC + Simulator.
-    // For running in the Simulator, it needs to execute the non-iOS code.
-
-    Method getter = class_getClassMethod(class, getterSel);
-    Method setter = class_getClassMethod(class, setterSel);
-
-    if ((getter != NULL) && (setter != NULL)) {
-        return YES;
-    }
-
-    return NO;
-
-#endif /* if TARGET_OS_IPHONE && !TARGET_OS_SIMULATOR */
-}
-
-+ (NSArray *)registeredClasses {
-
-    // We're going to get the list of all registered classes.
-    // The Objective-C runtime library automatically registers all the classes defined in your source code.
-    //
-    // To do this we use the following method (documented in the Objective-C Runtime Reference):
-    //
-    // int objc_getClassList(Class *buffer, int bufferLen)
-    //
-    // We can pass (NULL, 0) to obtain the total number of
-    // registered class definitions without actually retrieving any class definitions.
-    // This allows us to allocate the minimum amount of memory needed for the application.
-
-    NSUInteger numClasses = 0;
-    Class *classes = NULL;
-
-    while (numClasses == 0) {
-
-        numClasses = (NSUInteger)MAX(objc_getClassList(NULL, 0), 0);
-
-        // numClasses now tells us how many classes we have (but it might change)
-        // So we can allocate our buffer, and get pointers to all the class definitions.
-
-        NSUInteger bufferSize = numClasses;
-
-        classes = numClasses ? (Class *)calloc(bufferSize, sizeof(Class)) : NULL;
-        if (classes == NULL) {
-            return @[]; //no memory or classes?
-        }
-
-        numClasses = (NSUInteger)MAX(objc_getClassList(classes, (int)bufferSize),0);
-
-        if (numClasses > bufferSize || numClasses == 0) {
-            //apparently more classes added between calls (or a problem); try again
-            free(classes);
-            classes = NULL;
-            numClasses = 0;
-        }
-    }
-
-    // We can now loop through the classes, and test each one to see if it is a DDLogging class.
-
-    NSMutableArray *result = [NSMutableArray arrayWithCapacity:numClasses];
-
-    for (NSUInteger i = 0; i < numClasses; i++) {
-        Class class = classes[i];
-
-        if ([self isRegisteredClass:class]) {
-            [result addObject:class];
-        }
-    }
-
-    free(classes);
-
-    return result;
-}
-
-+ (NSArray *)registeredClassNames {
-    NSArray *registeredClasses = [self registeredClasses];
-    NSMutableArray *result = [NSMutableArray arrayWithCapacity:[registeredClasses count]];
-
-    for (Class class in registeredClasses) {
-        [result addObject:NSStringFromClass(class)];
-    }
-    return result;
-}
-
-+ (DDLogLevel)levelForClass:(Class)aClass {
-    if ([self isRegisteredClass:aClass]) {
-        return [aClass ddLogLevel];
-    }
-    return (DDLogLevel)-1;
-}
-
-+ (DDLogLevel)levelForClassWithName:(NSString *)aClassName {
-    Class aClass = NSClassFromString(aClassName);
-
-    return [self levelForClass:aClass];
-}
-
-+ (void)setLevel:(DDLogLevel)level forClass:(Class)aClass {
-    if ([self isRegisteredClass:aClass]) {
-        [aClass ddSetLogLevel:level];
-    }
-}
-
-+ (void)setLevel:(DDLogLevel)level forClassWithName:(NSString *)aClassName {
-    Class aClass = NSClassFromString(aClassName);
-    [self setLevel:level forClass:aClass];
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark Logging Thread
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-- (void)lt_addLogger:(id <DDLogger>)logger level:(DDLogLevel)level {
-    // Add to loggers array.
-    // Need to create loggerQueue if loggerNode doesn't provide one.
-
-    for (DDLoggerNode* node in self._loggers) {
-        if (node->_logger == logger
-            && node->_level == level) {
-            // Exactly same logger already added, exit
-            return;
-        }
-    }
-
-    NSAssert(dispatch_get_specific(GlobalLoggingQueueIdentityKey),
-             @"This method should only be run on the logging thread/queue");
-
-    dispatch_queue_t loggerQueue = NULL;
-
-    if ([logger respondsToSelector:@selector(loggerQueue)]) {
-        // Logger may be providing its own queue
-
-        loggerQueue = [logger loggerQueue];
-    }
-
-    if (loggerQueue == nil) {
-        // Automatically create queue for the logger.
-        // Use the logger name as the queue name if possible.
-
-        const char *loggerQueueName = NULL;
-
-        if ([logger respondsToSelector:@selector(loggerName)]) {
-            loggerQueueName = [[logger loggerName] UTF8String];
-        }
-
-        loggerQueue = dispatch_queue_create(loggerQueueName, NULL);
-    }
-
-    DDLoggerNode *loggerNode = [DDLoggerNode nodeWithLogger:logger loggerQueue:loggerQueue level:level];
-    [self._loggers addObject:loggerNode];
-
-    if ([logger respondsToSelector:@selector(didAddLoggerInQueue:)]) {
-        dispatch_async(loggerNode->_loggerQueue, ^{ @autoreleasepool {
-            [logger didAddLoggerInQueue:loggerNode->_loggerQueue];
-        } });
-    } else if ([logger respondsToSelector:@selector(didAddLogger)]) {
-        dispatch_async(loggerNode->_loggerQueue, ^{ @autoreleasepool {
-            [logger didAddLogger];
-        } });
-    }
-}
-
-- (void)lt_removeLogger:(id <DDLogger>)logger {
-    // Find associated loggerNode in list of added loggers
-
-    NSAssert(dispatch_get_specific(GlobalLoggingQueueIdentityKey),
-             @"This method should only be run on the logging thread/queue");
-
-    DDLoggerNode *loggerNode = nil;
-
-    for (DDLoggerNode *node in self._loggers) {
-        if (node->_logger == logger) {
-            loggerNode = node;
-            break;
-        }
-    }
-
-    if (loggerNode == nil) {
-        NSLogDebug(@"DDLog: Request to remove logger which wasn't added");
-        return;
-    }
-
-    // Notify logger
-    if ([logger respondsToSelector:@selector(willRemoveLogger)]) {
-        dispatch_async(loggerNode->_loggerQueue, ^{ @autoreleasepool {
-            [logger willRemoveLogger];
-        } });
-    }
-
-    // Remove from loggers array
-    [self._loggers removeObject:loggerNode];
-}
-
-- (void)lt_removeAllLoggers {
-    NSAssert(dispatch_get_specific(GlobalLoggingQueueIdentityKey),
-             @"This method should only be run on the logging thread/queue");
-
-    // Notify all loggers
-    for (DDLoggerNode *loggerNode in self._loggers) {
-        if ([loggerNode->_logger respondsToSelector:@selector(willRemoveLogger)]) {
-            dispatch_async(loggerNode->_loggerQueue, ^{ @autoreleasepool {
-                [loggerNode->_logger willRemoveLogger];
-            } });
-        }
-    }
-
-    // Remove all loggers from array
-
-    [self._loggers removeAllObjects];
-}
-
-- (NSArray *)lt_allLoggers {
-    NSAssert(dispatch_get_specific(GlobalLoggingQueueIdentityKey),
-             @"This method should only be run on the logging thread/queue");
-
-    NSMutableArray *theLoggers = [NSMutableArray new];
-
-    for (DDLoggerNode *loggerNode in self._loggers) {
-        [theLoggers addObject:loggerNode->_logger];
-    }
-
-    return [theLoggers copy];
-}
-
-- (NSArray *)lt_allLoggersWithLevel {
-    NSAssert(dispatch_get_specific(GlobalLoggingQueueIdentityKey),
-             @"This method should only be run on the logging thread/queue");
-
-    NSMutableArray *theLoggersWithLevel = [NSMutableArray new];
-
-    for (DDLoggerNode *loggerNode in self._loggers) {
-        [theLoggersWithLevel addObject:[DDLoggerInformation informationWithLogger:loggerNode->_logger
-                                                                         andLevel:loggerNode->_level]];
-    }
-
-    return [theLoggersWithLevel copy];
-}
-
-- (void)lt_log:(DDLogMessage *)logMessage {
-    // Execute the given log message on each of our loggers.
-
-    NSAssert(dispatch_get_specific(GlobalLoggingQueueIdentityKey),
-             @"This method should only be run on the logging thread/queue");
-
-    if (_numProcessors > 1) {
-        // Execute each logger concurrently, each within its own queue.
-        // All blocks are added to same group.
-        // After each block has been queued, wait on group.
-        //
-        // The waiting ensures that a slow logger doesn't end up with a large queue of pending log messages.
-        // This would defeat the purpose of the efforts we made earlier to restrict the max queue size.
-
-        for (DDLoggerNode *loggerNode in self._loggers) {
-            // skip the loggers that shouldn't write this message based on the log level
-
-            if (!(logMessage->_flag & loggerNode->_level)) {
-                continue;
-            }
-
-            dispatch_group_async(_loggingGroup, loggerNode->_loggerQueue, ^{ @autoreleasepool {
-                [loggerNode->_logger logMessage:logMessage];
-            } });
-        }
-
-        dispatch_group_wait(_loggingGroup, DISPATCH_TIME_FOREVER);
-    } else {
-        // Execute each logger serially, each within its own queue.
-
-        for (DDLoggerNode *loggerNode in self._loggers) {
-            // skip the loggers that shouldn't write this message based on the log level
-
-            if (!(logMessage->_flag & loggerNode->_level)) {
-                continue;
-            }
-
-#if DD_DEBUG
-            // we must assure that we aren not on loggerNode->_loggerQueue.
-            if (loggerNode->_loggerQueue == NULL) {
-              // tell that we can't dispatch logger node on queue that is NULL.
-              NSLogDebug(@"DDLog: current node has loggerQueue == NULL");
-            }
-            else {
-              dispatch_async(loggerNode->_loggerQueue, ^{
-                if (dispatch_get_specific(GlobalLoggingQueueIdentityKey)) {
-                  // tell that we somehow on logging queue?
-                  NSLogDebug(@"DDLog: current node has loggerQueue == globalLoggingQueue");
-                }
-              });
-            }
-#endif
-            // next, we must check that node is OK.
-            dispatch_sync(loggerNode->_loggerQueue, ^{ @autoreleasepool {
-                [loggerNode->_logger logMessage:logMessage];
-            } });
-        }
-    }
-
-    // If our queue got too big, there may be blocked threads waiting to add log messages to the queue.
-    // Since we've now dequeued an item from the log, we may need to unblock the next thread.
-
-    // We are using a counting semaphore provided by GCD.
-    // The semaphore is initialized with our DDLOG_MAX_QUEUE_SIZE value.
-    // When a log message is queued this value is decremented.
-    // When a log message is dequeued this value is incremented.
-    // If the value ever drops below zero,
-    // the queueing thread blocks and waits in FIFO order for us to signal it.
-    //
-    // A dispatch semaphore is an efficient implementation of a traditional counting semaphore.
-    // Dispatch semaphores call down to the kernel only when the calling thread needs to be blocked.
-    // If the calling semaphore does not need to block, no kernel call is made.
-
-    dispatch_semaphore_signal(_queueSemaphore);
-}
-
-- (void)lt_flush {
-    // All log statements issued before the flush method was invoked have now been executed.
-    //
-    // Now we need to propagate the flush request to any loggers that implement the flush method.
-    // This is designed for loggers that buffer IO.
-
-    NSAssert(dispatch_get_specific(GlobalLoggingQueueIdentityKey),
-             @"This method should only be run on the logging thread/queue");
-
-    for (DDLoggerNode *loggerNode in self._loggers) {
-        if ([loggerNode->_logger respondsToSelector:@selector(flush)]) {
-            dispatch_group_async(_loggingGroup, loggerNode->_loggerQueue, ^{ @autoreleasepool {
-                [loggerNode->_logger flush];
-            } });
-        }
-    }
-
-    dispatch_group_wait(_loggingGroup, DISPATCH_TIME_FOREVER);
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark Utilities
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-NSString * __nullable DDExtractFileNameWithoutExtension(const char *filePath, BOOL copy) {
-    if (filePath == NULL) {
-        return nil;
-    }
-
-    char *lastSlash = NULL;
-    char *lastDot = NULL;
-
-    char *p = (char *)filePath;
-
-    while (*p != '\0') {
-        if (*p == '/') {
-            lastSlash = p;
-        } else if (*p == '.') {
-            lastDot = p;
-        }
-
-        p++;
-    }
-
-    char *subStr;
-    NSUInteger subLen;
-
-    if (lastSlash) {
-        if (lastDot) {
-            // lastSlash -> lastDot
-            subStr = lastSlash + 1;
-            subLen = (NSUInteger)(lastDot - subStr);
-        } else {
-            // lastSlash -> endOfString
-            subStr = lastSlash + 1;
-            subLen = (NSUInteger)(p - subStr);
-        }
-    } else {
-        if (lastDot) {
-            // startOfString -> lastDot
-            subStr = (char *)filePath;
-            subLen = (NSUInteger)(lastDot - subStr);
-        } else {
-            // startOfString -> endOfString
-            subStr = (char *)filePath;
-            subLen = (NSUInteger)(p - subStr);
-        }
-    }
-
-    if (copy) {
-        return [[NSString alloc] initWithBytes:subStr
-                                        length:subLen
-                                      encoding:NSUTF8StringEncoding];
-    } else {
-        // We can take advantage of the fact that __FILE__ is a string literal.
-        // Specifically, we don't need to waste time copying the string.
-        // We can just tell NSString to point to a range within the string literal.
-
-        return [[NSString alloc] initWithBytesNoCopy:subStr
-                                              length:subLen
-                                            encoding:NSUTF8StringEncoding
-                                        freeWhenDone:NO];
-    }
-}
-
-@end
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark -
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-@implementation DDLoggerNode
-
-- (instancetype)initWithLogger:(id <DDLogger>)logger loggerQueue:(dispatch_queue_t)loggerQueue level:(DDLogLevel)level {
-    if ((self = [super init])) {
-        _logger = logger;
-
-        if (loggerQueue) {
-            _loggerQueue = loggerQueue;
-            #if !OS_OBJECT_USE_OBJC
-            dispatch_retain(loggerQueue);
-            #endif
-        }
-
-        _level = level;
-    }
-    return self;
-}
-
-+ (DDLoggerNode *)nodeWithLogger:(id <DDLogger>)logger loggerQueue:(dispatch_queue_t)loggerQueue level:(DDLogLevel)level {
-    return [[DDLoggerNode alloc] initWithLogger:logger loggerQueue:loggerQueue level:level];
-}
-
-- (void)dealloc {
-    #if !OS_OBJECT_USE_OBJC
-    if (_loggerQueue) {
-        dispatch_release(_loggerQueue);
-    }
-    #endif
-}
-
-@end
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark -
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-@implementation DDLogMessage
-
-- (instancetype)init {
-    self = [super init];
-    return self;
-}
-
-- (instancetype)initWithMessage:(NSString *)message
-                          level:(DDLogLevel)level
-                           flag:(DDLogFlag)flag
-                        context:(NSInteger)context
-                           file:(NSString *)file
-                       function:(NSString *)function
-                           line:(NSUInteger)line
-                            tag:(id)tag
-                        options:(DDLogMessageOptions)options
-                      timestamp:(NSDate *)timestamp {
-    if ((self = [super init])) {
-        BOOL copyMessage = (options & DDLogMessageDontCopyMessage) == 0;
-        _message      = copyMessage ? [message copy] : message;
-        _level        = level;
-        _flag         = flag;
-        _context      = context;
-
-        BOOL copyFile = (options & DDLogMessageCopyFile) != 0;
-        _file = copyFile ? [file copy] : file;
-
-        BOOL copyFunction = (options & DDLogMessageCopyFunction) != 0;
-        _function = copyFunction ? [function copy] : function;
-
-        _line         = line;
-        _tag          = tag;
-        _options      = options;
-        _timestamp    = timestamp ?: [NSDate new];
-
-        __uint64_t tid;
-        if (pthread_threadid_np(NULL, &tid) == 0) {
-            _threadID = [[NSString alloc] initWithFormat:@"%llu", tid];
-        } else {
-            _threadID = @"missing threadId";
-        }
-        _threadName   = NSThread.currentThread.name;
-
-        // Get the file name without extension
-        _fileName = [_file lastPathComponent];
-        NSUInteger dotLocation = [_fileName rangeOfString:@"." options:NSBackwardsSearch].location;
-        if (dotLocation != NSNotFound)
-        {
-            _fileName = [_fileName substringToIndex:dotLocation];
-        }
-
-        // Try to get the current queue's label
-        _queueLabel = [[NSString alloc] initWithFormat:@"%s", dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL)];
-    }
-    return self;
-}
-
-- (id)copyWithZone:(NSZone * __attribute__((unused)))zone {
-    DDLogMessage *newMessage = [DDLogMessage new];
-
-    newMessage->_message = _message;
-    newMessage->_level = _level;
-    newMessage->_flag = _flag;
-    newMessage->_context = _context;
-    newMessage->_file = _file;
-    newMessage->_fileName = _fileName;
-    newMessage->_function = _function;
-    newMessage->_line = _line;
-    newMessage->_tag = _tag;
-    newMessage->_options = _options;
-    newMessage->_timestamp = _timestamp;
-    newMessage->_threadID = _threadID;
-    newMessage->_threadName = _threadName;
-    newMessage->_queueLabel = _queueLabel;
-
-    return newMessage;
-}
-
-@end
-
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark -
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-@implementation DDAbstractLogger
-
-- (instancetype)init {
-    if ((self = [super init])) {
-        const char *loggerQueueName = NULL;
-
-        if ([self respondsToSelector:@selector(loggerName)]) {
-            loggerQueueName = [[self loggerName] UTF8String];
-        }
-
-        _loggerQueue = dispatch_queue_create(loggerQueueName, NULL);
-
-        // We're going to use dispatch_queue_set_specific() to "mark" our loggerQueue.
-        // Later we can use dispatch_get_specific() to determine if we're executing on our loggerQueue.
-        // The documentation states:
-        //
-        // > Keys are only compared as pointers and are never dereferenced.
-        // > Thus, you can use a pointer to a static variable for a specific subsystem or
-        // > any other value that allows you to identify the value uniquely.
-        // > Specifying a pointer to a string constant is not recommended.
-        //
-        // So we're going to use the very convenient key of "self",
-        // which also works when multiple logger classes extend this class, as each will have a different "self" key.
-        //
-        // This is used primarily for thread-safety assertions (via the isOnInternalLoggerQueue method below).
-
-        void *key = (__bridge void *)self;
-        void *nonNullValue = (__bridge void *)self;
-
-        dispatch_queue_set_specific(_loggerQueue, key, nonNullValue, NULL);
-    }
-
-    return self;
-}
-
-- (void)dealloc {
-    #if !OS_OBJECT_USE_OBJC
-
-    if (_loggerQueue) {
-        dispatch_release(_loggerQueue);
-    }
-
-    #endif
-}
-
-- (void)logMessage:(DDLogMessage * __attribute__((unused)))logMessage {
-    // Override me
-}
-
-- (id <DDLogFormatter>)logFormatter {
-    // This method must be thread safe and intuitive.
-    // Therefore if somebody executes the following code:
-    //
-    // [logger setLogFormatter:myFormatter];
-    // formatter = [logger logFormatter];
-    //
-    // They would expect formatter to equal myFormatter.
-    // This functionality must be ensured by the getter and setter method.
-    //
-    // The thread safety must not come at a cost to the performance of the logMessage method.
-    // This method is likely called sporadically, while the logMessage method is called repeatedly.
-    // This means, the implementation of this method:
-    // - Must NOT require the logMessage method to acquire a lock.
-    // - Must NOT require the logMessage method to access an atomic property (also a lock of sorts).
-    //
-    // Thread safety is ensured by executing access to the formatter variable on the loggerQueue.
-    // This is the same queue that the logMessage method operates on.
-    //
-    // Note: The last time I benchmarked the performance of direct access vs atomic property access,
-    // direct access was over twice as fast on the desktop and over 6 times as fast on the iPhone.
-    //
-    // Furthermore, consider the following code:
-    //
-    // DDLogVerbose(@"log msg 1");
-    // DDLogVerbose(@"log msg 2");
-    // [logger setFormatter:myFormatter];
-    // DDLogVerbose(@"log msg 3");
-    //
-    // Our intuitive requirement means that the new formatter will only apply to the 3rd log message.
-    // This must remain true even when using asynchronous logging.
-    // We must keep in mind the various queue's that are in play here:
-    //
-    // loggerQueue : Our own private internal queue that the logMessage method runs on.
-    //               Operations are added to this queue from the global loggingQueue.
-    //
-    // globalLoggingQueue : The queue that all log messages go through before they arrive in our loggerQueue.
-    //
-    // All log statements go through the serial globalLoggingQueue before they arrive at our loggerQueue.
-    // Thus this method also goes through the serial globalLoggingQueue to ensure intuitive operation.
-
-    // IMPORTANT NOTE:
-    //
-    // Methods within the DDLogger implementation MUST access the formatter ivar directly.
-    // This method is designed explicitly for external access.
-    //
-    // Using "self." syntax to go through this method will cause immediate deadlock.
-    // This is the intended result. Fix it by accessing the ivar directly.
-    // Great strides have been take to ensure this is safe to do. Plus it's MUCH faster.
-
-    NSAssert(![self isOnGlobalLoggingQueue], @"Core architecture requirement failure");
-    NSAssert(![self isOnInternalLoggerQueue], @"MUST access ivar directly, NOT via self.* syntax.");
-
-    dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
-
-    __block id <DDLogFormatter> result;
-
-    dispatch_sync(globalLoggingQueue, ^{
-        dispatch_sync(self->_loggerQueue, ^{
-            result = self->_logFormatter;
-        });
-    });
-
-    return result;
-}
-
-- (void)setLogFormatter:(id <DDLogFormatter>)logFormatter {
-    // The design of this method is documented extensively in the logFormatter message (above in code).
-
-    NSAssert(![self isOnGlobalLoggingQueue], @"Core architecture requirement failure");
-    NSAssert(![self isOnInternalLoggerQueue], @"MUST access ivar directly, NOT via self.* syntax.");
-
-    dispatch_block_t block = ^{
-        @autoreleasepool {
-            if (self->_logFormatter != logFormatter) {
-                if ([self->_logFormatter respondsToSelector:@selector(willRemoveFromLogger:)]) {
-                    [self->_logFormatter willRemoveFromLogger:self];
-                }
-
-                self->_logFormatter = logFormatter;
-
-                if ([self->_logFormatter respondsToSelector:@selector(didAddToLogger:inQueue:)]) {
-                    [self->_logFormatter didAddToLogger:self inQueue:self->_loggerQueue];
-                } else if ([self->_logFormatter respondsToSelector:@selector(didAddToLogger:)]) {
-                    [self->_logFormatter didAddToLogger:self];
-                }
-            }
-        }
-    };
-
-    dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
-
-    dispatch_async(globalLoggingQueue, ^{
-        dispatch_async(self->_loggerQueue, block);
-    });
-}
-
-- (dispatch_queue_t)loggerQueue {
-    return _loggerQueue;
-}
-
-- (NSString *)loggerName {
-    return NSStringFromClass([self class]);
-}
-
-- (BOOL)isOnGlobalLoggingQueue {
-    return (dispatch_get_specific(GlobalLoggingQueueIdentityKey) != NULL);
-}
-
-- (BOOL)isOnInternalLoggerQueue {
-    void *key = (__bridge void *)self;
-
-    return (dispatch_get_specific(key) != NULL);
-}
-
-@end
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark -
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-@interface DDLoggerInformation()
-{
-    // Direct accessors to be used only for performance
-    @public
-    id <DDLogger> _logger;
-    DDLogLevel _level;
-}
-
-@end
-
-@implementation DDLoggerInformation
-
-- (instancetype)initWithLogger:(id <DDLogger>)logger andLevel:(DDLogLevel)level {
-    if ((self = [super init])) {
-        _logger = logger;
-        _level = level;
-    }
-    return self;
-}
-
-+ (DDLoggerInformation *)informationWithLogger:(id <DDLogger>)logger andLevel:(DDLogLevel)level {
-    return [[DDLoggerInformation alloc] initWithLogger:logger andLevel:level];
-}
-
-@end

+ 0 - 101
Carthage/Checkouts/CocoaLumberjack/Classes/DDLogMacros.h

@@ -1,101 +0,0 @@
-// Software License Agreement (BSD License)
-//
-// Copyright (c) 2010-2019, Deusty, LLC
-// All rights reserved.
-//
-// Redistribution and use of this software in source and binary forms,
-// with or without modification, are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above copyright notice,
-//   this list of conditions and the following disclaimer.
-//
-// * Neither the name of Deusty nor the names of its contributors may be used
-//   to endorse or promote products derived from this software without specific
-//   prior written permission of Deusty, LLC.
-
-// Disable legacy macros
-#ifndef DD_LEGACY_MACROS
-    #define DD_LEGACY_MACROS 0
-#endif
-
-#import <CocoaLumberjack/DDLog.h>
-
-/**
- * The constant/variable/method responsible for controlling the current log level.
- **/
-#ifndef LOG_LEVEL_DEF
-    #define LOG_LEVEL_DEF ddLogLevel
-#endif
-
-/**
- * Whether async should be used by log messages, excluding error messages that are always sent sync.
- **/
-#ifndef LOG_ASYNC_ENABLED
-    #define LOG_ASYNC_ENABLED YES
-#endif
-
-/**
- * These are the two macros that all other macros below compile into.
- * These big multiline macros makes all the other macros easier to read.
- **/
-#define LOG_MACRO(isAsynchronous, lvl, flg, ctx, atag, fnct, frmt, ...) \
-        [DDLog log : isAsynchronous                                     \
-             level : lvl                                                \
-              flag : flg                                                \
-           context : ctx                                                \
-              file : __FILE__                                           \
-          function : fnct                                               \
-              line : __LINE__                                           \
-               tag : atag                                               \
-            format : (frmt), ## __VA_ARGS__]
-
-#define LOG_MACRO_TO_DDLOG(ddlog, isAsynchronous, lvl, flg, ctx, atag, fnct, frmt, ...) \
-        [ddlog log : isAsynchronous                                     \
-             level : lvl                                                \
-              flag : flg                                                \
-           context : ctx                                                \
-              file : __FILE__                                           \
-          function : fnct                                               \
-              line : __LINE__                                           \
-               tag : atag                                               \
-            format : (frmt), ## __VA_ARGS__]
-
-/**
- * Define version of the macro that only execute if the log level is above the threshold.
- * The compiled versions essentially look like this:
- *
- * if (logFlagForThisLogMsg & ddLogLevel) { execute log message }
- *
- * When LOG_LEVEL_DEF is defined as ddLogLevel.
- *
- * As shown further below, Lumberjack actually uses a bitmask as opposed to primitive log levels.
- * This allows for a great amount of flexibility and some pretty advanced fine grained logging techniques.
- *
- * Note that when compiler optimizations are enabled (as they are for your release builds),
- * the log messages above your logging threshold will automatically be compiled out.
- *
- * (If the compiler sees LOG_LEVEL_DEF/ddLogLevel declared as a constant, the compiler simply checks to see
- *  if the 'if' statement would execute, and if not it strips it from the binary.)
- *
- * We also define shorthand versions for asynchronous and synchronous logging.
- **/
-#define LOG_MAYBE(async, lvl, flg, ctx, tag, fnct, frmt, ...) \
-        do { if(lvl & flg) LOG_MACRO(async, lvl, flg, ctx, tag, fnct, frmt, ##__VA_ARGS__); } while(0)
-
-#define LOG_MAYBE_TO_DDLOG(ddlog, async, lvl, flg, ctx, tag, fnct, frmt, ...) \
-        do { if(lvl & flg) LOG_MACRO_TO_DDLOG(ddlog, async, lvl, flg, ctx, tag, fnct, frmt, ##__VA_ARGS__); } while(0)
-
-/**
- * Ready to use log macros with no context or tag.
- **/
-#define DDLogError(frmt, ...)   LOG_MAYBE(NO,                LOG_LEVEL_DEF, DDLogFlagError,   0, nil, __PRETTY_FUNCTION__, frmt, ##__VA_ARGS__)
-#define DDLogWarn(frmt, ...)    LOG_MAYBE(LOG_ASYNC_ENABLED, LOG_LEVEL_DEF, DDLogFlagWarning, 0, nil, __PRETTY_FUNCTION__, frmt, ##__VA_ARGS__)
-#define DDLogInfo(frmt, ...)    LOG_MAYBE(LOG_ASYNC_ENABLED, LOG_LEVEL_DEF, DDLogFlagInfo,    0, nil, __PRETTY_FUNCTION__, frmt, ##__VA_ARGS__)
-#define DDLogDebug(frmt, ...)   LOG_MAYBE(LOG_ASYNC_ENABLED, LOG_LEVEL_DEF, DDLogFlagDebug,   0, nil, __PRETTY_FUNCTION__, frmt, ##__VA_ARGS__)
-#define DDLogVerbose(frmt, ...) LOG_MAYBE(LOG_ASYNC_ENABLED, LOG_LEVEL_DEF, DDLogFlagVerbose, 0, nil, __PRETTY_FUNCTION__, frmt, ##__VA_ARGS__)
-
-#define DDLogErrorToDDLog(ddlog, frmt, ...)   LOG_MAYBE_TO_DDLOG(ddlog, NO,                LOG_LEVEL_DEF, DDLogFlagError,   0, nil, __PRETTY_FUNCTION__, frmt, ##__VA_ARGS__)
-#define DDLogWarnToDDLog(ddlog, frmt, ...)    LOG_MAYBE_TO_DDLOG(ddlog, LOG_ASYNC_ENABLED, LOG_LEVEL_DEF, DDLogFlagWarning, 0, nil, __PRETTY_FUNCTION__, frmt, ##__VA_ARGS__)
-#define DDLogInfoToDDLog(ddlog, frmt, ...)    LOG_MAYBE_TO_DDLOG(ddlog, LOG_ASYNC_ENABLED, LOG_LEVEL_DEF, DDLogFlagInfo,    0, nil, __PRETTY_FUNCTION__, frmt, ##__VA_ARGS__)
-#define DDLogDebugToDDLog(ddlog, frmt, ...)   LOG_MAYBE_TO_DDLOG(ddlog, LOG_ASYNC_ENABLED, LOG_LEVEL_DEF, DDLogFlagDebug,   0, nil, __PRETTY_FUNCTION__, frmt, ##__VA_ARGS__)
-#define DDLogVerboseToDDLog(ddlog, frmt, ...) LOG_MAYBE_TO_DDLOG(ddlog, LOG_ASYNC_ENABLED, LOG_LEVEL_DEF, DDLogFlagVerbose, 0, nil, __PRETTY_FUNCTION__, frmt, ##__VA_ARGS__)

+ 0 - 50
Carthage/Checkouts/CocoaLumberjack/Classes/DDOSLogger.h

@@ -1,50 +0,0 @@
-// Software License Agreement (BSD License)
-//
-// Copyright (c) 2010-2019, Deusty, LLC
-// All rights reserved.
-//
-// Redistribution and use of this software in source and binary forms,
-// with or without modification, are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above copyright notice,
-//   this list of conditions and the following disclaimer.
-//
-// * Neither the name of Deusty nor the names of its contributors may be used
-//   to endorse or promote products derived from this software without specific
-//   prior written permission of Deusty, LLC.
-
-#import <Foundation/Foundation.h>
-
-// Disable legacy macros
-#ifndef DD_LEGACY_MACROS
-    #define DD_LEGACY_MACROS 0
-#endif
-
-#import <CocoaLumberjack/DDLog.h>
-
-/**
- * This class provides a logger for the Apple os_log facility.
- **/
-API_AVAILABLE(macos(10.12), ios(10.0), watchos(3.0), tvos(10.0))
-@interface DDOSLogger : DDAbstractLogger <DDLogger>
-
-/**
- *  Singleton method
- *
- *  @return the shared instance with OS_LOG_DEFAULT.
- */
-@property (class, readonly, strong) DDOSLogger *sharedInstance;
-
-/**
- Designed initializer
- 
- @param subsystem Desired subsystem in log. Consider "org.example"
- @param category Desired category in log. Consider "Point of interests."
- @return New instance of DDOSLogger.
- 
- @discussion This method accepts parameters of type (String, String)?
- If both parameters are nil, this method will return logger wrapper for `OS_LOG_DEFAULT`.
- If both parameters are not nil, it will return logger wrapper for `os_log_create(subsystem, category)`
- */
-- (instancetype)initWithSubsystem:(NSString *)subsystem category:(NSString *)category NS_DESIGNATED_INITIALIZER;
-@end

+ 0 - 120
Carthage/Checkouts/CocoaLumberjack/Classes/DDOSLogger.m

@@ -1,120 +0,0 @@
-// Software License Agreement (BSD License)
-//
-// Copyright (c) 2010-2019, Deusty, LLC
-// All rights reserved.
-//
-// Redistribution and use of this software in source and binary forms,
-// with or without modification, are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above copyright notice,
-//   this list of conditions and the following disclaimer.
-//
-// * Neither the name of Deusty nor the names of its contributors may be used
-//   to endorse or promote products derived from this software without specific
-//   prior written permission of Deusty, LLC.
-
-#import "DDOSLogger.h"
-
-#import <os/log.h>
-
-@interface DDOSLogger () {
-    NSString *_subsystem;
-    NSString *_category;
-}
-@property (copy, nonatomic, readonly) NSString *subsystem;
-@property (copy, nonatomic, readonly) NSString *category;
-@property (strong, nonatomic, readwrite) os_log_t  logger;
-@end
-
-@implementation DDOSLogger
-
-@synthesize subsystem = _subsystem;
-@synthesize category = _category;
-
-#pragma mark - Initialization
-
-/**
- * Assertion
- * Swift: (String, String)?
- */
-- (instancetype)initWithSubsystem:(NSString *)subsystem category:(NSString *)category {
-    NSAssert((subsystem == nil) == (category == nil), @"Either both subsystem and category or neither can be nil.");
-    if (self = [super init]) {
-        _subsystem = [subsystem copy];
-        _category = [category copy];
-    }
-    return self;
-}
-
-static DDOSLogger *sharedInstance;
-
-- (instancetype)init {
-    return [self initWithSubsystem:nil category:nil];
-}
-
-+ (instancetype)sharedInstance {
-    static dispatch_once_t DDOSLoggerOnceToken;
-
-    dispatch_once(&DDOSLoggerOnceToken, ^{
-        sharedInstance = [[[self class] alloc] init];
-    });
-
-    return sharedInstance;
-}
-
-#pragma mark - os_log
-
-- (os_log_t)getLogger {
-    if (self.subsystem == nil || self.category == nil) {
-        return OS_LOG_DEFAULT;
-    }
-    __auto_type subdomain = self.subsystem.UTF8String;
-    __auto_type category = self.category.UTF8String;
-    return os_log_create(subdomain, category);
-}
-
-- (os_log_t)logger {
-    if (_logger == nil)  {
-        _logger = [self getLogger];
-    }
-    return _logger;
-}
-
-#pragma mark - DDLogger
-
-- (void)logMessage:(DDLogMessage *)logMessage {
-    // Skip captured log messages
-    if ([logMessage->_fileName isEqualToString:@"DDASLLogCapture"]) {
-        return;
-    }
-
-    if(@available(iOS 10.0, macOS 10.12, tvOS 10.0, watchOS 3.0, *)) {
-
-        NSString * message = _logFormatter ? [_logFormatter formatLogMessage:logMessage] : logMessage->_message;
-        if (message != nil) {
-            const char *msg = [message UTF8String];
-            __auto_type logger = [self logger];
-            switch (logMessage->_flag) {
-                case DDLogFlagError     :
-                    os_log_error(logger, "%{public}s", msg);
-                    break;
-                case DDLogFlagWarning   :
-                case DDLogFlagInfo      :
-                    os_log_info(logger, "%{public}s", msg);
-                    break;
-                case DDLogFlagDebug     :
-                case DDLogFlagVerbose   :
-                default                 :
-                    os_log_debug(logger, "%{public}s", msg);
-                    break;
-            }
-        }
-
-    }
-
-}
-
-- (DDLoggerName)loggerName {
-    return DDLoggerNameOS;
-}
-@end

+ 0 - 178
Carthage/Checkouts/CocoaLumberjack/Classes/DDTTYLogger.h

@@ -1,178 +0,0 @@
-// Software License Agreement (BSD License)
-//
-// Copyright (c) 2010-2019, Deusty, LLC
-// All rights reserved.
-//
-// Redistribution and use of this software in source and binary forms,
-// with or without modification, are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above copyright notice,
-//   this list of conditions and the following disclaimer.
-//
-// * Neither the name of Deusty nor the names of its contributors may be used
-//   to endorse or promote products derived from this software without specific
-//   prior written permission of Deusty, LLC.
-
-// Disable legacy macros
-#ifndef DD_LEGACY_MACROS
-    #define DD_LEGACY_MACROS 0
-#endif
-
-#import <CocoaLumberjack/DDLog.h>
-
-#define LOG_CONTEXT_ALL INT_MAX
-
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wunused-function"
-#if !(TARGET_OS_OSX)
-    // iOS or tvOS or watchOS
-    #import <UIKit/UIColor.h>
-    typedef UIColor DDColor;
-    static inline DDColor* DDMakeColor(CGFloat r, CGFloat g, CGFloat b) {return [DDColor colorWithRed:(r/255.0f) green:(g/255.0f) blue:(b/255.0f) alpha:1.0f];}
-#elif defined(DD_CLI) || !__has_include(<AppKit/NSColor.h>)
-    // OS X CLI
-    #import <CocoaLumberjack/CLIColor.h>
-    typedef CLIColor DDColor;
-    static inline DDColor* DDMakeColor(CGFloat r, CGFloat g, CGFloat b) {return [DDColor colorWithCalibratedRed:(r/255.0f) green:(g/255.0f) blue:(b/255.0f) alpha:1.0f];}
-#else
-    // OS X with AppKit
-    #import <AppKit/NSColor.h>
-    typedef NSColor DDColor;
-    static inline DDColor* DDMakeColor(CGFloat r, CGFloat g, CGFloat b) {return [DDColor colorWithCalibratedRed:(r/255.0f) green:(g/255.0f) blue:(b/255.0f) alpha:1.0f];}
-#endif
-#pragma clang diagnostic pop
-
-
-/**
- * This class provides a logger for Terminal output or Xcode console output,
- * depending on where you are running your code.
- *
- * As described in the "Getting Started" page,
- * the traditional NSLog() function directs it's output to two places:
- *
- * - Apple System Log (so it shows up in Console.app)
- * - StdErr (if stderr is a TTY, so log statements show up in Xcode console)
- *
- * To duplicate NSLog() functionality you can simply add this logger and an asl logger.
- * However, if you instead choose to use file logging (for faster performance),
- * you may choose to use only a file logger and a tty logger.
- **/
-@interface DDTTYLogger : DDAbstractLogger <DDLogger>
-
-/**
- *  Singleton method
- */
-@property (class, readonly, strong) DDTTYLogger *sharedInstance;
-
-/* Inherited from the DDLogger protocol:
- *
- * Formatters may optionally be added to any logger.
- *
- * If no formatter is set, the logger simply logs the message as it is given in logMessage,
- * or it may use its own built in formatting style.
- *
- * More information about formatters can be found here:
- * Documentation/CustomFormatters.md
- *
- * The actual implementation of these methods is inherited from DDAbstractLogger.
-
-   - (id <DDLogFormatter>)logFormatter;
-   - (void)setLogFormatter:(id <DDLogFormatter>)formatter;
-
- */
-
-/**
- * Want to use different colors for different log levels?
- * Enable this property.
- *
- * If you run the application via the Terminal (not Xcode),
- * the logger will map colors to xterm-256color or xterm-color (if available).
- *
- * Xcode does NOT natively support colors in the Xcode debugging console.
- * You'll need to install the XcodeColors plugin to see colors in the Xcode console.
- * https://github.com/robbiehanson/XcodeColors
- *
- * The default value is NO.
- **/
-@property (readwrite, assign) BOOL colorsEnabled;
-
-/**
- * When using a custom formatter you can set the `logMessage` method not to append
- * `\n` character after each output. This allows for some greater flexibility with
- * custom formatters. Default value is YES.
- **/
-@property (nonatomic, readwrite, assign) BOOL automaticallyAppendNewlineForCustomFormatters;
-
-/**
- * The default color set (foregroundColor, backgroundColor) is:
- *
- * - DDLogFlagError   = (red, nil)
- * - DDLogFlagWarning = (orange, nil)
- *
- * You can customize the colors however you see fit.
- * Please note that you are passing a flag, NOT a level.
- *
- * GOOD : [ttyLogger setForegroundColor:pink backgroundColor:nil forFlag:DDLogFlagInfo];  // <- Good :)
- *  BAD : [ttyLogger setForegroundColor:pink backgroundColor:nil forFlag:DDLogLevelInfo]; // <- BAD! :(
- *
- * DDLogFlagInfo  = 0...00100
- * DDLogLevelInfo = 0...00111 <- Would match DDLogFlagInfo and DDLogFlagWarning and DDLogFlagError
- *
- * If you run the application within Xcode, then the XcodeColors plugin is required.
- *
- * If you run the application from a shell, then DDTTYLogger will automatically map the given color to
- * the closest available color. (xterm-256color or xterm-color which have 256 and 16 supported colors respectively.)
- *
- * This method invokes setForegroundColor:backgroundColor:forFlag:context: and applies it to `LOG_CONTEXT_ALL`.
- **/
-- (void)setForegroundColor:(DDColor *)txtColor backgroundColor:(DDColor *)bgColor forFlag:(DDLogFlag)mask;
-
-/**
- * Just like setForegroundColor:backgroundColor:flag, but allows you to specify a particular logging context.
- *
- * A logging context is often used to identify log messages coming from a 3rd party framework,
- * although logging context's can be used for many different functions.
- *
- * Use LOG_CONTEXT_ALL to set the default color for all contexts that have no specific color set defined.
- *
- * Logging context's are explained in further detail here:
- * Documentation/CustomContext.md
- **/
-- (void)setForegroundColor:(DDColor *)txtColor backgroundColor:(DDColor *)bgColor forFlag:(DDLogFlag)mask context:(NSInteger)ctxt;
-
-/**
- * Similar to the methods above, but allows you to map DDLogMessage->tag to a particular color profile.
- * For example, you could do something like this:
- *
- * static NSString *const PurpleTag = @"PurpleTag";
- *
- * #define DDLogPurple(frmt, ...) LOG_OBJC_TAG_MACRO(NO, 0, 0, 0, PurpleTag, frmt, ##__VA_ARGS__)
- * 
- * And then where you configure CocoaLumberjack:
- *
- * purple = DDMakeColor((64/255.0), (0/255.0), (128/255.0));
- *
- * or any UIColor/NSColor constructor.
- *
- * Note: For CLI OS X projects that don't link with AppKit use CLIColor objects instead
- *
- * [[DDTTYLogger sharedInstance] setForegroundColor:purple backgroundColor:nil forTag:PurpleTag];
- * [DDLog addLogger:[DDTTYLogger sharedInstance]];
- *
- * This would essentially give you a straight NSLog replacement that prints in purple:
- *
- * DDLogPurple(@"I'm a purple log message!");
- **/
-- (void)setForegroundColor:(DDColor *)txtColor backgroundColor:(DDColor *)bgColor forTag:(id <NSCopying>)tag;
-
-/**
- * Clearing color profiles.
- **/
-- (void)clearColorsForFlag:(DDLogFlag)mask;
-- (void)clearColorsForFlag:(DDLogFlag)mask context:(NSInteger)context;
-- (void)clearColorsForTag:(id <NSCopying>)tag;
-- (void)clearColorsForAllFlags;
-- (void)clearColorsForAllTags;
-- (void)clearAllColors;
-
-@end

+ 0 - 1487
Carthage/Checkouts/CocoaLumberjack/Classes/DDTTYLogger.m

@@ -1,1487 +0,0 @@
-// Software License Agreement (BSD License)
-//
-// Copyright (c) 2010-2019, Deusty, LLC
-// All rights reserved.
-//
-// Redistribution and use of this software in source and binary forms,
-// with or without modification, are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above copyright notice,
-//   this list of conditions and the following disclaimer.
-//
-// * Neither the name of Deusty nor the names of its contributors may be used
-//   to endorse or promote products derived from this software without specific
-//   prior written permission of Deusty, LLC.
-
-#import "DDTTYLogger.h"
-
-#import <sys/uio.h>
-
-#if !__has_feature(objc_arc)
-#error This file must be compiled with ARC. Use -fobjc-arc flag (or convert project to ARC).
-#endif
-
-// We probably shouldn't be using DDLog() statements within the DDLog implementation.
-// But we still want to leave our log statements for any future debugging,
-// and to allow other developers to trace the implementation (which is a great learning tool).
-//
-// So we use primitive logging macros around NSLog.
-// We maintain the NS prefix on the macros to be explicit about the fact that we're using NSLog.
-
-#ifndef DD_NSLOG_LEVEL
-    #define DD_NSLOG_LEVEL 2
-#endif
-
-#define NSLogError(frmt, ...)    do{ if(DD_NSLOG_LEVEL >= 1) NSLog((frmt), ##__VA_ARGS__); } while(0)
-#define NSLogWarn(frmt, ...)     do{ if(DD_NSLOG_LEVEL >= 2) NSLog((frmt), ##__VA_ARGS__); } while(0)
-#define NSLogInfo(frmt, ...)     do{ if(DD_NSLOG_LEVEL >= 3) NSLog((frmt), ##__VA_ARGS__); } while(0)
-#define NSLogDebug(frmt, ...)    do{ if(DD_NSLOG_LEVEL >= 4) NSLog((frmt), ##__VA_ARGS__); } while(0)
-#define NSLogVerbose(frmt, ...)  do{ if(DD_NSLOG_LEVEL >= 5) NSLog((frmt), ##__VA_ARGS__); } while(0)
-
-// Xcode does NOT natively support colors in the Xcode debugging console.
-// You'll need to install the XcodeColors plugin to see colors in the Xcode console.
-// https://github.com/robbiehanson/XcodeColors
-//
-// The following is documentation from the XcodeColors project:
-//
-//
-// How to apply color formatting to your log statements:
-//
-// To set the foreground color:
-// Insert the ESCAPE_SEQ into your string, followed by "fg124,12,255;" where r=124, g=12, b=255.
-//
-// To set the background color:
-// Insert the ESCAPE_SEQ into your string, followed by "bg12,24,36;" where r=12, g=24, b=36.
-//
-// To reset the foreground color (to default value):
-// Insert the ESCAPE_SEQ into your string, followed by "fg;"
-//
-// To reset the background color (to default value):
-// Insert the ESCAPE_SEQ into your string, followed by "bg;"
-//
-// To reset the foreground and background color (to default values) in one operation:
-// Insert the ESCAPE_SEQ into your string, followed by ";"
-
-#define XCODE_COLORS_ESCAPE_SEQ "\033["
-
-#define XCODE_COLORS_RESET_FG   XCODE_COLORS_ESCAPE_SEQ "fg;" // Clear any foreground color
-#define XCODE_COLORS_RESET_BG   XCODE_COLORS_ESCAPE_SEQ "bg;" // Clear any background color
-#define XCODE_COLORS_RESET      XCODE_COLORS_ESCAPE_SEQ ";"  // Clear any foreground or background color
-
-// If running in a shell, not all RGB colors will be supported.
-// In this case we automatically map to the closest available color.
-// In order to provide this mapping, we have a hard-coded set of the standard RGB values available in the shell.
-// However, not every shell is the same, and Apple likes to think different even when it comes to shell colors.
-//
-// Map to standard Terminal.app colors (1), or
-// map to standard xterm colors (0).
-
-#define MAP_TO_TERMINAL_APP_COLORS 1
-
-typedef struct {
-  uint8_t r;
-  uint8_t g;
-  uint8_t b;
-} DDRGBColor;
-
-@interface DDTTYLoggerColorProfile : NSObject {
-    @public
-    DDLogFlag mask;
-    NSInteger context;
-
-    uint8_t fg_r;
-    uint8_t fg_g;
-    uint8_t fg_b;
-
-    uint8_t bg_r;
-    uint8_t bg_g;
-    uint8_t bg_b;
-
-    NSUInteger fgCodeIndex;
-    NSString *fgCodeRaw;
-
-    NSUInteger bgCodeIndex;
-    NSString *bgCodeRaw;
-
-    char fgCode[24];
-    size_t fgCodeLen;
-
-    char bgCode[24];
-    size_t bgCodeLen;
-
-    char resetCode[8];
-    size_t resetCodeLen;
-}
-
-- (instancetype)initWithForegroundColor:(DDColor *)fgColor backgroundColor:(DDColor *)bgColor flag:(DDLogFlag)mask context:(NSInteger)ctxt;
-
-@end
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark -
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-@interface DDTTYLogger () {
-    NSString *_appName;
-    char *_app;
-    size_t _appLen;
-    
-    NSString *_processID;
-    char *_pid;
-    size_t _pidLen;
-    
-    BOOL _colorsEnabled;
-    NSMutableArray *_colorProfilesArray;
-    NSMutableDictionary *_colorProfilesDict;
-}
-
-@end
-
-
-@implementation DDTTYLogger
-
-static BOOL isaColorTTY;
-static BOOL isaColor256TTY;
-static BOOL isaXcodeColorTTY;
-
-static NSArray *codes_fg = nil;
-static NSArray *codes_bg = nil;
-static NSArray *colors   = nil;
-
-static DDTTYLogger *sharedInstance;
-
-/**
- * Initializes the colors array, as well as the codes_fg and codes_bg arrays, for 16 color mode.
- *
- * This method is used when the application is running from within a shell that only supports 16 color mode.
- * This method is not invoked if the application is running within Xcode, or via normal UI app launch.
- **/
-+ (void)initialize_colors_16 {
-    if (codes_fg || codes_bg || colors) {
-        return;
-    }
-
-    NSMutableArray *m_colors   = [NSMutableArray arrayWithCapacity:16];
-
-    // In a standard shell only 16 colors are supported.
-    //
-    // More information about ansi escape codes can be found online.
-    // http://en.wikipedia.org/wiki/ANSI_escape_code
-    codes_fg = @[
-        @"30m",  // normal - black
-        @"31m",  // normal - red
-        @"32m",  // normal - green
-        @"33m",  // normal - yellow
-        @"34m",  // normal - blue
-        @"35m",  // normal - magenta
-        @"36m",  // normal - cyan
-        @"37m",  // normal - gray
-        @"1;30m",  // bright - darkgray
-        @"1;31m",  // bright - red
-        @"1;32m",  // bright - green
-        @"1;33m",  // bright - yellow
-        @"1;34m",  // bright - blue
-        @"1;35m",  // bright - magenta
-        @"1;36m",  // bright - cyan
-        @"1;37m",  // bright - white
-    ];
-
-    codes_bg = @[
-        @"40m",  // normal - black
-        @"41m",  // normal - red
-        @"42m",  // normal - green
-        @"43m",  // normal - yellow
-        @"44m",  // normal - blue
-        @"45m",  // normal - magenta
-        @"46m",  // normal - cyan
-        @"47m",  // normal - gray
-        @"1;40m",  // bright - darkgray
-        @"1;41m",  // bright - red
-        @"1;42m",  // bright - green
-        @"1;43m",  // bright - yellow
-        @"1;44m",  // bright - blue
-        @"1;45m",  // bright - magenta
-        @"1;46m",  // bright - cyan
-        @"1;47m",  // bright - white
-    ];
-
-
-#if MAP_TO_TERMINAL_APP_COLORS
-
-    // Standard Terminal.app colors:
-    //
-    // These are the default colors used by Apple's Terminal.app.
-    DDRGBColor rgbColors[] = {
-        {  0,   0,   0}, // normal - black
-        {194,  54,  33}, // normal - red
-        { 37, 188,  36}, // normal - green
-        {173, 173,  39}, // normal - yellow
-        { 73,  46, 225}, // normal - blue
-        {211,  56, 211}, // normal - magenta
-        { 51, 187, 200}, // normal - cyan
-        {203, 204, 205}, // normal - gray
-        {129, 131, 131}, // bright - darkgray
-        {252,  57,  31}, // bright - red
-        { 49, 231,  34}, // bright - green
-        {234, 236,  35}, // bright - yellow
-        { 88,  51, 255}, // bright - blue
-        {249,  53, 248}, // bright - magenta
-        { 20, 240, 240}, // bright - cyan
-        {233, 235, 235}, // bright - white
-    };
-
-#else /* if MAP_TO_TERMINAL_APP_COLORS */
-
-    // Standard xterm colors:
-    //
-    // These are the default colors used by most xterm shells.
-
-    DDRGBColor rgbColors[] = {
-        {  0,   0,   0}, // normal - black
-        {205,   0,   0}, // normal - red
-        {  0, 205,   0}, // normal - green
-        {205, 205,   0}, // normal - yellow
-        {  0,   0, 238}, // normal - blue
-        {205,   0, 205}, // normal - magenta
-        {  0, 205, 205}, // normal - cyan
-        {229, 229, 229}, // normal - gray
-        {127, 127, 127}, // bright - darkgray
-        {255,   0,   0}, // bright - red
-        {  0, 255,   0}, // bright - green
-        {255, 255,   0}, // bright - yellow
-        { 92,  92, 255}, // bright - blue
-        {255,   0, 255}, // bright - magenta
-        {  0, 255, 255}, // bright - cyan
-        {255, 255, 255}, // bright - white
-    };
-#endif /* if MAP_TO_TERMINAL_APP_COLORS */
-
-    for (size_t i = 0; i < sizeof(rgbColors) / sizeof(rgbColors[0]); ++i) {
-        [m_colors addObject:DDMakeColor(rgbColors[i].r, rgbColors[i].g, rgbColors[i].b)];
-    }
-    colors   = [m_colors   copy];
-
-    NSAssert([codes_fg count] == [codes_bg count], @"Invalid colors/codes array(s)");
-    NSAssert([codes_fg count] == [colors count],   @"Invalid colors/codes array(s)");
-}
-
-/**
- * Initializes the colors array, as well as the codes_fg and codes_bg arrays, for 256 color mode.
- *
- * This method is used when the application is running from within a shell that supports 256 color mode.
- * This method is not invoked if the application is running within Xcode, or via normal UI app launch.
- **/
-+ (void)initialize_colors_256 {
-    if (codes_fg || codes_bg || colors) {
-        return;
-    }
-
-    NSMutableArray *m_codes_fg = [NSMutableArray arrayWithCapacity:(256 - 16)];
-    NSMutableArray *m_codes_bg = [NSMutableArray arrayWithCapacity:(256 - 16)];
-    NSMutableArray *m_colors   = [NSMutableArray arrayWithCapacity:(256 - 16)];
-
-    #if MAP_TO_TERMINAL_APP_COLORS
-
-    // Standard Terminal.app colors:
-    //
-    // These are the colors the Terminal.app uses in xterm-256color mode.
-    // In this mode, the terminal supports 256 different colors, specified by 256 color codes.
-    //
-    // The first 16 color codes map to the original 16 color codes supported by the earlier xterm-color mode.
-    // These are actually configurable, and thus we ignore them for the purposes of mapping,
-    // as we can't rely on them being constant. They are largely duplicated anyway.
-    //
-    // The next 216 color codes are designed to run the spectrum, with several shades of every color.
-    // While the color codes are standardized, the actual RGB values for each color code is not.
-    // Apple's Terminal.app uses different RGB values from that of a standard xterm.
-    // Apple's choices in colors are designed to be a little nicer on the eyes.
-    //
-    // The last 24 color codes represent a grayscale.
-    //
-    // Unfortunately, unlike the standard xterm color chart,
-    // Apple's RGB values cannot be calculated using a simple formula (at least not that I know of).
-    // Also, I don't know of any ways to programmatically query the shell for the RGB values.
-    // So this big giant color chart had to be made by hand.
-    //
-    // More information about ansi escape codes can be found online.
-    // http://en.wikipedia.org/wiki/ANSI_escape_code
-
-    // Colors
-    DDRGBColor rgbColors[] = {
-        { 47,  49,  49},
-        { 60,  42, 144},
-        { 66,  44, 183},
-        { 73,  46, 222},
-        { 81,  50, 253},
-        { 88,  51, 255},
-
-        { 42, 128,  37},
-        { 42, 127, 128},
-        { 44, 126, 169},
-        { 56, 125, 209},
-        { 59, 124, 245},
-        { 66, 123, 255},
-
-        { 51, 163,  41},
-        { 39, 162, 121},
-        { 42, 161, 162},
-        { 53, 160, 202},
-        { 45, 159, 240},
-        { 58, 158, 255},
-
-        { 31, 196,  37},
-        { 48, 196, 115},
-        { 39, 195, 155},
-        { 49, 195, 195},
-        { 32, 194, 235},
-        { 53, 193, 255},
-
-        { 50, 229,  35},
-        { 40, 229, 109},
-        { 27, 229, 149},
-        { 49, 228, 189},
-        { 33, 228, 228},
-        { 53, 227, 255},
-
-        { 27, 254,  30},
-        { 30, 254, 103},
-        { 45, 254, 143},
-        { 38, 253, 182},
-        { 38, 253, 222},
-        { 42, 253, 252},
-
-        {140,  48,  40},
-        {136,  51, 136},
-        {135,  52, 177},
-        {134,  52, 217},
-        {135,  56, 248},
-        {134,  53, 255},
-
-        {125, 125,  38},
-        {124, 125, 125},
-        {122, 124, 166},
-        {123, 124, 207},
-        {123, 122, 247},
-        {124, 121, 255},
-
-        {119, 160,  35},
-        {117, 160, 120},
-        {117, 160, 160},
-        {115, 159, 201},
-        {116, 158, 240},
-        {117, 157, 255},
-
-        {113, 195,  39},
-        {110, 194, 114},
-        {111, 194, 154},
-        {108, 194, 194},
-        {109, 193, 234},
-        {108, 192, 255},
-
-        {105, 228,  30},
-        {103, 228, 109},
-        {105, 228, 148},
-        {100, 227, 188},
-        { 99, 227, 227},
-        { 99, 226, 253},
-
-        { 92, 253,  34},
-        { 96, 253, 103},
-        { 97, 253, 142},
-        { 88, 253, 182},
-        { 93, 253, 221},
-        { 88, 254, 251},
-
-        {177,  53,  34},
-        {174,  54, 131},
-        {172,  55, 172},
-        {171,  57, 213},
-        {170,  55, 249},
-        {170,  57, 255},
-
-        {165, 123,  37},
-        {163, 123, 123},
-        {162, 123, 164},
-        {161, 122, 205},
-        {161, 121, 241},
-        {161, 121, 255},
-
-        {158, 159,  33},
-        {157, 158, 118},
-        {157, 158, 159},
-        {155, 157, 199},
-        {155, 157, 239},
-        {154, 156, 255},
-
-        {152, 193,  40},
-        {151, 193, 113},
-        {150, 193, 153},
-        {150, 192, 193},
-        {148, 192, 232},
-        {149, 191, 253},
-
-        {146, 227,  28},
-        {144, 227, 108},
-        {144, 227, 147},
-        {144, 227, 187},
-        {142, 226, 227},
-        {142, 225, 252},
-
-        {138, 253,  36},
-        {137, 253, 102},
-        {136, 253, 141},
-        {138, 254, 181},
-        {135, 255, 220},
-        {133, 255, 250},
-
-        {214,  57,  30},
-        {211,  59, 126},
-        {209,  57, 168},
-        {208,  55, 208},
-        {207,  58, 247},
-        {206,  61, 255},
-
-        {204, 121,  32},
-        {202, 121, 121},
-        {201, 121, 161},
-        {200, 120, 202},
-        {200, 120, 241},
-        {198, 119, 255},
-
-        {198, 157,  37},
-        {196, 157, 116},
-        {195, 156, 157},
-        {195, 156, 197},
-        {194, 155, 236},
-        {193, 155, 255},
-
-        {191, 192,  36},
-        {190, 191, 112},
-        {189, 191, 152},
-        {189, 191, 191},
-        {188, 190, 230},
-        {187, 190, 253},
-
-        {185, 226,  28},
-        {184, 226, 106},
-        {183, 225, 146},
-        {183, 225, 186},
-        {182, 225, 225},
-        {181, 224, 252},
-
-        {178, 255,  35},
-        {178, 255, 101},
-        {177, 254, 141},
-        {176, 254, 180},
-        {176, 254, 220},
-        {175, 253, 249},
-
-        {247,  56,  30},
-        {245,  57, 122},
-        {243,  59, 163},
-        {244,  60, 204},
-        {242,  59, 241},
-        {240,  55, 255},
-
-        {241, 119,  36},
-        {240, 120, 118},
-        {238, 119, 158},
-        {237, 119, 199},
-        {237, 118, 238},
-        {236, 118, 255},
-
-        {235, 154,  36},
-        {235, 154, 114},
-        {234, 154, 154},
-        {232, 154, 194},
-        {232, 153, 234},
-        {232, 153, 255},
-
-        {230, 190,  30},
-        {229, 189, 110},
-        {228, 189, 150},
-        {227, 189, 190},
-        {227, 189, 229},
-        {226, 188, 255},
-
-        {224, 224,  35},
-        {223, 224, 105},
-        {222, 224, 144},
-        {222, 223, 184},
-        {222, 223, 224},
-        {220, 223, 253},
-
-        {217, 253,  28},
-        {217, 253,  99},
-        {216, 252, 139},
-        {216, 252, 179},
-        {215, 252, 218},
-        {215, 251, 250},
-
-        {255,  61,  30},
-        {255,  60, 118},
-        {255,  58, 159},
-        {255,  56, 199},
-        {255,  55, 238},
-        {255,  59, 255},
-
-        {255, 117,  29},
-        {255, 117, 115},
-        {255, 117, 155},
-        {255, 117, 195},
-        {255, 116, 235},
-        {254, 116, 255},
-
-        {255, 152,  27},
-        {255, 152, 111},
-        {254, 152, 152},
-        {255, 152, 192},
-        {254, 151, 231},
-        {253, 151, 253},
-
-        {255, 187,  33},
-        {253, 187, 107},
-        {252, 187, 148},
-        {253, 187, 187},
-        {254, 187, 227},
-        {252, 186, 252},
-
-        {252, 222,  34},
-        {251, 222, 103},
-        {251, 222, 143},
-        {250, 222, 182},
-        {251, 221, 222},
-        {252, 221, 252},
-
-        {251, 252,  15},
-        {251, 252,  97},
-        {249, 252, 137},
-        {247, 252, 177},
-        {247, 253, 217},
-        {254, 255, 255},
-
-        // Grayscale
-
-        { 52,  53,  53},
-        { 57,  58,  59},
-        { 66,  67,  67},
-        { 75,  76,  76},
-        { 83,  85,  85},
-        { 92,  93,  94},
-
-        {101, 102, 102},
-        {109, 111, 111},
-        {118, 119, 119},
-        {126, 127, 128},
-        {134, 136, 136},
-        {143, 144, 145},
-
-        {151, 152, 153},
-        {159, 161, 161},
-        {167, 169, 169},
-        {176, 177, 177},
-        {184, 185, 186},
-        {192, 193, 194},
-
-        {200, 201, 202},
-        {208, 209, 210},
-        {216, 218, 218},
-        {224, 226, 226},
-        {232, 234, 234},
-        {240, 242, 242},
-    };
-
-    for (size_t i = 0; i < sizeof(rgbColors) / sizeof(rgbColors[0]); ++i) {
-        [m_colors addObject:DDMakeColor(rgbColors[i].r, rgbColors[i].g, rgbColors[i].b)];
-    }
-
-    // Color codes
-
-    int index = 16;
-
-    while (index < 256) {
-        [m_codes_fg addObject:[NSString stringWithFormat:@"38;5;%dm", index]];
-        [m_codes_bg addObject:[NSString stringWithFormat:@"48;5;%dm", index]];
-
-        index++;
-    }
-
-    #else /* if MAP_TO_TERMINAL_APP_COLORS */
-
-    // Standard xterm colors:
-    //
-    // These are the colors xterm shells use in xterm-256color mode.
-    // In this mode, the shell supports 256 different colors, specified by 256 color codes.
-    //
-    // The first 16 color codes map to the original 16 color codes supported by the earlier xterm-color mode.
-    // These are generally configurable, and thus we ignore them for the purposes of mapping,
-    // as we can't rely on them being constant. They are largely duplicated anyway.
-    //
-    // The next 216 color codes are designed to run the spectrum, with several shades of every color.
-    // The last 24 color codes represent a grayscale.
-    //
-    // While the color codes are standardized, the actual RGB values for each color code is not.
-    // However most standard xterms follow a well known color chart,
-    // which can easily be calculated using the simple formula below.
-    //
-    // More information about ansi escape codes can be found online.
-    // http://en.wikipedia.org/wiki/ANSI_escape_code
-
-    int index = 16;
-
-    int r; // red
-    int g; // green
-    int b; // blue
-
-    int ri; // r increment
-    int gi; // g increment
-    int bi; // b increment
-
-    // Calculate xterm colors (using standard algorithm)
-
-    int r = 0;
-    int g = 0;
-    int b = 0;
-
-    for (ri = 0; ri < 6; ri++) {
-        r = (ri == 0) ? 0 : 95 + (40 * (ri - 1));
-
-        for (gi = 0; gi < 6; gi++) {
-            g = (gi == 0) ? 0 : 95 + (40 * (gi - 1));
-
-            for (bi = 0; bi < 6; bi++) {
-                b = (bi == 0) ? 0 : 95 + (40 * (bi - 1));
-
-                [m_codes_fg addObject:[NSString stringWithFormat:@"38;5;%dm", index]];
-                [m_codes_bg addObject:[NSString stringWithFormat:@"48;5;%dm", index]];
-                [m_colors addObject:DDMakeColor(r, g, b)];
-
-                index++;
-            }
-        }
-    }
-
-    // Calculate xterm grayscale (using standard algorithm)
-
-    r = 8;
-    g = 8;
-    b = 8;
-
-    while (index < 256) {
-        [m_codes_fg addObject:[NSString stringWithFormat:@"38;5;%dm", index]];
-        [m_codes_bg addObject:[NSString stringWithFormat:@"48;5;%dm", index]];
-        [m_colors addObject:DDMakeColor(r, g, b)];
-
-        r += 10;
-        g += 10;
-        b += 10;
-
-        index++;
-    }
-
-    #endif /* if MAP_TO_TERMINAL_APP_COLORS */
-
-    codes_fg = [m_codes_fg copy];
-    codes_bg = [m_codes_bg copy];
-    colors   = [m_colors   copy];
-
-    NSAssert([codes_fg count] == [codes_bg count], @"Invalid colors/codes array(s)");
-    NSAssert([codes_fg count] == [colors count],   @"Invalid colors/codes array(s)");
-}
-
-+ (void)getRed:(CGFloat *)rPtr green:(CGFloat *)gPtr blue:(CGFloat *)bPtr fromColor:(DDColor *)color {
-    #if TARGET_OS_IPHONE
-
-    // iOS
-
-    BOOL done = NO;
-
-    if ([color respondsToSelector:@selector(getRed:green:blue:alpha:)]) {
-        done = [color getRed:rPtr green:gPtr blue:bPtr alpha:NULL];
-    }
-
-    if (!done) {
-        // The method getRed:green:blue:alpha: was only available starting iOS 5.
-        // So in iOS 4 and earlier, we have to jump through hoops.
-
-        CGColorSpaceRef rgbColorSpace = CGColorSpaceCreateDeviceRGB();
-
-        unsigned char pixel[4];
-        CGContextRef context = CGBitmapContextCreate(&pixel, 1, 1, 8, 4, rgbColorSpace, (CGBitmapInfo)(kCGBitmapAlphaInfoMask & kCGImageAlphaNoneSkipLast));
-
-        CGContextSetFillColorWithColor(context, [color CGColor]);
-        CGContextFillRect(context, CGRectMake(0, 0, 1, 1));
-
-        if (rPtr) {
-            *rPtr = pixel[0] / 255.0f;
-        }
-
-        if (gPtr) {
-            *gPtr = pixel[1] / 255.0f;
-        }
-
-        if (bPtr) {
-            *bPtr = pixel[2] / 255.0f;
-        }
-
-        CGContextRelease(context);
-        CGColorSpaceRelease(rgbColorSpace);
-    }
-
-    #elif defined(DD_CLI) || !__has_include(<AppKit/NSColor.h>)
-
-    // OS X without AppKit
-
-    [color getRed:rPtr green:gPtr blue:bPtr alpha:NULL];
-
-    #else /* if TARGET_OS_IPHONE */
-
-    // OS X with AppKit
-
-    NSColor *safeColor = [color colorUsingColorSpaceName:NSCalibratedRGBColorSpace];
-
-    [safeColor getRed:rPtr green:gPtr blue:bPtr alpha:NULL];
-    #endif /* if TARGET_OS_IPHONE */
-}
-
-/**
- * Maps the given color to the closest available color supported by the shell.
- * The shell may support 256 colors, or only 16.
- *
- * This method loops through the known supported color set, and calculates the closest color.
- * The array index of that color, within the colors array, is then returned.
- * This array index may also be used as the index within the codes_fg and codes_bg arrays.
- **/
-+ (NSUInteger)codeIndexForColor:(DDColor *)inColor {
-    CGFloat inR, inG, inB;
-
-    [self getRed:&inR green:&inG blue:&inB fromColor:inColor];
-
-    NSUInteger bestIndex = 0;
-    CGFloat lowestDistance = 100.0f;
-
-    NSUInteger i = 0;
-
-    for (DDColor *color in colors) {
-        // Calculate Euclidean distance (lower value means closer to given color)
-
-        CGFloat r, g, b;
-        [self getRed:&r green:&g blue:&b fromColor:color];
-
-    #if CGFLOAT_IS_DOUBLE
-        CGFloat distance = sqrt(pow(r - inR, 2.0) + pow(g - inG, 2.0) + pow(b - inB, 2.0));
-    #else
-        CGFloat distance = sqrtf(powf(r - inR, 2.0f) + powf(g - inG, 2.0f) + powf(b - inB, 2.0f));
-    #endif
-
-        NSLogVerbose(@"DDTTYLogger: %3lu : %.3f,%.3f,%.3f & %.3f,%.3f,%.3f = %.6f",
-                     (unsigned long)i, inR, inG, inB, r, g, b, distance);
-
-        if (distance < lowestDistance) {
-            bestIndex = i;
-            lowestDistance = distance;
-
-            NSLogVerbose(@"DDTTYLogger: New best index = %lu", (unsigned long)bestIndex);
-        }
-
-        i++;
-    }
-
-    return bestIndex;
-}
-
-+ (instancetype)sharedInstance {
-    static dispatch_once_t DDTTYLoggerOnceToken;
-
-    dispatch_once(&DDTTYLoggerOnceToken, ^{
-        // Xcode does NOT natively support colors in the Xcode debugging console.
-        // You'll need to install the XcodeColors plugin to see colors in the Xcode console.
-        //
-        // PS - Please read the header file before diving into the source code.
-
-        char *xcode_colors = getenv("XcodeColors");
-        char *term = getenv("TERM");
-
-        if (xcode_colors && (strcmp(xcode_colors, "YES") == 0)) {
-            isaXcodeColorTTY = YES;
-        } else if (term) {
-            if (strcasestr(term, "color") != NULL) {
-                isaColorTTY = YES;
-                isaColor256TTY = (strcasestr(term, "256") != NULL);
-
-                if (isaColor256TTY) {
-                    [self initialize_colors_256];
-                } else {
-                    [self initialize_colors_16];
-                }
-            }
-        }
-
-        NSLogInfo(@"DDTTYLogger: isaColorTTY = %@", (isaColorTTY ? @"YES" : @"NO"));
-        NSLogInfo(@"DDTTYLogger: isaColor256TTY: %@", (isaColor256TTY ? @"YES" : @"NO"));
-        NSLogInfo(@"DDTTYLogger: isaXcodeColorTTY: %@", (isaXcodeColorTTY ? @"YES" : @"NO"));
-
-        sharedInstance = [[[self class] alloc] init];
-    });
-
-    return sharedInstance;
-}
-
-- (instancetype)init {
-    if (sharedInstance != nil) {
-        return nil;
-    }
-
-    if ((self = [super init])) {
-        // Initialize 'app' variable (char *)
-
-        _appName = [[NSProcessInfo processInfo] processName];
-
-        _appLen = [_appName lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
-
-        if (_appLen == 0) {
-            _appName = @"<UnnamedApp>";
-            _appLen = [_appName lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
-        }
-
-        _app = (char *)calloc(_appLen + 1, sizeof(char));
-
-        if (_app == NULL) {
-            return nil;
-        }
-
-        BOOL processedAppName = [_appName getCString:_app maxLength:(_appLen + 1) encoding:NSUTF8StringEncoding];
-
-        if (NO == processedAppName) {
-            free(_app);
-            return nil;
-        }
-
-        // Initialize 'pid' variable (char *)
-
-        _processID = [NSString stringWithFormat:@"%i", (int)getpid()];
-
-        _pidLen = [_processID lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
-        _pid = (char *)calloc(_pidLen + 1, sizeof(char));
-
-        if (_pid == NULL) {
-            free(_app);
-            return nil;
-        }
-
-        BOOL processedID = [_processID getCString:_pid maxLength:(_pidLen + 1) encoding:NSUTF8StringEncoding];
-
-        if (NO == processedID) {
-            free(_app);
-            free(_pid);
-            return nil;
-        }
-
-        // Initialize color stuff
-
-        _colorsEnabled = NO;
-        _colorProfilesArray = [[NSMutableArray alloc] initWithCapacity:8];
-        _colorProfilesDict = [[NSMutableDictionary alloc] initWithCapacity:8];
-
-        _automaticallyAppendNewlineForCustomFormatters = YES;
-    }
-
-    return self;
-}
-
-- (void)loadDefaultColorProfiles {
-    [self setForegroundColor:DDMakeColor(214,  57,  30) backgroundColor:nil forFlag:DDLogFlagError];
-    [self setForegroundColor:DDMakeColor(204, 121,  32) backgroundColor:nil forFlag:DDLogFlagWarning];
-}
-
-- (BOOL)colorsEnabled {
-    // The design of this method is taken from the DDAbstractLogger implementation.
-    // For extensive documentation please refer to the DDAbstractLogger implementation.
-
-    // Note: The internal implementation MUST access the colorsEnabled variable directly,
-    // This method is designed explicitly for external access.
-    //
-    // Using "self." syntax to go through this method will cause immediate deadlock.
-    // This is the intended result. Fix it by accessing the ivar directly.
-    // Great strides have been take to ensure this is safe to do. Plus it's MUCH faster.
-
-    NSAssert(![self isOnGlobalLoggingQueue], @"Core architecture requirement failure");
-    NSAssert(![self isOnInternalLoggerQueue], @"MUST access ivar directly, NOT via self.* syntax.");
-
-    dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
-
-    __block BOOL result;
-
-    dispatch_sync(globalLoggingQueue, ^{
-        dispatch_sync(self.loggerQueue, ^{
-            result = self->_colorsEnabled;
-        });
-    });
-
-    return result;
-}
-
-- (void)setColorsEnabled:(BOOL)newColorsEnabled {
-    dispatch_block_t block = ^{
-        @autoreleasepool {
-            self->_colorsEnabled = newColorsEnabled;
-
-            if ([self->_colorProfilesArray count] == 0) {
-                [self loadDefaultColorProfiles];
-            }
-        }
-    };
-
-    // The design of this method is taken from the DDAbstractLogger implementation.
-    // For extensive documentation please refer to the DDAbstractLogger implementation.
-
-    // Note: The internal implementation MUST access the colorsEnabled variable directly,
-    // This method is designed explicitly for external access.
-    //
-    // Using "self." syntax to go through this method will cause immediate deadlock.
-    // This is the intended result. Fix it by accessing the ivar directly.
-    // Great strides have been take to ensure this is safe to do. Plus it's MUCH faster.
-
-    NSAssert(![self isOnGlobalLoggingQueue], @"Core architecture requirement failure");
-    NSAssert(![self isOnInternalLoggerQueue], @"MUST access ivar directly, NOT via self.* syntax.");
-
-    dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
-
-    dispatch_async(globalLoggingQueue, ^{
-        dispatch_async(self.loggerQueue, block);
-    });
-}
-
-- (void)setForegroundColor:(DDColor *)txtColor backgroundColor:(DDColor *)bgColor forFlag:(DDLogFlag)mask {
-    [self setForegroundColor:txtColor backgroundColor:bgColor forFlag:mask context:LOG_CONTEXT_ALL];
-}
-
-- (void)setForegroundColor:(DDColor *)txtColor backgroundColor:(DDColor *)bgColor forFlag:(DDLogFlag)mask context:(NSInteger)ctxt {
-    dispatch_block_t block = ^{
-        @autoreleasepool {
-            DDTTYLoggerColorProfile *newColorProfile =
-                [[DDTTYLoggerColorProfile alloc] initWithForegroundColor:txtColor
-                                                         backgroundColor:bgColor
-                                                                    flag:mask
-                                                                 context:ctxt];
-
-            NSLogInfo(@"DDTTYLogger: newColorProfile: %@", newColorProfile);
-
-            NSUInteger i = 0;
-
-            for (DDTTYLoggerColorProfile *colorProfile in self->_colorProfilesArray) {
-                if ((colorProfile->mask == mask) && (colorProfile->context == ctxt)) {
-                    break;
-                }
-
-                i++;
-            }
-
-            if (i < [self->_colorProfilesArray count]) {
-                self->_colorProfilesArray[i] = newColorProfile;
-            } else {
-                [self->_colorProfilesArray addObject:newColorProfile];
-            }
-        }
-    };
-
-    // The design of the setter logic below is taken from the DDAbstractLogger implementation.
-    // For documentation please refer to the DDAbstractLogger implementation.
-
-    if ([self isOnInternalLoggerQueue]) {
-        block();
-    } else {
-        dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
-        NSAssert(![self isOnGlobalLoggingQueue], @"Core architecture requirement failure");
-
-        dispatch_async(globalLoggingQueue, ^{
-            dispatch_async(self.loggerQueue, block);
-        });
-    }
-}
-
-- (void)setForegroundColor:(DDColor *)txtColor backgroundColor:(DDColor *)bgColor forTag:(id <NSCopying>)tag {
-    NSAssert([(id < NSObject >) tag conformsToProtocol: @protocol(NSCopying)], @"Invalid tag");
-
-    dispatch_block_t block = ^{
-        @autoreleasepool {
-            DDTTYLoggerColorProfile *newColorProfile =
-                [[DDTTYLoggerColorProfile alloc] initWithForegroundColor:txtColor
-                                                         backgroundColor:bgColor
-                                                                    flag:(DDLogFlag)0
-                                                                 context:0];
-
-            NSLogInfo(@"DDTTYLogger: newColorProfile: %@", newColorProfile);
-
-            self->_colorProfilesDict[tag] = newColorProfile;
-        }
-    };
-
-    // The design of the setter logic below is taken from the DDAbstractLogger implementation.
-    // For documentation please refer to the DDAbstractLogger implementation.
-
-    if ([self isOnInternalLoggerQueue]) {
-        block();
-    } else {
-        dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
-        NSAssert(![self isOnGlobalLoggingQueue], @"Core architecture requirement failure");
-
-        dispatch_async(globalLoggingQueue, ^{
-            dispatch_async(self.loggerQueue, block);
-        });
-    }
-}
-
-- (void)clearColorsForFlag:(DDLogFlag)mask {
-    [self clearColorsForFlag:mask context:0];
-}
-
-- (void)clearColorsForFlag:(DDLogFlag)mask context:(NSInteger)context {
-    dispatch_block_t block = ^{
-        @autoreleasepool {
-            NSUInteger i = 0;
-
-            for (DDTTYLoggerColorProfile *colorProfile in self->_colorProfilesArray) {
-                if ((colorProfile->mask == mask) && (colorProfile->context == context)) {
-                    break;
-                }
-
-                i++;
-            }
-
-            if (i < [self->_colorProfilesArray count]) {
-                [self->_colorProfilesArray removeObjectAtIndex:i];
-            }
-        }
-    };
-
-    // The design of the setter logic below is taken from the DDAbstractLogger implementation.
-    // For documentation please refer to the DDAbstractLogger implementation.
-
-    if ([self isOnInternalLoggerQueue]) {
-        block();
-    } else {
-        dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
-        NSAssert(![self isOnGlobalLoggingQueue], @"Core architecture requirement failure");
-
-        dispatch_async(globalLoggingQueue, ^{
-            dispatch_async(self.loggerQueue, block);
-        });
-    }
-}
-
-- (void)clearColorsForTag:(id <NSCopying>)tag {
-    NSAssert([(id < NSObject >) tag conformsToProtocol: @protocol(NSCopying)], @"Invalid tag");
-
-    dispatch_block_t block = ^{
-        @autoreleasepool {
-            [self->_colorProfilesDict removeObjectForKey:tag];
-        }
-    };
-
-    // The design of the setter logic below is taken from the DDAbstractLogger implementation.
-    // For documentation please refer to the DDAbstractLogger implementation.
-
-    if ([self isOnInternalLoggerQueue]) {
-        block();
-    } else {
-        dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
-        NSAssert(![self isOnGlobalLoggingQueue], @"Core architecture requirement failure");
-
-        dispatch_async(globalLoggingQueue, ^{
-            dispatch_async(self.loggerQueue, block);
-        });
-    }
-}
-
-- (void)clearColorsForAllFlags {
-    dispatch_block_t block = ^{
-        @autoreleasepool {
-            [self->_colorProfilesArray removeAllObjects];
-        }
-    };
-
-    // The design of the setter logic below is taken from the DDAbstractLogger implementation.
-    // For documentation please refer to the DDAbstractLogger implementation.
-
-    if ([self isOnInternalLoggerQueue]) {
-        block();
-    } else {
-        dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
-        NSAssert(![self isOnGlobalLoggingQueue], @"Core architecture requirement failure");
-
-        dispatch_async(globalLoggingQueue, ^{
-            dispatch_async(self.loggerQueue, block);
-        });
-    }
-}
-
-- (void)clearColorsForAllTags {
-    dispatch_block_t block = ^{
-        @autoreleasepool {
-            [self->_colorProfilesDict removeAllObjects];
-        }
-    };
-
-    // The design of the setter logic below is taken from the DDAbstractLogger implementation.
-    // For documentation please refer to the DDAbstractLogger implementation.
-
-    if ([self isOnInternalLoggerQueue]) {
-        block();
-    } else {
-        dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
-        NSAssert(![self isOnGlobalLoggingQueue], @"Core architecture requirement failure");
-
-        dispatch_async(globalLoggingQueue, ^{
-            dispatch_async(self.loggerQueue, block);
-        });
-    }
-}
-
-- (void)clearAllColors {
-    dispatch_block_t block = ^{
-        @autoreleasepool {
-            [self->_colorProfilesArray removeAllObjects];
-            [self->_colorProfilesDict removeAllObjects];
-        }
-    };
-
-    // The design of the setter logic below is taken from the DDAbstractLogger implementation.
-    // For documentation please refer to the DDAbstractLogger implementation.
-
-    if ([self isOnInternalLoggerQueue]) {
-        block();
-    } else {
-        dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
-        NSAssert(![self isOnGlobalLoggingQueue], @"Core architecture requirement failure");
-
-        dispatch_async(globalLoggingQueue, ^{
-            dispatch_async(self.loggerQueue, block);
-        });
-    }
-}
-
-- (void)logMessage:(DDLogMessage *)logMessage {
-    NSString *logMsg = logMessage->_message;
-    BOOL isFormatted = NO;
-
-    if (_logFormatter) {
-        logMsg = [_logFormatter formatLogMessage:logMessage];
-        isFormatted = logMsg != logMessage->_message;
-    }
-
-    if (logMsg) {
-        // Search for a color profile associated with the log message
-
-        DDTTYLoggerColorProfile *colorProfile = nil;
-
-        if (_colorsEnabled) {
-            if (logMessage->_tag) {
-                colorProfile = _colorProfilesDict[logMessage->_tag];
-            }
-
-            if (colorProfile == nil) {
-                for (DDTTYLoggerColorProfile *cp in _colorProfilesArray) {
-                    if (logMessage->_flag & cp->mask) {
-                        // Color profile set for this context?
-                        if (logMessage->_context == cp->context) {
-                            colorProfile = cp;
-
-                            // Stop searching
-                            break;
-                        }
-
-                        // Check if LOG_CONTEXT_ALL was specified as a default color for this flag
-                        if (cp->context == LOG_CONTEXT_ALL) {
-                            colorProfile = cp;
-
-                            // We don't break to keep searching for more specific color profiles for the context
-                        }
-                    }
-                }
-            }
-        }
-
-        // Convert log message to C string.
-        //
-        // We use the stack instead of the heap for speed if possible.
-        // But we're extra cautious to avoid a stack overflow.
-
-        NSUInteger msgLen = [logMsg lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
-        const BOOL useStack = msgLen < (1024 * 4);
-
-        char msgStack[useStack ? (msgLen + 1) : 1]; // Analyzer doesn't like zero-size array, hence the 1
-        char *msg = useStack ? msgStack : (char *)calloc(msgLen + 1, sizeof(char));
-
-        if (msg == NULL) {
-            return;
-        }
-
-        BOOL logMsgEnc = [logMsg getCString:msg maxLength:(msgLen + 1) encoding:NSUTF8StringEncoding];
-
-        if (!logMsgEnc) {
-            if (!useStack && msg != NULL) {
-                free(msg);
-            }
-
-            return;
-        }
-
-        // Write the log message to STDERR
-
-        if (isFormatted) {
-            // The log message has already been formatted.
-            int iovec_len = (_automaticallyAppendNewlineForCustomFormatters) ? 5 : 4;
-            struct iovec v[iovec_len];
-
-            if (colorProfile) {
-                v[0].iov_base = colorProfile->fgCode;
-                v[0].iov_len = colorProfile->fgCodeLen;
-
-                v[1].iov_base = colorProfile->bgCode;
-                v[1].iov_len = colorProfile->bgCodeLen;
-
-                v[iovec_len - 1].iov_base = colorProfile->resetCode;
-                v[iovec_len - 1].iov_len = colorProfile->resetCodeLen;
-            } else {
-                v[0].iov_base = "";
-                v[0].iov_len = 0;
-
-                v[1].iov_base = "";
-                v[1].iov_len = 0;
-
-                v[iovec_len - 1].iov_base = "";
-                v[iovec_len - 1].iov_len = 0;
-            }
-
-            v[2].iov_base = (char *)msg;
-            v[2].iov_len = msgLen;
-
-            if (iovec_len == 5) {
-                v[3].iov_base = "\n";
-                v[3].iov_len = (msg[msgLen] == '\n') ? 0 : 1;
-            }
-
-            writev(STDERR_FILENO, v, iovec_len);
-        } else {
-            // The log message is unformatted, so apply standard NSLog style formatting.
-
-            int len;
-            char ts[24] = "";
-            size_t tsLen = 0;
-
-            // Calculate timestamp.
-            // The technique below is faster than using NSDateFormatter.
-            if (logMessage->_timestamp) {
-                NSTimeInterval epoch = [logMessage->_timestamp timeIntervalSince1970];
-                struct tm tm;
-                time_t time = (time_t)epoch;
-                (void)localtime_r(&time, &tm);
-                int milliseconds = (int)((epoch - floor(epoch)) * 1000.0);
-
-                len = snprintf(ts, 24, "%04d-%02d-%02d %02d:%02d:%02d:%03d", // yyyy-MM-dd HH:mm:ss:SSS
-                               tm.tm_year + 1900,
-                               tm.tm_mon + 1,
-                               tm.tm_mday,
-                               tm.tm_hour,
-                               tm.tm_min,
-                               tm.tm_sec, milliseconds);
-
-                tsLen = (NSUInteger)MAX(MIN(24 - 1, len), 0);
-            }
-
-            // Calculate thread ID
-            //
-            // How many characters do we need for the thread id?
-            // logMessage->machThreadID is of type mach_port_t, which is an unsigned int.
-            //
-            // 1 hex char = 4 bits
-            // 8 hex chars for 32 bit, plus ending '\0' = 9
-
-            char tid[9];
-            len = snprintf(tid, 9, "%s", [logMessage->_threadID cStringUsingEncoding:NSUTF8StringEncoding]);
-
-            size_t tidLen = (NSUInteger)MAX(MIN(9 - 1, len), 0);
-
-            // Here is our format: "%s %s[%i:%s] %s", timestamp, appName, processID, threadID, logMsg
-
-            struct iovec v[13];
-
-            if (colorProfile) {
-                v[0].iov_base = colorProfile->fgCode;
-                v[0].iov_len = colorProfile->fgCodeLen;
-
-                v[1].iov_base = colorProfile->bgCode;
-                v[1].iov_len = colorProfile->bgCodeLen;
-
-                v[12].iov_base = colorProfile->resetCode;
-                v[12].iov_len = colorProfile->resetCodeLen;
-            } else {
-                v[0].iov_base = "";
-                v[0].iov_len = 0;
-
-                v[1].iov_base = "";
-                v[1].iov_len = 0;
-
-                v[12].iov_base = "";
-                v[12].iov_len = 0;
-            }
-
-            v[2].iov_base = ts;
-            v[2].iov_len = tsLen;
-
-            v[3].iov_base = " ";
-            v[3].iov_len = 1;
-
-            v[4].iov_base = _app;
-            v[4].iov_len = _appLen;
-
-            v[5].iov_base = "[";
-            v[5].iov_len = 1;
-
-            v[6].iov_base = _pid;
-            v[6].iov_len = _pidLen;
-
-            v[7].iov_base = ":";
-            v[7].iov_len = 1;
-
-            v[8].iov_base = tid;
-            v[8].iov_len = MIN((size_t)8, tidLen); // snprintf doesn't return what you might think
-
-            v[9].iov_base = "] ";
-            v[9].iov_len = 2;
-
-            v[10].iov_base = (char *)msg;
-            v[10].iov_len = msgLen;
-
-            v[11].iov_base = "\n";
-            v[11].iov_len = (msg[msgLen] == '\n') ? 0 : 1;
-
-            writev(STDERR_FILENO, v, 13);
-        }
-
-        if (!useStack) {
-            free(msg);
-        }
-    }
-}
-
-- (DDLoggerName)loggerName {
-    return DDLoggerNameTTY;
-}
-
-@end
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-@implementation DDTTYLoggerColorProfile
-
-- (instancetype)initWithForegroundColor:(DDColor *)fgColor backgroundColor:(DDColor *)bgColor flag:(DDLogFlag)aMask context:(NSInteger)ctxt {
-    if ((self = [super init])) {
-        mask = aMask;
-        context = ctxt;
-
-        CGFloat r, g, b;
-
-        if (fgColor) {
-            [DDTTYLogger getRed:&r green:&g blue:&b fromColor:fgColor];
-
-            fg_r = (uint8_t)(r * 255.0f);
-            fg_g = (uint8_t)(g * 255.0f);
-            fg_b = (uint8_t)(b * 255.0f);
-        }
-
-        if (bgColor) {
-            [DDTTYLogger getRed:&r green:&g blue:&b fromColor:bgColor];
-
-            bg_r = (uint8_t)(r * 255.0f);
-            bg_g = (uint8_t)(g * 255.0f);
-            bg_b = (uint8_t)(b * 255.0f);
-        }
-
-        if (fgColor && isaColorTTY) {
-            // Map foreground color to closest available shell color
-
-            fgCodeIndex = [DDTTYLogger codeIndexForColor:fgColor];
-            fgCodeRaw   = codes_fg[fgCodeIndex];
-
-            NSString *escapeSeq = @"\033[";
-
-            NSUInteger len1 = [escapeSeq lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
-            NSUInteger len2 = [fgCodeRaw lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
-
-            BOOL escapeSeqEnc = [escapeSeq getCString:(fgCode)      maxLength:(len1 + 1) encoding:NSUTF8StringEncoding];
-            BOOL fgCodeRawEsc = [fgCodeRaw getCString:(fgCode + len1) maxLength:(len2 + 1) encoding:NSUTF8StringEncoding];
-
-            if (!escapeSeqEnc || !fgCodeRawEsc) {
-                return nil;
-            }
-
-            fgCodeLen = len1 + len2;
-        } else if (fgColor && isaXcodeColorTTY) {
-            // Convert foreground color to color code sequence
-
-            const char *escapeSeq = XCODE_COLORS_ESCAPE_SEQ;
-
-            int result = snprintf(fgCode, 24, "%sfg%u,%u,%u;", escapeSeq, fg_r, fg_g, fg_b);
-            fgCodeLen = (NSUInteger)MAX(MIN(result, (24 - 1)), 0);
-        } else {
-            // No foreground color or no color support
-
-            fgCode[0] = '\0';
-            fgCodeLen = 0;
-        }
-
-        if (bgColor && isaColorTTY) {
-            // Map background color to closest available shell color
-
-            bgCodeIndex = [DDTTYLogger codeIndexForColor:bgColor];
-            bgCodeRaw   = codes_bg[bgCodeIndex];
-
-            NSString *escapeSeq = @"\033[";
-
-            NSUInteger len1 = [escapeSeq lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
-            NSUInteger len2 = [bgCodeRaw lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
-
-            BOOL escapeSeqEnc = [escapeSeq getCString:(bgCode)      maxLength:(len1 + 1) encoding:NSUTF8StringEncoding];
-            BOOL bgCodeRawEsc = [bgCodeRaw getCString:(bgCode + len1) maxLength:(len2 + 1) encoding:NSUTF8StringEncoding];
-
-            if (!escapeSeqEnc || !bgCodeRawEsc) {
-                return nil;
-            }
-
-            bgCodeLen = len1 + len2;
-        } else if (bgColor && isaXcodeColorTTY) {
-            // Convert background color to color code sequence
-
-            const char *escapeSeq = XCODE_COLORS_ESCAPE_SEQ;
-
-            int result = snprintf(bgCode, 24, "%sbg%u,%u,%u;", escapeSeq, bg_r, bg_g, bg_b);
-            bgCodeLen = (NSUInteger)MAX(MIN(result, (24 - 1)), 0);
-        } else {
-            // No background color or no color support
-
-            bgCode[0] = '\0';
-            bgCodeLen = 0;
-        }
-
-        if (isaColorTTY) {
-            resetCodeLen = (NSUInteger)MAX(snprintf(resetCode, 8, "\033[0m"), 0);
-        } else if (isaXcodeColorTTY) {
-            resetCodeLen = (NSUInteger)MAX(snprintf(resetCode, 8, XCODE_COLORS_RESET), 0);
-        } else {
-            resetCode[0] = '\0';
-            resetCodeLen = 0;
-        }
-    }
-
-    return self;
-}
-
-- (NSString *)description {
-    return [NSString stringWithFormat:
-            @"<DDTTYLoggerColorProfile: %p mask:%i ctxt:%ld fg:%u,%u,%u bg:%u,%u,%u fgCode:%@ bgCode:%@>",
-            self, (int)mask, (long)context, fg_r, fg_g, fg_b, bg_r, bg_g, bg_b, fgCodeRaw, bgCodeRaw];
-}
-
-@end

+ 0 - 117
Carthage/Checkouts/CocoaLumberjack/Classes/Extensions/DDContextFilterLogFormatter.h

@@ -1,117 +0,0 @@
-// Software License Agreement (BSD License)
-//
-// Copyright (c) 2010-2019, Deusty, LLC
-// All rights reserved.
-//
-// Redistribution and use of this software in source and binary forms,
-// with or without modification, are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above copyright notice,
-//   this list of conditions and the following disclaimer.
-//
-// * Neither the name of Deusty nor the names of its contributors may be used
-//   to endorse or promote products derived from this software without specific
-//   prior written permission of Deusty, LLC.
-
-#import <Foundation/Foundation.h>
-
-// Disable legacy macros
-#ifndef DD_LEGACY_MACROS
-    #define DD_LEGACY_MACROS 0
-#endif
-
-#import <CocoaLumberjack/DDLog.h>
-
-/**
- * This class provides a log formatter that filters log statements from a logging context not on the whitelist.
- *
- * A log formatter can be added to any logger to format and/or filter its output.
- * You can learn more about log formatters here:
- * Documentation/CustomFormatters.md
- *
- * You can learn more about logging context's here:
- * Documentation/CustomContext.md
- *
- * But here's a quick overview / refresher:
- *
- * Every log statement has a logging context.
- * These come from the underlying logging macros defined in DDLog.h.
- * The default logging context is zero.
- * You can define multiple logging context's for use in your application.
- * For example, logically separate parts of your app each have a different logging context.
- * Also 3rd party frameworks that make use of Lumberjack generally use their own dedicated logging context.
- **/
-@interface DDContextWhitelistFilterLogFormatter : NSObject <DDLogFormatter>
-
-/**
- *  Designated default initializer
- */
-- (instancetype)init NS_DESIGNATED_INITIALIZER;
-
-/**
- *  Add a context to the whitelist
- *
- *  @param loggingContext the context
- */
-- (void)addToWhitelist:(NSInteger)loggingContext;
-
-/**
- *  Remove context from whitelist
- *
- *  @param loggingContext the context
- */
-- (void)removeFromWhitelist:(NSInteger)loggingContext;
-
-/**
- *  Return the whitelist
- */
-@property (readonly, copy) NSArray<NSNumber *> *whitelist;
-
-/**
- *  Check if a context is on the whitelist
- *
- *  @param loggingContext the context
- */
-- (BOOL)isOnWhitelist:(NSInteger)loggingContext;
-
-@end
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark -
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-/**
- * This class provides a log formatter that filters log statements from a logging context on the blacklist.
- **/
-@interface DDContextBlacklistFilterLogFormatter : NSObject <DDLogFormatter>
-
-- (instancetype)init NS_DESIGNATED_INITIALIZER;
-
-/**
- *  Add a context to the blacklist
- *
- *  @param loggingContext the context
- */
-- (void)addToBlacklist:(NSInteger)loggingContext;
-
-/**
- *  Remove context from blacklist
- *
- *  @param loggingContext the context
- */
-- (void)removeFromBlacklist:(NSInteger)loggingContext;
-
-/**
- *  Return the blacklist
- */
-@property (readonly, copy) NSArray<NSNumber *> *blacklist;
-
-
-/**
- *  Check if a context is on the blacklist
- *
- *  @param loggingContext the context
- */
-- (BOOL)isOnBlacklist:(NSInteger)loggingContext;
-
-@end

+ 0 - 196
Carthage/Checkouts/CocoaLumberjack/Classes/Extensions/DDContextFilterLogFormatter.m

@@ -1,196 +0,0 @@
-// Software License Agreement (BSD License)
-//
-// Copyright (c) 2010-2019, Deusty, LLC
-// All rights reserved.
-//
-// Redistribution and use of this software in source and binary forms,
-// with or without modification, are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above copyright notice,
-//   this list of conditions and the following disclaimer.
-//
-// * Neither the name of Deusty nor the names of its contributors may be used
-//   to endorse or promote products derived from this software without specific
-//   prior written permission of Deusty, LLC.
-
-#import "DDContextFilterLogFormatter.h"
-#import <pthread/pthread.h>
-
-#if !__has_feature(objc_arc)
-#error This file must be compiled with ARC. Use -fobjc-arc flag (or convert project to ARC).
-#endif
-
-@interface DDLoggingContextSet : NSObject
-
-- (void)addToSet:(NSInteger)loggingContext;
-- (void)removeFromSet:(NSInteger)loggingContext;
-
-@property (readonly, copy) NSArray *currentSet;
-
-- (BOOL)isInSet:(NSInteger)loggingContext;
-
-@end
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark -
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-@interface DDContextWhitelistFilterLogFormatter () {
-    DDLoggingContextSet *_contextSet;
-}
-
-@end
-
-
-@implementation DDContextWhitelistFilterLogFormatter
-
-- (instancetype)init {
-    if ((self = [super init])) {
-        _contextSet = [[DDLoggingContextSet alloc] init];
-    }
-
-    return self;
-}
-
-- (void)addToWhitelist:(NSInteger)loggingContext {
-    [_contextSet addToSet:loggingContext];
-}
-
-- (void)removeFromWhitelist:(NSInteger)loggingContext {
-    [_contextSet removeFromSet:loggingContext];
-}
-
-- (NSArray *)whitelist {
-    return [_contextSet currentSet];
-}
-
-- (BOOL)isOnWhitelist:(NSInteger)loggingContext {
-    return [_contextSet isInSet:loggingContext];
-}
-
-- (NSString *)formatLogMessage:(DDLogMessage *)logMessage {
-    if ([self isOnWhitelist:logMessage->_context]) {
-        return logMessage->_message;
-    } else {
-        return nil;
-    }
-}
-
-@end
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark -
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-@interface DDContextBlacklistFilterLogFormatter () {
-    DDLoggingContextSet *_contextSet;
-}
-
-@end
-
-
-@implementation DDContextBlacklistFilterLogFormatter
-
-- (instancetype)init {
-    if ((self = [super init])) {
-        _contextSet = [[DDLoggingContextSet alloc] init];
-    }
-
-    return self;
-}
-
-- (void)addToBlacklist:(NSInteger)loggingContext {
-    [_contextSet addToSet:loggingContext];
-}
-
-- (void)removeFromBlacklist:(NSInteger)loggingContext {
-    [_contextSet removeFromSet:loggingContext];
-}
-
-- (NSArray *)blacklist {
-    return [_contextSet currentSet];
-}
-
-- (BOOL)isOnBlacklist:(NSInteger)loggingContext {
-    return [_contextSet isInSet:loggingContext];
-}
-
-- (NSString *)formatLogMessage:(DDLogMessage *)logMessage {
-    if ([self isOnBlacklist:logMessage->_context]) {
-        return nil;
-    } else {
-        return logMessage->_message;
-    }
-}
-
-@end
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark -
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-@interface DDLoggingContextSet () {
-    pthread_mutex_t _mutex;
-    NSMutableSet *_set;
-}
-
-@end
-
-
-@implementation DDLoggingContextSet
-
-- (instancetype)init {
-    if ((self = [super init])) {
-        _set = [[NSMutableSet alloc] init];
-        pthread_mutex_init(&_mutex, NULL);
-    }
-
-    return self;
-}
-
-- (void)dealloc {
-    pthread_mutex_destroy(&_mutex);
-}
-
-- (void)addToSet:(NSInteger)loggingContext {
-    pthread_mutex_lock(&_mutex);
-    {
-        [_set addObject:@(loggingContext)];
-    }
-    pthread_mutex_unlock(&_mutex);
-}
-
-- (void)removeFromSet:(NSInteger)loggingContext {
-    pthread_mutex_lock(&_mutex);
-    {
-        [_set removeObject:@(loggingContext)];
-    }
-    pthread_mutex_unlock(&_mutex);
-}
-
-- (NSArray *)currentSet {
-    NSArray *result = nil;
-
-    pthread_mutex_lock(&_mutex);
-    {
-        result = [_set allObjects];
-    }
-    pthread_mutex_unlock(&_mutex);
-
-    return result;
-}
-
-- (BOOL)isInSet:(NSInteger)loggingContext {
-    BOOL result = NO;
-
-    pthread_mutex_lock(&_mutex);
-    {
-        result = [_set containsObject:@(loggingContext)];
-    }
-    pthread_mutex_unlock(&_mutex);
-
-    return result;
-}
-
-@end

+ 0 - 191
Carthage/Checkouts/CocoaLumberjack/Classes/Extensions/DDDispatchQueueLogFormatter.h

@@ -1,191 +0,0 @@
-// Software License Agreement (BSD License)
-//
-// Copyright (c) 2010-2019, Deusty, LLC
-// All rights reserved.
-//
-// Redistribution and use of this software in source and binary forms,
-// with or without modification, are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above copyright notice,
-//   this list of conditions and the following disclaimer.
-//
-// * Neither the name of Deusty nor the names of its contributors may be used
-//   to endorse or promote products derived from this software without specific
-//   prior written permission of Deusty, LLC.
-
-#import <Foundation/Foundation.h>
-
-// Disable legacy macros
-#ifndef DD_LEGACY_MACROS
-    #define DD_LEGACY_MACROS 0
-#endif
-
-#import <CocoaLumberjack/DDLog.h>
-
-/**
- *  Log formatter mode
- */
-typedef NS_ENUM(NSUInteger, DDDispatchQueueLogFormatterMode){
-    /**
-     *  This is the default option, means the formatter can be reused between multiple loggers and therefore is thread-safe.
-     *  There is, of course, a performance cost for the thread-safety
-     */
-    DDDispatchQueueLogFormatterModeShareble = 0,
-    /**
-     *  If the formatter will only be used by a single logger, then the thread-safety can be removed
-     *  @note: there is an assert checking if the formatter is added to multiple loggers and the mode is non-shareble
-     */
-    DDDispatchQueueLogFormatterModeNonShareble,
-};
-
-
-/**
- * This class provides a log formatter that prints the dispatch_queue label instead of the mach_thread_id.
- *
- * A log formatter can be added to any logger to format and/or filter its output.
- * You can learn more about log formatters here:
- * Documentation/CustomFormatters.md
- *
- * A typical `NSLog` (or `DDTTYLogger`) prints detailed info as `[<process_id>:<thread_id>]`.
- * For example:
- *
- * `2011-10-17 20:21:45.435 AppName[19928:5207] Your log message here`
- *
- * Where:
- * `- 19928 = process id`
- * `-  5207 = thread id (mach_thread_id printed in hex)`
- *
- * When using grand central dispatch (GCD), this information is less useful.
- * This is because a single serial dispatch queue may be run on any thread from an internally managed thread pool.
- * For example:
- *
- * `2011-10-17 20:32:31.111 AppName[19954:4d07] Message from my_serial_dispatch_queue`
- * `2011-10-17 20:32:31.112 AppName[19954:5207] Message from my_serial_dispatch_queue`
- * `2011-10-17 20:32:31.113 AppName[19954:2c55] Message from my_serial_dispatch_queue`
- *
- * This formatter allows you to replace the standard `[box:info]` with the dispatch_queue name.
- * For example:
- *
- * `2011-10-17 20:32:31.111 AppName[img-scaling] Message from my_serial_dispatch_queue`
- * `2011-10-17 20:32:31.112 AppName[img-scaling] Message from my_serial_dispatch_queue`
- * `2011-10-17 20:32:31.113 AppName[img-scaling] Message from my_serial_dispatch_queue`
- *
- * If the dispatch_queue doesn't have a set name, then it falls back to the thread name.
- * If the current thread doesn't have a set name, then it falls back to the mach_thread_id in hex (like normal).
- *
- * Note: If manually creating your own background threads (via `NSThread/alloc/init` or `NSThread/detachNeThread`),
- * you can use `[[NSThread currentThread] setName:(NSString *)]`.
- **/
-@interface DDDispatchQueueLogFormatter : NSObject <DDLogFormatter>
-
-/**
- * Standard init method.
- * Configure using properties as desired.
- **/
-- (instancetype)init NS_DESIGNATED_INITIALIZER;
-
-/**
- *  Initializer with ability to set the queue mode
- *
- *  @param mode choose between DDDispatchQueueLogFormatterModeShareble and DDDispatchQueueLogFormatterModeNonShareble, depending if the formatter is shared between several loggers or not
- */
-- (instancetype)initWithMode:(DDDispatchQueueLogFormatterMode)mode;
-
-/**
- * The minQueueLength restricts the minimum size of the [detail box].
- * If the minQueueLength is set to 0, there is no restriction.
- *
- * For example, say a dispatch_queue has a label of "diskIO":
- *
- * If the minQueueLength is 0: [diskIO]
- * If the minQueueLength is 4: [diskIO]
- * If the minQueueLength is 5: [diskIO]
- * If the minQueueLength is 6: [diskIO]
- * If the minQueueLength is 7: [diskIO ]
- * If the minQueueLength is 8: [diskIO  ]
- *
- * The default minQueueLength is 0 (no minimum, so [detail box] won't be padded).
- *
- * If you want every [detail box] to have the exact same width,
- * set both minQueueLength and maxQueueLength to the same value.
- **/
-@property (assign, atomic) NSUInteger minQueueLength;
-
-/**
- * The maxQueueLength restricts the number of characters that will be inside the [detail box].
- * If the maxQueueLength is 0, there is no restriction.
- *
- * For example, say a dispatch_queue has a label of "diskIO":
- *
- * If the maxQueueLength is 0: [diskIO]
- * If the maxQueueLength is 4: [disk]
- * If the maxQueueLength is 5: [diskI]
- * If the maxQueueLength is 6: [diskIO]
- * If the maxQueueLength is 7: [diskIO]
- * If the maxQueueLength is 8: [diskIO]
- *
- * The default maxQueueLength is 0 (no maximum, so [detail box] won't be truncated).
- *
- * If you want every [detail box] to have the exact same width,
- * set both minQueueLength and maxQueueLength to the same value.
- **/
-@property (assign, atomic) NSUInteger maxQueueLength;
-
-/**
- * Sometimes queue labels have long names like "com.apple.main-queue",
- * but you'd prefer something shorter like simply "main".
- *
- * This method allows you to set such preferred replacements.
- * The above example is set by default.
- *
- * To remove/undo a previous replacement, invoke this method with nil for the 'shortLabel' parameter.
- **/
-- (NSString *)replacementStringForQueueLabel:(NSString *)longLabel;
-
-/**
- *  See the `replacementStringForQueueLabel:` description
- */
-- (void)setReplacementString:(NSString *)shortLabel forQueueLabel:(NSString *)longLabel;
-
-@end
-
-/**
- *  Category on `DDDispatchQueueLogFormatter` to make method declarations easier to extend/modify
- **/
-@interface DDDispatchQueueLogFormatter (OverridableMethods)
-
-/**
- *  Date formatter default configuration
- */
-- (void)configureDateFormatter:(NSDateFormatter *)dateFormatter;
-
-/**
- *  Formatter method to transfrom from date to string
- */
-- (NSString *)stringFromDate:(NSDate *)date;
-
-/**
- *  Method to compute the queue thread label
- */
-- (NSString *)queueThreadLabelForLogMessage:(DDLogMessage *)logMessage;
-
-/**
- *  The actual method that formats a message (transforms a `DDLogMessage` model into a printable string)
- */
-- (NSString *)formatLogMessage:(DDLogMessage *)logMessage;
-
-@end
-
-#pragma mark - DDAtomicCounter
-
-@protocol DDAtomicCountable <NSObject>
-
-- (instancetype)initWithDefaultValue:(int32_t)defaultValue;
-- (int32_t)increment;
-- (int32_t)decrement;
-- (int32_t)value;
-
-@end
-
-@interface DDAtomicCounter: NSObject<DDAtomicCountable>
-@end

+ 0 - 330
Carthage/Checkouts/CocoaLumberjack/Classes/Extensions/DDDispatchQueueLogFormatter.m

@@ -1,330 +0,0 @@
-// Software License Agreement (BSD License)
-//
-// Copyright (c) 2010-2019, Deusty, LLC
-// All rights reserved.
-//
-// Redistribution and use of this software in source and binary forms,
-// with or without modification, are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above copyright notice,
-//   this list of conditions and the following disclaimer.
-//
-// * Neither the name of Deusty nor the names of its contributors may be used
-//   to endorse or promote products derived from this software without specific
-//   prior written permission of Deusty, LLC.
-
-#import "DDDispatchQueueLogFormatter.h"
-#import <pthread/pthread.h>
-#import <objc/runtime.h>
-
-#if !__has_feature(objc_arc)
-#error This file must be compiled with ARC. Use -fobjc-arc flag (or convert project to ARC).
-#endif
-
-#pragma mark - DDDispatchQueueLogFormatter
-
-@interface DDDispatchQueueLogFormatter () {
-    DDDispatchQueueLogFormatterMode _mode;
-    NSString *_dateFormatterKey;
-    DDAtomicCounter *_atomicLoggerCounter;
-    NSDateFormatter *_threadUnsafeDateFormatter; // Use [self stringFromDate]
-    
-    pthread_mutex_t _mutex;
-    
-    NSUInteger _minQueueLength;           // _prefix == Only access via atomic property
-    NSUInteger _maxQueueLength;           // _prefix == Only access via atomic property
-    NSMutableDictionary *_replacements;   // _prefix == Only access from within spinlock
-}
-
-@end
-
-
-@implementation DDDispatchQueueLogFormatter
-
-- (instancetype)init {
-    if ((self = [super init])) {
-        _mode = DDDispatchQueueLogFormatterModeShareble;
-
-        // We need to carefully pick the name for storing in thread dictionary to not
-        // use a formatter configured by subclass and avoid surprises.
-        Class cls = [self class];
-        Class superClass = class_getSuperclass(cls);
-        SEL configMethodName = @selector(configureDateFormatter:);
-        Method configMethod = class_getInstanceMethod(cls, configMethodName);
-        while (class_getInstanceMethod(superClass, configMethodName) == configMethod) {
-            cls = superClass;
-            superClass = class_getSuperclass(cls);
-        }
-        // now `cls` is the class that provides implementation for `configureDateFormatter:`
-        _dateFormatterKey = [NSString stringWithFormat:@"%s_NSDateFormatter", class_getName(cls)];
-
-        _atomicLoggerCounter = [[DDAtomicCounter alloc] initWithDefaultValue:0];
-        _threadUnsafeDateFormatter = nil;
-
-        _minQueueLength = 0;
-        _maxQueueLength = 0;
-        pthread_mutex_init(&_mutex, NULL);
-        _replacements = [[NSMutableDictionary alloc] init];
-
-        // Set default replacements:
-
-        _replacements[@"com.apple.main-thread"] = @"main";
-    }
-
-    return self;
-}
-
-- (instancetype)initWithMode:(DDDispatchQueueLogFormatterMode)mode {
-    if ((self = [self init])) {
-        _mode = mode;
-    }
-    return self;
-}
-
-- (void)dealloc {
-    pthread_mutex_destroy(&_mutex);
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark Configuration
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-@synthesize minQueueLength = _minQueueLength;
-@synthesize maxQueueLength = _maxQueueLength;
-
-- (NSString *)replacementStringForQueueLabel:(NSString *)longLabel {
-    NSString *result = nil;
-
-    pthread_mutex_lock(&_mutex);
-    {
-        result = _replacements[longLabel];
-    }
-    pthread_mutex_unlock(&_mutex);
-
-    return result;
-}
-
-- (void)setReplacementString:(NSString *)shortLabel forQueueLabel:(NSString *)longLabel {
-    pthread_mutex_lock(&_mutex);
-    {
-        if (shortLabel) {
-            _replacements[longLabel] = shortLabel;
-        } else {
-            [_replacements removeObjectForKey:longLabel];
-        }
-    }
-    pthread_mutex_unlock(&_mutex);
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark DDLogFormatter
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-- (NSDateFormatter *)createDateFormatter {
-    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
-    [self configureDateFormatter:formatter];
-    return formatter;
-}
-
-- (void)configureDateFormatter:(NSDateFormatter *)dateFormatter {
-    [dateFormatter setFormatterBehavior:NSDateFormatterBehavior10_4];
-    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss:SSS"];
-    [dateFormatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]];
-
-    NSString *calendarIdentifier = NSCalendarIdentifierGregorian;
-
-    [dateFormatter setCalendar:[[NSCalendar alloc] initWithCalendarIdentifier:calendarIdentifier]];
-}
-
-- (NSString *)stringFromDate:(NSDate *)date {
-
-    NSDateFormatter *dateFormatter = nil;
-    if (_mode == DDDispatchQueueLogFormatterModeNonShareble) {
-        // Single-threaded mode.
-
-        dateFormatter = _threadUnsafeDateFormatter;
-        if (dateFormatter == nil) {
-            dateFormatter = [self createDateFormatter];
-            _threadUnsafeDateFormatter = dateFormatter;
-        }
-    } else {
-        // Multi-threaded mode.
-        // NSDateFormatter is NOT thread-safe.
-
-        NSString *key = _dateFormatterKey;
-
-        NSMutableDictionary *threadDictionary = [[NSThread currentThread] threadDictionary];
-        dateFormatter = threadDictionary[key];
-
-        if (dateFormatter == nil) {
-            dateFormatter = [self createDateFormatter];
-            threadDictionary[key] = dateFormatter;
-        }
-    }
-
-    return [dateFormatter stringFromDate:date];
-}
-
-- (NSString *)queueThreadLabelForLogMessage:(DDLogMessage *)logMessage {
-    // As per the DDLogFormatter contract, this method is always invoked on the same thread/dispatch_queue
-
-    NSUInteger minQueueLength = self.minQueueLength;
-    NSUInteger maxQueueLength = self.maxQueueLength;
-
-    // Get the name of the queue, thread, or machID (whichever we are to use).
-
-    NSString *queueThreadLabel = nil;
-
-    BOOL useQueueLabel = YES;
-    BOOL useThreadName = NO;
-
-    if (logMessage->_queueLabel) {
-        // If you manually create a thread, it's dispatch_queue will have one of the thread names below.
-        // Since all such threads have the same name, we'd prefer to use the threadName or the machThreadID.
-
-        NSArray *names = @[
-            @"com.apple.root.low-priority",
-            @"com.apple.root.default-priority",
-            @"com.apple.root.high-priority",
-            @"com.apple.root.low-overcommit-priority",
-            @"com.apple.root.default-overcommit-priority",
-            @"com.apple.root.high-overcommit-priority",
-            @"com.apple.root.default-qos.overcommit"
-        ];
-
-        for (NSString * name in names) {
-            if ([logMessage->_queueLabel isEqualToString:name]) {
-                useQueueLabel = NO;
-                useThreadName = [logMessage->_threadName length] > 0;
-                break;
-            }
-        }
-    } else {
-        useQueueLabel = NO;
-        useThreadName = [logMessage->_threadName length] > 0;
-    }
-
-    if (useQueueLabel || useThreadName) {
-        NSString *fullLabel;
-        NSString *abrvLabel;
-
-        if (useQueueLabel) {
-            fullLabel = logMessage->_queueLabel;
-        } else {
-            fullLabel = logMessage->_threadName;
-        }
-
-        pthread_mutex_lock(&_mutex);
-        {
-            abrvLabel = _replacements[fullLabel];
-        }
-        pthread_mutex_unlock(&_mutex);
-
-        if (abrvLabel) {
-            queueThreadLabel = abrvLabel;
-        } else {
-            queueThreadLabel = fullLabel;
-        }
-    } else {
-        queueThreadLabel = logMessage->_threadID;
-    }
-
-    // Now use the thread label in the output
-
-    NSUInteger labelLength = [queueThreadLabel length];
-
-    // labelLength > maxQueueLength : truncate
-    // labelLength < minQueueLength : padding
-    //                              : exact
-
-    if ((maxQueueLength > 0) && (labelLength > maxQueueLength)) {
-        // Truncate
-
-        return [queueThreadLabel substringToIndex:maxQueueLength];
-    } else if (labelLength < minQueueLength) {
-        // Padding
-
-        NSUInteger numSpaces = minQueueLength - labelLength;
-
-        char spaces[numSpaces + 1];
-        memset(spaces, ' ', numSpaces);
-        spaces[numSpaces] = '\0';
-
-        return [NSString stringWithFormat:@"%@%s", queueThreadLabel, spaces];
-    } else {
-        // Exact
-
-        return queueThreadLabel;
-    }
-}
-
-- (NSString *)formatLogMessage:(DDLogMessage *)logMessage {
-    NSString *timestamp = [self stringFromDate:(logMessage->_timestamp)];
-    NSString *queueThreadLabel = [self queueThreadLabelForLogMessage:logMessage];
-
-    return [NSString stringWithFormat:@"%@ [%@] %@", timestamp, queueThreadLabel, logMessage->_message];
-}
-
-- (void)didAddToLogger:(id <DDLogger>  __attribute__((unused)))logger {
-    NSAssert([_atomicLoggerCounter increment] <= 1 || _mode == DDDispatchQueueLogFormatterModeShareble, @"Can't reuse formatter with multiple loggers in non-shareable mode.");
-}
-
-- (void)willRemoveFromLogger:(id <DDLogger> __attribute__((unused)))logger {
-    [_atomicLoggerCounter decrement];
-}
-
-@end
-
-#pragma mark - DDAtomicCounter
-
-#define DD_OSATOMIC_API_DEPRECATED (TARGET_OS_OSX && MAC_OS_X_VERSION_MIN_REQUIRED >= 101200) || (TARGET_OS_IOS && __IPHONE_OS_VERSION_MIN_REQUIRED >= 100000) || (TARGET_OS_WATCH && __WATCH_OS_VERSION_MIN_REQUIRED >= 30000) || (TARGET_OS_TV && __TV_OS_VERSION_MIN_REQUIRED >= 100000)
-
-#if DD_OSATOMIC_API_DEPRECATED
-#import <stdatomic.h>
-#else
-#import <libkern/OSAtomic.h>
-#endif
-
-@interface DDAtomicCounter() {
-#if DD_OSATOMIC_API_DEPRECATED
-    _Atomic(int32_t) _value;
-#else
-    int32_t _value;
-#endif
-}
-@end
-
-@implementation DDAtomicCounter
-
-- (instancetype)initWithDefaultValue:(int32_t)defaultValue {
-    if ((self = [super init])) {
-        _value = defaultValue;
-    }
-    return self;
-}
-
-- (int32_t)value {
-    return _value;
-}
-
-#if DD_OSATOMIC_API_DEPRECATED
-- (int32_t)increment {
-    atomic_fetch_add_explicit(&_value, 1, memory_order_relaxed);
-    return _value;
-}
-
-- (int32_t)decrement {
-    atomic_fetch_sub_explicit(&_value, 1, memory_order_relaxed);
-    return _value;
-}
-#else
-- (int32_t)increment {
-    return OSAtomicIncrement32(&_value);
-}
-
-- (int32_t)decrement {
-    return OSAtomicDecrement32(&_value);
-}
-#endif
-
-@end

+ 0 - 56
Carthage/Checkouts/CocoaLumberjack/Classes/Extensions/DDMultiFormatter.h

@@ -1,56 +0,0 @@
-// Software License Agreement (BSD License)
-//
-// Copyright (c) 2010-2019, Deusty, LLC
-// All rights reserved.
-//
-// Redistribution and use of this software in source and binary forms,
-// with or without modification, are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above copyright notice,
-//   this list of conditions and the following disclaimer.
-//
-// * Neither the name of Deusty nor the names of its contributors may be used
-//   to endorse or promote products derived from this software without specific
-//   prior written permission of Deusty, LLC.
-
-#import <Foundation/Foundation.h>
-
-// Disable legacy macros
-#ifndef DD_LEGACY_MACROS
-    #define DD_LEGACY_MACROS 0
-#endif
-
-#import <CocoaLumberjack/DDLog.h>
-
-/**
- * This formatter can be used to chain different formatters together.
- * The log message will processed in the order of the formatters added.
- **/
-@interface DDMultiFormatter : NSObject <DDLogFormatter>
-
-/**
- *  Array of chained formatters
- */
-@property (readonly) NSArray<id<DDLogFormatter>> *formatters;
-
-/**
- *  Add a new formatter
- */
-- (void)addFormatter:(id<DDLogFormatter>)formatter NS_SWIFT_NAME(add(_:));
-
-/**
- *  Remove a formatter
- */
-- (void)removeFormatter:(id<DDLogFormatter>)formatter NS_SWIFT_NAME(remove(_:));
-
-/**
- *  Remove all existing formatters
- */
-- (void)removeAllFormatters NS_SWIFT_NAME(removeAll());
-
-/**
- *  Check if a certain formatter is used
- */
-- (BOOL)isFormattingWithFormatter:(id<DDLogFormatter>)formatter;
-
-@end

+ 0 - 112
Carthage/Checkouts/CocoaLumberjack/Classes/Extensions/DDMultiFormatter.m

@@ -1,112 +0,0 @@
-// Software License Agreement (BSD License)
-//
-// Copyright (c) 2010-2019, Deusty, LLC
-// All rights reserved.
-//
-// Redistribution and use of this software in source and binary forms,
-// with or without modification, are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above copyright notice,
-//   this list of conditions and the following disclaimer.
-//
-// * Neither the name of Deusty nor the names of its contributors may be used
-//   to endorse or promote products derived from this software without specific
-//   prior written permission of Deusty, LLC.
-
-#import "DDMultiFormatter.h"
-
-#if !__has_feature(objc_arc)
-#error This file must be compiled with ARC. Use -fobjc-arc flag (or convert project to ARC).
-#endif
-
-
-@interface DDMultiFormatter () {
-    dispatch_queue_t _queue;
-    NSMutableArray *_formatters;
-}
-
-- (DDLogMessage *)logMessageForLine:(NSString *)line originalMessage:(DDLogMessage *)message;
-
-@end
-
-
-@implementation DDMultiFormatter
-
-- (instancetype)init {
-    self = [super init];
-
-    if (self) {
-        _queue = dispatch_queue_create("cocoa.lumberjack.multiformatter", DISPATCH_QUEUE_CONCURRENT);
-        _formatters = [NSMutableArray new];
-    }
-
-    return self;
-}
-
-#pragma mark Processing
-
-- (NSString *)formatLogMessage:(DDLogMessage *)logMessage {
-    __block NSString *line = logMessage->_message;
-
-    dispatch_sync(_queue, ^{
-        for (id<DDLogFormatter> formatter in self->_formatters) {
-            DDLogMessage *message = [self logMessageForLine:line originalMessage:logMessage];
-            line = [formatter formatLogMessage:message];
-
-            if (!line) {
-                break;
-            }
-        }
-    });
-
-    return line;
-}
-
-- (DDLogMessage *)logMessageForLine:(NSString *)line originalMessage:(DDLogMessage *)message {
-    DDLogMessage *newMessage = [message copy];
-
-    newMessage->_message = line;
-    return newMessage;
-}
-
-#pragma mark Formatters
-
-- (NSArray *)formatters {
-    __block NSArray *formatters;
-
-    dispatch_sync(_queue, ^{
-        formatters = [self->_formatters copy];
-    });
-
-    return formatters;
-}
-
-- (void)addFormatter:(id<DDLogFormatter>)formatter {
-    dispatch_barrier_async(_queue, ^{
-        [self->_formatters addObject:formatter];
-    });
-}
-
-- (void)removeFormatter:(id<DDLogFormatter>)formatter {
-    dispatch_barrier_async(_queue, ^{
-        [self->_formatters removeObject:formatter];
-    });
-}
-
-- (void)removeAllFormatters {
-    dispatch_barrier_async(_queue, ^{
-        [self->_formatters removeAllObjects];
-    });
-}
-
-- (BOOL)isFormattingWithFormatter:(id<DDLogFormatter>)formatter {
-    __block BOOL hasFormatter;
-
-    dispatch_sync(_queue, ^{
-        hasFormatter = [self->_formatters containsObject:formatter];
-    });
-
-    return hasFormatter;
-}
-
-@end

+ 4 - 5
Carthage/Checkouts/CocoaLumberjack/CocoaLumberjack.podspec

@@ -1,8 +1,7 @@
-
 Pod::Spec.new do |s|
 
   s.name     = 'CocoaLumberjack'
-  s.version  = '3.5.3'
+  s.version  = '3.6.0'
   s.license  = 'BSD'
   s.summary  = 'A fast & simple, yet powerful & flexible logging framework for Mac and iOS.'
   s.homepage = 'https://github.com/CocoaLumberjack/CocoaLumberjack'
@@ -28,13 +27,13 @@ Pod::Spec.new do |s|
   s.default_subspecs = 'Core'
 
   s.subspec 'Core' do |ss|
-    ss.source_files         = 'Classes/CocoaLumberjack.h', 'Classes/DD*.{h,m}', 'Classes/Extensions/*.{h,m}', 'Classes/CLI/*.{h,m}'
-    ss.private_header_files = 'Classes/DD*Internal.{h}'
+    ss.source_files         = 'Sources/CocoaLumberjack/**/*.{h,m}'
+    ss.private_header_files = 'Sources/CocoaLumberjack/DD*Internal.{h}'
   end
 
   s.subspec 'Swift' do |ss|
     ss.dependency 'CocoaLumberjack/Core'
-    ss.source_files        = 'Classes/CocoaLumberjack.swift', 'Classes/DDAssert.swift', 'Classes/SwiftLogLevel.h'
+    ss.source_files        = 'Sources/CocoaLumberjackSwift/*.swift', 'Sources/CocoaLumberjackSwiftSupport/include/*.{h}'
   end
 
 end

+ 0 - 47
Carthage/Checkouts/CocoaLumberjack/Framework/Lumberjack.xcworkspace/contents.xcworkspacedata

@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Workspace
-   version = "1.0">
-   <FileRef
-      location = "group:../Classes">
-   </FileRef>
-   <FileRef
-      location = "group:../Documentation">
-   </FileRef>
-   <Group
-      location = "container:.."
-      name = "Pod">
-      <FileRef
-         location = "group:CHANGELOG.md">
-      </FileRef>
-      <FileRef
-         location = "group:CocoaLumberjack.podspec">
-      </FileRef>
-      <FileRef
-         location = "group:Dangerfile">
-      </FileRef>
-      <FileRef
-         location = "group:Gemfile">
-      </FileRef>
-      <FileRef
-         location = "group:LICENSE">
-      </FileRef>
-      <FileRef
-         location = "group:LumberjackLogo.png">
-      </FileRef>
-      <FileRef
-         location = "group:README.md">
-      </FileRef>
-      <FileRef
-         location = "group:uncrustify.cfg">
-      </FileRef>
-   </Group>
-   <FileRef
-      location = "group:../Lumberjack.xcodeproj">
-   </FileRef>
-   <FileRef
-      location = "group:../Tests/Tests.xcodeproj">
-   </FileRef>
-   <FileRef
-      location = "group:../Integration/Integration.xcodeproj">
-   </FileRef>
-</Workspace>

+ 0 - 8
Carthage/Checkouts/CocoaLumberjack/Framework/Lumberjack.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist

@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>IDEDidComputeMac32BitWarning</key>
-	<true/>
-</dict>
-</plist>

+ 0 - 28
Carthage/Checkouts/CocoaLumberjack/Framework/Lumberjack/CocoaLumberjack-Info.plist

@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIconFile</key>
-	<string></string>
-	<key>CFBundleIdentifier</key>
-	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundleName</key>
-	<string>${PRODUCT_NAME}</string>
-	<key>CFBundlePackageType</key>
-	<string>FMWK</string>
-	<key>CFBundleShortVersionString</key>
-	<string>3.5.3</string>
-	<key>CFBundleSignature</key>
-	<string>????</string>
-	<key>CFBundleVersion</key>
-	<string>1</string>
-	<key>NSPrincipalClass</key>
-	<string></string>
-</dict>
-</plist>

+ 0 - 22
Carthage/Checkouts/CocoaLumberjack/Framework/Lumberjack/CocoaLumberjack-Prefix.pch

@@ -1,22 +0,0 @@
-// Software License Agreement (BSD License)
-//
-// Copyright (c) 2010-2019, Deusty, LLC
-// All rights reserved.
-//
-// Redistribution and use of this software in source and binary forms,
-// with or without modification, are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above copyright notice,
-//   this list of conditions and the following disclaimer.
-//
-// * Neither the name of Deusty nor the names of its contributors may be used
-//   to endorse or promote products derived from this software without specific
-//   prior written permission of Deusty, LLC.
-
-//
-// Prefix header for all source files of the 'Lumberjack' target in the 'Lumberjack' project
-//
-
-#ifdef __OBJC__
-	#import <Foundation/Foundation.h>
-#endif

+ 0 - 28
Carthage/Checkouts/CocoaLumberjack/Framework/Lumberjack/CocoaLumberjackSwift-Info.plist

@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIconFile</key>
-	<string></string>
-	<key>CFBundleIdentifier</key>
-	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundleName</key>
-	<string>${PRODUCT_NAME}</string>
-	<key>CFBundlePackageType</key>
-	<string>FMWK</string>
-	<key>CFBundleShortVersionString</key>
-	<string>3.5.3</string>
-	<key>CFBundleSignature</key>
-	<string>????</string>
-	<key>CFBundleVersion</key>
-	<string>1</string>
-	<key>NSPrincipalClass</key>
-	<string></string>
-</dict>
-</plist>

+ 0 - 21
Carthage/Checkouts/CocoaLumberjack/Framework/Lumberjack/CocoaLumberjackSwift.h

@@ -1,21 +0,0 @@
-// Software License Agreement (BSD License)
-//
-// Copyright (c) 2010-2019, Deusty, LLC
-// All rights reserved.
-//
-// Redistribution and use of this software in source and binary forms,
-// with or without modification, are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above copyright notice,
-//   this list of conditions and the following disclaimer.
-//
-// * Neither the name of Deusty nor the names of its contributors may be used
-//   to endorse or promote products derived from this software without specific
-//   prior written permission of Deusty, LLC.
-
-// This header is mostly blank because all of the declarations are in Swift.
-// Still, this header may still be needed so Swift doesn't complain when importing CocoaLumberjackSwift.
-
-@import CocoaLumberjack;
-
-#import <CocoaLumberjackSwift/SwiftLogLevel.h>

+ 0 - 207
Carthage/Checkouts/CocoaLumberjack/Tests/Tests/DDBasicLoggingTests.m

@@ -1,207 +0,0 @@
-// Software License Agreement (BSD License)
-//
-// Copyright (c) 2010-2019, Deusty, LLC
-// All rights reserved.
-//
-// Redistribution and use of this software in source and binary forms,
-// with or without modification, are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above copyright notice,
-//   this list of conditions and the following disclaimer.
-//
-// * Neither the name of Deusty nor the names of its contributors may be used
-//   to endorse or promote products derived from this software without specific
-//   prior written permission of Deusty, LLC.
-
-@import XCTest;
-#import <CocoaLumberjack/CocoaLumberjack.h>
-#import "DDSMocking.h"
-
-static const NSTimeInterval kAsyncExpectationTimeout = 3.0f;
-
-static DDLogLevel ddLogLevel = DDLogLevelVerbose;
-
-static DDBasicMock<DDAbstractLogger *> *createAbstractLogger(void (^didLogBlock)(id)) {
-    __auto_type logger = [DDBasicMock<DDAbstractLogger *> decoratedInstance:[[DDAbstractLogger alloc] init]];
-    __auto_type argument = [DDBasicMockArgument alongsideWithBlock:didLogBlock];
-    [logger addArgument:argument forSelector:@selector(logMessage:) atIndex:2];
-    return logger;
-}
-
-@interface DDSingleLoggerLoggingTests : XCTestCase
-@property (nonatomic, strong) NSArray *logs;
-@property (nonatomic, strong) XCTestExpectation *expectation;
-@property (nonatomic, strong) DDAbstractLogger *logger;
-@property (nonatomic, assign) NSUInteger numberMessagesLogged;
-@property (nonatomic) dispatch_queue_t serial;
-@end
-
-@implementation DDSingleLoggerLoggingTests
-
-- (void)setupLoggers {
-    __weak __auto_type weakSelf = self;
-    self.logger = (DDAbstractLogger *)createAbstractLogger(^(DDLogMessage *logMessage) {
-        dispatch_sync(self->_serial, ^{
-            __auto_type strongSelf = weakSelf;
-
-            XCTAssertTrue([logMessage isKindOfClass:[DDLogMessage class]]);
-            XCTAssertTrue([strongSelf.logs containsObject:logMessage.message]);
-            XCTAssertEqualObjects(logMessage.fileName, @"DDBasicLoggingTests");
-
-            strongSelf.numberMessagesLogged++;
-            if (strongSelf.numberMessagesLogged == [strongSelf.logs count]) {
-                [strongSelf.expectation fulfill];
-            }
-        });
-    });
-
-    [DDLog addLogger:self.logger];
-}
-
-- (void)setUp {
-    [super setUp];
-    self.serial = dispatch_queue_create("serial", NULL);
-    self.logs = @[];
-    self.numberMessagesLogged = 0;
-    ddLogLevel = DDLogLevelVerbose;
-    [self setupLoggers];
-}
-
-- (void)tearDown {
-    [DDLog removeAllLoggers];
-
-    self.logger = nil;
-    self.expectation = nil;
-
-    [super tearDown];
-}
-
-- (void)testAll5DefaultLevelsAsync {
-    self.expectation = [self expectationWithDescription:@"default log levels"];
-    self.logs = @[ @"Error", @"Warn", @"Info", @"Debug", @"Verbose" ];
-    
-    DDLogError  (@"Error");
-    DDLogWarn   (@"Warn");
-    DDLogInfo   (@"Info");
-    DDLogDebug  (@"Debug");
-    DDLogVerbose(@"Verbose");
-
-    [DDLog flushLog];
-    [self waitForExpectationsWithTimeout:kAsyncExpectationTimeout handler:^(NSError *timeoutError) {
-        XCTAssertNil(timeoutError);
-    }];
-}
-
-- (void)testLoggerLogLevelAsync {
-    self.expectation = [self expectationWithDescription:@"logger level"];
-    self.logs = @[ @"Error", @"Warn" ];
-    
-    [DDLog removeLogger:self.logger];
-    [DDLog addLogger:self.logger withLevel:DDLogLevelWarning];
-    
-    DDLogError  (@"Error");
-    DDLogWarn   (@"Warn");
-    DDLogInfo   (@"Info");
-    DDLogDebug  (@"Debug");
-    DDLogVerbose(@"Verbose");
-
-    [DDLog flushLog];
-    [self waitForExpectationsWithTimeout:kAsyncExpectationTimeout handler:^(NSError *timeoutError) {
-        XCTAssertNil(timeoutError);
-    }];
-}
-
-- (void)testGlobalLogLevelAsync {
-    self.expectation = [self expectationWithDescription:@"ddLogLevel"];
-    self.logs = @[ @"Error", @"Warn", @"Info" ];
-    
-    ddLogLevel = DDLogLevelInfo;
-    
-    DDLogError  (@"Error");
-    DDLogWarn   (@"Warn");
-    DDLogInfo   (@"Info");
-    DDLogDebug  (@"Debug");
-    DDLogVerbose(@"Verbose");
-
-    [DDLog flushLog];
-    [self waitForExpectationsWithTimeout:kAsyncExpectationTimeout handler:^(NSError *timeoutError) {
-        XCTAssertNil(timeoutError);
-    }];
-    
-    ddLogLevel = DDLogLevelVerbose;
-}
-
-@end
-
-static int const DDLoggerCount = 3;
-
-@interface DDMultipleLoggerLoggingTests : XCTestCase
-
-@property (nonatomic) NSArray *loggers;
-@property (nonatomic) NSArray *logs;
-
-@property (nonatomic) XCTestExpectation *expectation;
-
-@property (nonatomic) NSUInteger numberMessagesLogged;
-@property (nonatomic) dispatch_queue_t serial;
-
-@end
-
-@implementation DDMultipleLoggerLoggingTests
-
-- (void)setUp {
-    [super setUp];
-    self.serial = dispatch_queue_create("serial", NULL);
-    self.logs = @[];
-    self.numberMessagesLogged = 0;
-    ddLogLevel = DDLogLevelVerbose;
-    [self setupLoggers];
-}
-
-- (void)tearDown {
-    [DDLog removeAllLoggers];
-    self.loggers = nil;
-    self.expectation = nil;
-    [super tearDown];
-}
-
-- (void)setupLoggers {
-    NSMutableArray *loggers = [NSMutableArray arrayWithCapacity:DDLoggerCount];
-
-    for (NSUInteger i = 0; i < DDLoggerCount; i++) {
-        __weak __auto_type weakSelf = self;
-        __auto_type logger = (DDAbstractLogger *)createAbstractLogger(^(DDLogMessage *logMessage) {
-            dispatch_sync(self->_serial, ^{
-                __auto_type strongSelf = weakSelf;
-
-                XCTAssertTrue([logMessage isKindOfClass:[DDLogMessage class]]);
-                XCTAssertTrue([strongSelf.logs containsObject:logMessage.message]);
-                XCTAssertEqualObjects(logMessage.fileName, @"DDBasicLoggingTests");
-
-                strongSelf.numberMessagesLogged++;
-                if (strongSelf.numberMessagesLogged == [strongSelf.logs count]) {
-                    [strongSelf.expectation fulfill];
-                }
-            });
-        });
-
-        [loggers addObject:logger];
-        [DDLog addLogger:logger];
-    }
-
-    self.loggers = [loggers copy];
-}
-
-- (void)testAll5DefaultLevelsAsync {
-    self.expectation = [self expectationWithDescription:@"default log levels"];
-    self.logs = @[ @"Error" ];
-    
-    DDLogError(@"Error");
-
-    [DDLog flushLog];
-    [self waitForExpectationsWithTimeout:kAsyncExpectationTimeout handler:^(NSError *timeoutError) {
-        XCTAssertNil(timeoutError);
-    }];
-}
-
-@end

+ 0 - 226
Carthage/Checkouts/CocoaLumberjack/Tests/Tests/DDLogMessageTests.m

@@ -1,226 +0,0 @@
-// Software License Agreement (BSD License)
-//
-// Copyright (c) 2010-2019, Deusty, LLC
-// All rights reserved.
-//
-// Redistribution and use of this software in source and binary forms,
-// with or without modification, are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above copyright notice,
-//   this list of conditions and the following disclaimer.
-//
-// * Neither the name of Deusty nor the names of its contributors may be used
-//   to endorse or promote products derived from this software without specific
-//   prior written permission of Deusty, LLC.
-
-@import XCTest;
-#import <CocoaLumberjack/CocoaLumberjack.h>
-
-static NSString * const kDefaultMessage = @"Log message";
-
-@interface DDLogMessage (TestHelpers)
-+ (DDLogMessage *)test_message;
-+ (DDLogMessage *)test_messageWithMessage:(NSString *)message;
-+ (DDLogMessage *)test_messageWithFunction:(NSString *)function options:(DDLogMessageOptions)options;
-+ (DDLogMessage *)test_messageWithFile:(NSString *)file options:(DDLogMessageOptions)options;
-@end
-
-@implementation DDLogMessage (TestHelpers)
-+ (DDLogMessage *)test_message {
-    return [[DDLogMessage alloc] initWithMessage:kDefaultMessage
-                                           level:DDLogLevelDebug
-                                            flag:DDLogFlagError
-                                         context:1
-                                            file:@(__FILE__)
-                                        function:@(__func__)
-                                            line:__LINE__
-                                             tag:NULL
-                                         options:(DDLogMessageOptions)0
-                                       timestamp:nil];
-}
-
-+ (DDLogMessage *)test_messageWithMessage:(NSString *)message {
-    return [[DDLogMessage alloc] initWithMessage:message
-                                           level:DDLogLevelDebug
-                                            flag:DDLogFlagError
-                                         context:1
-                                            file:@(__FILE__)
-                                        function:@(__func__)
-                                            line:__LINE__
-                                             tag:NULL
-                                         options:(DDLogMessageOptions)0
-                                       timestamp:nil];
-}
-
-+ (DDLogMessage *)test_messageWithFunction:(NSString *)function
-                                   options:(DDLogMessageOptions)options {
-    return [[DDLogMessage alloc] initWithMessage:kDefaultMessage
-                                           level:DDLogLevelDebug
-                                            flag:DDLogFlagError
-                                         context:1
-                                            file:@(__FILE__)
-                                        function:function
-                                            line:__LINE__
-                                             tag:NULL
-                                         options:options
-                                       timestamp:nil];
-}
-
-+ (DDLogMessage *)test_messageWithFile:(NSString *)file
-                               options:(DDLogMessageOptions)options {
-    return [[DDLogMessage alloc] initWithMessage:kDefaultMessage
-                                           level:DDLogLevelDebug
-                                            flag:DDLogFlagError
-                                         context:1
-                                            file:file
-                                        function:@(__func__)
-                                            line:__LINE__
-                                             tag:NULL
-                                         options:options
-                                       timestamp:nil];
-}
-
-+ (DDLogMessage *)test_messageWithTimestamp:(NSDate *)timestamp {
-    return [[DDLogMessage alloc] initWithMessage:kDefaultMessage
-                                           level:DDLogLevelDebug
-                                            flag:DDLogFlagError
-                                         context:1
-                                            file:@(__FILE__)
-                                        function:@(__func__)
-                                            line:__LINE__
-                                             tag:NULL
-                                         options:(DDLogMessageOptions)0
-                                       timestamp:timestamp];
-}
-
-@end
-
-
-@interface DDLogMessageTests : XCTestCase
-@property (nonatomic, strong, readwrite) DDLogMessage *message;
-@end
-
-@implementation DDLogMessageTests
-
-- (void)setUp {
-    [super setUp];
-    self.message = [DDLogMessage test_message];
-}
-
-- (void)tearDown {
-    [super tearDown];
-    self.message = nil;
-}
-
-#pragma mark - Message creation
-
-- (void)testInitSetsAllPassedParameters {
-    __auto_type referenceDate = [NSDate dateWithTimeIntervalSince1970:0];
-    self.message =
-        [[DDLogMessage alloc] initWithMessage:kDefaultMessage
-                                        level:DDLogLevelDebug
-                                         flag:DDLogFlagError
-                                      context:1
-                                         file:@"DDLogMessageTests.m"
-                                     function:@"testInitSetsAllPassedParameters"
-                                         line:50
-                                          tag:NULL
-                                         options:DDLogMessageCopyFile
-                                         timestamp:referenceDate];
-    XCTAssertEqualObjects(self.message.message, @"Log message");
-    XCTAssertEqual(self.message.level, DDLogLevelDebug);
-    XCTAssertEqual(self.message.flag, DDLogFlagError);
-    XCTAssertEqual(self.message.context, 1);
-    XCTAssertEqualObjects(self.message.file, @"DDLogMessageTests.m");
-    XCTAssertEqualObjects(self.message.function, @"testInitSetsAllPassedParameters");
-    XCTAssertEqual(self.message.line, 50);
-    XCTAssertEqualObjects(self.message.tag, NULL);
-    XCTAssertEqual(self.message.options, DDLogMessageCopyFile);
-    XCTAssertEqualObjects(self.message.timestamp, referenceDate);
-}
-
-- (void)testInitCopyMessageParameter {
-    __auto_type message = [NSMutableString stringWithString:@"Log message"];
-    self.message = [DDLogMessage test_messageWithMessage:message];
-    [message appendString:@" changed"];
-    XCTAssertEqualObjects(self.message.message, @"Log message");
-}
-
-- (void)testInitSetsCurrentDateToTimestampIfItIsNotProvided {
-    XCTAssertLessThanOrEqual(fabs([self.message.timestamp timeIntervalSinceNow]), 5);
-}
-
-- (void)testInitSetsThreadIDToCurrentThreadID {
-    XCTAssertNotNil(self.message.threadID);
-}
-
-- (void)testInitSetsThreadNameToCurrentThreadName {
-    XCTAssertEqualObjects(self.message.threadName, NSThread.currentThread.name);
-}
-
-- (void)testInitSetsFileNameToFilenameWithoutExtensionIfItHasExtension {
-    XCTAssertEqualObjects(self.message.fileName, @"DDLogMessageTests");
-}
-
-- (void)testInitSetsFileNameToFilenameIfItHasNotExtension {
-    self.message = [DDLogMessage test_messageWithFile:@"no-extenstion" options:(DDLogMessageOptions)0];
-    XCTAssertEqualObjects(self.message.fileName, @"no-extenstion");
-}
-
-//TODO: How to test this for different SDK versions? (pavel, Sat 18 Apr 15:35:46 2015)
-- (void)testInitSetsQueueLabelToQueueWeCurrentlyRun {
-    // We're running on main thread
-    XCTAssertEqualObjects(self.message.queueLabel, @"com.apple.main-thread");
-}
-
-- (void)testInitAssignsFileParameterWithoutCopyFileOption {
-    __auto_type file = [NSMutableString stringWithString:@"file"];
-    self.message = [DDLogMessage test_messageWithFile:file options:(DDLogMessageOptions)0];
-    XCTAssertEqualObjects(self.message.file, @"file");
-    [file appendString:@"file"];
-    XCTAssertEqualObjects(self.message.file, @"filefile");
-}
-
-- (void)testInitCopyFileParameterWithCopyFileOption {
-    __auto_type file = [NSMutableString stringWithString:@"file"];
-    self.message = [DDLogMessage test_messageWithFile:file options:DDLogMessageCopyFile];
-    XCTAssertEqualObjects(self.message.file, @"file");
-    [file appendString:@"file"];
-    XCTAssertEqualObjects(self.message.file, @"file");
-}
-
-- (void)testInitAssignFunctionParameterWithoutCopyFunctionOption {
-    __auto_type function = [NSMutableString stringWithString:@"function"];
-    self.message = [DDLogMessage test_messageWithFunction:function options:(DDLogMessageOptions)0];
-    XCTAssertEqualObjects(self.message.function, @"function");
-    [function appendString:@"function"];
-    XCTAssertEqualObjects(self.message.function, @"functionfunction");
-}
-
-- (void)testInitCopyFunctionParameterWithCopyFunctionOption {
-    __auto_type function = [NSMutableString stringWithString:@"function"];
-    self.message = [DDLogMessage test_messageWithFunction:function options:DDLogMessageCopyFunction];
-    XCTAssertEqualObjects(self.message.function, @"function");
-    [function appendString:@"function"];
-    XCTAssertEqualObjects(self.message.function, @"function");
-}
-
-- (void)testCopyWithZoneCreatesValidCopy {
-    __auto_type copy = (typeof(self.message))[self.message copy];
-    XCTAssertEqualObjects(self.message.message, copy.message);
-    XCTAssertEqual(self.message.level, copy.level);
-    XCTAssertEqual(self.message.flag, copy.flag);
-    XCTAssertEqual(self.message.context, copy.context);
-    XCTAssertEqualObjects(self.message.file, copy.file);
-    XCTAssertEqualObjects(self.message.fileName, copy.fileName);
-    XCTAssertEqualObjects(self.message.function, copy.function);
-    XCTAssertEqual(self.message.line, copy.line);
-    XCTAssertEqualObjects(self.message.tag, copy.tag);
-    XCTAssertEqual(self.message.options, copy.options);
-    XCTAssertEqualObjects(self.message.timestamp, copy.timestamp);
-    XCTAssertEqualObjects(self.message.threadID, copy.threadID);
-    XCTAssertEqualObjects(self.message.threadName, copy.threadName);
-    XCTAssertEqualObjects(self.message.queueLabel, copy.queueLabel);
-}
-
-@end

+ 0 - 94
Carthage/Checkouts/CocoaLumberjack/Tests/Tests/DDLogTests.m

@@ -1,94 +0,0 @@
-// Software License Agreement (BSD License)
-//
-// Copyright (c) 2010-2019, Deusty, LLC
-// All rights reserved.
-//
-// Redistribution and use of this software in source and binary forms,
-// with or without modification, are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above copyright notice,
-//   this list of conditions and the following disclaimer.
-//
-// * Neither the name of Deusty nor the names of its contributors may be used
-//   to endorse or promote products derived from this software without specific
-//   prior written permission of Deusty, LLC.
-
-@import XCTest;
-#import <CocoaLumberjack/CocoaLumberjack.h>
-
-@interface DDTestLogger : NSObject <DDLogger>
-@end
-
-@implementation DDTestLogger
-@synthesize logFormatter;
-- (void)logMessage:(nonnull DDLogMessage *)logMessage {}
-@end
-
-@interface DDLogTests : XCTestCase
-@end
-
-
-// The fact thath the DDLog is initialized using +initialize makes it a bit
-// dificult to test as the state of the class might be hanging there when
-// test examples are run in parallel. Trying to reset the DDLog before & after
-// each test.
-@implementation DDLogTests
-
-- (void)setUp {
-    [super setUp];
-    [DDLog removeAllLoggers];
-}
-
-- (void)tearDown {
-    [DDLog removeAllLoggers];
-    [super tearDown];
-}
-
-
-#pragma mark - Logger management
-
-- (void)testAddLoggerAddsNewLoggerWithDDLogLevelAll {
-    __auto_type logger = [DDTestLogger new];
-    [DDLog addLogger:logger];
-    XCTAssertEqual([DDLog allLoggers].count, 1);
-}
-
-- (void)testAddLoggerWithLevelAddLoggerWithSpecifiedLevelMask {
-    __auto_type logger = [DDTestLogger new];
-    [DDLog addLogger:logger withLevel:DDLogLevelDebug | DDLogLevelError];
-    XCTAssertEqual([DDLog allLoggers].count, 1);
-}
-
-- (void)testRemoveLoggerRemovesExistingLogger {
-    __auto_type logger = [DDTestLogger new];
-    [DDLog addLogger:logger];
-    [DDLog addLogger:[DDTestLogger new]];
-    [DDLog removeLogger:logger];
-    XCTAssertEqual([DDLog allLoggers].count, 1);
-    XCTAssertFalse([[DDLog allLoggers] firstObject] == logger);
-}
-
-- (void)testRemoveAllLoggersRemovesAllLoggers {
-    [DDLog addLogger:[DDTestLogger new]];
-    [DDLog addLogger:[DDTestLogger new]];
-    [DDLog removeAllLoggers];
-    XCTAssertEqual([DDLog allLoggers].count, 0);
-}
-
-- (void)testAllLoggersReturnsAllLoggers {
-    [DDLog addLogger:[DDTestLogger new]];
-    [DDLog addLogger:[DDTestLogger new]];
-    XCTAssertEqual([DDLog allLoggers].count, 2);
-}
-
-- (void)testAllLoggersWithLevelReturnsAllLoggersWithLevel {
-    [DDLog addLogger:[DDTestLogger new]];
-    [DDLog addLogger:[DDTestLogger new] withLevel:DDLogLevelDebug];
-    [DDLog addLogger:[DDTestLogger new] withLevel:DDLogLevelInfo];
-    XCTAssertEqual([DDLog allLoggersWithLevel].count, 3);
-    XCTAssertEqual([[[DDLog allLoggersWithLevel] firstObject] level], DDLogLevelAll);
-    XCTAssertEqual([[DDLog allLoggersWithLevel][1] level], DDLogLevelDebug);
-    XCTAssertEqual([[DDLog allLoggersWithLevel][2] level], DDLogLevelInfo);
-}
-
-@end

+ 0 - 280
Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Pods/Headers/Private/DZNEmptyDataSet/UIScrollView+EmptyDataSet.h

@@ -1,280 +0,0 @@
-//
-//  UIScrollView+EmptyDataSet.h
-//  DZNEmptyDataSet
-//  https://github.com/dzenbot/DZNEmptyDataSet
-//
-//  Created by Ignacio Romero Zurbuchen on 6/20/14.
-//  Copyright (c) 2016 DZN Labs. All rights reserved.
-//  Licence: MIT-Licence
-//
-
-#import <UIKit/UIKit.h>
-
-@protocol DZNEmptyDataSetSource;
-@protocol DZNEmptyDataSetDelegate;
-
-#define DZNEmptyDataSetDeprecated(instead) DEPRECATED_MSG_ATTRIBUTE(" Use " # instead " instead")
-
-/**
- A drop-in UITableView/UICollectionView superclass category for showing empty datasets whenever the view has no content to display.
- @discussion It will work automatically, by just conforming to DZNEmptyDataSetSource, and returning the data you want to show.
- */
-@interface UIScrollView (EmptyDataSet)
-
-/** The empty datasets data source. */
-@property (nonatomic, weak) IBOutlet id <DZNEmptyDataSetSource> emptyDataSetSource;
-/** The empty datasets delegate. */
-@property (nonatomic, weak) IBOutlet id <DZNEmptyDataSetDelegate> emptyDataSetDelegate;
-/** YES if any empty dataset is visible. */
-@property (nonatomic, readonly, getter = isEmptyDataSetVisible) BOOL emptyDataSetVisible;
-
-/**
- Reloads the empty dataset content receiver.
- @discussion Call this method to force all the data to refresh. Calling -reloadData is similar, but this forces only the empty dataset to reload, not the entire table view or collection view.
- */
-- (void)reloadEmptyDataSet;
-
-@end
-
-
-/**
- The object that acts as the data source of the empty datasets.
- @discussion The data source must adopt the DZNEmptyDataSetSource protocol. The data source is not retained. All data source methods are optional.
- */
-@protocol DZNEmptyDataSetSource <NSObject>
-@optional
-
-/**
- Asks the data source for the title of the dataset.
- The dataset uses a fixed font style by default, if no attributes are set. If you want a different font style, return a attributed string.
- 
- @param scrollView A scrollView subclass informing the data source.
- @return An attributed string for the dataset title, combining font, text color, text pararaph style, etc.
- */
-- (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for the description of the dataset.
- The dataset uses a fixed font style by default, if no attributes are set. If you want a different font style, return a attributed string.
- 
- @param scrollView A scrollView subclass informing the data source.
- @return An attributed string for the dataset description text, combining font, text color, text pararaph style, etc.
- */
-- (NSAttributedString *)descriptionForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for the image of the dataset.
- 
- @param scrollView A scrollView subclass informing the data source.
- @return An image for the dataset.
- */
-- (UIImage *)imageForEmptyDataSet:(UIScrollView *)scrollView;
-
-
-/**
- Asks the data source for a tint color of the image dataset. Default is nil.
- 
- @param scrollView A scrollView subclass object informing the data source.
- @return A color to tint the image of the dataset.
- */
-- (UIColor *)imageTintColorForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- *  Asks the data source for the image animation of the dataset.
- *
- *  @param scrollView A scrollView subclass object informing the delegate.
- *
- *  @return image animation
- */
-- (CAAnimation *) imageAnimationForEmptyDataSet:(UIScrollView *) scrollView;
-
-/**
- Asks the data source for the title to be used for the specified button state.
- The dataset uses a fixed font style by default, if no attributes are set. If you want a different font style, return a attributed string.
- 
- @param scrollView A scrollView subclass object informing the data source.
- @param state The state that uses the specified title. The possible values are described in UIControlState.
- @return An attributed string for the dataset button title, combining font, text color, text pararaph style, etc.
- */
-- (NSAttributedString *)buttonTitleForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state;
-
-/**
- Asks the data source for the image to be used for the specified button state.
- This method will override buttonTitleForEmptyDataSet:forState: and present the image only without any text.
- 
- @param scrollView A scrollView subclass object informing the data source.
- @param state The state that uses the specified title. The possible values are described in UIControlState.
- @return An image for the dataset button imageview.
- */
-- (UIImage *)buttonImageForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state;
-
-/**
- Asks the data source for a background image to be used for the specified button state.
- There is no default style for this call.
- 
- @param scrollView A scrollView subclass informing the data source.
- @param state The state that uses the specified image. The values are described in UIControlState.
- @return An attributed string for the dataset button title, combining font, text color, text pararaph style, etc.
- */
-- (UIImage *)buttonBackgroundImageForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state;
-
-/**
- Asks the data source for the background color of the dataset. Default is clear color.
- 
- @param scrollView A scrollView subclass object informing the data source.
- @return A color to be applied to the dataset background view.
- */
-- (UIColor *)backgroundColorForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for a custom view to be displayed instead of the default views such as labels, imageview and button. Default is nil.
- Use this method to show an activity view indicator for loading feedback, or for complete custom empty data set.
- Returning a custom view will ignore -offsetForEmptyDataSet and -spaceHeightForEmptyDataSet configurations.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return The custom view.
- */
-- (UIView *)customViewForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for a offset for vertical and horizontal alignment of the content. Default is CGPointZero.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return The offset for vertical and horizontal alignment.
- */
-- (CGPoint)offsetForEmptyDataSet:(UIScrollView *)scrollView DZNEmptyDataSetDeprecated(-verticalOffsetForEmptyDataSet:);
-- (CGFloat)verticalOffsetForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for a vertical space between elements. Default is 11 pts.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return The space height between elements.
- */
-- (CGFloat)spaceHeightForEmptyDataSet:(UIScrollView *)scrollView;
-
-@end
-
-
-/**
- The object that acts as the delegate of the empty datasets.
- @discussion The delegate can adopt the DZNEmptyDataSetDelegate protocol. The delegate is not retained. All delegate methods are optional.
- 
- @discussion All delegate methods are optional. Use this delegate for receiving action callbacks.
- */
-@protocol DZNEmptyDataSetDelegate <NSObject>
-@optional
-
-/**
- Asks the delegate to know if the empty dataset should fade in when displayed. Default is YES.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset should fade in.
- */
-- (BOOL)emptyDataSetShouldFadeIn:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate to know if the empty dataset should still be displayed when the amount of items is more than 0. Default is NO
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if empty dataset should be forced to display
- */
-- (BOOL)emptyDataSetShouldBeForcedToDisplay:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate to know if the empty dataset should be rendered and displayed. Default is YES.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset should show.
- */
-- (BOOL)emptyDataSetShouldDisplay:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate for touch permission. Default is YES.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset receives touch gestures.
- */
-- (BOOL)emptyDataSetShouldAllowTouch:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate for scroll permission. Default is NO.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset is allowed to be scrollable.
- */
-- (BOOL)emptyDataSetShouldAllowScroll:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate for image view animation permission. Default is NO.
- Make sure to return a valid CAAnimation object from imageAnimationForEmptyDataSet:
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset is allowed to animate
- */
-- (BOOL)emptyDataSetShouldAnimateImageView:(UIScrollView *)scrollView;
-
-/**
- Tells the delegate that the empty dataset view was tapped.
- Use this method either to resignFirstResponder of a textfield or searchBar.
- 
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetDidTapView:(UIScrollView *)scrollView DZNEmptyDataSetDeprecated(-emptyDataSet:didTapView:);
-
-/**
- Tells the delegate that the action button was tapped.
- 
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetDidTapButton:(UIScrollView *)scrollView DZNEmptyDataSetDeprecated(-emptyDataSet:didTapButton:);
-
-/**
- Tells the delegate that the empty dataset view was tapped.
- Use this method either to resignFirstResponder of a textfield or searchBar.
- 
- @param scrollView A scrollView subclass informing the delegate.
- @param view the view tapped by the user
- */
-- (void)emptyDataSet:(UIScrollView *)scrollView didTapView:(UIView *)view;
-
-/**
- Tells the delegate that the action button was tapped.
- 
- @param scrollView A scrollView subclass informing the delegate.
- @param button the button tapped by the user
- */
-- (void)emptyDataSet:(UIScrollView *)scrollView didTapButton:(UIButton *)button;
-
-/**
- Tells the delegate that the empty data set will appear.
-
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetWillAppear:(UIScrollView *)scrollView;
-
-/**
- Tells the delegate that the empty data set did appear.
-
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetDidAppear:(UIScrollView *)scrollView;
-
-/**
- Tells the delegate that the empty data set will disappear.
-
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetWillDisappear:(UIScrollView *)scrollView;
-
-/**
- Tells the delegate that the empty data set did disappear.
-
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetDidDisappear:(UIScrollView *)scrollView;
-
-@end
-
-#undef DZNEmptyDataSetDeprecated
-

+ 1 - 0
Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Pods/Headers/Private/DZNEmptyDataSet/UIScrollView+EmptyDataSet.h

@@ -0,0 +1 @@
+../../../../../../Source/UIScrollView+EmptyDataSet.h

+ 0 - 280
Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Pods/Headers/Public/DZNEmptyDataSet/UIScrollView+EmptyDataSet.h

@@ -1,280 +0,0 @@
-//
-//  UIScrollView+EmptyDataSet.h
-//  DZNEmptyDataSet
-//  https://github.com/dzenbot/DZNEmptyDataSet
-//
-//  Created by Ignacio Romero Zurbuchen on 6/20/14.
-//  Copyright (c) 2016 DZN Labs. All rights reserved.
-//  Licence: MIT-Licence
-//
-
-#import <UIKit/UIKit.h>
-
-@protocol DZNEmptyDataSetSource;
-@protocol DZNEmptyDataSetDelegate;
-
-#define DZNEmptyDataSetDeprecated(instead) DEPRECATED_MSG_ATTRIBUTE(" Use " # instead " instead")
-
-/**
- A drop-in UITableView/UICollectionView superclass category for showing empty datasets whenever the view has no content to display.
- @discussion It will work automatically, by just conforming to DZNEmptyDataSetSource, and returning the data you want to show.
- */
-@interface UIScrollView (EmptyDataSet)
-
-/** The empty datasets data source. */
-@property (nonatomic, weak) IBOutlet id <DZNEmptyDataSetSource> emptyDataSetSource;
-/** The empty datasets delegate. */
-@property (nonatomic, weak) IBOutlet id <DZNEmptyDataSetDelegate> emptyDataSetDelegate;
-/** YES if any empty dataset is visible. */
-@property (nonatomic, readonly, getter = isEmptyDataSetVisible) BOOL emptyDataSetVisible;
-
-/**
- Reloads the empty dataset content receiver.
- @discussion Call this method to force all the data to refresh. Calling -reloadData is similar, but this forces only the empty dataset to reload, not the entire table view or collection view.
- */
-- (void)reloadEmptyDataSet;
-
-@end
-
-
-/**
- The object that acts as the data source of the empty datasets.
- @discussion The data source must adopt the DZNEmptyDataSetSource protocol. The data source is not retained. All data source methods are optional.
- */
-@protocol DZNEmptyDataSetSource <NSObject>
-@optional
-
-/**
- Asks the data source for the title of the dataset.
- The dataset uses a fixed font style by default, if no attributes are set. If you want a different font style, return a attributed string.
- 
- @param scrollView A scrollView subclass informing the data source.
- @return An attributed string for the dataset title, combining font, text color, text pararaph style, etc.
- */
-- (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for the description of the dataset.
- The dataset uses a fixed font style by default, if no attributes are set. If you want a different font style, return a attributed string.
- 
- @param scrollView A scrollView subclass informing the data source.
- @return An attributed string for the dataset description text, combining font, text color, text pararaph style, etc.
- */
-- (NSAttributedString *)descriptionForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for the image of the dataset.
- 
- @param scrollView A scrollView subclass informing the data source.
- @return An image for the dataset.
- */
-- (UIImage *)imageForEmptyDataSet:(UIScrollView *)scrollView;
-
-
-/**
- Asks the data source for a tint color of the image dataset. Default is nil.
- 
- @param scrollView A scrollView subclass object informing the data source.
- @return A color to tint the image of the dataset.
- */
-- (UIColor *)imageTintColorForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- *  Asks the data source for the image animation of the dataset.
- *
- *  @param scrollView A scrollView subclass object informing the delegate.
- *
- *  @return image animation
- */
-- (CAAnimation *) imageAnimationForEmptyDataSet:(UIScrollView *) scrollView;
-
-/**
- Asks the data source for the title to be used for the specified button state.
- The dataset uses a fixed font style by default, if no attributes are set. If you want a different font style, return a attributed string.
- 
- @param scrollView A scrollView subclass object informing the data source.
- @param state The state that uses the specified title. The possible values are described in UIControlState.
- @return An attributed string for the dataset button title, combining font, text color, text pararaph style, etc.
- */
-- (NSAttributedString *)buttonTitleForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state;
-
-/**
- Asks the data source for the image to be used for the specified button state.
- This method will override buttonTitleForEmptyDataSet:forState: and present the image only without any text.
- 
- @param scrollView A scrollView subclass object informing the data source.
- @param state The state that uses the specified title. The possible values are described in UIControlState.
- @return An image for the dataset button imageview.
- */
-- (UIImage *)buttonImageForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state;
-
-/**
- Asks the data source for a background image to be used for the specified button state.
- There is no default style for this call.
- 
- @param scrollView A scrollView subclass informing the data source.
- @param state The state that uses the specified image. The values are described in UIControlState.
- @return An attributed string for the dataset button title, combining font, text color, text pararaph style, etc.
- */
-- (UIImage *)buttonBackgroundImageForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state;
-
-/**
- Asks the data source for the background color of the dataset. Default is clear color.
- 
- @param scrollView A scrollView subclass object informing the data source.
- @return A color to be applied to the dataset background view.
- */
-- (UIColor *)backgroundColorForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for a custom view to be displayed instead of the default views such as labels, imageview and button. Default is nil.
- Use this method to show an activity view indicator for loading feedback, or for complete custom empty data set.
- Returning a custom view will ignore -offsetForEmptyDataSet and -spaceHeightForEmptyDataSet configurations.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return The custom view.
- */
-- (UIView *)customViewForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for a offset for vertical and horizontal alignment of the content. Default is CGPointZero.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return The offset for vertical and horizontal alignment.
- */
-- (CGPoint)offsetForEmptyDataSet:(UIScrollView *)scrollView DZNEmptyDataSetDeprecated(-verticalOffsetForEmptyDataSet:);
-- (CGFloat)verticalOffsetForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for a vertical space between elements. Default is 11 pts.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return The space height between elements.
- */
-- (CGFloat)spaceHeightForEmptyDataSet:(UIScrollView *)scrollView;
-
-@end
-
-
-/**
- The object that acts as the delegate of the empty datasets.
- @discussion The delegate can adopt the DZNEmptyDataSetDelegate protocol. The delegate is not retained. All delegate methods are optional.
- 
- @discussion All delegate methods are optional. Use this delegate for receiving action callbacks.
- */
-@protocol DZNEmptyDataSetDelegate <NSObject>
-@optional
-
-/**
- Asks the delegate to know if the empty dataset should fade in when displayed. Default is YES.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset should fade in.
- */
-- (BOOL)emptyDataSetShouldFadeIn:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate to know if the empty dataset should still be displayed when the amount of items is more than 0. Default is NO
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if empty dataset should be forced to display
- */
-- (BOOL)emptyDataSetShouldBeForcedToDisplay:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate to know if the empty dataset should be rendered and displayed. Default is YES.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset should show.
- */
-- (BOOL)emptyDataSetShouldDisplay:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate for touch permission. Default is YES.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset receives touch gestures.
- */
-- (BOOL)emptyDataSetShouldAllowTouch:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate for scroll permission. Default is NO.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset is allowed to be scrollable.
- */
-- (BOOL)emptyDataSetShouldAllowScroll:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate for image view animation permission. Default is NO.
- Make sure to return a valid CAAnimation object from imageAnimationForEmptyDataSet:
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset is allowed to animate
- */
-- (BOOL)emptyDataSetShouldAnimateImageView:(UIScrollView *)scrollView;
-
-/**
- Tells the delegate that the empty dataset view was tapped.
- Use this method either to resignFirstResponder of a textfield or searchBar.
- 
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetDidTapView:(UIScrollView *)scrollView DZNEmptyDataSetDeprecated(-emptyDataSet:didTapView:);
-
-/**
- Tells the delegate that the action button was tapped.
- 
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetDidTapButton:(UIScrollView *)scrollView DZNEmptyDataSetDeprecated(-emptyDataSet:didTapButton:);
-
-/**
- Tells the delegate that the empty dataset view was tapped.
- Use this method either to resignFirstResponder of a textfield or searchBar.
- 
- @param scrollView A scrollView subclass informing the delegate.
- @param view the view tapped by the user
- */
-- (void)emptyDataSet:(UIScrollView *)scrollView didTapView:(UIView *)view;
-
-/**
- Tells the delegate that the action button was tapped.
- 
- @param scrollView A scrollView subclass informing the delegate.
- @param button the button tapped by the user
- */
-- (void)emptyDataSet:(UIScrollView *)scrollView didTapButton:(UIButton *)button;
-
-/**
- Tells the delegate that the empty data set will appear.
-
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetWillAppear:(UIScrollView *)scrollView;
-
-/**
- Tells the delegate that the empty data set did appear.
-
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetDidAppear:(UIScrollView *)scrollView;
-
-/**
- Tells the delegate that the empty data set will disappear.
-
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetWillDisappear:(UIScrollView *)scrollView;
-
-/**
- Tells the delegate that the empty data set did disappear.
-
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetDidDisappear:(UIScrollView *)scrollView;
-
-@end
-
-#undef DZNEmptyDataSetDeprecated
-

+ 1 - 0
Carthage/Checkouts/DZNEmptyDataSet/Examples/Applications/Pods/Headers/Public/DZNEmptyDataSet/UIScrollView+EmptyDataSet.h

@@ -0,0 +1 @@
+../../../../../../Source/UIScrollView+EmptyDataSet.h

+ 0 - 280
Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Pods/Headers/Private/DZNEmptyDataSet/UIScrollView+EmptyDataSet.h

@@ -1,280 +0,0 @@
-//
-//  UIScrollView+EmptyDataSet.h
-//  DZNEmptyDataSet
-//  https://github.com/dzenbot/DZNEmptyDataSet
-//
-//  Created by Ignacio Romero Zurbuchen on 6/20/14.
-//  Copyright (c) 2016 DZN Labs. All rights reserved.
-//  Licence: MIT-Licence
-//
-
-#import <UIKit/UIKit.h>
-
-@protocol DZNEmptyDataSetSource;
-@protocol DZNEmptyDataSetDelegate;
-
-#define DZNEmptyDataSetDeprecated(instead) DEPRECATED_MSG_ATTRIBUTE(" Use " # instead " instead")
-
-/**
- A drop-in UITableView/UICollectionView superclass category for showing empty datasets whenever the view has no content to display.
- @discussion It will work automatically, by just conforming to DZNEmptyDataSetSource, and returning the data you want to show.
- */
-@interface UIScrollView (EmptyDataSet)
-
-/** The empty datasets data source. */
-@property (nonatomic, weak) IBOutlet id <DZNEmptyDataSetSource> emptyDataSetSource;
-/** The empty datasets delegate. */
-@property (nonatomic, weak) IBOutlet id <DZNEmptyDataSetDelegate> emptyDataSetDelegate;
-/** YES if any empty dataset is visible. */
-@property (nonatomic, readonly, getter = isEmptyDataSetVisible) BOOL emptyDataSetVisible;
-
-/**
- Reloads the empty dataset content receiver.
- @discussion Call this method to force all the data to refresh. Calling -reloadData is similar, but this forces only the empty dataset to reload, not the entire table view or collection view.
- */
-- (void)reloadEmptyDataSet;
-
-@end
-
-
-/**
- The object that acts as the data source of the empty datasets.
- @discussion The data source must adopt the DZNEmptyDataSetSource protocol. The data source is not retained. All data source methods are optional.
- */
-@protocol DZNEmptyDataSetSource <NSObject>
-@optional
-
-/**
- Asks the data source for the title of the dataset.
- The dataset uses a fixed font style by default, if no attributes are set. If you want a different font style, return a attributed string.
- 
- @param scrollView A scrollView subclass informing the data source.
- @return An attributed string for the dataset title, combining font, text color, text pararaph style, etc.
- */
-- (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for the description of the dataset.
- The dataset uses a fixed font style by default, if no attributes are set. If you want a different font style, return a attributed string.
- 
- @param scrollView A scrollView subclass informing the data source.
- @return An attributed string for the dataset description text, combining font, text color, text pararaph style, etc.
- */
-- (NSAttributedString *)descriptionForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for the image of the dataset.
- 
- @param scrollView A scrollView subclass informing the data source.
- @return An image for the dataset.
- */
-- (UIImage *)imageForEmptyDataSet:(UIScrollView *)scrollView;
-
-
-/**
- Asks the data source for a tint color of the image dataset. Default is nil.
- 
- @param scrollView A scrollView subclass object informing the data source.
- @return A color to tint the image of the dataset.
- */
-- (UIColor *)imageTintColorForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- *  Asks the data source for the image animation of the dataset.
- *
- *  @param scrollView A scrollView subclass object informing the delegate.
- *
- *  @return image animation
- */
-- (CAAnimation *) imageAnimationForEmptyDataSet:(UIScrollView *) scrollView;
-
-/**
- Asks the data source for the title to be used for the specified button state.
- The dataset uses a fixed font style by default, if no attributes are set. If you want a different font style, return a attributed string.
- 
- @param scrollView A scrollView subclass object informing the data source.
- @param state The state that uses the specified title. The possible values are described in UIControlState.
- @return An attributed string for the dataset button title, combining font, text color, text pararaph style, etc.
- */
-- (NSAttributedString *)buttonTitleForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state;
-
-/**
- Asks the data source for the image to be used for the specified button state.
- This method will override buttonTitleForEmptyDataSet:forState: and present the image only without any text.
- 
- @param scrollView A scrollView subclass object informing the data source.
- @param state The state that uses the specified title. The possible values are described in UIControlState.
- @return An image for the dataset button imageview.
- */
-- (UIImage *)buttonImageForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state;
-
-/**
- Asks the data source for a background image to be used for the specified button state.
- There is no default style for this call.
- 
- @param scrollView A scrollView subclass informing the data source.
- @param state The state that uses the specified image. The values are described in UIControlState.
- @return An attributed string for the dataset button title, combining font, text color, text pararaph style, etc.
- */
-- (UIImage *)buttonBackgroundImageForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state;
-
-/**
- Asks the data source for the background color of the dataset. Default is clear color.
- 
- @param scrollView A scrollView subclass object informing the data source.
- @return A color to be applied to the dataset background view.
- */
-- (UIColor *)backgroundColorForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for a custom view to be displayed instead of the default views such as labels, imageview and button. Default is nil.
- Use this method to show an activity view indicator for loading feedback, or for complete custom empty data set.
- Returning a custom view will ignore -offsetForEmptyDataSet and -spaceHeightForEmptyDataSet configurations.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return The custom view.
- */
-- (UIView *)customViewForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for a offset for vertical and horizontal alignment of the content. Default is CGPointZero.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return The offset for vertical and horizontal alignment.
- */
-- (CGPoint)offsetForEmptyDataSet:(UIScrollView *)scrollView DZNEmptyDataSetDeprecated(-verticalOffsetForEmptyDataSet:);
-- (CGFloat)verticalOffsetForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for a vertical space between elements. Default is 11 pts.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return The space height between elements.
- */
-- (CGFloat)spaceHeightForEmptyDataSet:(UIScrollView *)scrollView;
-
-@end
-
-
-/**
- The object that acts as the delegate of the empty datasets.
- @discussion The delegate can adopt the DZNEmptyDataSetDelegate protocol. The delegate is not retained. All delegate methods are optional.
- 
- @discussion All delegate methods are optional. Use this delegate for receiving action callbacks.
- */
-@protocol DZNEmptyDataSetDelegate <NSObject>
-@optional
-
-/**
- Asks the delegate to know if the empty dataset should fade in when displayed. Default is YES.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset should fade in.
- */
-- (BOOL)emptyDataSetShouldFadeIn:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate to know if the empty dataset should still be displayed when the amount of items is more than 0. Default is NO
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if empty dataset should be forced to display
- */
-- (BOOL)emptyDataSetShouldBeForcedToDisplay:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate to know if the empty dataset should be rendered and displayed. Default is YES.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset should show.
- */
-- (BOOL)emptyDataSetShouldDisplay:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate for touch permission. Default is YES.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset receives touch gestures.
- */
-- (BOOL)emptyDataSetShouldAllowTouch:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate for scroll permission. Default is NO.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset is allowed to be scrollable.
- */
-- (BOOL)emptyDataSetShouldAllowScroll:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate for image view animation permission. Default is NO.
- Make sure to return a valid CAAnimation object from imageAnimationForEmptyDataSet:
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset is allowed to animate
- */
-- (BOOL)emptyDataSetShouldAnimateImageView:(UIScrollView *)scrollView;
-
-/**
- Tells the delegate that the empty dataset view was tapped.
- Use this method either to resignFirstResponder of a textfield or searchBar.
- 
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetDidTapView:(UIScrollView *)scrollView DZNEmptyDataSetDeprecated(-emptyDataSet:didTapView:);
-
-/**
- Tells the delegate that the action button was tapped.
- 
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetDidTapButton:(UIScrollView *)scrollView DZNEmptyDataSetDeprecated(-emptyDataSet:didTapButton:);
-
-/**
- Tells the delegate that the empty dataset view was tapped.
- Use this method either to resignFirstResponder of a textfield or searchBar.
- 
- @param scrollView A scrollView subclass informing the delegate.
- @param view the view tapped by the user
- */
-- (void)emptyDataSet:(UIScrollView *)scrollView didTapView:(UIView *)view;
-
-/**
- Tells the delegate that the action button was tapped.
- 
- @param scrollView A scrollView subclass informing the delegate.
- @param button the button tapped by the user
- */
-- (void)emptyDataSet:(UIScrollView *)scrollView didTapButton:(UIButton *)button;
-
-/**
- Tells the delegate that the empty data set will appear.
-
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetWillAppear:(UIScrollView *)scrollView;
-
-/**
- Tells the delegate that the empty data set did appear.
-
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetDidAppear:(UIScrollView *)scrollView;
-
-/**
- Tells the delegate that the empty data set will disappear.
-
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetWillDisappear:(UIScrollView *)scrollView;
-
-/**
- Tells the delegate that the empty data set did disappear.
-
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetDidDisappear:(UIScrollView *)scrollView;
-
-@end
-
-#undef DZNEmptyDataSetDeprecated
-

+ 1 - 0
Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Pods/Headers/Private/DZNEmptyDataSet/UIScrollView+EmptyDataSet.h

@@ -0,0 +1 @@
+../../../../../../Source/UIScrollView+EmptyDataSet.h

+ 0 - 280
Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Pods/Headers/Public/DZNEmptyDataSet/UIScrollView+EmptyDataSet.h

@@ -1,280 +0,0 @@
-//
-//  UIScrollView+EmptyDataSet.h
-//  DZNEmptyDataSet
-//  https://github.com/dzenbot/DZNEmptyDataSet
-//
-//  Created by Ignacio Romero Zurbuchen on 6/20/14.
-//  Copyright (c) 2016 DZN Labs. All rights reserved.
-//  Licence: MIT-Licence
-//
-
-#import <UIKit/UIKit.h>
-
-@protocol DZNEmptyDataSetSource;
-@protocol DZNEmptyDataSetDelegate;
-
-#define DZNEmptyDataSetDeprecated(instead) DEPRECATED_MSG_ATTRIBUTE(" Use " # instead " instead")
-
-/**
- A drop-in UITableView/UICollectionView superclass category for showing empty datasets whenever the view has no content to display.
- @discussion It will work automatically, by just conforming to DZNEmptyDataSetSource, and returning the data you want to show.
- */
-@interface UIScrollView (EmptyDataSet)
-
-/** The empty datasets data source. */
-@property (nonatomic, weak) IBOutlet id <DZNEmptyDataSetSource> emptyDataSetSource;
-/** The empty datasets delegate. */
-@property (nonatomic, weak) IBOutlet id <DZNEmptyDataSetDelegate> emptyDataSetDelegate;
-/** YES if any empty dataset is visible. */
-@property (nonatomic, readonly, getter = isEmptyDataSetVisible) BOOL emptyDataSetVisible;
-
-/**
- Reloads the empty dataset content receiver.
- @discussion Call this method to force all the data to refresh. Calling -reloadData is similar, but this forces only the empty dataset to reload, not the entire table view or collection view.
- */
-- (void)reloadEmptyDataSet;
-
-@end
-
-
-/**
- The object that acts as the data source of the empty datasets.
- @discussion The data source must adopt the DZNEmptyDataSetSource protocol. The data source is not retained. All data source methods are optional.
- */
-@protocol DZNEmptyDataSetSource <NSObject>
-@optional
-
-/**
- Asks the data source for the title of the dataset.
- The dataset uses a fixed font style by default, if no attributes are set. If you want a different font style, return a attributed string.
- 
- @param scrollView A scrollView subclass informing the data source.
- @return An attributed string for the dataset title, combining font, text color, text pararaph style, etc.
- */
-- (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for the description of the dataset.
- The dataset uses a fixed font style by default, if no attributes are set. If you want a different font style, return a attributed string.
- 
- @param scrollView A scrollView subclass informing the data source.
- @return An attributed string for the dataset description text, combining font, text color, text pararaph style, etc.
- */
-- (NSAttributedString *)descriptionForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for the image of the dataset.
- 
- @param scrollView A scrollView subclass informing the data source.
- @return An image for the dataset.
- */
-- (UIImage *)imageForEmptyDataSet:(UIScrollView *)scrollView;
-
-
-/**
- Asks the data source for a tint color of the image dataset. Default is nil.
- 
- @param scrollView A scrollView subclass object informing the data source.
- @return A color to tint the image of the dataset.
- */
-- (UIColor *)imageTintColorForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- *  Asks the data source for the image animation of the dataset.
- *
- *  @param scrollView A scrollView subclass object informing the delegate.
- *
- *  @return image animation
- */
-- (CAAnimation *) imageAnimationForEmptyDataSet:(UIScrollView *) scrollView;
-
-/**
- Asks the data source for the title to be used for the specified button state.
- The dataset uses a fixed font style by default, if no attributes are set. If you want a different font style, return a attributed string.
- 
- @param scrollView A scrollView subclass object informing the data source.
- @param state The state that uses the specified title. The possible values are described in UIControlState.
- @return An attributed string for the dataset button title, combining font, text color, text pararaph style, etc.
- */
-- (NSAttributedString *)buttonTitleForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state;
-
-/**
- Asks the data source for the image to be used for the specified button state.
- This method will override buttonTitleForEmptyDataSet:forState: and present the image only without any text.
- 
- @param scrollView A scrollView subclass object informing the data source.
- @param state The state that uses the specified title. The possible values are described in UIControlState.
- @return An image for the dataset button imageview.
- */
-- (UIImage *)buttonImageForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state;
-
-/**
- Asks the data source for a background image to be used for the specified button state.
- There is no default style for this call.
- 
- @param scrollView A scrollView subclass informing the data source.
- @param state The state that uses the specified image. The values are described in UIControlState.
- @return An attributed string for the dataset button title, combining font, text color, text pararaph style, etc.
- */
-- (UIImage *)buttonBackgroundImageForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state;
-
-/**
- Asks the data source for the background color of the dataset. Default is clear color.
- 
- @param scrollView A scrollView subclass object informing the data source.
- @return A color to be applied to the dataset background view.
- */
-- (UIColor *)backgroundColorForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for a custom view to be displayed instead of the default views such as labels, imageview and button. Default is nil.
- Use this method to show an activity view indicator for loading feedback, or for complete custom empty data set.
- Returning a custom view will ignore -offsetForEmptyDataSet and -spaceHeightForEmptyDataSet configurations.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return The custom view.
- */
-- (UIView *)customViewForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for a offset for vertical and horizontal alignment of the content. Default is CGPointZero.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return The offset for vertical and horizontal alignment.
- */
-- (CGPoint)offsetForEmptyDataSet:(UIScrollView *)scrollView DZNEmptyDataSetDeprecated(-verticalOffsetForEmptyDataSet:);
-- (CGFloat)verticalOffsetForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for a vertical space between elements. Default is 11 pts.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return The space height between elements.
- */
-- (CGFloat)spaceHeightForEmptyDataSet:(UIScrollView *)scrollView;
-
-@end
-
-
-/**
- The object that acts as the delegate of the empty datasets.
- @discussion The delegate can adopt the DZNEmptyDataSetDelegate protocol. The delegate is not retained. All delegate methods are optional.
- 
- @discussion All delegate methods are optional. Use this delegate for receiving action callbacks.
- */
-@protocol DZNEmptyDataSetDelegate <NSObject>
-@optional
-
-/**
- Asks the delegate to know if the empty dataset should fade in when displayed. Default is YES.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset should fade in.
- */
-- (BOOL)emptyDataSetShouldFadeIn:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate to know if the empty dataset should still be displayed when the amount of items is more than 0. Default is NO
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if empty dataset should be forced to display
- */
-- (BOOL)emptyDataSetShouldBeForcedToDisplay:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate to know if the empty dataset should be rendered and displayed. Default is YES.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset should show.
- */
-- (BOOL)emptyDataSetShouldDisplay:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate for touch permission. Default is YES.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset receives touch gestures.
- */
-- (BOOL)emptyDataSetShouldAllowTouch:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate for scroll permission. Default is NO.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset is allowed to be scrollable.
- */
-- (BOOL)emptyDataSetShouldAllowScroll:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate for image view animation permission. Default is NO.
- Make sure to return a valid CAAnimation object from imageAnimationForEmptyDataSet:
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset is allowed to animate
- */
-- (BOOL)emptyDataSetShouldAnimateImageView:(UIScrollView *)scrollView;
-
-/**
- Tells the delegate that the empty dataset view was tapped.
- Use this method either to resignFirstResponder of a textfield or searchBar.
- 
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetDidTapView:(UIScrollView *)scrollView DZNEmptyDataSetDeprecated(-emptyDataSet:didTapView:);
-
-/**
- Tells the delegate that the action button was tapped.
- 
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetDidTapButton:(UIScrollView *)scrollView DZNEmptyDataSetDeprecated(-emptyDataSet:didTapButton:);
-
-/**
- Tells the delegate that the empty dataset view was tapped.
- Use this method either to resignFirstResponder of a textfield or searchBar.
- 
- @param scrollView A scrollView subclass informing the delegate.
- @param view the view tapped by the user
- */
-- (void)emptyDataSet:(UIScrollView *)scrollView didTapView:(UIView *)view;
-
-/**
- Tells the delegate that the action button was tapped.
- 
- @param scrollView A scrollView subclass informing the delegate.
- @param button the button tapped by the user
- */
-- (void)emptyDataSet:(UIScrollView *)scrollView didTapButton:(UIButton *)button;
-
-/**
- Tells the delegate that the empty data set will appear.
-
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetWillAppear:(UIScrollView *)scrollView;
-
-/**
- Tells the delegate that the empty data set did appear.
-
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetDidAppear:(UIScrollView *)scrollView;
-
-/**
- Tells the delegate that the empty data set will disappear.
-
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetWillDisappear:(UIScrollView *)scrollView;
-
-/**
- Tells the delegate that the empty data set did disappear.
-
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetDidDisappear:(UIScrollView *)scrollView;
-
-@end
-
-#undef DZNEmptyDataSetDeprecated
-

+ 1 - 0
Carthage/Checkouts/DZNEmptyDataSet/Examples/Colors/Pods/Headers/Public/DZNEmptyDataSet/UIScrollView+EmptyDataSet.h

@@ -0,0 +1 @@
+../../../../../../Source/UIScrollView+EmptyDataSet.h

+ 0 - 280
Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Pods/Headers/Private/DZNEmptyDataSet/UIScrollView+EmptyDataSet.h

@@ -1,280 +0,0 @@
-//
-//  UIScrollView+EmptyDataSet.h
-//  DZNEmptyDataSet
-//  https://github.com/dzenbot/DZNEmptyDataSet
-//
-//  Created by Ignacio Romero Zurbuchen on 6/20/14.
-//  Copyright (c) 2016 DZN Labs. All rights reserved.
-//  Licence: MIT-Licence
-//
-
-#import <UIKit/UIKit.h>
-
-@protocol DZNEmptyDataSetSource;
-@protocol DZNEmptyDataSetDelegate;
-
-#define DZNEmptyDataSetDeprecated(instead) DEPRECATED_MSG_ATTRIBUTE(" Use " # instead " instead")
-
-/**
- A drop-in UITableView/UICollectionView superclass category for showing empty datasets whenever the view has no content to display.
- @discussion It will work automatically, by just conforming to DZNEmptyDataSetSource, and returning the data you want to show.
- */
-@interface UIScrollView (EmptyDataSet)
-
-/** The empty datasets data source. */
-@property (nonatomic, weak) IBOutlet id <DZNEmptyDataSetSource> emptyDataSetSource;
-/** The empty datasets delegate. */
-@property (nonatomic, weak) IBOutlet id <DZNEmptyDataSetDelegate> emptyDataSetDelegate;
-/** YES if any empty dataset is visible. */
-@property (nonatomic, readonly, getter = isEmptyDataSetVisible) BOOL emptyDataSetVisible;
-
-/**
- Reloads the empty dataset content receiver.
- @discussion Call this method to force all the data to refresh. Calling -reloadData is similar, but this forces only the empty dataset to reload, not the entire table view or collection view.
- */
-- (void)reloadEmptyDataSet;
-
-@end
-
-
-/**
- The object that acts as the data source of the empty datasets.
- @discussion The data source must adopt the DZNEmptyDataSetSource protocol. The data source is not retained. All data source methods are optional.
- */
-@protocol DZNEmptyDataSetSource <NSObject>
-@optional
-
-/**
- Asks the data source for the title of the dataset.
- The dataset uses a fixed font style by default, if no attributes are set. If you want a different font style, return a attributed string.
- 
- @param scrollView A scrollView subclass informing the data source.
- @return An attributed string for the dataset title, combining font, text color, text pararaph style, etc.
- */
-- (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for the description of the dataset.
- The dataset uses a fixed font style by default, if no attributes are set. If you want a different font style, return a attributed string.
- 
- @param scrollView A scrollView subclass informing the data source.
- @return An attributed string for the dataset description text, combining font, text color, text pararaph style, etc.
- */
-- (NSAttributedString *)descriptionForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for the image of the dataset.
- 
- @param scrollView A scrollView subclass informing the data source.
- @return An image for the dataset.
- */
-- (UIImage *)imageForEmptyDataSet:(UIScrollView *)scrollView;
-
-
-/**
- Asks the data source for a tint color of the image dataset. Default is nil.
- 
- @param scrollView A scrollView subclass object informing the data source.
- @return A color to tint the image of the dataset.
- */
-- (UIColor *)imageTintColorForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- *  Asks the data source for the image animation of the dataset.
- *
- *  @param scrollView A scrollView subclass object informing the delegate.
- *
- *  @return image animation
- */
-- (CAAnimation *) imageAnimationForEmptyDataSet:(UIScrollView *) scrollView;
-
-/**
- Asks the data source for the title to be used for the specified button state.
- The dataset uses a fixed font style by default, if no attributes are set. If you want a different font style, return a attributed string.
- 
- @param scrollView A scrollView subclass object informing the data source.
- @param state The state that uses the specified title. The possible values are described in UIControlState.
- @return An attributed string for the dataset button title, combining font, text color, text pararaph style, etc.
- */
-- (NSAttributedString *)buttonTitleForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state;
-
-/**
- Asks the data source for the image to be used for the specified button state.
- This method will override buttonTitleForEmptyDataSet:forState: and present the image only without any text.
- 
- @param scrollView A scrollView subclass object informing the data source.
- @param state The state that uses the specified title. The possible values are described in UIControlState.
- @return An image for the dataset button imageview.
- */
-- (UIImage *)buttonImageForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state;
-
-/**
- Asks the data source for a background image to be used for the specified button state.
- There is no default style for this call.
- 
- @param scrollView A scrollView subclass informing the data source.
- @param state The state that uses the specified image. The values are described in UIControlState.
- @return An attributed string for the dataset button title, combining font, text color, text pararaph style, etc.
- */
-- (UIImage *)buttonBackgroundImageForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state;
-
-/**
- Asks the data source for the background color of the dataset. Default is clear color.
- 
- @param scrollView A scrollView subclass object informing the data source.
- @return A color to be applied to the dataset background view.
- */
-- (UIColor *)backgroundColorForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for a custom view to be displayed instead of the default views such as labels, imageview and button. Default is nil.
- Use this method to show an activity view indicator for loading feedback, or for complete custom empty data set.
- Returning a custom view will ignore -offsetForEmptyDataSet and -spaceHeightForEmptyDataSet configurations.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return The custom view.
- */
-- (UIView *)customViewForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for a offset for vertical and horizontal alignment of the content. Default is CGPointZero.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return The offset for vertical and horizontal alignment.
- */
-- (CGPoint)offsetForEmptyDataSet:(UIScrollView *)scrollView DZNEmptyDataSetDeprecated(-verticalOffsetForEmptyDataSet:);
-- (CGFloat)verticalOffsetForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for a vertical space between elements. Default is 11 pts.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return The space height between elements.
- */
-- (CGFloat)spaceHeightForEmptyDataSet:(UIScrollView *)scrollView;
-
-@end
-
-
-/**
- The object that acts as the delegate of the empty datasets.
- @discussion The delegate can adopt the DZNEmptyDataSetDelegate protocol. The delegate is not retained. All delegate methods are optional.
- 
- @discussion All delegate methods are optional. Use this delegate for receiving action callbacks.
- */
-@protocol DZNEmptyDataSetDelegate <NSObject>
-@optional
-
-/**
- Asks the delegate to know if the empty dataset should fade in when displayed. Default is YES.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset should fade in.
- */
-- (BOOL)emptyDataSetShouldFadeIn:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate to know if the empty dataset should still be displayed when the amount of items is more than 0. Default is NO
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if empty dataset should be forced to display
- */
-- (BOOL)emptyDataSetShouldBeForcedToDisplay:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate to know if the empty dataset should be rendered and displayed. Default is YES.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset should show.
- */
-- (BOOL)emptyDataSetShouldDisplay:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate for touch permission. Default is YES.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset receives touch gestures.
- */
-- (BOOL)emptyDataSetShouldAllowTouch:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate for scroll permission. Default is NO.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset is allowed to be scrollable.
- */
-- (BOOL)emptyDataSetShouldAllowScroll:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate for image view animation permission. Default is NO.
- Make sure to return a valid CAAnimation object from imageAnimationForEmptyDataSet:
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset is allowed to animate
- */
-- (BOOL)emptyDataSetShouldAnimateImageView:(UIScrollView *)scrollView;
-
-/**
- Tells the delegate that the empty dataset view was tapped.
- Use this method either to resignFirstResponder of a textfield or searchBar.
- 
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetDidTapView:(UIScrollView *)scrollView DZNEmptyDataSetDeprecated(-emptyDataSet:didTapView:);
-
-/**
- Tells the delegate that the action button was tapped.
- 
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetDidTapButton:(UIScrollView *)scrollView DZNEmptyDataSetDeprecated(-emptyDataSet:didTapButton:);
-
-/**
- Tells the delegate that the empty dataset view was tapped.
- Use this method either to resignFirstResponder of a textfield or searchBar.
- 
- @param scrollView A scrollView subclass informing the delegate.
- @param view the view tapped by the user
- */
-- (void)emptyDataSet:(UIScrollView *)scrollView didTapView:(UIView *)view;
-
-/**
- Tells the delegate that the action button was tapped.
- 
- @param scrollView A scrollView subclass informing the delegate.
- @param button the button tapped by the user
- */
-- (void)emptyDataSet:(UIScrollView *)scrollView didTapButton:(UIButton *)button;
-
-/**
- Tells the delegate that the empty data set will appear.
-
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetWillAppear:(UIScrollView *)scrollView;
-
-/**
- Tells the delegate that the empty data set did appear.
-
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetDidAppear:(UIScrollView *)scrollView;
-
-/**
- Tells the delegate that the empty data set will disappear.
-
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetWillDisappear:(UIScrollView *)scrollView;
-
-/**
- Tells the delegate that the empty data set did disappear.
-
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetDidDisappear:(UIScrollView *)scrollView;
-
-@end
-
-#undef DZNEmptyDataSetDeprecated
-

+ 1 - 0
Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Pods/Headers/Private/DZNEmptyDataSet/UIScrollView+EmptyDataSet.h

@@ -0,0 +1 @@
+../../../../../../Source/UIScrollView+EmptyDataSet.h

+ 0 - 87
Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Pods/Headers/Private/NSManagedObjectContext-Hydrate/NSManagedObjectContext+Hydrate.h

@@ -1,87 +0,0 @@
-//
-//  NSManagedObjectContext+Hydrate.m
-//
-//  Created by Ignacio Romero Zurbuchen on 7/9/13.
-//  Copyright (c) 2013 DZN Labs.
-//  Licence: MIT-Licence
-//
-
-#import <CoreData/CoreData.h>
-
-/**
- A NSManagedObjectContext category class for preload a CoreData persistent store with JSON data.
- IMPORTANT: Parsing is done automagically if the JSON key paths are identical to the entity attribute names. If not, you must provide a dictionary with attribute mappings matching the source key paths.
- */
-@interface NSManagedObjectContext (Hydrate)
-
-/**
- A custom date format that will be used for all date mappings that have not been configured specifically.
- If not set, the default format will be used instead "yyyy-MM-dd'T'HH:mm:ss'Z'"
- */
-@property (nonatomic, strong) NSString *preferredDateFormat;
-
-/**
- Returns the singleton managedObjectContext instance.
- 
- @return The shared managedObjectContext.
- */
-+ (NSManagedObjectContext *)sharedContext;
-
-
-/**
- Sets a managedObjectContext static instance.
- 
- @param context The managedObjectContext to be set.
- */
-+ (void)setSharedContext:(NSManagedObjectContext *)context;
-
-
-/**
- Preloads an entity table into the persistent store based on a CSV file's data.
- 
- @param path The CSV file's path.
- @param attributes A collection of attribute mappings, wherein the keys represent the name target attributes on the destination object and the values represent the source key path.
- @param entityName The name of an entity to be stored.
- 
- @discussion Calling this method without a valid attribute mappings collection will raise an exception. The dictionary must be keyed by destination attribute name to source key (the inverse way how the RKObjectMapping class from RestKit works).
- Passing a nil attribute mappings collection will be the same as calling hydrateStoreWithJSONAtPath:forEntityName: method.
- */
-- (void)hydrateStoreWithCSVAtPath:(NSString *)path attributeMappings:(NSDictionary *)attributes forEntityName:(NSString *)entityName;
-
-
-/**
- Preloads an entity table into the persistent store based on a JSON file's data.
- 
- @param path The JSON file's path.
- @param attributes A collection of attribute mappings, wherein the keys represent the name target attributes on the destination object and the values represent the source key path.
- @param entityName The name of an entity to be stored.
- 
- @discussion Calling this method without a valid attribute mappings collection will raise an exception. The dictionary must be keyed by destination attribute name to source key (the inverse way how the RKObjectMapping class from RestKit works).
- Passing a nil attribute mappings collection will be the same as calling hydrateStoreWithJSONAtPath:forEntityName: method.
- */
-- (void)hydrateStoreWithJSONAtPath:(NSString *)path attributeMappings:(NSDictionary *)attributes forEntityName:(NSString *)entityName;
-
-
-/**
- Preloads an entity table into the persistent store.
- 
- @param objects A list of parsed objects (preferable, NSDictionary instances).
- @param attributes A collection of attribute mappings, wherein the keys represent the name target attributes on the destination object and the values represent the source key path.
- @param entityName The name of an entity to be stored.
- 
- @discussion Calling this method without a valid attribute mappings collection will raise an exception. The dictionary must be keyed by destination attribute name to source key (the inverse way how the RKObjectMapping class from RestKit works).
- Passing a nil attribute mappings collection will be the same as calling hydrateStoreWithObjects:forEntityName: method.
- */
-- (void)hydrateStoreWithObjects:(NSArray *)objects attributeMappings:(NSDictionary *)attributes forEntityName:(NSString *)entityName;
-
-
-/**
- Checks if there isn't already an entity table preloaded with content.
- 
- @param entityName The entity name to check.
- @returns YES if the store's table is empty. NO if the store is already preloaded with content.
- */
-- (BOOL)isEmptyStoreForEntityName:(NSString *)entityName;
-
-
-@end

+ 1 - 0
Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Pods/Headers/Private/NSManagedObjectContext-Hydrate/NSManagedObjectContext+Hydrate.h

@@ -0,0 +1 @@
+../../../NSManagedObjectContext-Hydrate/Source/NSManagedObjectContext+Hydrate.h

+ 0 - 280
Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Pods/Headers/Public/DZNEmptyDataSet/UIScrollView+EmptyDataSet.h

@@ -1,280 +0,0 @@
-//
-//  UIScrollView+EmptyDataSet.h
-//  DZNEmptyDataSet
-//  https://github.com/dzenbot/DZNEmptyDataSet
-//
-//  Created by Ignacio Romero Zurbuchen on 6/20/14.
-//  Copyright (c) 2016 DZN Labs. All rights reserved.
-//  Licence: MIT-Licence
-//
-
-#import <UIKit/UIKit.h>
-
-@protocol DZNEmptyDataSetSource;
-@protocol DZNEmptyDataSetDelegate;
-
-#define DZNEmptyDataSetDeprecated(instead) DEPRECATED_MSG_ATTRIBUTE(" Use " # instead " instead")
-
-/**
- A drop-in UITableView/UICollectionView superclass category for showing empty datasets whenever the view has no content to display.
- @discussion It will work automatically, by just conforming to DZNEmptyDataSetSource, and returning the data you want to show.
- */
-@interface UIScrollView (EmptyDataSet)
-
-/** The empty datasets data source. */
-@property (nonatomic, weak) IBOutlet id <DZNEmptyDataSetSource> emptyDataSetSource;
-/** The empty datasets delegate. */
-@property (nonatomic, weak) IBOutlet id <DZNEmptyDataSetDelegate> emptyDataSetDelegate;
-/** YES if any empty dataset is visible. */
-@property (nonatomic, readonly, getter = isEmptyDataSetVisible) BOOL emptyDataSetVisible;
-
-/**
- Reloads the empty dataset content receiver.
- @discussion Call this method to force all the data to refresh. Calling -reloadData is similar, but this forces only the empty dataset to reload, not the entire table view or collection view.
- */
-- (void)reloadEmptyDataSet;
-
-@end
-
-
-/**
- The object that acts as the data source of the empty datasets.
- @discussion The data source must adopt the DZNEmptyDataSetSource protocol. The data source is not retained. All data source methods are optional.
- */
-@protocol DZNEmptyDataSetSource <NSObject>
-@optional
-
-/**
- Asks the data source for the title of the dataset.
- The dataset uses a fixed font style by default, if no attributes are set. If you want a different font style, return a attributed string.
- 
- @param scrollView A scrollView subclass informing the data source.
- @return An attributed string for the dataset title, combining font, text color, text pararaph style, etc.
- */
-- (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for the description of the dataset.
- The dataset uses a fixed font style by default, if no attributes are set. If you want a different font style, return a attributed string.
- 
- @param scrollView A scrollView subclass informing the data source.
- @return An attributed string for the dataset description text, combining font, text color, text pararaph style, etc.
- */
-- (NSAttributedString *)descriptionForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for the image of the dataset.
- 
- @param scrollView A scrollView subclass informing the data source.
- @return An image for the dataset.
- */
-- (UIImage *)imageForEmptyDataSet:(UIScrollView *)scrollView;
-
-
-/**
- Asks the data source for a tint color of the image dataset. Default is nil.
- 
- @param scrollView A scrollView subclass object informing the data source.
- @return A color to tint the image of the dataset.
- */
-- (UIColor *)imageTintColorForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- *  Asks the data source for the image animation of the dataset.
- *
- *  @param scrollView A scrollView subclass object informing the delegate.
- *
- *  @return image animation
- */
-- (CAAnimation *) imageAnimationForEmptyDataSet:(UIScrollView *) scrollView;
-
-/**
- Asks the data source for the title to be used for the specified button state.
- The dataset uses a fixed font style by default, if no attributes are set. If you want a different font style, return a attributed string.
- 
- @param scrollView A scrollView subclass object informing the data source.
- @param state The state that uses the specified title. The possible values are described in UIControlState.
- @return An attributed string for the dataset button title, combining font, text color, text pararaph style, etc.
- */
-- (NSAttributedString *)buttonTitleForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state;
-
-/**
- Asks the data source for the image to be used for the specified button state.
- This method will override buttonTitleForEmptyDataSet:forState: and present the image only without any text.
- 
- @param scrollView A scrollView subclass object informing the data source.
- @param state The state that uses the specified title. The possible values are described in UIControlState.
- @return An image for the dataset button imageview.
- */
-- (UIImage *)buttonImageForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state;
-
-/**
- Asks the data source for a background image to be used for the specified button state.
- There is no default style for this call.
- 
- @param scrollView A scrollView subclass informing the data source.
- @param state The state that uses the specified image. The values are described in UIControlState.
- @return An attributed string for the dataset button title, combining font, text color, text pararaph style, etc.
- */
-- (UIImage *)buttonBackgroundImageForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state;
-
-/**
- Asks the data source for the background color of the dataset. Default is clear color.
- 
- @param scrollView A scrollView subclass object informing the data source.
- @return A color to be applied to the dataset background view.
- */
-- (UIColor *)backgroundColorForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for a custom view to be displayed instead of the default views such as labels, imageview and button. Default is nil.
- Use this method to show an activity view indicator for loading feedback, or for complete custom empty data set.
- Returning a custom view will ignore -offsetForEmptyDataSet and -spaceHeightForEmptyDataSet configurations.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return The custom view.
- */
-- (UIView *)customViewForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for a offset for vertical and horizontal alignment of the content. Default is CGPointZero.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return The offset for vertical and horizontal alignment.
- */
-- (CGPoint)offsetForEmptyDataSet:(UIScrollView *)scrollView DZNEmptyDataSetDeprecated(-verticalOffsetForEmptyDataSet:);
-- (CGFloat)verticalOffsetForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for a vertical space between elements. Default is 11 pts.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return The space height between elements.
- */
-- (CGFloat)spaceHeightForEmptyDataSet:(UIScrollView *)scrollView;
-
-@end
-
-
-/**
- The object that acts as the delegate of the empty datasets.
- @discussion The delegate can adopt the DZNEmptyDataSetDelegate protocol. The delegate is not retained. All delegate methods are optional.
- 
- @discussion All delegate methods are optional. Use this delegate for receiving action callbacks.
- */
-@protocol DZNEmptyDataSetDelegate <NSObject>
-@optional
-
-/**
- Asks the delegate to know if the empty dataset should fade in when displayed. Default is YES.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset should fade in.
- */
-- (BOOL)emptyDataSetShouldFadeIn:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate to know if the empty dataset should still be displayed when the amount of items is more than 0. Default is NO
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if empty dataset should be forced to display
- */
-- (BOOL)emptyDataSetShouldBeForcedToDisplay:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate to know if the empty dataset should be rendered and displayed. Default is YES.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset should show.
- */
-- (BOOL)emptyDataSetShouldDisplay:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate for touch permission. Default is YES.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset receives touch gestures.
- */
-- (BOOL)emptyDataSetShouldAllowTouch:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate for scroll permission. Default is NO.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset is allowed to be scrollable.
- */
-- (BOOL)emptyDataSetShouldAllowScroll:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate for image view animation permission. Default is NO.
- Make sure to return a valid CAAnimation object from imageAnimationForEmptyDataSet:
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset is allowed to animate
- */
-- (BOOL)emptyDataSetShouldAnimateImageView:(UIScrollView *)scrollView;
-
-/**
- Tells the delegate that the empty dataset view was tapped.
- Use this method either to resignFirstResponder of a textfield or searchBar.
- 
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetDidTapView:(UIScrollView *)scrollView DZNEmptyDataSetDeprecated(-emptyDataSet:didTapView:);
-
-/**
- Tells the delegate that the action button was tapped.
- 
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetDidTapButton:(UIScrollView *)scrollView DZNEmptyDataSetDeprecated(-emptyDataSet:didTapButton:);
-
-/**
- Tells the delegate that the empty dataset view was tapped.
- Use this method either to resignFirstResponder of a textfield or searchBar.
- 
- @param scrollView A scrollView subclass informing the delegate.
- @param view the view tapped by the user
- */
-- (void)emptyDataSet:(UIScrollView *)scrollView didTapView:(UIView *)view;
-
-/**
- Tells the delegate that the action button was tapped.
- 
- @param scrollView A scrollView subclass informing the delegate.
- @param button the button tapped by the user
- */
-- (void)emptyDataSet:(UIScrollView *)scrollView didTapButton:(UIButton *)button;
-
-/**
- Tells the delegate that the empty data set will appear.
-
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetWillAppear:(UIScrollView *)scrollView;
-
-/**
- Tells the delegate that the empty data set did appear.
-
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetDidAppear:(UIScrollView *)scrollView;
-
-/**
- Tells the delegate that the empty data set will disappear.
-
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetWillDisappear:(UIScrollView *)scrollView;
-
-/**
- Tells the delegate that the empty data set did disappear.
-
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetDidDisappear:(UIScrollView *)scrollView;
-
-@end
-
-#undef DZNEmptyDataSetDeprecated
-

+ 1 - 0
Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Pods/Headers/Public/DZNEmptyDataSet/UIScrollView+EmptyDataSet.h

@@ -0,0 +1 @@
+../../../../../../Source/UIScrollView+EmptyDataSet.h

+ 0 - 87
Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Pods/Headers/Public/NSManagedObjectContext-Hydrate/NSManagedObjectContext+Hydrate.h

@@ -1,87 +0,0 @@
-//
-//  NSManagedObjectContext+Hydrate.m
-//
-//  Created by Ignacio Romero Zurbuchen on 7/9/13.
-//  Copyright (c) 2013 DZN Labs.
-//  Licence: MIT-Licence
-//
-
-#import <CoreData/CoreData.h>
-
-/**
- A NSManagedObjectContext category class for preload a CoreData persistent store with JSON data.
- IMPORTANT: Parsing is done automagically if the JSON key paths are identical to the entity attribute names. If not, you must provide a dictionary with attribute mappings matching the source key paths.
- */
-@interface NSManagedObjectContext (Hydrate)
-
-/**
- A custom date format that will be used for all date mappings that have not been configured specifically.
- If not set, the default format will be used instead "yyyy-MM-dd'T'HH:mm:ss'Z'"
- */
-@property (nonatomic, strong) NSString *preferredDateFormat;
-
-/**
- Returns the singleton managedObjectContext instance.
- 
- @return The shared managedObjectContext.
- */
-+ (NSManagedObjectContext *)sharedContext;
-
-
-/**
- Sets a managedObjectContext static instance.
- 
- @param context The managedObjectContext to be set.
- */
-+ (void)setSharedContext:(NSManagedObjectContext *)context;
-
-
-/**
- Preloads an entity table into the persistent store based on a CSV file's data.
- 
- @param path The CSV file's path.
- @param attributes A collection of attribute mappings, wherein the keys represent the name target attributes on the destination object and the values represent the source key path.
- @param entityName The name of an entity to be stored.
- 
- @discussion Calling this method without a valid attribute mappings collection will raise an exception. The dictionary must be keyed by destination attribute name to source key (the inverse way how the RKObjectMapping class from RestKit works).
- Passing a nil attribute mappings collection will be the same as calling hydrateStoreWithJSONAtPath:forEntityName: method.
- */
-- (void)hydrateStoreWithCSVAtPath:(NSString *)path attributeMappings:(NSDictionary *)attributes forEntityName:(NSString *)entityName;
-
-
-/**
- Preloads an entity table into the persistent store based on a JSON file's data.
- 
- @param path The JSON file's path.
- @param attributes A collection of attribute mappings, wherein the keys represent the name target attributes on the destination object and the values represent the source key path.
- @param entityName The name of an entity to be stored.
- 
- @discussion Calling this method without a valid attribute mappings collection will raise an exception. The dictionary must be keyed by destination attribute name to source key (the inverse way how the RKObjectMapping class from RestKit works).
- Passing a nil attribute mappings collection will be the same as calling hydrateStoreWithJSONAtPath:forEntityName: method.
- */
-- (void)hydrateStoreWithJSONAtPath:(NSString *)path attributeMappings:(NSDictionary *)attributes forEntityName:(NSString *)entityName;
-
-
-/**
- Preloads an entity table into the persistent store.
- 
- @param objects A list of parsed objects (preferable, NSDictionary instances).
- @param attributes A collection of attribute mappings, wherein the keys represent the name target attributes on the destination object and the values represent the source key path.
- @param entityName The name of an entity to be stored.
- 
- @discussion Calling this method without a valid attribute mappings collection will raise an exception. The dictionary must be keyed by destination attribute name to source key (the inverse way how the RKObjectMapping class from RestKit works).
- Passing a nil attribute mappings collection will be the same as calling hydrateStoreWithObjects:forEntityName: method.
- */
-- (void)hydrateStoreWithObjects:(NSArray *)objects attributeMappings:(NSDictionary *)attributes forEntityName:(NSString *)entityName;
-
-
-/**
- Checks if there isn't already an entity table preloaded with content.
- 
- @param entityName The entity name to check.
- @returns YES if the store's table is empty. NO if the store is already preloaded with content.
- */
-- (BOOL)isEmptyStoreForEntityName:(NSString *)entityName;
-
-
-@end

+ 1 - 0
Carthage/Checkouts/DZNEmptyDataSet/Examples/Countries/Pods/Headers/Public/NSManagedObjectContext-Hydrate/NSManagedObjectContext+Hydrate.h

@@ -0,0 +1 @@
+../../../NSManagedObjectContext-Hydrate/Source/NSManagedObjectContext+Hydrate.h

+ 0 - 280
Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Private/DZNEmptyDataSet/UIScrollView+EmptyDataSet.h

@@ -1,280 +0,0 @@
-//
-//  UIScrollView+EmptyDataSet.h
-//  DZNEmptyDataSet
-//  https://github.com/dzenbot/DZNEmptyDataSet
-//
-//  Created by Ignacio Romero Zurbuchen on 6/20/14.
-//  Copyright (c) 2016 DZN Labs. All rights reserved.
-//  Licence: MIT-Licence
-//
-
-#import <UIKit/UIKit.h>
-
-@protocol DZNEmptyDataSetSource;
-@protocol DZNEmptyDataSetDelegate;
-
-#define DZNEmptyDataSetDeprecated(instead) DEPRECATED_MSG_ATTRIBUTE(" Use " # instead " instead")
-
-/**
- A drop-in UITableView/UICollectionView superclass category for showing empty datasets whenever the view has no content to display.
- @discussion It will work automatically, by just conforming to DZNEmptyDataSetSource, and returning the data you want to show.
- */
-@interface UIScrollView (EmptyDataSet)
-
-/** The empty datasets data source. */
-@property (nonatomic, weak) IBOutlet id <DZNEmptyDataSetSource> emptyDataSetSource;
-/** The empty datasets delegate. */
-@property (nonatomic, weak) IBOutlet id <DZNEmptyDataSetDelegate> emptyDataSetDelegate;
-/** YES if any empty dataset is visible. */
-@property (nonatomic, readonly, getter = isEmptyDataSetVisible) BOOL emptyDataSetVisible;
-
-/**
- Reloads the empty dataset content receiver.
- @discussion Call this method to force all the data to refresh. Calling -reloadData is similar, but this forces only the empty dataset to reload, not the entire table view or collection view.
- */
-- (void)reloadEmptyDataSet;
-
-@end
-
-
-/**
- The object that acts as the data source of the empty datasets.
- @discussion The data source must adopt the DZNEmptyDataSetSource protocol. The data source is not retained. All data source methods are optional.
- */
-@protocol DZNEmptyDataSetSource <NSObject>
-@optional
-
-/**
- Asks the data source for the title of the dataset.
- The dataset uses a fixed font style by default, if no attributes are set. If you want a different font style, return a attributed string.
- 
- @param scrollView A scrollView subclass informing the data source.
- @return An attributed string for the dataset title, combining font, text color, text pararaph style, etc.
- */
-- (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for the description of the dataset.
- The dataset uses a fixed font style by default, if no attributes are set. If you want a different font style, return a attributed string.
- 
- @param scrollView A scrollView subclass informing the data source.
- @return An attributed string for the dataset description text, combining font, text color, text pararaph style, etc.
- */
-- (NSAttributedString *)descriptionForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for the image of the dataset.
- 
- @param scrollView A scrollView subclass informing the data source.
- @return An image for the dataset.
- */
-- (UIImage *)imageForEmptyDataSet:(UIScrollView *)scrollView;
-
-
-/**
- Asks the data source for a tint color of the image dataset. Default is nil.
- 
- @param scrollView A scrollView subclass object informing the data source.
- @return A color to tint the image of the dataset.
- */
-- (UIColor *)imageTintColorForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- *  Asks the data source for the image animation of the dataset.
- *
- *  @param scrollView A scrollView subclass object informing the delegate.
- *
- *  @return image animation
- */
-- (CAAnimation *) imageAnimationForEmptyDataSet:(UIScrollView *) scrollView;
-
-/**
- Asks the data source for the title to be used for the specified button state.
- The dataset uses a fixed font style by default, if no attributes are set. If you want a different font style, return a attributed string.
- 
- @param scrollView A scrollView subclass object informing the data source.
- @param state The state that uses the specified title. The possible values are described in UIControlState.
- @return An attributed string for the dataset button title, combining font, text color, text pararaph style, etc.
- */
-- (NSAttributedString *)buttonTitleForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state;
-
-/**
- Asks the data source for the image to be used for the specified button state.
- This method will override buttonTitleForEmptyDataSet:forState: and present the image only without any text.
- 
- @param scrollView A scrollView subclass object informing the data source.
- @param state The state that uses the specified title. The possible values are described in UIControlState.
- @return An image for the dataset button imageview.
- */
-- (UIImage *)buttonImageForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state;
-
-/**
- Asks the data source for a background image to be used for the specified button state.
- There is no default style for this call.
- 
- @param scrollView A scrollView subclass informing the data source.
- @param state The state that uses the specified image. The values are described in UIControlState.
- @return An attributed string for the dataset button title, combining font, text color, text pararaph style, etc.
- */
-- (UIImage *)buttonBackgroundImageForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state;
-
-/**
- Asks the data source for the background color of the dataset. Default is clear color.
- 
- @param scrollView A scrollView subclass object informing the data source.
- @return A color to be applied to the dataset background view.
- */
-- (UIColor *)backgroundColorForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for a custom view to be displayed instead of the default views such as labels, imageview and button. Default is nil.
- Use this method to show an activity view indicator for loading feedback, or for complete custom empty data set.
- Returning a custom view will ignore -offsetForEmptyDataSet and -spaceHeightForEmptyDataSet configurations.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return The custom view.
- */
-- (UIView *)customViewForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for a offset for vertical and horizontal alignment of the content. Default is CGPointZero.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return The offset for vertical and horizontal alignment.
- */
-- (CGPoint)offsetForEmptyDataSet:(UIScrollView *)scrollView DZNEmptyDataSetDeprecated(-verticalOffsetForEmptyDataSet:);
-- (CGFloat)verticalOffsetForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for a vertical space between elements. Default is 11 pts.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return The space height between elements.
- */
-- (CGFloat)spaceHeightForEmptyDataSet:(UIScrollView *)scrollView;
-
-@end
-
-
-/**
- The object that acts as the delegate of the empty datasets.
- @discussion The delegate can adopt the DZNEmptyDataSetDelegate protocol. The delegate is not retained. All delegate methods are optional.
- 
- @discussion All delegate methods are optional. Use this delegate for receiving action callbacks.
- */
-@protocol DZNEmptyDataSetDelegate <NSObject>
-@optional
-
-/**
- Asks the delegate to know if the empty dataset should fade in when displayed. Default is YES.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset should fade in.
- */
-- (BOOL)emptyDataSetShouldFadeIn:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate to know if the empty dataset should still be displayed when the amount of items is more than 0. Default is NO
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if empty dataset should be forced to display
- */
-- (BOOL)emptyDataSetShouldBeForcedToDisplay:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate to know if the empty dataset should be rendered and displayed. Default is YES.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset should show.
- */
-- (BOOL)emptyDataSetShouldDisplay:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate for touch permission. Default is YES.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset receives touch gestures.
- */
-- (BOOL)emptyDataSetShouldAllowTouch:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate for scroll permission. Default is NO.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset is allowed to be scrollable.
- */
-- (BOOL)emptyDataSetShouldAllowScroll:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate for image view animation permission. Default is NO.
- Make sure to return a valid CAAnimation object from imageAnimationForEmptyDataSet:
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset is allowed to animate
- */
-- (BOOL)emptyDataSetShouldAnimateImageView:(UIScrollView *)scrollView;
-
-/**
- Tells the delegate that the empty dataset view was tapped.
- Use this method either to resignFirstResponder of a textfield or searchBar.
- 
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetDidTapView:(UIScrollView *)scrollView DZNEmptyDataSetDeprecated(-emptyDataSet:didTapView:);
-
-/**
- Tells the delegate that the action button was tapped.
- 
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetDidTapButton:(UIScrollView *)scrollView DZNEmptyDataSetDeprecated(-emptyDataSet:didTapButton:);
-
-/**
- Tells the delegate that the empty dataset view was tapped.
- Use this method either to resignFirstResponder of a textfield or searchBar.
- 
- @param scrollView A scrollView subclass informing the delegate.
- @param view the view tapped by the user
- */
-- (void)emptyDataSet:(UIScrollView *)scrollView didTapView:(UIView *)view;
-
-/**
- Tells the delegate that the action button was tapped.
- 
- @param scrollView A scrollView subclass informing the delegate.
- @param button the button tapped by the user
- */
-- (void)emptyDataSet:(UIScrollView *)scrollView didTapButton:(UIButton *)button;
-
-/**
- Tells the delegate that the empty data set will appear.
-
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetWillAppear:(UIScrollView *)scrollView;
-
-/**
- Tells the delegate that the empty data set did appear.
-
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetDidAppear:(UIScrollView *)scrollView;
-
-/**
- Tells the delegate that the empty data set will disappear.
-
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetWillDisappear:(UIScrollView *)scrollView;
-
-/**
- Tells the delegate that the empty data set did disappear.
-
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetDidDisappear:(UIScrollView *)scrollView;
-
-@end
-
-#undef DZNEmptyDataSetDeprecated
-

+ 1 - 0
Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Private/DZNEmptyDataSet/UIScrollView+EmptyDataSet.h

@@ -0,0 +1 @@
+../../../../../../Source/UIScrollView+EmptyDataSet.h

+ 0 - 45
Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Private/DZNWebViewController/DZNPolyActivity.h

@@ -1,45 +0,0 @@
-//
-//  DZNPolyActivity.h
-//  DZNWebViewController
-//  https://github.com/dzenbot/DZNWebViewController
-//
-//  Created by Ignacio Romero Zurbuchen on 3/28/14.
-//  Copyright (c) 2014 DZN Labs. All rights reserved.
-//  Licence: MIT-Licence
-//
-
-#import <UIKit/UIKit.h>
-
-/**
- * Types of activity kind, used for polymorphic creation.
- */
-typedef NS_OPTIONS(NSUInteger, DZNPolyActivityType) {
-    DZNPolyActivityTypeLink,
-    DZNPolyActivityTypeSafari,
-    DZNPolyActivityTypeChrome,
-    DZNPolyActivityTypeOpera,
-    DZNPolyActivityTypeDolphin
-};
-
-/**
- * The DZNPolyActivity class is an abstract subclass of UIActivity allowing to easily create polymorphic instances by assigning different activity types. Each type will render a different icon and title, and will perform different actions too.
- */
-@interface DZNPolyActivity : UIActivity
-
-/**
- * Initializes and returns a newly created activity with a specific type.
- *
- * @param type The type of the activity to be created.
- * @returns The initialized activity.
- */
-- (instancetype)initWithActivityType:(DZNPolyActivityType)type;
-
-/**
- * Allocates a new instance of the receiving class, sends it an init message, and returns the initialized object.
- * This method implements the same logic than initWithActivityType: but is just shorter to call.
- *
- * @param type The type of the activity to be created.
- */
-+ (instancetype)activityWithType:(DZNPolyActivityType)type;
-
-@end

+ 1 - 0
Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Private/DZNWebViewController/DZNPolyActivity.h

@@ -0,0 +1 @@
+../../../DZNWebViewController/Source/Classes/DZNPolyActivity.h

+ 0 - 75
Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Private/DZNWebViewController/DZNWebViewController.h

@@ -1,75 +0,0 @@
-//
-//  DZNWebViewController.h
-//  DZNWebViewController
-//  https://github.com/dzenbot/DZNWebViewController
-//
-//  Created by Ignacio Romero Zurbuchen on 10/25/13.
-//  Copyright (c) 2014 DZN Labs. All rights reserved.
-//  Licence: MIT-Licence
-//
-
-#import <UIKit/UIKit.h>
-
-/**
- * Types of supported actions (i.e. Share & Copy link, Add to Reading List, Open in Safari/Chrome/Opera/Dolphin).
- */
-typedef NS_OPTIONS(NSUInteger, DZNWebViewControllerActions) {
-    DZNWebViewControllerActionAll = -1,
-    DZNWebViewControllerActionNone = 0,
-    DZNWebViewControllerActionShareLink = (1 << 0),
-    DZNWebViewControllerActionCopyLink = (1 << 1),
-    DZNWebViewControllerActionReadLater = (1 << 2),
-    DZNWebViewControllerActionOpenSafari = (1 << 3),
-    DZNWebViewControllerActionOpenChrome = (1 << 4),
-    DZNWebViewControllerActionOpenOperaMini = (1 << 5),
-    DZNWebViewControllerActionOpenDolphin = (1 << 6)
-};
-
-/**
- * Types of network loading style.
- */
-typedef NS_OPTIONS(NSUInteger, DZNWebViewControllerLoadingStyle) {
-    DZNWebViewControllerLoadingStyleNone,
-    DZNWebViewControllerLoadingStyleProgressView,
-    DZNWebViewControllerLoadingStyleActivityIndicator
-};
-
-/**
- * A very simple web browser with useful navigation and exportation tools.
- */
-@interface DZNWebViewController : UIViewController
-
-/** The web view that the controller manages. */
-@property (nonatomic, strong) UIWebView *webView;
-/** The URL identifying the location of the content to load. */
-@property (nonatomic, readonly) NSURL *URL;
-/** The loading visual style, using a progress bar or a network activity indicator. Default is DZNWebViewControllerLoadingStyleProgressView. */
-@property (nonatomic) DZNWebViewControllerLoadingStyle loadingStyle;
-/** The supported actions like sharing and copy link, add to reading list, open in Safari, etc. Default is DZNWebViewControllerActionAll. */
-@property (nonatomic) DZNWebViewControllerActions supportedActions;
-/** The toolbar background color. Default is black, translucent. */
-@property (nonatomic, strong) UIColor *toolbarBackgroundColor;
-/** The toolbar item's tint color. Default is white. */
-@property (nonatomic, strong) UIColor *toolbarTintColor;
-/** The navigation bar's title font. Default uses UINavigation's appearance title text attributes with key NSFontAttributeName. */
-@property (nonatomic, strong) UIFont *titleFont;
-/** The navigation bar's title custom font. Default uses UINavigation's appearance title text attributes with key NSForegroundColorAttributeName. */
-@property (nonatomic, strong) UIColor *titleColor;
-
-/**
- * Initializes and returns a newly created webview controller with an initial HTTP URL to be requested as soon as the view appears.
- *
- * @param URL The HTTP URL to be requested.
- * @returns The initialized webview controller.
- */
-- (id)initWithURL:(NSURL *)URL;
-
-/**
- * Initializes and returns a newly created webview controller for local HTML navigation.
- *
- * @param URL The file URL of the main html.
- * @returns The initialized webview controller.
- */
-- (id)initWithFileURL:(NSURL *)URL;
-
-@end

+ 1 - 0
Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Private/DZNWebViewController/DZNWebViewController.h

@@ -0,0 +1 @@
+../../../DZNWebViewController/Source/Classes/DZNWebViewController.h

+ 0 - 35
Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Private/NJKWebViewProgress/NJKWebViewProgress.h

@@ -1,35 +0,0 @@
-//
-//  NJKWebViewProgress.h
-//
-//  Created by Satoshi Aasano on 4/20/13.
-//  Copyright (c) 2013 Satoshi Asano. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-
-#undef njk_weak
-#if __has_feature(objc_arc_weak)
-#define njk_weak weak
-#else
-#define njk_weak unsafe_unretained
-#endif
-
-extern const float NJKInitialProgressValue;
-extern const float NJKInteractiveProgressValue;
-extern const float NJKFinalProgressValue;
-
-typedef void (^NJKWebViewProgressBlock)(float progress);
-@protocol NJKWebViewProgressDelegate;
-@interface NJKWebViewProgress : NSObject<UIWebViewDelegate>
-@property (nonatomic, njk_weak) id<NJKWebViewProgressDelegate>progressDelegate;
-@property (nonatomic, njk_weak) id<UIWebViewDelegate>webViewProxyDelegate;
-@property (nonatomic, copy) NJKWebViewProgressBlock progressBlock;
-@property (nonatomic, readonly) float progress; // 0.0..1.0
-
-- (void)reset;
-@end
-
-@protocol NJKWebViewProgressDelegate <NSObject>
-- (void)webViewProgress:(NJKWebViewProgress *)webViewProgress updateProgress:(float)progress;
-@end
-

+ 1 - 0
Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Private/NJKWebViewProgress/NJKWebViewProgress.h

@@ -0,0 +1 @@
+../../../NJKWebViewProgress/NJKWebViewProgress/NJKWebViewProgress.h

+ 0 - 21
Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Private/NJKWebViewProgress/NJKWebViewProgressView.h

@@ -1,21 +0,0 @@
-//
-//  NJKWebViewProgressView.h
-// iOS 7 Style WebView Progress Bar
-//
-//  Created by Satoshi Aasano on 11/16/13.
-//  Copyright (c) 2013 Satoshi Asano. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-
-@interface NJKWebViewProgressView : UIView
-@property (nonatomic) float progress;
-
-@property (nonatomic) UIView *progressBarView;
-@property (nonatomic) NSTimeInterval barAnimationDuration; // default 0.1
-@property (nonatomic) NSTimeInterval fadeAnimationDuration; // default 0.27
-@property (nonatomic) NSTimeInterval fadeOutDelay; // default 0.1
-
-- (void)setProgress:(float)progress animated:(BOOL)animated;
-
-@end

+ 1 - 0
Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Private/NJKWebViewProgress/NJKWebViewProgressView.h

@@ -0,0 +1 @@
+../../../NJKWebViewProgress/NJKWebViewProgress/NJKWebViewProgressView.h

+ 0 - 280
Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Public/DZNEmptyDataSet/UIScrollView+EmptyDataSet.h

@@ -1,280 +0,0 @@
-//
-//  UIScrollView+EmptyDataSet.h
-//  DZNEmptyDataSet
-//  https://github.com/dzenbot/DZNEmptyDataSet
-//
-//  Created by Ignacio Romero Zurbuchen on 6/20/14.
-//  Copyright (c) 2016 DZN Labs. All rights reserved.
-//  Licence: MIT-Licence
-//
-
-#import <UIKit/UIKit.h>
-
-@protocol DZNEmptyDataSetSource;
-@protocol DZNEmptyDataSetDelegate;
-
-#define DZNEmptyDataSetDeprecated(instead) DEPRECATED_MSG_ATTRIBUTE(" Use " # instead " instead")
-
-/**
- A drop-in UITableView/UICollectionView superclass category for showing empty datasets whenever the view has no content to display.
- @discussion It will work automatically, by just conforming to DZNEmptyDataSetSource, and returning the data you want to show.
- */
-@interface UIScrollView (EmptyDataSet)
-
-/** The empty datasets data source. */
-@property (nonatomic, weak) IBOutlet id <DZNEmptyDataSetSource> emptyDataSetSource;
-/** The empty datasets delegate. */
-@property (nonatomic, weak) IBOutlet id <DZNEmptyDataSetDelegate> emptyDataSetDelegate;
-/** YES if any empty dataset is visible. */
-@property (nonatomic, readonly, getter = isEmptyDataSetVisible) BOOL emptyDataSetVisible;
-
-/**
- Reloads the empty dataset content receiver.
- @discussion Call this method to force all the data to refresh. Calling -reloadData is similar, but this forces only the empty dataset to reload, not the entire table view or collection view.
- */
-- (void)reloadEmptyDataSet;
-
-@end
-
-
-/**
- The object that acts as the data source of the empty datasets.
- @discussion The data source must adopt the DZNEmptyDataSetSource protocol. The data source is not retained. All data source methods are optional.
- */
-@protocol DZNEmptyDataSetSource <NSObject>
-@optional
-
-/**
- Asks the data source for the title of the dataset.
- The dataset uses a fixed font style by default, if no attributes are set. If you want a different font style, return a attributed string.
- 
- @param scrollView A scrollView subclass informing the data source.
- @return An attributed string for the dataset title, combining font, text color, text pararaph style, etc.
- */
-- (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for the description of the dataset.
- The dataset uses a fixed font style by default, if no attributes are set. If you want a different font style, return a attributed string.
- 
- @param scrollView A scrollView subclass informing the data source.
- @return An attributed string for the dataset description text, combining font, text color, text pararaph style, etc.
- */
-- (NSAttributedString *)descriptionForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for the image of the dataset.
- 
- @param scrollView A scrollView subclass informing the data source.
- @return An image for the dataset.
- */
-- (UIImage *)imageForEmptyDataSet:(UIScrollView *)scrollView;
-
-
-/**
- Asks the data source for a tint color of the image dataset. Default is nil.
- 
- @param scrollView A scrollView subclass object informing the data source.
- @return A color to tint the image of the dataset.
- */
-- (UIColor *)imageTintColorForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- *  Asks the data source for the image animation of the dataset.
- *
- *  @param scrollView A scrollView subclass object informing the delegate.
- *
- *  @return image animation
- */
-- (CAAnimation *) imageAnimationForEmptyDataSet:(UIScrollView *) scrollView;
-
-/**
- Asks the data source for the title to be used for the specified button state.
- The dataset uses a fixed font style by default, if no attributes are set. If you want a different font style, return a attributed string.
- 
- @param scrollView A scrollView subclass object informing the data source.
- @param state The state that uses the specified title. The possible values are described in UIControlState.
- @return An attributed string for the dataset button title, combining font, text color, text pararaph style, etc.
- */
-- (NSAttributedString *)buttonTitleForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state;
-
-/**
- Asks the data source for the image to be used for the specified button state.
- This method will override buttonTitleForEmptyDataSet:forState: and present the image only without any text.
- 
- @param scrollView A scrollView subclass object informing the data source.
- @param state The state that uses the specified title. The possible values are described in UIControlState.
- @return An image for the dataset button imageview.
- */
-- (UIImage *)buttonImageForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state;
-
-/**
- Asks the data source for a background image to be used for the specified button state.
- There is no default style for this call.
- 
- @param scrollView A scrollView subclass informing the data source.
- @param state The state that uses the specified image. The values are described in UIControlState.
- @return An attributed string for the dataset button title, combining font, text color, text pararaph style, etc.
- */
-- (UIImage *)buttonBackgroundImageForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state;
-
-/**
- Asks the data source for the background color of the dataset. Default is clear color.
- 
- @param scrollView A scrollView subclass object informing the data source.
- @return A color to be applied to the dataset background view.
- */
-- (UIColor *)backgroundColorForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for a custom view to be displayed instead of the default views such as labels, imageview and button. Default is nil.
- Use this method to show an activity view indicator for loading feedback, or for complete custom empty data set.
- Returning a custom view will ignore -offsetForEmptyDataSet and -spaceHeightForEmptyDataSet configurations.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return The custom view.
- */
-- (UIView *)customViewForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for a offset for vertical and horizontal alignment of the content. Default is CGPointZero.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return The offset for vertical and horizontal alignment.
- */
-- (CGPoint)offsetForEmptyDataSet:(UIScrollView *)scrollView DZNEmptyDataSetDeprecated(-verticalOffsetForEmptyDataSet:);
-- (CGFloat)verticalOffsetForEmptyDataSet:(UIScrollView *)scrollView;
-
-/**
- Asks the data source for a vertical space between elements. Default is 11 pts.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return The space height between elements.
- */
-- (CGFloat)spaceHeightForEmptyDataSet:(UIScrollView *)scrollView;
-
-@end
-
-
-/**
- The object that acts as the delegate of the empty datasets.
- @discussion The delegate can adopt the DZNEmptyDataSetDelegate protocol. The delegate is not retained. All delegate methods are optional.
- 
- @discussion All delegate methods are optional. Use this delegate for receiving action callbacks.
- */
-@protocol DZNEmptyDataSetDelegate <NSObject>
-@optional
-
-/**
- Asks the delegate to know if the empty dataset should fade in when displayed. Default is YES.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset should fade in.
- */
-- (BOOL)emptyDataSetShouldFadeIn:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate to know if the empty dataset should still be displayed when the amount of items is more than 0. Default is NO
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if empty dataset should be forced to display
- */
-- (BOOL)emptyDataSetShouldBeForcedToDisplay:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate to know if the empty dataset should be rendered and displayed. Default is YES.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset should show.
- */
-- (BOOL)emptyDataSetShouldDisplay:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate for touch permission. Default is YES.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset receives touch gestures.
- */
-- (BOOL)emptyDataSetShouldAllowTouch:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate for scroll permission. Default is NO.
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset is allowed to be scrollable.
- */
-- (BOOL)emptyDataSetShouldAllowScroll:(UIScrollView *)scrollView;
-
-/**
- Asks the delegate for image view animation permission. Default is NO.
- Make sure to return a valid CAAnimation object from imageAnimationForEmptyDataSet:
- 
- @param scrollView A scrollView subclass object informing the delegate.
- @return YES if the empty dataset is allowed to animate
- */
-- (BOOL)emptyDataSetShouldAnimateImageView:(UIScrollView *)scrollView;
-
-/**
- Tells the delegate that the empty dataset view was tapped.
- Use this method either to resignFirstResponder of a textfield or searchBar.
- 
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetDidTapView:(UIScrollView *)scrollView DZNEmptyDataSetDeprecated(-emptyDataSet:didTapView:);
-
-/**
- Tells the delegate that the action button was tapped.
- 
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetDidTapButton:(UIScrollView *)scrollView DZNEmptyDataSetDeprecated(-emptyDataSet:didTapButton:);
-
-/**
- Tells the delegate that the empty dataset view was tapped.
- Use this method either to resignFirstResponder of a textfield or searchBar.
- 
- @param scrollView A scrollView subclass informing the delegate.
- @param view the view tapped by the user
- */
-- (void)emptyDataSet:(UIScrollView *)scrollView didTapView:(UIView *)view;
-
-/**
- Tells the delegate that the action button was tapped.
- 
- @param scrollView A scrollView subclass informing the delegate.
- @param button the button tapped by the user
- */
-- (void)emptyDataSet:(UIScrollView *)scrollView didTapButton:(UIButton *)button;
-
-/**
- Tells the delegate that the empty data set will appear.
-
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetWillAppear:(UIScrollView *)scrollView;
-
-/**
- Tells the delegate that the empty data set did appear.
-
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetDidAppear:(UIScrollView *)scrollView;
-
-/**
- Tells the delegate that the empty data set will disappear.
-
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetWillDisappear:(UIScrollView *)scrollView;
-
-/**
- Tells the delegate that the empty data set did disappear.
-
- @param scrollView A scrollView subclass informing the delegate.
- */
-- (void)emptyDataSetDidDisappear:(UIScrollView *)scrollView;
-
-@end
-
-#undef DZNEmptyDataSetDeprecated
-

+ 1 - 0
Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Public/DZNEmptyDataSet/UIScrollView+EmptyDataSet.h

@@ -0,0 +1 @@
+../../../../../../Source/UIScrollView+EmptyDataSet.h

+ 0 - 45
Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Public/DZNWebViewController/DZNPolyActivity.h

@@ -1,45 +0,0 @@
-//
-//  DZNPolyActivity.h
-//  DZNWebViewController
-//  https://github.com/dzenbot/DZNWebViewController
-//
-//  Created by Ignacio Romero Zurbuchen on 3/28/14.
-//  Copyright (c) 2014 DZN Labs. All rights reserved.
-//  Licence: MIT-Licence
-//
-
-#import <UIKit/UIKit.h>
-
-/**
- * Types of activity kind, used for polymorphic creation.
- */
-typedef NS_OPTIONS(NSUInteger, DZNPolyActivityType) {
-    DZNPolyActivityTypeLink,
-    DZNPolyActivityTypeSafari,
-    DZNPolyActivityTypeChrome,
-    DZNPolyActivityTypeOpera,
-    DZNPolyActivityTypeDolphin
-};
-
-/**
- * The DZNPolyActivity class is an abstract subclass of UIActivity allowing to easily create polymorphic instances by assigning different activity types. Each type will render a different icon and title, and will perform different actions too.
- */
-@interface DZNPolyActivity : UIActivity
-
-/**
- * Initializes and returns a newly created activity with a specific type.
- *
- * @param type The type of the activity to be created.
- * @returns The initialized activity.
- */
-- (instancetype)initWithActivityType:(DZNPolyActivityType)type;
-
-/**
- * Allocates a new instance of the receiving class, sends it an init message, and returns the initialized object.
- * This method implements the same logic than initWithActivityType: but is just shorter to call.
- *
- * @param type The type of the activity to be created.
- */
-+ (instancetype)activityWithType:(DZNPolyActivityType)type;
-
-@end

+ 1 - 0
Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Public/DZNWebViewController/DZNPolyActivity.h

@@ -0,0 +1 @@
+../../../DZNWebViewController/Source/Classes/DZNPolyActivity.h

+ 0 - 75
Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Public/DZNWebViewController/DZNWebViewController.h

@@ -1,75 +0,0 @@
-//
-//  DZNWebViewController.h
-//  DZNWebViewController
-//  https://github.com/dzenbot/DZNWebViewController
-//
-//  Created by Ignacio Romero Zurbuchen on 10/25/13.
-//  Copyright (c) 2014 DZN Labs. All rights reserved.
-//  Licence: MIT-Licence
-//
-
-#import <UIKit/UIKit.h>
-
-/**
- * Types of supported actions (i.e. Share & Copy link, Add to Reading List, Open in Safari/Chrome/Opera/Dolphin).
- */
-typedef NS_OPTIONS(NSUInteger, DZNWebViewControllerActions) {
-    DZNWebViewControllerActionAll = -1,
-    DZNWebViewControllerActionNone = 0,
-    DZNWebViewControllerActionShareLink = (1 << 0),
-    DZNWebViewControllerActionCopyLink = (1 << 1),
-    DZNWebViewControllerActionReadLater = (1 << 2),
-    DZNWebViewControllerActionOpenSafari = (1 << 3),
-    DZNWebViewControllerActionOpenChrome = (1 << 4),
-    DZNWebViewControllerActionOpenOperaMini = (1 << 5),
-    DZNWebViewControllerActionOpenDolphin = (1 << 6)
-};
-
-/**
- * Types of network loading style.
- */
-typedef NS_OPTIONS(NSUInteger, DZNWebViewControllerLoadingStyle) {
-    DZNWebViewControllerLoadingStyleNone,
-    DZNWebViewControllerLoadingStyleProgressView,
-    DZNWebViewControllerLoadingStyleActivityIndicator
-};
-
-/**
- * A very simple web browser with useful navigation and exportation tools.
- */
-@interface DZNWebViewController : UIViewController
-
-/** The web view that the controller manages. */
-@property (nonatomic, strong) UIWebView *webView;
-/** The URL identifying the location of the content to load. */
-@property (nonatomic, readonly) NSURL *URL;
-/** The loading visual style, using a progress bar or a network activity indicator. Default is DZNWebViewControllerLoadingStyleProgressView. */
-@property (nonatomic) DZNWebViewControllerLoadingStyle loadingStyle;
-/** The supported actions like sharing and copy link, add to reading list, open in Safari, etc. Default is DZNWebViewControllerActionAll. */
-@property (nonatomic) DZNWebViewControllerActions supportedActions;
-/** The toolbar background color. Default is black, translucent. */
-@property (nonatomic, strong) UIColor *toolbarBackgroundColor;
-/** The toolbar item's tint color. Default is white. */
-@property (nonatomic, strong) UIColor *toolbarTintColor;
-/** The navigation bar's title font. Default uses UINavigation's appearance title text attributes with key NSFontAttributeName. */
-@property (nonatomic, strong) UIFont *titleFont;
-/** The navigation bar's title custom font. Default uses UINavigation's appearance title text attributes with key NSForegroundColorAttributeName. */
-@property (nonatomic, strong) UIColor *titleColor;
-
-/**
- * Initializes and returns a newly created webview controller with an initial HTTP URL to be requested as soon as the view appears.
- *
- * @param URL The HTTP URL to be requested.
- * @returns The initialized webview controller.
- */
-- (id)initWithURL:(NSURL *)URL;
-
-/**
- * Initializes and returns a newly created webview controller for local HTML navigation.
- *
- * @param URL The file URL of the main html.
- * @returns The initialized webview controller.
- */
-- (id)initWithFileURL:(NSURL *)URL;
-
-@end

+ 1 - 0
Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Public/DZNWebViewController/DZNWebViewController.h

@@ -0,0 +1 @@
+../../../DZNWebViewController/Source/Classes/DZNWebViewController.h

+ 0 - 35
Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Public/NJKWebViewProgress/NJKWebViewProgress.h

@@ -1,35 +0,0 @@
-//
-//  NJKWebViewProgress.h
-//
-//  Created by Satoshi Aasano on 4/20/13.
-//  Copyright (c) 2013 Satoshi Asano. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-
-#undef njk_weak
-#if __has_feature(objc_arc_weak)
-#define njk_weak weak
-#else
-#define njk_weak unsafe_unretained
-#endif
-
-extern const float NJKInitialProgressValue;
-extern const float NJKInteractiveProgressValue;
-extern const float NJKFinalProgressValue;
-
-typedef void (^NJKWebViewProgressBlock)(float progress);
-@protocol NJKWebViewProgressDelegate;
-@interface NJKWebViewProgress : NSObject<UIWebViewDelegate>
-@property (nonatomic, njk_weak) id<NJKWebViewProgressDelegate>progressDelegate;
-@property (nonatomic, njk_weak) id<UIWebViewDelegate>webViewProxyDelegate;
-@property (nonatomic, copy) NJKWebViewProgressBlock progressBlock;
-@property (nonatomic, readonly) float progress; // 0.0..1.0
-
-- (void)reset;
-@end
-
-@protocol NJKWebViewProgressDelegate <NSObject>
-- (void)webViewProgress:(NJKWebViewProgress *)webViewProgress updateProgress:(float)progress;
-@end
-

+ 1 - 0
Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Public/NJKWebViewProgress/NJKWebViewProgress.h

@@ -0,0 +1 @@
+../../../NJKWebViewProgress/NJKWebViewProgress/NJKWebViewProgress.h

+ 0 - 21
Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Public/NJKWebViewProgress/NJKWebViewProgressView.h

@@ -1,21 +0,0 @@
-//
-//  NJKWebViewProgressView.h
-// iOS 7 Style WebView Progress Bar
-//
-//  Created by Satoshi Aasano on 11/16/13.
-//  Copyright (c) 2013 Satoshi Asano. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-
-@interface NJKWebViewProgressView : UIView
-@property (nonatomic) float progress;
-
-@property (nonatomic) UIView *progressBarView;
-@property (nonatomic) NSTimeInterval barAnimationDuration; // default 0.1
-@property (nonatomic) NSTimeInterval fadeAnimationDuration; // default 0.27
-@property (nonatomic) NSTimeInterval fadeOutDelay; // default 0.1
-
-- (void)setProgress:(float)progress animated:(BOOL)animated;
-
-@end

+ 1 - 0
Carthage/Checkouts/DZNEmptyDataSet/Examples/WebBrowser/Pods/Headers/Public/NJKWebViewProgress/NJKWebViewProgressView.h

@@ -0,0 +1 @@
+../../../NJKWebViewProgress/NJKWebViewProgress/NJKWebViewProgressView.h

+ 0 - 42
Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/EARestrictedScrollView/EARestrictedScrollView.h

@@ -1,42 +0,0 @@
-//
-//  EARestrictedScrollView.h
-//
-//  Copyright (c) 2015-2016 Evgeny Aleksandrov. License: MIT.
-
-#import <UIKit/UIKit.h>
-
-@interface EARestrictedScrollView : UIScrollView
-
-/**
- *  This property leads to containerView.subviews - all subviews except scroll indicators are stored there.
- */
-@property (nonatomic, copy, readonly) NSArray<UIView *> *containedSubviews;
-
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wproperty-attribute-mismatch"
-/**
- *  When accessing this property with dot-notation - container offset will be used to calculate final value, so you can forget about implemetation details. Also lies in coordinate space of `contentView`.
- */
-@property (nonatomic, assign, getter=alignedContentOffset, setter=setAlignedContentOffset:) CGPoint contentOffset;
-#pragma GCC diagnostic pop
-
-/**
- *  This is the rect property which defines restriction area in coordinate space of `contentView`. Use CGRectZero to reset restriction.
- */
-@property (nonatomic, assign) CGRect restrictionArea;
-
-/**
- *  Should not be used, since it changes parent contentOffset that is being manipulated by subclass.
- *
- *  @see contentOffset
- */
-- (void)setContentOffset:(CGPoint)contentOffset __attribute__((unavailable("use dot notation to access property")));
-
-/**
- *  Should not be used, since it leads to parent contentOffset that is being manipulated by subclass.
- *
- *  @see contentOffset
- */
-- (CGPoint)contentOffset __attribute__((unavailable("use dot notation to access property")));
-
-@end

+ 1 - 0
Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/EARestrictedScrollView/EARestrictedScrollView.h

@@ -0,0 +1 @@
+../../../../../EARestrictedScrollView/EARestrictedScrollView.h

+ 0 - 14
Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/Expecta+Snapshots/EXPMatchers+FBSnapshotTest.h

@@ -1,14 +0,0 @@
-#import <Expecta/Expecta.h>
-#import "ExpectaObject+FBSnapshotTest.h"
-
-@interface EXPExpectFBSnapshotTest : NSObject
-@end
-
-/// Set the default folder for image tests to run in
-extern void setGlobalReferenceImageDir(char *reference);
-
-EXPMatcherInterface(haveValidSnapshot, (void));
-EXPMatcherInterface(recordSnapshot, (void));
-
-EXPMatcherInterface(haveValidSnapshotNamed, (NSString *snapshot));
-EXPMatcherInterface(recordSnapshotNamed, (NSString *snapshot));

+ 1 - 0
Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/Expecta+Snapshots/EXPMatchers+FBSnapshotTest.h

@@ -0,0 +1 @@
+../../../Expecta+Snapshots/EXPMatchers+FBSnapshotTest.h

+ 0 - 17
Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/Expecta+Snapshots/ExpectaObject+FBSnapshotTest.h

@@ -1,17 +0,0 @@
-//
-//  ExpectaObject+FBSnapshotTest.h
-//  Expecta+Snapshots
-//
-//  Created by John Boiles on 8/3/15.
-//  Copyright (c) 2015 Expecta+Snapshots All rights reserved.
-//
-
-#import <Expecta/ExpectaObject.h>
-
-@interface Expecta (FBSnapshotTest)
-
-+ (void)setUsesDrawViewHierarchyInRect:(BOOL)usesDrawViewHierarchyInRect;
-
-+ (BOOL)usesDrawViewHierarchyInRect;
-
-@end

+ 1 - 0
Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/Expecta+Snapshots/ExpectaObject+FBSnapshotTest.h

@@ -0,0 +1 @@
+../../../Expecta+Snapshots/ExpectaObject+FBSnapshotTest.h

+ 0 - 25
Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/Expecta/EXPBlockDefinedMatcher.h

@@ -1,25 +0,0 @@
-//
-//  EXPRuntimeMatcher.h
-//  Expecta
-//
-//  Created by Luke Redpath on 26/03/2012.
-//  Copyright (c) 2012 Peter Jihoon Kim. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-#import "EXPMatcher.h"
-#import "EXPDefines.h"
-
-@interface EXPBlockDefinedMatcher : NSObject <EXPMatcher> {
-  EXPBoolBlock prerequisiteBlock;
-  EXPBoolBlock matchBlock;
-  EXPStringBlock failureMessageForToBlock;
-  EXPStringBlock failureMessageForNotToBlock;
-}
-
-@property(nonatomic, copy) EXPBoolBlock prerequisiteBlock;
-@property(nonatomic, copy) EXPBoolBlock matchBlock;
-@property(nonatomic, copy) EXPStringBlock failureMessageForToBlock;
-@property(nonatomic, copy) EXPStringBlock failureMessageForNotToBlock;
-
-@end

+ 1 - 0
Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/Expecta/EXPBlockDefinedMatcher.h

@@ -0,0 +1 @@
+../../../Expecta/Expecta/EXPBlockDefinedMatcher.h

+ 0 - 17
Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/Expecta/EXPDefines.h

@@ -1,17 +0,0 @@
-//
-//  EXPDefines.h
-//  Expecta
-//
-//  Created by Luke Redpath on 26/03/2012.
-//  Copyright (c) 2012 Peter Jihoon Kim. All rights reserved.
-//
-
-#ifndef Expecta_EXPDefines_h
-#define Expecta_EXPDefines_h
-
-typedef void (^EXPBasicBlock)();
-typedef id (^EXPIdBlock)();
-typedef BOOL (^EXPBoolBlock)();
-typedef NSString *(^EXPStringBlock)();
-
-#endif

+ 1 - 0
Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/Expecta/EXPDefines.h

@@ -0,0 +1 @@
+../../../Expecta/Expecta/EXPDefines.h

+ 0 - 13
Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/Expecta/EXPDoubleTuple.h

@@ -1,13 +0,0 @@
-#import <Foundation/Foundation.h>
-
-@interface EXPDoubleTuple : NSObject {
-    double *_values;
-    size_t _size;
-}
-
-@property (nonatomic, assign) double *values;
-@property (nonatomic, assign) size_t size;
-
-- (instancetype)initWithDoubleValues:(double *)values size:(size_t)size NS_DESIGNATED_INITIALIZER;
-
-@end

+ 1 - 0
Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/Expecta/EXPDoubleTuple.h

@@ -0,0 +1 @@
+../../../Expecta/Expecta/EXPDoubleTuple.h

+ 0 - 45
Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/Expecta/EXPExpect.h

@@ -1,45 +0,0 @@
-#import <Foundation/Foundation.h>
-#import "EXPMatcher.h"
-#import "EXPDefines.h"
-
-@interface EXPExpect : NSObject {
-  EXPIdBlock _actualBlock;
-  id _testCase;
-  int _lineNumber;
-  char *_fileName;
-  BOOL _negative;
-  BOOL _asynchronous;
-  NSTimeInterval _timeout;
-}
-
-@property(nonatomic, copy) EXPIdBlock actualBlock;
-@property(nonatomic, readonly) id actual;
-@property(nonatomic, assign) id testCase;
-@property(nonatomic) int lineNumber;
-@property(nonatomic) const char *fileName;
-@property(nonatomic) BOOL negative;
-@property(nonatomic) BOOL asynchronous;
-@property(nonatomic) NSTimeInterval timeout;
-
-@property(nonatomic, readonly) EXPExpect *to;
-@property(nonatomic, readonly) EXPExpect *toNot;
-@property(nonatomic, readonly) EXPExpect *notTo;
-@property(nonatomic, readonly) EXPExpect *will;
-@property(nonatomic, readonly) EXPExpect *willNot;
-@property(nonatomic, readonly) EXPExpect *(^after)(NSTimeInterval timeInterval);
-
-- (instancetype)initWithActualBlock:(id)actualBlock testCase:(id)testCase lineNumber:(int)lineNumber fileName:(const char *)fileName NS_DESIGNATED_INITIALIZER;
-+ (EXPExpect *)expectWithActualBlock:(id)actualBlock testCase:(id)testCase lineNumber:(int)lineNumber fileName:(const char *)fileName;
-
-- (void)applyMatcher:(id<EXPMatcher>)matcher;
-- (void)applyMatcher:(id<EXPMatcher>)matcher to:(NSObject **)actual;
-
-@end
-
-@interface EXPDynamicPredicateMatcher : NSObject <EXPMatcher> {
-  EXPExpect *_expectation;
-  SEL _selector;
-}
-- (instancetype)initWithExpectation:(EXPExpect *)expectation selector:(SEL)selector NS_DESIGNATED_INITIALIZER;
-@property (nonatomic, readonly, copy) void (^dispatch)(void);
-@end

+ 1 - 0
Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/Expecta/EXPExpect.h

@@ -0,0 +1 @@
+../../../Expecta/Expecta/EXPExpect.h

+ 0 - 13
Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/Expecta/EXPFloatTuple.h

@@ -1,13 +0,0 @@
-#import <Foundation/Foundation.h>
-
-@interface EXPFloatTuple : NSObject {
-    float *_values;
-    size_t _size;
-}
-
-@property (nonatomic, assign) float *values;
-@property (nonatomic, assign) size_t size;
-
-- (instancetype)initWithFloatValues:(float *)values size:(size_t)size NS_DESIGNATED_INITIALIZER;
-
-@end

+ 1 - 0
Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/Expecta/EXPFloatTuple.h

@@ -0,0 +1 @@
+../../../Expecta/Expecta/EXPFloatTuple.h

+ 0 - 20
Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/Expecta/EXPMatcher.h

@@ -1,20 +0,0 @@
-//
-//  EXPMatcher.h
-//  Expecta
-//
-//  Created by Luke Redpath on 26/03/2012.
-//  Copyright (c) 2012 Peter Jihoon Kim. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-
-@protocol EXPMatcher <NSObject>
-
-- (BOOL)matches:(id)actual;
-
-@optional
-- (BOOL)meetsPrerequesiteFor:(id)actual;
-- (NSString *)failureMessageForTo:(id)actual;
-- (NSString *)failureMessageForNotTo:(id)actual;
-
-@end

+ 1 - 0
Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/Expecta/EXPMatcher.h

@@ -0,0 +1 @@
+../../../Expecta/Expecta/EXPMatcher.h

+ 0 - 4
Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/Expecta/EXPMatcherHelpers.h

@@ -1,4 +0,0 @@
-#import <Foundation/Foundation.h>
-
-BOOL EXPIsValuePointer(NSValue *value);
-BOOL EXPIsNumberFloat(NSNumber *number);

+ 1 - 0
Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/Expecta/EXPMatcherHelpers.h

@@ -0,0 +1 @@
+../../../Expecta/Expecta/Matchers/EXPMatcherHelpers.h

+ 0 - 7
Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Headers/Private/Expecta/EXPMatchers+beCloseTo.h

@@ -1,7 +0,0 @@
-#import "Expecta.h"
-
-EXPMatcherInterface(_beCloseToWithin, (id expected, id within));
-EXPMatcherInterface(beCloseToWithin, (id expected, id within));
-
-#define beCloseTo(expected) _beCloseToWithin(EXPObjectify((expected)), nil)
-#define beCloseToWithin(expected, range) _beCloseToWithin(EXPObjectify((expected)), EXPObjectify((range)))

Some files were not shown because too many files changed in this diff