├── .github ├── FUNDING.yml └── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── .gitignore ├── .swift-version ├── CHANGELOG.md ├── Demo ├── Demo.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ └── contents.xcworkspacedata ├── Demo.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── Demo │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ ├── AppIcon-1024.0x1024.0@1x.png │ │ │ ├── AppIcon-20.0x20.0@1x.png │ │ │ ├── AppIcon-20.0x20.0@2x.png │ │ │ ├── AppIcon-20.0x20.0@3x.png │ │ │ ├── AppIcon-29.0x29.0@1x.png │ │ │ ├── AppIcon-29.0x29.0@2x.png │ │ │ ├── AppIcon-29.0x29.0@3x.png │ │ │ ├── AppIcon-40.0x40.0@1x.png │ │ │ ├── AppIcon-40.0x40.0@2x.png │ │ │ ├── AppIcon-40.0x40.0@3x.png │ │ │ ├── AppIcon-60.0x60.0@2x.png │ │ │ ├── AppIcon-60.0x60.0@3x.png │ │ │ ├── AppIcon-76.0x76.0@1x.png │ │ │ ├── AppIcon-76.0x76.0@2x.png │ │ │ ├── AppIcon-83.5x83.5@2x.png │ │ │ └── Contents.json │ │ ├── Contents.json │ │ ├── logo.imageset │ │ │ ├── Contents.json │ │ │ └── logo.pdf │ │ ├── minus.imageset │ │ │ ├── Contents.json │ │ │ └── minus.pdf │ │ ├── plus.imageset │ │ │ ├── Contents.json │ │ │ └── plus.pdf │ │ ├── volume-off.imageset │ │ │ ├── Contents.json │ │ │ └── volume-off.pdf │ │ └── volume-on.imageset │ │ │ ├── Contents.json │ │ │ └── volume-on.pdf │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ ├── Info.plist │ └── ViewController.swift ├── DemoTests │ ├── DemoTests.swift │ └── Info.plist ├── DemoUITests │ ├── DemoUITests.swift │ └── Info.plist ├── Podfile ├── Podfile.lock ├── Pods │ ├── Local Podspecs │ │ └── SubtleVolume.podspec.json │ ├── Manifest.lock │ ├── Pods.xcodeproj │ │ └── project.pbxproj │ └── Target Support Files │ │ ├── Pods-Demo │ │ ├── Info.plist │ │ ├── Pods-Demo-acknowledgements.markdown │ │ ├── Pods-Demo-acknowledgements.plist │ │ ├── Pods-Demo-dummy.m │ │ ├── Pods-Demo-frameworks.sh │ │ ├── Pods-Demo-resources.sh │ │ ├── Pods-Demo-umbrella.h │ │ ├── Pods-Demo.debug.xcconfig │ │ ├── Pods-Demo.modulemap │ │ └── Pods-Demo.release.xcconfig │ │ ├── Pods-DemoTests │ │ ├── Info.plist │ │ ├── Pods-DemoTests-acknowledgements.markdown │ │ ├── Pods-DemoTests-acknowledgements.plist │ │ ├── Pods-DemoTests-dummy.m │ │ ├── Pods-DemoTests-frameworks.sh │ │ ├── Pods-DemoTests-resources.sh │ │ ├── Pods-DemoTests-umbrella.h │ │ ├── Pods-DemoTests.debug.xcconfig │ │ ├── Pods-DemoTests.modulemap │ │ └── Pods-DemoTests.release.xcconfig │ │ ├── Pods-DemoUITests │ │ ├── Info.plist │ │ ├── Pods-DemoUITests-acknowledgements.markdown │ │ ├── Pods-DemoUITests-acknowledgements.plist │ │ ├── Pods-DemoUITests-dummy.m │ │ ├── Pods-DemoUITests-frameworks.sh │ │ ├── Pods-DemoUITests-resources.sh │ │ ├── Pods-DemoUITests-umbrella.h │ │ ├── Pods-DemoUITests.debug.xcconfig │ │ ├── Pods-DemoUITests.modulemap │ │ └── Pods-DemoUITests.release.xcconfig │ │ └── SubtleVolume │ │ ├── Info.plist │ │ ├── SubtleVolume-dummy.m │ │ ├── SubtleVolume-prefix.pch │ │ ├── SubtleVolume-umbrella.h │ │ ├── SubtleVolume.modulemap │ │ └── SubtleVolume.xcconfig └── build │ └── Pods.build │ └── Release-iphoneos │ ├── Pods-Demo.build │ └── dgph │ └── SubtleVolume.build │ └── dgph ├── LICENSE ├── Package.swift ├── README.md ├── Source └── SubtleVolume.swift ├── SubtleVolume.podspec ├── SubtleVolume.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── xcshareddata │ └── xcschemes │ └── SubtleVolume.xcscheme ├── SubtleVolume ├── Info.plist └── SubtleVolume.h └── assets ├── logo.png └── screenshot.png /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: andreamazz 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | 5 | --- 6 | 7 | **Describe the bug** 8 | A clear and concise description of what the bug is. 9 | 10 | **To Reproduce** 11 | Steps to reproduce the behavior: 12 | 1. Do this 13 | 2. Do that 14 | 3. Observe error 15 | 16 | **Expected behavior** 17 | A clear and concise description of what you expected to happen. 18 | 19 | **Screenshots** 20 | If applicable, add screenshots to help explain your problem. 21 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | 5 | --- 6 | 7 | **Is your feature request related to a problem? Please describe.** 8 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 9 | 10 | **Describe the solution you'd like** 11 | A clear and concise description of what you want to happen. 12 | 13 | **Describe alternatives you've considered** 14 | A clear and concise description of any alternative solutions or features you've considered. 15 | 16 | **Additional context** 17 | Add any other context or screenshots about the feature request here. 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | .DS_Store 3 | */build/* 4 | *.pbxuser 5 | !default.pbxuser 6 | *.mode1v3 7 | !default.mode1v3 8 | *.mode2v3 9 | !default.mode2v3 10 | *.perspectivev3 11 | !default.perspectivev3 12 | xcuserdata 13 | profile 14 | *.moved-aside 15 | DerivedData 16 | .idea/ 17 | *.hmap 18 | *.xccheckout 19 | *.xcscmblueprint 20 | 21 | # Carthage 22 | Carthage/Build 23 | -------------------------------------------------------------------------------- /.swift-version: -------------------------------------------------------------------------------- 1 | 5.0 2 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | All notable changes to this project will be documented in this file. 3 | `SubtleVolume` adheres to [Semantic Versioning](http://semver.org/). 4 | 5 | - `1.0.x` Releases - [1.0.0](#100) | [1.0.1](#101) | [1.0.2](#102) | [1.0.3](#103) 6 | - `0.5.x` Releases - [0.5.0](#050) | [0.5.1](#051) | [0.5.2](#052) 7 | - `0.4.x` Releases - [0.4.0](#040) 8 | - `0.3.x` Releases - [0.3.0](#030) 9 | - `0.2.x` Releases - [0.2.0](#020) | [0.2.1](#021) 10 | - `0.1.x` Releases - [0.1.0](#010) | [0.1.1](#011) 11 | 12 | --- 13 | 14 | ## [1.0.3](https://github.com/andreamazz/SubtleVolume/releases/tag/1.0.3) 15 | 16 | - Add SwiftPM support 17 | 18 | 19 | ## [1.0.2](https://github.com/andreamazz/SubtleVolume/releases/tag/1.0.2) 20 | 21 | - Fix possible state inconsistency 22 | 23 | ## [1.0.1](https://github.com/andreamazz/SubtleVolume/releases/tag/1.0.1) 24 | 25 | - Fix delegate issue 26 | 27 | ## [1.0.0](https://github.com/andreamazz/SubtleVolume/releases/tag/1.0.0) 28 | 29 | ### Stable release 30 | - Updated to Swift 4.2 31 | - Improved support for iPhone X(S/R) screens 32 | - Added accessory image 33 | 34 | ## [0.5.2](https://github.com/andreamazz/SubtleVolume/releases/tag/0.5.2) 35 | 36 | - Merged #17 37 | 38 | ## [0.5.1](https://github.com/andreamazz/SubtleVolume/releases/tag/0.5.1) 39 | 40 | ### Fixed 41 | 42 | - Issue with `setVolumeLevel(_: animated:)` called with `animation` set to `false` 43 | 44 | ## [0.5.0](https://github.com/andreamazz/SubtleVolume/releases/tag/0.5.0) 45 | 46 | ### Added 47 | 48 | - Volume convenience methods 49 | - Objective-C support 50 | 51 | ### Fixed 52 | 53 | - Background handling 54 | 55 | ### Changed 56 | 57 | - The exposed API uses Double values instead of Float for convenience. 58 | 59 | ## [0.4.0](https://github.com/andreamazz/SubtleVolume/releases/tag/0.4.0) 60 | 61 | Swift 4 support 62 | 63 | ## [0.3.0](https://github.com/andreamazz/SubtleVolume/releases/tag/0.3.0) 64 | 65 | Merged #11 66 | 67 | ## [0.2.1](https://github.com/andreamazz/SubtleVolume/releases/tag/0.2.1) 68 | 69 | Merged #10 70 | 71 | ## [0.2.0](https://github.com/andreamazz/SubtleVolume/releases/tag/0.2.0) 72 | 73 | Updated library to Swift 3.0 74 | 75 | ## [0.1.1](https://github.com/andreamazz/SubtleVolume/releases/tag/0.1.1) 76 | 77 | ### Fixed 78 | - Removed observer on dealloc (See #6). 79 | 80 | ## [0.1.0](https://github.com/andreamazz/SubtleVolume/releases/tag/0.1.0) 81 | 82 | ### Added 83 | - Carthage Support 84 | -------------------------------------------------------------------------------- /Demo/Demo.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 651D14C31C8B2D5A0069F1F8 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 651D14C21C8B2D5A0069F1F8 /* AppDelegate.swift */; }; 11 | 651D14C51C8B2D5A0069F1F8 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 651D14C41C8B2D5A0069F1F8 /* ViewController.swift */; }; 12 | 651D14C81C8B2D5A0069F1F8 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 651D14C61C8B2D5A0069F1F8 /* Main.storyboard */; }; 13 | 651D14CA1C8B2D5A0069F1F8 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 651D14C91C8B2D5A0069F1F8 /* Assets.xcassets */; }; 14 | 651D14CD1C8B2D5A0069F1F8 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 651D14CB1C8B2D5A0069F1F8 /* LaunchScreen.storyboard */; }; 15 | 651D14D81C8B2D5A0069F1F8 /* DemoTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 651D14D71C8B2D5A0069F1F8 /* DemoTests.swift */; }; 16 | 651D14E31C8B2D5A0069F1F8 /* DemoUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 651D14E21C8B2D5A0069F1F8 /* DemoUITests.swift */; }; 17 | 6ABDF1B04D335C04B848B45B /* Pods_DemoUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 171591009CFDC4CD57E7FBC9 /* Pods_DemoUITests.framework */; }; 18 | 76C1F1296AFC098C941B18F3 /* Pods_Demo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5D6B5E46D203BDC010B2F29D /* Pods_Demo.framework */; }; 19 | B811613BF4E3B66E8E0E256E /* Pods_DemoTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 97BB932C5D0369902950D582 /* Pods_DemoTests.framework */; }; 20 | /* End PBXBuildFile section */ 21 | 22 | /* Begin PBXContainerItemProxy section */ 23 | 651D14D41C8B2D5A0069F1F8 /* PBXContainerItemProxy */ = { 24 | isa = PBXContainerItemProxy; 25 | containerPortal = 651D14B71C8B2D5A0069F1F8 /* Project object */; 26 | proxyType = 1; 27 | remoteGlobalIDString = 651D14BE1C8B2D5A0069F1F8; 28 | remoteInfo = Demo; 29 | }; 30 | 651D14DF1C8B2D5A0069F1F8 /* PBXContainerItemProxy */ = { 31 | isa = PBXContainerItemProxy; 32 | containerPortal = 651D14B71C8B2D5A0069F1F8 /* Project object */; 33 | proxyType = 1; 34 | remoteGlobalIDString = 651D14BE1C8B2D5A0069F1F8; 35 | remoteInfo = Demo; 36 | }; 37 | /* End PBXContainerItemProxy section */ 38 | 39 | /* Begin PBXFileReference section */ 40 | 01EFE441231C200E2F411327 /* Pods-Demo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Demo.release.xcconfig"; path = "Pods/Target Support Files/Pods-Demo/Pods-Demo.release.xcconfig"; sourceTree = ""; }; 41 | 0F31BA8A2CFC2F7EB36E0D9A /* Pods-DemoTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DemoTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-DemoTests/Pods-DemoTests.debug.xcconfig"; sourceTree = ""; }; 42 | 171591009CFDC4CD57E7FBC9 /* Pods_DemoUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_DemoUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 43 | 38639498761859C38981F549 /* Pods-DemoUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DemoUITests.release.xcconfig"; path = "Pods/Target Support Files/Pods-DemoUITests/Pods-DemoUITests.release.xcconfig"; sourceTree = ""; }; 44 | 5D6B5E46D203BDC010B2F29D /* Pods_Demo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Demo.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 45 | 651D14BF1C8B2D5A0069F1F8 /* SubtleVolume.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SubtleVolume.app; sourceTree = BUILT_PRODUCTS_DIR; }; 46 | 651D14C21C8B2D5A0069F1F8 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 47 | 651D14C41C8B2D5A0069F1F8 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 48 | 651D14C71C8B2D5A0069F1F8 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 49 | 651D14C91C8B2D5A0069F1F8 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 50 | 651D14CC1C8B2D5A0069F1F8 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 51 | 651D14CE1C8B2D5A0069F1F8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 52 | 651D14D31C8B2D5A0069F1F8 /* DemoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DemoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 53 | 651D14D71C8B2D5A0069F1F8 /* DemoTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DemoTests.swift; sourceTree = ""; }; 54 | 651D14D91C8B2D5A0069F1F8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 55 | 651D14DE1C8B2D5A0069F1F8 /* DemoUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DemoUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 56 | 651D14E21C8B2D5A0069F1F8 /* DemoUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DemoUITests.swift; sourceTree = ""; }; 57 | 651D14E41C8B2D5A0069F1F8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 58 | 9773A999DEF09843719C4C50 /* Pods-DemoTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DemoTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-DemoTests/Pods-DemoTests.release.xcconfig"; sourceTree = ""; }; 59 | 97BB932C5D0369902950D582 /* Pods_DemoTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_DemoTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 60 | A003C72FE70DB155A57B135C /* Pods-Demo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Demo.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Demo/Pods-Demo.debug.xcconfig"; sourceTree = ""; }; 61 | A48D212430647B98DB9139C2 /* Pods-DemoUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DemoUITests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-DemoUITests/Pods-DemoUITests.debug.xcconfig"; sourceTree = ""; }; 62 | /* End PBXFileReference section */ 63 | 64 | /* Begin PBXFrameworksBuildPhase section */ 65 | 651D14BC1C8B2D5A0069F1F8 /* Frameworks */ = { 66 | isa = PBXFrameworksBuildPhase; 67 | buildActionMask = 2147483647; 68 | files = ( 69 | 76C1F1296AFC098C941B18F3 /* Pods_Demo.framework in Frameworks */, 70 | ); 71 | runOnlyForDeploymentPostprocessing = 0; 72 | }; 73 | 651D14D01C8B2D5A0069F1F8 /* Frameworks */ = { 74 | isa = PBXFrameworksBuildPhase; 75 | buildActionMask = 2147483647; 76 | files = ( 77 | B811613BF4E3B66E8E0E256E /* Pods_DemoTests.framework in Frameworks */, 78 | ); 79 | runOnlyForDeploymentPostprocessing = 0; 80 | }; 81 | 651D14DB1C8B2D5A0069F1F8 /* Frameworks */ = { 82 | isa = PBXFrameworksBuildPhase; 83 | buildActionMask = 2147483647; 84 | files = ( 85 | 6ABDF1B04D335C04B848B45B /* Pods_DemoUITests.framework in Frameworks */, 86 | ); 87 | runOnlyForDeploymentPostprocessing = 0; 88 | }; 89 | /* End PBXFrameworksBuildPhase section */ 90 | 91 | /* Begin PBXGroup section */ 92 | 651D14B61C8B2D5A0069F1F8 = { 93 | isa = PBXGroup; 94 | children = ( 95 | 651D14C11C8B2D5A0069F1F8 /* Demo */, 96 | 651D14D61C8B2D5A0069F1F8 /* DemoTests */, 97 | 651D14E11C8B2D5A0069F1F8 /* DemoUITests */, 98 | 651D14C01C8B2D5A0069F1F8 /* Products */, 99 | DC8A6B93E8D09E08C3A26DC9 /* Pods */, 100 | 66B12B3F911F92E09AC82587 /* Frameworks */, 101 | ); 102 | indentWidth = 2; 103 | sourceTree = ""; 104 | tabWidth = 2; 105 | }; 106 | 651D14C01C8B2D5A0069F1F8 /* Products */ = { 107 | isa = PBXGroup; 108 | children = ( 109 | 651D14BF1C8B2D5A0069F1F8 /* SubtleVolume.app */, 110 | 651D14D31C8B2D5A0069F1F8 /* DemoTests.xctest */, 111 | 651D14DE1C8B2D5A0069F1F8 /* DemoUITests.xctest */, 112 | ); 113 | name = Products; 114 | sourceTree = ""; 115 | }; 116 | 651D14C11C8B2D5A0069F1F8 /* Demo */ = { 117 | isa = PBXGroup; 118 | children = ( 119 | 651D14C21C8B2D5A0069F1F8 /* AppDelegate.swift */, 120 | 651D14C41C8B2D5A0069F1F8 /* ViewController.swift */, 121 | 651D14C61C8B2D5A0069F1F8 /* Main.storyboard */, 122 | 651D14C91C8B2D5A0069F1F8 /* Assets.xcassets */, 123 | 651D14CB1C8B2D5A0069F1F8 /* LaunchScreen.storyboard */, 124 | 651D14CE1C8B2D5A0069F1F8 /* Info.plist */, 125 | ); 126 | path = Demo; 127 | sourceTree = ""; 128 | }; 129 | 651D14D61C8B2D5A0069F1F8 /* DemoTests */ = { 130 | isa = PBXGroup; 131 | children = ( 132 | 651D14D71C8B2D5A0069F1F8 /* DemoTests.swift */, 133 | 651D14D91C8B2D5A0069F1F8 /* Info.plist */, 134 | ); 135 | path = DemoTests; 136 | sourceTree = ""; 137 | }; 138 | 651D14E11C8B2D5A0069F1F8 /* DemoUITests */ = { 139 | isa = PBXGroup; 140 | children = ( 141 | 651D14E21C8B2D5A0069F1F8 /* DemoUITests.swift */, 142 | 651D14E41C8B2D5A0069F1F8 /* Info.plist */, 143 | ); 144 | path = DemoUITests; 145 | sourceTree = ""; 146 | }; 147 | 66B12B3F911F92E09AC82587 /* Frameworks */ = { 148 | isa = PBXGroup; 149 | children = ( 150 | 5D6B5E46D203BDC010B2F29D /* Pods_Demo.framework */, 151 | 97BB932C5D0369902950D582 /* Pods_DemoTests.framework */, 152 | 171591009CFDC4CD57E7FBC9 /* Pods_DemoUITests.framework */, 153 | ); 154 | name = Frameworks; 155 | sourceTree = ""; 156 | }; 157 | DC8A6B93E8D09E08C3A26DC9 /* Pods */ = { 158 | isa = PBXGroup; 159 | children = ( 160 | A003C72FE70DB155A57B135C /* Pods-Demo.debug.xcconfig */, 161 | 01EFE441231C200E2F411327 /* Pods-Demo.release.xcconfig */, 162 | 0F31BA8A2CFC2F7EB36E0D9A /* Pods-DemoTests.debug.xcconfig */, 163 | 9773A999DEF09843719C4C50 /* Pods-DemoTests.release.xcconfig */, 164 | A48D212430647B98DB9139C2 /* Pods-DemoUITests.debug.xcconfig */, 165 | 38639498761859C38981F549 /* Pods-DemoUITests.release.xcconfig */, 166 | ); 167 | name = Pods; 168 | sourceTree = ""; 169 | }; 170 | /* End PBXGroup section */ 171 | 172 | /* Begin PBXNativeTarget section */ 173 | 651D14BE1C8B2D5A0069F1F8 /* Demo */ = { 174 | isa = PBXNativeTarget; 175 | buildConfigurationList = 651D14E71C8B2D5A0069F1F8 /* Build configuration list for PBXNativeTarget "Demo" */; 176 | buildPhases = ( 177 | 7B7D91373E58A1637260239D /* [CP] Check Pods Manifest.lock */, 178 | 651D14BB1C8B2D5A0069F1F8 /* Sources */, 179 | 651D14BC1C8B2D5A0069F1F8 /* Frameworks */, 180 | 651D14BD1C8B2D5A0069F1F8 /* Resources */, 181 | AFEF31346E93DD8D1CFD292B /* [CP] Embed Pods Frameworks */, 182 | ); 183 | buildRules = ( 184 | ); 185 | dependencies = ( 186 | ); 187 | name = Demo; 188 | productName = Demo; 189 | productReference = 651D14BF1C8B2D5A0069F1F8 /* SubtleVolume.app */; 190 | productType = "com.apple.product-type.application"; 191 | }; 192 | 651D14D21C8B2D5A0069F1F8 /* DemoTests */ = { 193 | isa = PBXNativeTarget; 194 | buildConfigurationList = 651D14EA1C8B2D5A0069F1F8 /* Build configuration list for PBXNativeTarget "DemoTests" */; 195 | buildPhases = ( 196 | 3482C954828656C814F056E5 /* [CP] Check Pods Manifest.lock */, 197 | 651D14CF1C8B2D5A0069F1F8 /* Sources */, 198 | 651D14D01C8B2D5A0069F1F8 /* Frameworks */, 199 | 651D14D11C8B2D5A0069F1F8 /* Resources */, 200 | ); 201 | buildRules = ( 202 | ); 203 | dependencies = ( 204 | 651D14D51C8B2D5A0069F1F8 /* PBXTargetDependency */, 205 | ); 206 | name = DemoTests; 207 | productName = DemoTests; 208 | productReference = 651D14D31C8B2D5A0069F1F8 /* DemoTests.xctest */; 209 | productType = "com.apple.product-type.bundle.unit-test"; 210 | }; 211 | 651D14DD1C8B2D5A0069F1F8 /* DemoUITests */ = { 212 | isa = PBXNativeTarget; 213 | buildConfigurationList = 651D14ED1C8B2D5A0069F1F8 /* Build configuration list for PBXNativeTarget "DemoUITests" */; 214 | buildPhases = ( 215 | 1EFFCA737A12F78EA8733D87 /* [CP] Check Pods Manifest.lock */, 216 | 651D14DA1C8B2D5A0069F1F8 /* Sources */, 217 | 651D14DB1C8B2D5A0069F1F8 /* Frameworks */, 218 | 651D14DC1C8B2D5A0069F1F8 /* Resources */, 219 | ); 220 | buildRules = ( 221 | ); 222 | dependencies = ( 223 | 651D14E01C8B2D5A0069F1F8 /* PBXTargetDependency */, 224 | ); 225 | name = DemoUITests; 226 | productName = DemoUITests; 227 | productReference = 651D14DE1C8B2D5A0069F1F8 /* DemoUITests.xctest */; 228 | productType = "com.apple.product-type.bundle.ui-testing"; 229 | }; 230 | /* End PBXNativeTarget section */ 231 | 232 | /* Begin PBXProject section */ 233 | 651D14B71C8B2D5A0069F1F8 /* Project object */ = { 234 | isa = PBXProject; 235 | attributes = { 236 | LastSwiftUpdateCheck = 0720; 237 | LastUpgradeCheck = 1000; 238 | ORGANIZATIONNAME = "Fancy Pixel"; 239 | TargetAttributes = { 240 | 651D14BE1C8B2D5A0069F1F8 = { 241 | CreatedOnToolsVersion = 7.2.1; 242 | DevelopmentTeam = H72GR44F4M; 243 | LastSwiftMigration = 0920; 244 | ProvisioningStyle = Manual; 245 | }; 246 | 651D14D21C8B2D5A0069F1F8 = { 247 | CreatedOnToolsVersion = 7.2.1; 248 | LastSwiftMigration = 0920; 249 | TestTargetID = 651D14BE1C8B2D5A0069F1F8; 250 | }; 251 | 651D14DD1C8B2D5A0069F1F8 = { 252 | CreatedOnToolsVersion = 7.2.1; 253 | LastSwiftMigration = 0920; 254 | TestTargetID = 651D14BE1C8B2D5A0069F1F8; 255 | }; 256 | }; 257 | }; 258 | buildConfigurationList = 651D14BA1C8B2D5A0069F1F8 /* Build configuration list for PBXProject "Demo" */; 259 | compatibilityVersion = "Xcode 3.2"; 260 | developmentRegion = English; 261 | hasScannedForEncodings = 0; 262 | knownRegions = ( 263 | English, 264 | en, 265 | Base, 266 | ); 267 | mainGroup = 651D14B61C8B2D5A0069F1F8; 268 | productRefGroup = 651D14C01C8B2D5A0069F1F8 /* Products */; 269 | projectDirPath = ""; 270 | projectRoot = ""; 271 | targets = ( 272 | 651D14BE1C8B2D5A0069F1F8 /* Demo */, 273 | 651D14D21C8B2D5A0069F1F8 /* DemoTests */, 274 | 651D14DD1C8B2D5A0069F1F8 /* DemoUITests */, 275 | ); 276 | }; 277 | /* End PBXProject section */ 278 | 279 | /* Begin PBXResourcesBuildPhase section */ 280 | 651D14BD1C8B2D5A0069F1F8 /* Resources */ = { 281 | isa = PBXResourcesBuildPhase; 282 | buildActionMask = 2147483647; 283 | files = ( 284 | 651D14CD1C8B2D5A0069F1F8 /* LaunchScreen.storyboard in Resources */, 285 | 651D14CA1C8B2D5A0069F1F8 /* Assets.xcassets in Resources */, 286 | 651D14C81C8B2D5A0069F1F8 /* Main.storyboard in Resources */, 287 | ); 288 | runOnlyForDeploymentPostprocessing = 0; 289 | }; 290 | 651D14D11C8B2D5A0069F1F8 /* Resources */ = { 291 | isa = PBXResourcesBuildPhase; 292 | buildActionMask = 2147483647; 293 | files = ( 294 | ); 295 | runOnlyForDeploymentPostprocessing = 0; 296 | }; 297 | 651D14DC1C8B2D5A0069F1F8 /* Resources */ = { 298 | isa = PBXResourcesBuildPhase; 299 | buildActionMask = 2147483647; 300 | files = ( 301 | ); 302 | runOnlyForDeploymentPostprocessing = 0; 303 | }; 304 | /* End PBXResourcesBuildPhase section */ 305 | 306 | /* Begin PBXShellScriptBuildPhase section */ 307 | 1EFFCA737A12F78EA8733D87 /* [CP] Check Pods Manifest.lock */ = { 308 | isa = PBXShellScriptBuildPhase; 309 | buildActionMask = 2147483647; 310 | files = ( 311 | ); 312 | inputPaths = ( 313 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 314 | "${PODS_ROOT}/Manifest.lock", 315 | ); 316 | name = "[CP] Check Pods Manifest.lock"; 317 | outputPaths = ( 318 | "$(DERIVED_FILE_DIR)/Pods-DemoUITests-checkManifestLockResult.txt", 319 | ); 320 | runOnlyForDeploymentPostprocessing = 0; 321 | shellPath = /bin/sh; 322 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 323 | showEnvVarsInLog = 0; 324 | }; 325 | 3482C954828656C814F056E5 /* [CP] Check Pods Manifest.lock */ = { 326 | isa = PBXShellScriptBuildPhase; 327 | buildActionMask = 2147483647; 328 | files = ( 329 | ); 330 | inputPaths = ( 331 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 332 | "${PODS_ROOT}/Manifest.lock", 333 | ); 334 | name = "[CP] Check Pods Manifest.lock"; 335 | outputPaths = ( 336 | "$(DERIVED_FILE_DIR)/Pods-DemoTests-checkManifestLockResult.txt", 337 | ); 338 | runOnlyForDeploymentPostprocessing = 0; 339 | shellPath = /bin/sh; 340 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 341 | showEnvVarsInLog = 0; 342 | }; 343 | 7B7D91373E58A1637260239D /* [CP] Check Pods Manifest.lock */ = { 344 | isa = PBXShellScriptBuildPhase; 345 | buildActionMask = 2147483647; 346 | files = ( 347 | ); 348 | inputPaths = ( 349 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 350 | "${PODS_ROOT}/Manifest.lock", 351 | ); 352 | name = "[CP] Check Pods Manifest.lock"; 353 | outputPaths = ( 354 | "$(DERIVED_FILE_DIR)/Pods-Demo-checkManifestLockResult.txt", 355 | ); 356 | runOnlyForDeploymentPostprocessing = 0; 357 | shellPath = /bin/sh; 358 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 359 | showEnvVarsInLog = 0; 360 | }; 361 | AFEF31346E93DD8D1CFD292B /* [CP] Embed Pods Frameworks */ = { 362 | isa = PBXShellScriptBuildPhase; 363 | buildActionMask = 2147483647; 364 | files = ( 365 | ); 366 | inputPaths = ( 367 | "${SRCROOT}/Pods/Target Support Files/Pods-Demo/Pods-Demo-frameworks.sh", 368 | "${BUILT_PRODUCTS_DIR}/SubtleVolume/SubtleVolume.framework", 369 | ); 370 | name = "[CP] Embed Pods Frameworks"; 371 | outputPaths = ( 372 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SubtleVolume.framework", 373 | ); 374 | runOnlyForDeploymentPostprocessing = 0; 375 | shellPath = /bin/sh; 376 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Demo/Pods-Demo-frameworks.sh\"\n"; 377 | showEnvVarsInLog = 0; 378 | }; 379 | /* End PBXShellScriptBuildPhase section */ 380 | 381 | /* Begin PBXSourcesBuildPhase section */ 382 | 651D14BB1C8B2D5A0069F1F8 /* Sources */ = { 383 | isa = PBXSourcesBuildPhase; 384 | buildActionMask = 2147483647; 385 | files = ( 386 | 651D14C51C8B2D5A0069F1F8 /* ViewController.swift in Sources */, 387 | 651D14C31C8B2D5A0069F1F8 /* AppDelegate.swift in Sources */, 388 | ); 389 | runOnlyForDeploymentPostprocessing = 0; 390 | }; 391 | 651D14CF1C8B2D5A0069F1F8 /* Sources */ = { 392 | isa = PBXSourcesBuildPhase; 393 | buildActionMask = 2147483647; 394 | files = ( 395 | 651D14D81C8B2D5A0069F1F8 /* DemoTests.swift in Sources */, 396 | ); 397 | runOnlyForDeploymentPostprocessing = 0; 398 | }; 399 | 651D14DA1C8B2D5A0069F1F8 /* Sources */ = { 400 | isa = PBXSourcesBuildPhase; 401 | buildActionMask = 2147483647; 402 | files = ( 403 | 651D14E31C8B2D5A0069F1F8 /* DemoUITests.swift in Sources */, 404 | ); 405 | runOnlyForDeploymentPostprocessing = 0; 406 | }; 407 | /* End PBXSourcesBuildPhase section */ 408 | 409 | /* Begin PBXTargetDependency section */ 410 | 651D14D51C8B2D5A0069F1F8 /* PBXTargetDependency */ = { 411 | isa = PBXTargetDependency; 412 | target = 651D14BE1C8B2D5A0069F1F8 /* Demo */; 413 | targetProxy = 651D14D41C8B2D5A0069F1F8 /* PBXContainerItemProxy */; 414 | }; 415 | 651D14E01C8B2D5A0069F1F8 /* PBXTargetDependency */ = { 416 | isa = PBXTargetDependency; 417 | target = 651D14BE1C8B2D5A0069F1F8 /* Demo */; 418 | targetProxy = 651D14DF1C8B2D5A0069F1F8 /* PBXContainerItemProxy */; 419 | }; 420 | /* End PBXTargetDependency section */ 421 | 422 | /* Begin PBXVariantGroup section */ 423 | 651D14C61C8B2D5A0069F1F8 /* Main.storyboard */ = { 424 | isa = PBXVariantGroup; 425 | children = ( 426 | 651D14C71C8B2D5A0069F1F8 /* Base */, 427 | ); 428 | name = Main.storyboard; 429 | sourceTree = ""; 430 | }; 431 | 651D14CB1C8B2D5A0069F1F8 /* LaunchScreen.storyboard */ = { 432 | isa = PBXVariantGroup; 433 | children = ( 434 | 651D14CC1C8B2D5A0069F1F8 /* Base */, 435 | ); 436 | name = LaunchScreen.storyboard; 437 | sourceTree = ""; 438 | }; 439 | /* End PBXVariantGroup section */ 440 | 441 | /* Begin XCBuildConfiguration section */ 442 | 651D14E51C8B2D5A0069F1F8 /* Debug */ = { 443 | isa = XCBuildConfiguration; 444 | buildSettings = { 445 | ALWAYS_SEARCH_USER_PATHS = NO; 446 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 447 | CLANG_CXX_LIBRARY = "libc++"; 448 | CLANG_ENABLE_MODULES = YES; 449 | CLANG_ENABLE_OBJC_ARC = YES; 450 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 451 | CLANG_WARN_BOOL_CONVERSION = YES; 452 | CLANG_WARN_COMMA = YES; 453 | CLANG_WARN_CONSTANT_CONVERSION = YES; 454 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 455 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 456 | CLANG_WARN_EMPTY_BODY = YES; 457 | CLANG_WARN_ENUM_CONVERSION = YES; 458 | CLANG_WARN_INFINITE_RECURSION = YES; 459 | CLANG_WARN_INT_CONVERSION = YES; 460 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 461 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 462 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 463 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 464 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 465 | CLANG_WARN_STRICT_PROTOTYPES = YES; 466 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 467 | CLANG_WARN_UNREACHABLE_CODE = YES; 468 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 469 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 470 | COPY_PHASE_STRIP = NO; 471 | DEBUG_INFORMATION_FORMAT = dwarf; 472 | ENABLE_STRICT_OBJC_MSGSEND = YES; 473 | ENABLE_TESTABILITY = YES; 474 | GCC_C_LANGUAGE_STANDARD = gnu99; 475 | GCC_DYNAMIC_NO_PIC = NO; 476 | GCC_NO_COMMON_BLOCKS = YES; 477 | GCC_OPTIMIZATION_LEVEL = 0; 478 | GCC_PREPROCESSOR_DEFINITIONS = ( 479 | "DEBUG=1", 480 | "$(inherited)", 481 | ); 482 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 483 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 484 | GCC_WARN_UNDECLARED_SELECTOR = YES; 485 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 486 | GCC_WARN_UNUSED_FUNCTION = YES; 487 | GCC_WARN_UNUSED_VARIABLE = YES; 488 | IPHONEOS_DEPLOYMENT_TARGET = 9.2; 489 | MTL_ENABLE_DEBUG_INFO = YES; 490 | ONLY_ACTIVE_ARCH = YES; 491 | SDKROOT = iphoneos; 492 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 493 | SWIFT_VERSION = 5.0; 494 | }; 495 | name = Debug; 496 | }; 497 | 651D14E61C8B2D5A0069F1F8 /* Release */ = { 498 | isa = XCBuildConfiguration; 499 | buildSettings = { 500 | ALWAYS_SEARCH_USER_PATHS = NO; 501 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 502 | CLANG_CXX_LIBRARY = "libc++"; 503 | CLANG_ENABLE_MODULES = YES; 504 | CLANG_ENABLE_OBJC_ARC = YES; 505 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 506 | CLANG_WARN_BOOL_CONVERSION = YES; 507 | CLANG_WARN_COMMA = YES; 508 | CLANG_WARN_CONSTANT_CONVERSION = YES; 509 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 510 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 511 | CLANG_WARN_EMPTY_BODY = YES; 512 | CLANG_WARN_ENUM_CONVERSION = YES; 513 | CLANG_WARN_INFINITE_RECURSION = YES; 514 | CLANG_WARN_INT_CONVERSION = YES; 515 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 516 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 517 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 518 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 519 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 520 | CLANG_WARN_STRICT_PROTOTYPES = YES; 521 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 522 | CLANG_WARN_UNREACHABLE_CODE = YES; 523 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 524 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 525 | COPY_PHASE_STRIP = NO; 526 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 527 | ENABLE_NS_ASSERTIONS = NO; 528 | ENABLE_STRICT_OBJC_MSGSEND = YES; 529 | GCC_C_LANGUAGE_STANDARD = gnu99; 530 | GCC_NO_COMMON_BLOCKS = YES; 531 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 532 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 533 | GCC_WARN_UNDECLARED_SELECTOR = YES; 534 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 535 | GCC_WARN_UNUSED_FUNCTION = YES; 536 | GCC_WARN_UNUSED_VARIABLE = YES; 537 | IPHONEOS_DEPLOYMENT_TARGET = 9.2; 538 | MTL_ENABLE_DEBUG_INFO = NO; 539 | SDKROOT = iphoneos; 540 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 541 | SWIFT_VERSION = 5.0; 542 | VALIDATE_PRODUCT = YES; 543 | }; 544 | name = Release; 545 | }; 546 | 651D14E81C8B2D5A0069F1F8 /* Debug */ = { 547 | isa = XCBuildConfiguration; 548 | baseConfigurationReference = A003C72FE70DB155A57B135C /* Pods-Demo.debug.xcconfig */; 549 | buildSettings = { 550 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)"; 551 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 552 | CODE_SIGN_STYLE = Manual; 553 | DEVELOPMENT_TEAM = H72GR44F4M; 554 | INFOPLIST_FILE = Demo/Info.plist; 555 | IPHONEOS_DEPLOYMENT_TARGET = 11.0; 556 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 557 | PRODUCT_BUNDLE_IDENTIFIER = it.fancypixel.Demo; 558 | PRODUCT_MODULE_NAME = Demo; 559 | PRODUCT_NAME = SubtleVolume; 560 | PROVISIONING_PROFILE = "f7168a28-8f3d-4e45-bcbd-a54a870789e7"; 561 | PROVISIONING_PROFILE_SPECIFIER = Development; 562 | SWIFT_COMPILATION_MODE = wholemodule; 563 | SWIFT_SWIFT3_OBJC_INFERENCE = Default; 564 | SWIFT_VERSION = 5.0; 565 | TARGETED_DEVICE_FAMILY = "1,2"; 566 | }; 567 | name = Debug; 568 | }; 569 | 651D14E91C8B2D5A0069F1F8 /* Release */ = { 570 | isa = XCBuildConfiguration; 571 | baseConfigurationReference = 01EFE441231C200E2F411327 /* Pods-Demo.release.xcconfig */; 572 | buildSettings = { 573 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)"; 574 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 575 | CODE_SIGN_STYLE = Manual; 576 | DEVELOPMENT_TEAM = H72GR44F4M; 577 | INFOPLIST_FILE = Demo/Info.plist; 578 | IPHONEOS_DEPLOYMENT_TARGET = 11.0; 579 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 580 | PRODUCT_BUNDLE_IDENTIFIER = it.fancypixel.Demo; 581 | PRODUCT_MODULE_NAME = Demo; 582 | PRODUCT_NAME = SubtleVolume; 583 | PROVISIONING_PROFILE = "f7168a28-8f3d-4e45-bcbd-a54a870789e7"; 584 | PROVISIONING_PROFILE_SPECIFIER = Development; 585 | SWIFT_SWIFT3_OBJC_INFERENCE = Default; 586 | SWIFT_VERSION = 5.0; 587 | TARGETED_DEVICE_FAMILY = "1,2"; 588 | }; 589 | name = Release; 590 | }; 591 | 651D14EB1C8B2D5A0069F1F8 /* Debug */ = { 592 | isa = XCBuildConfiguration; 593 | baseConfigurationReference = 0F31BA8A2CFC2F7EB36E0D9A /* Pods-DemoTests.debug.xcconfig */; 594 | buildSettings = { 595 | BUNDLE_LOADER = "$(TEST_HOST)"; 596 | INFOPLIST_FILE = DemoTests/Info.plist; 597 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 598 | PRODUCT_BUNDLE_IDENTIFIER = it.fancypixel.DemoTests; 599 | PRODUCT_NAME = "$(TARGET_NAME)"; 600 | SWIFT_SWIFT3_OBJC_INFERENCE = On; 601 | SWIFT_VERSION = 4.2; 602 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Demo.app/Demo"; 603 | }; 604 | name = Debug; 605 | }; 606 | 651D14EC1C8B2D5A0069F1F8 /* Release */ = { 607 | isa = XCBuildConfiguration; 608 | baseConfigurationReference = 9773A999DEF09843719C4C50 /* Pods-DemoTests.release.xcconfig */; 609 | buildSettings = { 610 | BUNDLE_LOADER = "$(TEST_HOST)"; 611 | INFOPLIST_FILE = DemoTests/Info.plist; 612 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 613 | PRODUCT_BUNDLE_IDENTIFIER = it.fancypixel.DemoTests; 614 | PRODUCT_NAME = "$(TARGET_NAME)"; 615 | SWIFT_SWIFT3_OBJC_INFERENCE = On; 616 | SWIFT_VERSION = 4.2; 617 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Demo.app/Demo"; 618 | }; 619 | name = Release; 620 | }; 621 | 651D14EE1C8B2D5A0069F1F8 /* Debug */ = { 622 | isa = XCBuildConfiguration; 623 | baseConfigurationReference = A48D212430647B98DB9139C2 /* Pods-DemoUITests.debug.xcconfig */; 624 | buildSettings = { 625 | INFOPLIST_FILE = DemoUITests/Info.plist; 626 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 627 | PRODUCT_BUNDLE_IDENTIFIER = it.fancypixel.DemoUITests; 628 | PRODUCT_NAME = "$(TARGET_NAME)"; 629 | SWIFT_SWIFT3_OBJC_INFERENCE = On; 630 | SWIFT_VERSION = 4.2; 631 | TEST_TARGET_NAME = Demo; 632 | USES_XCTRUNNER = YES; 633 | }; 634 | name = Debug; 635 | }; 636 | 651D14EF1C8B2D5A0069F1F8 /* Release */ = { 637 | isa = XCBuildConfiguration; 638 | baseConfigurationReference = 38639498761859C38981F549 /* Pods-DemoUITests.release.xcconfig */; 639 | buildSettings = { 640 | INFOPLIST_FILE = DemoUITests/Info.plist; 641 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 642 | PRODUCT_BUNDLE_IDENTIFIER = it.fancypixel.DemoUITests; 643 | PRODUCT_NAME = "$(TARGET_NAME)"; 644 | SWIFT_SWIFT3_OBJC_INFERENCE = On; 645 | SWIFT_VERSION = 4.2; 646 | TEST_TARGET_NAME = Demo; 647 | USES_XCTRUNNER = YES; 648 | }; 649 | name = Release; 650 | }; 651 | /* End XCBuildConfiguration section */ 652 | 653 | /* Begin XCConfigurationList section */ 654 | 651D14BA1C8B2D5A0069F1F8 /* Build configuration list for PBXProject "Demo" */ = { 655 | isa = XCConfigurationList; 656 | buildConfigurations = ( 657 | 651D14E51C8B2D5A0069F1F8 /* Debug */, 658 | 651D14E61C8B2D5A0069F1F8 /* Release */, 659 | ); 660 | defaultConfigurationIsVisible = 0; 661 | defaultConfigurationName = Release; 662 | }; 663 | 651D14E71C8B2D5A0069F1F8 /* Build configuration list for PBXNativeTarget "Demo" */ = { 664 | isa = XCConfigurationList; 665 | buildConfigurations = ( 666 | 651D14E81C8B2D5A0069F1F8 /* Debug */, 667 | 651D14E91C8B2D5A0069F1F8 /* Release */, 668 | ); 669 | defaultConfigurationIsVisible = 0; 670 | defaultConfigurationName = Release; 671 | }; 672 | 651D14EA1C8B2D5A0069F1F8 /* Build configuration list for PBXNativeTarget "DemoTests" */ = { 673 | isa = XCConfigurationList; 674 | buildConfigurations = ( 675 | 651D14EB1C8B2D5A0069F1F8 /* Debug */, 676 | 651D14EC1C8B2D5A0069F1F8 /* Release */, 677 | ); 678 | defaultConfigurationIsVisible = 0; 679 | defaultConfigurationName = Release; 680 | }; 681 | 651D14ED1C8B2D5A0069F1F8 /* Build configuration list for PBXNativeTarget "DemoUITests" */ = { 682 | isa = XCConfigurationList; 683 | buildConfigurations = ( 684 | 651D14EE1C8B2D5A0069F1F8 /* Debug */, 685 | 651D14EF1C8B2D5A0069F1F8 /* Release */, 686 | ); 687 | defaultConfigurationIsVisible = 0; 688 | defaultConfigurationName = Release; 689 | }; 690 | /* End XCConfigurationList section */ 691 | }; 692 | rootObject = 651D14B71C8B2D5A0069F1F8 /* Project object */; 693 | } 694 | -------------------------------------------------------------------------------- /Demo/Demo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Demo/Demo.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Demo/Demo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Demo/Demo/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // Demo 4 | // 5 | // Created by Andrea Mazzini on 05/03/16. 6 | // Copyright © 2016 Fancy Pixel. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | var window: UIWindow? 14 | } 15 | 16 | -------------------------------------------------------------------------------- /Demo/Demo/Assets.xcassets/AppIcon.appiconset/AppIcon-1024.0x1024.0@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andreamazz/SubtleVolume/3b92bfe508d56ac9a0424676d0ed9c18ca546edc/Demo/Demo/Assets.xcassets/AppIcon.appiconset/AppIcon-1024.0x1024.0@1x.png -------------------------------------------------------------------------------- /Demo/Demo/Assets.xcassets/AppIcon.appiconset/AppIcon-20.0x20.0@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andreamazz/SubtleVolume/3b92bfe508d56ac9a0424676d0ed9c18ca546edc/Demo/Demo/Assets.xcassets/AppIcon.appiconset/AppIcon-20.0x20.0@1x.png -------------------------------------------------------------------------------- /Demo/Demo/Assets.xcassets/AppIcon.appiconset/AppIcon-20.0x20.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andreamazz/SubtleVolume/3b92bfe508d56ac9a0424676d0ed9c18ca546edc/Demo/Demo/Assets.xcassets/AppIcon.appiconset/AppIcon-20.0x20.0@2x.png -------------------------------------------------------------------------------- /Demo/Demo/Assets.xcassets/AppIcon.appiconset/AppIcon-20.0x20.0@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andreamazz/SubtleVolume/3b92bfe508d56ac9a0424676d0ed9c18ca546edc/Demo/Demo/Assets.xcassets/AppIcon.appiconset/AppIcon-20.0x20.0@3x.png -------------------------------------------------------------------------------- /Demo/Demo/Assets.xcassets/AppIcon.appiconset/AppIcon-29.0x29.0@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andreamazz/SubtleVolume/3b92bfe508d56ac9a0424676d0ed9c18ca546edc/Demo/Demo/Assets.xcassets/AppIcon.appiconset/AppIcon-29.0x29.0@1x.png -------------------------------------------------------------------------------- /Demo/Demo/Assets.xcassets/AppIcon.appiconset/AppIcon-29.0x29.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andreamazz/SubtleVolume/3b92bfe508d56ac9a0424676d0ed9c18ca546edc/Demo/Demo/Assets.xcassets/AppIcon.appiconset/AppIcon-29.0x29.0@2x.png -------------------------------------------------------------------------------- /Demo/Demo/Assets.xcassets/AppIcon.appiconset/AppIcon-29.0x29.0@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andreamazz/SubtleVolume/3b92bfe508d56ac9a0424676d0ed9c18ca546edc/Demo/Demo/Assets.xcassets/AppIcon.appiconset/AppIcon-29.0x29.0@3x.png -------------------------------------------------------------------------------- /Demo/Demo/Assets.xcassets/AppIcon.appiconset/AppIcon-40.0x40.0@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andreamazz/SubtleVolume/3b92bfe508d56ac9a0424676d0ed9c18ca546edc/Demo/Demo/Assets.xcassets/AppIcon.appiconset/AppIcon-40.0x40.0@1x.png -------------------------------------------------------------------------------- /Demo/Demo/Assets.xcassets/AppIcon.appiconset/AppIcon-40.0x40.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andreamazz/SubtleVolume/3b92bfe508d56ac9a0424676d0ed9c18ca546edc/Demo/Demo/Assets.xcassets/AppIcon.appiconset/AppIcon-40.0x40.0@2x.png -------------------------------------------------------------------------------- /Demo/Demo/Assets.xcassets/AppIcon.appiconset/AppIcon-40.0x40.0@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andreamazz/SubtleVolume/3b92bfe508d56ac9a0424676d0ed9c18ca546edc/Demo/Demo/Assets.xcassets/AppIcon.appiconset/AppIcon-40.0x40.0@3x.png -------------------------------------------------------------------------------- /Demo/Demo/Assets.xcassets/AppIcon.appiconset/AppIcon-60.0x60.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andreamazz/SubtleVolume/3b92bfe508d56ac9a0424676d0ed9c18ca546edc/Demo/Demo/Assets.xcassets/AppIcon.appiconset/AppIcon-60.0x60.0@2x.png -------------------------------------------------------------------------------- /Demo/Demo/Assets.xcassets/AppIcon.appiconset/AppIcon-60.0x60.0@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andreamazz/SubtleVolume/3b92bfe508d56ac9a0424676d0ed9c18ca546edc/Demo/Demo/Assets.xcassets/AppIcon.appiconset/AppIcon-60.0x60.0@3x.png -------------------------------------------------------------------------------- /Demo/Demo/Assets.xcassets/AppIcon.appiconset/AppIcon-76.0x76.0@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andreamazz/SubtleVolume/3b92bfe508d56ac9a0424676d0ed9c18ca546edc/Demo/Demo/Assets.xcassets/AppIcon.appiconset/AppIcon-76.0x76.0@1x.png -------------------------------------------------------------------------------- /Demo/Demo/Assets.xcassets/AppIcon.appiconset/AppIcon-76.0x76.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andreamazz/SubtleVolume/3b92bfe508d56ac9a0424676d0ed9c18ca546edc/Demo/Demo/Assets.xcassets/AppIcon.appiconset/AppIcon-76.0x76.0@2x.png -------------------------------------------------------------------------------- /Demo/Demo/Assets.xcassets/AppIcon.appiconset/AppIcon-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andreamazz/SubtleVolume/3b92bfe508d56ac9a0424676d0ed9c18ca546edc/Demo/Demo/Assets.xcassets/AppIcon.appiconset/AppIcon-83.5x83.5@2x.png -------------------------------------------------------------------------------- /Demo/Demo/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "appicon", 4 | "version" : 1 5 | }, 6 | "images" : [ 7 | { 8 | "size" : "20x20", 9 | "filename" : "AppIcon-20.0x20.0@2x.png", 10 | "idiom" : "iphone", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "size" : "20x20", 15 | "filename" : "AppIcon-20.0x20.0@3x.png", 16 | "idiom" : "iphone", 17 | "scale" : "3x" 18 | }, 19 | { 20 | "size" : "29x29", 21 | "filename" : "AppIcon-29.0x29.0@2x.png", 22 | "idiom" : "iphone", 23 | "scale" : "2x" 24 | }, 25 | { 26 | "size" : "29x29", 27 | "filename" : "AppIcon-29.0x29.0@3x.png", 28 | "idiom" : "iphone", 29 | "scale" : "3x" 30 | }, 31 | { 32 | "size" : "40x40", 33 | "filename" : "AppIcon-40.0x40.0@2x.png", 34 | "idiom" : "iphone", 35 | "scale" : "2x" 36 | }, 37 | { 38 | "size" : "40x40", 39 | "filename" : "AppIcon-40.0x40.0@3x.png", 40 | "idiom" : "iphone", 41 | "scale" : "3x" 42 | }, 43 | { 44 | "size" : "60x60", 45 | "filename" : "AppIcon-60.0x60.0@2x.png", 46 | "idiom" : "iphone", 47 | "scale" : "2x" 48 | }, 49 | { 50 | "size" : "60x60", 51 | "filename" : "AppIcon-60.0x60.0@3x.png", 52 | "idiom" : "iphone", 53 | "scale" : "3x" 54 | }, 55 | { 56 | "size" : "20x20", 57 | "filename" : "AppIcon-20.0x20.0@1x.png", 58 | "idiom" : "ipad", 59 | "scale" : "1x" 60 | }, 61 | { 62 | "size" : "20x20", 63 | "filename" : "AppIcon-20.0x20.0@2x.png", 64 | "idiom" : "ipad", 65 | "scale" : "2x" 66 | }, 67 | { 68 | "size" : "29x29", 69 | "filename" : "AppIcon-29.0x29.0@1x.png", 70 | "idiom" : "ipad", 71 | "scale" : "1x" 72 | }, 73 | { 74 | "size" : "29x29", 75 | "filename" : "AppIcon-29.0x29.0@2x.png", 76 | "idiom" : "ipad", 77 | "scale" : "2x" 78 | }, 79 | { 80 | "size" : "40x40", 81 | "filename" : "AppIcon-40.0x40.0@1x.png", 82 | "idiom" : "ipad", 83 | "scale" : "1x" 84 | }, 85 | { 86 | "size" : "40x40", 87 | "filename" : "AppIcon-40.0x40.0@2x.png", 88 | "idiom" : "ipad", 89 | "scale" : "2x" 90 | }, 91 | { 92 | "size" : "76x76", 93 | "filename" : "AppIcon-76.0x76.0@1x.png", 94 | "idiom" : "ipad", 95 | "scale" : "1x" 96 | }, 97 | { 98 | "size" : "76x76", 99 | "filename" : "AppIcon-76.0x76.0@2x.png", 100 | "idiom" : "ipad", 101 | "scale" : "2x" 102 | }, 103 | { 104 | "size" : "83.5x83.5", 105 | "filename" : "AppIcon-83.5x83.5@2x.png", 106 | "idiom" : "ipad", 107 | "scale" : "2x" 108 | }, 109 | { 110 | "size" : "1024x1024", 111 | "filename" : "AppIcon-1024.0x1024.0@1x.png", 112 | "idiom" : "ios-marketing", 113 | "scale" : "1x" 114 | } 115 | ] 116 | } -------------------------------------------------------------------------------- /Demo/Demo/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Demo/Demo/Assets.xcassets/logo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "logo.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Demo/Demo/Assets.xcassets/logo.imageset/logo.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andreamazz/SubtleVolume/3b92bfe508d56ac9a0424676d0ed9c18ca546edc/Demo/Demo/Assets.xcassets/logo.imageset/logo.pdf -------------------------------------------------------------------------------- /Demo/Demo/Assets.xcassets/minus.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "minus.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Demo/Demo/Assets.xcassets/minus.imageset/minus.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andreamazz/SubtleVolume/3b92bfe508d56ac9a0424676d0ed9c18ca546edc/Demo/Demo/Assets.xcassets/minus.imageset/minus.pdf -------------------------------------------------------------------------------- /Demo/Demo/Assets.xcassets/plus.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "plus.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Demo/Demo/Assets.xcassets/plus.imageset/plus.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andreamazz/SubtleVolume/3b92bfe508d56ac9a0424676d0ed9c18ca546edc/Demo/Demo/Assets.xcassets/plus.imageset/plus.pdf -------------------------------------------------------------------------------- /Demo/Demo/Assets.xcassets/volume-off.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "volume-off.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Demo/Demo/Assets.xcassets/volume-off.imageset/volume-off.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andreamazz/SubtleVolume/3b92bfe508d56ac9a0424676d0ed9c18ca546edc/Demo/Demo/Assets.xcassets/volume-off.imageset/volume-off.pdf -------------------------------------------------------------------------------- /Demo/Demo/Assets.xcassets/volume-on.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "volume-on.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Demo/Demo/Assets.xcassets/volume-on.imageset/volume-on.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andreamazz/SubtleVolume/3b92bfe508d56ac9a0424676d0ed9c18ca546edc/Demo/Demo/Assets.xcassets/volume-on.imageset/volume-on.pdf -------------------------------------------------------------------------------- /Demo/Demo/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /Demo/Demo/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 42 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /Demo/Demo/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UIStatusBarHidden 34 | 35 | UIStatusBarStyle 36 | UIStatusBarStyleLightContent 37 | UISupportedInterfaceOrientations 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationLandscapeLeft 41 | UIInterfaceOrientationLandscapeRight 42 | UIInterfaceOrientationPortraitUpsideDown 43 | 44 | UIViewControllerBasedStatusBarAppearance 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /Demo/Demo/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // Demo 4 | // 5 | // Created by Andrea Mazzini on 05/03/16. 6 | // Copyright © 2016 Fancy Pixel. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import SubtleVolume 11 | 12 | class ViewController: UIViewController { 13 | 14 | let volume = SubtleVolume(style: .rounded) 15 | var statusBarVisible = true 16 | 17 | override func viewDidLoad() { 18 | super.viewDidLoad() 19 | 20 | volume.barTintColor = .white 21 | volume.barBackgroundColor = UIColor.white.withAlphaComponent(0.3) 22 | volume.animation = .fadeIn 23 | volume.padding = CGSize(width: 4, height: 8) 24 | volume.delegate = self 25 | 26 | view.addSubview(volume) 27 | 28 | NotificationCenter.default.addObserver(volume, selector: #selector(SubtleVolume.resume), name: UIApplication.didBecomeActiveNotification, object: nil) 29 | } 30 | 31 | override func viewDidLayoutSubviews() { 32 | super.viewDidLayoutSubviews() 33 | 34 | if view.safeAreaInsets.top > 0 { 35 | volume.padding = CGSize(width: 2, height: 8) 36 | volume.frame = CGRect(x: 16, y: 8, width: 60, height: 20) 37 | } else { 38 | volume.frame = CGRect(x: 20, y: UIApplication.shared.statusBarFrame.height, width: UIScreen.main.bounds.width - 40, height: 20) 39 | } 40 | } 41 | 42 | @IBAction func minusAction() { 43 | do { 44 | try volume.decreaseVolume(animated: true) 45 | } catch { 46 | print("The demo must run on a real device, not the simulator") 47 | } 48 | } 49 | 50 | @IBAction func plusAction() { 51 | do { 52 | try volume.setVolumeLevel(volume.volumeLevel + 0.05, animated: true) 53 | } catch { 54 | print("The demo must run on a real device, not the simulator") 55 | } 56 | } 57 | 58 | override var preferredStatusBarStyle: UIStatusBarStyle { 59 | return .lightContent 60 | } 61 | 62 | override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation { 63 | return .slide 64 | } 65 | 66 | override var prefersStatusBarHidden: Bool { 67 | return !statusBarVisible 68 | } 69 | } 70 | 71 | extension ViewController: SubtleVolumeDelegate { 72 | func subtleVolume(_ subtleVolume: SubtleVolume, accessoryFor value: Double) -> UIImage? { 73 | return value > 0 ? #imageLiteral(resourceName: "volume-on.pdf") : #imageLiteral(resourceName: "volume-off.pdf") 74 | } 75 | 76 | func subtleVolume(_ subtleVolume: SubtleVolume, didChange value: Double) { 77 | if !subtleVolume.isAnimating && view.safeAreaInsets.top > 0 { 78 | statusBarVisible = true 79 | UIView.animate(withDuration: 0.1) { 80 | self.setNeedsStatusBarAppearanceUpdate() 81 | } 82 | } 83 | } 84 | 85 | func subtleVolume(_ subtleVolume: SubtleVolume, willChange value: Double) { 86 | if !subtleVolume.isAnimating && view.safeAreaInsets.top > 0 { 87 | statusBarVisible = false 88 | UIView.animate(withDuration: 0.1) { 89 | self.setNeedsStatusBarAppearanceUpdate() 90 | } 91 | } 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /Demo/DemoTests/DemoTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DemoTests.swift 3 | // DemoTests 4 | // 5 | // Created by Andrea Mazzini on 05/03/16. 6 | // Copyright © 2016 Fancy Pixel. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | 11 | class DemoTests: XCTestCase { 12 | 13 | override func setUp() { 14 | super.setUp() 15 | // Put setup code here. This method is called before the invocation of each test method in the class. 16 | } 17 | 18 | override func tearDown() { 19 | // Put teardown code here. This method is called after the invocation of each test method in the class. 20 | super.tearDown() 21 | } 22 | 23 | func testExample() { 24 | // This is an example of a functional test case. 25 | // Use XCTAssert and related functions to verify your tests produce the correct results. 26 | } 27 | 28 | func testPerformanceExample() { 29 | // This is an example of a performance test case. 30 | self.measure { 31 | // Put the code you want to measure the time of here. 32 | } 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /Demo/DemoTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Demo/DemoUITests/DemoUITests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DemoUITests.swift 3 | // DemoUITests 4 | // 5 | // Created by Andrea Mazzini on 05/03/16. 6 | // Copyright © 2016 Fancy Pixel. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | 11 | class DemoUITests: XCTestCase { 12 | 13 | override func setUp() { 14 | super.setUp() 15 | 16 | // Put setup code here. This method is called before the invocation of each test method in the class. 17 | 18 | // In UI tests it is usually best to stop immediately when a failure occurs. 19 | continueAfterFailure = false 20 | // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. 21 | XCUIApplication().launch() 22 | 23 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. 24 | } 25 | 26 | override func tearDown() { 27 | // Put teardown code here. This method is called after the invocation of each test method in the class. 28 | super.tearDown() 29 | } 30 | 31 | func testExample() { 32 | // Use recording to get started writing UI tests. 33 | // Use XCTAssert and related functions to verify your tests produce the correct results. 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /Demo/DemoUITests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Demo/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment this line to define a global platform for your project 2 | platform :ios, '8.0' 3 | # Uncomment this line if you're using Swift 4 | use_frameworks! 5 | 6 | target 'Demo' do 7 | pod 'SubtleVolume', path: '../' 8 | end 9 | 10 | target 'DemoTests' do 11 | 12 | end 13 | 14 | target 'DemoUITests' do 15 | 16 | end 17 | 18 | -------------------------------------------------------------------------------- /Demo/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - SubtleVolume (0.5.2) 3 | 4 | DEPENDENCIES: 5 | - SubtleVolume (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | SubtleVolume: 9 | :path: "../" 10 | 11 | SPEC CHECKSUMS: 12 | SubtleVolume: dc72d1fce4af2facc3a946c816c1c089e4cf9895 13 | 14 | PODFILE CHECKSUM: 225ff7beebfd5bf4f20f8057415fc20377a0b296 15 | 16 | COCOAPODS: 1.5.0 17 | -------------------------------------------------------------------------------- /Demo/Pods/Local Podspecs/SubtleVolume.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "SubtleVolume", 3 | "version": "0.5.2", 4 | "license": "MIT", 5 | "summary": "Replace the system volume popup with a more subtle indicator", 6 | "description": "Drop in control that shows the system volume when the user changes it with the volume rocker in a more subtle and less obtrusive way.", 7 | "homepage": "https://github.com/andreamazz/SubtleVolume", 8 | "social_media_url": "https://twitter.com/theandreamazz", 9 | "authors": { 10 | "Andrea Mazzini": "andrea.mazzini@gmail.com" 11 | }, 12 | "source": { 13 | "git": "https://github.com/andreamazz/SubtleVolume.git", 14 | "tag": "0.5.2" 15 | }, 16 | "platforms": { 17 | "ios": "8.0" 18 | }, 19 | "swift_version": "4.2", 20 | "source_files": "Source/*.swift", 21 | "requires_arc": true 22 | } 23 | -------------------------------------------------------------------------------- /Demo/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - SubtleVolume (0.5.2) 3 | 4 | DEPENDENCIES: 5 | - SubtleVolume (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | SubtleVolume: 9 | :path: "../" 10 | 11 | SPEC CHECKSUMS: 12 | SubtleVolume: dc72d1fce4af2facc3a946c816c1c089e4cf9895 13 | 14 | PODFILE CHECKSUM: 225ff7beebfd5bf4f20f8057415fc20377a0b296 15 | 16 | COCOAPODS: 1.5.0 17 | -------------------------------------------------------------------------------- /Demo/Pods/Pods.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 04F377D952092E9DDB067D4B7E8150B0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */; }; 11 | 1483883DA8FC92A410682B04798D8AF0 /* SubtleVolume-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 92ED1F5D73DF0D092D119556A611769D /* SubtleVolume-dummy.m */; }; 12 | 17C46092F0BD5FD3309DEA0E506F2E89 /* SubtleVolume-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C5C16D5C63D12E41F392CE1A14B27D34 /* SubtleVolume-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 13 | 2616FF6E5324857891FDE70308F8B63C /* Pods-Demo-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6769A6750FB9D8CE749D8BF1A9B0890C /* Pods-Demo-dummy.m */; }; 14 | 364152F6C189F82B877071C7AA0A31CF /* Pods-DemoUITests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B0D2E72371648C6A971969F4E37CF66 /* Pods-DemoUITests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 15 | 565CA1EFAF36547615627A742362F3A7 /* Pods-DemoTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E8C16EAA86588BCE11DFA5022A231C13 /* Pods-DemoTests-dummy.m */; }; 16 | 9DA1C4400387232DBDFA5F92FC85142D /* Pods-DemoUITests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A80739A96D3A4F0243806AA56B9403C9 /* Pods-DemoUITests-dummy.m */; }; 17 | A09148E45006895F86CE1E6F5DC5DE30 /* SubtleVolume.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D270DA69F2B367C00F0928E07FEAEB4 /* SubtleVolume.swift */; }; 18 | A932B5909608EF885DE3138AD762DB79 /* Pods-Demo-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = EE7F4E1458F7255A9530ADBE12329DEC /* Pods-Demo-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 19 | B2EBF635F386DD9845F5DB90676C59AF /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */; }; 20 | C18B01ED88DF79946AE031A6BB4030BC /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */; }; 21 | C9CD5F68E01482F9396B6A12A540B792 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */; }; 22 | CEF6A9F5743BF1DBBA79B68133949311 /* Pods-DemoTests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BC7A288325666D148AD70B2D8CB0976 /* Pods-DemoTests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 23 | /* End PBXBuildFile section */ 24 | 25 | /* Begin PBXContainerItemProxy section */ 26 | 6F4A37025372DD5B64ED53A90C709203 /* PBXContainerItemProxy */ = { 27 | isa = PBXContainerItemProxy; 28 | containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 29 | proxyType = 1; 30 | remoteGlobalIDString = FEED3BA7174AE74DAF998892A687A333; 31 | remoteInfo = SubtleVolume; 32 | }; 33 | /* End PBXContainerItemProxy section */ 34 | 35 | /* Begin PBXFileReference section */ 36 | 100F8D03CFA50B6B7EC12849F95A5450 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; }; 37 | 1780C55CDD704CAE350552BA1ED9887E /* Pods-Demo-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Demo-acknowledgements.markdown"; sourceTree = ""; }; 38 | 1BFA4C3D51C86E61E444342690BAF642 /* Pods-DemoUITests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-DemoUITests-frameworks.sh"; sourceTree = ""; }; 39 | 22D3989410D4FED1D6304AF0777E6E99 /* SubtleVolume.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SubtleVolume.framework; path = SubtleVolume.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 40 | 2314DDDAA530834AFB47637DB7B18915 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; 41 | 25D1B383CB8738665454772E8BAF30A0 /* SubtleVolume-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SubtleVolume-prefix.pch"; sourceTree = ""; }; 42 | 287D138BF5F91AD950B082523EC7FCC5 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 43 | 34D88A7DAF3DF394AF9357A9A248AE86 /* Pods_DemoTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_DemoTests.framework; path = "Pods-DemoTests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 44 | 365064EEA347D114B72EE0F5AFE2EA23 /* Pods-Demo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Demo.release.xcconfig"; sourceTree = ""; }; 45 | 460661C39823C6D76A1EE3989A9EFA21 /* Pods-DemoTests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-DemoTests.modulemap"; sourceTree = ""; }; 46 | 47D55EAF6FD17097AD74A78E02711DD6 /* Pods-DemoUITests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-DemoUITests-resources.sh"; sourceTree = ""; }; 47 | 5625B2556DE4889DAD338B17767FB2B5 /* Pods-DemoUITests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-DemoUITests-acknowledgements.markdown"; sourceTree = ""; }; 48 | 5E5BA448B30777CDACAB4E19E724D0B6 /* Pods-Demo-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Demo-frameworks.sh"; sourceTree = ""; }; 49 | 5EC5A058C46DF0208E0AB3460D1E45A6 /* Pods-DemoTests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-DemoTests-frameworks.sh"; sourceTree = ""; }; 50 | 60656C41F13462A0584A0EC924AE3B93 /* Pods-DemoTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-DemoTests.release.xcconfig"; sourceTree = ""; }; 51 | 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 52 | 6769A6750FB9D8CE749D8BF1A9B0890C /* Pods-Demo-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Demo-dummy.m"; sourceTree = ""; }; 53 | 6BC7A288325666D148AD70B2D8CB0976 /* Pods-DemoTests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-DemoTests-umbrella.h"; sourceTree = ""; }; 54 | 6D11AD4AFA9961AC176181B34531B374 /* SubtleVolume.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; path = SubtleVolume.podspec; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 55 | 770361FAF31D829B16DA7B5908C6A4E0 /* Pods_Demo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Demo.framework; path = "Pods-Demo.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 56 | 79DF453269EA372F6382E702702F4E38 /* Pods-DemoTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-DemoTests-acknowledgements.plist"; sourceTree = ""; }; 57 | 8030D91BAF81D40039DCB4BF70BD64A2 /* Pods-DemoUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-DemoUITests.release.xcconfig"; sourceTree = ""; }; 58 | 86241DC0734C70672B0484E034C923F6 /* Pods-DemoUITests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-DemoUITests.modulemap"; sourceTree = ""; }; 59 | 8B0D2E72371648C6A971969F4E37CF66 /* Pods-DemoUITests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-DemoUITests-umbrella.h"; sourceTree = ""; }; 60 | 8D634C266DA0D7B6E8655FD1D72A9212 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 61 | 8EB056094A48540D3DF13922D6597564 /* SubtleVolume.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SubtleVolume.modulemap; sourceTree = ""; }; 62 | 92ED1F5D73DF0D092D119556A611769D /* SubtleVolume-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SubtleVolume-dummy.m"; sourceTree = ""; }; 63 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 64 | 9C51C160604CF6C4E6FBAAB080FF1141 /* Pods-DemoTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-DemoTests.debug.xcconfig"; sourceTree = ""; }; 65 | 9D270DA69F2B367C00F0928E07FEAEB4 /* SubtleVolume.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SubtleVolume.swift; path = Source/SubtleVolume.swift; sourceTree = ""; }; 66 | A80739A96D3A4F0243806AA56B9403C9 /* Pods-DemoUITests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-DemoUITests-dummy.m"; sourceTree = ""; }; 67 | AA9B11052D17FA8536548916E8B4F5C4 /* SubtleVolume.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SubtleVolume.xcconfig; sourceTree = ""; }; 68 | B794613BDC9D1FD29C700F6BF7B427C8 /* Pods-DemoUITests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-DemoUITests-acknowledgements.plist"; sourceTree = ""; }; 69 | B94929563C4336198098A88ACE632219 /* Pods-Demo-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Demo-resources.sh"; sourceTree = ""; }; 70 | BE93A5895FB6A3A577B90E7B8E82B0AC /* Pods-DemoUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-DemoUITests.debug.xcconfig"; sourceTree = ""; }; 71 | C418157C82ED018E914B0DDDE0ABEF98 /* Pods-DemoTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-DemoTests-acknowledgements.markdown"; sourceTree = ""; }; 72 | C5C16D5C63D12E41F392CE1A14B27D34 /* SubtleVolume-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SubtleVolume-umbrella.h"; sourceTree = ""; }; 73 | D2270320DD721174F4534DC1431EC7DE /* Pods_DemoUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_DemoUITests.framework; path = "Pods-DemoUITests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 74 | DA439FEBD99E99D51FB21A2FAFD9A827 /* Pods-DemoTests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-DemoTests-resources.sh"; sourceTree = ""; }; 75 | E8C16EAA86588BCE11DFA5022A231C13 /* Pods-DemoTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-DemoTests-dummy.m"; sourceTree = ""; }; 76 | EAC056C7851170F45C15878634C7B684 /* Pods-Demo-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Demo-acknowledgements.plist"; sourceTree = ""; }; 77 | EBA52DD410E0A679BDEA81764C0CD78B /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 78 | EE7F4E1458F7255A9530ADBE12329DEC /* Pods-Demo-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Demo-umbrella.h"; sourceTree = ""; }; 79 | EE8876E3E80D834B6AC332F1163147BB /* Pods-Demo.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Demo.modulemap"; sourceTree = ""; }; 80 | F86F93C3A2CC6B15D281AB62D944E6F6 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 81 | FF398E62C71912BEA5B3CC3B6FB97766 /* Pods-Demo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Demo.debug.xcconfig"; sourceTree = ""; }; 82 | /* End PBXFileReference section */ 83 | 84 | /* Begin PBXFrameworksBuildPhase section */ 85 | 2038EF7DFAAC8E62FAD796EDA06CA717 /* Frameworks */ = { 86 | isa = PBXFrameworksBuildPhase; 87 | buildActionMask = 2147483647; 88 | files = ( 89 | B2EBF635F386DD9845F5DB90676C59AF /* Foundation.framework in Frameworks */, 90 | ); 91 | runOnlyForDeploymentPostprocessing = 0; 92 | }; 93 | 5161DA48FEE9F1CE7FA5DF1F4448F95D /* Frameworks */ = { 94 | isa = PBXFrameworksBuildPhase; 95 | buildActionMask = 2147483647; 96 | files = ( 97 | C9CD5F68E01482F9396B6A12A540B792 /* Foundation.framework in Frameworks */, 98 | ); 99 | runOnlyForDeploymentPostprocessing = 0; 100 | }; 101 | 80BAED8264659300BEDB626EC66C5972 /* Frameworks */ = { 102 | isa = PBXFrameworksBuildPhase; 103 | buildActionMask = 2147483647; 104 | files = ( 105 | 04F377D952092E9DDB067D4B7E8150B0 /* Foundation.framework in Frameworks */, 106 | ); 107 | runOnlyForDeploymentPostprocessing = 0; 108 | }; 109 | 97FE4301AF2EC9045B2A9A91D7479850 /* Frameworks */ = { 110 | isa = PBXFrameworksBuildPhase; 111 | buildActionMask = 2147483647; 112 | files = ( 113 | C18B01ED88DF79946AE031A6BB4030BC /* Foundation.framework in Frameworks */, 114 | ); 115 | runOnlyForDeploymentPostprocessing = 0; 116 | }; 117 | /* End PBXFrameworksBuildPhase section */ 118 | 119 | /* Begin PBXGroup section */ 120 | 0CE1041C93AFED10A1162A72B114240C /* Pods-DemoUITests */ = { 121 | isa = PBXGroup; 122 | children = ( 123 | 287D138BF5F91AD950B082523EC7FCC5 /* Info.plist */, 124 | 86241DC0734C70672B0484E034C923F6 /* Pods-DemoUITests.modulemap */, 125 | 5625B2556DE4889DAD338B17767FB2B5 /* Pods-DemoUITests-acknowledgements.markdown */, 126 | B794613BDC9D1FD29C700F6BF7B427C8 /* Pods-DemoUITests-acknowledgements.plist */, 127 | A80739A96D3A4F0243806AA56B9403C9 /* Pods-DemoUITests-dummy.m */, 128 | 1BFA4C3D51C86E61E444342690BAF642 /* Pods-DemoUITests-frameworks.sh */, 129 | 47D55EAF6FD17097AD74A78E02711DD6 /* Pods-DemoUITests-resources.sh */, 130 | 8B0D2E72371648C6A971969F4E37CF66 /* Pods-DemoUITests-umbrella.h */, 131 | BE93A5895FB6A3A577B90E7B8E82B0AC /* Pods-DemoUITests.debug.xcconfig */, 132 | 8030D91BAF81D40039DCB4BF70BD64A2 /* Pods-DemoUITests.release.xcconfig */, 133 | ); 134 | name = "Pods-DemoUITests"; 135 | path = "Target Support Files/Pods-DemoUITests"; 136 | sourceTree = ""; 137 | }; 138 | 118289DB43A52B1AB87F632601489549 /* Development Pods */ = { 139 | isa = PBXGroup; 140 | children = ( 141 | 4E1CAB01E20CC0624A2E7E58E0AADEDF /* SubtleVolume */, 142 | ); 143 | name = "Development Pods"; 144 | sourceTree = ""; 145 | }; 146 | 4E1CAB01E20CC0624A2E7E58E0AADEDF /* SubtleVolume */ = { 147 | isa = PBXGroup; 148 | children = ( 149 | 9D270DA69F2B367C00F0928E07FEAEB4 /* SubtleVolume.swift */, 150 | A5CDA9DB0A1547266AD7736CD4FDCE2B /* Pod */, 151 | 7ADA02BD2EEA8F6CE189B0FBCDD36B41 /* Support Files */, 152 | ); 153 | name = SubtleVolume; 154 | path = ../..; 155 | sourceTree = ""; 156 | }; 157 | 76A1E3B812C2E79DF0A4B0E391521FFD /* Targets Support Files */ = { 158 | isa = PBXGroup; 159 | children = ( 160 | B04024F49B87D73763F321D84D83FAA8 /* Pods-Demo */, 161 | E3AFD3B9FA7C42E70139B2156AEAC302 /* Pods-DemoTests */, 162 | 0CE1041C93AFED10A1162A72B114240C /* Pods-DemoUITests */, 163 | ); 164 | name = "Targets Support Files"; 165 | sourceTree = ""; 166 | }; 167 | 7ADA02BD2EEA8F6CE189B0FBCDD36B41 /* Support Files */ = { 168 | isa = PBXGroup; 169 | children = ( 170 | F86F93C3A2CC6B15D281AB62D944E6F6 /* Info.plist */, 171 | 8EB056094A48540D3DF13922D6597564 /* SubtleVolume.modulemap */, 172 | AA9B11052D17FA8536548916E8B4F5C4 /* SubtleVolume.xcconfig */, 173 | 92ED1F5D73DF0D092D119556A611769D /* SubtleVolume-dummy.m */, 174 | 25D1B383CB8738665454772E8BAF30A0 /* SubtleVolume-prefix.pch */, 175 | C5C16D5C63D12E41F392CE1A14B27D34 /* SubtleVolume-umbrella.h */, 176 | ); 177 | name = "Support Files"; 178 | path = "Demo/Pods/Target Support Files/SubtleVolume"; 179 | sourceTree = ""; 180 | }; 181 | 7DB346D0F39D3F0E887471402A8071AB = { 182 | isa = PBXGroup; 183 | children = ( 184 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, 185 | 118289DB43A52B1AB87F632601489549 /* Development Pods */, 186 | BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */, 187 | D9756DF21B3DA219817AB049259ECF38 /* Products */, 188 | 76A1E3B812C2E79DF0A4B0E391521FFD /* Targets Support Files */, 189 | ); 190 | sourceTree = ""; 191 | }; 192 | A5CDA9DB0A1547266AD7736CD4FDCE2B /* Pod */ = { 193 | isa = PBXGroup; 194 | children = ( 195 | 100F8D03CFA50B6B7EC12849F95A5450 /* LICENSE */, 196 | 2314DDDAA530834AFB47637DB7B18915 /* README.md */, 197 | 6D11AD4AFA9961AC176181B34531B374 /* SubtleVolume.podspec */, 198 | ); 199 | name = Pod; 200 | sourceTree = ""; 201 | }; 202 | B04024F49B87D73763F321D84D83FAA8 /* Pods-Demo */ = { 203 | isa = PBXGroup; 204 | children = ( 205 | 8D634C266DA0D7B6E8655FD1D72A9212 /* Info.plist */, 206 | EE8876E3E80D834B6AC332F1163147BB /* Pods-Demo.modulemap */, 207 | 1780C55CDD704CAE350552BA1ED9887E /* Pods-Demo-acknowledgements.markdown */, 208 | EAC056C7851170F45C15878634C7B684 /* Pods-Demo-acknowledgements.plist */, 209 | 6769A6750FB9D8CE749D8BF1A9B0890C /* Pods-Demo-dummy.m */, 210 | 5E5BA448B30777CDACAB4E19E724D0B6 /* Pods-Demo-frameworks.sh */, 211 | B94929563C4336198098A88ACE632219 /* Pods-Demo-resources.sh */, 212 | EE7F4E1458F7255A9530ADBE12329DEC /* Pods-Demo-umbrella.h */, 213 | FF398E62C71912BEA5B3CC3B6FB97766 /* Pods-Demo.debug.xcconfig */, 214 | 365064EEA347D114B72EE0F5AFE2EA23 /* Pods-Demo.release.xcconfig */, 215 | ); 216 | name = "Pods-Demo"; 217 | path = "Target Support Files/Pods-Demo"; 218 | sourceTree = ""; 219 | }; 220 | BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */ = { 221 | isa = PBXGroup; 222 | children = ( 223 | D35AF013A5F0BAD4F32504907A52519E /* iOS */, 224 | ); 225 | name = Frameworks; 226 | sourceTree = ""; 227 | }; 228 | D35AF013A5F0BAD4F32504907A52519E /* iOS */ = { 229 | isa = PBXGroup; 230 | children = ( 231 | 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */, 232 | ); 233 | name = iOS; 234 | sourceTree = ""; 235 | }; 236 | D9756DF21B3DA219817AB049259ECF38 /* Products */ = { 237 | isa = PBXGroup; 238 | children = ( 239 | 770361FAF31D829B16DA7B5908C6A4E0 /* Pods_Demo.framework */, 240 | 34D88A7DAF3DF394AF9357A9A248AE86 /* Pods_DemoTests.framework */, 241 | D2270320DD721174F4534DC1431EC7DE /* Pods_DemoUITests.framework */, 242 | 22D3989410D4FED1D6304AF0777E6E99 /* SubtleVolume.framework */, 243 | ); 244 | name = Products; 245 | sourceTree = ""; 246 | }; 247 | E3AFD3B9FA7C42E70139B2156AEAC302 /* Pods-DemoTests */ = { 248 | isa = PBXGroup; 249 | children = ( 250 | EBA52DD410E0A679BDEA81764C0CD78B /* Info.plist */, 251 | 460661C39823C6D76A1EE3989A9EFA21 /* Pods-DemoTests.modulemap */, 252 | C418157C82ED018E914B0DDDE0ABEF98 /* Pods-DemoTests-acknowledgements.markdown */, 253 | 79DF453269EA372F6382E702702F4E38 /* Pods-DemoTests-acknowledgements.plist */, 254 | E8C16EAA86588BCE11DFA5022A231C13 /* Pods-DemoTests-dummy.m */, 255 | 5EC5A058C46DF0208E0AB3460D1E45A6 /* Pods-DemoTests-frameworks.sh */, 256 | DA439FEBD99E99D51FB21A2FAFD9A827 /* Pods-DemoTests-resources.sh */, 257 | 6BC7A288325666D148AD70B2D8CB0976 /* Pods-DemoTests-umbrella.h */, 258 | 9C51C160604CF6C4E6FBAAB080FF1141 /* Pods-DemoTests.debug.xcconfig */, 259 | 60656C41F13462A0584A0EC924AE3B93 /* Pods-DemoTests.release.xcconfig */, 260 | ); 261 | name = "Pods-DemoTests"; 262 | path = "Target Support Files/Pods-DemoTests"; 263 | sourceTree = ""; 264 | }; 265 | /* End PBXGroup section */ 266 | 267 | /* Begin PBXHeadersBuildPhase section */ 268 | 028F0D61A76E9FF6746FF16E0C2E1F46 /* Headers */ = { 269 | isa = PBXHeadersBuildPhase; 270 | buildActionMask = 2147483647; 271 | files = ( 272 | A932B5909608EF885DE3138AD762DB79 /* Pods-Demo-umbrella.h in Headers */, 273 | ); 274 | runOnlyForDeploymentPostprocessing = 0; 275 | }; 276 | 1C9E69D5BD473236FA3FAD4475BECC25 /* Headers */ = { 277 | isa = PBXHeadersBuildPhase; 278 | buildActionMask = 2147483647; 279 | files = ( 280 | 17C46092F0BD5FD3309DEA0E506F2E89 /* SubtleVolume-umbrella.h in Headers */, 281 | ); 282 | runOnlyForDeploymentPostprocessing = 0; 283 | }; 284 | 8AA1ED914CE7728BAB7AAE7F5281452C /* Headers */ = { 285 | isa = PBXHeadersBuildPhase; 286 | buildActionMask = 2147483647; 287 | files = ( 288 | CEF6A9F5743BF1DBBA79B68133949311 /* Pods-DemoTests-umbrella.h in Headers */, 289 | ); 290 | runOnlyForDeploymentPostprocessing = 0; 291 | }; 292 | B14A74F2F1D5AD978A544EC8497D9661 /* Headers */ = { 293 | isa = PBXHeadersBuildPhase; 294 | buildActionMask = 2147483647; 295 | files = ( 296 | 364152F6C189F82B877071C7AA0A31CF /* Pods-DemoUITests-umbrella.h in Headers */, 297 | ); 298 | runOnlyForDeploymentPostprocessing = 0; 299 | }; 300 | /* End PBXHeadersBuildPhase section */ 301 | 302 | /* Begin PBXNativeTarget section */ 303 | 680A9AD8429BEE9F51CB057C74B762BB /* Pods-Demo */ = { 304 | isa = PBXNativeTarget; 305 | buildConfigurationList = 62D8F2027CD5978B267F10061FD7B8CF /* Build configuration list for PBXNativeTarget "Pods-Demo" */; 306 | buildPhases = ( 307 | EBA57CC8C4363D173153FA6E54BCEFB4 /* Sources */, 308 | 2038EF7DFAAC8E62FAD796EDA06CA717 /* Frameworks */, 309 | 028F0D61A76E9FF6746FF16E0C2E1F46 /* Headers */, 310 | ); 311 | buildRules = ( 312 | ); 313 | dependencies = ( 314 | 0A422F6AA264EB2BAB740CB24D7D5572 /* PBXTargetDependency */, 315 | ); 316 | name = "Pods-Demo"; 317 | productName = "Pods-Demo"; 318 | productReference = 770361FAF31D829B16DA7B5908C6A4E0 /* Pods_Demo.framework */; 319 | productType = "com.apple.product-type.framework"; 320 | }; 321 | 9B2FD12051EAD25985318D9E0A99B8A0 /* Pods-DemoUITests */ = { 322 | isa = PBXNativeTarget; 323 | buildConfigurationList = 773B03EA6E942B6D2C39071C48D1375B /* Build configuration list for PBXNativeTarget "Pods-DemoUITests" */; 324 | buildPhases = ( 325 | BAA9BEEA145C772EC865E6CC49CEF565 /* Sources */, 326 | 5161DA48FEE9F1CE7FA5DF1F4448F95D /* Frameworks */, 327 | B14A74F2F1D5AD978A544EC8497D9661 /* Headers */, 328 | ); 329 | buildRules = ( 330 | ); 331 | dependencies = ( 332 | ); 333 | name = "Pods-DemoUITests"; 334 | productName = "Pods-DemoUITests"; 335 | productReference = D2270320DD721174F4534DC1431EC7DE /* Pods_DemoUITests.framework */; 336 | productType = "com.apple.product-type.framework"; 337 | }; 338 | A99338F9917CB98B3B19A0909E91616F /* Pods-DemoTests */ = { 339 | isa = PBXNativeTarget; 340 | buildConfigurationList = D62089A5F48E5AD84C5FF4E43C881E3F /* Build configuration list for PBXNativeTarget "Pods-DemoTests" */; 341 | buildPhases = ( 342 | 6EDD431024CA695038807D5697892579 /* Sources */, 343 | 80BAED8264659300BEDB626EC66C5972 /* Frameworks */, 344 | 8AA1ED914CE7728BAB7AAE7F5281452C /* Headers */, 345 | ); 346 | buildRules = ( 347 | ); 348 | dependencies = ( 349 | ); 350 | name = "Pods-DemoTests"; 351 | productName = "Pods-DemoTests"; 352 | productReference = 34D88A7DAF3DF394AF9357A9A248AE86 /* Pods_DemoTests.framework */; 353 | productType = "com.apple.product-type.framework"; 354 | }; 355 | FEED3BA7174AE74DAF998892A687A333 /* SubtleVolume */ = { 356 | isa = PBXNativeTarget; 357 | buildConfigurationList = 74BED1E1491988C72338B0657C42EBAF /* Build configuration list for PBXNativeTarget "SubtleVolume" */; 358 | buildPhases = ( 359 | EB09ED88C366991C9493BDC2BA30277D /* Sources */, 360 | 97FE4301AF2EC9045B2A9A91D7479850 /* Frameworks */, 361 | 1C9E69D5BD473236FA3FAD4475BECC25 /* Headers */, 362 | ); 363 | buildRules = ( 364 | ); 365 | dependencies = ( 366 | ); 367 | name = SubtleVolume; 368 | productName = SubtleVolume; 369 | productReference = 22D3989410D4FED1D6304AF0777E6E99 /* SubtleVolume.framework */; 370 | productType = "com.apple.product-type.framework"; 371 | }; 372 | /* End PBXNativeTarget section */ 373 | 374 | /* Begin PBXProject section */ 375 | D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { 376 | isa = PBXProject; 377 | attributes = { 378 | LastSwiftUpdateCheck = 0930; 379 | LastUpgradeCheck = 0930; 380 | }; 381 | buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; 382 | compatibilityVersion = "Xcode 3.2"; 383 | developmentRegion = English; 384 | hasScannedForEncodings = 0; 385 | knownRegions = ( 386 | en, 387 | ); 388 | mainGroup = 7DB346D0F39D3F0E887471402A8071AB; 389 | productRefGroup = D9756DF21B3DA219817AB049259ECF38 /* Products */; 390 | projectDirPath = ""; 391 | projectRoot = ""; 392 | targets = ( 393 | 680A9AD8429BEE9F51CB057C74B762BB /* Pods-Demo */, 394 | A99338F9917CB98B3B19A0909E91616F /* Pods-DemoTests */, 395 | 9B2FD12051EAD25985318D9E0A99B8A0 /* Pods-DemoUITests */, 396 | FEED3BA7174AE74DAF998892A687A333 /* SubtleVolume */, 397 | ); 398 | }; 399 | /* End PBXProject section */ 400 | 401 | /* Begin PBXSourcesBuildPhase section */ 402 | 6EDD431024CA695038807D5697892579 /* Sources */ = { 403 | isa = PBXSourcesBuildPhase; 404 | buildActionMask = 2147483647; 405 | files = ( 406 | 565CA1EFAF36547615627A742362F3A7 /* Pods-DemoTests-dummy.m in Sources */, 407 | ); 408 | runOnlyForDeploymentPostprocessing = 0; 409 | }; 410 | BAA9BEEA145C772EC865E6CC49CEF565 /* Sources */ = { 411 | isa = PBXSourcesBuildPhase; 412 | buildActionMask = 2147483647; 413 | files = ( 414 | 9DA1C4400387232DBDFA5F92FC85142D /* Pods-DemoUITests-dummy.m in Sources */, 415 | ); 416 | runOnlyForDeploymentPostprocessing = 0; 417 | }; 418 | EB09ED88C366991C9493BDC2BA30277D /* Sources */ = { 419 | isa = PBXSourcesBuildPhase; 420 | buildActionMask = 2147483647; 421 | files = ( 422 | 1483883DA8FC92A410682B04798D8AF0 /* SubtleVolume-dummy.m in Sources */, 423 | A09148E45006895F86CE1E6F5DC5DE30 /* SubtleVolume.swift in Sources */, 424 | ); 425 | runOnlyForDeploymentPostprocessing = 0; 426 | }; 427 | EBA57CC8C4363D173153FA6E54BCEFB4 /* Sources */ = { 428 | isa = PBXSourcesBuildPhase; 429 | buildActionMask = 2147483647; 430 | files = ( 431 | 2616FF6E5324857891FDE70308F8B63C /* Pods-Demo-dummy.m in Sources */, 432 | ); 433 | runOnlyForDeploymentPostprocessing = 0; 434 | }; 435 | /* End PBXSourcesBuildPhase section */ 436 | 437 | /* Begin PBXTargetDependency section */ 438 | 0A422F6AA264EB2BAB740CB24D7D5572 /* PBXTargetDependency */ = { 439 | isa = PBXTargetDependency; 440 | name = SubtleVolume; 441 | target = FEED3BA7174AE74DAF998892A687A333 /* SubtleVolume */; 442 | targetProxy = 6F4A37025372DD5B64ED53A90C709203 /* PBXContainerItemProxy */; 443 | }; 444 | /* End PBXTargetDependency section */ 445 | 446 | /* Begin XCBuildConfiguration section */ 447 | 000CEE0E77CD3F9B3D16FB42DBCDB5D7 /* Debug */ = { 448 | isa = XCBuildConfiguration; 449 | baseConfigurationReference = BE93A5895FB6A3A577B90E7B8E82B0AC /* Pods-DemoUITests.debug.xcconfig */; 450 | buildSettings = { 451 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 452 | CODE_SIGN_IDENTITY = ""; 453 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 454 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 455 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 456 | CURRENT_PROJECT_VERSION = 1; 457 | DEFINES_MODULE = YES; 458 | DYLIB_COMPATIBILITY_VERSION = 1; 459 | DYLIB_CURRENT_VERSION = 1; 460 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 461 | INFOPLIST_FILE = "Target Support Files/Pods-DemoUITests/Info.plist"; 462 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 463 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 464 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 465 | MACH_O_TYPE = staticlib; 466 | MODULEMAP_FILE = "Target Support Files/Pods-DemoUITests/Pods-DemoUITests.modulemap"; 467 | OTHER_LDFLAGS = ""; 468 | OTHER_LIBTOOLFLAGS = ""; 469 | PODS_ROOT = "$(SRCROOT)"; 470 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 471 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 472 | SDKROOT = iphoneos; 473 | SKIP_INSTALL = YES; 474 | TARGETED_DEVICE_FAMILY = "1,2"; 475 | VERSIONING_SYSTEM = "apple-generic"; 476 | VERSION_INFO_PREFIX = ""; 477 | }; 478 | name = Debug; 479 | }; 480 | 11446395A780C4ECDE22A9A7B8D953B7 /* Release */ = { 481 | isa = XCBuildConfiguration; 482 | baseConfigurationReference = 60656C41F13462A0584A0EC924AE3B93 /* Pods-DemoTests.release.xcconfig */; 483 | buildSettings = { 484 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 485 | CODE_SIGN_IDENTITY = ""; 486 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 487 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 488 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 489 | CURRENT_PROJECT_VERSION = 1; 490 | DEFINES_MODULE = YES; 491 | DYLIB_COMPATIBILITY_VERSION = 1; 492 | DYLIB_CURRENT_VERSION = 1; 493 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 494 | INFOPLIST_FILE = "Target Support Files/Pods-DemoTests/Info.plist"; 495 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 496 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 497 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 498 | MACH_O_TYPE = staticlib; 499 | MODULEMAP_FILE = "Target Support Files/Pods-DemoTests/Pods-DemoTests.modulemap"; 500 | OTHER_LDFLAGS = ""; 501 | OTHER_LIBTOOLFLAGS = ""; 502 | PODS_ROOT = "$(SRCROOT)"; 503 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 504 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 505 | SDKROOT = iphoneos; 506 | SKIP_INSTALL = YES; 507 | TARGETED_DEVICE_FAMILY = "1,2"; 508 | VALIDATE_PRODUCT = YES; 509 | VERSIONING_SYSTEM = "apple-generic"; 510 | VERSION_INFO_PREFIX = ""; 511 | }; 512 | name = Release; 513 | }; 514 | 13F3433ED38886FAE9D7EC1A48CC2767 /* Debug */ = { 515 | isa = XCBuildConfiguration; 516 | baseConfigurationReference = 9C51C160604CF6C4E6FBAAB080FF1141 /* Pods-DemoTests.debug.xcconfig */; 517 | buildSettings = { 518 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 519 | CODE_SIGN_IDENTITY = ""; 520 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 521 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 522 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 523 | CURRENT_PROJECT_VERSION = 1; 524 | DEFINES_MODULE = YES; 525 | DYLIB_COMPATIBILITY_VERSION = 1; 526 | DYLIB_CURRENT_VERSION = 1; 527 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 528 | INFOPLIST_FILE = "Target Support Files/Pods-DemoTests/Info.plist"; 529 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 530 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 531 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 532 | MACH_O_TYPE = staticlib; 533 | MODULEMAP_FILE = "Target Support Files/Pods-DemoTests/Pods-DemoTests.modulemap"; 534 | OTHER_LDFLAGS = ""; 535 | OTHER_LIBTOOLFLAGS = ""; 536 | PODS_ROOT = "$(SRCROOT)"; 537 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 538 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 539 | SDKROOT = iphoneos; 540 | SKIP_INSTALL = YES; 541 | TARGETED_DEVICE_FAMILY = "1,2"; 542 | VERSIONING_SYSTEM = "apple-generic"; 543 | VERSION_INFO_PREFIX = ""; 544 | }; 545 | name = Debug; 546 | }; 547 | 1EE19F5DD95931924296F637BF18BD8F /* Debug */ = { 548 | isa = XCBuildConfiguration; 549 | buildSettings = { 550 | ALWAYS_SEARCH_USER_PATHS = NO; 551 | CLANG_ANALYZER_NONNULL = YES; 552 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 553 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 554 | CLANG_CXX_LIBRARY = "libc++"; 555 | CLANG_ENABLE_MODULES = YES; 556 | CLANG_ENABLE_OBJC_ARC = YES; 557 | CLANG_ENABLE_OBJC_WEAK = YES; 558 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 559 | CLANG_WARN_BOOL_CONVERSION = YES; 560 | CLANG_WARN_COMMA = YES; 561 | CLANG_WARN_CONSTANT_CONVERSION = YES; 562 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 563 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 564 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 565 | CLANG_WARN_EMPTY_BODY = YES; 566 | CLANG_WARN_ENUM_CONVERSION = YES; 567 | CLANG_WARN_INFINITE_RECURSION = YES; 568 | CLANG_WARN_INT_CONVERSION = YES; 569 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 570 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 571 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 572 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 573 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 574 | CLANG_WARN_STRICT_PROTOTYPES = YES; 575 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 576 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 577 | CLANG_WARN_UNREACHABLE_CODE = YES; 578 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 579 | CODE_SIGNING_ALLOWED = NO; 580 | CODE_SIGNING_REQUIRED = NO; 581 | COPY_PHASE_STRIP = NO; 582 | DEBUG_INFORMATION_FORMAT = dwarf; 583 | ENABLE_STRICT_OBJC_MSGSEND = YES; 584 | ENABLE_TESTABILITY = YES; 585 | GCC_C_LANGUAGE_STANDARD = gnu11; 586 | GCC_DYNAMIC_NO_PIC = NO; 587 | GCC_NO_COMMON_BLOCKS = YES; 588 | GCC_OPTIMIZATION_LEVEL = 0; 589 | GCC_PREPROCESSOR_DEFINITIONS = ( 590 | "POD_CONFIGURATION_DEBUG=1", 591 | "DEBUG=1", 592 | "$(inherited)", 593 | ); 594 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 595 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 596 | GCC_WARN_UNDECLARED_SELECTOR = YES; 597 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 598 | GCC_WARN_UNUSED_FUNCTION = YES; 599 | GCC_WARN_UNUSED_VARIABLE = YES; 600 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 601 | MTL_ENABLE_DEBUG_INFO = YES; 602 | ONLY_ACTIVE_ARCH = YES; 603 | PRODUCT_NAME = "$(TARGET_NAME)"; 604 | STRIP_INSTALLED_PRODUCT = NO; 605 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 606 | SYMROOT = "${SRCROOT}/../build"; 607 | }; 608 | name = Debug; 609 | }; 610 | 4EA9FC625FFD96AAE4CF9AD158FC3F2C /* Release */ = { 611 | isa = XCBuildConfiguration; 612 | baseConfigurationReference = 8030D91BAF81D40039DCB4BF70BD64A2 /* Pods-DemoUITests.release.xcconfig */; 613 | buildSettings = { 614 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 615 | CODE_SIGN_IDENTITY = ""; 616 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 617 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 618 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 619 | CURRENT_PROJECT_VERSION = 1; 620 | DEFINES_MODULE = YES; 621 | DYLIB_COMPATIBILITY_VERSION = 1; 622 | DYLIB_CURRENT_VERSION = 1; 623 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 624 | INFOPLIST_FILE = "Target Support Files/Pods-DemoUITests/Info.plist"; 625 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 626 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 627 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 628 | MACH_O_TYPE = staticlib; 629 | MODULEMAP_FILE = "Target Support Files/Pods-DemoUITests/Pods-DemoUITests.modulemap"; 630 | OTHER_LDFLAGS = ""; 631 | OTHER_LIBTOOLFLAGS = ""; 632 | PODS_ROOT = "$(SRCROOT)"; 633 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 634 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 635 | SDKROOT = iphoneos; 636 | SKIP_INSTALL = YES; 637 | TARGETED_DEVICE_FAMILY = "1,2"; 638 | VALIDATE_PRODUCT = YES; 639 | VERSIONING_SYSTEM = "apple-generic"; 640 | VERSION_INFO_PREFIX = ""; 641 | }; 642 | name = Release; 643 | }; 644 | 76370AE11BEE6B287AC82E6B84F01A75 /* Debug */ = { 645 | isa = XCBuildConfiguration; 646 | baseConfigurationReference = AA9B11052D17FA8536548916E8B4F5C4 /* SubtleVolume.xcconfig */; 647 | buildSettings = { 648 | CODE_SIGN_IDENTITY = ""; 649 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 650 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 651 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 652 | CURRENT_PROJECT_VERSION = 1; 653 | DEFINES_MODULE = YES; 654 | DYLIB_COMPATIBILITY_VERSION = 1; 655 | DYLIB_CURRENT_VERSION = 1; 656 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 657 | GCC_PREFIX_HEADER = "Target Support Files/SubtleVolume/SubtleVolume-prefix.pch"; 658 | INFOPLIST_FILE = "Target Support Files/SubtleVolume/Info.plist"; 659 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 660 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 661 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 662 | MODULEMAP_FILE = "Target Support Files/SubtleVolume/SubtleVolume.modulemap"; 663 | PRODUCT_MODULE_NAME = SubtleVolume; 664 | PRODUCT_NAME = SubtleVolume; 665 | SDKROOT = iphoneos; 666 | SKIP_INSTALL = YES; 667 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 668 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 669 | SWIFT_VERSION = 4.2; 670 | TARGETED_DEVICE_FAMILY = "1,2"; 671 | VERSIONING_SYSTEM = "apple-generic"; 672 | VERSION_INFO_PREFIX = ""; 673 | }; 674 | name = Debug; 675 | }; 676 | 797BFFEEEE705839A9938295FA6AAA89 /* Debug */ = { 677 | isa = XCBuildConfiguration; 678 | baseConfigurationReference = FF398E62C71912BEA5B3CC3B6FB97766 /* Pods-Demo.debug.xcconfig */; 679 | buildSettings = { 680 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 681 | CODE_SIGN_IDENTITY = ""; 682 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 683 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 684 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 685 | CURRENT_PROJECT_VERSION = 1; 686 | DEFINES_MODULE = YES; 687 | DYLIB_COMPATIBILITY_VERSION = 1; 688 | DYLIB_CURRENT_VERSION = 1; 689 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 690 | INFOPLIST_FILE = "Target Support Files/Pods-Demo/Info.plist"; 691 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 692 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 693 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 694 | MACH_O_TYPE = staticlib; 695 | MODULEMAP_FILE = "Target Support Files/Pods-Demo/Pods-Demo.modulemap"; 696 | OTHER_LDFLAGS = ""; 697 | OTHER_LIBTOOLFLAGS = ""; 698 | PODS_ROOT = "$(SRCROOT)"; 699 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 700 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 701 | SDKROOT = iphoneos; 702 | SKIP_INSTALL = YES; 703 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 704 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 705 | TARGETED_DEVICE_FAMILY = "1,2"; 706 | VERSIONING_SYSTEM = "apple-generic"; 707 | VERSION_INFO_PREFIX = ""; 708 | }; 709 | name = Debug; 710 | }; 711 | C057B520B9CD821A7A154FF317BC98F6 /* Release */ = { 712 | isa = XCBuildConfiguration; 713 | baseConfigurationReference = 365064EEA347D114B72EE0F5AFE2EA23 /* Pods-Demo.release.xcconfig */; 714 | buildSettings = { 715 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 716 | CODE_SIGN_IDENTITY = ""; 717 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 718 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 719 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 720 | CURRENT_PROJECT_VERSION = 1; 721 | DEFINES_MODULE = YES; 722 | DYLIB_COMPATIBILITY_VERSION = 1; 723 | DYLIB_CURRENT_VERSION = 1; 724 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 725 | INFOPLIST_FILE = "Target Support Files/Pods-Demo/Info.plist"; 726 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 727 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 728 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 729 | MACH_O_TYPE = staticlib; 730 | MODULEMAP_FILE = "Target Support Files/Pods-Demo/Pods-Demo.modulemap"; 731 | OTHER_LDFLAGS = ""; 732 | OTHER_LIBTOOLFLAGS = ""; 733 | PODS_ROOT = "$(SRCROOT)"; 734 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 735 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 736 | SDKROOT = iphoneos; 737 | SKIP_INSTALL = YES; 738 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 739 | TARGETED_DEVICE_FAMILY = "1,2"; 740 | VALIDATE_PRODUCT = YES; 741 | VERSIONING_SYSTEM = "apple-generic"; 742 | VERSION_INFO_PREFIX = ""; 743 | }; 744 | name = Release; 745 | }; 746 | EF2DEDC8546AF05E9E6F7AA714240B0E /* Release */ = { 747 | isa = XCBuildConfiguration; 748 | baseConfigurationReference = AA9B11052D17FA8536548916E8B4F5C4 /* SubtleVolume.xcconfig */; 749 | buildSettings = { 750 | CODE_SIGN_IDENTITY = ""; 751 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 752 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 753 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 754 | CURRENT_PROJECT_VERSION = 1; 755 | DEFINES_MODULE = YES; 756 | DYLIB_COMPATIBILITY_VERSION = 1; 757 | DYLIB_CURRENT_VERSION = 1; 758 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 759 | GCC_PREFIX_HEADER = "Target Support Files/SubtleVolume/SubtleVolume-prefix.pch"; 760 | INFOPLIST_FILE = "Target Support Files/SubtleVolume/Info.plist"; 761 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 762 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 763 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 764 | MODULEMAP_FILE = "Target Support Files/SubtleVolume/SubtleVolume.modulemap"; 765 | PRODUCT_MODULE_NAME = SubtleVolume; 766 | PRODUCT_NAME = SubtleVolume; 767 | SDKROOT = iphoneos; 768 | SKIP_INSTALL = YES; 769 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 770 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 771 | SWIFT_VERSION = 4.2; 772 | TARGETED_DEVICE_FAMILY = "1,2"; 773 | VALIDATE_PRODUCT = YES; 774 | VERSIONING_SYSTEM = "apple-generic"; 775 | VERSION_INFO_PREFIX = ""; 776 | }; 777 | name = Release; 778 | }; 779 | F4568DEE257655D290C2B9CEAB37C934 /* Release */ = { 780 | isa = XCBuildConfiguration; 781 | buildSettings = { 782 | ALWAYS_SEARCH_USER_PATHS = NO; 783 | CLANG_ANALYZER_NONNULL = YES; 784 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 785 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 786 | CLANG_CXX_LIBRARY = "libc++"; 787 | CLANG_ENABLE_MODULES = YES; 788 | CLANG_ENABLE_OBJC_ARC = YES; 789 | CLANG_ENABLE_OBJC_WEAK = YES; 790 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 791 | CLANG_WARN_BOOL_CONVERSION = YES; 792 | CLANG_WARN_COMMA = YES; 793 | CLANG_WARN_CONSTANT_CONVERSION = YES; 794 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 795 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 796 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 797 | CLANG_WARN_EMPTY_BODY = YES; 798 | CLANG_WARN_ENUM_CONVERSION = YES; 799 | CLANG_WARN_INFINITE_RECURSION = YES; 800 | CLANG_WARN_INT_CONVERSION = YES; 801 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 802 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 803 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 804 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 805 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 806 | CLANG_WARN_STRICT_PROTOTYPES = YES; 807 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 808 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 809 | CLANG_WARN_UNREACHABLE_CODE = YES; 810 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 811 | CODE_SIGNING_ALLOWED = NO; 812 | CODE_SIGNING_REQUIRED = NO; 813 | COPY_PHASE_STRIP = NO; 814 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 815 | ENABLE_NS_ASSERTIONS = NO; 816 | ENABLE_STRICT_OBJC_MSGSEND = YES; 817 | GCC_C_LANGUAGE_STANDARD = gnu11; 818 | GCC_NO_COMMON_BLOCKS = YES; 819 | GCC_PREPROCESSOR_DEFINITIONS = ( 820 | "POD_CONFIGURATION_RELEASE=1", 821 | "$(inherited)", 822 | ); 823 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 824 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 825 | GCC_WARN_UNDECLARED_SELECTOR = YES; 826 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 827 | GCC_WARN_UNUSED_FUNCTION = YES; 828 | GCC_WARN_UNUSED_VARIABLE = YES; 829 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 830 | MTL_ENABLE_DEBUG_INFO = NO; 831 | PRODUCT_NAME = "$(TARGET_NAME)"; 832 | STRIP_INSTALLED_PRODUCT = NO; 833 | SYMROOT = "${SRCROOT}/../build"; 834 | }; 835 | name = Release; 836 | }; 837 | /* End XCBuildConfiguration section */ 838 | 839 | /* Begin XCConfigurationList section */ 840 | 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { 841 | isa = XCConfigurationList; 842 | buildConfigurations = ( 843 | 1EE19F5DD95931924296F637BF18BD8F /* Debug */, 844 | F4568DEE257655D290C2B9CEAB37C934 /* Release */, 845 | ); 846 | defaultConfigurationIsVisible = 0; 847 | defaultConfigurationName = Release; 848 | }; 849 | 62D8F2027CD5978B267F10061FD7B8CF /* Build configuration list for PBXNativeTarget "Pods-Demo" */ = { 850 | isa = XCConfigurationList; 851 | buildConfigurations = ( 852 | 797BFFEEEE705839A9938295FA6AAA89 /* Debug */, 853 | C057B520B9CD821A7A154FF317BC98F6 /* Release */, 854 | ); 855 | defaultConfigurationIsVisible = 0; 856 | defaultConfigurationName = Release; 857 | }; 858 | 74BED1E1491988C72338B0657C42EBAF /* Build configuration list for PBXNativeTarget "SubtleVolume" */ = { 859 | isa = XCConfigurationList; 860 | buildConfigurations = ( 861 | 76370AE11BEE6B287AC82E6B84F01A75 /* Debug */, 862 | EF2DEDC8546AF05E9E6F7AA714240B0E /* Release */, 863 | ); 864 | defaultConfigurationIsVisible = 0; 865 | defaultConfigurationName = Release; 866 | }; 867 | 773B03EA6E942B6D2C39071C48D1375B /* Build configuration list for PBXNativeTarget "Pods-DemoUITests" */ = { 868 | isa = XCConfigurationList; 869 | buildConfigurations = ( 870 | 000CEE0E77CD3F9B3D16FB42DBCDB5D7 /* Debug */, 871 | 4EA9FC625FFD96AAE4CF9AD158FC3F2C /* Release */, 872 | ); 873 | defaultConfigurationIsVisible = 0; 874 | defaultConfigurationName = Release; 875 | }; 876 | D62089A5F48E5AD84C5FF4E43C881E3F /* Build configuration list for PBXNativeTarget "Pods-DemoTests" */ = { 877 | isa = XCConfigurationList; 878 | buildConfigurations = ( 879 | 13F3433ED38886FAE9D7EC1A48CC2767 /* Debug */, 880 | 11446395A780C4ECDE22A9A7B8D953B7 /* Release */, 881 | ); 882 | defaultConfigurationIsVisible = 0; 883 | defaultConfigurationName = Release; 884 | }; 885 | /* End XCConfigurationList section */ 886 | }; 887 | rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 888 | } 889 | -------------------------------------------------------------------------------- /Demo/Pods/Target Support Files/Pods-Demo/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Demo/Pods/Target Support Files/Pods-Demo/Pods-Demo-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## SubtleVolume 5 | 6 | The MIT License (MIT) 7 | 8 | Copyright (c) 2016 Andrea Mazzini 9 | 10 | Permission is hereby granted, free of charge, to any person obtaining a copy 11 | of this software and associated documentation files (the "Software"), to deal 12 | in the Software without restriction, including without limitation the rights 13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | copies of the Software, and to permit persons to whom the Software is 15 | furnished to do so, subject to the following conditions: 16 | 17 | The above copyright notice and this permission notice shall be included in all 18 | copies or substantial portions of the Software. 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 26 | SOFTWARE. 27 | 28 | 29 | Generated by CocoaPods - https://cocoapods.org 30 | -------------------------------------------------------------------------------- /Demo/Pods/Target Support Files/Pods-Demo/Pods-Demo-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | The MIT License (MIT) 18 | 19 | Copyright (c) 2016 Andrea Mazzini 20 | 21 | Permission is hereby granted, free of charge, to any person obtaining a copy 22 | of this software and associated documentation files (the "Software"), to deal 23 | in the Software without restriction, including without limitation the rights 24 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 25 | copies of the Software, and to permit persons to whom the Software is 26 | furnished to do so, subject to the following conditions: 27 | 28 | The above copyright notice and this permission notice shall be included in all 29 | copies or substantial portions of the Software. 30 | 31 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 32 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 33 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 34 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 35 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 36 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 37 | SOFTWARE. 38 | 39 | 40 | License 41 | MIT 42 | Title 43 | SubtleVolume 44 | Type 45 | PSGroupSpecifier 46 | 47 | 48 | FooterText 49 | Generated by CocoaPods - https://cocoapods.org 50 | Title 51 | 52 | Type 53 | PSGroupSpecifier 54 | 55 | 56 | StringsTable 57 | Acknowledgements 58 | Title 59 | Acknowledgements 60 | 61 | 62 | -------------------------------------------------------------------------------- /Demo/Pods/Target Support Files/Pods-Demo/Pods-Demo-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_Demo : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_Demo 5 | @end 6 | -------------------------------------------------------------------------------- /Demo/Pods/Target Support Files/Pods-Demo/Pods-Demo-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then 7 | # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy 8 | # frameworks to, so exit 0 (signalling the script phase was successful). 9 | exit 0 10 | fi 11 | 12 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 13 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 14 | 15 | COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" 16 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 17 | 18 | # Used as a return value for each invocation of `strip_invalid_archs` function. 19 | STRIP_BINARY_RETVAL=0 20 | 21 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 22 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 23 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 24 | 25 | # Copies and strips a vendored framework 26 | install_framework() 27 | { 28 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 29 | local source="${BUILT_PRODUCTS_DIR}/$1" 30 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 31 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 32 | elif [ -r "$1" ]; then 33 | local source="$1" 34 | fi 35 | 36 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 37 | 38 | if [ -L "${source}" ]; then 39 | echo "Symlinked..." 40 | source="$(readlink "${source}")" 41 | fi 42 | 43 | # Use filter instead of exclude so missing patterns don't throw errors. 44 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 45 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 46 | 47 | local basename 48 | basename="$(basename -s .framework "$1")" 49 | binary="${destination}/${basename}.framework/${basename}" 50 | if ! [ -r "$binary" ]; then 51 | binary="${destination}/${basename}" 52 | fi 53 | 54 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 55 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 56 | strip_invalid_archs "$binary" 57 | fi 58 | 59 | # Resign the code if required by the build settings to avoid unstable apps 60 | code_sign_if_enabled "${destination}/$(basename "$1")" 61 | 62 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 63 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 64 | local swift_runtime_libs 65 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 66 | for lib in $swift_runtime_libs; do 67 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 68 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 69 | code_sign_if_enabled "${destination}/${lib}" 70 | done 71 | fi 72 | } 73 | 74 | # Copies and strips a vendored dSYM 75 | install_dsym() { 76 | local source="$1" 77 | if [ -r "$source" ]; then 78 | # Copy the dSYM into a the targets temp dir. 79 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" 80 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" 81 | 82 | local basename 83 | basename="$(basename -s .framework.dSYM "$source")" 84 | binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" 85 | 86 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 87 | if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then 88 | strip_invalid_archs "$binary" 89 | fi 90 | 91 | if [[ $STRIP_BINARY_RETVAL == 1 ]]; then 92 | # Move the stripped file into its final destination. 93 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" 94 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" 95 | else 96 | # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. 97 | touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" 98 | fi 99 | fi 100 | } 101 | 102 | # Signs a framework with the provided identity 103 | code_sign_if_enabled() { 104 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 105 | # Use the current code_sign_identitiy 106 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 107 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" 108 | 109 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 110 | code_sign_cmd="$code_sign_cmd &" 111 | fi 112 | echo "$code_sign_cmd" 113 | eval "$code_sign_cmd" 114 | fi 115 | } 116 | 117 | # Strip invalid architectures 118 | strip_invalid_archs() { 119 | binary="$1" 120 | # Get architectures for current target binary 121 | binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" 122 | # Intersect them with the architectures we are building for 123 | intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" 124 | # If there are no archs supported by this binary then warn the user 125 | if [[ -z "$intersected_archs" ]]; then 126 | echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." 127 | STRIP_BINARY_RETVAL=0 128 | return 129 | fi 130 | stripped="" 131 | for arch in $binary_archs; do 132 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then 133 | # Strip non-valid architectures in-place 134 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 135 | stripped="$stripped $arch" 136 | fi 137 | done 138 | if [[ "$stripped" ]]; then 139 | echo "Stripped $binary of architectures:$stripped" 140 | fi 141 | STRIP_BINARY_RETVAL=1 142 | } 143 | 144 | 145 | if [[ "$CONFIGURATION" == "Debug" ]]; then 146 | install_framework "${BUILT_PRODUCTS_DIR}/SubtleVolume/SubtleVolume.framework" 147 | fi 148 | if [[ "$CONFIGURATION" == "Release" ]]; then 149 | install_framework "${BUILT_PRODUCTS_DIR}/SubtleVolume/SubtleVolume.framework" 150 | fi 151 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 152 | wait 153 | fi 154 | -------------------------------------------------------------------------------- /Demo/Pods/Target Support Files/Pods-Demo/Pods-Demo-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then 7 | # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy 8 | # resources to, so exit 0 (signalling the script phase was successful). 9 | exit 0 10 | fi 11 | 12 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 13 | 14 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 15 | > "$RESOURCES_TO_COPY" 16 | 17 | XCASSET_FILES=() 18 | 19 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 20 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 21 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 22 | 23 | case "${TARGETED_DEVICE_FAMILY:-}" in 24 | 1,2) 25 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 26 | ;; 27 | 1) 28 | TARGET_DEVICE_ARGS="--target-device iphone" 29 | ;; 30 | 2) 31 | TARGET_DEVICE_ARGS="--target-device ipad" 32 | ;; 33 | 3) 34 | TARGET_DEVICE_ARGS="--target-device tv" 35 | ;; 36 | 4) 37 | TARGET_DEVICE_ARGS="--target-device watch" 38 | ;; 39 | *) 40 | TARGET_DEVICE_ARGS="--target-device mac" 41 | ;; 42 | esac 43 | 44 | install_resource() 45 | { 46 | if [[ "$1" = /* ]] ; then 47 | RESOURCE_PATH="$1" 48 | else 49 | RESOURCE_PATH="${PODS_ROOT}/$1" 50 | fi 51 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 52 | cat << EOM 53 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 54 | EOM 55 | exit 1 56 | fi 57 | case $RESOURCE_PATH in 58 | *.storyboard) 59 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 60 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 61 | ;; 62 | *.xib) 63 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 64 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 65 | ;; 66 | *.framework) 67 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 68 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 69 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 70 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 71 | ;; 72 | *.xcdatamodel) 73 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true 74 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 75 | ;; 76 | *.xcdatamodeld) 77 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true 78 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 79 | ;; 80 | *.xcmappingmodel) 81 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true 82 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 83 | ;; 84 | *.xcassets) 85 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 86 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 87 | ;; 88 | *) 89 | echo "$RESOURCE_PATH" || true 90 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 91 | ;; 92 | esac 93 | } 94 | 95 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 96 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 97 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 98 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 99 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 100 | fi 101 | rm -f "$RESOURCES_TO_COPY" 102 | 103 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] 104 | then 105 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 106 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 107 | while read line; do 108 | if [[ $line != "${PODS_ROOT}*" ]]; then 109 | XCASSET_FILES+=("$line") 110 | fi 111 | done <<<"$OTHER_XCASSETS" 112 | 113 | if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then 114 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 115 | else 116 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_BUILD_DIR}/assetcatalog_generated_info.plist" 117 | fi 118 | fi 119 | -------------------------------------------------------------------------------- /Demo/Pods/Target Support Files/Pods-Demo/Pods-Demo-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_DemoVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_DemoVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Demo/Pods/Target Support Files/Pods-Demo/Pods-Demo.debug.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SubtleVolume" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SubtleVolume/SubtleVolume.framework/Headers" 6 | OTHER_LDFLAGS = $(inherited) -framework "SubtleVolume" 7 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 8 | PODS_BUILD_DIR = ${BUILD_DIR} 9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | -------------------------------------------------------------------------------- /Demo/Pods/Target Support Files/Pods-Demo/Pods-Demo.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_Demo { 2 | umbrella header "Pods-Demo-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Demo/Pods/Target Support Files/Pods-Demo/Pods-Demo.release.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SubtleVolume" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SubtleVolume/SubtleVolume.framework/Headers" 6 | OTHER_LDFLAGS = $(inherited) -framework "SubtleVolume" 7 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 8 | PODS_BUILD_DIR = ${BUILD_DIR} 9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | -------------------------------------------------------------------------------- /Demo/Pods/Target Support Files/Pods-DemoTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Demo/Pods/Target Support Files/Pods-DemoTests/Pods-DemoTests-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | Generated by CocoaPods - https://cocoapods.org 4 | -------------------------------------------------------------------------------- /Demo/Pods/Target Support Files/Pods-DemoTests/Pods-DemoTests-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Generated by CocoaPods - https://cocoapods.org 18 | Title 19 | 20 | Type 21 | PSGroupSpecifier 22 | 23 | 24 | StringsTable 25 | Acknowledgements 26 | Title 27 | Acknowledgements 28 | 29 | 30 | -------------------------------------------------------------------------------- /Demo/Pods/Target Support Files/Pods-DemoTests/Pods-DemoTests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_DemoTests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_DemoTests 5 | @end 6 | -------------------------------------------------------------------------------- /Demo/Pods/Target Support Files/Pods-DemoTests/Pods-DemoTests-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then 7 | # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy 8 | # frameworks to, so exit 0 (signalling the script phase was successful). 9 | exit 0 10 | fi 11 | 12 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 13 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 14 | 15 | COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" 16 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 17 | 18 | # Used as a return value for each invocation of `strip_invalid_archs` function. 19 | STRIP_BINARY_RETVAL=0 20 | 21 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 22 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 23 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 24 | 25 | # Copies and strips a vendored framework 26 | install_framework() 27 | { 28 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 29 | local source="${BUILT_PRODUCTS_DIR}/$1" 30 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 31 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 32 | elif [ -r "$1" ]; then 33 | local source="$1" 34 | fi 35 | 36 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 37 | 38 | if [ -L "${source}" ]; then 39 | echo "Symlinked..." 40 | source="$(readlink "${source}")" 41 | fi 42 | 43 | # Use filter instead of exclude so missing patterns don't throw errors. 44 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 45 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 46 | 47 | local basename 48 | basename="$(basename -s .framework "$1")" 49 | binary="${destination}/${basename}.framework/${basename}" 50 | if ! [ -r "$binary" ]; then 51 | binary="${destination}/${basename}" 52 | fi 53 | 54 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 55 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 56 | strip_invalid_archs "$binary" 57 | fi 58 | 59 | # Resign the code if required by the build settings to avoid unstable apps 60 | code_sign_if_enabled "${destination}/$(basename "$1")" 61 | 62 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 63 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 64 | local swift_runtime_libs 65 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 66 | for lib in $swift_runtime_libs; do 67 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 68 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 69 | code_sign_if_enabled "${destination}/${lib}" 70 | done 71 | fi 72 | } 73 | 74 | # Copies and strips a vendored dSYM 75 | install_dsym() { 76 | local source="$1" 77 | if [ -r "$source" ]; then 78 | # Copy the dSYM into a the targets temp dir. 79 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" 80 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" 81 | 82 | local basename 83 | basename="$(basename -s .framework.dSYM "$source")" 84 | binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" 85 | 86 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 87 | if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then 88 | strip_invalid_archs "$binary" 89 | fi 90 | 91 | if [[ $STRIP_BINARY_RETVAL == 1 ]]; then 92 | # Move the stripped file into its final destination. 93 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" 94 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" 95 | else 96 | # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. 97 | touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" 98 | fi 99 | fi 100 | } 101 | 102 | # Signs a framework with the provided identity 103 | code_sign_if_enabled() { 104 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 105 | # Use the current code_sign_identitiy 106 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 107 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" 108 | 109 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 110 | code_sign_cmd="$code_sign_cmd &" 111 | fi 112 | echo "$code_sign_cmd" 113 | eval "$code_sign_cmd" 114 | fi 115 | } 116 | 117 | # Strip invalid architectures 118 | strip_invalid_archs() { 119 | binary="$1" 120 | # Get architectures for current target binary 121 | binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" 122 | # Intersect them with the architectures we are building for 123 | intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" 124 | # If there are no archs supported by this binary then warn the user 125 | if [[ -z "$intersected_archs" ]]; then 126 | echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." 127 | STRIP_BINARY_RETVAL=0 128 | return 129 | fi 130 | stripped="" 131 | for arch in $binary_archs; do 132 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then 133 | # Strip non-valid architectures in-place 134 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 135 | stripped="$stripped $arch" 136 | fi 137 | done 138 | if [[ "$stripped" ]]; then 139 | echo "Stripped $binary of architectures:$stripped" 140 | fi 141 | STRIP_BINARY_RETVAL=1 142 | } 143 | 144 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 145 | wait 146 | fi 147 | -------------------------------------------------------------------------------- /Demo/Pods/Target Support Files/Pods-DemoTests/Pods-DemoTests-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then 7 | # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy 8 | # resources to, so exit 0 (signalling the script phase was successful). 9 | exit 0 10 | fi 11 | 12 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 13 | 14 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 15 | > "$RESOURCES_TO_COPY" 16 | 17 | XCASSET_FILES=() 18 | 19 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 20 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 21 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 22 | 23 | case "${TARGETED_DEVICE_FAMILY:-}" in 24 | 1,2) 25 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 26 | ;; 27 | 1) 28 | TARGET_DEVICE_ARGS="--target-device iphone" 29 | ;; 30 | 2) 31 | TARGET_DEVICE_ARGS="--target-device ipad" 32 | ;; 33 | 3) 34 | TARGET_DEVICE_ARGS="--target-device tv" 35 | ;; 36 | 4) 37 | TARGET_DEVICE_ARGS="--target-device watch" 38 | ;; 39 | *) 40 | TARGET_DEVICE_ARGS="--target-device mac" 41 | ;; 42 | esac 43 | 44 | install_resource() 45 | { 46 | if [[ "$1" = /* ]] ; then 47 | RESOURCE_PATH="$1" 48 | else 49 | RESOURCE_PATH="${PODS_ROOT}/$1" 50 | fi 51 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 52 | cat << EOM 53 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 54 | EOM 55 | exit 1 56 | fi 57 | case $RESOURCE_PATH in 58 | *.storyboard) 59 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 60 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 61 | ;; 62 | *.xib) 63 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 64 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 65 | ;; 66 | *.framework) 67 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 68 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 69 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 70 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 71 | ;; 72 | *.xcdatamodel) 73 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true 74 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 75 | ;; 76 | *.xcdatamodeld) 77 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true 78 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 79 | ;; 80 | *.xcmappingmodel) 81 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true 82 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 83 | ;; 84 | *.xcassets) 85 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 86 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 87 | ;; 88 | *) 89 | echo "$RESOURCE_PATH" || true 90 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 91 | ;; 92 | esac 93 | } 94 | 95 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 96 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 97 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 98 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 99 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 100 | fi 101 | rm -f "$RESOURCES_TO_COPY" 102 | 103 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] 104 | then 105 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 106 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 107 | while read line; do 108 | if [[ $line != "${PODS_ROOT}*" ]]; then 109 | XCASSET_FILES+=("$line") 110 | fi 111 | done <<<"$OTHER_XCASSETS" 112 | 113 | if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then 114 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 115 | else 116 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_BUILD_DIR}/assetcatalog_generated_info.plist" 117 | fi 118 | fi 119 | -------------------------------------------------------------------------------- /Demo/Pods/Target Support Files/Pods-DemoTests/Pods-DemoTests-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_DemoTestsVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_DemoTestsVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Demo/Pods/Target Support Files/Pods-DemoTests/Pods-DemoTests.debug.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 3 | PODS_BUILD_DIR = ${BUILD_DIR} 4 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 5 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 6 | PODS_ROOT = ${SRCROOT}/Pods 7 | -------------------------------------------------------------------------------- /Demo/Pods/Target Support Files/Pods-DemoTests/Pods-DemoTests.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_DemoTests { 2 | umbrella header "Pods-DemoTests-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Demo/Pods/Target Support Files/Pods-DemoTests/Pods-DemoTests.release.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 3 | PODS_BUILD_DIR = ${BUILD_DIR} 4 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 5 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 6 | PODS_ROOT = ${SRCROOT}/Pods 7 | -------------------------------------------------------------------------------- /Demo/Pods/Target Support Files/Pods-DemoUITests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Demo/Pods/Target Support Files/Pods-DemoUITests/Pods-DemoUITests-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | Generated by CocoaPods - https://cocoapods.org 4 | -------------------------------------------------------------------------------- /Demo/Pods/Target Support Files/Pods-DemoUITests/Pods-DemoUITests-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Generated by CocoaPods - https://cocoapods.org 18 | Title 19 | 20 | Type 21 | PSGroupSpecifier 22 | 23 | 24 | StringsTable 25 | Acknowledgements 26 | Title 27 | Acknowledgements 28 | 29 | 30 | -------------------------------------------------------------------------------- /Demo/Pods/Target Support Files/Pods-DemoUITests/Pods-DemoUITests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_DemoUITests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_DemoUITests 5 | @end 6 | -------------------------------------------------------------------------------- /Demo/Pods/Target Support Files/Pods-DemoUITests/Pods-DemoUITests-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then 7 | # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy 8 | # frameworks to, so exit 0 (signalling the script phase was successful). 9 | exit 0 10 | fi 11 | 12 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 13 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 14 | 15 | COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" 16 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 17 | 18 | # Used as a return value for each invocation of `strip_invalid_archs` function. 19 | STRIP_BINARY_RETVAL=0 20 | 21 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 22 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 23 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 24 | 25 | # Copies and strips a vendored framework 26 | install_framework() 27 | { 28 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 29 | local source="${BUILT_PRODUCTS_DIR}/$1" 30 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 31 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 32 | elif [ -r "$1" ]; then 33 | local source="$1" 34 | fi 35 | 36 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 37 | 38 | if [ -L "${source}" ]; then 39 | echo "Symlinked..." 40 | source="$(readlink "${source}")" 41 | fi 42 | 43 | # Use filter instead of exclude so missing patterns don't throw errors. 44 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 45 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 46 | 47 | local basename 48 | basename="$(basename -s .framework "$1")" 49 | binary="${destination}/${basename}.framework/${basename}" 50 | if ! [ -r "$binary" ]; then 51 | binary="${destination}/${basename}" 52 | fi 53 | 54 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 55 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 56 | strip_invalid_archs "$binary" 57 | fi 58 | 59 | # Resign the code if required by the build settings to avoid unstable apps 60 | code_sign_if_enabled "${destination}/$(basename "$1")" 61 | 62 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 63 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 64 | local swift_runtime_libs 65 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 66 | for lib in $swift_runtime_libs; do 67 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 68 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 69 | code_sign_if_enabled "${destination}/${lib}" 70 | done 71 | fi 72 | } 73 | 74 | # Copies and strips a vendored dSYM 75 | install_dsym() { 76 | local source="$1" 77 | if [ -r "$source" ]; then 78 | # Copy the dSYM into a the targets temp dir. 79 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" 80 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" 81 | 82 | local basename 83 | basename="$(basename -s .framework.dSYM "$source")" 84 | binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" 85 | 86 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 87 | if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then 88 | strip_invalid_archs "$binary" 89 | fi 90 | 91 | if [[ $STRIP_BINARY_RETVAL == 1 ]]; then 92 | # Move the stripped file into its final destination. 93 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" 94 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" 95 | else 96 | # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. 97 | touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" 98 | fi 99 | fi 100 | } 101 | 102 | # Signs a framework with the provided identity 103 | code_sign_if_enabled() { 104 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 105 | # Use the current code_sign_identitiy 106 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 107 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" 108 | 109 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 110 | code_sign_cmd="$code_sign_cmd &" 111 | fi 112 | echo "$code_sign_cmd" 113 | eval "$code_sign_cmd" 114 | fi 115 | } 116 | 117 | # Strip invalid architectures 118 | strip_invalid_archs() { 119 | binary="$1" 120 | # Get architectures for current target binary 121 | binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" 122 | # Intersect them with the architectures we are building for 123 | intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" 124 | # If there are no archs supported by this binary then warn the user 125 | if [[ -z "$intersected_archs" ]]; then 126 | echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." 127 | STRIP_BINARY_RETVAL=0 128 | return 129 | fi 130 | stripped="" 131 | for arch in $binary_archs; do 132 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then 133 | # Strip non-valid architectures in-place 134 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 135 | stripped="$stripped $arch" 136 | fi 137 | done 138 | if [[ "$stripped" ]]; then 139 | echo "Stripped $binary of architectures:$stripped" 140 | fi 141 | STRIP_BINARY_RETVAL=1 142 | } 143 | 144 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 145 | wait 146 | fi 147 | -------------------------------------------------------------------------------- /Demo/Pods/Target Support Files/Pods-DemoUITests/Pods-DemoUITests-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then 7 | # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy 8 | # resources to, so exit 0 (signalling the script phase was successful). 9 | exit 0 10 | fi 11 | 12 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 13 | 14 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 15 | > "$RESOURCES_TO_COPY" 16 | 17 | XCASSET_FILES=() 18 | 19 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 20 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 21 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 22 | 23 | case "${TARGETED_DEVICE_FAMILY:-}" in 24 | 1,2) 25 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 26 | ;; 27 | 1) 28 | TARGET_DEVICE_ARGS="--target-device iphone" 29 | ;; 30 | 2) 31 | TARGET_DEVICE_ARGS="--target-device ipad" 32 | ;; 33 | 3) 34 | TARGET_DEVICE_ARGS="--target-device tv" 35 | ;; 36 | 4) 37 | TARGET_DEVICE_ARGS="--target-device watch" 38 | ;; 39 | *) 40 | TARGET_DEVICE_ARGS="--target-device mac" 41 | ;; 42 | esac 43 | 44 | install_resource() 45 | { 46 | if [[ "$1" = /* ]] ; then 47 | RESOURCE_PATH="$1" 48 | else 49 | RESOURCE_PATH="${PODS_ROOT}/$1" 50 | fi 51 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 52 | cat << EOM 53 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 54 | EOM 55 | exit 1 56 | fi 57 | case $RESOURCE_PATH in 58 | *.storyboard) 59 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 60 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 61 | ;; 62 | *.xib) 63 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 64 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 65 | ;; 66 | *.framework) 67 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 68 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 69 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 70 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 71 | ;; 72 | *.xcdatamodel) 73 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true 74 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 75 | ;; 76 | *.xcdatamodeld) 77 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true 78 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 79 | ;; 80 | *.xcmappingmodel) 81 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true 82 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 83 | ;; 84 | *.xcassets) 85 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 86 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 87 | ;; 88 | *) 89 | echo "$RESOURCE_PATH" || true 90 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 91 | ;; 92 | esac 93 | } 94 | 95 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 96 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 97 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 98 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 99 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 100 | fi 101 | rm -f "$RESOURCES_TO_COPY" 102 | 103 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] 104 | then 105 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 106 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 107 | while read line; do 108 | if [[ $line != "${PODS_ROOT}*" ]]; then 109 | XCASSET_FILES+=("$line") 110 | fi 111 | done <<<"$OTHER_XCASSETS" 112 | 113 | if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then 114 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 115 | else 116 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_BUILD_DIR}/assetcatalog_generated_info.plist" 117 | fi 118 | fi 119 | -------------------------------------------------------------------------------- /Demo/Pods/Target Support Files/Pods-DemoUITests/Pods-DemoUITests-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_DemoUITestsVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_DemoUITestsVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Demo/Pods/Target Support Files/Pods-DemoUITests/Pods-DemoUITests.debug.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 3 | PODS_BUILD_DIR = ${BUILD_DIR} 4 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 5 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 6 | PODS_ROOT = ${SRCROOT}/Pods 7 | -------------------------------------------------------------------------------- /Demo/Pods/Target Support Files/Pods-DemoUITests/Pods-DemoUITests.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_DemoUITests { 2 | umbrella header "Pods-DemoUITests-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Demo/Pods/Target Support Files/Pods-DemoUITests/Pods-DemoUITests.release.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 3 | PODS_BUILD_DIR = ${BUILD_DIR} 4 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 5 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 6 | PODS_ROOT = ${SRCROOT}/Pods 7 | -------------------------------------------------------------------------------- /Demo/Pods/Target Support Files/SubtleVolume/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 0.5.2 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Demo/Pods/Target Support Files/SubtleVolume/SubtleVolume-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_SubtleVolume : NSObject 3 | @end 4 | @implementation PodsDummy_SubtleVolume 5 | @end 6 | -------------------------------------------------------------------------------- /Demo/Pods/Target Support Files/SubtleVolume/SubtleVolume-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Demo/Pods/Target Support Files/SubtleVolume/SubtleVolume-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double SubtleVolumeVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char SubtleVolumeVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Demo/Pods/Target Support Files/SubtleVolume/SubtleVolume.modulemap: -------------------------------------------------------------------------------- 1 | framework module SubtleVolume { 2 | umbrella header "SubtleVolume-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Demo/Pods/Target Support Files/SubtleVolume/SubtleVolume.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SubtleVolume 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | -------------------------------------------------------------------------------- /Demo/build/Pods.build/Release-iphoneos/Pods-Demo.build/dgph: -------------------------------------------------------------------------------- 1 | DGPH1.04 Feb 23 201618:43:29/UsersAndreacode SubtleVolumeDemoPods -------------------------------------------------------------------------------- /Demo/build/Pods.build/Release-iphoneos/SubtleVolume.build/dgph: -------------------------------------------------------------------------------- 1 | DGPH1.04 Feb 23 201618:43:29/UsersAndreacode SubtleVolumeDemoPods -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Andrea Mazzini 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version:5.0 2 | import PackageDescription 3 | 4 | let package = Package( 5 | name: "SubtleVolume", 6 | products: [ 7 | .library( 8 | name: "SubtleVolume", 9 | targets: ["SubtleVolume"]) 10 | ], 11 | targets: [ 12 | .target( 13 | name: "SubtleVolume", 14 | path: "Source") 15 | ] 16 | ) -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 |

