diff --git a/Demo/PickerDemo.xcodeproj/project.pbxproj b/Demo/PickerDemo.xcodeproj/project.pbxproj
index 8381039..f93ac61 100644
--- a/Demo/PickerDemo.xcodeproj/project.pbxproj
+++ b/Demo/PickerDemo.xcodeproj/project.pbxproj
@@ -1,1867 +1,628 @@
-
-
-
-
- archiveVersion
- 1
- classes
-
- objectVersion
- 46
- objects
-
- 2BD5EDB130050A97241322AE
-
- children
-
- F4561B72539D02C0EFDD6055
- EBDDA42323D60D362D548DDD
-
- isa
- PBXGroup
- name
- Pods
- sourceTree
- <group>
-
- 97D1299EDB164AF58B312BD8
-
- buildActionMask
- 2147483647
- files
-
- inputPaths
-
- isa
- PBXShellScriptBuildPhase
- name
- Check Pods Manifest.lock
- outputPaths
-
- runOnlyForDeploymentPostprocessing
- 0
- shellPath
- /bin/sh
- shellScript
- diff "${PODS_ROOT}/../Podfile.lock" "${PODS_ROOT}/Manifest.lock" > /dev/null
-if [[ $? != 0 ]] ; then
- cat << EOM
-error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.
-EOM
- exit 1
-fi
-
- showEnvVarsInLog
- 0
-
- C19A4A91A703473FBB359763
-
- fileRef
- DFCD1015AE6F4C97AFDB8962
- isa
- PBXBuildFile
-
- DA7F503918FC4D90A421B067
-
- buildActionMask
- 2147483647
- files
-
- inputPaths
-
- isa
- PBXShellScriptBuildPhase
- name
- Copy Pods Resources
- outputPaths
-
- runOnlyForDeploymentPostprocessing
- 0
- shellPath
- /bin/sh
- shellScript
- "${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh"
-
- showEnvVarsInLog
- 0
-
- DFCD1015AE6F4C97AFDB8962
-
- explicitFileType
- archive.ar
- includeInIndex
- 0
- isa
- PBXFileReference
- path
- libPods.a
- sourceTree
- BUILT_PRODUCTS_DIR
-
- E57AC34F18618D8E00BDE659
-
- fileEncoding
- 4
- isa
- PBXFileReference
- lastKnownFileType
- file.xib
- path
- AdjustFilterButtonCell.xib
- sourceTree
- <group>
-
- E57AC35018618D8E00BDE659
-
- fileEncoding
- 4
- isa
- PBXFileReference
- lastKnownFileType
- file.xib
- path
- AdjustFilterSliderCell.xib
- sourceTree
- <group>
-
- E57AC35118618D8E00BDE659
-
- fileEncoding
- 4
- isa
- PBXFileReference
- lastKnownFileType
- file.xib
- path
- AdjustFilterSwitchCell.xib
- sourceTree
- <group>
-
- E57AC35218618D8E00BDE659
-
- fileEncoding
- 4
- isa
- PBXFileReference
- lastKnownFileType
- file.xib
- path
- AdjustFilterTitleCell.xib
- sourceTree
- <group>
-
- E57AC35318618D8E00BDE659
-
- fileEncoding
- 4
- isa
- PBXFileReference
- lastKnownFileType
- file.xib
- path
- AdjustFilterViewController_iPad.xib
- sourceTree
- <group>
-
- E57AC35418618D8E00BDE659
-
- fileEncoding
- 4
- isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.h
- path
- AdjustFilterViewController.h
- sourceTree
- <group>
-
- E57AC35518618D8E00BDE659
-
- fileEncoding
- 4
- isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.objc
- path
- AdjustFilterViewController.m
- sourceTree
- <group>
-
- E57AC35618618D8E00BDE659
-
- fileEncoding
- 4
- isa
- PBXFileReference
- lastKnownFileType
- file.xib
- path
- AdjustFilterViewController.xib
- sourceTree
- <group>
-
- E57AC35718618D8E00BDE659
-
- fileEncoding
- 4
- isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.h
- path
- AssetsGroupViewController.h
- sourceTree
- <group>
-
- E57AC35818618D8E00BDE659
-
- fileEncoding
- 4
- isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.objc
- path
- AssetsGroupViewController.m
- sourceTree
- <group>
-
- E57AC35918618D8E00BDE659
-
- fileEncoding
- 4
- isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.h
- path
- CameraViewController.h
- sourceTree
- <group>
-
- E57AC35A18618D8E00BDE659
-
- fileEncoding
- 4
- isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.objc
- path
- CameraViewController.m
- sourceTree
- <group>
-
- E57AC35C18618D8E00BDE659
-
- fileEncoding
- 4
- isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.h
- path
- CropViewController.h
- sourceTree
- <group>
-
- E57AC35D18618D8E00BDE659
-
- fileEncoding
- 4
- isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.objc
- path
- CropViewController.m
- sourceTree
- <group>
-
- E57AC35F18618D8E00BDE659
-
- fileEncoding
- 4
- isa
- PBXFileReference
- lastKnownFileType
- file.xib
- path
- CustomAssetsGroupView.xib
- sourceTree
- <group>
-
- E57AC36018618D8E00BDE659
-
- fileEncoding
- 4
- isa
- PBXFileReference
- lastKnownFileType
- file.xib
- path
- CustomAssetThumbnailView.xib
- sourceTree
- <group>
-
- E57AC36118618D8E00BDE659
-
- fileEncoding
- 4
- isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.h
- path
- CustomGPUImageFilterProvider.h
- sourceTree
- <group>
-
- E57AC36218618D8E00BDE659
-
- fileEncoding
- 4
- isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.objc
- path
- CustomGPUImageFilterProvider.m
- sourceTree
- <group>
-
- E57AC36318618D8E00BDE659
-
- fileEncoding
- 4
- isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.h
- path
- GalleryViewController.h
- sourceTree
- <group>
-
- E57AC36418618D8E00BDE659
-
- fileEncoding
- 4
- isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.objc
- path
- GalleryViewController.m
- sourceTree
- <group>
-
- E57AC36618618D8E00BDE659
-
- fileEncoding
- 4
- isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.h
- path
- LibraryViewController.h
- sourceTree
- <group>
-
- E57AC36718618D8E00BDE659
-
- fileEncoding
- 4
- isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.objc
- path
- LibraryViewController.m
- sourceTree
- <group>
-
- E57AC36818618D8E00BDE659
-
- fileEncoding
- 4
- isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.h
- path
- PickerTestsViewController.h
- sourceTree
- <group>
-
- E57AC36918618D8E00BDE659
-
- fileEncoding
- 4
- isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.objc
- path
- PickerTestsViewController.m
- sourceTree
- <group>
-
- E57AC36B18618D8E00BDE659
-
- fileEncoding
- 4
- isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.h
- path
- PresetFilterViewController.h
- sourceTree
- <group>
-
- E57AC36C18618D8E00BDE659
-
- fileEncoding
- 4
- isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.objc
- path
- PresetFilterViewController.m
- sourceTree
- <group>
-
- E57AC36E18618D8E00BDE659
-
- children
-
- E57AC37218618D8E00BDE659
- E57AC37418618D8E00BDE659
- E57AC37518618D8E00BDE659
- E57AC36F18618D8E00BDE659
- E57AC37018618D8E00BDE659
- E57AC37118618D8E00BDE659
- E57AC37318618D8E00BDE659
- E57AC37618618D8E00BDE659
- E57AC37718618D8E00BDE659
- E57AC37818618D8E00BDE659
- E57AC37918618D8E00BDE659
- E57AC37A18618D8E00BDE659
- E57AC37B18618D8E00BDE659
- E57AC37C18618D8E00BDE659
- E57AC37D18618D8E00BDE659
- E57AC37E18618D8E00BDE659
- E57AC37F18618D8E00BDE659
- E57AC38018618D8E00BDE659
- E57AC38118618D8E00BDE659
- E57AC38218618D8E00BDE659
- E57AC38318618D8E00BDE659
- E57AC38418618D8E00BDE659
- E57AC38518618D8E00BDE659
-
- isa
- PBXGroup
- path
- Resources
- sourceTree
- <group>
-
- E57AC36F18618D8E00BDE659
-
- isa
- PBXFileReference
- lastKnownFileType
- file
- path
- FA_Curves1.acv
- sourceTree
- <group>
-
- E57AC37018618D8E00BDE659
-
- isa
- PBXFileReference
- lastKnownFileType
- file
- path
- FA_Curves2.acv
- sourceTree
- <group>
-
- E57AC37118618D8E00BDE659
-
- isa
- PBXFileReference
- lastKnownFileType
- file
- path
- FA_Curves3.acv
- sourceTree
- <group>
-
- E57AC37218618D8E00BDE659
-
- isa
- PBXFileReference
- lastKnownFileType
- image.png
- path
- frame.png
- sourceTree
- <group>
-
- E57AC37318618D8E00BDE659
-
- isa
- PBXFileReference
- lastKnownFileType
- file
- path
- Old.acv
- sourceTree
- <group>
-
- E57AC37418618D8E00BDE659
-
- isa
- PBXFileReference
- lastKnownFileType
- image.jpeg
- path
- photo.jpg
- sourceTree
- <group>
-
- E57AC37518618D8E00BDE659
-
- isa
- PBXFileReference
- lastKnownFileType
- image.jpeg
- path
- photo_hires.jpg
- sourceTree
- <group>
-
- E57AC37618618D8E00BDE659
-
- isa
- PBXFileReference
- lastKnownFileType
- file
- path
- RJ16.acv
- sourceTree
- <group>
-
- E57AC37718618D8E00BDE659
-
- isa
- PBXFileReference
- lastKnownFileType
- file
- path
- RJ17.acv
- sourceTree
- <group>
-
- E57AC37818618D8E00BDE659
-
- isa
- PBXFileReference
- lastKnownFileType
- file
- path
- RJ18.acv
- sourceTree
- <group>
-
- E57AC37918618D8E00BDE659
-
- isa
- PBXFileReference
- lastKnownFileType
- file
- path
- RJ19.acv
- sourceTree
- <group>
-
- E57AC37A18618D8E00BDE659
-
- isa
- PBXFileReference
- lastKnownFileType
- file
- path
- RJ20.acv
- sourceTree
- <group>
-
- E57AC37B18618D8E00BDE659
-
- isa
- PBXFileReference
- lastKnownFileType
- file
- path
- RJ21.acv
- sourceTree
- <group>
-
- E57AC37C18618D8E00BDE659
-
- isa
- PBXFileReference
- lastKnownFileType
- file
- path
- RJ22.acv
- sourceTree
- <group>
-
- E57AC37D18618D8E00BDE659
-
- isa
- PBXFileReference
- lastKnownFileType
- file
- path
- RJ23.acv
- sourceTree
- <group>
-
- E57AC37E18618D8E00BDE659
-
- isa
- PBXFileReference
- lastKnownFileType
- file
- path
- RJ24.acv
- sourceTree
- <group>
-
- E57AC37F18618D8E00BDE659
-
- isa
- PBXFileReference
- lastKnownFileType
- file
- path
- RJ25.acv
- sourceTree
- <group>
-
- E57AC38018618D8E00BDE659
-
- isa
- PBXFileReference
- lastKnownFileType
- file
- path
- RJ26.acv
- sourceTree
- <group>
-
- E57AC38118618D8E00BDE659
-
- isa
- PBXFileReference
- lastKnownFileType
- file
- path
- RJ27.acv
- sourceTree
- <group>
-
- E57AC38218618D8E00BDE659
-
- isa
- PBXFileReference
- lastKnownFileType
- file
- path
- RJ28.acv
- sourceTree
- <group>
-
- E57AC38318618D8E00BDE659
-
- isa
- PBXFileReference
- lastKnownFileType
- file
- path
- RJ29.acv
- sourceTree
- <group>
-
- E57AC38418618D8E00BDE659
-
- isa
- PBXFileReference
- lastKnownFileType
- file
- path
- RJ30.acv
- sourceTree
- <group>
-
- E57AC38518618D8E00BDE659
-
- isa
- PBXFileReference
- lastKnownFileType
- file
- path
- Toy.acv
- sourceTree
- <group>
-
- E57AC38618618D8E00BDE659
-
- fileRef
- E57AC34F18618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC38718618D8E00BDE659
-
- fileRef
- E57AC35018618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC38818618D8E00BDE659
-
- fileRef
- E57AC35118618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC38918618D8E00BDE659
-
- fileRef
- E57AC35218618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC38A18618D8E00BDE659
-
- fileRef
- E57AC35318618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC38B18618D8E00BDE659
-
- fileRef
- E57AC35518618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC38C18618D8E00BDE659
-
- fileRef
- E57AC35618618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC38D18618D8E00BDE659
-
- fileRef
- E57AC35818618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC38E18618D8E00BDE659
-
- fileRef
- E57AC35A18618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC39018618D8E00BDE659
-
- fileRef
- E57AC35D18618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC39218618D8E00BDE659
-
- fileRef
- E57AC35F18618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC39318618D8E00BDE659
-
- fileRef
- E57AC36018618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC39418618D8E00BDE659
-
- fileRef
- E57AC36218618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC39518618D8E00BDE659
-
- fileRef
- E57AC36418618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC39718618D8E00BDE659
-
- fileRef
- E57AC36718618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC39818618D8E00BDE659
-
- fileRef
- E57AC36918618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC39A18618D8E00BDE659
-
- fileRef
- E57AC36C18618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC39C18618D8E00BDE659
-
- fileRef
- E57AC36F18618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC39D18618D8E00BDE659
-
- fileRef
- E57AC37018618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC39E18618D8E00BDE659
-
- fileRef
- E57AC37118618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC39F18618D8E00BDE659
-
- fileRef
- E57AC37218618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC3A018618D8E00BDE659
-
- fileRef
- E57AC37318618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC3A118618D8E00BDE659
-
- fileRef
- E57AC37418618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC3A218618D8E00BDE659
-
- fileRef
- E57AC37518618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC3A318618D8E00BDE659
-
- fileRef
- E57AC37618618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC3A418618D8E00BDE659
-
- fileRef
- E57AC37718618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC3A518618D8E00BDE659
-
- fileRef
- E57AC37818618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC3A618618D8E00BDE659
-
- fileRef
- E57AC37918618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC3A718618D8E00BDE659
-
- fileRef
- E57AC37A18618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC3A818618D8E00BDE659
-
- fileRef
- E57AC37B18618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC3A918618D8E00BDE659
-
- fileRef
- E57AC37C18618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC3AA18618D8E00BDE659
-
- fileRef
- E57AC37D18618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC3AB18618D8E00BDE659
-
- fileRef
- E57AC37E18618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC3AC18618D8E00BDE659
-
- fileRef
- E57AC37F18618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC3AD18618D8E00BDE659
-
- fileRef
- E57AC38018618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC3AE18618D8E00BDE659
-
- fileRef
- E57AC38118618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC3AF18618D8E00BDE659
-
- fileRef
- E57AC38218618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC3B018618D8E00BDE659
-
- fileRef
- E57AC38318618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC3B118618D8E00BDE659
-
- fileRef
- E57AC38418618D8E00BDE659
- isa
- PBXBuildFile
-
- E57AC3B218618D8E00BDE659
-
- fileRef
- E57AC38518618D8E00BDE659
- isa
- PBXBuildFile
-
- E57FDDF519CAC50A0011B4E5
-
- isa
- PBXFileReference
- lastKnownFileType
- text.plist.strings
- name
- ja
- path
- ja.lproj/InfoPlist.strings
- sourceTree
- <group>
-
- E58DA578184339C100D60BBC
-
- children
-
- E58DA58A184339C100D60BBC
- E58DA583184339C100D60BBC
- E58DA582184339C100D60BBC
- 2BD5EDB130050A97241322AE
-
- isa
- PBXGroup
- sourceTree
- <group>
-
- E58DA579184339C100D60BBC
-
- attributes
-
- LastUpgradeCheck
- 0510
- ORGANIZATIONNAME
- CyberAgent Inc.
-
- buildConfigurationList
- E58DA57C184339C100D60BBC
- compatibilityVersion
- Xcode 3.2
- developmentRegion
- English
- hasScannedForEncodings
- 0
- isa
- PBXProject
- knownRegions
-
- en
- Base
- ja
-
- mainGroup
- E58DA578184339C100D60BBC
- productRefGroup
- E58DA582184339C100D60BBC
- projectDirPath
-
- projectReferences
-
- projectRoot
-
- targets
-
- E58DA580184339C100D60BBC
-
-
- E58DA57C184339C100D60BBC
-
- buildConfigurations
-
- E58DA5B7184339C100D60BBC
- E58DA5B8184339C100D60BBC
-
- defaultConfigurationIsVisible
- 0
- defaultConfigurationName
- Release
- isa
- XCConfigurationList
-
- E58DA57D184339C100D60BBC
-
- buildActionMask
- 2147483647
- files
-
- E57AC38E18618D8E00BDE659
- E57AC39518618D8E00BDE659
- E57AC39818618D8E00BDE659
- E58DA595184339C100D60BBC
- E57AC39A18618D8E00BDE659
- E57AC39718618D8E00BDE659
- E57AC38D18618D8E00BDE659
- E58DA591184339C100D60BBC
- E57AC39018618D8E00BDE659
- E57AC38B18618D8E00BDE659
- E57AC39418618D8E00BDE659
-
- isa
- PBXSourcesBuildPhase
- runOnlyForDeploymentPostprocessing
- 0
-
- E58DA57E184339C100D60BBC
-
- buildActionMask
- 2147483647
- files
-
- E58DA587184339C100D60BBC
- E58DA589184339C100D60BBC
- E58DA585184339C100D60BBC
- C19A4A91A703473FBB359763
-
- isa
- PBXFrameworksBuildPhase
- runOnlyForDeploymentPostprocessing
- 0
-
- E58DA57F184339C100D60BBC
-
- buildActionMask
- 2147483647
- files
-
- E57AC39218618D8E00BDE659
- E57AC3B118618D8E00BDE659
- E57AC3A718618D8E00BDE659
- E57AC39D18618D8E00BDE659
- E57AC3AC18618D8E00BDE659
- E57AC3A418618D8E00BDE659
- E57AC39F18618D8E00BDE659
- E57AC3A518618D8E00BDE659
- E57AC38C18618D8E00BDE659
- E57AC38818618D8E00BDE659
- E57AC3AD18618D8E00BDE659
- E57AC3A218618D8E00BDE659
- E57AC38A18618D8E00BDE659
- E57AC38718618D8E00BDE659
- E57AC3A618618D8E00BDE659
- E57AC3B218618D8E00BDE659
- E57AC3A118618D8E00BDE659
- E57AC3AA18618D8E00BDE659
- E57AC38918618D8E00BDE659
- E57AC3AB18618D8E00BDE659
- E57AC38618618D8E00BDE659
- E57AC3AF18618D8E00BDE659
- E57AC3A018618D8E00BDE659
- E57AC3AE18618D8E00BDE659
- E58DA5A3184339C100D60BBC
- E58DA598184339C100D60BBC
- E58DA58F184339C100D60BBC
- E57AC3A318618D8E00BDE659
- E57AC39C18618D8E00BDE659
- E57AC39E18618D8E00BDE659
- E57AC39318618D8E00BDE659
- E57AC3A818618D8E00BDE659
- E57AC3A918618D8E00BDE659
- E57AC3B018618D8E00BDE659
-
- isa
- PBXResourcesBuildPhase
- runOnlyForDeploymentPostprocessing
- 0
-
- E58DA580184339C100D60BBC
-
- buildConfigurationList
- E58DA5B9184339C100D60BBC
- buildPhases
-
- 97D1299EDB164AF58B312BD8
- E58DA57D184339C100D60BBC
- E58DA57E184339C100D60BBC
- E58DA57F184339C100D60BBC
- DA7F503918FC4D90A421B067
-
- buildRules
-
- dependencies
-
- isa
- PBXNativeTarget
- name
- PickerDemo
- productName
- PickerDemo
- productReference
- E58DA581184339C100D60BBC
- productType
- com.apple.product-type.application
-
- E58DA581184339C100D60BBC
-
- explicitFileType
- wrapper.application
- includeInIndex
- 0
- isa
- PBXFileReference
- path
- PickerDemo.app
- sourceTree
- BUILT_PRODUCTS_DIR
-
- E58DA582184339C100D60BBC
-
- children
-
- E58DA581184339C100D60BBC
-
- isa
- PBXGroup
- name
- Products
- sourceTree
- <group>
-
- E58DA583184339C100D60BBC
-
- children
-
- E58DA584184339C100D60BBC
- E58DA586184339C100D60BBC
- E58DA588184339C100D60BBC
- E58DA5A9184339C100D60BBC
- DFCD1015AE6F4C97AFDB8962
-
- isa
- PBXGroup
- name
- Frameworks
- sourceTree
- <group>
-
- E58DA584184339C100D60BBC
-
- isa
- PBXFileReference
- lastKnownFileType
- wrapper.framework
- name
- Foundation.framework
- path
- System/Library/Frameworks/Foundation.framework
- sourceTree
- SDKROOT
-
- E58DA585184339C100D60BBC
-
- fileRef
- E58DA584184339C100D60BBC
- isa
- PBXBuildFile
-
- E58DA586184339C100D60BBC
-
- isa
- PBXFileReference
- lastKnownFileType
- wrapper.framework
- name
- CoreGraphics.framework
- path
- System/Library/Frameworks/CoreGraphics.framework
- sourceTree
- SDKROOT
-
- E58DA587184339C100D60BBC
-
- fileRef
- E58DA586184339C100D60BBC
- isa
- PBXBuildFile
-
- E58DA588184339C100D60BBC
-
- isa
- PBXFileReference
- lastKnownFileType
- wrapper.framework
- name
- UIKit.framework
- path
- System/Library/Frameworks/UIKit.framework
- sourceTree
- SDKROOT
-
- E58DA589184339C100D60BBC
-
- fileRef
- E58DA588184339C100D60BBC
- isa
- PBXBuildFile
-
- E58DA58A184339C100D60BBC
-
- children
-
- E58DA593184339C100D60BBC
- E58DA594184339C100D60BBC
- E58DA596184339C100D60BBC
- E5CB26B418641B67004C16D3
- E5CB26B518641B78004C16D3
- E5CB26B618641B81004C16D3
- E5CB26BA18641BD9004C16D3
- E5CB26B918641BB7004C16D3
- E5CB26B818641BA7004C16D3
- E5CB26B718641B9B004C16D3
- E58DA5A2184339C100D60BBC
- E57AC36E18618D8E00BDE659
- E58DA58B184339C100D60BBC
-
- isa
- PBXGroup
- path
- PickerDemo
- sourceTree
- <group>
-
- E58DA58B184339C100D60BBC
-
- children
-
- E58DA58C184339C100D60BBC
- E58DA58D184339C100D60BBC
- E58DA590184339C100D60BBC
- E58DA592184339C100D60BBC
-
- isa
- PBXGroup
- name
- Supporting Files
- sourceTree
- <group>
-
- E58DA58C184339C100D60BBC
-
- isa
- PBXFileReference
- lastKnownFileType
- text.plist.xml
- path
- PickerDemo-Info.plist
- sourceTree
- <group>
-
- E58DA58D184339C100D60BBC
-
- children
-
- E58DA58E184339C100D60BBC
- E57FDDF519CAC50A0011B4E5
-
- isa
- PBXVariantGroup
- name
- InfoPlist.strings
- sourceTree
- <group>
-
- E58DA58E184339C100D60BBC
-
- isa
- PBXFileReference
- lastKnownFileType
- text.plist.strings
- name
- en
- path
- en.lproj/InfoPlist.strings
- sourceTree
- <group>
-
- E58DA58F184339C100D60BBC
-
- fileRef
- E58DA58D184339C100D60BBC
- isa
- PBXBuildFile
-
- E58DA590184339C100D60BBC
-
- isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.objc
- path
- main.m
- sourceTree
- <group>
-
- E58DA591184339C100D60BBC
-
- fileRef
- E58DA590184339C100D60BBC
- isa
- PBXBuildFile
-
- E58DA592184339C100D60BBC
-
- isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.h
- path
- PickerDemo-Prefix.pch
- sourceTree
- <group>
-
- E58DA593184339C100D60BBC
-
- isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.h
- path
- AppDelegate.h
- sourceTree
- <group>
-
- E58DA594184339C100D60BBC
-
- isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.objc
- path
- AppDelegate.m
- sourceTree
- <group>
-
- E58DA595184339C100D60BBC
-
- fileRef
- E58DA594184339C100D60BBC
- isa
- PBXBuildFile
-
- E58DA596184339C100D60BBC
-
- children
-
- E58DA5BF18433FA900D60BBC
-
- isa
- PBXVariantGroup
- name
- Main.storyboard
- sourceTree
- <group>
-
- E58DA598184339C100D60BBC
-
- fileRef
- E58DA596184339C100D60BBC
- isa
- PBXBuildFile
-
- E58DA5A2184339C100D60BBC
-
- isa
- PBXFileReference
- lastKnownFileType
- folder.assetcatalog
- path
- Images.xcassets
- sourceTree
- <group>
-
- E58DA5A3184339C100D60BBC
-
- fileRef
- E58DA5A2184339C100D60BBC
- isa
- PBXBuildFile
-
- E58DA5A9184339C100D60BBC
-
- isa
- PBXFileReference
- lastKnownFileType
- wrapper.framework
- name
- XCTest.framework
- path
- Library/Frameworks/XCTest.framework
- sourceTree
- DEVELOPER_DIR
-
- E58DA5B7184339C100D60BBC
-
- buildSettings
-
- ALWAYS_SEARCH_USER_PATHS
- NO
- CLANG_CXX_LANGUAGE_STANDARD
- gnu++0x
- CLANG_CXX_LIBRARY
- libc++
- CLANG_ENABLE_MODULES
- YES
- CLANG_ENABLE_OBJC_ARC
- YES
- CLANG_WARN_BOOL_CONVERSION
- YES
- CLANG_WARN_CONSTANT_CONVERSION
- YES
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE
- YES_ERROR
- CLANG_WARN_EMPTY_BODY
- YES
- CLANG_WARN_ENUM_CONVERSION
- YES
- CLANG_WARN_INT_CONVERSION
- YES
- CLANG_WARN_OBJC_ROOT_CLASS
- YES_ERROR
- CLANG_WARN__DUPLICATE_METHOD_MATCH
- YES
- CODE_SIGN_IDENTITY[sdk=iphoneos*]
- iPhone Developer
- COPY_PHASE_STRIP
- NO
- GCC_C_LANGUAGE_STANDARD
- gnu99
- GCC_DYNAMIC_NO_PIC
- NO
- GCC_OPTIMIZATION_LEVEL
- 0
- GCC_PREPROCESSOR_DEFINITIONS
-
- DEBUG=1
- $(inherited)
-
- GCC_SYMBOLS_PRIVATE_EXTERN
- NO
- GCC_WARN_64_TO_32_BIT_CONVERSION
- YES
- GCC_WARN_ABOUT_RETURN_TYPE
- YES_ERROR
- GCC_WARN_UNDECLARED_SELECTOR
- YES
- GCC_WARN_UNINITIALIZED_AUTOS
- YES
- GCC_WARN_UNUSED_FUNCTION
- YES
- GCC_WARN_UNUSED_VARIABLE
- YES
- IPHONEOS_DEPLOYMENT_TARGET
- 5.0
- ONLY_ACTIVE_ARCH
- YES
- SDKROOT
- iphoneos
- TARGETED_DEVICE_FAMILY
- 1,2
-
- isa
- XCBuildConfiguration
- name
- Debug
-
- E58DA5B8184339C100D60BBC
-
- buildSettings
-
- ALWAYS_SEARCH_USER_PATHS
- NO
- CLANG_CXX_LANGUAGE_STANDARD
- gnu++0x
- CLANG_CXX_LIBRARY
- libc++
- CLANG_ENABLE_MODULES
- YES
- CLANG_ENABLE_OBJC_ARC
- YES
- CLANG_WARN_BOOL_CONVERSION
- YES
- CLANG_WARN_CONSTANT_CONVERSION
- YES
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE
- YES_ERROR
- CLANG_WARN_EMPTY_BODY
- YES
- CLANG_WARN_ENUM_CONVERSION
- YES
- CLANG_WARN_INT_CONVERSION
- YES
- CLANG_WARN_OBJC_ROOT_CLASS
- YES_ERROR
- CLANG_WARN__DUPLICATE_METHOD_MATCH
- YES
- CODE_SIGN_IDENTITY[sdk=iphoneos*]
- iPhone Distribution
- COPY_PHASE_STRIP
- YES
- ENABLE_NS_ASSERTIONS
- NO
- GCC_C_LANGUAGE_STANDARD
- gnu99
- GCC_WARN_64_TO_32_BIT_CONVERSION
- YES
- GCC_WARN_ABOUT_RETURN_TYPE
- YES_ERROR
- GCC_WARN_UNDECLARED_SELECTOR
- YES
- GCC_WARN_UNINITIALIZED_AUTOS
- YES
- GCC_WARN_UNUSED_FUNCTION
- YES
- GCC_WARN_UNUSED_VARIABLE
- YES
- IPHONEOS_DEPLOYMENT_TARGET
- 5.0
- SDKROOT
- iphoneos
- TARGETED_DEVICE_FAMILY
- 1,2
- VALIDATE_PRODUCT
- YES
-
- isa
- XCBuildConfiguration
- name
- Release
-
- E58DA5B9184339C100D60BBC
-
- buildConfigurations
-
- E58DA5BA184339C100D60BBC
- E58DA5BB184339C100D60BBC
-
- defaultConfigurationIsVisible
- 0
- defaultConfigurationName
- Release
- isa
- XCConfigurationList
-
- E58DA5BA184339C100D60BBC
-
- baseConfigurationReference
- F4561B72539D02C0EFDD6055
- buildSettings
-
- ASSETCATALOG_COMPILER_APPICON_NAME
- AppIcon
- ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME
- LaunchImage
- GCC_PRECOMPILE_PREFIX_HEADER
- YES
- GCC_PREFIX_HEADER
- PickerDemo/PickerDemo-Prefix.pch
- INFOPLIST_FILE
- PickerDemo/PickerDemo-Info.plist
- IPHONEOS_DEPLOYMENT_TARGET
- 5.0
- PRODUCT_NAME
- $(TARGET_NAME)
- WRAPPER_EXTENSION
- app
-
- isa
- XCBuildConfiguration
- name
- Debug
-
- E58DA5BB184339C100D60BBC
-
- baseConfigurationReference
- EBDDA42323D60D362D548DDD
- buildSettings
-
- ASSETCATALOG_COMPILER_APPICON_NAME
- AppIcon
- ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME
- LaunchImage
- GCC_PRECOMPILE_PREFIX_HEADER
- YES
- GCC_PREFIX_HEADER
- PickerDemo/PickerDemo-Prefix.pch
- GCC_PREPROCESSOR_DEFINITIONS
-
- $(inherited)
- TESTING=1
-
- INFOPLIST_FILE
- PickerDemo/PickerDemo-Info.plist
- IPHONEOS_DEPLOYMENT_TARGET
- 5.0
- PRODUCT_NAME
- $(TARGET_NAME)
- WRAPPER_EXTENSION
- app
-
- isa
- XCBuildConfiguration
- name
- Release
-
- E58DA5BF18433FA900D60BBC
-
- isa
- PBXFileReference
- lastKnownFileType
- file.storyboard
- name
- en
- path
- en.lproj/Main.storyboard
- sourceTree
- <group>
-
- E5CB26B418641B67004C16D3
-
- children
-
- E57AC36818618D8E00BDE659
- E57AC36918618D8E00BDE659
-
- isa
- PBXGroup
- name
- Picker
- sourceTree
- <group>
-
- E5CB26B518641B78004C16D3
-
- children
-
- E57AC36618618D8E00BDE659
- E57AC36718618D8E00BDE659
- E57AC35718618D8E00BDE659
- E57AC35818618D8E00BDE659
- E57AC35F18618D8E00BDE659
- E57AC36018618D8E00BDE659
-
- isa
- PBXGroup
- name
- Assets
- sourceTree
- <group>
-
- E5CB26B618641B81004C16D3
-
- children
-
- E57AC35918618D8E00BDE659
- E57AC35A18618D8E00BDE659
-
- isa
- PBXGroup
- name
- Camera
- sourceTree
- <group>
-
- E5CB26B718641B9B004C16D3
-
- children
-
- E57AC35C18618D8E00BDE659
- E57AC35D18618D8E00BDE659
-
- isa
- PBXGroup
- name
- Crop
- sourceTree
- <group>
-
- E5CB26B818641BA7004C16D3
-
- children
-
- E57AC36318618D8E00BDE659
- E57AC36418618D8E00BDE659
-
- isa
- PBXGroup
- name
- Gallery
- sourceTree
- <group>
-
- E5CB26B918641BB7004C16D3
-
- children
-
- E57AC35418618D8E00BDE659
- E57AC35518618D8E00BDE659
- E57AC35618618D8E00BDE659
- E57AC34F18618D8E00BDE659
- E57AC35018618D8E00BDE659
- E57AC35118618D8E00BDE659
- E57AC35218618D8E00BDE659
- E57AC35318618D8E00BDE659
-
- isa
- PBXGroup
- name
- Filter Editor
- sourceTree
- <group>
-
- E5CB26BA18641BD9004C16D3
-
- children
-
- E57AC36118618D8E00BDE659
- E57AC36218618D8E00BDE659
- E57AC36B18618D8E00BDE659
- E57AC36C18618D8E00BDE659
-
- isa
- PBXGroup
- name
- Filters
- sourceTree
- <group>
-
- EBDDA42323D60D362D548DDD
-
- includeInIndex
- 1
- isa
- PBXFileReference
- lastKnownFileType
- text.xcconfig
- name
- Pods.release.xcconfig
- path
- Pods/Target Support Files/Pods/Pods.release.xcconfig
- sourceTree
- <group>
-
- F4561B72539D02C0EFDD6055
-
- includeInIndex
- 1
- isa
- PBXFileReference
- lastKnownFileType
- text.xcconfig
- name
- Pods.debug.xcconfig
- path
- Pods/Target Support Files/Pods/Pods.debug.xcconfig
- sourceTree
- <group>
-
-
- rootObject
- E58DA579184339C100D60BBC
-
-
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ C19A4A91A703473FBB359763 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DFCD1015AE6F4C97AFDB8962 /* libPods.a */; };
+ E57AC38618618D8E00BDE659 /* AdjustFilterButtonCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = E57AC34F18618D8E00BDE659 /* AdjustFilterButtonCell.xib */; };
+ E57AC38718618D8E00BDE659 /* AdjustFilterSliderCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = E57AC35018618D8E00BDE659 /* AdjustFilterSliderCell.xib */; };
+ E57AC38818618D8E00BDE659 /* AdjustFilterSwitchCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = E57AC35118618D8E00BDE659 /* AdjustFilterSwitchCell.xib */; };
+ E57AC38918618D8E00BDE659 /* AdjustFilterTitleCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = E57AC35218618D8E00BDE659 /* AdjustFilterTitleCell.xib */; };
+ E57AC38A18618D8E00BDE659 /* AdjustFilterViewController_iPad.xib in Resources */ = {isa = PBXBuildFile; fileRef = E57AC35318618D8E00BDE659 /* AdjustFilterViewController_iPad.xib */; };
+ E57AC38B18618D8E00BDE659 /* AdjustFilterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E57AC35518618D8E00BDE659 /* AdjustFilterViewController.m */; };
+ E57AC38D18618D8E00BDE659 /* AssetsGroupViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E57AC35818618D8E00BDE659 /* AssetsGroupViewController.m */; };
+ E57AC38E18618D8E00BDE659 /* CameraViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E57AC35A18618D8E00BDE659 /* CameraViewController.m */; };
+ E57AC39018618D8E00BDE659 /* CropViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E57AC35D18618D8E00BDE659 /* CropViewController.m */; };
+ E57AC39218618D8E00BDE659 /* CustomAssetsGroupView.xib in Resources */ = {isa = PBXBuildFile; fileRef = E57AC35F18618D8E00BDE659 /* CustomAssetsGroupView.xib */; };
+ E57AC39318618D8E00BDE659 /* CustomAssetThumbnailView.xib in Resources */ = {isa = PBXBuildFile; fileRef = E57AC36018618D8E00BDE659 /* CustomAssetThumbnailView.xib */; };
+ E57AC39418618D8E00BDE659 /* CustomGPUImageFilterProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = E57AC36218618D8E00BDE659 /* CustomGPUImageFilterProvider.m */; };
+ E57AC39518618D8E00BDE659 /* GalleryViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E57AC36418618D8E00BDE659 /* GalleryViewController.m */; };
+ E57AC39718618D8E00BDE659 /* LibraryViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E57AC36718618D8E00BDE659 /* LibraryViewController.m */; };
+ E57AC39818618D8E00BDE659 /* PickerTestsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E57AC36918618D8E00BDE659 /* PickerTestsViewController.m */; };
+ E57AC39A18618D8E00BDE659 /* PresetFilterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E57AC36C18618D8E00BDE659 /* PresetFilterViewController.m */; };
+ E57AC39C18618D8E00BDE659 /* FA_Curves1.acv in Resources */ = {isa = PBXBuildFile; fileRef = E57AC36F18618D8E00BDE659 /* FA_Curves1.acv */; };
+ E57AC39D18618D8E00BDE659 /* FA_Curves2.acv in Resources */ = {isa = PBXBuildFile; fileRef = E57AC37018618D8E00BDE659 /* FA_Curves2.acv */; };
+ E57AC39E18618D8E00BDE659 /* FA_Curves3.acv in Resources */ = {isa = PBXBuildFile; fileRef = E57AC37118618D8E00BDE659 /* FA_Curves3.acv */; };
+ E57AC39F18618D8E00BDE659 /* frame.png in Resources */ = {isa = PBXBuildFile; fileRef = E57AC37218618D8E00BDE659 /* frame.png */; };
+ E57AC3A018618D8E00BDE659 /* Old.acv in Resources */ = {isa = PBXBuildFile; fileRef = E57AC37318618D8E00BDE659 /* Old.acv */; };
+ E57AC3A118618D8E00BDE659 /* photo.jpg in Resources */ = {isa = PBXBuildFile; fileRef = E57AC37418618D8E00BDE659 /* photo.jpg */; };
+ E57AC3A218618D8E00BDE659 /* photo_hires.jpg in Resources */ = {isa = PBXBuildFile; fileRef = E57AC37518618D8E00BDE659 /* photo_hires.jpg */; };
+ E57AC3A318618D8E00BDE659 /* RJ16.acv in Resources */ = {isa = PBXBuildFile; fileRef = E57AC37618618D8E00BDE659 /* RJ16.acv */; };
+ E57AC3A418618D8E00BDE659 /* RJ17.acv in Resources */ = {isa = PBXBuildFile; fileRef = E57AC37718618D8E00BDE659 /* RJ17.acv */; };
+ E57AC3A518618D8E00BDE659 /* RJ18.acv in Resources */ = {isa = PBXBuildFile; fileRef = E57AC37818618D8E00BDE659 /* RJ18.acv */; };
+ E57AC3A618618D8E00BDE659 /* RJ19.acv in Resources */ = {isa = PBXBuildFile; fileRef = E57AC37918618D8E00BDE659 /* RJ19.acv */; };
+ E57AC3A718618D8E00BDE659 /* RJ20.acv in Resources */ = {isa = PBXBuildFile; fileRef = E57AC37A18618D8E00BDE659 /* RJ20.acv */; };
+ E57AC3A818618D8E00BDE659 /* RJ21.acv in Resources */ = {isa = PBXBuildFile; fileRef = E57AC37B18618D8E00BDE659 /* RJ21.acv */; };
+ E57AC3A918618D8E00BDE659 /* RJ22.acv in Resources */ = {isa = PBXBuildFile; fileRef = E57AC37C18618D8E00BDE659 /* RJ22.acv */; };
+ E57AC3AA18618D8E00BDE659 /* RJ23.acv in Resources */ = {isa = PBXBuildFile; fileRef = E57AC37D18618D8E00BDE659 /* RJ23.acv */; };
+ E57AC3AB18618D8E00BDE659 /* RJ24.acv in Resources */ = {isa = PBXBuildFile; fileRef = E57AC37E18618D8E00BDE659 /* RJ24.acv */; };
+ E57AC3AC18618D8E00BDE659 /* RJ25.acv in Resources */ = {isa = PBXBuildFile; fileRef = E57AC37F18618D8E00BDE659 /* RJ25.acv */; };
+ E57AC3AD18618D8E00BDE659 /* RJ26.acv in Resources */ = {isa = PBXBuildFile; fileRef = E57AC38018618D8E00BDE659 /* RJ26.acv */; };
+ E57AC3AE18618D8E00BDE659 /* RJ27.acv in Resources */ = {isa = PBXBuildFile; fileRef = E57AC38118618D8E00BDE659 /* RJ27.acv */; };
+ E57AC3AF18618D8E00BDE659 /* RJ28.acv in Resources */ = {isa = PBXBuildFile; fileRef = E57AC38218618D8E00BDE659 /* RJ28.acv */; };
+ E57AC3B018618D8E00BDE659 /* RJ29.acv in Resources */ = {isa = PBXBuildFile; fileRef = E57AC38318618D8E00BDE659 /* RJ29.acv */; };
+ E57AC3B118618D8E00BDE659 /* RJ30.acv in Resources */ = {isa = PBXBuildFile; fileRef = E57AC38418618D8E00BDE659 /* RJ30.acv */; };
+ E57AC3B218618D8E00BDE659 /* Toy.acv in Resources */ = {isa = PBXBuildFile; fileRef = E57AC38518618D8E00BDE659 /* Toy.acv */; };
+ E58078D819FF9790008819CA /* AdjustFilterViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = E58078D719FF9790008819CA /* AdjustFilterViewController.xib */; };
+ E58DA585184339C100D60BBC /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E58DA584184339C100D60BBC /* Foundation.framework */; };
+ E58DA587184339C100D60BBC /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E58DA586184339C100D60BBC /* CoreGraphics.framework */; };
+ E58DA589184339C100D60BBC /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E58DA588184339C100D60BBC /* UIKit.framework */; };
+ E58DA58F184339C100D60BBC /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = E58DA58D184339C100D60BBC /* InfoPlist.strings */; };
+ E58DA591184339C100D60BBC /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = E58DA590184339C100D60BBC /* main.m */; };
+ E58DA595184339C100D60BBC /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = E58DA594184339C100D60BBC /* AppDelegate.m */; };
+ E58DA598184339C100D60BBC /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E58DA596184339C100D60BBC /* Main.storyboard */; };
+ E58DA5A3184339C100D60BBC /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E58DA5A2184339C100D60BBC /* Images.xcassets */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ DFCD1015AE6F4C97AFDB8962 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ E57AC34F18618D8E00BDE659 /* AdjustFilterButtonCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AdjustFilterButtonCell.xib; sourceTree = ""; };
+ E57AC35018618D8E00BDE659 /* AdjustFilterSliderCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AdjustFilterSliderCell.xib; sourceTree = ""; };
+ E57AC35118618D8E00BDE659 /* AdjustFilterSwitchCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AdjustFilterSwitchCell.xib; sourceTree = ""; };
+ E57AC35218618D8E00BDE659 /* AdjustFilterTitleCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AdjustFilterTitleCell.xib; sourceTree = ""; };
+ E57AC35318618D8E00BDE659 /* AdjustFilterViewController_iPad.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AdjustFilterViewController_iPad.xib; sourceTree = ""; };
+ E57AC35418618D8E00BDE659 /* AdjustFilterViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AdjustFilterViewController.h; sourceTree = ""; };
+ E57AC35518618D8E00BDE659 /* AdjustFilterViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AdjustFilterViewController.m; sourceTree = ""; };
+ E57AC35718618D8E00BDE659 /* AssetsGroupViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AssetsGroupViewController.h; sourceTree = ""; };
+ E57AC35818618D8E00BDE659 /* AssetsGroupViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AssetsGroupViewController.m; sourceTree = ""; };
+ E57AC35918618D8E00BDE659 /* CameraViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CameraViewController.h; sourceTree = ""; };
+ E57AC35A18618D8E00BDE659 /* CameraViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CameraViewController.m; sourceTree = ""; };
+ E57AC35C18618D8E00BDE659 /* CropViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CropViewController.h; sourceTree = ""; };
+ E57AC35D18618D8E00BDE659 /* CropViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CropViewController.m; sourceTree = ""; };
+ E57AC35F18618D8E00BDE659 /* CustomAssetsGroupView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CustomAssetsGroupView.xib; sourceTree = ""; };
+ E57AC36018618D8E00BDE659 /* CustomAssetThumbnailView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CustomAssetThumbnailView.xib; sourceTree = ""; };
+ E57AC36118618D8E00BDE659 /* CustomGPUImageFilterProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomGPUImageFilterProvider.h; sourceTree = ""; };
+ E57AC36218618D8E00BDE659 /* CustomGPUImageFilterProvider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomGPUImageFilterProvider.m; sourceTree = ""; };
+ E57AC36318618D8E00BDE659 /* GalleryViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GalleryViewController.h; sourceTree = ""; };
+ E57AC36418618D8E00BDE659 /* GalleryViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GalleryViewController.m; sourceTree = ""; };
+ E57AC36618618D8E00BDE659 /* LibraryViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LibraryViewController.h; sourceTree = ""; };
+ E57AC36718618D8E00BDE659 /* LibraryViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LibraryViewController.m; sourceTree = ""; };
+ E57AC36818618D8E00BDE659 /* PickerTestsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PickerTestsViewController.h; sourceTree = ""; };
+ E57AC36918618D8E00BDE659 /* PickerTestsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PickerTestsViewController.m; sourceTree = ""; };
+ E57AC36B18618D8E00BDE659 /* PresetFilterViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PresetFilterViewController.h; sourceTree = ""; };
+ E57AC36C18618D8E00BDE659 /* PresetFilterViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PresetFilterViewController.m; sourceTree = ""; };
+ E57AC36F18618D8E00BDE659 /* FA_Curves1.acv */ = {isa = PBXFileReference; lastKnownFileType = file; path = FA_Curves1.acv; sourceTree = ""; };
+ E57AC37018618D8E00BDE659 /* FA_Curves2.acv */ = {isa = PBXFileReference; lastKnownFileType = file; path = FA_Curves2.acv; sourceTree = ""; };
+ E57AC37118618D8E00BDE659 /* FA_Curves3.acv */ = {isa = PBXFileReference; lastKnownFileType = file; path = FA_Curves3.acv; sourceTree = ""; };
+ E57AC37218618D8E00BDE659 /* frame.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = frame.png; sourceTree = ""; };
+ E57AC37318618D8E00BDE659 /* Old.acv */ = {isa = PBXFileReference; lastKnownFileType = file; path = Old.acv; sourceTree = ""; };
+ E57AC37418618D8E00BDE659 /* photo.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = photo.jpg; sourceTree = ""; };
+ E57AC37518618D8E00BDE659 /* photo_hires.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = photo_hires.jpg; sourceTree = ""; };
+ E57AC37618618D8E00BDE659 /* RJ16.acv */ = {isa = PBXFileReference; lastKnownFileType = file; path = RJ16.acv; sourceTree = ""; };
+ E57AC37718618D8E00BDE659 /* RJ17.acv */ = {isa = PBXFileReference; lastKnownFileType = file; path = RJ17.acv; sourceTree = ""; };
+ E57AC37818618D8E00BDE659 /* RJ18.acv */ = {isa = PBXFileReference; lastKnownFileType = file; path = RJ18.acv; sourceTree = ""; };
+ E57AC37918618D8E00BDE659 /* RJ19.acv */ = {isa = PBXFileReference; lastKnownFileType = file; path = RJ19.acv; sourceTree = ""; };
+ E57AC37A18618D8E00BDE659 /* RJ20.acv */ = {isa = PBXFileReference; lastKnownFileType = file; path = RJ20.acv; sourceTree = ""; };
+ E57AC37B18618D8E00BDE659 /* RJ21.acv */ = {isa = PBXFileReference; lastKnownFileType = file; path = RJ21.acv; sourceTree = ""; };
+ E57AC37C18618D8E00BDE659 /* RJ22.acv */ = {isa = PBXFileReference; lastKnownFileType = file; path = RJ22.acv; sourceTree = ""; };
+ E57AC37D18618D8E00BDE659 /* RJ23.acv */ = {isa = PBXFileReference; lastKnownFileType = file; path = RJ23.acv; sourceTree = ""; };
+ E57AC37E18618D8E00BDE659 /* RJ24.acv */ = {isa = PBXFileReference; lastKnownFileType = file; path = RJ24.acv; sourceTree = ""; };
+ E57AC37F18618D8E00BDE659 /* RJ25.acv */ = {isa = PBXFileReference; lastKnownFileType = file; path = RJ25.acv; sourceTree = ""; };
+ E57AC38018618D8E00BDE659 /* RJ26.acv */ = {isa = PBXFileReference; lastKnownFileType = file; path = RJ26.acv; sourceTree = ""; };
+ E57AC38118618D8E00BDE659 /* RJ27.acv */ = {isa = PBXFileReference; lastKnownFileType = file; path = RJ27.acv; sourceTree = ""; };
+ E57AC38218618D8E00BDE659 /* RJ28.acv */ = {isa = PBXFileReference; lastKnownFileType = file; path = RJ28.acv; sourceTree = ""; };
+ E57AC38318618D8E00BDE659 /* RJ29.acv */ = {isa = PBXFileReference; lastKnownFileType = file; path = RJ29.acv; sourceTree = ""; };
+ E57AC38418618D8E00BDE659 /* RJ30.acv */ = {isa = PBXFileReference; lastKnownFileType = file; path = RJ30.acv; sourceTree = ""; };
+ E57AC38518618D8E00BDE659 /* Toy.acv */ = {isa = PBXFileReference; lastKnownFileType = file; path = Toy.acv; sourceTree = ""; };
+ E57FDDF519CAC50A0011B4E5 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/InfoPlist.strings; sourceTree = ""; };
+ E58078D719FF9790008819CA /* AdjustFilterViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AdjustFilterViewController.xib; sourceTree = ""; };
+ E58DA581184339C100D60BBC /* PickerDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PickerDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ E58DA584184339C100D60BBC /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+ E58DA586184339C100D60BBC /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
+ E58DA588184339C100D60BBC /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
+ E58DA58C184339C100D60BBC /* PickerDemo-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "PickerDemo-Info.plist"; sourceTree = ""; };
+ E58DA58E184339C100D60BBC /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; };
+ E58DA590184339C100D60BBC /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; };
+ E58DA592184339C100D60BBC /* PickerDemo-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "PickerDemo-Prefix.pch"; sourceTree = ""; };
+ E58DA593184339C100D60BBC /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; };
+ E58DA594184339C100D60BBC /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; };
+ E58DA5A2184339C100D60BBC /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; };
+ E58DA5A9184339C100D60BBC /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };
+ E58DA5BF18433FA900D60BBC /* en */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = en; path = en.lproj/Main.storyboard; sourceTree = ""; };
+ EBDDA42323D60D362D548DDD /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = ""; };
+ F4561B72539D02C0EFDD6055 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ E58DA57E184339C100D60BBC /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ E58DA587184339C100D60BBC /* CoreGraphics.framework in Frameworks */,
+ E58DA589184339C100D60BBC /* UIKit.framework in Frameworks */,
+ E58DA585184339C100D60BBC /* Foundation.framework in Frameworks */,
+ C19A4A91A703473FBB359763 /* libPods.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 2BD5EDB130050A97241322AE /* Pods */ = {
+ isa = PBXGroup;
+ children = (
+ F4561B72539D02C0EFDD6055 /* Pods.debug.xcconfig */,
+ EBDDA42323D60D362D548DDD /* Pods.release.xcconfig */,
+ );
+ name = Pods;
+ sourceTree = "";
+ };
+ E57AC36E18618D8E00BDE659 /* Resources */ = {
+ isa = PBXGroup;
+ children = (
+ E57AC37218618D8E00BDE659 /* frame.png */,
+ E57AC37418618D8E00BDE659 /* photo.jpg */,
+ E57AC37518618D8E00BDE659 /* photo_hires.jpg */,
+ E57AC36F18618D8E00BDE659 /* FA_Curves1.acv */,
+ E57AC37018618D8E00BDE659 /* FA_Curves2.acv */,
+ E57AC37118618D8E00BDE659 /* FA_Curves3.acv */,
+ E57AC37318618D8E00BDE659 /* Old.acv */,
+ E57AC37618618D8E00BDE659 /* RJ16.acv */,
+ E57AC37718618D8E00BDE659 /* RJ17.acv */,
+ E57AC37818618D8E00BDE659 /* RJ18.acv */,
+ E57AC37918618D8E00BDE659 /* RJ19.acv */,
+ E57AC37A18618D8E00BDE659 /* RJ20.acv */,
+ E57AC37B18618D8E00BDE659 /* RJ21.acv */,
+ E57AC37C18618D8E00BDE659 /* RJ22.acv */,
+ E57AC37D18618D8E00BDE659 /* RJ23.acv */,
+ E57AC37E18618D8E00BDE659 /* RJ24.acv */,
+ E57AC37F18618D8E00BDE659 /* RJ25.acv */,
+ E57AC38018618D8E00BDE659 /* RJ26.acv */,
+ E57AC38118618D8E00BDE659 /* RJ27.acv */,
+ E57AC38218618D8E00BDE659 /* RJ28.acv */,
+ E57AC38318618D8E00BDE659 /* RJ29.acv */,
+ E57AC38418618D8E00BDE659 /* RJ30.acv */,
+ E57AC38518618D8E00BDE659 /* Toy.acv */,
+ );
+ path = Resources;
+ sourceTree = "";
+ };
+ E58DA578184339C100D60BBC = {
+ isa = PBXGroup;
+ children = (
+ E58DA58A184339C100D60BBC /* PickerDemo */,
+ E58DA583184339C100D60BBC /* Frameworks */,
+ E58DA582184339C100D60BBC /* Products */,
+ 2BD5EDB130050A97241322AE /* Pods */,
+ );
+ sourceTree = "";
+ };
+ E58DA582184339C100D60BBC /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ E58DA581184339C100D60BBC /* PickerDemo.app */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ E58DA583184339C100D60BBC /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ E58DA584184339C100D60BBC /* Foundation.framework */,
+ E58DA586184339C100D60BBC /* CoreGraphics.framework */,
+ E58DA588184339C100D60BBC /* UIKit.framework */,
+ E58DA5A9184339C100D60BBC /* XCTest.framework */,
+ DFCD1015AE6F4C97AFDB8962 /* libPods.a */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+ E58DA58A184339C100D60BBC /* PickerDemo */ = {
+ isa = PBXGroup;
+ children = (
+ E58DA593184339C100D60BBC /* AppDelegate.h */,
+ E58DA594184339C100D60BBC /* AppDelegate.m */,
+ E58DA596184339C100D60BBC /* Main.storyboard */,
+ E5CB26B418641B67004C16D3 /* Picker */,
+ E5CB26B518641B78004C16D3 /* Assets */,
+ E5CB26B618641B81004C16D3 /* Camera */,
+ E5CB26BA18641BD9004C16D3 /* Filters */,
+ E5CB26B918641BB7004C16D3 /* Filter Editor */,
+ E5CB26B818641BA7004C16D3 /* Gallery */,
+ E5CB26B718641B9B004C16D3 /* Crop */,
+ E58DA5A2184339C100D60BBC /* Images.xcassets */,
+ E57AC36E18618D8E00BDE659 /* Resources */,
+ E58DA58B184339C100D60BBC /* Supporting Files */,
+ );
+ path = PickerDemo;
+ sourceTree = "";
+ };
+ E58DA58B184339C100D60BBC /* Supporting Files */ = {
+ isa = PBXGroup;
+ children = (
+ E58DA58C184339C100D60BBC /* PickerDemo-Info.plist */,
+ E58DA58D184339C100D60BBC /* InfoPlist.strings */,
+ E58DA590184339C100D60BBC /* main.m */,
+ E58DA592184339C100D60BBC /* PickerDemo-Prefix.pch */,
+ );
+ name = "Supporting Files";
+ sourceTree = "";
+ };
+ E5CB26B418641B67004C16D3 /* Picker */ = {
+ isa = PBXGroup;
+ children = (
+ E57AC36818618D8E00BDE659 /* PickerTestsViewController.h */,
+ E57AC36918618D8E00BDE659 /* PickerTestsViewController.m */,
+ );
+ name = Picker;
+ sourceTree = "";
+ };
+ E5CB26B518641B78004C16D3 /* Assets */ = {
+ isa = PBXGroup;
+ children = (
+ E57AC36618618D8E00BDE659 /* LibraryViewController.h */,
+ E57AC36718618D8E00BDE659 /* LibraryViewController.m */,
+ E57AC35718618D8E00BDE659 /* AssetsGroupViewController.h */,
+ E57AC35818618D8E00BDE659 /* AssetsGroupViewController.m */,
+ E57AC35F18618D8E00BDE659 /* CustomAssetsGroupView.xib */,
+ E57AC36018618D8E00BDE659 /* CustomAssetThumbnailView.xib */,
+ );
+ name = Assets;
+ sourceTree = "";
+ };
+ E5CB26B618641B81004C16D3 /* Camera */ = {
+ isa = PBXGroup;
+ children = (
+ E57AC35918618D8E00BDE659 /* CameraViewController.h */,
+ E57AC35A18618D8E00BDE659 /* CameraViewController.m */,
+ );
+ name = Camera;
+ sourceTree = "";
+ };
+ E5CB26B718641B9B004C16D3 /* Crop */ = {
+ isa = PBXGroup;
+ children = (
+ E57AC35C18618D8E00BDE659 /* CropViewController.h */,
+ E57AC35D18618D8E00BDE659 /* CropViewController.m */,
+ );
+ name = Crop;
+ sourceTree = "";
+ };
+ E5CB26B818641BA7004C16D3 /* Gallery */ = {
+ isa = PBXGroup;
+ children = (
+ E57AC36318618D8E00BDE659 /* GalleryViewController.h */,
+ E57AC36418618D8E00BDE659 /* GalleryViewController.m */,
+ );
+ name = Gallery;
+ sourceTree = "";
+ };
+ E5CB26B918641BB7004C16D3 /* Filter Editor */ = {
+ isa = PBXGroup;
+ children = (
+ E57AC35418618D8E00BDE659 /* AdjustFilterViewController.h */,
+ E57AC35518618D8E00BDE659 /* AdjustFilterViewController.m */,
+ E58078D719FF9790008819CA /* AdjustFilterViewController.xib */,
+ E57AC35318618D8E00BDE659 /* AdjustFilterViewController_iPad.xib */,
+ E57AC34F18618D8E00BDE659 /* AdjustFilterButtonCell.xib */,
+ E57AC35018618D8E00BDE659 /* AdjustFilterSliderCell.xib */,
+ E57AC35118618D8E00BDE659 /* AdjustFilterSwitchCell.xib */,
+ E57AC35218618D8E00BDE659 /* AdjustFilterTitleCell.xib */,
+ );
+ name = "Filter Editor";
+ sourceTree = "";
+ };
+ E5CB26BA18641BD9004C16D3 /* Filters */ = {
+ isa = PBXGroup;
+ children = (
+ E57AC36118618D8E00BDE659 /* CustomGPUImageFilterProvider.h */,
+ E57AC36218618D8E00BDE659 /* CustomGPUImageFilterProvider.m */,
+ E57AC36B18618D8E00BDE659 /* PresetFilterViewController.h */,
+ E57AC36C18618D8E00BDE659 /* PresetFilterViewController.m */,
+ );
+ name = Filters;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ E58DA580184339C100D60BBC /* PickerDemo */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = E58DA5B9184339C100D60BBC /* Build configuration list for PBXNativeTarget "PickerDemo" */;
+ buildPhases = (
+ 97D1299EDB164AF58B312BD8 /* Check Pods Manifest.lock */,
+ E58DA57D184339C100D60BBC /* Sources */,
+ E58DA57E184339C100D60BBC /* Frameworks */,
+ E58DA57F184339C100D60BBC /* Resources */,
+ DA7F503918FC4D90A421B067 /* Copy Pods Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = PickerDemo;
+ productName = PickerDemo;
+ productReference = E58DA581184339C100D60BBC /* PickerDemo.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ E58DA579184339C100D60BBC /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 0510;
+ ORGANIZATIONNAME = "CyberAgent Inc.";
+ TargetAttributes = {
+ E58DA580184339C100D60BBC = {
+ DevelopmentTeam = G7FH63PE76;
+ };
+ };
+ };
+ buildConfigurationList = E58DA57C184339C100D60BBC /* Build configuration list for PBXProject "PickerDemo" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = English;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ ja,
+ );
+ mainGroup = E58DA578184339C100D60BBC;
+ productRefGroup = E58DA582184339C100D60BBC /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ E58DA580184339C100D60BBC /* PickerDemo */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ E58DA57F184339C100D60BBC /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ E57AC39218618D8E00BDE659 /* CustomAssetsGroupView.xib in Resources */,
+ E57AC3B118618D8E00BDE659 /* RJ30.acv in Resources */,
+ E57AC3A718618D8E00BDE659 /* RJ20.acv in Resources */,
+ E57AC39D18618D8E00BDE659 /* FA_Curves2.acv in Resources */,
+ E57AC3AC18618D8E00BDE659 /* RJ25.acv in Resources */,
+ E57AC3A418618D8E00BDE659 /* RJ17.acv in Resources */,
+ E57AC39F18618D8E00BDE659 /* frame.png in Resources */,
+ E57AC3A518618D8E00BDE659 /* RJ18.acv in Resources */,
+ E57AC38818618D8E00BDE659 /* AdjustFilterSwitchCell.xib in Resources */,
+ E57AC3AD18618D8E00BDE659 /* RJ26.acv in Resources */,
+ E57AC3A218618D8E00BDE659 /* photo_hires.jpg in Resources */,
+ E57AC38A18618D8E00BDE659 /* AdjustFilterViewController_iPad.xib in Resources */,
+ E57AC38718618D8E00BDE659 /* AdjustFilterSliderCell.xib in Resources */,
+ E57AC3A618618D8E00BDE659 /* RJ19.acv in Resources */,
+ E57AC3B218618D8E00BDE659 /* Toy.acv in Resources */,
+ E57AC3A118618D8E00BDE659 /* photo.jpg in Resources */,
+ E57AC3AA18618D8E00BDE659 /* RJ23.acv in Resources */,
+ E57AC38918618D8E00BDE659 /* AdjustFilterTitleCell.xib in Resources */,
+ E57AC3AB18618D8E00BDE659 /* RJ24.acv in Resources */,
+ E57AC38618618D8E00BDE659 /* AdjustFilterButtonCell.xib in Resources */,
+ E57AC3AF18618D8E00BDE659 /* RJ28.acv in Resources */,
+ E58078D819FF9790008819CA /* AdjustFilterViewController.xib in Resources */,
+ E57AC3A018618D8E00BDE659 /* Old.acv in Resources */,
+ E57AC3AE18618D8E00BDE659 /* RJ27.acv in Resources */,
+ E58DA5A3184339C100D60BBC /* Images.xcassets in Resources */,
+ E58DA598184339C100D60BBC /* Main.storyboard in Resources */,
+ E58DA58F184339C100D60BBC /* InfoPlist.strings in Resources */,
+ E57AC3A318618D8E00BDE659 /* RJ16.acv in Resources */,
+ E57AC39C18618D8E00BDE659 /* FA_Curves1.acv in Resources */,
+ E57AC39E18618D8E00BDE659 /* FA_Curves3.acv in Resources */,
+ E57AC39318618D8E00BDE659 /* CustomAssetThumbnailView.xib in Resources */,
+ E57AC3A818618D8E00BDE659 /* RJ21.acv in Resources */,
+ E57AC3A918618D8E00BDE659 /* RJ22.acv in Resources */,
+ E57AC3B018618D8E00BDE659 /* RJ29.acv in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 97D1299EDB164AF58B312BD8 /* Check Pods Manifest.lock */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Check Pods Manifest.lock";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n";
+ showEnvVarsInLog = 0;
+ };
+ DA7F503918FC4D90A421B067 /* Copy Pods Resources */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Copy Pods Resources";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ E58DA57D184339C100D60BBC /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ E57AC38E18618D8E00BDE659 /* CameraViewController.m in Sources */,
+ E57AC39518618D8E00BDE659 /* GalleryViewController.m in Sources */,
+ E57AC39818618D8E00BDE659 /* PickerTestsViewController.m in Sources */,
+ E58DA595184339C100D60BBC /* AppDelegate.m in Sources */,
+ E57AC39A18618D8E00BDE659 /* PresetFilterViewController.m in Sources */,
+ E57AC39718618D8E00BDE659 /* LibraryViewController.m in Sources */,
+ E57AC38D18618D8E00BDE659 /* AssetsGroupViewController.m in Sources */,
+ E58DA591184339C100D60BBC /* main.m in Sources */,
+ E57AC39018618D8E00BDE659 /* CropViewController.m in Sources */,
+ E57AC38B18618D8E00BDE659 /* AdjustFilterViewController.m in Sources */,
+ E57AC39418618D8E00BDE659 /* CustomGPUImageFilterProvider.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ E58DA58D184339C100D60BBC /* InfoPlist.strings */ = {
+ isa = PBXVariantGroup;
+ children = (
+ E58DA58E184339C100D60BBC /* en */,
+ E57FDDF519CAC50A0011B4E5 /* ja */,
+ );
+ name = InfoPlist.strings;
+ sourceTree = "";
+ };
+ E58DA596184339C100D60BBC /* Main.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ E58DA5BF18433FA900D60BBC /* en */,
+ );
+ name = Main.storyboard;
+ sourceTree = "";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ E58DA5B7184339C100D60BBC /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 5.0;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ E58DA5B8184339C100D60BBC /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
+ COPY_PHASE_STRIP = YES;
+ ENABLE_NS_ASSERTIONS = NO;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 5.0;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ E58DA5BA184339C100D60BBC /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = F4561B72539D02C0EFDD6055 /* Pods.debug.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: Ernesto Rivera (486KPGRDM4)";
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "PickerDemo/PickerDemo-Prefix.pch";
+ INFOPLIST_FILE = "PickerDemo/PickerDemo-Info.plist";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ PROVISIONING_PROFILE = "";
+ WRAPPER_EXTENSION = app;
+ };
+ name = Debug;
+ };
+ E58DA5BB184339C100D60BBC /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = EBDDA42323D60D362D548DDD /* Pods.release.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "PickerDemo/PickerDemo-Prefix.pch";
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(inherited)",
+ "TESTING=1",
+ );
+ INFOPLIST_FILE = "PickerDemo/PickerDemo-Info.plist";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ PROVISIONING_PROFILE = "";
+ WRAPPER_EXTENSION = app;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ E58DA57C184339C100D60BBC /* Build configuration list for PBXProject "PickerDemo" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ E58DA5B7184339C100D60BBC /* Debug */,
+ E58DA5B8184339C100D60BBC /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ E58DA5B9184339C100D60BBC /* Build configuration list for PBXNativeTarget "PickerDemo" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ E58DA5BA184339C100D60BBC /* Debug */,
+ E58DA5BB184339C100D60BBC /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = E58DA579184339C100D60BBC /* Project object */;
+}
diff --git a/Demo/PickerDemo/AdjustFilterButtonCell.xib b/Demo/PickerDemo/AdjustFilterButtonCell.xib
index e9a29b6..31a7087 100644
--- a/Demo/PickerDemo/AdjustFilterButtonCell.xib
+++ b/Demo/PickerDemo/AdjustFilterButtonCell.xib
@@ -1,8 +1,9 @@
-
+
+
-
+
diff --git a/Demo/PickerDemo/AdjustFilterSliderCell.xib b/Demo/PickerDemo/AdjustFilterSliderCell.xib
index fef05da..5ca2345 100644
--- a/Demo/PickerDemo/AdjustFilterSliderCell.xib
+++ b/Demo/PickerDemo/AdjustFilterSliderCell.xib
@@ -1,8 +1,9 @@
-
+
+
-
+
diff --git a/Demo/PickerDemo/AdjustFilterSwitchCell.xib b/Demo/PickerDemo/AdjustFilterSwitchCell.xib
index 71f18cd..df0689b 100644
--- a/Demo/PickerDemo/AdjustFilterSwitchCell.xib
+++ b/Demo/PickerDemo/AdjustFilterSwitchCell.xib
@@ -1,8 +1,9 @@
-
+
+
-
+
diff --git a/Demo/PickerDemo/AdjustFilterTitleCell.xib b/Demo/PickerDemo/AdjustFilterTitleCell.xib
index 6609d5c..ac3ca23 100644
--- a/Demo/PickerDemo/AdjustFilterTitleCell.xib
+++ b/Demo/PickerDemo/AdjustFilterTitleCell.xib
@@ -1,8 +1,9 @@
-
+
+
-
+
diff --git a/Demo/PickerDemo/AdjustFilterViewController.m b/Demo/PickerDemo/AdjustFilterViewController.m
index e0956c2..a9145c9 100644
--- a/Demo/PickerDemo/AdjustFilterViewController.m
+++ b/Demo/PickerDemo/AdjustFilterViewController.m
@@ -32,8 +32,11 @@ @implementation AdjustFilterViewController
+ (void)initialize
{
- // Register our custom provider
- [NBUFilterProvider addProvider:[CustomGPUImageFilterProvider class]];
+ if (self == [AdjustFilterViewController class])
+ {
+ // Register our custom provider
+ [NBUFilterProvider addProvider:[CustomGPUImageFilterProvider class]];
+ }
}
- (void)loadView
diff --git a/Demo/PickerDemo/AdjustFilterViewController.xib b/Demo/PickerDemo/AdjustFilterViewController.xib
index 5c35692..4e6be68 100644
--- a/Demo/PickerDemo/AdjustFilterViewController.xib
+++ b/Demo/PickerDemo/AdjustFilterViewController.xib
@@ -1,8 +1,9 @@
-
+
+
-
+
diff --git a/Demo/PickerDemo/AdjustFilterViewController_iPad.xib b/Demo/PickerDemo/AdjustFilterViewController_iPad.xib
index 6a71d48..8928e3a 100644
--- a/Demo/PickerDemo/AdjustFilterViewController_iPad.xib
+++ b/Demo/PickerDemo/AdjustFilterViewController_iPad.xib
@@ -1,8 +1,9 @@
-
+
+
-
+
diff --git a/Demo/PickerDemo/AssetsGroupViewController.m b/Demo/PickerDemo/AssetsGroupViewController.m
index f2cd5cf..1c111ee 100644
--- a/Demo/PickerDemo/AssetsGroupViewController.m
+++ b/Demo/PickerDemo/AssetsGroupViewController.m
@@ -32,7 +32,7 @@ - (void)viewDidLoad
// Add a next (continue) button
_nextButton = [[UIBarButtonItem alloc] initWithTitle:@"Next"
- style:UIBarButtonItemStyleBordered
+ style:UIBarButtonItemStylePlain
target:self
action:@selector(pushSlideView:)];
self.navigationItem.rightBarButtonItem = _nextButton;
diff --git a/Demo/PickerDemo/Images.xcassets/AppIcon.appiconset/Contents.json b/Demo/PickerDemo/Images.xcassets/AppIcon.appiconset/Contents.json
index 7062090..da6c33c 100644
--- a/Demo/PickerDemo/Images.xcassets/AppIcon.appiconset/Contents.json
+++ b/Demo/PickerDemo/Images.xcassets/AppIcon.appiconset/Contents.json
@@ -12,12 +12,24 @@
"filename" : "Icon-Small@2x-1.png",
"scale" : "2x"
},
+ {
+ "size" : "29x29",
+ "idiom" : "iphone",
+ "filename" : "logo-1-1.png",
+ "scale" : "3x"
+ },
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "Icon-40@2x-1.png",
"scale" : "2x"
},
+ {
+ "size" : "40x40",
+ "idiom" : "iphone",
+ "filename" : "logo-1.png",
+ "scale" : "3x"
+ },
{
"size" : "57x57",
"idiom" : "iphone",
@@ -36,6 +48,12 @@
"filename" : "Icon-60@2x.png",
"scale" : "2x"
},
+ {
+ "size" : "60x60",
+ "idiom" : "iphone",
+ "filename" : "logo.png",
+ "scale" : "3x"
+ },
{
"size" : "29x29",
"idiom" : "ipad",
diff --git a/Demo/PickerDemo/Images.xcassets/AppIcon.appiconset/logo-1-1.png b/Demo/PickerDemo/Images.xcassets/AppIcon.appiconset/logo-1-1.png
new file mode 100644
index 0000000..bf5cd18
Binary files /dev/null and b/Demo/PickerDemo/Images.xcassets/AppIcon.appiconset/logo-1-1.png differ
diff --git a/Demo/PickerDemo/Images.xcassets/AppIcon.appiconset/logo-1.png b/Demo/PickerDemo/Images.xcassets/AppIcon.appiconset/logo-1.png
new file mode 100644
index 0000000..bd7ee3f
Binary files /dev/null and b/Demo/PickerDemo/Images.xcassets/AppIcon.appiconset/logo-1.png differ
diff --git a/Demo/PickerDemo/Images.xcassets/AppIcon.appiconset/logo.png b/Demo/PickerDemo/Images.xcassets/AppIcon.appiconset/logo.png
new file mode 100644
index 0000000..8ef0c2a
Binary files /dev/null and b/Demo/PickerDemo/Images.xcassets/AppIcon.appiconset/logo.png differ
diff --git a/Demo/PickerDemo/Images.xcassets/LaunchImage.launchimage/Contents.json b/Demo/PickerDemo/Images.xcassets/LaunchImage.launchimage/Contents.json
index 3f074b2..c2b2de6 100644
--- a/Demo/PickerDemo/Images.xcassets/LaunchImage.launchimage/Contents.json
+++ b/Demo/PickerDemo/Images.xcassets/LaunchImage.launchimage/Contents.json
@@ -1,48 +1,38 @@
{
"images" : [
{
- "orientation" : "portrait",
- "idiom" : "iphone",
"extent" : "full-screen",
- "minimum-system-version" : "7.0",
- "filename" : "名称未設定 2-1.png",
- "scale" : "2x"
+ "idiom" : "iphone",
+ "subtype" : "736h",
+ "filename" : "名称未設定 2-3.png",
+ "minimum-system-version" : "8.0",
+ "orientation" : "portrait",
+ "scale" : "3x"
},
{
"extent" : "full-screen",
"idiom" : "iphone",
- "subtype" : "retina4",
- "filename" : "名称未設定 2.png",
- "minimum-system-version" : "7.0",
+ "subtype" : "667h",
+ "filename" : "名称未設定 2-4.png",
+ "minimum-system-version" : "8.0",
"orientation" : "portrait",
"scale" : "2x"
},
{
"orientation" : "portrait",
- "idiom" : "ipad",
- "extent" : "full-screen",
- "minimum-system-version" : "7.0",
- "scale" : "1x"
- },
- {
- "orientation" : "landscape",
- "idiom" : "ipad",
- "extent" : "full-screen",
- "minimum-system-version" : "7.0",
- "scale" : "1x"
- },
- {
- "orientation" : "portrait",
- "idiom" : "ipad",
+ "idiom" : "iphone",
"extent" : "full-screen",
"minimum-system-version" : "7.0",
+ "filename" : "名称未設定 2-1.png",
"scale" : "2x"
},
{
- "orientation" : "landscape",
- "idiom" : "ipad",
"extent" : "full-screen",
+ "idiom" : "iphone",
+ "subtype" : "retina4",
+ "filename" : "名称未設定 2.png",
"minimum-system-version" : "7.0",
+ "orientation" : "portrait",
"scale" : "2x"
},
{
@@ -66,54 +56,6 @@
"filename" : "名称未設定 2-2.png",
"subtype" : "retina4",
"scale" : "2x"
- },
- {
- "orientation" : "portrait",
- "idiom" : "ipad",
- "extent" : "to-status-bar",
- "scale" : "1x"
- },
- {
- "orientation" : "portrait",
- "idiom" : "ipad",
- "extent" : "full-screen",
- "scale" : "1x"
- },
- {
- "orientation" : "landscape",
- "idiom" : "ipad",
- "extent" : "to-status-bar",
- "scale" : "1x"
- },
- {
- "orientation" : "landscape",
- "idiom" : "ipad",
- "extent" : "full-screen",
- "scale" : "1x"
- },
- {
- "orientation" : "portrait",
- "idiom" : "ipad",
- "extent" : "to-status-bar",
- "scale" : "2x"
- },
- {
- "orientation" : "portrait",
- "idiom" : "ipad",
- "extent" : "full-screen",
- "scale" : "2x"
- },
- {
- "orientation" : "landscape",
- "idiom" : "ipad",
- "extent" : "to-status-bar",
- "scale" : "2x"
- },
- {
- "orientation" : "landscape",
- "idiom" : "ipad",
- "extent" : "full-screen",
- "scale" : "2x"
}
],
"info" : {
diff --git "a/Demo/PickerDemo/Images.xcassets/LaunchImage.launchimage/\345\220\215\347\247\260\346\234\252\350\250\255\345\256\232 2-3.png" "b/Demo/PickerDemo/Images.xcassets/LaunchImage.launchimage/\345\220\215\347\247\260\346\234\252\350\250\255\345\256\232 2-3.png"
new file mode 100644
index 0000000..b1a0178
Binary files /dev/null and "b/Demo/PickerDemo/Images.xcassets/LaunchImage.launchimage/\345\220\215\347\247\260\346\234\252\350\250\255\345\256\232 2-3.png" differ
diff --git "a/Demo/PickerDemo/Images.xcassets/LaunchImage.launchimage/\345\220\215\347\247\260\346\234\252\350\250\255\345\256\232 2-4.png" "b/Demo/PickerDemo/Images.xcassets/LaunchImage.launchimage/\345\220\215\347\247\260\346\234\252\350\250\255\345\256\232 2-4.png"
new file mode 100644
index 0000000..6f048bc
Binary files /dev/null and "b/Demo/PickerDemo/Images.xcassets/LaunchImage.launchimage/\345\220\215\347\247\260\346\234\252\350\250\255\345\256\232 2-4.png" differ
diff --git a/Demo/PickerDemo/Images.xcassets/first.imageset/Contents.json b/Demo/PickerDemo/Images.xcassets/first.imageset/Contents.json
index a345b09..4fbe64d 100644
--- a/Demo/PickerDemo/Images.xcassets/first.imageset/Contents.json
+++ b/Demo/PickerDemo/Images.xcassets/first.imageset/Contents.json
@@ -9,6 +9,10 @@
"idiom" : "universal",
"scale" : "2x",
"filename" : "first@2x.png"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
}
],
"info" : {
diff --git a/Demo/PickerDemo/Images.xcassets/second.imageset/Contents.json b/Demo/PickerDemo/Images.xcassets/second.imageset/Contents.json
index 2136402..36cbb1d 100644
--- a/Demo/PickerDemo/Images.xcassets/second.imageset/Contents.json
+++ b/Demo/PickerDemo/Images.xcassets/second.imageset/Contents.json
@@ -9,6 +9,10 @@
"idiom" : "universal",
"scale" : "2x",
"filename" : "second@2x.png"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
}
],
"info" : {
diff --git a/Demo/PickerDemo/LibraryViewController.h b/Demo/PickerDemo/LibraryViewController.h
index 303676d..7e5c5c1 100644
--- a/Demo/PickerDemo/LibraryViewController.h
+++ b/Demo/PickerDemo/LibraryViewController.h
@@ -18,6 +18,8 @@
// limitations under the License.
//
+#import
+
@interface LibraryViewController : NBUAssetsLibraryViewController
// Actions
diff --git a/Demo/PickerDemo/LibraryViewController.m b/Demo/PickerDemo/LibraryViewController.m
index 1ffb375..6949628 100644
--- a/Demo/PickerDemo/LibraryViewController.m
+++ b/Demo/PickerDemo/LibraryViewController.m
@@ -25,9 +25,12 @@ @implementation LibraryViewController
+(void)initialize
{
- // Register our custom directory albums
- [[NBUAssetsLibrary sharedLibrary] registerDirectoryGroupforURL:[UIApplication sharedApplication].documentsDirectory
- name:@"App's Documents directory"];
+ if (self == [LibraryViewController class])
+ {
+ // Register our custom directory albums
+ [[NBUAssetsLibrary sharedLibrary] registerDirectoryGroupforURL:[UIApplication sharedApplication].documentsDirectory
+ name:@"App's Documents directory"];
+ }
}
- (void)viewDidLoad
@@ -39,8 +42,7 @@ - (void)viewDidLoad
// Customization
self.customBackButtonTitle = @"Albums";
- self.assetsGroupController = [[AssetsGroupViewController alloc] initWithNibName:@"NBUAssetsGroupViewController"
- bundle:nil];
+ self.assetsGroupController = [self.storyboard instantiateViewControllerWithIdentifier:@"assetsGroupController"];
}
#pragma mark - Handling access authorization
diff --git a/Demo/PickerDemo/en.lproj/Main.storyboard b/Demo/PickerDemo/en.lproj/Main.storyboard
index 97cb50a..b64dee5 100644
--- a/Demo/PickerDemo/en.lproj/Main.storyboard
+++ b/Demo/PickerDemo/en.lproj/Main.storyboard
@@ -1,8 +1,9 @@
-
+
+
-
+
@@ -45,134 +46,141 @@
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -219,55 +227,113 @@
-
+
-
+
-
-
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -529,7 +595,7 @@
-
+
@@ -579,7 +645,7 @@
-
+
@@ -710,6 +776,7 @@
+
@@ -717,4 +784,5 @@
+
diff --git a/Demo/Podfile.lock b/Demo/Podfile.lock
index cca9e75..7522050 100644
--- a/Demo/Podfile.lock
+++ b/Demo/Podfile.lock
@@ -1,21 +1,20 @@
PODS:
- - CocoaLumberjack (2.0.0-beta):
- - CocoaLumberjack/CLI
- - CocoaLumberjack/Core
+ - CocoaLumberjack (2.0.0-beta4):
+ - CocoaLumberjack/Default
- CocoaLumberjack/Extensions
- - CocoaLumberjack/CLI (2.0.0-beta):
- - CocoaLumberjack/Core
- - CocoaLumberjack/Core (2.0.0-beta)
- - CocoaLumberjack/Extensions (2.0.0-beta):
+ - CocoaLumberjack/Core (2.0.0-beta4)
+ - CocoaLumberjack/Default (2.0.0-beta4):
- CocoaLumberjack/Core
+ - CocoaLumberjack/Extensions (2.0.0-beta4):
+ - CocoaLumberjack/Default
- GPUImage (HEAD based on 0.1.6)
- - Lockbox (1.4.9)
- - LumberjackConsole (2.2.1):
- - CocoaLumberjack (>= 2.0.0-beta)
+ - Lockbox (2.1.0)
+ - LumberjackConsole (2.4.2):
+ - CocoaLumberjack (>= 2.0.0-beta4)
- NBUCore (>= 2.0.3)
- MotionOrientation@PTEz (1.1.0)
- - NBUCore (2.0.3)
- - NBUImagePicker (1.4.0):
+ - NBUCore (2.0.4)
+ - NBUImagePicker (1.5.0):
- NBUImagePicker/Assets
- NBUImagePicker/Base
- NBUImagePicker/Camera
@@ -25,76 +24,76 @@ PODS:
- NBUImagePicker/MediaInfo
- NBUImagePicker/Picker
- NBUImagePicker/Resources
- - NBUKit (>= 2.3.0)
- - NBUImagePicker/Assets (1.4.0):
+ - NBUKit (>= 2.4.0)
+ - NBUImagePicker/Assets (1.5.0):
- NBUImagePicker/Base
- - NBUKit (>= 2.3.0)
- - NBUImagePicker/Base (1.4.0):
- - NBUKit (>= 2.3.0)
- - NBUImagePicker/Camera (1.4.0):
+ - NBUKit (>= 2.4.0)
+ - NBUImagePicker/Base (1.5.0):
+ - NBUKit (>= 2.4.0)
+ - NBUImagePicker/Camera (1.5.0):
- NBUImagePicker/Assets
- - NBUKit (>= 2.3.0)
+ - NBUKit (>= 2.4.0)
- RBVolumeButtons@PTEz
- - NBUImagePicker/Filters (1.4.0):
+ - NBUImagePicker/Filters (1.5.0):
- GPUImage (>= 0.1.5)
- NBUImagePicker/Base
- - NBUKit (>= 2.3.0)
- - NBUImagePicker/Gallery (1.4.0):
+ - NBUKit (>= 2.4.0)
+ - NBUImagePicker/Gallery (1.5.0):
- NBUImagePicker/Assets
- NBUImagePicker/MediaInfo
- - NBUKit (>= 2.3.0)
- - NBUImagePicker/Image (1.4.0):
+ - NBUKit (>= 2.4.0)
+ - NBUImagePicker/Image (1.5.0):
- NBUImagePicker/MediaInfo
- - NBUKit (>= 2.3.0)
- - NBUImagePicker/MediaInfo (1.4.0):
+ - NBUKit (>= 2.4.0)
+ - NBUImagePicker/MediaInfo (1.5.0):
- NBUImagePicker/Assets
- - NBUKit (>= 2.3.0)
- - NBUImagePicker/Picker (1.4.0):
+ - NBUKit (>= 2.4.0)
+ - NBUImagePicker/Picker (1.5.0):
- NBUImagePicker/Camera
- NBUImagePicker/Gallery
- NBUImagePicker/Image
- NBUImagePicker/Resources
- - NBUKit (>= 2.3.0)
- - NBUImagePicker/Resources (1.4.0):
- - NBUKit (>= 2.3.0)
- - NBUKit (2.3.0):
+ - NBUKit (>= 2.4.0)
+ - NBUImagePicker/Resources (1.5.0):
+ - NBUKit (>= 2.4.0)
+ - NBUKit (2.4.0):
- Lockbox (>= 1.4.6)
- NBUCore (>= 2.0.3)
- NBUKit/Additions
- NBUKit/Base
- NBUKit/Library
- NBUKit/UI
- - NBUKit/Additions (2.3.0):
+ - NBUKit/Additions (2.4.0):
- Lockbox (>= 1.4.6)
- NBUCore (>= 2.0.3)
- NBUKit/Base
- - NBUKit/Base (2.3.0):
+ - NBUKit/Base (2.4.0):
- Lockbox (>= 1.4.6)
- NBUCore (>= 2.0.3)
- - NBUKit/Library (2.3.0):
+ - NBUKit/Library (2.4.0):
- Lockbox (>= 1.4.6)
- NBUCore (>= 2.0.3)
- NBUKit/Base
- NBUKit/Library/NBUCompatibility
- NBUKit/Library/RestKitSupport
- - NBUKit/Library/NBUCompatibility (2.3.0):
+ - NBUKit/Library/NBUCompatibility (2.4.0):
- Lockbox (>= 1.4.6)
- NBUCore (>= 2.0.3)
- NBUKit/Base
- NBUKit/UI
- - NBUKit/Library/RestKitSupport (2.3.0):
+ - NBUKit/Library/RestKitSupport (2.4.0):
- Lockbox (>= 1.4.6)
- NBUCore (>= 2.0.3)
- NBUKit/Base
- - NBUKit/UI (2.3.0):
+ - NBUKit/UI (2.4.0):
- Lockbox (>= 1.4.6)
- MotionOrientation@PTEz (>= 1.1.0)
- NBUCore (>= 2.0.3)
- NBUKit/Additions
- NBUKit/Library/NBUCompatibility
- NBUKit/Library/RestKitSupport
- - NBULog (1.1.1):
- - CocoaLumberjack (>= 2.0.0-beta)
+ - NBULog (1.2.2):
+ - CocoaLumberjack (>= 2.0.0-beta4)
- RBVolumeButtons@PTEz (0.1.0)
DEPENDENCIES:
@@ -108,15 +107,15 @@ EXTERNAL SOURCES:
:path: ../
SPEC CHECKSUMS:
- CocoaLumberjack: aadc76d7bd6c839ca84b38ed50cbf89d7cf8c693
+ CocoaLumberjack: 24153b24b17d853d7182b22b128971fb98e8cb18
GPUImage: cecb0830bb9428f50192042e3c7b53810f51388e
- Lockbox: cfe87dbbce6b5c6d7cfeefc3fe6594ef55919b11
- LumberjackConsole: 53cf2f5917d114ce637825d065e2c91a3ed1d785
+ Lockbox: 3168f08cb26680b05a0702b8c0cc6da32788059d
+ LumberjackConsole: cb05e10656efd74bfbaf9b9cbec87d0412d2a634
MotionOrientation@PTEz: ec58ced639faa14d30e63db9ef5cba8ded38b3b5
- NBUCore: 397184612d5f05d7730aaad98d6bc0a75b7984ef
- NBUImagePicker: 7fb8f09795cfcc3fe8d72c61d6f50bc9c561954b
- NBUKit: 0b473e707315d8cf1da263abc2eac04163924fd8
- NBULog: 191b7626747e64b774876c2ca802c9c28f14e68f
+ NBUCore: 978f24fdc8d79dc8141032bf0121053e3b25c95c
+ NBUImagePicker: 3e3ad33c578e756b0a7db311cf5e0c409cf27cc3
+ NBUKit: 312b1739e794090d4687e1fdb87b213358efa178
+ NBULog: 50d789289ba22b1b44ef24a419031d8aae49b252
RBVolumeButtons@PTEz: 3b176a1e501aa2433c17bf4c2787c65ba5080aa6
-COCOAPODS: 0.34.1
+COCOAPODS: 0.34.4
diff --git a/Demo/Pods/CocoaLumberjack/Classes/CLI/CLIColor.h b/Demo/Pods/CocoaLumberjack/Classes/CLI/CLIColor.h
deleted file mode 100644
index 6377200..0000000
--- a/Demo/Pods/CocoaLumberjack/Classes/CLI/CLIColor.h
+++ /dev/null
@@ -1,18 +0,0 @@
-//
-// CLIColor.h
-// CocoaLumberjack
-//
-// Created by Ernesto Rivera on 2013/12/27.
-//
-
-#import
-
-/**
- Simple NSColor replacement for CLI projects that don't link with AppKit
- */
-@interface CLIColor : NSObject
-
-+ (CLIColor *)colorWithCalibratedRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha;
-- (void)getRed:(CGFloat *)red green:(CGFloat *)green blue:(CGFloat *)blue alpha:(CGFloat *)alpha;
-
-@end
diff --git a/Demo/Pods/CocoaLumberjack/Classes/CLI/CLIColor.m b/Demo/Pods/CocoaLumberjack/Classes/CLI/CLIColor.m
deleted file mode 100644
index 3287342..0000000
--- a/Demo/Pods/CocoaLumberjack/Classes/CLI/CLIColor.m
+++ /dev/null
@@ -1,33 +0,0 @@
-//
-// CLIColor.m
-// CocoaLumberjack
-//
-// Created by Ernesto Rivera on 2013/12/27.
-//
-
-#import "CLIColor.h"
-
-@implementation CLIColor
-{
- CGFloat _red, _green, _blue, _alpha;
-}
-
-+(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
diff --git a/Demo/Pods/CocoaLumberjack/Classes/CocoaLumberjack.h b/Demo/Pods/CocoaLumberjack/Classes/CocoaLumberjack.h
index 4e70d68..5904fce 100644
--- a/Demo/Pods/CocoaLumberjack/Classes/CocoaLumberjack.h
+++ b/Demo/Pods/CocoaLumberjack/Classes/CocoaLumberjack.h
@@ -1,3 +1,17 @@
+// Software License Agreement (BSD License)
+//
+// Copyright (c) 2010-2014, 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!
@@ -5,8 +19,8 @@
* 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 the "Getting Started" wiki.
- * https://github.com/CocoaLumberjack/CocoaLumberjack/wiki/GettingStarted
+ * 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:
@@ -20,7 +34,7 @@
* Define your logging level in your implementation file:
*
* // Log levels: off, error, warn, info, verbose
- * static const int ddLogLevel = LOG_LEVEL_VERBOSE;
+ * static const DDLogLevel ddLogLevel = DDLogLevelVerbose;
*
* Step 2 [3rd party frameworks]:
*
@@ -32,7 +46,7 @@
* Define your logging level in your implementation file:
*
* // Log levels: off, error, warn, info, verbose
- * static const int myLibLogLevel = LOG_LEVEL_VERBOSE;
+ * static const DDLogLevel myLibLogLevel = DDLogLevelVerbose;
*
* Step 3:
* Replace your NSLog statements with DDLog statements according to the severity of the message.
@@ -43,11 +57,25 @@
* This means you can pass it multiple variables just like NSLog.
**/
+#import
+
+// Legacy
+#ifndef DDLEGACY
+ #define DDLEGACY NO
+#endif
+
+// Core
#import "DDLog.h"
+
+// Main macros
#import "DDLogMacros.h"
#import "DDAssertMacros.h"
+// Capture ASL
+#import "DDASLLogCapture.h"
+
// Loggers
#import "DDTTYLogger.h"
#import "DDASLLogger.h"
#import "DDFileLogger.h"
+
diff --git a/Demo/Pods/CocoaLumberjack/Classes/DDASLLogCapture.h b/Demo/Pods/CocoaLumberjack/Classes/DDASLLogCapture.h
index fffbfa8..bc45a33 100644
--- a/Demo/Pods/CocoaLumberjack/Classes/DDASLLogCapture.h
+++ b/Demo/Pods/CocoaLumberjack/Classes/DDASLLogCapture.h
@@ -1,22 +1,32 @@
+// Software License Agreement (BSD License)
//
-// DDASLLogCapture.h
-// Lumberjack
+// Copyright (c) 2010-2014, Deusty, LLC
+// All rights reserved.
//
-// Created by Dario Ahdoot on 3/17/14.
+// 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"
@protocol DDLogger;
+/**
+ * This class provides the ability to capture the ASL (Apple System Logs)
+ */
@interface DDASLLogCapture : NSObject
+ (void)start;
+ (void)stop;
-// Default log level: LOG_LEVEL_VERBOSE (i.e. capture all ASL messages).
-+ (int)captureLogLevel;
-+ (void)setCaptureLogLevel:(int)LOG_LEVEL_XXX;
+// Default log level: DDLogLevelVerbose (i.e. capture all ASL messages).
++ (DDLogLevel)captureLevel;
++ (void)setCaptureLevel:(DDLogLevel)level;
@end
-
diff --git a/Demo/Pods/CocoaLumberjack/Classes/DDASLLogCapture.m b/Demo/Pods/CocoaLumberjack/Classes/DDASLLogCapture.m
index 89a93a2..d311430 100644
--- a/Demo/Pods/CocoaLumberjack/Classes/DDASLLogCapture.m
+++ b/Demo/Pods/CocoaLumberjack/Classes/DDASLLogCapture.m
@@ -1,9 +1,17 @@
+// Software License Agreement (BSD License)
//
-// DDASLLogCapture.m
-// Lumberjack
+// Copyright (c) 2010-2014, Deusty, LLC
+// All rights reserved.
//
-// Created by Dario Ahdoot on 3/17/14.
+// 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"
#import "DDLog.h"
@@ -14,44 +22,72 @@
#include
static BOOL _cancel = YES;
-static int _captureLogLevel = LOG_LEVEL_VERBOSE;
+static DDLogLevel _captureLevel = DDLogLevelVerbose;
+
+#ifdef __IPHONE_8_0
+ #define DDASL_IOS_PIVOT_VERSION __IPHONE_8_0
+#endif
+#ifdef __MAC_10_10
+ #define DDASL_OSX_PIVOT_VERSION __MAC_10_10
+#endif
@implementation DDASLLogCapture
-+ (void)start
+static aslmsg (*dd_asl_next)(aslresponse obj);
+static void (*dd_asl_release)(aslresponse obj);
+
++ (void)initialize
{
+ #if (defined(DDASL_IOS_PIVOT_VERSION) && __IPHONE_OS_VERSION_MAX_ALLOWED >= DDASL_IOS_PIVOT_VERSION) || (defined(DDASL_OSX_PIVOT_VERSION) && __MAC_OS_X_VERSION_MAX_ALLOWED >= DDASL_OSX_PIVOT_VERSION)
+ #if __IPHONE_OS_VERSION_MIN_REQUIRED < DDASL_IOS_PIVOT_VERSION || __MAC_OS_X_VERSION_MIN_REQUIRED < DDASL_OSX_PIVOT_VERSION
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+ // Building on falsely advertised SDK, targeting deprecated API
+ dd_asl_next = &aslresponse_next;
+ dd_asl_release = &aslresponse_free;
+ #pragma GCC diagnostic pop
+ #else
+ // Building on lastest, correct SDK, targeting latest API
+ dd_asl_next = &asl_next;
+ dd_asl_release = &asl_release;
+ #endif
+ #else
+ // Building on old SDKs, targeting deprecated API
+ dd_asl_next = &aslresponse_next;
+ dd_asl_release = &aslresponse_free;
+ #endif
+}
+
++ (void)start {
// Ignore subsequent calls
- if (!_cancel)
+ if (!_cancel) {
return;
+ }
_cancel = NO;
- dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void)
- {
- [DDASLLogCapture captureAslLogs];
- });
+ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {
+ [DDASLLogCapture captureAslLogs];
+ });
}
-+ (void)stop
-{
++ (void)stop {
_cancel = YES;
}
-+ (int)captureLogLevel
-{
- return _captureLogLevel;
++ (DDLogLevel)captureLevel {
+ return _captureLevel;
}
-+ (void)setCaptureLogLevel:(int)LOG_LEVEL_XXX
-{
- _captureLogLevel = LOG_LEVEL_XXX;
++ (void)setCaptureLevel:(DDLogLevel)level {
+ _captureLevel = level;
}
-# pragma mark - Private methods
+#pragma mark - Private methods
-+ (void)configureAslQuery:(aslmsg)query
-{
++ (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);
#if !TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR
@@ -62,44 +98,48 @@ + (void)configureAslQuery:(aslmsg)query
#endif
}
-+ (void)aslMessageRecieved:(aslmsg)msg
-{
- // NSString * sender = [NSString stringWithCString:asl_get(msg, ASL_KEY_SENDER) encoding:NSUTF8StringEncoding];
- NSString * message = [NSString stringWithCString:asl_get(msg, ASL_KEY_MSG) encoding:NSUTF8StringEncoding];
- NSString * level = [NSString stringWithCString:asl_get(msg, ASL_KEY_LEVEL) encoding:NSUTF8StringEncoding];
- NSString * secondsStr = [NSString stringWithCString:asl_get(msg, ASL_KEY_TIME) encoding:NSUTF8StringEncoding];
- NSString * nanoStr = [NSString stringWithCString:asl_get(msg, ASL_KEY_TIME_NSEC) encoding:NSUTF8StringEncoding];
++ (void)aslMessageRecieved:(aslmsg)msg {
+ const char* messageCString = asl_get( msg, ASL_KEY_MSG );
+ if ( messageCString == NULL )
+ return;
+ // NSString * sender = [NSString stringWithCString:asl_get(msg, ASL_KEY_SENDER) encoding:NSUTF8StringEncoding];
+ NSString *message = @(messageCString);
+ NSString *level = @(asl_get(msg, ASL_KEY_LEVEL));
+ NSString *secondsStr = @(asl_get(msg, ASL_KEY_TIME));
+ NSString *nanoStr = @(asl_get(msg, ASL_KEY_TIME_NSEC));
+
NSTimeInterval seconds = [secondsStr doubleValue];
NSTimeInterval nanoSeconds = [nanoStr doubleValue];
NSTimeInterval totalSeconds = seconds + (nanoSeconds / 1e9);
-
- NSDate * timeStamp = [NSDate dateWithTimeIntervalSince1970:totalSeconds];
-
+
+ NSDate *timeStamp = [NSDate dateWithTimeIntervalSince1970:totalSeconds];
+
int flag;
BOOL async;
- switch([level intValue])
- {
+
+ switch ([level intValue]) {
// By default all NSLog's with a ASL_LEVEL_WARNING level
case ASL_LEVEL_EMERG :
case ASL_LEVEL_ALERT :
- case ASL_LEVEL_CRIT : flag = LOG_FLAG_ERROR; async = LOG_ASYNC_ERROR; break;
- case ASL_LEVEL_ERR : flag = LOG_FLAG_WARN; async = LOG_ASYNC_WARN; break;
- case ASL_LEVEL_WARNING : flag = LOG_FLAG_INFO; async = LOG_ASYNC_INFO; break;
- case ASL_LEVEL_NOTICE : flag = LOG_FLAG_DEBUG; async = LOG_ASYNC_DEBUG; break;
+ 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 = LOG_FLAG_VERBOSE; async = LOG_ASYNC_VERBOSE; break;
+ default : flag = DDLogFlagVerbose; async = YES; break;
}
- if (!(_captureLogLevel & flag))
+ if (!(_captureLevel & flag)) {
return;
+ }
- DDLogMessage * logMessage = [[DDLogMessage alloc]initWithLogMsg:message
- level:_captureLogLevel
+ DDLogMessage *logMessage = [[DDLogMessage alloc]initWithMessage:message
+ level:_captureLevel
flag:flag
context:0
- file:"DDASLLogCapture"
+ file:@"DDASLLogCapture"
function:0
line:0
tag:nil
@@ -109,79 +149,73 @@ + (void)aslMessageRecieved:(aslmsg)msg
[DDLog log:async message:logMessage];
}
-+ (void)captureAslLogs
-{
++ (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.
+ 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 };
+
+ struct timeval timeval = {
+ .tv_sec = 0
+ };
gettimeofday(&timeval, NULL);
unsigned long long startTime = 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.
+ 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, ¬ifyToken, 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);
- }
- [DDASLLogCapture configureAslQuery:query];
-
- // Iterate over new messages.
- aslmsg msg;
- aslresponse response = asl_search(NULL, query);
-#if defined(__IPHONE_8_0) || defined(__MAC_10_10)
- while ((msg = asl_next(response)))
-#else
- while ((msg = aslresponse_next(response)))
-#endif
- {
- [DDASLLogCapture aslMessageRecieved:msg];
-
- // Keep track of which messages we've seen.
- lastSeenID = atoll(asl_get(msg, ASL_KEY_MSG_ID));
- }
-#if defined(__IPHONE_8_0) || defined(__MAC_10_10)
- asl_release(response);
-#else
- aslresponse_free(response);
-#endif
- if(_cancel)
- {
- notify_cancel(notifyToken);
- return;
- }
- free(query);
- }
- });
+ {
+ // 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);
+ }
+
+ [DDASLLogCapture configureAslQuery:query];
+
+ // Iterate over new messages.
+ aslmsg msg;
+ aslresponse response = asl_search(NULL, query);
+
+ while ((msg = dd_asl_next(response)))
+ {
+ [DDASLLogCapture aslMessageRecieved:msg];
+
+ // Keep track of which messages we've seen.
+ lastSeenID = atoll(asl_get(msg, ASL_KEY_MSG_ID));
+ }
+ dd_asl_release(response);
+
+ if (_cancel) {
+ notify_cancel(notifyToken);
+ return;
+ }
+
+ free(query);
+ }
+ });
}
}
-@end
\ No newline at end of file
+@end
diff --git a/Demo/Pods/CocoaLumberjack/Classes/DDASLLogger.h b/Demo/Pods/CocoaLumberjack/Classes/DDASLLogger.h
index fedd624..2e48f60 100755
--- a/Demo/Pods/CocoaLumberjack/Classes/DDASLLogger.h
+++ b/Demo/Pods/CocoaLumberjack/Classes/DDASLLogger.h
@@ -1,34 +1,34 @@
+// Software License Agreement (BSD License)
//
-// DDASLLogger.h
-// CocoaLumberjack
+// Copyright (c) 2010-2014, 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
-
#import "DDLog.h"
/**
- * 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 the "Getting Started" wiki.
- * https://github.com/CocoaLumberjack/CocoaLumberjack/wiki/GettingStarted
- *
- *
* This class provides a logger for the Apple System Log facility.
- *
+ *
* As described in the "Getting Started" page,
* the traditional NSLog() function directs it's 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.
-**/
+ **/
@interface DDASLLogger : DDAbstractLogger
diff --git a/Demo/Pods/CocoaLumberjack/Classes/DDASLLogger.m b/Demo/Pods/CocoaLumberjack/Classes/DDASLLogger.m
old mode 100755
new mode 100644
index 0fb4b4a..396d10b
--- a/Demo/Pods/CocoaLumberjack/Classes/DDASLLogger.m
+++ b/Demo/Pods/CocoaLumberjack/Classes/DDASLLogger.m
@@ -1,99 +1,115 @@
+// Software License Agreement (BSD License)
//
-// DDASLLogger.m
-// CocoaLumberjack
+// Copyright (c) 2010-2014, 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"
#import
-#import
-
-/**
- * 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 the "Getting Started" wiki.
- * https://github.com/CocoaLumberjack/CocoaLumberjack/wiki/GettingStarted
-**/
-
-#if ! __has_feature(objc_arc)
+
+#if !__has_feature(objc_arc)
#error This file must be compiled with ARC. Use -fobjc-arc flag (or convert project to ARC).
#endif
static DDASLLogger *sharedInstance;
-@implementation DDASLLogger
-{
- aslclient client;
+@interface DDASLLogger () {
+ aslclient _client;
}
-+ (instancetype)sharedInstance
-{
+@end
+
+
+@implementation DDASLLogger
+
++ (instancetype)sharedInstance {
static dispatch_once_t DDASLLoggerOnceToken;
+
dispatch_once(&DDASLLoggerOnceToken, ^{
sharedInstance = [[[self class] alloc] init];
});
-
+
return sharedInstance;
}
-- (id)init
-{
- if (sharedInstance != nil)
- {
+- (instancetype)init {
+ if (sharedInstance != nil) {
return nil;
}
-
- if ((self = [super init]))
- {
+
+ 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);
+
+ _client = asl_open(NULL, "com.apple.console", 0);
}
+
return self;
}
-- (void)logMessage:(DDLogMessage *)logMessage
-{
- // Skip captured log messages.
- if (strcmp(logMessage->file, "DDASLLogCapture") == 0)
+- (void)logMessage:(DDLogMessage *)logMessage {
+ // Skip captured log messages
+ if ([logMessage->_fileName isEqualToString:@"DDASLLogCapture"]) {
return;
-
- NSString *logMsg = logMessage->logMsg;
-
- if (formatter)
- {
- logMsg = [formatter formatLogMessage:logMessage];
}
-
- if (logMsg)
- {
- const char *msg = [logMsg UTF8String];
-
- int aslLogLevel;
- switch (logMessage->logFlag)
- {
+
+ NSString * message = _logFormatter ? [_logFormatter formatLogMessage:logMessage] : logMessage->_message;
+
+ if (logMessage) {
+ 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 LOG_FLAG_ERROR : aslLogLevel = ASL_LEVEL_CRIT; break;
- case LOG_FLAG_WARN : aslLogLevel = ASL_LEVEL_ERR; break;
- case LOG_FLAG_INFO : aslLogLevel = ASL_LEVEL_WARNING; break; // Regular NSLog's level
- case LOG_FLAG_DEBUG :
- case LOG_FLAG_VERBOSE :
+ 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
+ int l = 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);
- asl_set(m, ASL_KEY_READ_UID, "501");
- asl_log(client, m, aslLogLevel, "%s", msg);
- asl_free(m);
+ 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_send(_client, m);
+ }
+ asl_free(m);
+ }
+ //TODO handle asl_* failures non-silently?
}
}
-- (NSString *)loggerName
-{
+- (NSString *)loggerName {
return @"cocoa.lumberjack.aslLogger";
}
diff --git a/Demo/Pods/CocoaLumberjack/Classes/DDAbstractDatabaseLogger.h b/Demo/Pods/CocoaLumberjack/Classes/DDAbstractDatabaseLogger.h
index 9fc4694..53b1339 100644
--- a/Demo/Pods/CocoaLumberjack/Classes/DDAbstractDatabaseLogger.h
+++ b/Demo/Pods/CocoaLumberjack/Classes/DDAbstractDatabaseLogger.h
@@ -1,105 +1,107 @@
+// Software License Agreement (BSD License)
//
-// DDAbstractDatabaseLogger.h
-// CocoaLumberjack
+// Copyright (c) 2010-2014, 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 "DDLog.h"
/**
- * 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 the "Getting Started" wiki.
- * https://github.com/CocoaLumberjack/CocoaLumberjack/wiki/GettingStarted
- *
- *
* 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;
+ 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;
+ 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;
@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;
@property (assign, readwrite) NSTimeInterval deleteInterval;
@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
diff --git a/Demo/Pods/CocoaLumberjack/Classes/DDAbstractDatabaseLogger.m b/Demo/Pods/CocoaLumberjack/Classes/DDAbstractDatabaseLogger.m
index f365b7f..78b2651 100644
--- a/Demo/Pods/CocoaLumberjack/Classes/DDAbstractDatabaseLogger.m
+++ b/Demo/Pods/CocoaLumberjack/Classes/DDAbstractDatabaseLogger.m
@@ -1,79 +1,75 @@
+// Software License Agreement (BSD License)
//
-// DDAbstractDatabaseLogger.m
-// CocoaLumberjack
+// Copyright (c) 2010-2014, 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"
#import
-/**
- * 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 the "Getting Started" wiki.
- * https://github.com/CocoaLumberjack/CocoaLumberjack/wiki/GettingStarted
-**/
-
-#if ! __has_feature(objc_arc)
+
+#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
-- (id)init
-{
- if ((self = [super init]))
- {
- saveThreshold = 500;
- saveInterval = 60; // 60 seconds
- maxAge = (60 * 60 * 24 * 7); // 7 days
- deleteInterval = (60 * 5); // 5 minutes
+- (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
-{
+- (void)dealloc {
[self destroySaveTimer];
[self destroyDeleteTimer];
-
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#pragma mark Override Me
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-- (BOOL)db_log:(DDLogMessage *)logMessage
-{
+- (BOOL)db_log:(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
-{
+- (void)db_save {
// Override me and add your implementation.
}
-- (void)db_delete
-{
+- (void)db_delete {
// Override me and add your implementation.
}
-- (void)db_saveAndDelete
-{
+- (void)db_saveAndDelete {
// Override me and add your implementation.
}
@@ -81,33 +77,29 @@ - (void)db_saveAndDelete
#pragma mark Private API
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-- (void)performSaveAndSuspendSaveTimer
-{
- if (unsavedCount > 0)
- {
- if (deleteOnEverySave)
+- (void)performSaveAndSuspendSaveTimer {
+ if (_unsavedCount > 0) {
+ if (_deleteOnEverySave) {
[self db_saveAndDelete];
- else
+ } else {
[self db_save];
+ }
}
-
- unsavedCount = 0;
- unsavedTime = 0;
-
- if (saveTimer && !saveTimerSuspended)
- {
- dispatch_suspend(saveTimer);
- saveTimerSuspended = YES;
+
+ _unsavedCount = 0;
+ _unsavedTime = 0;
+
+ if (_saveTimer && !_saveTimerSuspended) {
+ dispatch_suspend(_saveTimer);
+ _saveTimerSuspended = YES;
}
}
-- (void)performDelete
-{
- if (maxAge > 0.0)
- {
+- (void)performDelete {
+ if (_maxAge > 0.0) {
[self db_delete];
-
- lastDeleteTime = dispatch_time(DISPATCH_TIME_NOW, 0);
+
+ _lastDeleteTime = dispatch_time(DISPATCH_TIME_NOW, 0);
}
}
@@ -115,101 +107,88 @@ - (void)performDelete
#pragma mark Timers
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-- (void)destroySaveTimer
-{
- if (saveTimer)
- {
- dispatch_source_cancel(saveTimer);
- if (saveTimerSuspended)
- {
+- (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;
+ dispatch_resume(_saveTimer);
+ _saveTimerSuspended = NO;
}
+
#if !OS_OBJECT_USE_OBJC
- dispatch_release(saveTimer);
+ dispatch_release(_saveTimer);
#endif
- saveTimer = NULL;
+ _saveTimer = NULL;
}
}
-- (void)updateAndResumeSaveTimer
-{
- if ((saveTimer != NULL) && (saveInterval > 0.0) && (unsavedTime > 0.0))
- {
- uint64_t interval = (uint64_t)(saveInterval * NSEC_PER_SEC);
- dispatch_time_t startTime = dispatch_time(unsavedTime, interval);
-
- dispatch_source_set_timer(saveTimer, startTime, interval, 1.0);
-
- if (saveTimerSuspended)
- {
- dispatch_resume(saveTimer);
- saveTimerSuspended = NO;
+- (void)updateAndResumeSaveTimer {
+ if ((_saveTimer != NULL) && (_saveInterval > 0.0) && (_unsavedTime > 0.0)) {
+ uint64_t interval = (uint64_t)(_saveInterval * NSEC_PER_SEC);
+ dispatch_time_t startTime = dispatch_time(_unsavedTime, interval);
+
+ dispatch_source_set_timer(_saveTimer, startTime, interval, 1.0);
+
+ 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, loggerQueue);
-
- dispatch_source_set_event_handler(saveTimer, ^{ @autoreleasepool {
-
- [self performSaveAndSuspendSaveTimer];
-
- }});
-
- saveTimerSuspended = YES;
+- (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);
+- (void)destroyDeleteTimer {
+ if (_deleteTimer) {
+ dispatch_source_cancel(_deleteTimer);
#if !OS_OBJECT_USE_OBJC
- dispatch_release(deleteTimer);
+ dispatch_release(_deleteTimer);
#endif
- deleteTimer = NULL;
+ _deleteTimer = NULL;
}
}
-- (void)updateDeleteTimer
-{
- if ((deleteTimer != NULL) && (deleteInterval > 0.0) && (maxAge > 0.0))
- {
- uint64_t interval = (uint64_t)(deleteInterval * NSEC_PER_SEC);
+- (void)updateDeleteTimer {
+ if ((_deleteTimer != NULL) && (_deleteInterval > 0.0) && (_maxAge > 0.0)) {
+ uint64_t interval = (uint64_t)(_deleteInterval * NSEC_PER_SEC);
dispatch_time_t startTime;
-
- if (lastDeleteTime > 0)
- startTime = dispatch_time(lastDeleteTime, interval);
- else
+
+ if (_lastDeleteTime > 0) {
+ startTime = dispatch_time(_lastDeleteTime, interval);
+ } else {
startTime = dispatch_time(DISPATCH_TIME_NOW, interval);
-
- dispatch_source_set_timer(deleteTimer, startTime, interval, 1.0);
+ }
+
+ dispatch_source_set_timer(_deleteTimer, startTime, interval, 1.0);
}
}
-- (void)createAndStartDeleteTimer
-{
- if ((deleteTimer == NULL) && (deleteInterval > 0.0) && (maxAge > 0.0))
- {
- deleteTimer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, loggerQueue);
-
- if (deleteTimer != NULL) {
- dispatch_source_set_event_handler(deleteTimer, ^{ @autoreleasepool {
-
- [self performDelete];
+- (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);
+
+ if (_deleteTimer != NULL) {
+ dispatch_resume(_deleteTimer);
+ }
}
}
}
@@ -218,432 +197,387 @@ - (void)createAndStartDeleteTimer
#pragma mark Configuration
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-- (NSUInteger)saveThreshold
-{
+- (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(loggerQueue, ^{
- result = saveThreshold;
+ dispatch_sync(self.loggerQueue, ^{
+ result = _saveThreshold;
});
});
-
+
return result;
}
-- (void)setSaveThreshold:(NSUInteger)threshold
-{
- dispatch_block_t block = ^{ @autoreleasepool {
-
- if (saveThreshold != threshold)
- {
- 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 ((unsavedCount >= saveThreshold) && (saveThreshold > 0))
- {
- [self performSaveAndSuspendSaveTimer];
+- (void)setSaveThreshold:(NSUInteger)threshold {
+ dispatch_block_t block = ^{
+ @autoreleasepool {
+ if (_saveThreshold != threshold) {
+ _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 ((_unsavedCount >= _saveThreshold) && (_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])
- {
+
+ if ([self isOnInternalLoggerQueue]) {
block();
- }
- else
- {
+ } else {
dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
NSAssert(![self isOnGlobalLoggingQueue], @"Core architecture requirement failure");
-
+
dispatch_async(globalLoggingQueue, ^{
- dispatch_async(loggerQueue, block);
+ dispatch_async(self.loggerQueue, block);
});
}
}
-- (NSTimeInterval)saveInterval
-{
+- (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(loggerQueue, ^{
- result = saveInterval;
+ dispatch_sync(self.loggerQueue, ^{
+ result = _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(saveInterval, interval))
- {
- 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 (saveInterval > 0.0)
- {
- if (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];
+- (void)setSaveInterval:(NSTimeInterval)interval {
+ dispatch_block_t block = ^{
+ @autoreleasepool {
+ // C99 recommended floating point comparison macro
+ // Read: isLessThanOrGreaterThan(floatA, floatB)
+
+ if (/* saveInterval != interval */ islessgreater(_saveInterval, interval)) {
+ _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 (_saveInterval > 0.0) {
+ if (_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 (_saveTimer) {
+ // Handles #1
+
+ [self destroySaveTimer];
}
}
- else if (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])
- {
+
+ if ([self isOnInternalLoggerQueue]) {
block();
- }
- else
- {
+ } else {
dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
NSAssert(![self isOnGlobalLoggingQueue], @"Core architecture requirement failure");
-
+
dispatch_async(globalLoggingQueue, ^{
- dispatch_async(loggerQueue, block);
+ dispatch_async(self.loggerQueue, block);
});
}
}
-- (NSTimeInterval)maxAge
-{
+- (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(loggerQueue, ^{
- result = maxAge;
+ dispatch_sync(self.loggerQueue, ^{
+ result = _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(maxAge, interval))
- {
- NSTimeInterval oldMaxAge = maxAge;
- NSTimeInterval newMaxAge = interval;
-
- 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
+- (void)setMaxAge:(NSTimeInterval)interval {
+ dispatch_block_t block = ^{
+ @autoreleasepool {
+ // C99 recommended floating point comparison macro
+ // Read: isLessThanOrGreaterThan(floatA, floatB)
+
+ if (/* maxAge != interval */ islessgreater(_maxAge, interval)) {
+ NSTimeInterval oldMaxAge = _maxAge;
+ NSTimeInterval newMaxAge = interval;
+
+ _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;
}
- }
- else if (newMaxAge > 0.0)
- {
- // Handles #2
- shouldDeleteNow = YES;
- }
-
- if (shouldDeleteNow)
- {
- [self performDelete];
-
- if (deleteTimer)
- [self updateDeleteTimer];
- else
- [self createAndStartDeleteTimer];
+
+ if (shouldDeleteNow) {
+ [self performDelete];
+
+ if (_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])
- {
+
+ if ([self isOnInternalLoggerQueue]) {
block();
- }
- else
- {
+ } else {
dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
NSAssert(![self isOnGlobalLoggingQueue], @"Core architecture requirement failure");
-
+
dispatch_async(globalLoggingQueue, ^{
- dispatch_async(loggerQueue, block);
+ dispatch_async(self.loggerQueue, block);
});
}
}
-- (NSTimeInterval)deleteInterval
-{
+- (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(loggerQueue, ^{
- result = deleteInterval;
+ dispatch_sync(self.loggerQueue, ^{
+ result = _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(deleteInterval, interval))
- {
- 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 (deleteInterval > 0.0)
- {
- if (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];
+- (void)setDeleteInterval:(NSTimeInterval)interval {
+ dispatch_block_t block = ^{
+ @autoreleasepool {
+ // C99 recommended floating point comparison macro
+ // Read: isLessThanOrGreaterThan(floatA, floatB)
+
+ if (/* deleteInterval != interval */ islessgreater(_deleteInterval, interval)) {
+ _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 (_deleteInterval > 0.0) {
+ if (_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 (_deleteTimer) {
+ // Handles #1
+
+ [self destroyDeleteTimer];
}
}
- else if (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])
- {
+
+ if ([self isOnInternalLoggerQueue]) {
block();
- }
- else
- {
+ } else {
dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
NSAssert(![self isOnGlobalLoggingQueue], @"Core architecture requirement failure");
-
+
dispatch_async(globalLoggingQueue, ^{
- dispatch_async(loggerQueue, block);
+ dispatch_async(self.loggerQueue, block);
});
}
}
-- (BOOL)deleteOnEverySave
-{
+- (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(loggerQueue, ^{
- result = deleteOnEverySave;
+ dispatch_sync(self.loggerQueue, ^{
+ result = _deleteOnEverySave;
});
});
-
+
return result;
}
-- (void)setDeleteOnEverySave:(BOOL)flag
-{
+- (void)setDeleteOnEverySave:(BOOL)flag {
dispatch_block_t block = ^{
-
- deleteOnEverySave = flag;
+ _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])
- {
+
+ if ([self isOnInternalLoggerQueue]) {
block();
- }
- else
- {
+ } else {
dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
NSAssert(![self isOnGlobalLoggingQueue], @"Core architecture requirement failure");
-
+
dispatch_async(globalLoggingQueue, ^{
- dispatch_async(loggerQueue, block);
+ dispatch_async(self.loggerQueue, block);
});
}
}
@@ -652,80 +586,74 @@ - (void)setDeleteOnEverySave:(BOOL)flag
#pragma mark Public API
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-- (void)savePendingLogEntries
-{
- dispatch_block_t block = ^{ @autoreleasepool {
-
- [self performSaveAndSuspendSaveTimer];
- }};
-
- if ([self isOnInternalLoggerQueue])
+- (void)savePendingLogEntries {
+ dispatch_block_t block = ^{
+ @autoreleasepool {
+ [self performSaveAndSuspendSaveTimer];
+ }
+ };
+
+ if ([self isOnInternalLoggerQueue]) {
block();
- else
- dispatch_async(loggerQueue, block);
+ } else {
+ dispatch_async(self.loggerQueue, block);
+ }
}
-- (void)deleteOldLogEntries
-{
- dispatch_block_t block = ^{ @autoreleasepool {
-
- [self performDelete];
- }};
-
- if ([self isOnInternalLoggerQueue])
+- (void)deleteOldLogEntries {
+ dispatch_block_t block = ^{
+ @autoreleasepool {
+ [self performDelete];
+ }
+ };
+
+ if ([self isOnInternalLoggerQueue]) {
block();
- else
- dispatch_async(loggerQueue, block);
+ } else {
+ dispatch_async(self.loggerQueue, block);
+ }
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#pragma mark DDLogger
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-- (void)didAddLogger
-{
+- (void)didAddLogger {
// If you override me be sure to invoke [super didAddLogger];
-
+
[self createSuspendedSaveTimer];
-
+
[self createAndStartDeleteTimer];
}
-- (void)willRemoveLogger
-{
+- (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))
- {
+- (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);
+ } else if (firstUnsavedEntry) {
+ _unsavedTime = dispatch_time(DISPATCH_TIME_NOW, 0);
[self updateAndResumeSaveTimer];
}
}
}
-- (void)flush
-{
+- (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];
}
diff --git a/Demo/Pods/CocoaLumberjack/Classes/DDAssertMacros.h b/Demo/Pods/CocoaLumberjack/Classes/DDAssertMacros.h
index 0d142a4..b072d3d 100644
--- a/Demo/Pods/CocoaLumberjack/Classes/DDAssertMacros.h
+++ b/Demo/Pods/CocoaLumberjack/Classes/DDAssertMacros.h
@@ -1,19 +1,26 @@
+// Software License Agreement (BSD License)
//
-// DDAssertMacros.h
-// CocoaLumberjack
+// Copyright (c) 2010-2014, Deusty, LLC
+// All rights reserved.
//
-// Created by Ernesto Rivera on 2014/07/07.
+// Redistribution and use of this software in source and binary forms,
+// with or without modification, are permitted provided that the following conditions are met:
//
-
-#import "DDLogMacros.h"
+// * 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.
/**
* NSAsset 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 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)
diff --git a/Demo/Pods/CocoaLumberjack/Classes/DDFileLogger.h b/Demo/Pods/CocoaLumberjack/Classes/DDFileLogger.h
index c51362d..e6d11a0 100644
--- a/Demo/Pods/CocoaLumberjack/Classes/DDFileLogger.h
+++ b/Demo/Pods/CocoaLumberjack/Classes/DDFileLogger.h
@@ -1,39 +1,40 @@
+// Software License Agreement (BSD License)
//
-// DDLogFileManager.h
-// CocoaLumberjack
+// Copyright (c) 2010-2014, 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 "DDLog.h"
@class DDLogFileInfo;
/**
- * 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 the "Getting Started" wiki.
- * https://github.com/CocoaLumberjack/CocoaLumberjack/wiki/GettingStarted
- *
- *
* This class provides a logger to write log statements to a file.
-**/
+ **/
// Default configuration and safety/sanity values.
-//
-// maximumFileSize -> DEFAULT_LOG_MAX_FILE_SIZE
-// rollingFrequency -> DEFAULT_LOG_ROLLING_FREQUENCY
-// maximumNumberOfLogFiles -> DEFAULT_LOG_MAX_NUM_LOG_FILES
-// logFilesDiskQuota -> DEFAULT_LOG_FILES_DISK_QUOTA
-//
+//
+// maximumFileSize -> kDDDefaultLogMaxFileSize
+// rollingFrequency -> kDDDefaultLogRollingFrequency
+// maximumNumberOfLogFiles -> kDDDefaultLogMaxNumLogFiles
+// logFilesDiskQuota -> kDDDefaultLogFilesDiskQuota
+//
// You should carefully consider the proper configuration values for your application.
-#define DEFAULT_LOG_MAX_FILE_SIZE (1024 * 1024) // 1 MB
-#define DEFAULT_LOG_ROLLING_FREQUENCY (60 * 60 * 24) // 24 Hours
-#define DEFAULT_LOG_MAX_NUM_LOG_FILES (5) // 5 Files
-#define DEFAULT_LOG_FILES_DISK_QUOTA (20 * 1024 * 1024) // 20 MB
+extern unsigned long long const kDDDefaultLogMaxFileSize;
+extern NSTimeInterval const kDDDefaultLogRollingFrequency;
+extern NSUInteger const kDDDefaultLogMaxNumLogFiles;
+extern unsigned long long const kDDDefaultLogFilesDiskQuota;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -41,22 +42,22 @@
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 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
@@ -72,9 +73,9 @@
* 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;
/**
@@ -82,7 +83,7 @@
* be deleted.
*
* You may optionally disable this option by setting it to zero.
-**/
+ **/
@property (readwrite, assign, atomic) unsigned long long logFilesDiskQuota;
// Public methods
@@ -116,29 +117,21 @@
/**
* 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/.
* On iPhone, this is in ~/Library/Caches/Logs.
- *
+ *
* Log files are named "