├── Pods ├── HandyFrame │ ├── LICENSE │ ├── README.md │ ├── UIView+LayoutMethods.h │ └── UIView+LayoutMethods.m ├── Headers │ ├── Private │ │ └── HandyFrame │ │ │ └── UIView+LayoutMethods.h │ └── Public │ │ └── HandyFrame │ │ └── UIView+LayoutMethods.h ├── Target Support Files │ ├── HandyFrame │ │ ├── HandyFrame-dummy.m │ │ ├── HandyFrame-prefix.pch │ │ └── HandyFrame.xcconfig │ └── Pods-DDSoundWave │ │ ├── Pods-DDSoundWave-dummy.m │ │ ├── Pods-DDSoundWave-acknowledgements.markdown │ │ ├── Pods-DDSoundWave.debug.xcconfig │ │ ├── Pods-DDSoundWave.release.xcconfig │ │ ├── Pods-DDSoundWave-acknowledgements.plist │ │ ├── Pods-DDSoundWave-resources.sh │ │ └── Pods-DDSoundWave-frameworks.sh ├── Manifest.lock └── Pods.xcodeproj │ ├── xcuserdata │ └── teaker.xcuserdatad │ │ └── xcschemes │ │ ├── xcschememanagement.plist │ │ ├── HandyFrame.xcscheme │ │ └── Pods-DDSoundWave.xcscheme │ └── project.pbxproj ├── .gitignore ├── .DS_Store ├── images └── soundwave.gif ├── DDSoundWave ├── Assets.xcassets │ ├── Contents.json │ ├── robot_microphone.imageset │ │ ├── robot_microphone@2x.png │ │ ├── robot_microphone@3x.png │ │ └── Contents.json │ └── AppIcon.appiconset │ │ └── Contents.json ├── ViewController.h ├── DDSoundWave │ ├── DDSoundWaveView.h │ └── DDSoundWaveView.m ├── AppDelegate.h ├── main.m ├── ViewController.m ├── Base.lproj │ ├── Main.storyboard │ └── LaunchScreen.storyboard ├── Info.plist └── AppDelegate.m ├── README.md ├── DDSoundWave.xcworkspace ├── xcuserdata │ ├── teaker.xcuserdatad │ │ ├── xcdebugger │ │ │ └── Breakpoints_v2.xcbkptlist │ │ └── UserInterfaceState.xcuserstate │ └── liuzhida.xcuserdatad │ │ └── UserInterfaceState.xcuserstate ├── contents.xcworkspacedata └── xcshareddata │ └── IDEWorkspaceChecks.plist ├── DDSoundWave.xcodeproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcuserdata │ │ └── teaker.xcuserdatad │ │ └── UserInterfaceState.xcuserstate ├── xcuserdata │ ├── liuzhida.xcuserdatad │ │ └── xcschemes │ │ │ └── xcschememanagement.plist │ └── teaker.xcuserdatad │ │ └── xcschemes │ │ └── xcschememanagement.plist └── project.pbxproj ├── Podfile └── Podfile.lock /Pods/HandyFrame/LICENSE: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | #.gitignore 2 | # ignore cocoaPods 3 | /Pods 4 | -------------------------------------------------------------------------------- /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuzhida33/DDSoundWave/HEAD/.DS_Store -------------------------------------------------------------------------------- /Pods/Headers/Private/HandyFrame/UIView+LayoutMethods.h: -------------------------------------------------------------------------------- 1 | ../../../HandyFrame/UIView+LayoutMethods.h -------------------------------------------------------------------------------- /Pods/Headers/Public/HandyFrame/UIView+LayoutMethods.h: -------------------------------------------------------------------------------- 1 | ../../../HandyFrame/UIView+LayoutMethods.h -------------------------------------------------------------------------------- /images/soundwave.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuzhida33/DDSoundWave/HEAD/images/soundwave.gif -------------------------------------------------------------------------------- /DDSoundWave/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # DDSoundWave 2 | 根据语音绘制波浪动画 3 | 4 | # 效果图 5 | 6 | ![](https://github.com/liuzhida33/DDSoundWave/blob/master/images/soundwave.gif) -------------------------------------------------------------------------------- /DDSoundWave.xcworkspace/xcuserdata/teaker.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/HandyFrame/HandyFrame-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_HandyFrame : NSObject 3 | @end 4 | @implementation PodsDummy_HandyFrame 5 | @end 6 | -------------------------------------------------------------------------------- /DDSoundWave/Assets.xcassets/robot_microphone.imageset/robot_microphone@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuzhida33/DDSoundWave/HEAD/DDSoundWave/Assets.xcassets/robot_microphone.imageset/robot_microphone@2x.png -------------------------------------------------------------------------------- /DDSoundWave/Assets.xcassets/robot_microphone.imageset/robot_microphone@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuzhida33/DDSoundWave/HEAD/DDSoundWave/Assets.xcassets/robot_microphone.imageset/robot_microphone@3x.png -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-DDSoundWave/Pods-DDSoundWave-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_DDSoundWave : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_DDSoundWave 5 | @end 6 | -------------------------------------------------------------------------------- /DDSoundWave.xcworkspace/xcuserdata/teaker.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuzhida33/DDSoundWave/HEAD/DDSoundWave.xcworkspace/xcuserdata/teaker.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /DDSoundWave.xcworkspace/xcuserdata/liuzhida.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuzhida33/DDSoundWave/HEAD/DDSoundWave.xcworkspace/xcuserdata/liuzhida.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /DDSoundWave.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /DDSoundWave.xcodeproj/project.xcworkspace/xcuserdata/teaker.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuzhida33/DDSoundWave/HEAD/DDSoundWave.xcodeproj/project.xcworkspace/xcuserdata/teaker.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-DDSoundWave/Pods-DDSoundWave-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## HandyFrame 5 | 6 | 7 | Generated by CocoaPods - https://cocoapods.org 8 | -------------------------------------------------------------------------------- /DDSoundWave/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // DDSoundWave 4 | // 5 | // Created by Teaker on 2018/4/6. 6 | // Copyright © 2018年 Liuzhida. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /Pods/Target Support Files/HandyFrame/HandyFrame-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 | -------------------------------------------------------------------------------- /DDSoundWave.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /DDSoundWave.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /DDSoundWave/DDSoundWave/DDSoundWaveView.h: -------------------------------------------------------------------------------- 1 | // 2 | // DDSoundWaveView.h 3 | // DDSoundWave 4 | // 5 | // Created by Teaker on 2018/4/6. 6 | // Copyright © 2018年 Liuzhida. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | /** 12 | 绘制波浪特效视图 13 | */ 14 | @interface DDSoundWaveView : UIView 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment the next line to define a global platform for your project 2 | # platform :ios, '9.0' 3 | 4 | target 'DDSoundWave' do 5 | # Uncomment the next line if you're using Swift or would like to use dynamic frameworks 6 | # use_frameworks! 7 | 8 | # Pods for DDSoundWave 9 | pod 'HandyFrame' 10 | 11 | end 12 | -------------------------------------------------------------------------------- /Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - HandyFrame (1.2.0) 3 | 4 | DEPENDENCIES: 5 | - HandyFrame 6 | 7 | SPEC REPOS: 8 | https://github.com/CocoaPods/Specs.git: 9 | - HandyFrame 10 | 11 | SPEC CHECKSUMS: 12 | HandyFrame: 437df83ba7563c56cd55b9bd0128561995463110 13 | 14 | PODFILE CHECKSUM: eef6b6ab2e1a2792db52dfe118026750006f0d86 15 | 16 | COCOAPODS: 1.5.0.beta.1 17 | -------------------------------------------------------------------------------- /DDSoundWave/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // DDSoundWave 4 | // 5 | // Created by Teaker on 2018/4/6. 6 | // Copyright © 2018年 Liuzhida. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - HandyFrame (1.2.0) 3 | 4 | DEPENDENCIES: 5 | - HandyFrame 6 | 7 | SPEC REPOS: 8 | https://github.com/CocoaPods/Specs.git: 9 | - HandyFrame 10 | 11 | SPEC CHECKSUMS: 12 | HandyFrame: 437df83ba7563c56cd55b9bd0128561995463110 13 | 14 | PODFILE CHECKSUM: eef6b6ab2e1a2792db52dfe118026750006f0d86 15 | 16 | COCOAPODS: 1.5.0.beta.1 17 | -------------------------------------------------------------------------------- /DDSoundWave/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // DDSoundWave 4 | // 5 | // Created by Teaker on 2018/4/6. 6 | // Copyright © 2018年 Liuzhida. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /DDSoundWave.xcodeproj/xcuserdata/liuzhida.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | DDSoundWave.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /DDSoundWave.xcodeproj/xcuserdata/teaker.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | DDSoundWave.xcscheme 8 | 9 | orderHint 10 | 2 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /DDSoundWave/Assets.xcassets/robot_microphone.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "robot_microphone@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "robot_microphone@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Pods/Target Support Files/HandyFrame/HandyFrame.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/HandyFrame 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/HandyFrame" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/HandyFrame" 4 | OTHER_LDFLAGS = -framework "UIKit" 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/HandyFrame 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-DDSoundWave/Pods-DDSoundWave.debug.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/HandyFrame" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/HandyFrame" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/HandyFrame" 5 | OTHER_LDFLAGS = $(inherited) -ObjC -l"HandyFrame" -framework "UIKit" 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-DDSoundWave/Pods-DDSoundWave.release.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/HandyFrame" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/HandyFrame" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/HandyFrame" 5 | OTHER_LDFLAGS = $(inherited) -ObjC -l"HandyFrame" -framework "UIKit" 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /Pods/Pods.xcodeproj/xcuserdata/teaker.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | HandyFrame.xcscheme 8 | 9 | isShown 10 | 11 | orderHint 12 | 0 13 | 14 | Pods-DDSoundWave.xcscheme 15 | 16 | isShown 17 | 18 | orderHint 19 | 1 20 | 21 | 22 | SuppressBuildableAutocreation 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /DDSoundWave/ViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.m 3 | // DDSoundWave 4 | // 5 | // Created by Teaker on 2018/4/6. 6 | // Copyright © 2018年 Liuzhida. All rights reserved. 7 | // 8 | 9 | #import "ViewController.h" 10 | #import "DDSoundWaveView.h" 11 | #import 12 | 13 | @interface ViewController () 14 | @property (nonatomic, strong) DDSoundWaveView *waveView; 15 | @end 16 | 17 | @implementation ViewController 18 | 19 | - (void)viewDidLoad { 20 | [super viewDidLoad]; 21 | self.view.backgroundColor = [UIColor colorWithRed:39 / 255.0 green:35 / 255.0 blue:36 / 255.0 alpha:1]; 22 | [self.view addSubview:self.waveView]; 23 | } 24 | 25 | - (void)viewWillLayoutSubviews { 26 | [super viewWillLayoutSubviews]; 27 | [self.waveView setCt_size:CGSizeMake(SCREEN_WIDTH, 80)]; 28 | [self.waveView centerXEqualToView:self.view]; 29 | [self.waveView setCt_y:SCREEN_HEIGHT-self.view.safeAreaBottomGap - 80]; 30 | } 31 | 32 | 33 | - (void)didReceiveMemoryWarning { 34 | [super didReceiveMemoryWarning]; 35 | } 36 | 37 | - (DDSoundWaveView *)waveView { 38 | if (!_waveView) { 39 | _waveView = [[DDSoundWaveView alloc] init]; 40 | } 41 | return _waveView; 42 | } 43 | 44 | 45 | @end 46 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-DDSoundWave/Pods-DDSoundWave-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 | 18 | License 19 | MIT 20 | Title 21 | HandyFrame 22 | Type 23 | PSGroupSpecifier 24 | 25 | 26 | FooterText 27 | Generated by CocoaPods - https://cocoapods.org 28 | Title 29 | 30 | Type 31 | PSGroupSpecifier 32 | 33 | 34 | StringsTable 35 | Acknowledgements 36 | Title 37 | Acknowledgements 38 | 39 | 40 | -------------------------------------------------------------------------------- /Pods/HandyFrame/README.md: -------------------------------------------------------------------------------- 1 | # HandyAutoLayout 2 | 3 | [![CocoaPods compatible](https://img.shields.io/badge/CocoaPods-0.1.1-green.svg?style=flat)](https://cocoapods.org) [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg?style=flat)](http:// opensource.org/licenses/MIT) 4 | 5 | `HandyAutoLayout` are handy categories for generate NSLayoutConstraint programatically. 6 | 7 | # New features 8 | 9 | ## Add new methods for 1.1.0 10 | ```objective-c 11 | - (void)fromTheTop:(CGFloat)distance ofView:(UIView *)view; 12 | - (void)fromTheBottom:(CGFloat)distance ofView:(UIView *)view; 13 | - (void)fromTheLeft:(CGFloat)distance ofView:(UIView *)view; 14 | - (void)fromTheRight:(CGFloat)distance ofView:(UIView *)view; 15 | ``` 16 | # Install 17 | 18 | if you are using AutoLayout: 19 | 20 | ``` 21 | pod 'HandyAutoLayout' 22 | ``` 23 | 24 | if you are using Frame: 25 | 26 | ``` 27 | pod 'HandyFrame' 28 | ``` 29 | 30 | 31 | # Examples 32 | 33 | for auto layout: 34 | 35 | ```objective-c 36 | [self.view addConstraint:[self.tableView constraintCenterXEqualToView:self.view]]; 37 | [self.view addConstraint:[self.tableView constraintWidthEqualToView:self.view]]; 38 | 39 | [self.view addConstraints:[self.nextStepButton constraintsSize:CGSizeMake(300.0f, 40.0f)]]; 40 | [self.view addConstraint:[self.nextStepButton constraintCenterXEqualToView:self.view]]; 41 | ``` 42 | for frame: 43 | 44 | ```objective-c 45 | [self.subtitleLabel leftEqualToView:self.titleLabel]; 46 | [self.subtitleLabel top:14 FromView:self.timeLabel]; 47 | 48 | [self.createPost centerXEqualToView:self.view]; 49 | [self.createPost bottomInContainer:19.0f shouldResize:NO]; 50 | ``` 51 | -------------------------------------------------------------------------------- /DDSoundWave/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 | -------------------------------------------------------------------------------- /DDSoundWave/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 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 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UILaunchStoryboardName 24 | LaunchScreen 25 | UIMainStoryboardFile 26 | Main 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationPortraitUpsideDown 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | NSMicrophoneUsageDescription 45 | Demo 需要在机器人服务中使用您的麦克风权限 46 | 47 | 48 | -------------------------------------------------------------------------------- /DDSoundWave/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 | -------------------------------------------------------------------------------- /DDSoundWave/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "29x29", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "40x40", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "60x60", 41 | "scale" : "3x" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "size" : "20x20", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "20x20", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "29x29", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "29x29", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "size" : "40x40", 66 | "scale" : "1x" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "size" : "40x40", 71 | "scale" : "2x" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "size" : "76x76", 76 | "scale" : "1x" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "size" : "76x76", 81 | "scale" : "2x" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "size" : "83.5x83.5", 86 | "scale" : "2x" 87 | }, 88 | { 89 | "idiom" : "ios-marketing", 90 | "size" : "1024x1024", 91 | "scale" : "1x" 92 | } 93 | ], 94 | "info" : { 95 | "version" : 1, 96 | "author" : "xcode" 97 | } 98 | } -------------------------------------------------------------------------------- /DDSoundWave/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // DDSoundWave 4 | // 5 | // Created by Teaker on 2018/4/6. 6 | // Copyright © 2018年 Liuzhida. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | 11 | @interface AppDelegate () 12 | 13 | @end 14 | 15 | @implementation AppDelegate 16 | 17 | 18 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 19 | // Override point for customization after application launch. 20 | return YES; 21 | } 22 | 23 | 24 | - (void)applicationWillResignActive:(UIApplication *)application { 25 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 26 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. 27 | } 28 | 29 | 30 | - (void)applicationDidEnterBackground:(UIApplication *)application { 31 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 32 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 33 | } 34 | 35 | 36 | - (void)applicationWillEnterForeground:(UIApplication *)application { 37 | // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 38 | } 39 | 40 | 41 | - (void)applicationDidBecomeActive:(UIApplication *)application { 42 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 43 | } 44 | 45 | 46 | - (void)applicationWillTerminate:(UIApplication *)application { 47 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 48 | } 49 | 50 | 51 | @end 52 | -------------------------------------------------------------------------------- /Pods/Pods.xcodeproj/xcuserdata/teaker.xcuserdatad/xcschemes/HandyFrame.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 45 | 46 | 52 | 53 | 55 | 56 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /Pods/Pods.xcodeproj/xcuserdata/teaker.xcuserdatad/xcschemes/Pods-DDSoundWave.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 45 | 46 | 52 | 53 | 55 | 56 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /Pods/HandyFrame/UIView+LayoutMethods.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+LayoutMethods.h 3 | // TmallClient4iOS-Prime 4 | // 5 | // Created by casa on 14/12/8. 6 | // Copyright (c) 2014年 casa. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #define SYSTEM_VERSION_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame) 12 | #define SYSTEM_VERSION_GREATER_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending) 13 | #define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) 14 | #define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending) 15 | #define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending) 16 | 17 | #define SCREEN_WIDTH ([[UIScreen mainScreen]bounds].size.width) 18 | #define SCREEN_HEIGHT ([[UIScreen mainScreen]bounds].size.height) 19 | 20 | #define kHPercentage(a) (SCREEN_HEIGHT*((a)/667.00)) 21 | #define kWPercentage(a) (SCREEN_WIDTH *((a)/375.00)) 22 | 23 | #define SCREEN_WITHOUT_STATUS_HEIGHT (SCREEN_HEIGHT - [[UIApplication sharedApplication] statusBarFrame].size.height) 24 | 25 | typedef CGFloat UIScreenType; 26 | 27 | static UIScreenType UIScreenType_iPhone5 = 320.0f; 28 | static UIScreenType UIScreenType_iPhone6 = 375.0f; 29 | static UIScreenType UIScreenType_iPhone6P = 414.0f; 30 | 31 | @interface UIView (LayoutMethods) 32 | 33 | // coordinator getters 34 | - (CGFloat)ct_height; 35 | - (CGFloat)ct_width; 36 | - (CGFloat)ct_x; 37 | - (CGFloat)ct_y; 38 | - (CGSize)ct_size; 39 | - (CGPoint)ct_origin; 40 | - (CGFloat)ct_centerX; 41 | - (CGFloat)ct_centerY; 42 | 43 | - (CGFloat)ct_left; 44 | - (CGFloat)ct_top; 45 | - (CGFloat)ct_bottom; 46 | - (CGFloat)ct_right; 47 | 48 | - (void)setCt_x:(CGFloat)x; 49 | - (void)setCt_left:(CGFloat)left; 50 | - (void)setCt_y:(CGFloat)y; 51 | - (void)setCt_top:(CGFloat)top; 52 | 53 | // height 54 | - (void)setCt_height:(CGFloat)height; 55 | - (void)heightEqualToView:(UIView *)view; 56 | 57 | // width 58 | - (void)setCt_width:(CGFloat)width; 59 | - (void)widthEqualToView:(UIView *)view; 60 | 61 | // size 62 | - (void)setCt_size:(CGSize)size; 63 | - (void)setSize:(CGSize)size screenType:(UIScreenType)screenType; 64 | - (void)sizeEqualToView:(UIView *)view; 65 | 66 | // center 67 | - (void)setCt_centerX:(CGFloat)centerX; 68 | - (void)setCt_centerY:(CGFloat)centerY; 69 | - (void)centerXEqualToView:(UIView *)view; 70 | - (void)centerYEqualToView:(UIView *)view; 71 | - (void)centerEqualToView:(UIView *)view; 72 | 73 | // top, bottom, left, right -- Version 1.1.0 74 | - (void)fromTheTop:(CGFloat)distance ofView:(UIView *)view; 75 | - (void)fromTheBottom:(CGFloat)distance ofView:(UIView *)view; 76 | - (void)fromTheLeft:(CGFloat)distance ofView:(UIView *)view; 77 | - (void)fromTheRight:(CGFloat)distance ofView:(UIView *)view; 78 | 79 | - (void)fromTheRelativeTop:(CGFloat)distance ofView:(UIView *)view screenType:(UIScreenType)screenType; 80 | - (void)fromTheRelativeBottom:(CGFloat)distance ofView:(UIView *)view screenType:(UIScreenType)screenType; 81 | - (void)fromTheRelativeLeft:(CGFloat)distance ofView:(UIView *)view screenType:(UIScreenType)screenType; 82 | - (void)fromTheRelativeRight:(CGFloat)distance ofView:(UIView *)view screenType:(UIScreenType)screenType; 83 | 84 | - (void)relativeTopInContainer:(CGFloat)top shouldResize:(BOOL)shouldResize screenType:(UIScreenType)screenType; 85 | - (void)relativeBottomInContainer:(CGFloat)bottom shouldResize:(BOOL)shouldResize screenType:(UIScreenType)screenType; 86 | - (void)relativeLeftInContainer:(CGFloat)left shouldResize:(BOOL)shouldResize screenType:(UIScreenType)screenType; 87 | - (void)relativeRightInContainer:(CGFloat)right shouldResize:(BOOL)shouldResize screenType:(UIScreenType)screenType; 88 | 89 | // top, bottom, left, right -- Old Version 90 | - (void)top:(CGFloat)top FromView:(UIView *)view; 91 | - (void)bottom:(CGFloat)bottom FromView:(UIView *)view; 92 | - (void)left:(CGFloat)left FromView:(UIView *)view; 93 | - (void)right:(CGFloat)right FromView:(UIView *)view; 94 | 95 | - (void)topRatio:(CGFloat)top FromView:(UIView *)view screenType:(UIScreenType)screenType; 96 | - (void)bottomRatio:(CGFloat)bottom FromView:(UIView *)view screenType:(UIScreenType)screenType; 97 | - (void)leftRatio:(CGFloat)left FromView:(UIView *)view screenType:(UIScreenType)screenType; 98 | - (void)rightRatio:(CGFloat)right FromView:(UIView *)view screenType:(UIScreenType)screenType; 99 | 100 | - (void)topInContainer:(CGFloat)top shouldResize:(BOOL)shouldResize; 101 | - (void)bottomInContainer:(CGFloat)bottom shouldResize:(BOOL)shouldResize; 102 | - (void)leftInContainer:(CGFloat)left shouldResize:(BOOL)shouldResize; 103 | - (void)rightInContainer:(CGFloat)right shouldResize:(BOOL)shouldResize; 104 | 105 | - (void)topRatioInContainer:(CGFloat)top shouldResize:(BOOL)shouldResize screenType:(UIScreenType)screenType; 106 | - (void)bottomRatioInContainer:(CGFloat)bottom shouldResize:(BOOL)shouldResize screenType:(UIScreenType)screenType; 107 | - (void)leftRatioInContainer:(CGFloat)left shouldResize:(BOOL)shouldResize screenType:(UIScreenType)screenType; 108 | - (void)rightRatioInContainer:(CGFloat)right shouldResize:(BOOL)shouldResize screenType:(UIScreenType)screenType; 109 | 110 | - (void)topEqualToView:(UIView *)view; 111 | - (void)bottomEqualToView:(UIView *)view; 112 | - (void)leftEqualToView:(UIView *)view; 113 | - (void)rightEqualToView:(UIView *)view; 114 | 115 | // imbueset 116 | - (void)fillWidth; 117 | - (void)fillHeight; 118 | - (void)fill; 119 | 120 | - (UIView *)topSuperView; 121 | 122 | // iPhoneX adapt 123 | - (CGFloat)safeAreaBottomGap; 124 | - (CGFloat)safeAreaTopGap; 125 | - (CGFloat)safeAreaLeftGap; 126 | - (CGFloat)safeAreaRightGap; 127 | 128 | @end 129 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-DDSoundWave/Pods-DDSoundWave-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 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-DDSoundWave/Pods-DDSoundWave-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 | -------------------------------------------------------------------------------- /DDSoundWave/DDSoundWave/DDSoundWaveView.m: -------------------------------------------------------------------------------- 1 | // 2 | // DDSoundWaveView.m 3 | // DDSoundWave 4 | // 5 | // Created by Teaker on 2018/4/6. 6 | // Copyright © 2018年 Liuzhida. All rights reserved. 7 | // 8 | 9 | #import "DDSoundWaveView.h" 10 | #import 11 | #import 12 | #import 13 | #import 14 | 15 | #define kNumberOfWaves 5 16 | 17 | @interface DDSoundWaveView () { 18 | 19 | CGFloat _phase; //相位 20 | CGFloat _phaseShift; //相位偏移 21 | CGFloat _amplitude; //振幅 22 | CGFloat _maxAmplitude; //波峰 23 | CGFloat _idleAmplitude; //波谷 24 | CGFloat _waveHeight; //波高度 25 | CGFloat _waveWidth; //波长度 26 | CGFloat _waveMid; //波中心点 27 | CGFloat _density; //波分布密度 28 | CGFloat _frequency; //波频率 29 | CGFloat _mainWaveWidth; //主波宽度 30 | CGFloat _decorativeWavesWidth;//其他波宽度 31 | } 32 | @property (nonatomic, strong) NSMutableArray * waves; 33 | @property (nonatomic, strong) CADisplayLink *displayLink; //计时器,用于刷新layer布局 34 | @property (nonatomic, strong) CALayer *waveLayer; //存放波浪layer 35 | @property (nonatomic, strong) AVAudioRecorder *audioRecorder; //录音器 36 | @property (nonatomic, assign) BOOL animated; //动画是否开始 37 | @property (nonatomic, strong) UIButton *microphoneBtn; //话筒 38 | @end 39 | 40 | @implementation DDSoundWaveView 41 | 42 | #pragma mark - overwrite init 43 | 44 | - (instancetype)init { 45 | self = [super init]; 46 | if (self) { 47 | [self setup]; 48 | } 49 | return self; 50 | } 51 | 52 | - (void)setup { 53 | 54 | _phaseShift = -0.25f; 55 | _idleAmplitude = 0.01f; 56 | _density = 1.f; 57 | _frequency = 1.2f; 58 | _mainWaveWidth = 2.0f; 59 | _decorativeWavesWidth = 1.0f; 60 | 61 | self.backgroundColor = [UIColor clearColor]; 62 | [self addSubview:self.microphoneBtn]; 63 | [self.layer addSublayer:self.waveLayer]; 64 | UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(endRecord:)]; 65 | [self addGestureRecognizer:tap]; 66 | } 67 | 68 | - (void)layoutSubviews { 69 | [super layoutSubviews]; 70 | self.waveLayer.frame = self.bounds; 71 | [self.microphoneBtn sizeToFit]; 72 | [self.microphoneBtn centerEqualToView:self]; 73 | } 74 | 75 | - (void)dealloc { 76 | [_displayLink invalidate]; 77 | } 78 | 79 | #pragma mark - Event repose 80 | 81 | - (void)microphoneDidTap:(UIButton *)sender { 82 | if (_animated) { 83 | return; 84 | } 85 | __weak __typeof__(self) weak_self = self; 86 | if ([[AVAudioSession sharedInstance] recordPermission] == AVAudioSessionRecordPermissionUndetermined) { 87 | [[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) { 88 | __strong __typeof__(weak_self) strong_self = weak_self; 89 | if (!strong_self) return ; 90 | if (granted) { 91 | //获取权限方法回调需要返回主线程操作 92 | dispatch_async(dispatch_get_main_queue(), ^{ 93 | [strong_self startRecord]; 94 | }); 95 | } 96 | }]; 97 | }else if ([[AVAudioSession sharedInstance] recordPermission] == AVAudioSessionRecordPermissionDenied) { 98 | UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"无法使用麦克风" message:@"请在iPhone的""设置-APP-麦克风""中打开开关" preferredStyle:UIAlertControllerStyleAlert]; 99 | [alert addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil]]; 100 | [alert addAction:[UIAlertAction actionWithTitle:@"设置" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { 101 | if (@available(iOS 10, *)) { 102 | [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString] options:@{} completionHandler:nil]; 103 | } else { 104 | 105 | #pragma clang diagnostic push 106 | #pragma clang diagnostic ignored "-Wdeprecated-declarations" 107 | [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]]; 108 | #pragma clang diagnostic pop 109 | 110 | } 111 | }]]; 112 | [[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:alert animated:YES completion:nil]; 113 | return; 114 | }else { 115 | [self startRecord]; 116 | } 117 | } 118 | 119 | - (void)endRecord:(UIGestureRecognizer *)recognizer { 120 | [self.audioRecorder stop]; 121 | } 122 | 123 | #pragma mark - AVAudioRecorderDelegate 124 | 125 | - (void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag { 126 | 127 | [self.displayLink removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes]; //remove from current runloop 128 | [UIView animateWithDuration:0.2 animations:^{ 129 | self.microphoneBtn.transform = CGAffineTransformMakeScale(1, 1); 130 | self.microphoneBtn.alpha = 1; 131 | self.waveLayer.transform = CATransform3DMakeScale(0.1, 0.1, 0.1); 132 | } completion:^(BOOL finished) { 133 | self.waveLayer.hidden = YES; 134 | }]; 135 | } 136 | 137 | #pragma mark - Private methods 138 | 139 | // 开始录音 140 | - (void)startRecord { 141 | if ([self.audioRecorder prepareToRecord]) { 142 | AudioServicesPlaySystemSound(1103); 143 | [UIView animateWithDuration:0.2 animations:^{ 144 | self.microphoneBtn.transform = CGAffineTransformMakeScale(0.1, 0.1); 145 | self.microphoneBtn.alpha = 0; 146 | self.waveLayer.transform = CATransform3DIdentity; 147 | } completion:^(BOOL finished) { 148 | [self.audioRecorder record]; 149 | [self.displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes]; 150 | self.waveLayer.hidden = NO; 151 | }]; 152 | } 153 | } 154 | 155 | // 刷新layer布局 156 | - (void)displayWave { 157 | 158 | [self.audioRecorder updateMeters];//刷新音量数据 159 | double lowPassResults = pow(10, (0.05 * [self.audioRecorder peakPowerForChannel:0])); 160 | _waveHeight = CGRectGetHeight(self.bounds); 161 | _waveWidth = CGRectGetWidth(self.bounds); 162 | _waveMid = _waveWidth / 2.0f; 163 | _maxAmplitude = _waveHeight - 4.0f; 164 | _phase += _phaseShift; 165 | _amplitude = fmax(lowPassResults, _idleAmplitude); 166 | 167 | UIGraphicsBeginImageContext(self.frame.size); 168 | for(int i = 0; i < self.waves.count; i++) { 169 | 170 | UIBezierPath *wavelinePath = [UIBezierPath bezierPath]; 171 | CGFloat progress = 1.0f - (CGFloat)i / kNumberOfWaves; 172 | CGFloat normedAmplitude = (1.5f * progress - 0.5f) * _amplitude; 173 | 174 | for(CGFloat x = 0; x < _waveWidth + _density; x += _density) { 175 | 176 | CGFloat scaling = -pow(x / _waveMid - 1, 2) + 1; 177 | CGFloat y = scaling * _maxAmplitude * normedAmplitude * sinf(2 * M_PI *(x / _waveWidth) * _frequency + _phase) + (_waveHeight * 0.5); 178 | 179 | if (x==0) { 180 | [wavelinePath moveToPoint:CGPointMake(x, y)]; 181 | } 182 | else { 183 | [wavelinePath addLineToPoint:CGPointMake(x, y)]; 184 | } 185 | } 186 | 187 | CAShapeLayer *waveline = [self.waves objectAtIndex:i]; 188 | waveline.path = [wavelinePath CGPath]; 189 | } 190 | UIGraphicsEndImageContext(); 191 | } 192 | 193 | #pragma mark - Getters 194 | 195 | - (CADisplayLink *)displayLink { 196 | if (!_displayLink) { 197 | _displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(displayWave)]; 198 | } 199 | return _displayLink; 200 | } 201 | 202 | - (NSMutableArray *)waves { 203 | if (!_waves) { 204 | _waves = [NSMutableArray arrayWithCapacity:kNumberOfWaves]; 205 | for (int i = 0; i < kNumberOfWaves; ++i) { 206 | CAShapeLayer *waveline = [CAShapeLayer layer]; 207 | waveline.lineCap = kCALineCapButt; 208 | waveline.lineJoin = kCALineJoinRound; 209 | waveline.strokeColor = [[UIColor clearColor] CGColor]; 210 | waveline.fillColor = [[UIColor clearColor] CGColor]; 211 | [waveline setLineWidth:(i==0 ? _mainWaveWidth : _decorativeWavesWidth)]; 212 | CGFloat progress = 1.0f - (CGFloat)i / kNumberOfWaves; 213 | CGFloat multiplier = MIN(1.0, (progress / 3.0f * 2.0f) + (1.0f / 3.0f)); 214 | UIColor *color = [[UIColor greenColor] colorWithAlphaComponent:(i == 0 ? 1.0 : 1.0 * multiplier * 0.6)]; 215 | waveline.strokeColor = color.CGColor; 216 | CAGradientLayer *gradientLayer = [CAGradientLayer layer]; 217 | gradientLayer.frame = CGRectMake(0, 0, self.bounds.size.width, 200); 218 | 219 | //设置颜色 220 | [gradientLayer setColors:[NSArray arrayWithObjects:(id)[[UIColor cyanColor] CGColor],(id)[[UIColor greenColor] CGColor], nil]]; 221 | //每种颜色最亮的位置 222 | [gradientLayer setLocations:@[@0,@1]]; 223 | //渐变的方向StartPoint->EndPoint 224 | [gradientLayer setStartPoint:CGPointMake(0, 0.5)]; 225 | [gradientLayer setEndPoint:CGPointMake(1, 0.5)]; 226 | 227 | gradientLayer.mask = waveline; 228 | [self.waveLayer addSublayer:gradientLayer]; 229 | [_waves addObject:waveline]; 230 | } 231 | } 232 | return _waves; 233 | } 234 | 235 | - (CALayer *)waveLayer { 236 | if (!_waveLayer) { 237 | _waveLayer = [CALayer layer]; 238 | } 239 | return _waveLayer; 240 | } 241 | 242 | - (AVAudioRecorder *)audioRecorder { 243 | if (!_audioRecorder) { 244 | NSMutableDictionary *recordSetting = [[NSMutableDictionary alloc] init]; 245 | [recordSetting setValue:[NSNumber numberWithInt:kAudioFormatMPEG4AAC] forKey:AVFormatIDKey]; 246 | [recordSetting setValue:[NSNumber numberWithFloat:44100] forKey:AVSampleRateKey]; 247 | [recordSetting setValue:[NSNumber numberWithInt:1] forKey:AVNumberOfChannelsKey]; 248 | [recordSetting setValue:[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey]; 249 | [recordSetting setValue:[NSNumber numberWithInt:AVAudioQualityHigh] forKey:AVEncoderAudioQualityKey]; 250 | [recordSetting setValue:@(YES) forKey:AVLinearPCMIsFloatKey]; 251 | NSString *strUrl = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 252 | NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/voice.aac", strUrl]]; 253 | NSError *error; 254 | _audioRecorder = [[AVAudioRecorder alloc]initWithURL:url settings:recordSetting error:&error]; 255 | //开启音量检测 256 | _audioRecorder.meteringEnabled = YES; 257 | _audioRecorder.delegate = self; 258 | } 259 | return _audioRecorder; 260 | } 261 | 262 | - (UIButton *)microphoneBtn { 263 | if (!_microphoneBtn) { 264 | _microphoneBtn = [UIButton buttonWithType:UIButtonTypeCustom]; 265 | [_microphoneBtn setImage:[UIImage imageNamed:@"robot_microphone"] forState:UIControlStateNormal]; 266 | [_microphoneBtn addTarget:self action:@selector(microphoneDidTap:) forControlEvents:UIControlEventTouchUpInside]; 267 | } 268 | return _microphoneBtn; 269 | } 270 | 271 | @end 272 | -------------------------------------------------------------------------------- /Pods/HandyFrame/UIView+LayoutMethods.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+LayoutMethods.m 3 | // TmallClient4iOS-Prime 4 | // 5 | // Created by casa on 14/12/8. 6 | // Copyright (c) 2014年 casa. All rights reserved. 7 | // 8 | 9 | #import "UIView+LayoutMethods.h" 10 | #import 11 | 12 | static void *kUIViewLayoutMethodPropertyBottomGap = &kUIViewLayoutMethodPropertyBottomGap; 13 | static void *kUIViewLayoutMethodPropertyTopGap = &kUIViewLayoutMethodPropertyTopGap; 14 | static void *kUIViewLayoutMethodPropertyLeftGap = &kUIViewLayoutMethodPropertyLeftGap; 15 | static void *kUIViewLayoutMethodPropertyRightGap = &kUIViewLayoutMethodPropertyRightGap; 16 | 17 | @implementation UIView (LayoutMethods) 18 | 19 | // coordinator getters 20 | - (CGFloat)ct_height 21 | { 22 | return self.frame.size.height; 23 | } 24 | 25 | - (CGFloat)ct_width 26 | { 27 | return self.frame.size.width; 28 | } 29 | 30 | - (CGFloat)ct_x 31 | { 32 | return self.frame.origin.x; 33 | } 34 | 35 | - (CGFloat)ct_y 36 | { 37 | return self.frame.origin.y; 38 | } 39 | 40 | - (CGSize)ct_size 41 | { 42 | return self.frame.size; 43 | } 44 | 45 | - (CGPoint)ct_origin 46 | { 47 | return self.frame.origin; 48 | } 49 | 50 | - (CGFloat)ct_centerX 51 | { 52 | return self.center.x; 53 | } 54 | 55 | - (CGFloat)ct_centerY 56 | { 57 | return self.center.y; 58 | } 59 | 60 | - (CGFloat)ct_left 61 | { 62 | return self.frame.origin.x; 63 | } 64 | 65 | - (CGFloat)ct_top 66 | { 67 | return self.frame.origin.y; 68 | } 69 | 70 | - (CGFloat)ct_bottom 71 | { 72 | return self.frame.size.height + self.frame.origin.y; 73 | } 74 | 75 | - (CGFloat)ct_right 76 | { 77 | return self.frame.size.width + self.frame.origin.x; 78 | } 79 | 80 | - (void)setCt_x:(CGFloat)x 81 | { 82 | self.frame = CGRectMake(x, self.frame.origin.y, self.frame.size.width, self.frame.size.height); 83 | } 84 | 85 | - (void)setCt_y:(CGFloat)y 86 | { 87 | self.frame = CGRectMake(self.frame.origin.x, y, self.frame.size.width, self.frame.size.height); 88 | } 89 | 90 | - (void)setCt_left:(CGFloat)left 91 | { 92 | self.ct_x = left; 93 | } 94 | 95 | - (void)setCt_top:(CGFloat)top 96 | { 97 | self.ct_y = top; 98 | } 99 | 100 | - (void)setCt_height:(CGFloat)height 101 | { 102 | CGRect newFrame = CGRectMake(self.ct_x, self.ct_y, self.ct_width, height); 103 | self.frame = newFrame; 104 | } 105 | 106 | - (void)heightEqualToView:(UIView *)view 107 | { 108 | self.ct_height = view.ct_height; 109 | } 110 | 111 | // width 112 | - (void)setCt_width:(CGFloat)width 113 | { 114 | CGRect newFrame = CGRectMake(self.ct_x, self.ct_y, width, self.ct_height); 115 | self.frame = newFrame; 116 | } 117 | 118 | - (void)widthEqualToView:(UIView *)view 119 | { 120 | self.ct_width = view.ct_width; 121 | } 122 | 123 | // center 124 | - (void)setCt_centerX:(CGFloat)centerX 125 | { 126 | CGPoint center = CGPointMake(self.ct_centerX, self.ct_centerY); 127 | center.x = centerX; 128 | self.center = center; 129 | } 130 | 131 | - (void)setCt_centerY:(CGFloat)centerY 132 | { 133 | CGPoint center = CGPointMake(self.ct_centerX, self.ct_centerY); 134 | center.y = centerY; 135 | self.center = center; 136 | } 137 | 138 | - (void)centerXEqualToView:(UIView *)view 139 | { 140 | UIView *superView = view.superview ? view.superview : view; 141 | CGPoint viewCenterPoint = [superView convertPoint:view.center toView:self.topSuperView]; 142 | CGPoint centerPoint = [self.topSuperView convertPoint:viewCenterPoint toView:self.superview]; 143 | self.ct_centerX = centerPoint.x; 144 | } 145 | 146 | - (void)centerYEqualToView:(UIView *)view 147 | { 148 | UIView *superView = view.superview ? view.superview : view; 149 | CGPoint viewCenterPoint = [superView convertPoint:view.center toView:self.topSuperView]; 150 | CGPoint centerPoint = [self.topSuperView convertPoint:viewCenterPoint toView:self.superview]; 151 | self.ct_centerY = centerPoint.y; 152 | } 153 | 154 | - (void)centerEqualToView:(UIView *)view 155 | { 156 | UIView *superView = view.superview ? view.superview : view; 157 | CGPoint viewCenterPoint = [superView convertPoint:view.center toView:self.topSuperView]; 158 | CGPoint centerPoint = [self.topSuperView convertPoint:viewCenterPoint toView:self.superview]; 159 | self.ct_centerX = centerPoint.x; 160 | self.ct_centerY = centerPoint.y; 161 | } 162 | 163 | // top, bottom, left, right -- Version 1.1.0 164 | - (void)fromTheTop:(CGFloat)distance ofView:(UIView *)view 165 | { 166 | [self bottom:distance FromView:view]; 167 | } 168 | 169 | - (void)fromTheBottom:(CGFloat)distance ofView:(UIView *)view 170 | { 171 | [self top:distance FromView:view]; 172 | } 173 | 174 | - (void)fromTheLeft:(CGFloat)distance ofView:(UIView *)view 175 | { 176 | [self left:distance FromView:view]; 177 | } 178 | 179 | - (void)fromTheRight:(CGFloat)distance ofView:(UIView *)view 180 | { 181 | [self right:distance FromView:view]; 182 | } 183 | 184 | 185 | - (void)fromTheRelativeTop:(CGFloat)distance ofView:(UIView *)view screenType:(UIScreenType)screenType 186 | { 187 | [self bottomRatio:distance FromView:view screenType:screenType]; 188 | } 189 | 190 | - (void)fromTheRelativeBottom:(CGFloat)distance ofView:(UIView *)view screenType:(UIScreenType)screenType 191 | { 192 | [self topRatio:distance FromView:view screenType:screenType]; 193 | } 194 | 195 | - (void)fromTheRelativeLeft:(CGFloat)distance ofView:(UIView *)view screenType:(UIScreenType)screenType 196 | { 197 | [self leftRatio:distance FromView:view screenType:screenType]; 198 | } 199 | 200 | - (void)fromTheRelativeRight:(CGFloat)distance ofView:(UIView *)view screenType:(UIScreenType)screenType 201 | { 202 | [self rightRatio:distance FromView:view screenType:screenType]; 203 | } 204 | 205 | 206 | - (void)relativeTopInContainer:(CGFloat)top shouldResize:(BOOL)shouldResize screenType:(UIScreenType)screenType 207 | { 208 | [self topRatioInContainer:top shouldResize:shouldResize screenType:screenType]; 209 | } 210 | 211 | - (void)relativeBottomInContainer:(CGFloat)bottom shouldResize:(BOOL)shouldResize screenType:(UIScreenType)screenType 212 | { 213 | [self bottomRatioInContainer:bottom shouldResize:shouldResize screenType:screenType]; 214 | } 215 | 216 | - (void)relativeLeftInContainer:(CGFloat)left shouldResize:(BOOL)shouldResize screenType:(UIScreenType)screenType 217 | { 218 | [self leftRatioInContainer:left shouldResize:shouldResize screenType:screenType]; 219 | } 220 | 221 | - (void)relativeRightInContainer:(CGFloat)right shouldResize:(BOOL)shouldResize screenType:(UIScreenType)screenType 222 | { 223 | [self rightRatioInContainer:right shouldResize:shouldResize screenType:screenType]; 224 | } 225 | 226 | 227 | // top, bottom, left, right -- Old Version 228 | - (void)top:(CGFloat)top FromView:(UIView *)view 229 | { 230 | UIView *superView = view.superview ? view.superview : view; 231 | CGPoint viewOrigin = [superView convertPoint:view.ct_origin toView:self.topSuperView]; 232 | CGPoint newOrigin = [self.topSuperView convertPoint:viewOrigin toView:self.superview]; 233 | 234 | self.ct_y = floorf(newOrigin.y + top + view.ct_height); 235 | } 236 | 237 | - (void)bottom:(CGFloat)bottom FromView:(UIView *)view 238 | { 239 | UIView *superView = view.superview ? view.superview : view; 240 | CGPoint viewOrigin = [superView convertPoint:view.ct_origin toView:self.topSuperView]; 241 | CGPoint newOrigin = [self.topSuperView convertPoint:viewOrigin toView:self.superview]; 242 | 243 | self.ct_y = newOrigin.y - bottom - self.ct_height; 244 | } 245 | 246 | - (void)left:(CGFloat)left FromView:(UIView *)view 247 | { 248 | UIView *superView = view.superview ? view.superview : view; 249 | CGPoint viewOrigin = [superView convertPoint:view.ct_origin toView:self.topSuperView]; 250 | CGPoint newOrigin = [self.topSuperView convertPoint:viewOrigin toView:self.superview]; 251 | 252 | self.ct_x = newOrigin.x - left - self.ct_width; 253 | } 254 | 255 | - (void)right:(CGFloat)right FromView:(UIView *)view 256 | { 257 | UIView *superView = view.superview ? view.superview : view; 258 | CGPoint viewOrigin = [superView convertPoint:view.ct_origin toView:self.topSuperView]; 259 | CGPoint newOrigin = [self.topSuperView convertPoint:viewOrigin toView:self.superview]; 260 | 261 | self.ct_x = newOrigin.x + right + view.ct_width; 262 | } 263 | 264 | - (void)topRatio:(CGFloat)top FromView:(UIView *)view screenType:(UIScreenType)screenType 265 | { 266 | CGFloat topRatio = top / screenType; 267 | CGFloat topValue = topRatio * self.superview.ct_width; 268 | [self top:topValue FromView:view]; 269 | } 270 | 271 | - (void)bottomRatio:(CGFloat)bottom FromView:(UIView *)view screenType:(UIScreenType)screenType 272 | { 273 | CGFloat bottomRatio = bottom / screenType; 274 | CGFloat bottomValue = bottomRatio * self.superview.ct_width; 275 | [self bottom:bottomValue FromView:view]; 276 | } 277 | 278 | - (void)leftRatio:(CGFloat)left FromView:(UIView *)view screenType:(UIScreenType)screenType 279 | { 280 | CGFloat leftRatio = left / screenType; 281 | CGFloat leftValue = leftRatio * self.superview.ct_width; 282 | [self left:leftValue FromView:view]; 283 | } 284 | 285 | - (void)rightRatio:(CGFloat)right FromView:(UIView *)view screenType:(UIScreenType)screenType 286 | { 287 | CGFloat rightRatio = right / screenType; 288 | CGFloat rightValue = rightRatio * self.superview.ct_width; 289 | [self right:rightValue FromView:view]; 290 | } 291 | 292 | - (void)topInContainer:(CGFloat)top shouldResize:(BOOL)shouldResize 293 | { 294 | if (shouldResize) { 295 | self.ct_height = self.ct_y - top + self.ct_height; 296 | } 297 | self.ct_y = top; 298 | } 299 | 300 | - (void)bottomInContainer:(CGFloat)bottom shouldResize:(BOOL)shouldResize 301 | { 302 | if (shouldResize) { 303 | self.ct_height = self.superview.ct_height - bottom - self.ct_y - self.safeAreaBottomGap; 304 | } else { 305 | self.ct_y = self.superview.ct_height - self.ct_height - bottom - self.safeAreaBottomGap; 306 | } 307 | } 308 | 309 | - (void)leftInContainer:(CGFloat)left shouldResize:(BOOL)shouldResize 310 | { 311 | if (shouldResize) { 312 | self.ct_width = self.ct_x - left + self.ct_width; 313 | } 314 | self.ct_x = left; 315 | } 316 | 317 | - (void)rightInContainer:(CGFloat)right shouldResize:(BOOL)shouldResize 318 | { 319 | if (shouldResize) { 320 | self.ct_width = self.superview.ct_width - right - self.ct_x; 321 | } else { 322 | self.ct_x = self.superview.ct_width - self.ct_width - right; 323 | } 324 | } 325 | 326 | - (void)topRatioInContainer:(CGFloat)top shouldResize:(BOOL)shouldResize screenType:(UIScreenType)screenType 327 | { 328 | CGFloat topRatio = top / screenType; 329 | CGFloat topValue = topRatio * self.superview.ct_width; 330 | [self topInContainer:topValue shouldResize:shouldResize]; 331 | } 332 | 333 | - (void)bottomRatioInContainer:(CGFloat)bottom shouldResize:(BOOL)shouldResize screenType:(UIScreenType)screenType 334 | { 335 | CGFloat bottomRatio = bottom / screenType; 336 | CGFloat bottomValue = bottomRatio * self.superview.ct_width; 337 | [self bottomInContainer:bottomValue shouldResize:shouldResize]; 338 | } 339 | 340 | - (void)leftRatioInContainer:(CGFloat)left shouldResize:(BOOL)shouldResize screenType:(UIScreenType)screenType 341 | { 342 | CGFloat leftRatio = left / screenType; 343 | CGFloat leftValue = leftRatio * self.superview.ct_width; 344 | [self leftInContainer:leftValue shouldResize:shouldResize]; 345 | } 346 | 347 | - (void)rightRatioInContainer:(CGFloat)right shouldResize:(BOOL)shouldResize screenType:(UIScreenType)screenType 348 | { 349 | CGFloat rightRatio = right / screenType; 350 | CGFloat rightValue = rightRatio * self.superview.ct_width; 351 | [self rightInContainer:rightValue shouldResize:shouldResize]; 352 | } 353 | 354 | - (void)topEqualToView:(UIView *)view 355 | { 356 | UIView *superView = view.superview ? view.superview : view; 357 | CGPoint viewOrigin = [superView convertPoint:view.ct_origin toView:self.topSuperView]; 358 | CGPoint newOrigin = [self.topSuperView convertPoint:viewOrigin toView:self.superview]; 359 | 360 | self.ct_y = newOrigin.y; 361 | } 362 | 363 | - (void)bottomEqualToView:(UIView *)view 364 | { 365 | UIView *superView = view.superview ? view.superview : view; 366 | CGPoint viewOrigin = [superView convertPoint:view.ct_origin toView:self.topSuperView]; 367 | CGPoint newOrigin = [self.topSuperView convertPoint:viewOrigin toView:self.superview]; 368 | 369 | self.ct_y = newOrigin.y + view.ct_height - self.ct_height; 370 | } 371 | 372 | - (void)leftEqualToView:(UIView *)view 373 | { 374 | UIView *superView = view.superview ? view.superview : view; 375 | CGPoint viewOrigin = [superView convertPoint:view.ct_origin toView:self.topSuperView]; 376 | CGPoint newOrigin = [self.topSuperView convertPoint:viewOrigin toView:self.superview]; 377 | 378 | self.ct_x = newOrigin.x; 379 | } 380 | 381 | - (void)rightEqualToView:(UIView *)view 382 | { 383 | UIView *superView = view.superview ? view.superview : view; 384 | CGPoint viewOrigin = [superView convertPoint:view.ct_origin toView:self.topSuperView]; 385 | CGPoint newOrigin = [self.topSuperView convertPoint:viewOrigin toView:self.superview]; 386 | 387 | self.ct_x = newOrigin.x + view.ct_width - self.ct_width; 388 | } 389 | 390 | // size 391 | - (void)setCt_size:(CGSize)size 392 | { 393 | self.frame = CGRectMake(self.ct_x, self.ct_y, size.width, size.height); 394 | } 395 | 396 | - (void)setSize:(CGSize)size screenType:(UIScreenType)screenType 397 | { 398 | CGFloat ratio = SCREEN_WIDTH / screenType; 399 | self.frame = CGRectMake(self.ct_x, self.ct_y, size.width * ratio, size.height * ratio); 400 | } 401 | 402 | - (void)sizeEqualToView:(UIView *)view 403 | { 404 | self.frame = CGRectMake(self.ct_x, self.ct_y, view.ct_width, view.ct_height); 405 | } 406 | 407 | // imbueset 408 | - (void)fillWidth 409 | { 410 | self.ct_width = self.superview.ct_width; 411 | self.ct_x = 0; 412 | } 413 | 414 | - (void)fillHeight 415 | { 416 | self.ct_height = self.superview.ct_height; 417 | self.ct_y = 0; 418 | } 419 | 420 | - (void)fill 421 | { 422 | self.frame = CGRectMake(0, 0, self.superview.ct_width, self.superview.ct_height); 423 | } 424 | 425 | - (UIView *)topSuperView 426 | { 427 | UIView *topSuperView = self.superview; 428 | 429 | if (topSuperView == nil) { 430 | topSuperView = self; 431 | } else { 432 | while (topSuperView.superview) { 433 | topSuperView = topSuperView.superview; 434 | } 435 | } 436 | 437 | return topSuperView; 438 | } 439 | 440 | // iPhoneX adapt 441 | - (CGFloat)safeAreaBottomGap 442 | { 443 | NSNumber *gap = objc_getAssociatedObject(self, kUIViewLayoutMethodPropertyBottomGap); 444 | if (gap == nil) { 445 | if (@available(iOS 11, *)) { 446 | if (self.superview.safeAreaLayoutGuide.layoutFrame.size.height > 0) { 447 | gap = @((self.superview.ct_height - self.superview.safeAreaLayoutGuide.layoutFrame.origin.y - self.superview.safeAreaLayoutGuide.layoutFrame.size.height)); 448 | } else { 449 | gap = nil; 450 | } 451 | } else { 452 | gap = @(0); 453 | } 454 | objc_setAssociatedObject(self, kUIViewLayoutMethodPropertyBottomGap, gap, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 455 | } 456 | return gap.floatValue; 457 | } 458 | 459 | - (CGFloat)safeAreaTopGap 460 | { 461 | NSNumber *gap = objc_getAssociatedObject(self, kUIViewLayoutMethodPropertyTopGap); 462 | if (gap == nil) { 463 | if (@available(iOS 11, *)) { 464 | gap = @(self.superview.safeAreaLayoutGuide.layoutFrame.origin.y); 465 | } else { 466 | gap = @(0); 467 | } 468 | objc_setAssociatedObject(self, kUIViewLayoutMethodPropertyTopGap, gap, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 469 | } 470 | return gap.floatValue; 471 | } 472 | 473 | - (CGFloat)safeAreaLeftGap 474 | { 475 | NSNumber *gap = objc_getAssociatedObject(self, kUIViewLayoutMethodPropertyLeftGap); 476 | if (gap == nil) { 477 | if (@available(iOS 11, *)) { 478 | gap = @(self.superview.safeAreaLayoutGuide.layoutFrame.origin.x); 479 | } else { 480 | gap = @(0); 481 | } 482 | objc_setAssociatedObject(self, kUIViewLayoutMethodPropertyLeftGap, gap, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 483 | } 484 | return gap.floatValue; 485 | } 486 | 487 | - (CGFloat)safeAreaRightGap 488 | { 489 | NSNumber *gap = objc_getAssociatedObject(self, kUIViewLayoutMethodPropertyRightGap); 490 | if (gap == nil) { 491 | if (@available(iOS 11, *)) { 492 | gap = @(self.superview.safeAreaLayoutGuide.layoutFrame.origin.x); 493 | } else { 494 | gap = @(0); 495 | } 496 | objc_setAssociatedObject(self, kUIViewLayoutMethodPropertyRightGap, gap, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 497 | } 498 | return gap.floatValue; 499 | } 500 | 501 | @end 502 | -------------------------------------------------------------------------------- /DDSoundWave.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 48; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | C8BBDB391610959C901990EE /* libPods-DDSoundWave.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A49AE80629ACF61D5B8F174 /* libPods-DDSoundWave.a */; }; 11 | F45427112077AD7B0080BD7E /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = F45427102077AD7B0080BD7E /* AppDelegate.m */; }; 12 | F45427142077AD7B0080BD7E /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F45427132077AD7B0080BD7E /* ViewController.m */; }; 13 | F45427172077AD7B0080BD7E /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F45427152077AD7B0080BD7E /* Main.storyboard */; }; 14 | F45427192077AD7B0080BD7E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F45427182077AD7B0080BD7E /* Assets.xcassets */; }; 15 | F454271C2077AD7B0080BD7E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F454271A2077AD7B0080BD7E /* LaunchScreen.storyboard */; }; 16 | F454271F2077AD7B0080BD7E /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = F454271E2077AD7B0080BD7E /* main.m */; }; 17 | F454272B2077AF370080BD7E /* DDSoundWaveView.m in Sources */ = {isa = PBXBuildFile; fileRef = F454272A2077AF370080BD7E /* DDSoundWaveView.m */; }; 18 | /* End PBXBuildFile section */ 19 | 20 | /* Begin PBXFileReference section */ 21 | 3A49AE80629ACF61D5B8F174 /* libPods-DDSoundWave.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-DDSoundWave.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 22 | 9478F23101D2AEEF012CBA8C /* Pods-DDSoundWave.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DDSoundWave.debug.xcconfig"; path = "Pods/Target Support Files/Pods-DDSoundWave/Pods-DDSoundWave.debug.xcconfig"; sourceTree = ""; }; 23 | AD0A19B03E5724A1D92AF8CC /* Pods-DDSoundWave.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DDSoundWave.release.xcconfig"; path = "Pods/Target Support Files/Pods-DDSoundWave/Pods-DDSoundWave.release.xcconfig"; sourceTree = ""; }; 24 | F454270C2077AD7B0080BD7E /* DDSoundWave.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DDSoundWave.app; sourceTree = BUILT_PRODUCTS_DIR; }; 25 | F454270F2077AD7B0080BD7E /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 26 | F45427102077AD7B0080BD7E /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 27 | F45427122077AD7B0080BD7E /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; 28 | F45427132077AD7B0080BD7E /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; 29 | F45427162077AD7B0080BD7E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 30 | F45427182077AD7B0080BD7E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 31 | F454271B2077AD7B0080BD7E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 32 | F454271D2077AD7B0080BD7E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 33 | F454271E2077AD7B0080BD7E /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 34 | F45427292077AF370080BD7E /* DDSoundWaveView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DDSoundWaveView.h; sourceTree = ""; }; 35 | F454272A2077AF370080BD7E /* DDSoundWaveView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DDSoundWaveView.m; sourceTree = ""; }; 36 | /* End PBXFileReference section */ 37 | 38 | /* Begin PBXFrameworksBuildPhase section */ 39 | F45427092077AD7B0080BD7E /* Frameworks */ = { 40 | isa = PBXFrameworksBuildPhase; 41 | buildActionMask = 2147483647; 42 | files = ( 43 | C8BBDB391610959C901990EE /* libPods-DDSoundWave.a in Frameworks */, 44 | ); 45 | runOnlyForDeploymentPostprocessing = 0; 46 | }; 47 | /* End PBXFrameworksBuildPhase section */ 48 | 49 | /* Begin PBXGroup section */ 50 | 3E55FA92ED53B5CF4A9B0B29 /* Pods */ = { 51 | isa = PBXGroup; 52 | children = ( 53 | 9478F23101D2AEEF012CBA8C /* Pods-DDSoundWave.debug.xcconfig */, 54 | AD0A19B03E5724A1D92AF8CC /* Pods-DDSoundWave.release.xcconfig */, 55 | ); 56 | name = Pods; 57 | sourceTree = ""; 58 | }; 59 | F45427032077AD7B0080BD7E = { 60 | isa = PBXGroup; 61 | children = ( 62 | F454270E2077AD7B0080BD7E /* DDSoundWave */, 63 | F454270D2077AD7B0080BD7E /* Products */, 64 | 3E55FA92ED53B5CF4A9B0B29 /* Pods */, 65 | FF810D062662BD3EE88E12B7 /* Frameworks */, 66 | ); 67 | sourceTree = ""; 68 | }; 69 | F454270D2077AD7B0080BD7E /* Products */ = { 70 | isa = PBXGroup; 71 | children = ( 72 | F454270C2077AD7B0080BD7E /* DDSoundWave.app */, 73 | ); 74 | name = Products; 75 | sourceTree = ""; 76 | }; 77 | F454270E2077AD7B0080BD7E /* DDSoundWave */ = { 78 | isa = PBXGroup; 79 | children = ( 80 | F45427252077AD8F0080BD7E /* DDSoundWave */, 81 | F454270F2077AD7B0080BD7E /* AppDelegate.h */, 82 | F45427102077AD7B0080BD7E /* AppDelegate.m */, 83 | F45427122077AD7B0080BD7E /* ViewController.h */, 84 | F45427132077AD7B0080BD7E /* ViewController.m */, 85 | F45427152077AD7B0080BD7E /* Main.storyboard */, 86 | F45427182077AD7B0080BD7E /* Assets.xcassets */, 87 | F454271A2077AD7B0080BD7E /* LaunchScreen.storyboard */, 88 | F454271D2077AD7B0080BD7E /* Info.plist */, 89 | F454271E2077AD7B0080BD7E /* main.m */, 90 | ); 91 | path = DDSoundWave; 92 | sourceTree = ""; 93 | }; 94 | F45427252077AD8F0080BD7E /* DDSoundWave */ = { 95 | isa = PBXGroup; 96 | children = ( 97 | F45427292077AF370080BD7E /* DDSoundWaveView.h */, 98 | F454272A2077AF370080BD7E /* DDSoundWaveView.m */, 99 | ); 100 | path = DDSoundWave; 101 | sourceTree = ""; 102 | }; 103 | FF810D062662BD3EE88E12B7 /* Frameworks */ = { 104 | isa = PBXGroup; 105 | children = ( 106 | 3A49AE80629ACF61D5B8F174 /* libPods-DDSoundWave.a */, 107 | ); 108 | name = Frameworks; 109 | sourceTree = ""; 110 | }; 111 | /* End PBXGroup section */ 112 | 113 | /* Begin PBXNativeTarget section */ 114 | F454270B2077AD7B0080BD7E /* DDSoundWave */ = { 115 | isa = PBXNativeTarget; 116 | buildConfigurationList = F45427222077AD7B0080BD7E /* Build configuration list for PBXNativeTarget "DDSoundWave" */; 117 | buildPhases = ( 118 | DFDBD217A8DF49D298479745 /* [CP] Check Pods Manifest.lock */, 119 | F45427082077AD7B0080BD7E /* Sources */, 120 | F45427092077AD7B0080BD7E /* Frameworks */, 121 | F454270A2077AD7B0080BD7E /* Resources */, 122 | ); 123 | buildRules = ( 124 | ); 125 | dependencies = ( 126 | ); 127 | name = DDSoundWave; 128 | productName = DDSoundWave; 129 | productReference = F454270C2077AD7B0080BD7E /* DDSoundWave.app */; 130 | productType = "com.apple.product-type.application"; 131 | }; 132 | /* End PBXNativeTarget section */ 133 | 134 | /* Begin PBXProject section */ 135 | F45427042077AD7B0080BD7E /* Project object */ = { 136 | isa = PBXProject; 137 | attributes = { 138 | LastUpgradeCheck = 0920; 139 | ORGANIZATIONNAME = Liuzhida; 140 | TargetAttributes = { 141 | F454270B2077AD7B0080BD7E = { 142 | CreatedOnToolsVersion = 9.2; 143 | ProvisioningStyle = Automatic; 144 | }; 145 | }; 146 | }; 147 | buildConfigurationList = F45427072077AD7B0080BD7E /* Build configuration list for PBXProject "DDSoundWave" */; 148 | compatibilityVersion = "Xcode 8.0"; 149 | developmentRegion = en; 150 | hasScannedForEncodings = 0; 151 | knownRegions = ( 152 | en, 153 | Base, 154 | ); 155 | mainGroup = F45427032077AD7B0080BD7E; 156 | productRefGroup = F454270D2077AD7B0080BD7E /* Products */; 157 | projectDirPath = ""; 158 | projectRoot = ""; 159 | targets = ( 160 | F454270B2077AD7B0080BD7E /* DDSoundWave */, 161 | ); 162 | }; 163 | /* End PBXProject section */ 164 | 165 | /* Begin PBXResourcesBuildPhase section */ 166 | F454270A2077AD7B0080BD7E /* Resources */ = { 167 | isa = PBXResourcesBuildPhase; 168 | buildActionMask = 2147483647; 169 | files = ( 170 | F454271C2077AD7B0080BD7E /* LaunchScreen.storyboard in Resources */, 171 | F45427192077AD7B0080BD7E /* Assets.xcassets in Resources */, 172 | F45427172077AD7B0080BD7E /* Main.storyboard in Resources */, 173 | ); 174 | runOnlyForDeploymentPostprocessing = 0; 175 | }; 176 | /* End PBXResourcesBuildPhase section */ 177 | 178 | /* Begin PBXShellScriptBuildPhase section */ 179 | DFDBD217A8DF49D298479745 /* [CP] Check Pods Manifest.lock */ = { 180 | isa = PBXShellScriptBuildPhase; 181 | buildActionMask = 2147483647; 182 | files = ( 183 | ); 184 | inputPaths = ( 185 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 186 | "${PODS_ROOT}/Manifest.lock", 187 | ); 188 | name = "[CP] Check Pods Manifest.lock"; 189 | outputPaths = ( 190 | "$(DERIVED_FILE_DIR)/Pods-DDSoundWave-checkManifestLockResult.txt", 191 | ); 192 | runOnlyForDeploymentPostprocessing = 0; 193 | shellPath = /bin/sh; 194 | 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"; 195 | showEnvVarsInLog = 0; 196 | }; 197 | /* End PBXShellScriptBuildPhase section */ 198 | 199 | /* Begin PBXSourcesBuildPhase section */ 200 | F45427082077AD7B0080BD7E /* Sources */ = { 201 | isa = PBXSourcesBuildPhase; 202 | buildActionMask = 2147483647; 203 | files = ( 204 | F45427142077AD7B0080BD7E /* ViewController.m in Sources */, 205 | F454271F2077AD7B0080BD7E /* main.m in Sources */, 206 | F45427112077AD7B0080BD7E /* AppDelegate.m in Sources */, 207 | F454272B2077AF370080BD7E /* DDSoundWaveView.m in Sources */, 208 | ); 209 | runOnlyForDeploymentPostprocessing = 0; 210 | }; 211 | /* End PBXSourcesBuildPhase section */ 212 | 213 | /* Begin PBXVariantGroup section */ 214 | F45427152077AD7B0080BD7E /* Main.storyboard */ = { 215 | isa = PBXVariantGroup; 216 | children = ( 217 | F45427162077AD7B0080BD7E /* Base */, 218 | ); 219 | name = Main.storyboard; 220 | sourceTree = ""; 221 | }; 222 | F454271A2077AD7B0080BD7E /* LaunchScreen.storyboard */ = { 223 | isa = PBXVariantGroup; 224 | children = ( 225 | F454271B2077AD7B0080BD7E /* Base */, 226 | ); 227 | name = LaunchScreen.storyboard; 228 | sourceTree = ""; 229 | }; 230 | /* End PBXVariantGroup section */ 231 | 232 | /* Begin XCBuildConfiguration section */ 233 | F45427202077AD7B0080BD7E /* Debug */ = { 234 | isa = XCBuildConfiguration; 235 | buildSettings = { 236 | ALWAYS_SEARCH_USER_PATHS = NO; 237 | CLANG_ANALYZER_NONNULL = YES; 238 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 239 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 240 | CLANG_CXX_LIBRARY = "libc++"; 241 | CLANG_ENABLE_MODULES = YES; 242 | CLANG_ENABLE_OBJC_ARC = YES; 243 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 244 | CLANG_WARN_BOOL_CONVERSION = YES; 245 | CLANG_WARN_COMMA = YES; 246 | CLANG_WARN_CONSTANT_CONVERSION = YES; 247 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 248 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 249 | CLANG_WARN_EMPTY_BODY = YES; 250 | CLANG_WARN_ENUM_CONVERSION = YES; 251 | CLANG_WARN_INFINITE_RECURSION = YES; 252 | CLANG_WARN_INT_CONVERSION = YES; 253 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 254 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 255 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 256 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 257 | CLANG_WARN_STRICT_PROTOTYPES = YES; 258 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 259 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 260 | CLANG_WARN_UNREACHABLE_CODE = YES; 261 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 262 | CODE_SIGN_IDENTITY = "iPhone Developer"; 263 | COPY_PHASE_STRIP = NO; 264 | DEBUG_INFORMATION_FORMAT = dwarf; 265 | ENABLE_STRICT_OBJC_MSGSEND = YES; 266 | ENABLE_TESTABILITY = YES; 267 | GCC_C_LANGUAGE_STANDARD = gnu11; 268 | GCC_DYNAMIC_NO_PIC = NO; 269 | GCC_NO_COMMON_BLOCKS = YES; 270 | GCC_OPTIMIZATION_LEVEL = 0; 271 | GCC_PREPROCESSOR_DEFINITIONS = ( 272 | "DEBUG=1", 273 | "$(inherited)", 274 | ); 275 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 276 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 277 | GCC_WARN_UNDECLARED_SELECTOR = YES; 278 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 279 | GCC_WARN_UNUSED_FUNCTION = YES; 280 | GCC_WARN_UNUSED_VARIABLE = YES; 281 | IPHONEOS_DEPLOYMENT_TARGET = 11.2; 282 | MTL_ENABLE_DEBUG_INFO = YES; 283 | ONLY_ACTIVE_ARCH = YES; 284 | SDKROOT = iphoneos; 285 | }; 286 | name = Debug; 287 | }; 288 | F45427212077AD7B0080BD7E /* Release */ = { 289 | isa = XCBuildConfiguration; 290 | buildSettings = { 291 | ALWAYS_SEARCH_USER_PATHS = NO; 292 | CLANG_ANALYZER_NONNULL = YES; 293 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 294 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 295 | CLANG_CXX_LIBRARY = "libc++"; 296 | CLANG_ENABLE_MODULES = YES; 297 | CLANG_ENABLE_OBJC_ARC = YES; 298 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 299 | CLANG_WARN_BOOL_CONVERSION = YES; 300 | CLANG_WARN_COMMA = YES; 301 | CLANG_WARN_CONSTANT_CONVERSION = YES; 302 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 303 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 304 | CLANG_WARN_EMPTY_BODY = YES; 305 | CLANG_WARN_ENUM_CONVERSION = YES; 306 | CLANG_WARN_INFINITE_RECURSION = YES; 307 | CLANG_WARN_INT_CONVERSION = YES; 308 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 309 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 310 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 311 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 312 | CLANG_WARN_STRICT_PROTOTYPES = YES; 313 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 314 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 315 | CLANG_WARN_UNREACHABLE_CODE = YES; 316 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 317 | CODE_SIGN_IDENTITY = "iPhone Developer"; 318 | COPY_PHASE_STRIP = NO; 319 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 320 | ENABLE_NS_ASSERTIONS = NO; 321 | ENABLE_STRICT_OBJC_MSGSEND = YES; 322 | GCC_C_LANGUAGE_STANDARD = gnu11; 323 | GCC_NO_COMMON_BLOCKS = YES; 324 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 325 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 326 | GCC_WARN_UNDECLARED_SELECTOR = YES; 327 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 328 | GCC_WARN_UNUSED_FUNCTION = YES; 329 | GCC_WARN_UNUSED_VARIABLE = YES; 330 | IPHONEOS_DEPLOYMENT_TARGET = 11.2; 331 | MTL_ENABLE_DEBUG_INFO = NO; 332 | SDKROOT = iphoneos; 333 | VALIDATE_PRODUCT = YES; 334 | }; 335 | name = Release; 336 | }; 337 | F45427232077AD7B0080BD7E /* Debug */ = { 338 | isa = XCBuildConfiguration; 339 | baseConfigurationReference = 9478F23101D2AEEF012CBA8C /* Pods-DDSoundWave.debug.xcconfig */; 340 | buildSettings = { 341 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 342 | CODE_SIGN_STYLE = Automatic; 343 | INFOPLIST_FILE = DDSoundWave/Info.plist; 344 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 345 | PRODUCT_BUNDLE_IDENTIFIER = com.teaker.DDSoundWave; 346 | PRODUCT_NAME = "$(TARGET_NAME)"; 347 | TARGETED_DEVICE_FAMILY = "1,2"; 348 | }; 349 | name = Debug; 350 | }; 351 | F45427242077AD7B0080BD7E /* Release */ = { 352 | isa = XCBuildConfiguration; 353 | baseConfigurationReference = AD0A19B03E5724A1D92AF8CC /* Pods-DDSoundWave.release.xcconfig */; 354 | buildSettings = { 355 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 356 | CODE_SIGN_STYLE = Automatic; 357 | INFOPLIST_FILE = DDSoundWave/Info.plist; 358 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 359 | PRODUCT_BUNDLE_IDENTIFIER = com.teaker.DDSoundWave; 360 | PRODUCT_NAME = "$(TARGET_NAME)"; 361 | TARGETED_DEVICE_FAMILY = "1,2"; 362 | }; 363 | name = Release; 364 | }; 365 | /* End XCBuildConfiguration section */ 366 | 367 | /* Begin XCConfigurationList section */ 368 | F45427072077AD7B0080BD7E /* Build configuration list for PBXProject "DDSoundWave" */ = { 369 | isa = XCConfigurationList; 370 | buildConfigurations = ( 371 | F45427202077AD7B0080BD7E /* Debug */, 372 | F45427212077AD7B0080BD7E /* Release */, 373 | ); 374 | defaultConfigurationIsVisible = 0; 375 | defaultConfigurationName = Release; 376 | }; 377 | F45427222077AD7B0080BD7E /* Build configuration list for PBXNativeTarget "DDSoundWave" */ = { 378 | isa = XCConfigurationList; 379 | buildConfigurations = ( 380 | F45427232077AD7B0080BD7E /* Debug */, 381 | F45427242077AD7B0080BD7E /* Release */, 382 | ); 383 | defaultConfigurationIsVisible = 0; 384 | defaultConfigurationName = Release; 385 | }; 386 | /* End XCConfigurationList section */ 387 | }; 388 | rootObject = F45427042077AD7B0080BD7E /* Project object */; 389 | } 390 | -------------------------------------------------------------------------------- /Pods/Pods.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 48; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 24C39CC17A8A9DC1D27BA1020CABF7B5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D88AAE1F92055A60CC2FC970D7D34634 /* Foundation.framework */; }; 11 | 3EBD72F4F64A7DE45A88ECCC7B12FD6A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B63C6A64CF66340668996F78DA6BB482 /* UIKit.framework */; }; 12 | 4355C731060DC668A71EBCBCA3435BDC /* HandyFrame-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B0B9C09E78A626A37B1A883D18D3DCBA /* HandyFrame-dummy.m */; }; 13 | 59DC88A66752FF47806374DAAEE95C83 /* Pods-DDSoundWave-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FB816112A243C759A7A31ED883EBF85 /* Pods-DDSoundWave-dummy.m */; }; 14 | 5CD9DA56144180C5943C9D9BE8D1203E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D88AAE1F92055A60CC2FC970D7D34634 /* Foundation.framework */; }; 15 | 69CC78FF344D0EB2050719582B80EF34 /* UIView+LayoutMethods.h in Headers */ = {isa = PBXBuildFile; fileRef = 87C85B6E2679684C51E6172A07E8489A /* UIView+LayoutMethods.h */; settings = {ATTRIBUTES = (Project, ); }; }; 16 | D274E160F43659FDA92C800617926694 /* UIView+LayoutMethods.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B36784F83548EC019CB39A0E54F66DF /* UIView+LayoutMethods.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; 17 | /* End PBXBuildFile section */ 18 | 19 | /* Begin PBXContainerItemProxy section */ 20 | D02FC4FA97BDEE66A727A2AD96D789FE /* PBXContainerItemProxy */ = { 21 | isa = PBXContainerItemProxy; 22 | containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 23 | proxyType = 1; 24 | remoteGlobalIDString = BAE53AD0B7382177F4D30E0299A670EC; 25 | remoteInfo = HandyFrame; 26 | }; 27 | /* End PBXContainerItemProxy section */ 28 | 29 | /* Begin PBXFileReference section */ 30 | 02B07F17ACB690F13F3D7DE7DD7B9D67 /* Pods-DDSoundWave-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-DDSoundWave-acknowledgements.markdown"; sourceTree = ""; }; 31 | 1634BE4D23142DE010346397E4E64EAC /* libHandyFrame.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libHandyFrame.a; path = libHandyFrame.a; sourceTree = BUILT_PRODUCTS_DIR; }; 32 | 2037B6B54C4D7CD5E2C07808082CF69B /* libPods-DDSoundWave.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-DDSoundWave.a"; path = "libPods-DDSoundWave.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 33 | 2A5B8C18C9E120F4066619D843C839F9 /* HandyFrame-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "HandyFrame-prefix.pch"; sourceTree = ""; }; 34 | 42D78691B7B918E1DECF68FC1FCA52C1 /* Pods-DDSoundWave.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-DDSoundWave.release.xcconfig"; sourceTree = ""; }; 35 | 5B36784F83548EC019CB39A0E54F66DF /* UIView+LayoutMethods.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "UIView+LayoutMethods.m"; sourceTree = ""; }; 36 | 5FB816112A243C759A7A31ED883EBF85 /* Pods-DDSoundWave-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-DDSoundWave-dummy.m"; sourceTree = ""; }; 37 | 69112309F43C9857FD681701C6EC79A9 /* Pods-DDSoundWave-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-DDSoundWave-resources.sh"; sourceTree = ""; }; 38 | 6B78E027D368C197BC6742EE220D8BEC /* Pods-DDSoundWave-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-DDSoundWave-acknowledgements.plist"; sourceTree = ""; }; 39 | 85B261FADBD2E6C7EEB9A4D0FD5DE8F5 /* Pods-DDSoundWave.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-DDSoundWave.debug.xcconfig"; sourceTree = ""; }; 40 | 87C85B6E2679684C51E6172A07E8489A /* UIView+LayoutMethods.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UIView+LayoutMethods.h"; sourceTree = ""; }; 41 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 42 | 9ED10D0D4FCB26490B21AC4A752CAB61 /* Pods-DDSoundWave-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-DDSoundWave-frameworks.sh"; sourceTree = ""; }; 43 | B0B9C09E78A626A37B1A883D18D3DCBA /* HandyFrame-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "HandyFrame-dummy.m"; sourceTree = ""; }; 44 | B63C6A64CF66340668996F78DA6BB482 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; 45 | D88AAE1F92055A60CC2FC970D7D34634 /* 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; }; 46 | DF1040FD41B01945302B0F15CE2ED9B2 /* HandyFrame.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = HandyFrame.xcconfig; sourceTree = ""; }; 47 | /* End PBXFileReference section */ 48 | 49 | /* Begin PBXFrameworksBuildPhase section */ 50 | DF0A993F33D4350180B7AE62D9534F91 /* Frameworks */ = { 51 | isa = PBXFrameworksBuildPhase; 52 | buildActionMask = 2147483647; 53 | files = ( 54 | 24C39CC17A8A9DC1D27BA1020CABF7B5 /* Foundation.framework in Frameworks */, 55 | ); 56 | runOnlyForDeploymentPostprocessing = 0; 57 | }; 58 | EF69F431313DE5FFFBE89E40A7F31F98 /* Frameworks */ = { 59 | isa = PBXFrameworksBuildPhase; 60 | buildActionMask = 2147483647; 61 | files = ( 62 | 5CD9DA56144180C5943C9D9BE8D1203E /* Foundation.framework in Frameworks */, 63 | 3EBD72F4F64A7DE45A88ECCC7B12FD6A /* UIKit.framework in Frameworks */, 64 | ); 65 | runOnlyForDeploymentPostprocessing = 0; 66 | }; 67 | /* End PBXFrameworksBuildPhase section */ 68 | 69 | /* Begin PBXGroup section */ 70 | 3F213B91184573F93B3996EFFBA74DE9 /* Pods */ = { 71 | isa = PBXGroup; 72 | children = ( 73 | 68753309B2BE6DF798107BE785DE08CF /* HandyFrame */, 74 | ); 75 | name = Pods; 76 | sourceTree = ""; 77 | }; 78 | 433CD3331B6C3787F473C941B61FC68F /* Frameworks */ = { 79 | isa = PBXGroup; 80 | children = ( 81 | 438B396F6B4147076630CAEFE34282C1 /* iOS */, 82 | ); 83 | name = Frameworks; 84 | sourceTree = ""; 85 | }; 86 | 438B396F6B4147076630CAEFE34282C1 /* iOS */ = { 87 | isa = PBXGroup; 88 | children = ( 89 | D88AAE1F92055A60CC2FC970D7D34634 /* Foundation.framework */, 90 | B63C6A64CF66340668996F78DA6BB482 /* UIKit.framework */, 91 | ); 92 | name = iOS; 93 | sourceTree = ""; 94 | }; 95 | 45F6FCC9E754DB0590D49F1B89B87E00 /* Targets Support Files */ = { 96 | isa = PBXGroup; 97 | children = ( 98 | AA776558A40A1DCFF1658C7E079B9B8A /* Pods-DDSoundWave */, 99 | ); 100 | name = "Targets Support Files"; 101 | sourceTree = ""; 102 | }; 103 | 68753309B2BE6DF798107BE785DE08CF /* HandyFrame */ = { 104 | isa = PBXGroup; 105 | children = ( 106 | 87C85B6E2679684C51E6172A07E8489A /* UIView+LayoutMethods.h */, 107 | 5B36784F83548EC019CB39A0E54F66DF /* UIView+LayoutMethods.m */, 108 | 74292D9AF0E86FD5CB6F5F879FFBCA93 /* Support Files */, 109 | ); 110 | name = HandyFrame; 111 | path = HandyFrame; 112 | sourceTree = ""; 113 | }; 114 | 74292D9AF0E86FD5CB6F5F879FFBCA93 /* Support Files */ = { 115 | isa = PBXGroup; 116 | children = ( 117 | DF1040FD41B01945302B0F15CE2ED9B2 /* HandyFrame.xcconfig */, 118 | B0B9C09E78A626A37B1A883D18D3DCBA /* HandyFrame-dummy.m */, 119 | 2A5B8C18C9E120F4066619D843C839F9 /* HandyFrame-prefix.pch */, 120 | ); 121 | name = "Support Files"; 122 | path = "../Target Support Files/HandyFrame"; 123 | sourceTree = ""; 124 | }; 125 | 7DB346D0F39D3F0E887471402A8071AB = { 126 | isa = PBXGroup; 127 | children = ( 128 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, 129 | 433CD3331B6C3787F473C941B61FC68F /* Frameworks */, 130 | 3F213B91184573F93B3996EFFBA74DE9 /* Pods */, 131 | CF489E2924B3A5D03766845F97EFD5D8 /* Products */, 132 | 45F6FCC9E754DB0590D49F1B89B87E00 /* Targets Support Files */, 133 | ); 134 | sourceTree = ""; 135 | }; 136 | AA776558A40A1DCFF1658C7E079B9B8A /* Pods-DDSoundWave */ = { 137 | isa = PBXGroup; 138 | children = ( 139 | 02B07F17ACB690F13F3D7DE7DD7B9D67 /* Pods-DDSoundWave-acknowledgements.markdown */, 140 | 6B78E027D368C197BC6742EE220D8BEC /* Pods-DDSoundWave-acknowledgements.plist */, 141 | 5FB816112A243C759A7A31ED883EBF85 /* Pods-DDSoundWave-dummy.m */, 142 | 9ED10D0D4FCB26490B21AC4A752CAB61 /* Pods-DDSoundWave-frameworks.sh */, 143 | 69112309F43C9857FD681701C6EC79A9 /* Pods-DDSoundWave-resources.sh */, 144 | 85B261FADBD2E6C7EEB9A4D0FD5DE8F5 /* Pods-DDSoundWave.debug.xcconfig */, 145 | 42D78691B7B918E1DECF68FC1FCA52C1 /* Pods-DDSoundWave.release.xcconfig */, 146 | ); 147 | name = "Pods-DDSoundWave"; 148 | path = "Target Support Files/Pods-DDSoundWave"; 149 | sourceTree = ""; 150 | }; 151 | CF489E2924B3A5D03766845F97EFD5D8 /* Products */ = { 152 | isa = PBXGroup; 153 | children = ( 154 | 1634BE4D23142DE010346397E4E64EAC /* libHandyFrame.a */, 155 | 2037B6B54C4D7CD5E2C07808082CF69B /* libPods-DDSoundWave.a */, 156 | ); 157 | name = Products; 158 | sourceTree = ""; 159 | }; 160 | /* End PBXGroup section */ 161 | 162 | /* Begin PBXHeadersBuildPhase section */ 163 | 05B5B31A01953C2E0D9A2C478C34B6A6 /* Headers */ = { 164 | isa = PBXHeadersBuildPhase; 165 | buildActionMask = 2147483647; 166 | files = ( 167 | 69CC78FF344D0EB2050719582B80EF34 /* UIView+LayoutMethods.h in Headers */, 168 | ); 169 | runOnlyForDeploymentPostprocessing = 0; 170 | }; 171 | /* End PBXHeadersBuildPhase section */ 172 | 173 | /* Begin PBXNativeTarget section */ 174 | 90036243922F64590A6EA30C70307379 /* Pods-DDSoundWave */ = { 175 | isa = PBXNativeTarget; 176 | buildConfigurationList = 07A5A7DD7043172C5D75FA7263C627AF /* Build configuration list for PBXNativeTarget "Pods-DDSoundWave" */; 177 | buildPhases = ( 178 | 6BB6BCC5874B5C3E987926F77531529E /* Sources */, 179 | DF0A993F33D4350180B7AE62D9534F91 /* Frameworks */, 180 | ); 181 | buildRules = ( 182 | ); 183 | dependencies = ( 184 | F19DF0959B21B451377FF0701DA9B365 /* PBXTargetDependency */, 185 | ); 186 | name = "Pods-DDSoundWave"; 187 | productName = "Pods-DDSoundWave"; 188 | productReference = 2037B6B54C4D7CD5E2C07808082CF69B /* libPods-DDSoundWave.a */; 189 | productType = "com.apple.product-type.library.static"; 190 | }; 191 | BAE53AD0B7382177F4D30E0299A670EC /* HandyFrame */ = { 192 | isa = PBXNativeTarget; 193 | buildConfigurationList = 9B08945FB2F124B45205E941B00014DF /* Build configuration list for PBXNativeTarget "HandyFrame" */; 194 | buildPhases = ( 195 | E913FAAE82539584E01F5E3860AB6109 /* Sources */, 196 | EF69F431313DE5FFFBE89E40A7F31F98 /* Frameworks */, 197 | 05B5B31A01953C2E0D9A2C478C34B6A6 /* Headers */, 198 | ); 199 | buildRules = ( 200 | ); 201 | dependencies = ( 202 | ); 203 | name = HandyFrame; 204 | productName = HandyFrame; 205 | productReference = 1634BE4D23142DE010346397E4E64EAC /* libHandyFrame.a */; 206 | productType = "com.apple.product-type.library.static"; 207 | }; 208 | /* End PBXNativeTarget section */ 209 | 210 | /* Begin PBXProject section */ 211 | D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { 212 | isa = PBXProject; 213 | attributes = { 214 | LastSwiftUpdateCheck = 0930; 215 | LastUpgradeCheck = 0930; 216 | }; 217 | buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; 218 | compatibilityVersion = "Xcode 3.2"; 219 | developmentRegion = English; 220 | hasScannedForEncodings = 0; 221 | knownRegions = ( 222 | en, 223 | ); 224 | mainGroup = 7DB346D0F39D3F0E887471402A8071AB; 225 | productRefGroup = CF489E2924B3A5D03766845F97EFD5D8 /* Products */; 226 | projectDirPath = ""; 227 | projectRoot = ""; 228 | targets = ( 229 | BAE53AD0B7382177F4D30E0299A670EC /* HandyFrame */, 230 | 90036243922F64590A6EA30C70307379 /* Pods-DDSoundWave */, 231 | ); 232 | }; 233 | /* End PBXProject section */ 234 | 235 | /* Begin PBXSourcesBuildPhase section */ 236 | 6BB6BCC5874B5C3E987926F77531529E /* Sources */ = { 237 | isa = PBXSourcesBuildPhase; 238 | buildActionMask = 2147483647; 239 | files = ( 240 | 59DC88A66752FF47806374DAAEE95C83 /* Pods-DDSoundWave-dummy.m in Sources */, 241 | ); 242 | runOnlyForDeploymentPostprocessing = 0; 243 | }; 244 | E913FAAE82539584E01F5E3860AB6109 /* Sources */ = { 245 | isa = PBXSourcesBuildPhase; 246 | buildActionMask = 2147483647; 247 | files = ( 248 | 4355C731060DC668A71EBCBCA3435BDC /* HandyFrame-dummy.m in Sources */, 249 | D274E160F43659FDA92C800617926694 /* UIView+LayoutMethods.m in Sources */, 250 | ); 251 | runOnlyForDeploymentPostprocessing = 0; 252 | }; 253 | /* End PBXSourcesBuildPhase section */ 254 | 255 | /* Begin PBXTargetDependency section */ 256 | F19DF0959B21B451377FF0701DA9B365 /* PBXTargetDependency */ = { 257 | isa = PBXTargetDependency; 258 | name = HandyFrame; 259 | target = BAE53AD0B7382177F4D30E0299A670EC /* HandyFrame */; 260 | targetProxy = D02FC4FA97BDEE66A727A2AD96D789FE /* PBXContainerItemProxy */; 261 | }; 262 | /* End PBXTargetDependency section */ 263 | 264 | /* Begin XCBuildConfiguration section */ 265 | 30D948AE62C04225F8DEF8734A4C5A26 /* Release */ = { 266 | isa = XCBuildConfiguration; 267 | buildSettings = { 268 | ALWAYS_SEARCH_USER_PATHS = NO; 269 | CLANG_ANALYZER_NONNULL = YES; 270 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 271 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 272 | CLANG_CXX_LIBRARY = "libc++"; 273 | CLANG_ENABLE_MODULES = YES; 274 | CLANG_ENABLE_OBJC_ARC = YES; 275 | CLANG_ENABLE_OBJC_WEAK = YES; 276 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 277 | CLANG_WARN_BOOL_CONVERSION = YES; 278 | CLANG_WARN_COMMA = YES; 279 | CLANG_WARN_CONSTANT_CONVERSION = YES; 280 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 281 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 282 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 283 | CLANG_WARN_EMPTY_BODY = YES; 284 | CLANG_WARN_ENUM_CONVERSION = YES; 285 | CLANG_WARN_INFINITE_RECURSION = YES; 286 | CLANG_WARN_INT_CONVERSION = YES; 287 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 288 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 289 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 290 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 291 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 292 | CLANG_WARN_STRICT_PROTOTYPES = YES; 293 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 294 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 295 | CLANG_WARN_UNREACHABLE_CODE = YES; 296 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 297 | CODE_SIGNING_ALLOWED = NO; 298 | CODE_SIGNING_REQUIRED = NO; 299 | COPY_PHASE_STRIP = NO; 300 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 301 | ENABLE_NS_ASSERTIONS = NO; 302 | ENABLE_STRICT_OBJC_MSGSEND = YES; 303 | GCC_C_LANGUAGE_STANDARD = gnu11; 304 | GCC_NO_COMMON_BLOCKS = YES; 305 | GCC_PREPROCESSOR_DEFINITIONS = ( 306 | "POD_CONFIGURATION_RELEASE=1", 307 | "$(inherited)", 308 | ); 309 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 310 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 311 | GCC_WARN_UNDECLARED_SELECTOR = YES; 312 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 313 | GCC_WARN_UNUSED_FUNCTION = YES; 314 | GCC_WARN_UNUSED_VARIABLE = YES; 315 | IPHONEOS_DEPLOYMENT_TARGET = 11.2; 316 | MTL_ENABLE_DEBUG_INFO = NO; 317 | PRODUCT_NAME = "$(TARGET_NAME)"; 318 | STRIP_INSTALLED_PRODUCT = NO; 319 | SYMROOT = "${SRCROOT}/../build"; 320 | }; 321 | name = Release; 322 | }; 323 | 47CD481309D681D8ABEBBC35109E8D5C /* Debug */ = { 324 | isa = XCBuildConfiguration; 325 | baseConfigurationReference = DF1040FD41B01945302B0F15CE2ED9B2 /* HandyFrame.xcconfig */; 326 | buildSettings = { 327 | CODE_SIGN_IDENTITY = "iPhone Developer"; 328 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 329 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 330 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 331 | GCC_PREFIX_HEADER = "Target Support Files/HandyFrame/HandyFrame-prefix.pch"; 332 | IPHONEOS_DEPLOYMENT_TARGET = 5.0; 333 | OTHER_LDFLAGS = ""; 334 | OTHER_LIBTOOLFLAGS = ""; 335 | PRIVATE_HEADERS_FOLDER_PATH = ""; 336 | PRODUCT_MODULE_NAME = HandyFrame; 337 | PRODUCT_NAME = HandyFrame; 338 | PUBLIC_HEADERS_FOLDER_PATH = ""; 339 | SDKROOT = iphoneos; 340 | SKIP_INSTALL = YES; 341 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 342 | TARGETED_DEVICE_FAMILY = "1,2"; 343 | }; 344 | name = Debug; 345 | }; 346 | 5C38D8B9444AFF4F3C33295CB592FE9C /* Release */ = { 347 | isa = XCBuildConfiguration; 348 | baseConfigurationReference = 42D78691B7B918E1DECF68FC1FCA52C1 /* Pods-DDSoundWave.release.xcconfig */; 349 | buildSettings = { 350 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 351 | CLANG_ENABLE_OBJC_WEAK = NO; 352 | CODE_SIGN_IDENTITY = "iPhone Developer"; 353 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 354 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 355 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 356 | IPHONEOS_DEPLOYMENT_TARGET = 11.2; 357 | MACH_O_TYPE = staticlib; 358 | OTHER_LDFLAGS = ""; 359 | OTHER_LIBTOOLFLAGS = ""; 360 | PODS_ROOT = "$(SRCROOT)"; 361 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 362 | SDKROOT = iphoneos; 363 | SKIP_INSTALL = YES; 364 | TARGETED_DEVICE_FAMILY = "1,2"; 365 | VALIDATE_PRODUCT = YES; 366 | }; 367 | name = Release; 368 | }; 369 | 6135E95808165004B3546FB8DAC39422 /* Debug */ = { 370 | isa = XCBuildConfiguration; 371 | baseConfigurationReference = 85B261FADBD2E6C7EEB9A4D0FD5DE8F5 /* Pods-DDSoundWave.debug.xcconfig */; 372 | buildSettings = { 373 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 374 | CLANG_ENABLE_OBJC_WEAK = NO; 375 | CODE_SIGN_IDENTITY = "iPhone Developer"; 376 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 377 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 378 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 379 | IPHONEOS_DEPLOYMENT_TARGET = 11.2; 380 | MACH_O_TYPE = staticlib; 381 | OTHER_LDFLAGS = ""; 382 | OTHER_LIBTOOLFLAGS = ""; 383 | PODS_ROOT = "$(SRCROOT)"; 384 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 385 | SDKROOT = iphoneos; 386 | SKIP_INSTALL = YES; 387 | TARGETED_DEVICE_FAMILY = "1,2"; 388 | }; 389 | name = Debug; 390 | }; 391 | 9E88537B08ED4D6EB44DBA7BC8D56A35 /* Debug */ = { 392 | isa = XCBuildConfiguration; 393 | buildSettings = { 394 | ALWAYS_SEARCH_USER_PATHS = NO; 395 | CLANG_ANALYZER_NONNULL = YES; 396 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 397 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 398 | CLANG_CXX_LIBRARY = "libc++"; 399 | CLANG_ENABLE_MODULES = YES; 400 | CLANG_ENABLE_OBJC_ARC = YES; 401 | CLANG_ENABLE_OBJC_WEAK = YES; 402 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 403 | CLANG_WARN_BOOL_CONVERSION = YES; 404 | CLANG_WARN_COMMA = YES; 405 | CLANG_WARN_CONSTANT_CONVERSION = YES; 406 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 407 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 408 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 409 | CLANG_WARN_EMPTY_BODY = YES; 410 | CLANG_WARN_ENUM_CONVERSION = YES; 411 | CLANG_WARN_INFINITE_RECURSION = YES; 412 | CLANG_WARN_INT_CONVERSION = YES; 413 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 414 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 415 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 416 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 417 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 418 | CLANG_WARN_STRICT_PROTOTYPES = YES; 419 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 420 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 421 | CLANG_WARN_UNREACHABLE_CODE = YES; 422 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 423 | CODE_SIGNING_ALLOWED = NO; 424 | CODE_SIGNING_REQUIRED = NO; 425 | COPY_PHASE_STRIP = NO; 426 | DEBUG_INFORMATION_FORMAT = dwarf; 427 | ENABLE_STRICT_OBJC_MSGSEND = YES; 428 | ENABLE_TESTABILITY = YES; 429 | GCC_C_LANGUAGE_STANDARD = gnu11; 430 | GCC_DYNAMIC_NO_PIC = NO; 431 | GCC_NO_COMMON_BLOCKS = YES; 432 | GCC_OPTIMIZATION_LEVEL = 0; 433 | GCC_PREPROCESSOR_DEFINITIONS = ( 434 | "POD_CONFIGURATION_DEBUG=1", 435 | "DEBUG=1", 436 | "$(inherited)", 437 | ); 438 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 439 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 440 | GCC_WARN_UNDECLARED_SELECTOR = YES; 441 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 442 | GCC_WARN_UNUSED_FUNCTION = YES; 443 | GCC_WARN_UNUSED_VARIABLE = YES; 444 | IPHONEOS_DEPLOYMENT_TARGET = 11.2; 445 | MTL_ENABLE_DEBUG_INFO = YES; 446 | ONLY_ACTIVE_ARCH = YES; 447 | PRODUCT_NAME = "$(TARGET_NAME)"; 448 | STRIP_INSTALLED_PRODUCT = NO; 449 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 450 | SYMROOT = "${SRCROOT}/../build"; 451 | }; 452 | name = Debug; 453 | }; 454 | D131A49BAE09969DA88F3276799DA470 /* Release */ = { 455 | isa = XCBuildConfiguration; 456 | baseConfigurationReference = DF1040FD41B01945302B0F15CE2ED9B2 /* HandyFrame.xcconfig */; 457 | buildSettings = { 458 | CODE_SIGN_IDENTITY = "iPhone Developer"; 459 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 460 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 461 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 462 | GCC_PREFIX_HEADER = "Target Support Files/HandyFrame/HandyFrame-prefix.pch"; 463 | IPHONEOS_DEPLOYMENT_TARGET = 5.0; 464 | OTHER_LDFLAGS = ""; 465 | OTHER_LIBTOOLFLAGS = ""; 466 | PRIVATE_HEADERS_FOLDER_PATH = ""; 467 | PRODUCT_MODULE_NAME = HandyFrame; 468 | PRODUCT_NAME = HandyFrame; 469 | PUBLIC_HEADERS_FOLDER_PATH = ""; 470 | SDKROOT = iphoneos; 471 | SKIP_INSTALL = YES; 472 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 473 | TARGETED_DEVICE_FAMILY = "1,2"; 474 | VALIDATE_PRODUCT = YES; 475 | }; 476 | name = Release; 477 | }; 478 | /* End XCBuildConfiguration section */ 479 | 480 | /* Begin XCConfigurationList section */ 481 | 07A5A7DD7043172C5D75FA7263C627AF /* Build configuration list for PBXNativeTarget "Pods-DDSoundWave" */ = { 482 | isa = XCConfigurationList; 483 | buildConfigurations = ( 484 | 6135E95808165004B3546FB8DAC39422 /* Debug */, 485 | 5C38D8B9444AFF4F3C33295CB592FE9C /* Release */, 486 | ); 487 | defaultConfigurationIsVisible = 0; 488 | defaultConfigurationName = Release; 489 | }; 490 | 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { 491 | isa = XCConfigurationList; 492 | buildConfigurations = ( 493 | 9E88537B08ED4D6EB44DBA7BC8D56A35 /* Debug */, 494 | 30D948AE62C04225F8DEF8734A4C5A26 /* Release */, 495 | ); 496 | defaultConfigurationIsVisible = 0; 497 | defaultConfigurationName = Release; 498 | }; 499 | 9B08945FB2F124B45205E941B00014DF /* Build configuration list for PBXNativeTarget "HandyFrame" */ = { 500 | isa = XCConfigurationList; 501 | buildConfigurations = ( 502 | 47CD481309D681D8ABEBBC35109E8D5C /* Debug */, 503 | D131A49BAE09969DA88F3276799DA470 /* Release */, 504 | ); 505 | defaultConfigurationIsVisible = 0; 506 | defaultConfigurationName = Release; 507 | }; 508 | /* End XCConfigurationList section */ 509 | }; 510 | rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 511 | } 512 | --------------------------------------------------------------------------------