4 | 5 | [![CocoaPods](https://cocoapod-badges.herokuapp.com/v/SubtleVolume/badge.svg)](http://cocoapods.org/?q=subtlevolume) 6 | [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) 7 | ![Swift 5.0](https://img.shields.io/badge/swift-5.0-orange.svg) 8 | 9 | Replace the volume popup with a more subtle way to display the volume when the user changes it with the volume rocker. 10 | 11 |

12 | 13 |

14 | 15 | # Why and how 16 | The iOS default popover showing the volume status that appears when the user clicks the volume rocker is a big obtrusive glossy view that covers the content shown. This library offers a way to show a more subtle indicator. 17 | To make sure that the popover is not shown there are two conditions that need to be satisfied: 18 | - An `AVAudioSession` needs to be active 19 | - An `MPVolumeView` needs to be in the current view's hierarchy, and its alpha needs to be greater than 0 20 | 21 | Once a `SubtleVolume` is added to your view, an audio session is automatically started, and the view's alpha is set to `0.0001` in the hidden state. 22 | 23 | # Getting Started 24 | Create an instance of `SubtleVolume` with one of its convenience initializers, and set its position (you can either set the frame or let autolayout handle it): 25 | ```swift 26 | let volume = SubtleVolume(style: .plain) 27 | volume.frame = CGRect(x: 0, y: 10, width: UIScreen.main.bounds.width, height: 4) // or wherever you like 28 | ``` 29 | 30 | Set the barTintColor property: 31 | ```swift 32 | volume.barTintColor = .red 33 | ``` 34 | 35 | Set the animation type if needed (no animation will result in the indicator being always visible): 36 | ```swift 37 | volume.animation = .slideDown 38 | ``` 39 | 40 | Add the view to your hierarchy: 41 | ```swift 42 | view.addSubview(volume) 43 | ``` 44 | 45 | To change the volume programmatically: 46 | ```swift 47 | try? volume.setVolumeLevel(0.5) 48 | ``` 49 | 50 | Or use the convenience methods: 51 | ```swift 52 | try? volume.decreaseVolume(by: 0.2, animated: true) 53 | try? volume.increaseVolume(by: 0.2, animated: true) 54 | ``` 55 | 56 | ### Accessory image 57 | You can provide an accessory image that will be shown to the bar's left. See the delegate method: 58 | ```swift 59 | func subtleVolume(_ subtleVolume: SubtleVolume, accessoryFor value: Double) -> UIImage? { 60 | return value > 0 ? #imageLiteral(resourceName: "volume-on.pdf") : #imageLiteral(resourceName: "volume-off.pdf") 61 | } 62 | ``` 63 | 64 | ### iPhone X(S/R) support 65 | Want to be fancy and show the volume bar in the notch area? Check out the demo project. The main gist is this: 66 | 67 | ```swift 68 | class ViewController: UIViewController { 69 | let volume = SubtleVolume(style: .rounded) 70 | var statusBarVisible = true 71 | 72 | // ... 73 | 74 | override func viewDidLayoutSubviews() { 75 | super.viewDidLayoutSubviews() 76 | 77 | if view.safeAreaInsets.top > 0 { 78 | volume.padding = CGSize(width: 2, height: 8) 79 | volume.frame = CGRect(x: 16, y: 8, width: 60, height: 20) 80 | } else { 81 | // older phones here 82 | } 83 | } 84 | 85 | override var preferredStatusBarStyle: UIStatusBarStyle { 86 | return .lightContent 87 | } 88 | 89 | override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation { 90 | return .slide 91 | } 92 | 93 | override var prefersStatusBarHidden: Bool { 94 | return !statusBarVisible 95 | } 96 | } 97 | 98 | extension ViewController: SubtleVolumeDelegate { 99 | func subtleVolume(_ subtleVolume: SubtleVolume, didChange value: Double) { 100 | if !subtleVolume.isAnimating && view.safeAreaInsets.top > 0 { 101 | statusBarVisible = true 102 | UIView.animate(withDuration: 0.1) { 103 | self.setNeedsStatusBarAppearanceUpdate() 104 | } 105 | } 106 | } 107 | 108 | func subtleVolume(_ subtleVolume: SubtleVolume, willChange value: Double) { 109 | if !subtleVolume.isAnimating && view.safeAreaInsets.top > 0 { 110 | statusBarVisible = false 111 | UIView.animate(withDuration: 0.1) { 112 | self.setNeedsStatusBarAppearanceUpdate() 113 | } 114 | } 115 | } 116 | } 117 | ``` 118 | 119 | 120 | # Handle the background state 121 | 122 | Once your app goes in background, you'll need to resume the session when it becomes active: 123 | 124 | ```swift 125 | NotificationCenter.default.addObserver(volume, selector: #selector(SubtleVolume.resume), name: NSNotification.Name.UIApplicationDidBecomeActive, object: nil) 126 | ``` 127 | 128 | SubtleVolume automatically removes the observer on deinit. 129 | 130 | # Hire us 131 | Written by [Andrea Mazzini](https://twitter.com/theandreamazz). We're available for freelance work, feel free to contact us [here](https://www.fancypixel.it/contact/). 132 | 133 | Want to support the development of [these free libraries](https://cocoapods.org/owners/734)? Buy me a coffee ☕️ via [Paypal](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=46FNZD4PDVNRU). 134 | 135 | # MIT License 136 | 137 | Copyright (c) 2017-2018 Andrea Mazzini. All rights reserved. 138 | 139 | Permission is hereby granted, free of charge, to any person obtaining a 140 | copy of this software and associated documentation files (the "Software"), 141 | to deal in the Software without restriction, including 142 | without limitation the rights to use, copy, modify, merge, publish, 143 | distribute, sublicense, and/or sell copies of the Software, and to 144 | permit persons to whom the Software is furnished to do so, subject to 145 | the following conditions: 146 | 147 | The above copyright notice and this permission notice shall be included 148 | in all copies or substantial portions of the Software. 149 | 150 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 151 | OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 152 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 153 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 154 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 155 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 156 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 157 | -------------------------------------------------------------------------------- /Source/SubtleVolume.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SubtleVolume.swift 3 | // SubtleVolume 4 | // 5 | // Created by Andrea Mazzini on 05/03/16. 6 | // Copyright © 2016 Fancy Pixel. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import MediaPlayer 11 | import AVFoundation 12 | 13 | /** 14 | The style of the volume indicator 15 | 16 | - plain: A plain bar 17 | - rounded: A plain bar with rounded corners 18 | */ 19 | @objc public enum SubtleVolumeStyle: Int { 20 | case plain 21 | case rounded 22 | } 23 | 24 | /** 25 | The entry and exit animation of the volume indicator 26 | 27 | - None: The indicator is always visible 28 | - SlideDown: The indicator fades in/out and slides from/to the top into position 29 | - FadeIn: The indicator fades in and out 30 | */ 31 | @objc public enum SubtleVolumeAnimation: Int { 32 | case none 33 | case slideDown 34 | case fadeIn 35 | } 36 | 37 | /** 38 | Errors being thrown by `SubtleError`. 39 | 40 | - unableToChangeVolumeLevel: `SubtleVolume` was unable to change audio level 41 | */ 42 | public enum SubtleVolumeError: Error { 43 | case unableToChangeVolumeLevel 44 | } 45 | 46 | /** 47 | Delegate protocol fo `SubtleVolume`. 48 | Notifies the delegate when a change is about to happen (before the entry animation) 49 | and when a change occurred (and the exit animation is complete) 50 | */ 51 | @objc public protocol SubtleVolumeDelegate { 52 | /** 53 | The volume is about to change. This is fired before performing any entry animation 54 | 55 | - parameter subtleVolume: The current instance of `SubtleVolume` 56 | - parameter value: The value of the volume (between 0 an 1.0) 57 | */ 58 | @objc optional func subtleVolume(_ subtleVolume: SubtleVolume, willChange value: Double) 59 | 60 | /** 61 | The volume did change. This is fired after the exit animation is done 62 | 63 | - parameter subtleVolume: The current instance of `SubtleVolume` 64 | - parameter value: The value of the volume (between 0 an 1.0) 65 | */ 66 | @objc optional func subtleVolume(_ subtleVolume: SubtleVolume, didChange value: Double) 67 | 68 | /** 69 | The volume did change. This is fired after the exit animation is done 70 | 71 | - parameter subtleVolume: The current instance of `SubtleVolume` 72 | - parameter value: The value of the volume (between 0 an 1.0) 73 | - returns: An optional UIImage displayed near the bar 74 | */ 75 | @objc optional func subtleVolume(_ subtleVolume: SubtleVolume, accessoryFor value: Double) -> UIImage? 76 | } 77 | 78 | /** 79 | Replace the system volume popup with a more subtle way to display the volume 80 | when the user changes it with the volume rocker. 81 | */ 82 | @objc open class SubtleVolume: UIView { 83 | 84 | /** 85 | The style of the volume indicator 86 | */ 87 | open fileprivate(set) var style = SubtleVolumeStyle.plain 88 | 89 | /** 90 | The entry and exit animation of the indicator. The animation is triggered by the volume 91 | If the animation is set to `.None`, the volume indicator is always visible 92 | */ 93 | open var animation = SubtleVolumeAnimation.none { 94 | didSet { 95 | updateVolume(volumeLevel, animated: false) 96 | } 97 | } 98 | 99 | open var barBackgroundColor = UIColor.clear { 100 | didSet { 101 | container.backgroundColor = barBackgroundColor 102 | } 103 | } 104 | 105 | open var barTintColor = UIColor.white { 106 | didSet { 107 | overlay.backgroundColor = barTintColor 108 | } 109 | } 110 | 111 | open weak var delegate: SubtleVolumeDelegate? 112 | 113 | fileprivate let volume = MPVolumeView(frame: .zero) 114 | fileprivate let overlay = UIView(frame: .zero) 115 | fileprivate let container = UIView(frame: .zero) 116 | fileprivate let accessory = UIImageView(frame: .zero) 117 | 118 | /// Returns the current volume. Read-only 119 | public fileprivate(set) var volumeLevel = Double(0) 120 | 121 | /// Returns the animation state. Read-only 122 | public fileprivate(set) var isAnimating = false 123 | 124 | /// Returns the default volume bump when you programmatically change the volume 125 | public static let DefaultVolumeStep: Double = 0.05 126 | 127 | /// Padding for the inner volume bar 128 | public var padding: CGSize = .zero 129 | 130 | private var audioSessionOutputVolumeObserver: Any? 131 | 132 | 133 | /// Initialize with a style and a frame 134 | /// 135 | /// - Parameters: 136 | /// - style: the SubtleVolumeStyle 137 | /// - frame: the view's frame 138 | @objc convenience public init(style: SubtleVolumeStyle, frame: CGRect) { 139 | self.init(frame: frame) 140 | self.style = style 141 | } 142 | 143 | /// Initialize with a style and a frame 144 | /// 145 | /// - Parameters: 146 | /// - style: the SubtleVolumeStyle 147 | @objc convenience public init(style: SubtleVolumeStyle) { 148 | self.init(style: style, frame: CGRect.zero) 149 | } 150 | 151 | @objc required public init?(coder aDecoder: NSCoder) { 152 | super.init(coder: aDecoder) 153 | setup() 154 | } 155 | 156 | @objc required public override init(frame: CGRect) { 157 | super.init(frame: frame) 158 | setup() 159 | } 160 | 161 | required public init() { 162 | fatalError("Please use the convenience initializers instead") 163 | } 164 | 165 | 166 | /// Increase the volume by a given step 167 | /// 168 | /// - Parameter delta: the volume increase. The volume goes from 0 to 1, delta must be a Double in that range 169 | /// - Throws: `SubtleVolumeError.unableToChangeVolumeLevel` 170 | @objc public func increaseVolume(by step: Double = DefaultVolumeStep, animated: Bool = false) throws { 171 | try setVolumeLevel(volumeLevel + step, animated: animated) 172 | } 173 | 174 | /// Increase the volume by a given step 175 | /// 176 | /// - Parameter delta: the volume increase. The volume goes from 0 to 1, delta must be a Double in that range 177 | /// - Throws: `SubtleVolumeError.unableToChangeVolumeLevel` 178 | @objc public func decreaseVolume(by step: Double = DefaultVolumeStep, animated: Bool = false) throws { 179 | try setVolumeLevel(volumeLevel - step, animated: animated) 180 | } 181 | 182 | /** 183 | Programatically set the volume level. 184 | 185 | - parameter volumeLevel: The new level of volume (between 0 an 1.0) 186 | - parameter animated: Indicating whether the change should be animated 187 | */ 188 | @objc public func setVolumeLevel(_ volumeLevel: Double, animated: Bool = false) throws { 189 | guard let slider = volume.subviews.compactMap({ $0 as? UISlider }).first else { 190 | throw SubtleVolumeError.unableToChangeVolumeLevel 191 | } 192 | 193 | var level = volumeLevel 194 | if level < 0 { 195 | level = 0 196 | } 197 | if level > 1 { 198 | level = 1 199 | } 200 | 201 | let updateVolume = { 202 | // Trick iOS into thinking that slider value has changed 203 | slider.value = Float(level) 204 | } 205 | 206 | // If user opted out of animation, toggle observation for the duration of the change 207 | if !animated { 208 | audioSessionOutputVolumeObserver = nil 209 | 210 | updateVolume() 211 | 212 | DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.1) { [weak self] in 213 | guard let `self` = self else { return } 214 | self.audioSessionOutputVolumeObserver = AVAudioSession.sharedInstance().observe(\.outputVolume) { [weak self] (audioSession, _) in 215 | self?.updateVolume(level, animated: true) 216 | } 217 | } 218 | } else { 219 | updateVolume() 220 | } 221 | } 222 | 223 | /// Resume audio session. Call this once the app becomes active after being pushed in background 224 | @objc public func resume() { 225 | do { 226 | try AVAudioSession.sharedInstance().setActive(true) 227 | } catch { 228 | print("Unable to initialize AVAudioSession") 229 | return 230 | } 231 | } 232 | 233 | fileprivate func setup() { 234 | resume() 235 | updateVolume(Double(AVAudioSession.sharedInstance().outputVolume), animated: false) 236 | self.audioSessionOutputVolumeObserver = AVAudioSession.sharedInstance().observe(\.outputVolume) { [weak self] (audioSession, _) in 237 | guard let `self` = self else { return } 238 | self.updateVolume(Double(audioSession.outputVolume), animated: true) 239 | } 240 | 241 | backgroundColor = .clear 242 | container.backgroundColor = .clear 243 | 244 | volume.setVolumeThumbImage(UIImage(), for: UIControl.State()) 245 | volume.isUserInteractionEnabled = false 246 | volume.alpha = 0.0001 247 | volume.showsRouteButton = false 248 | 249 | addSubview(volume) 250 | 251 | overlay.backgroundColor = .white 252 | container.addSubview(overlay) 253 | 254 | addSubview(accessory) 255 | addSubview(container) 256 | } 257 | 258 | open override func layoutSubviews() { 259 | super.layoutSubviews() 260 | 261 | switch style { 262 | case .plain: 263 | container.layer.cornerRadius = 0 264 | overlay.layer.cornerRadius = 0 265 | case .rounded: 266 | container.layer.cornerRadius = container.frame.height / 2 267 | overlay.layer.cornerRadius = container.frame.height / 2 268 | } 269 | } 270 | 271 | fileprivate func updateVolume(_ value: Double, animated: Bool) { 272 | delegate?.subtleVolume?(self, willChange: value) 273 | let previous = volumeLevel 274 | volumeLevel = value 275 | 276 | let image = delegate?.subtleVolume?(self, accessoryFor: volumeLevel) 277 | accessory.image = image 278 | var insets = UIEdgeInsets.zero 279 | if image != nil { 280 | insets.left += (frame.height) 281 | accessory.frame = CGRect(x: 0, y: 0, width: frame.height, height: frame.height) 282 | } 283 | insets.left += padding.width 284 | insets.right += padding.width 285 | insets.bottom += padding.height 286 | insets.top += padding.height 287 | 288 | let width = frame.size.width - insets.left - insets.right 289 | let height = frame.size.height - insets.top - insets.bottom 290 | 291 | overlay.frame = frame 292 | container.frame = CGRect(x: insets.left, y: insets.top, width: width, height: height) 293 | overlay.frame = CGRect(x: 0, y: 0, width: container.frame.width * CGFloat(previous), height: height) 294 | 295 | if animated { 296 | isAnimating = true 297 | } 298 | UIView.animate(withDuration: animated ? 0.1 : 0, animations: { () -> Void in 299 | self.overlay.frame.size.width = self.container.frame.width * CGFloat(self.volumeLevel) 300 | }) 301 | 302 | UIView.animateKeyframes(withDuration: animated ? 2 : 0, delay: 0, options: .beginFromCurrentState, animations: { () -> Void in 303 | UIView.addKeyframe(withRelativeStartTime: 0, relativeDuration: 0.2, animations: { 304 | switch self.animation { 305 | case .none: break 306 | case .fadeIn: 307 | self.alpha = 1 308 | case .slideDown: 309 | self.alpha = 1 310 | self.transform = CGAffineTransform.identity 311 | } 312 | }) 313 | 314 | UIView.addKeyframe(withRelativeStartTime: 0.8, relativeDuration: 0.2, animations: { () -> Void in 315 | switch self.animation { 316 | case .none: break 317 | case .fadeIn: 318 | self.alpha = 0.0001 319 | case .slideDown: 320 | self.alpha = 0.0001 321 | self.transform = CGAffineTransform(translationX: 0, y: -self.frame.height) 322 | } 323 | }) 324 | 325 | }) { finished in 326 | if self.isAnimating { 327 | self.isAnimating = !finished 328 | } 329 | self.delegate?.subtleVolume?(self, didChange: value) 330 | } 331 | } 332 | 333 | deinit { 334 | NotificationCenter.default.removeObserver(self) 335 | } 336 | } 337 | -------------------------------------------------------------------------------- /SubtleVolume.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = 'SubtleVolume' 3 | s.version = '1.1.0' 4 | s.license = 'MIT' 5 | s.summary = 'Replace the system volume popup with a more subtle indicator' 6 | s.description = <<-DESC 7 | Drop in control that shows the system volume when the user changes it with the volume rocker in a more subtle and less obtrusive way. 8 | DESC 9 | s.homepage = 'https://github.com/andreamazz/SubtleVolume' 10 | s.social_media_url = 'https://twitter.com/theandreamazz' 11 | s.authors = { 'Andrea Mazzini' => 'andrea.mazzini@gmail.com' } 12 | s.source = { :git => 'https://github.com/andreamazz/SubtleVolume.git', :tag => s.version } 13 | 14 | s.ios.deployment_target = '8.0' 15 | s.swift_version = '5.0' 16 | s.source_files = 'Source/*.swift' 17 | 18 | s.requires_arc = true 19 | end 20 | -------------------------------------------------------------------------------- /SubtleVolume.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 65A9642E1C980AB700F760BB /* SubtleVolume.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65A9642D1C980AB700F760BB /* SubtleVolume.swift */; }; 11 | 65FCA93D1C980A2E00B2610D /* SubtleVolume.h in Headers */ = {isa = PBXBuildFile; fileRef = 65FCA93C1C980A2E00B2610D /* SubtleVolume.h */; settings = {ATTRIBUTES = (Public, ); }; }; 12 | /* End PBXBuildFile section */ 13 | 14 | /* Begin PBXFileReference section */ 15 | 65A9642D1C980AB700F760BB /* SubtleVolume.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SubtleVolume.swift; path = Source/SubtleVolume.swift; sourceTree = SOURCE_ROOT; }; 16 | 65FCA9391C980A2E00B2610D /* SubtleVolume.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SubtleVolume.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 17 | 65FCA93C1C980A2E00B2610D /* SubtleVolume.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SubtleVolume.h; sourceTree = ""; }; 18 | 65FCA93E1C980A2E00B2610D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 19 | /* End PBXFileReference section */ 20 | 21 | /* Begin PBXFrameworksBuildPhase section */ 22 | 65FCA9351C980A2E00B2610D /* Frameworks */ = { 23 | isa = PBXFrameworksBuildPhase; 24 | buildActionMask = 2147483647; 25 | files = ( 26 | ); 27 | runOnlyForDeploymentPostprocessing = 0; 28 | }; 29 | /* End PBXFrameworksBuildPhase section */ 30 | 31 | /* Begin PBXGroup section */ 32 | 65FCA92F1C980A2E00B2610D = { 33 | isa = PBXGroup; 34 | children = ( 35 | 65FCA93B1C980A2E00B2610D /* SubtleVolume */, 36 | 65FCA93A1C980A2E00B2610D /* Products */, 37 | ); 38 | sourceTree = ""; 39 | }; 40 | 65FCA93A1C980A2E00B2610D /* Products */ = { 41 | isa = PBXGroup; 42 | children = ( 43 | 65FCA9391C980A2E00B2610D /* SubtleVolume.framework */, 44 | ); 45 | name = Products; 46 | sourceTree = ""; 47 | }; 48 | 65FCA93B1C980A2E00B2610D /* SubtleVolume */ = { 49 | isa = PBXGroup; 50 | children = ( 51 | 65A9642D1C980AB700F760BB /* SubtleVolume.swift */, 52 | 65FCA93C1C980A2E00B2610D /* SubtleVolume.h */, 53 | 65FCA93E1C980A2E00B2610D /* Info.plist */, 54 | ); 55 | path = SubtleVolume; 56 | sourceTree = ""; 57 | }; 58 | /* End PBXGroup section */ 59 | 60 | /* Begin PBXHeadersBuildPhase section */ 61 | 65FCA9361C980A2E00B2610D /* Headers */ = { 62 | isa = PBXHeadersBuildPhase; 63 | buildActionMask = 2147483647; 64 | files = ( 65 | 65FCA93D1C980A2E00B2610D /* SubtleVolume.h in Headers */, 66 | ); 67 | runOnlyForDeploymentPostprocessing = 0; 68 | }; 69 | /* End PBXHeadersBuildPhase section */ 70 | 71 | /* Begin PBXNativeTarget section */ 72 | 65FCA9381C980A2E00B2610D /* SubtleVolume */ = { 73 | isa = PBXNativeTarget; 74 | buildConfigurationList = 65FCA9411C980A2E00B2610D /* Build configuration list for PBXNativeTarget "SubtleVolume" */; 75 | buildPhases = ( 76 | 65FCA9341C980A2E00B2610D /* Sources */, 77 | 65FCA9351C980A2E00B2610D /* Frameworks */, 78 | 65FCA9361C980A2E00B2610D /* Headers */, 79 | 65FCA9371C980A2E00B2610D /* Resources */, 80 | ); 81 | buildRules = ( 82 | ); 83 | dependencies = ( 84 | ); 85 | name = SubtleVolume; 86 | productName = SubtleVolume; 87 | productReference = 65FCA9391C980A2E00B2610D /* SubtleVolume.framework */; 88 | productType = "com.apple.product-type.framework"; 89 | }; 90 | /* End PBXNativeTarget section */ 91 | 92 | /* Begin PBXProject section */ 93 | 65FCA9301C980A2E00B2610D /* Project object */ = { 94 | isa = PBXProject; 95 | attributes = { 96 | LastUpgradeCheck = 1000; 97 | ORGANIZATIONNAME = "Andrea Mazzini"; 98 | TargetAttributes = { 99 | 65FCA9381C980A2E00B2610D = { 100 | CreatedOnToolsVersion = 7.2.1; 101 | LastSwiftMigration = 0800; 102 | }; 103 | }; 104 | }; 105 | buildConfigurationList = 65FCA9331C980A2E00B2610D /* Build configuration list for PBXProject "SubtleVolume" */; 106 | compatibilityVersion = "Xcode 3.2"; 107 | developmentRegion = English; 108 | hasScannedForEncodings = 0; 109 | knownRegions = ( 110 | English, 111 | en, 112 | ); 113 | mainGroup = 65FCA92F1C980A2E00B2610D; 114 | productRefGroup = 65FCA93A1C980A2E00B2610D /* Products */; 115 | projectDirPath = ""; 116 | projectRoot = ""; 117 | targets = ( 118 | 65FCA9381C980A2E00B2610D /* SubtleVolume */, 119 | ); 120 | }; 121 | /* End PBXProject section */ 122 | 123 | /* Begin PBXResourcesBuildPhase section */ 124 | 65FCA9371C980A2E00B2610D /* Resources */ = { 125 | isa = PBXResourcesBuildPhase; 126 | buildActionMask = 2147483647; 127 | files = ( 128 | ); 129 | runOnlyForDeploymentPostprocessing = 0; 130 | }; 131 | /* End PBXResourcesBuildPhase section */ 132 | 133 | /* Begin PBXSourcesBuildPhase section */ 134 | 65FCA9341C980A2E00B2610D /* Sources */ = { 135 | isa = PBXSourcesBuildPhase; 136 | buildActionMask = 2147483647; 137 | files = ( 138 | 65A9642E1C980AB700F760BB /* SubtleVolume.swift in Sources */, 139 | ); 140 | runOnlyForDeploymentPostprocessing = 0; 141 | }; 142 | /* End PBXSourcesBuildPhase section */ 143 | 144 | /* Begin XCBuildConfiguration section */ 145 | 65FCA93F1C980A2E00B2610D /* Debug */ = { 146 | isa = XCBuildConfiguration; 147 | buildSettings = { 148 | ALWAYS_SEARCH_USER_PATHS = NO; 149 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 150 | CLANG_CXX_LIBRARY = "libc++"; 151 | CLANG_ENABLE_MODULES = YES; 152 | CLANG_ENABLE_OBJC_ARC = YES; 153 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 154 | CLANG_WARN_BOOL_CONVERSION = YES; 155 | CLANG_WARN_COMMA = YES; 156 | CLANG_WARN_CONSTANT_CONVERSION = YES; 157 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 158 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 159 | CLANG_WARN_EMPTY_BODY = YES; 160 | CLANG_WARN_ENUM_CONVERSION = YES; 161 | CLANG_WARN_INFINITE_RECURSION = YES; 162 | CLANG_WARN_INT_CONVERSION = YES; 163 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 164 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 165 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 166 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 167 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 168 | CLANG_WARN_STRICT_PROTOTYPES = YES; 169 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 170 | CLANG_WARN_UNREACHABLE_CODE = YES; 171 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 172 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 173 | COPY_PHASE_STRIP = NO; 174 | CURRENT_PROJECT_VERSION = 1; 175 | DEBUG_INFORMATION_FORMAT = dwarf; 176 | ENABLE_STRICT_OBJC_MSGSEND = YES; 177 | ENABLE_TESTABILITY = YES; 178 | GCC_C_LANGUAGE_STANDARD = gnu99; 179 | GCC_DYNAMIC_NO_PIC = NO; 180 | GCC_NO_COMMON_BLOCKS = YES; 181 | GCC_OPTIMIZATION_LEVEL = 0; 182 | GCC_PREPROCESSOR_DEFINITIONS = ( 183 | "DEBUG=1", 184 | "$(inherited)", 185 | ); 186 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 187 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 188 | GCC_WARN_UNDECLARED_SELECTOR = YES; 189 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 190 | GCC_WARN_UNUSED_FUNCTION = YES; 191 | GCC_WARN_UNUSED_VARIABLE = YES; 192 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 193 | MTL_ENABLE_DEBUG_INFO = YES; 194 | ONLY_ACTIVE_ARCH = YES; 195 | SDKROOT = iphoneos; 196 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 197 | SWIFT_VERSION = 5.0; 198 | TARGETED_DEVICE_FAMILY = "1,2"; 199 | VERSIONING_SYSTEM = "apple-generic"; 200 | VERSION_INFO_PREFIX = ""; 201 | }; 202 | name = Debug; 203 | }; 204 | 65FCA9401C980A2E00B2610D /* Release */ = { 205 | isa = XCBuildConfiguration; 206 | buildSettings = { 207 | ALWAYS_SEARCH_USER_PATHS = NO; 208 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 209 | CLANG_CXX_LIBRARY = "libc++"; 210 | CLANG_ENABLE_MODULES = YES; 211 | CLANG_ENABLE_OBJC_ARC = YES; 212 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 213 | CLANG_WARN_BOOL_CONVERSION = YES; 214 | CLANG_WARN_COMMA = YES; 215 | CLANG_WARN_CONSTANT_CONVERSION = YES; 216 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 217 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 218 | CLANG_WARN_EMPTY_BODY = YES; 219 | CLANG_WARN_ENUM_CONVERSION = YES; 220 | CLANG_WARN_INFINITE_RECURSION = YES; 221 | CLANG_WARN_INT_CONVERSION = YES; 222 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 223 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 224 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 225 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 226 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 227 | CLANG_WARN_STRICT_PROTOTYPES = YES; 228 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 229 | CLANG_WARN_UNREACHABLE_CODE = YES; 230 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 231 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 232 | COPY_PHASE_STRIP = NO; 233 | CURRENT_PROJECT_VERSION = 1; 234 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 235 | ENABLE_NS_ASSERTIONS = NO; 236 | ENABLE_STRICT_OBJC_MSGSEND = YES; 237 | GCC_C_LANGUAGE_STANDARD = gnu99; 238 | GCC_NO_COMMON_BLOCKS = YES; 239 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 240 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 241 | GCC_WARN_UNDECLARED_SELECTOR = YES; 242 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 243 | GCC_WARN_UNUSED_FUNCTION = YES; 244 | GCC_WARN_UNUSED_VARIABLE = YES; 245 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 246 | MTL_ENABLE_DEBUG_INFO = NO; 247 | SDKROOT = iphoneos; 248 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 249 | SWIFT_VERSION = 5.0; 250 | TARGETED_DEVICE_FAMILY = "1,2"; 251 | VALIDATE_PRODUCT = YES; 252 | VERSIONING_SYSTEM = "apple-generic"; 253 | VERSION_INFO_PREFIX = ""; 254 | }; 255 | name = Release; 256 | }; 257 | 65FCA9421C980A2E00B2610D /* Debug */ = { 258 | isa = XCBuildConfiguration; 259 | buildSettings = { 260 | CLANG_ENABLE_MODULES = YES; 261 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 262 | DEFINES_MODULE = YES; 263 | DYLIB_COMPATIBILITY_VERSION = 1; 264 | DYLIB_CURRENT_VERSION = 1; 265 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 266 | INFOPLIST_FILE = SubtleVolume/Info.plist; 267 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 268 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 269 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 270 | PRODUCT_BUNDLE_IDENTIFIER = me.whoisandrea.SubtleVolume; 271 | PRODUCT_NAME = "$(TARGET_NAME)"; 272 | SKIP_INSTALL = YES; 273 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 274 | SWIFT_VERSION = 4.2; 275 | }; 276 | name = Debug; 277 | }; 278 | 65FCA9431C980A2E00B2610D /* Release */ = { 279 | isa = XCBuildConfiguration; 280 | buildSettings = { 281 | CLANG_ENABLE_MODULES = YES; 282 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 283 | DEFINES_MODULE = YES; 284 | DYLIB_COMPATIBILITY_VERSION = 1; 285 | DYLIB_CURRENT_VERSION = 1; 286 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 287 | INFOPLIST_FILE = SubtleVolume/Info.plist; 288 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 289 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 290 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 291 | PRODUCT_BUNDLE_IDENTIFIER = me.whoisandrea.SubtleVolume; 292 | PRODUCT_NAME = "$(TARGET_NAME)"; 293 | SKIP_INSTALL = YES; 294 | SWIFT_VERSION = 4.2; 295 | }; 296 | name = Release; 297 | }; 298 | /* End XCBuildConfiguration section */ 299 | 300 | /* Begin XCConfigurationList section */ 301 | 65FCA9331C980A2E00B2610D /* Build configuration list for PBXProject "SubtleVolume" */ = { 302 | isa = XCConfigurationList; 303 | buildConfigurations = ( 304 | 65FCA93F1C980A2E00B2610D /* Debug */, 305 | 65FCA9401C980A2E00B2610D /* Release */, 306 | ); 307 | defaultConfigurationIsVisible = 0; 308 | defaultConfigurationName = Release; 309 | }; 310 | 65FCA9411C980A2E00B2610D /* Build configuration list for PBXNativeTarget "SubtleVolume" */ = { 311 | isa = XCConfigurationList; 312 | buildConfigurations = ( 313 | 65FCA9421C980A2E00B2610D /* Debug */, 314 | 65FCA9431C980A2E00B2610D /* Release */, 315 | ); 316 | defaultConfigurationIsVisible = 0; 317 | defaultConfigurationName = Release; 318 | }; 319 | /* End XCConfigurationList section */ 320 | }; 321 | rootObject = 65FCA9301C980A2E00B2610D /* Project object */; 322 | } 323 | -------------------------------------------------------------------------------- /SubtleVolume.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /SubtleVolume.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /SubtleVolume.xcodeproj/xcshareddata/xcschemes/SubtleVolume.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 70 | 71 | 72 | 73 | 75 | 76 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /SubtleVolume/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /SubtleVolume/SubtleVolume.h: -------------------------------------------------------------------------------- 1 | // 2 | // SubtleVolume.h 3 | // SubtleVolume 4 | // 5 | // Created by Andrea Mazzini on 15/03/16. 6 | // Copyright © 2016 Andrea Mazzini. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for SubtleVolume. 12 | FOUNDATION_EXPORT double SubtleVolumeVersionNumber; 13 | 14 | //! Project version string for SubtleVolume. 15 | FOUNDATION_EXPORT const unsigned char SubtleVolumeVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | -------------------------------------------------------------------------------- /assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andreamazz/SubtleVolume/3b92bfe508d56ac9a0424676d0ed9c18ca546edc/assets/logo.png -------------------------------------------------------------------------------- /assets/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andreamazz/SubtleVolume/3b92bfe508d56ac9a0424676d0ed9c18ca546edc/assets/screenshot.png --------------------------------------------------------------------------------