浏览代码

版本升级维护

yyqxiaoyin 5 年之前
父节点
当前提交
6f6b53f132
共有 46 个文件被更改,包括 1548 次插入50 次删除
  1. 5 0
      Example/MKRRadioManager/MKRRadioManager-Info.plist
  2. 20 7
      Example/MKRRadioManager/MKRViewController.m
  3. 1 0
      Example/Podfile
  4. 8 1
      Example/Podfile.lock
  5. 1 0
      Example/Pods/Headers/Private/YYCategory/NSObject+AssociatedObject.h
  6. 1 0
      Example/Pods/Headers/Private/YYCategory/NSString+ChineseLength.h
  7. 1 0
      Example/Pods/Headers/Private/YYCategory/NSString+Utilities.h
  8. 1 0
      Example/Pods/Headers/Private/YYCategory/UIDevice+Helpers.h
  9. 1 0
      Example/Pods/Headers/Private/YYCategory/UIImage+Stretch.h
  10. 1 0
      Example/Pods/Headers/Private/YYCategory/UIView+Sizes.h
  11. 1 0
      Example/Pods/Headers/Private/YYCategory/UIView+ViewController.h
  12. 1 0
      Example/Pods/Headers/Public/YYCategory/NSObject+AssociatedObject.h
  13. 1 0
      Example/Pods/Headers/Public/YYCategory/NSString+ChineseLength.h
  14. 1 0
      Example/Pods/Headers/Public/YYCategory/NSString+Utilities.h
  15. 1 0
      Example/Pods/Headers/Public/YYCategory/UIDevice+Helpers.h
  16. 1 0
      Example/Pods/Headers/Public/YYCategory/UIImage+Stretch.h
  17. 1 0
      Example/Pods/Headers/Public/YYCategory/UIView+Sizes.h
  18. 1 0
      Example/Pods/Headers/Public/YYCategory/UIView+ViewController.h
  19. 8 1
      Example/Pods/Manifest.lock
  20. 232 31
      Example/Pods/Pods.xcodeproj/project.pbxproj
  21. 25 0
      Example/Pods/Target Support Files/Pods-MKRRadioManager_Example/Pods-MKRRadioManager_Example-acknowledgements.markdown
  22. 31 0
      Example/Pods/Target Support Files/Pods-MKRRadioManager_Example/Pods-MKRRadioManager_Example-acknowledgements.plist
  23. 4 4
      Example/Pods/Target Support Files/Pods-MKRRadioManager_Example/Pods-MKRRadioManager_Example.debug.xcconfig
  24. 4 4
      Example/Pods/Target Support Files/Pods-MKRRadioManager_Example/Pods-MKRRadioManager_Example.release.xcconfig
  25. 1 1
      Example/Pods/Target Support Files/Pods-MKRRadioManager_Tests/Pods-MKRRadioManager_Tests.debug.xcconfig
  26. 1 1
      Example/Pods/Target Support Files/Pods-MKRRadioManager_Tests/Pods-MKRRadioManager_Tests.release.xcconfig
  27. 5 0
      Example/Pods/Target Support Files/YYCategory/YYCategory-dummy.m
  28. 12 0
      Example/Pods/Target Support Files/YYCategory/YYCategory-prefix.pch
  29. 9 0
      Example/Pods/Target Support Files/YYCategory/YYCategory.xcconfig
  30. 21 0
      Example/Pods/YYCategory/LICENSE
  31. 2 0
      Example/Pods/YYCategory/README.md
  32. 14 0
      Example/Pods/YYCategory/YYCategoryDemo/YYCategory/NSObject+AssociatedObject.h
  33. 22 0
      Example/Pods/YYCategory/YYCategoryDemo/YYCategory/NSObject+AssociatedObject.m
  34. 40 0
      Example/Pods/YYCategory/YYCategoryDemo/YYCategory/NSString+ChineseLength.h
  35. 53 0
      Example/Pods/YYCategory/YYCategoryDemo/YYCategory/NSString+ChineseLength.m
  36. 16 0
      Example/Pods/YYCategory/YYCategoryDemo/YYCategory/NSString+Utilities.h
  37. 55 0
      Example/Pods/YYCategory/YYCategoryDemo/YYCategory/NSString+Utilities.m
  38. 33 0
      Example/Pods/YYCategory/YYCategoryDemo/YYCategory/UIDevice+Helpers.h
  39. 251 0
      Example/Pods/YYCategory/YYCategoryDemo/YYCategory/UIDevice+Helpers.m
  40. 51 0
      Example/Pods/YYCategory/YYCategoryDemo/YYCategory/UIImage+Stretch.h
  41. 92 0
      Example/Pods/YYCategory/YYCategoryDemo/YYCategory/UIImage+Stretch.m
  42. 140 0
      Example/Pods/YYCategory/YYCategoryDemo/YYCategory/UIView+Sizes.h
  43. 326 0
      Example/Pods/YYCategory/YYCategoryDemo/YYCategory/UIView+Sizes.m
  44. 18 0
      Example/Pods/YYCategory/YYCategoryDemo/YYCategory/UIView+ViewController.h
  45. 33 0
      Example/Pods/YYCategory/YYCategoryDemo/YYCategory/UIView+ViewController.m
  46. 1 0
      MKRRadioManager/Classes/MKRRadioManager/MKRAVPlayer/MKRAVPlayer.m

+ 5 - 0
Example/MKRRadioManager/MKRRadioManager-Info.plist

@@ -38,6 +38,11 @@
 		<string>UIInterfaceOrientationLandscapeLeft</string>
 		<string>UIInterfaceOrientationLandscapeRight</string>
 	</array>
+	<key>NSAppTransportSecurity</key>
+	<dict>
+		<key>NSAllowsArbitraryLoads</key>
+		<true/>
+	</dict>
 	<key>UISupportedInterfaceOrientations~ipad</key>
 	<array>
 		<string>UIInterfaceOrientationPortrait</string>

+ 20 - 7
Example/MKRRadioManager/MKRViewController.m

@@ -8,6 +8,8 @@
 
 #import "MKRViewController.h"
 #import "MKRPlayControlViewController.h"
+#import <MKRRadioManager/MKRAVPlayer.h>
+#import <YYCategory/NSString+Utilities.h>
 
 @interface MKRViewController ()
 
@@ -15,6 +17,8 @@
 
 @property (nonatomic, strong)NSMutableArray *dataSource;
 
+@property (nonatomic, strong) MKRAVPlayer *player;
+
 @end
 
 @implementation MKRViewController
@@ -33,13 +37,22 @@
 - (void)viewDidLoad
 {
     [super viewDidLoad];
-    self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
-    self.tableView.delegate = self;
-    self.tableView.dataSource = self;
-    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"];
-    [self.view addSubview:self.tableView];
-    [[MKRWIFIDeviceManager shareManager] startUpnp];
-    [self searchDevice];
+//    http://openod.sign.qingting.fm/mp3/3235228_128.mp3?sign=47d740e207069a86c539d2c78528f9c2&t=5d8d2d55&clientID=OTRmNmQyZDgtNWZiMi0xMWU3LTkyM2YtMDAxNjNlMDAyMGFk
+    NSString *urlString = [@"http://radio1964-zhibo.oss-cn-shenzhen.aliyuncs.com/audio_data/180112/榜单bandcamp第一期20181月12.mp3" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
+    NSString *string1 = [@"http://openod.sign.qingting.fm/mp3/3235228_128.mp3?sign=47d740e207069a86c539d2c78528f9c2&t=5d8d2d55&clientID=OTRmNmQyZDgtNWZiMi0xMWU3LTkyM2YtMDAxNjNlMDAyMGFk" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
+//    NSString *realString = [[urlString urlEncodeString] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
+    NSURL *url = [NSURL URLWithString:string1];
+    
+    self.player = [[MKRAVPlayer alloc]initWithContentURL:url];
+    self.player.shouldAutoPlay = YES;
+    [self.player play];
+//    self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
+//    self.tableView.delegate = self;
+//    self.tableView.dataSource = self;
+//    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"];
+//    [self.view addSubview:self.tableView];
+//    [[MKRWIFIDeviceManager shareManager] startUpnp];
+//    [self searchDevice];
 }
 
 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

+ 1 - 0
Example/Podfile

@@ -4,6 +4,7 @@ platform :ios, '9.2'
 inhibit_all_warnings!
 target 'MKRRadioManager_Example' do
   pod 'MKRRadioManager', :path => '../'
+  pod 'YYCategory'
   target 'MKRRadioManager_Tests' do
     inherit! :search_paths
   end

+ 8 - 1
Example/Podfile.lock

@@ -1,8 +1,14 @@
 PODS:
   - MKRRadioManager (0.0.1)
+  - YYCategory (0.0.1)
 
 DEPENDENCIES:
   - MKRRadioManager (from `../`)
+  - YYCategory
+
+SPEC REPOS:
+  https://github.com/cocoapods/specs.git:
+    - YYCategory
 
 EXTERNAL SOURCES:
   MKRRadioManager:
@@ -10,7 +16,8 @@ EXTERNAL SOURCES:
 
 SPEC CHECKSUMS:
   MKRRadioManager: dc051d4b5361a49c481dc08d28eaf07fa1c1084c
+  YYCategory: d85135b05d2806c90930a5bbadfc1501396a3db9
 
-PODFILE CHECKSUM: f3923d99a7dd4bfbbb1643a013536f7777f9d494
+PODFILE CHECKSUM: f65396e8a7f07654404054ab9d38dc4b7b6f8818
 
 COCOAPODS: 1.7.5

+ 1 - 0
Example/Pods/Headers/Private/YYCategory/NSObject+AssociatedObject.h

@@ -0,0 +1 @@
+../../../YYCategory/YYCategoryDemo/YYCategory/NSObject+AssociatedObject.h

+ 1 - 0
Example/Pods/Headers/Private/YYCategory/NSString+ChineseLength.h

@@ -0,0 +1 @@
+../../../YYCategory/YYCategoryDemo/YYCategory/NSString+ChineseLength.h

+ 1 - 0
Example/Pods/Headers/Private/YYCategory/NSString+Utilities.h

@@ -0,0 +1 @@
+../../../YYCategory/YYCategoryDemo/YYCategory/NSString+Utilities.h

+ 1 - 0
Example/Pods/Headers/Private/YYCategory/UIDevice+Helpers.h

@@ -0,0 +1 @@
+../../../YYCategory/YYCategoryDemo/YYCategory/UIDevice+Helpers.h

+ 1 - 0
Example/Pods/Headers/Private/YYCategory/UIImage+Stretch.h

@@ -0,0 +1 @@
+../../../YYCategory/YYCategoryDemo/YYCategory/UIImage+Stretch.h

+ 1 - 0
Example/Pods/Headers/Private/YYCategory/UIView+Sizes.h

@@ -0,0 +1 @@
+../../../YYCategory/YYCategoryDemo/YYCategory/UIView+Sizes.h

+ 1 - 0
Example/Pods/Headers/Private/YYCategory/UIView+ViewController.h

@@ -0,0 +1 @@
+../../../YYCategory/YYCategoryDemo/YYCategory/UIView+ViewController.h

+ 1 - 0
Example/Pods/Headers/Public/YYCategory/NSObject+AssociatedObject.h

@@ -0,0 +1 @@
+../../../YYCategory/YYCategoryDemo/YYCategory/NSObject+AssociatedObject.h

+ 1 - 0
Example/Pods/Headers/Public/YYCategory/NSString+ChineseLength.h

@@ -0,0 +1 @@
+../../../YYCategory/YYCategoryDemo/YYCategory/NSString+ChineseLength.h

+ 1 - 0
Example/Pods/Headers/Public/YYCategory/NSString+Utilities.h

@@ -0,0 +1 @@
+../../../YYCategory/YYCategoryDemo/YYCategory/NSString+Utilities.h

+ 1 - 0
Example/Pods/Headers/Public/YYCategory/UIDevice+Helpers.h

@@ -0,0 +1 @@
+../../../YYCategory/YYCategoryDemo/YYCategory/UIDevice+Helpers.h

+ 1 - 0
Example/Pods/Headers/Public/YYCategory/UIImage+Stretch.h

@@ -0,0 +1 @@
+../../../YYCategory/YYCategoryDemo/YYCategory/UIImage+Stretch.h

+ 1 - 0
Example/Pods/Headers/Public/YYCategory/UIView+Sizes.h

@@ -0,0 +1 @@
+../../../YYCategory/YYCategoryDemo/YYCategory/UIView+Sizes.h

+ 1 - 0
Example/Pods/Headers/Public/YYCategory/UIView+ViewController.h

@@ -0,0 +1 @@
+../../../YYCategory/YYCategoryDemo/YYCategory/UIView+ViewController.h

+ 8 - 1
Example/Pods/Manifest.lock

@@ -1,8 +1,14 @@
 PODS:
   - MKRRadioManager (0.0.1)
+  - YYCategory (0.0.1)
 
 DEPENDENCIES:
   - MKRRadioManager (from `../`)
+  - YYCategory
+
+SPEC REPOS:
+  https://github.com/cocoapods/specs.git:
+    - YYCategory
 
 EXTERNAL SOURCES:
   MKRRadioManager:
@@ -10,7 +16,8 @@ EXTERNAL SOURCES:
 
 SPEC CHECKSUMS:
   MKRRadioManager: dc051d4b5361a49c481dc08d28eaf07fa1c1084c
+  YYCategory: d85135b05d2806c90930a5bbadfc1501396a3db9
 
-PODFILE CHECKSUM: f3923d99a7dd4bfbbb1643a013536f7777f9d494
+PODFILE CHECKSUM: f65396e8a7f07654404054ab9d38dc4b7b6f8818
 
 COCOAPODS: 1.7.5

+ 232 - 31
Example/Pods/Pods.xcodeproj/project.pbxproj

@@ -7,30 +7,45 @@
 	objects = {
 
 /* Begin PBXBuildFile section */
+		05EDC679BECE92D3A77A8E321D79DF90 /* UIView+ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 539C326717A3053BB71CD867536DC66D /* UIView+ViewController.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; };
 		0752174CC9F1F4113A6210CBB5FC7A4C /* MKRPlayResourceStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 6AA1A956416BC1D7FFC0718B5035FD63 /* MKRPlayResourceStatus.h */; settings = {ATTRIBUTES = (Project, ); }; };
+		0AA49A5335B50B43438DEB82BE67541E /* NSObject+AssociatedObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 524DF209E803993F2EED562FB58E4BC0 /* NSObject+AssociatedObject.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; };
 		0F6E23F3DBCECE9F29D7DD4F680682AD /* MKRAVPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = A8390A03A70704EC0B214392D9672490 /* MKRAVPlayer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
 		10398C5F92AA80197639284CFECDBE99 /* MKRRadioPlayControlManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 385E37EDF7823B4E9832BF3581D76D6E /* MKRRadioPlayControlManager.h */; settings = {ATTRIBUTES = (Project, ); }; };
 		11F7FF31466FB609821E6C4F77FC7236 /* UIDevice+MKRRadioManagerAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = 533CCCD38DB6EE88B8D5E4FAA86B6BD2 /* UIDevice+MKRRadioManagerAdd.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
 		1A8323CF539CBCCADBBB73D5CA7E1105 /* MKRM3UListModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 4AF5219E1E148D6E032029326B64B3E2 /* MKRM3UListModel.h */; settings = {ATTRIBUTES = (Project, ); }; };
 		292CB70D81DC98F1018724C91F561BDF /* NSString+MKRRadioManagerAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = A9934F92A7CB3482A27D00A94EC7D8B2 /* NSString+MKRRadioManagerAdd.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+		3DB4BAE2832649B2DAE7700DEC6C78F0 /* NSString+ChineseLength.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D5A3A65BD4499F1E9584AAFEE4AAD59 /* NSString+ChineseLength.h */; settings = {ATTRIBUTES = (Project, ); }; };
 		3E23680680DCE587CF61556E57629E68 /* MKRRadioResorce.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BB9727670642AF7D4F646045D19DEF6 /* MKRRadioResorce.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
 		45DA105594C15A9F9152CB6BB3F97FDA /* MKRAVPlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 079DC5A4E08F53E591F236C06C06D758 /* MKRAVPlayer.h */; settings = {ATTRIBUTES = (Project, ); }; };
 		51C9B21F896349CA28C9E335791E9F06 /* MKRPlayControlProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 883013C7C5BB118683BBD20144861EBF /* MKRPlayControlProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };
+		5566C60F36F8B80C6C538E18255122F9 /* Pods-MKRRadioManager_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 836A525BA09B96BD81D742372D1E8654 /* Pods-MKRRadioManager_Example-dummy.m */; };
 		5B772CFA77D3DEF9BF8E1E660A40B27C /* Pods-MKRRadioManager_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 67A27EF511B5E329BE070EE369797EAE /* Pods-MKRRadioManager_Tests-dummy.m */; };
 		6BA4D3D198020D9B811A41599311D164 /* NSHashTable+MKRRadioManagerAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = 073733C90A82FC2B771BEC007FE83B66 /* NSHashTable+MKRRadioManagerAdd.h */; settings = {ATTRIBUTES = (Project, ); }; };
 		8101E2571829444DB7DD53A4F747504A /* MKRRadioResorce.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BDA1FEEC4D5826AE7BBB46A8C737D9D /* MKRRadioResorce.h */; settings = {ATTRIBUTES = (Project, ); }; };
 		81CCE14F2B0B2A696EBEF16CFC53D662 /* MKRWIFIDeviceManager.h in Headers */ = {isa = PBXBuildFile; fileRef = EE580B0EF20D8B485C9C209A3AAF8325 /* MKRWIFIDeviceManager.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		92E01E9BD33817D849DE6280771C9BA9 /* Pods-MKRRadioManager_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 836A525BA09B96BD81D742372D1E8654 /* Pods-MKRRadioManager_Example-dummy.m */; };
+		8BB2EF656E3E4F6C17E3FE5DDE644157 /* UIView+Sizes.m in Sources */ = {isa = PBXBuildFile; fileRef = CCE35E93200703AD92B0BFD4429DE9A4 /* UIView+Sizes.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; };
+		93CDA092DA400222FEDAE2639F1F6461 /* UIView+Sizes.h in Headers */ = {isa = PBXBuildFile; fileRef = DC83EFB065E5B8CE8430E9F2212DD3ED /* UIView+Sizes.h */; settings = {ATTRIBUTES = (Project, ); }; };
+		95188B67A10D8A8E1BD71B3EC5E03401 /* NSObject+AssociatedObject.h in Headers */ = {isa = PBXBuildFile; fileRef = D382B31C3779DD7D81BD328088C2F0A7 /* NSObject+AssociatedObject.h */; settings = {ATTRIBUTES = (Project, ); }; };
+		957D07DADE29AC5383A56283783C1607 /* UIDevice+Helpers.h in Headers */ = {isa = PBXBuildFile; fileRef = E4D351385C24DA2D7D0D3DDF24118D31 /* UIDevice+Helpers.h */; settings = {ATTRIBUTES = (Project, ); }; };
 		A5263DC946CA5202BCCD3DC132671E45 /* MKRResoureEnumHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = A13F50D144D7080A15FB38A66367887F /* MKRResoureEnumHeader.h */; settings = {ATTRIBUTES = (Project, ); }; };
 		B60522713DDDE3CD23792F11F716F20E /* MKRPlayResourceStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F0AEDBF3FAB72292AB5B36BE659C585 /* MKRPlayResourceStatus.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
 		C0A5986288CA046BFAC0A0862E0221AD /* MKRUPnPDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EA1BCA3761F5CFDEAD599760D731385 /* MKRUPnPDevice.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
 		C351F794FC8535E194CA0CB2D4F7A799 /* NSString+MKRRadioManagerAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = B4AC12DE36FF4CEBCF2FEE6F70A86ACE /* NSString+MKRRadioManagerAdd.h */; settings = {ATTRIBUTES = (Project, ); }; };
+		C562666F135D70BB71B1FA6E29A3CE93 /* NSString+ChineseLength.m in Sources */ = {isa = PBXBuildFile; fileRef = A3220EC80CC6195CAD3C54F1E91436DA /* NSString+ChineseLength.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; };
+		CB3964D8697546F82B3EA2C51B4D9A6F /* UIImage+Stretch.h in Headers */ = {isa = PBXBuildFile; fileRef = 44A736529FF764EA1100F9F501828530 /* UIImage+Stretch.h */; settings = {ATTRIBUTES = (Project, ); }; };
 		CE34E163C0B43A59CFC7F7A1F47BC59C /* UIDevice+MKRRadioManagerAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = E167188D753BD7CF5F1DAEAD4CE9BC2A /* UIDevice+MKRRadioManagerAdd.h */; settings = {ATTRIBUTES = (Project, ); }; };
+		D55344269E8923B52473A585F6114BB2 /* NSString+Utilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 7844F8E449C416455F19558EE621D7D3 /* NSString+Utilities.h */; settings = {ATTRIBUTES = (Project, ); }; };
+		D79FEF30F6ADBDEB39C96BCC063BC306 /* YYCategory-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BE5D9C2AF04EAB2EB9F181871A835466 /* YYCategory-dummy.m */; };
 		E05A599D4D5337CFF6FAC62D3DAB8F38 /* MKRM3UListModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B17DA3E1589F95F1BB04C051A0BF7E2 /* MKRM3UListModel.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+		E3A4C63CA515E5EECA716CD1CCC6DF39 /* UIImage+Stretch.m in Sources */ = {isa = PBXBuildFile; fileRef = CCFB615F0269E47AA0FA76A4F096CAB4 /* UIImage+Stretch.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; };
 		E7A7E8C276DDB8D02889A5C7C625CA86 /* MKRPlayResourceUpdateProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 06B88CAEDB53D77F3109D0D93F898E44 /* MKRPlayResourceUpdateProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };
 		EB0C5B1F5D6FC26438DDF5881D4A51E5 /* MKRWIFIDeviceManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B4508752581AF105F4698A97BDA686D /* MKRWIFIDeviceManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
 		EBEFFFBEC96104520379C4348BA69CA0 /* NSHashTable+MKRRadioManagerAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = B42CA92007F4A296A558E90C35A4D7F5 /* NSHashTable+MKRRadioManagerAdd.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
 		EBFC9E2EE8989CCB9EC7ABEED595976B /* MKRUPnPDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D2ED6AF2CB32499AA6847AA06885995 /* MKRUPnPDevice.h */; settings = {ATTRIBUTES = (Project, ); }; };
+		F18C3CAEDFCCBD698EA8FED4833BF494 /* UIDevice+Helpers.m in Sources */ = {isa = PBXBuildFile; fileRef = 62B11A171A33527A7129184487527111 /* UIDevice+Helpers.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; };
+		F68891B2313721B68D8C1242F3CBEB8D /* NSString+Utilities.m in Sources */ = {isa = PBXBuildFile; fileRef = F1D2D0633886A25A78C38FF94C6DC847 /* NSString+Utilities.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; };
+		FA5665C985869E54C1324F081C003426 /* UIView+ViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = C336F077938B81E0E2E5F74B5E719423 /* UIView+ViewController.h */; settings = {ATTRIBUTES = (Project, ); }; };
 		FDB8574CF68AB36EBD686A60AE583BA1 /* MKRRadioManager-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 86BDF85C8549718E16ECD88E32D5BF5D /* MKRRadioManager-dummy.m */; };
 /* End PBXBuildFile section */
 
@@ -42,7 +57,14 @@
 			remoteGlobalIDString = 6759AE90C019F7CEBF481E7A84F59338;
 			remoteInfo = "Pods-MKRRadioManager_Example";
 		};
-		50EC0A7C3BC17F4B790E7D59E6230F1B /* PBXContainerItemProxy */ = {
+		3B2D1716598745AE18F6C801070B5273 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 7990945DFD111A8558696D76E99A29E9;
+			remoteInfo = YYCategory;
+		};
+		F9EBB43CCE6CE6F113D45B5DAB5B0B16 /* PBXContainerItemProxy */ = {
 			isa = PBXContainerItemProxy;
 			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
 			proxyType = 1;
@@ -61,21 +83,29 @@
 		2BB9727670642AF7D4F646045D19DEF6 /* MKRRadioResorce.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MKRRadioResorce.m; path = MKRRadioManager/Classes/MKRRadioManager/MKRRadioResorce.m; sourceTree = "<group>"; };
 		385E37EDF7823B4E9832BF3581D76D6E /* MKRRadioPlayControlManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MKRRadioPlayControlManager.h; sourceTree = "<group>"; };
 		38CBECD3E13B6E8C07C54FD39ED9B21F /* Pods-MKRRadioManager_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MKRRadioManager_Example-acknowledgements.plist"; sourceTree = "<group>"; };
+		44A736529FF764EA1100F9F501828530 /* UIImage+Stretch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Stretch.h"; path = "YYCategoryDemo/YYCategory/UIImage+Stretch.h"; sourceTree = "<group>"; };
 		450D8D4FFEF0E114209CA29D1A2CE838 /* libUPNP.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = libUPNP.framework; path = libs/libUPNP.framework; sourceTree = "<group>"; };
 		4624903CB75A92FD828681E070A96BA5 /* libMKRRadioManager.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libMKRRadioManager.a; path = libMKRRadioManager.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		47E8ECEFE30CC53FAA5DE9059EFCCA03 /* libAS-Control.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = "libAS-Control.framework"; path = "libs/libAS-Control.framework"; sourceTree = "<group>"; };
 		4AF5219E1E148D6E032029326B64B3E2 /* MKRM3UListModel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MKRM3UListModel.h; sourceTree = "<group>"; };
+		4D5A3A65BD4499F1E9584AAFEE4AAD59 /* NSString+ChineseLength.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+ChineseLength.h"; path = "YYCategoryDemo/YYCategory/NSString+ChineseLength.h"; sourceTree = "<group>"; };
 		4EA1BCA3761F5CFDEAD599760D731385 /* MKRUPnPDevice.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MKRUPnPDevice.m; sourceTree = "<group>"; };
 		4F0AEDBF3FAB72292AB5B36BE659C585 /* MKRPlayResourceStatus.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MKRPlayResourceStatus.m; sourceTree = "<group>"; };
+		524DF209E803993F2EED562FB58E4BC0 /* NSObject+AssociatedObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+AssociatedObject.m"; path = "YYCategoryDemo/YYCategory/NSObject+AssociatedObject.m"; sourceTree = "<group>"; };
 		533CCCD38DB6EE88B8D5E4FAA86B6BD2 /* UIDevice+MKRRadioManagerAdd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "UIDevice+MKRRadioManagerAdd.m"; sourceTree = "<group>"; };
+		539C326717A3053BB71CD867536DC66D /* UIView+ViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+ViewController.m"; path = "YYCategoryDemo/YYCategory/UIView+ViewController.m"; sourceTree = "<group>"; };
 		5D5404FE9A358D93FBCF9F384ABC2AEA /* Pods-MKRRadioManager_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MKRRadioManager_Example.release.xcconfig"; sourceTree = "<group>"; };
+		62B11A171A33527A7129184487527111 /* UIDevice+Helpers.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIDevice+Helpers.m"; path = "YYCategoryDemo/YYCategory/UIDevice+Helpers.m"; sourceTree = "<group>"; };
+		63966E2C3A0A25AD69A7722141C15905 /* YYCategory.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = YYCategory.xcconfig; sourceTree = "<group>"; };
 		6606738F4C31335C6DE5483A861BF122 /* Pods-MKRRadioManager_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MKRRadioManager_Tests-acknowledgements.plist"; sourceTree = "<group>"; };
 		67A27EF511B5E329BE070EE369797EAE /* Pods-MKRRadioManager_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MKRRadioManager_Tests-dummy.m"; sourceTree = "<group>"; };
 		68899B02239354B7E74A8091314E78A1 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = "<group>"; };
 		6AA1A956416BC1D7FFC0718B5035FD63 /* MKRPlayResourceStatus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MKRPlayResourceStatus.h; sourceTree = "<group>"; };
 		6B17DA3E1589F95F1BB04C051A0BF7E2 /* MKRM3UListModel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MKRM3UListModel.m; sourceTree = "<group>"; };
 		6BDA1FEEC4D5826AE7BBB46A8C737D9D /* MKRRadioResorce.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MKRRadioResorce.h; path = MKRRadioManager/Classes/MKRRadioManager/MKRRadioResorce.h; sourceTree = "<group>"; };
+		7844F8E449C416455F19558EE621D7D3 /* NSString+Utilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+Utilities.h"; path = "YYCategoryDemo/YYCategory/NSString+Utilities.h"; sourceTree = "<group>"; };
 		8169495D23E6F2568FB3BB68CFB40D97 /* Pods-MKRRadioManager_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MKRRadioManager_Example-acknowledgements.markdown"; sourceTree = "<group>"; };
+		818229EDFCEFE91B8410D7C9CC7E6A5D /* libYYCategory.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libYYCategory.a; path = libYYCategory.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		836A525BA09B96BD81D742372D1E8654 /* Pods-MKRRadioManager_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MKRRadioManager_Example-dummy.m"; sourceTree = "<group>"; };
 		838E1E2CBE39C6A523090D0FA57A4C23 /* libPods-MKRRadioManager_Tests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-MKRRadioManager_Tests.a"; path = "libPods-MKRRadioManager_Tests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
 		86BDF85C8549718E16ECD88E32D5BF5D /* MKRRadioManager-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MKRRadioManager-dummy.m"; sourceTree = "<group>"; };
@@ -86,20 +116,37 @@
 		9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
 		A13F50D144D7080A15FB38A66367887F /* MKRResoureEnumHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MKRResoureEnumHeader.h; sourceTree = "<group>"; };
 		A26B77F91ECB3BD7C7FA66128982C3FF /* MKRRadioManager.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MKRRadioManager.xcconfig; sourceTree = "<group>"; };
+		A3220EC80CC6195CAD3C54F1E91436DA /* NSString+ChineseLength.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+ChineseLength.m"; path = "YYCategoryDemo/YYCategory/NSString+ChineseLength.m"; sourceTree = "<group>"; };
 		A8390A03A70704EC0B214392D9672490 /* MKRAVPlayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MKRAVPlayer.m; sourceTree = "<group>"; };
 		A9934F92A7CB3482A27D00A94EC7D8B2 /* NSString+MKRRadioManagerAdd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NSString+MKRRadioManagerAdd.m"; sourceTree = "<group>"; };
 		ADD6016F3760993E4FE00B435C3A1AAE /* Pods-MKRRadioManager_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MKRRadioManager_Tests.release.xcconfig"; sourceTree = "<group>"; };
 		B42CA92007F4A296A558E90C35A4D7F5 /* NSHashTable+MKRRadioManagerAdd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NSHashTable+MKRRadioManagerAdd.m"; sourceTree = "<group>"; };
 		B4AC12DE36FF4CEBCF2FEE6F70A86ACE /* NSString+MKRRadioManagerAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSString+MKRRadioManagerAdd.h"; sourceTree = "<group>"; };
+		BE5D9C2AF04EAB2EB9F181871A835466 /* YYCategory-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "YYCategory-dummy.m"; sourceTree = "<group>"; };
+		C336F077938B81E0E2E5F74B5E719423 /* UIView+ViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+ViewController.h"; path = "YYCategoryDemo/YYCategory/UIView+ViewController.h"; sourceTree = "<group>"; };
 		C4A35313AD83C01E57EA1815AEA6BC5C /* Pods-MKRRadioManager_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MKRRadioManager_Example.debug.xcconfig"; sourceTree = "<group>"; };
+		CCE35E93200703AD92B0BFD4429DE9A4 /* UIView+Sizes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+Sizes.m"; path = "YYCategoryDemo/YYCategory/UIView+Sizes.m"; sourceTree = "<group>"; };
+		CCFB615F0269E47AA0FA76A4F096CAB4 /* UIImage+Stretch.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Stretch.m"; path = "YYCategoryDemo/YYCategory/UIImage+Stretch.m"; sourceTree = "<group>"; };
+		D382B31C3779DD7D81BD328088C2F0A7 /* NSObject+AssociatedObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+AssociatedObject.h"; path = "YYCategoryDemo/YYCategory/NSObject+AssociatedObject.h"; sourceTree = "<group>"; };
+		DC83EFB065E5B8CE8430E9F2212DD3ED /* UIView+Sizes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+Sizes.h"; path = "YYCategoryDemo/YYCategory/UIView+Sizes.h"; sourceTree = "<group>"; };
 		E167188D753BD7CF5F1DAEAD4CE9BC2A /* UIDevice+MKRRadioManagerAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UIDevice+MKRRadioManagerAdd.h"; sourceTree = "<group>"; };
+		E4D351385C24DA2D7D0D3DDF24118D31 /* UIDevice+Helpers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIDevice+Helpers.h"; path = "YYCategoryDemo/YYCategory/UIDevice+Helpers.h"; sourceTree = "<group>"; };
 		EE580B0EF20D8B485C9C209A3AAF8325 /* MKRWIFIDeviceManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MKRWIFIDeviceManager.h; sourceTree = "<group>"; };
 		EFBEB724A7C46694A8AC151A929B3C28 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = "<group>"; };
+		F1D2D0633886A25A78C38FF94C6DC847 /* NSString+Utilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+Utilities.m"; path = "YYCategoryDemo/YYCategory/NSString+Utilities.m"; sourceTree = "<group>"; };
 		F53C1E652AFD7038B717B14F08A1A2EC /* Pods-MKRRadioManager_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MKRRadioManager_Tests-acknowledgements.markdown"; sourceTree = "<group>"; };
+		FCD8D4C014698BA623FDA9515B62A435 /* YYCategory-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "YYCategory-prefix.pch"; sourceTree = "<group>"; };
 		FE9441B2BC00597A4F90F43AB9E188A9 /* Pods-MKRRadioManager_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MKRRadioManager_Tests.debug.xcconfig"; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
+		223707480B66B7549AE606E1BECCAEE4 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 		84F1327F252E09DF90513EC47D28E347 /* Frameworks */ = {
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
@@ -107,14 +154,14 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
-		E3B3ACBD2CA39077AD8F448AD51BEE8B /* Frameworks */ = {
+		97BC7FB7C1DD423A7C036023061DE62D /* Frameworks */ = {
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
-		FB826535F6E02B249006B3E6F91B09A4 /* Frameworks */ = {
+		E3B3ACBD2CA39077AD8F448AD51BEE8B /* Frameworks */ = {
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
@@ -157,12 +204,13 @@
 			path = MKRRadioManager/Classes/MKRRadioManager/Category;
 			sourceTree = "<group>";
 		};
-		453202A8AB343905F5CA15A3A58D87D7 /* Products */ = {
+		2F032914C3687421B76515CEB0D2C9FA /* Products */ = {
 			isa = PBXGroup;
 			children = (
 				4624903CB75A92FD828681E070A96BA5 /* libMKRRadioManager.a */,
 				89DEBFD829CC1938B0AF05C60C1D8866 /* libPods-MKRRadioManager_Example.a */,
 				838E1E2CBE39C6A523090D0FA57A4C23 /* libPods-MKRRadioManager_Tests.a */,
+				818229EDFCEFE91B8410D7C9CC7E6A5D /* libYYCategory.a */,
 			);
 			name = Products;
 			sourceTree = "<group>";
@@ -197,6 +245,17 @@
 			path = ../..;
 			sourceTree = "<group>";
 		};
+		69F460AF34E31F5B6D6BBB779243A47E /* Support Files */ = {
+			isa = PBXGroup;
+			children = (
+				63966E2C3A0A25AD69A7722141C15905 /* YYCategory.xcconfig */,
+				BE5D9C2AF04EAB2EB9F181871A835466 /* YYCategory-dummy.m */,
+				FCD8D4C014698BA623FDA9515B62A435 /* YYCategory-prefix.pch */,
+			);
+			name = "Support Files";
+			path = "../Target Support Files/YYCategory";
+			sourceTree = "<group>";
+		};
 		6A8B740B9078EC57C7D8234CCAFC1E38 /* MKRAVPlayer */ = {
 			isa = PBXGroup;
 			children = (
@@ -270,7 +329,8 @@
 				9D940727FF8FB9C785EB98E56350EF41 /* Podfile */,
 				B49F8B153615B771F34D34E857CF7DAF /* Development Pods */,
 				D89477F20FB1DE18A04690586D7808C4 /* Frameworks */,
-				453202A8AB343905F5CA15A3A58D87D7 /* Products */,
+				D53737B2E697521385D7D3A190BBA44D /* Pods */,
+				2F032914C3687421B76515CEB0D2C9FA /* Products */,
 				0B21C33FCE0C78E442D9723AD83947FC /* Targets Support Files */,
 			);
 			sourceTree = "<group>";
@@ -288,6 +348,14 @@
 			path = "Target Support Files/Pods-MKRRadioManager_Tests";
 			sourceTree = "<group>";
 		};
+		D53737B2E697521385D7D3A190BBA44D /* Pods */ = {
+			isa = PBXGroup;
+			children = (
+				DBC602A0994F19500A57D56C660E1F77 /* YYCategory */,
+			);
+			name = Pods;
+			sourceTree = "<group>";
+		};
 		D89477F20FB1DE18A04690586D7808C4 /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
@@ -295,10 +363,47 @@
 			name = Frameworks;
 			sourceTree = "<group>";
 		};
+		DBC602A0994F19500A57D56C660E1F77 /* YYCategory */ = {
+			isa = PBXGroup;
+			children = (
+				D382B31C3779DD7D81BD328088C2F0A7 /* NSObject+AssociatedObject.h */,
+				524DF209E803993F2EED562FB58E4BC0 /* NSObject+AssociatedObject.m */,
+				4D5A3A65BD4499F1E9584AAFEE4AAD59 /* NSString+ChineseLength.h */,
+				A3220EC80CC6195CAD3C54F1E91436DA /* NSString+ChineseLength.m */,
+				7844F8E449C416455F19558EE621D7D3 /* NSString+Utilities.h */,
+				F1D2D0633886A25A78C38FF94C6DC847 /* NSString+Utilities.m */,
+				E4D351385C24DA2D7D0D3DDF24118D31 /* UIDevice+Helpers.h */,
+				62B11A171A33527A7129184487527111 /* UIDevice+Helpers.m */,
+				44A736529FF764EA1100F9F501828530 /* UIImage+Stretch.h */,
+				CCFB615F0269E47AA0FA76A4F096CAB4 /* UIImage+Stretch.m */,
+				DC83EFB065E5B8CE8430E9F2212DD3ED /* UIView+Sizes.h */,
+				CCE35E93200703AD92B0BFD4429DE9A4 /* UIView+Sizes.m */,
+				C336F077938B81E0E2E5F74B5E719423 /* UIView+ViewController.h */,
+				539C326717A3053BB71CD867536DC66D /* UIView+ViewController.m */,
+				69F460AF34E31F5B6D6BBB779243A47E /* Support Files */,
+			);
+			name = YYCategory;
+			path = YYCategory;
+			sourceTree = "<group>";
+		};
 /* End PBXGroup section */
 
 /* Begin PBXHeadersBuildPhase section */
-		0F2F44B29AD5B2130E7BC2399425DB70 /* Headers */ = {
+		1344BD8A8F8730E1125D7A8E672612A6 /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				95188B67A10D8A8E1BD71B3EC5E03401 /* NSObject+AssociatedObject.h in Headers */,
+				3DB4BAE2832649B2DAE7700DEC6C78F0 /* NSString+ChineseLength.h in Headers */,
+				D55344269E8923B52473A585F6114BB2 /* NSString+Utilities.h in Headers */,
+				957D07DADE29AC5383A56283783C1607 /* UIDevice+Helpers.h in Headers */,
+				CB3964D8697546F82B3EA2C51B4D9A6F /* UIImage+Stretch.h in Headers */,
+				93CDA092DA400222FEDAE2639F1F6461 /* UIView+Sizes.h in Headers */,
+				FA5665C985869E54C1324F081C003426 /* UIView+ViewController.h in Headers */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		4F6DC6D52DE649585F42037E058B31B8 /* Headers */ = {
 			isa = PBXHeadersBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
@@ -354,22 +459,40 @@
 		};
 		6759AE90C019F7CEBF481E7A84F59338 /* Pods-MKRRadioManager_Example */ = {
 			isa = PBXNativeTarget;
-			buildConfigurationList = 1C9F7F0512B0877A1227F1391CD06CD3 /* Build configuration list for PBXNativeTarget "Pods-MKRRadioManager_Example" */;
+			buildConfigurationList = 7C454F2C355999E617D5756B27DC12EF /* Build configuration list for PBXNativeTarget "Pods-MKRRadioManager_Example" */;
 			buildPhases = (
-				0F2F44B29AD5B2130E7BC2399425DB70 /* Headers */,
-				1843AD4E8D8E547A2505354BB804C1BD /* Sources */,
-				FB826535F6E02B249006B3E6F91B09A4 /* Frameworks */,
+				4F6DC6D52DE649585F42037E058B31B8 /* Headers */,
+				31517AD759525E64D350314F44B4C928 /* Sources */,
+				97BC7FB7C1DD423A7C036023061DE62D /* Frameworks */,
 			);
 			buildRules = (
 			);
 			dependencies = (
-				2DB87B839F0A6F6DFF8137F788B0109B /* PBXTargetDependency */,
+				6F1B30365FC6727EE106CE090AD5294D /* PBXTargetDependency */,
+				736EFB1A2E53B24A0EAA0BD127448F09 /* PBXTargetDependency */,
 			);
 			name = "Pods-MKRRadioManager_Example";
 			productName = "Pods-MKRRadioManager_Example";
 			productReference = 89DEBFD829CC1938B0AF05C60C1D8866 /* libPods-MKRRadioManager_Example.a */;
 			productType = "com.apple.product-type.library.static";
 		};
+		7990945DFD111A8558696D76E99A29E9 /* YYCategory */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 21DC84FC064EEC7F47A84D79D3234623 /* Build configuration list for PBXNativeTarget "YYCategory" */;
+			buildPhases = (
+				1344BD8A8F8730E1125D7A8E672612A6 /* Headers */,
+				EB37979B873502FEF1DD2343DC4C6C37 /* Sources */,
+				223707480B66B7549AE606E1BECCAEE4 /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = YYCategory;
+			productName = YYCategory;
+			productReference = 818229EDFCEFE91B8410D7C9CC7E6A5D /* libYYCategory.a */;
+			productType = "com.apple.product-type.library.static";
+		};
 		CF3F8B31835CCF08A537713F7C6A6259 /* Pods-MKRRadioManager_Tests */ = {
 			isa = PBXNativeTarget;
 			buildConfigurationList = 305F5EDDFAF0A376BA729DEA936C7C85 /* Build configuration list for PBXNativeTarget "Pods-MKRRadioManager_Tests" */;
@@ -405,23 +528,24 @@
 				en,
 			);
 			mainGroup = CF1408CF629C7361332E53B88F7BD30C;
-			productRefGroup = 453202A8AB343905F5CA15A3A58D87D7 /* Products */;
+			productRefGroup = 2F032914C3687421B76515CEB0D2C9FA /* Products */;
 			projectDirPath = "";
 			projectRoot = "";
 			targets = (
 				2F2655D0037091849641E648A2FB6766 /* MKRRadioManager */,
 				6759AE90C019F7CEBF481E7A84F59338 /* Pods-MKRRadioManager_Example */,
 				CF3F8B31835CCF08A537713F7C6A6259 /* Pods-MKRRadioManager_Tests */,
+				7990945DFD111A8558696D76E99A29E9 /* YYCategory */,
 			);
 		};
 /* End PBXProject section */
 
 /* Begin PBXSourcesBuildPhase section */
-		1843AD4E8D8E547A2505354BB804C1BD /* Sources */ = {
+		31517AD759525E64D350314F44B4C928 /* Sources */ = {
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				92E01E9BD33817D849DE6280771C9BA9 /* Pods-MKRRadioManager_Example-dummy.m in Sources */,
+				5566C60F36F8B80C6C538E18255122F9 /* Pods-MKRRadioManager_Example-dummy.m in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -450,14 +574,35 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
+		EB37979B873502FEF1DD2343DC4C6C37 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				0AA49A5335B50B43438DEB82BE67541E /* NSObject+AssociatedObject.m in Sources */,
+				C562666F135D70BB71B1FA6E29A3CE93 /* NSString+ChineseLength.m in Sources */,
+				F68891B2313721B68D8C1242F3CBEB8D /* NSString+Utilities.m in Sources */,
+				F18C3CAEDFCCBD698EA8FED4833BF494 /* UIDevice+Helpers.m in Sources */,
+				E3A4C63CA515E5EECA716CD1CCC6DF39 /* UIImage+Stretch.m in Sources */,
+				8BB2EF656E3E4F6C17E3FE5DDE644157 /* UIView+Sizes.m in Sources */,
+				05EDC679BECE92D3A77A8E321D79DF90 /* UIView+ViewController.m in Sources */,
+				D79FEF30F6ADBDEB39C96BCC063BC306 /* YYCategory-dummy.m in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 /* End PBXSourcesBuildPhase section */
 
 /* Begin PBXTargetDependency section */
-		2DB87B839F0A6F6DFF8137F788B0109B /* PBXTargetDependency */ = {
+		6F1B30365FC6727EE106CE090AD5294D /* PBXTargetDependency */ = {
 			isa = PBXTargetDependency;
 			name = MKRRadioManager;
 			target = 2F2655D0037091849641E648A2FB6766 /* MKRRadioManager */;
-			targetProxy = 50EC0A7C3BC17F4B790E7D59E6230F1B /* PBXContainerItemProxy */;
+			targetProxy = F9EBB43CCE6CE6F113D45B5DAB5B0B16 /* PBXContainerItemProxy */;
+		};
+		736EFB1A2E53B24A0EAA0BD127448F09 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			name = YYCategory;
+			target = 7990945DFD111A8558696D76E99A29E9 /* YYCategory */;
+			targetProxy = 3B2D1716598745AE18F6C801070B5273 /* PBXContainerItemProxy */;
 		};
 		DB80EA902F3E6D49AC7B92B2735E8B03 /* PBXTargetDependency */ = {
 			isa = PBXTargetDependency;
@@ -468,6 +613,28 @@
 /* End PBXTargetDependency section */
 
 /* Begin XCBuildConfiguration section */
+		1C00E5E6DA1F159C1420EE8E52359EE6 /* Release */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = 5D5404FE9A358D93FBCF9F384ABC2AEA /* Pods-MKRRadioManager_Example.release.xcconfig */;
+			buildSettings = {
+				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
+				CODE_SIGN_IDENTITY = "iPhone Developer";
+				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
+				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
+				IPHONEOS_DEPLOYMENT_TARGET = 9.2;
+				MACH_O_TYPE = staticlib;
+				OTHER_LDFLAGS = "";
+				OTHER_LIBTOOLFLAGS = "";
+				PODS_ROOT = "$(SRCROOT)";
+				PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
+				SDKROOT = iphoneos;
+				SKIP_INSTALL = YES;
+				TARGETED_DEVICE_FAMILY = "1,2";
+				VALIDATE_PRODUCT = YES;
+			};
+			name = Release;
+		};
 		39769C66FA8FB99B807E0CA1F02C1A39 /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
@@ -532,27 +699,53 @@
 			};
 			name = Debug;
 		};
-		4C80B20BB4CE5586B38C88166AC919BC /* Debug */ = {
+		41ACE190FBAB61F75609ED1354D92E06 /* Debug */ = {
 			isa = XCBuildConfiguration;
-			baseConfigurationReference = C4A35313AD83C01E57EA1815AEA6BC5C /* Pods-MKRRadioManager_Example.debug.xcconfig */;
+			baseConfigurationReference = 63966E2C3A0A25AD69A7722141C15905 /* YYCategory.xcconfig */;
 			buildSettings = {
-				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
 				CODE_SIGN_IDENTITY = "iPhone Developer";
 				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
 				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				IPHONEOS_DEPLOYMENT_TARGET = 9.2;
-				MACH_O_TYPE = staticlib;
+				GCC_PREFIX_HEADER = "Target Support Files/YYCategory/YYCategory-prefix.pch";
+				IPHONEOS_DEPLOYMENT_TARGET = 5.0;
 				OTHER_LDFLAGS = "";
 				OTHER_LIBTOOLFLAGS = "";
-				PODS_ROOT = "$(SRCROOT)";
-				PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
+				PRIVATE_HEADERS_FOLDER_PATH = "";
+				PRODUCT_MODULE_NAME = YYCategory;
+				PRODUCT_NAME = YYCategory;
+				PUBLIC_HEADERS_FOLDER_PATH = "";
 				SDKROOT = iphoneos;
 				SKIP_INSTALL = YES;
+				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
 				TARGETED_DEVICE_FAMILY = "1,2";
 			};
 			name = Debug;
 		};
+		51D7A7D6A0336E7A1C4F5DD2C0A823B0 /* Release */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = 63966E2C3A0A25AD69A7722141C15905 /* YYCategory.xcconfig */;
+			buildSettings = {
+				CODE_SIGN_IDENTITY = "iPhone Developer";
+				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
+				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
+				GCC_PREFIX_HEADER = "Target Support Files/YYCategory/YYCategory-prefix.pch";
+				IPHONEOS_DEPLOYMENT_TARGET = 5.0;
+				OTHER_LDFLAGS = "";
+				OTHER_LIBTOOLFLAGS = "";
+				PRIVATE_HEADERS_FOLDER_PATH = "";
+				PRODUCT_MODULE_NAME = YYCategory;
+				PRODUCT_NAME = YYCategory;
+				PUBLIC_HEADERS_FOLDER_PATH = "";
+				SDKROOT = iphoneos;
+				SKIP_INSTALL = YES;
+				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
+				TARGETED_DEVICE_FAMILY = "1,2";
+				VALIDATE_PRODUCT = YES;
+			};
+			name = Release;
+		};
 		912315DE0C97AAA5B9F8EE73E2B78D35 /* Release */ = {
 			isa = XCBuildConfiguration;
 			baseConfigurationReference = A26B77F91ECB3BD7C7FA66128982C3FF /* MKRRadioManager.xcconfig */;
@@ -643,9 +836,9 @@
 			};
 			name = Release;
 		};
-		D48515CB3181CA1C81F36015F9F170C2 /* Release */ = {
+		D62DDC443FC24E1EF84880609A6E555D /* Debug */ = {
 			isa = XCBuildConfiguration;
-			baseConfigurationReference = 5D5404FE9A358D93FBCF9F384ABC2AEA /* Pods-MKRRadioManager_Example.release.xcconfig */;
+			baseConfigurationReference = C4A35313AD83C01E57EA1815AEA6BC5C /* Pods-MKRRadioManager_Example.debug.xcconfig */;
 			buildSettings = {
 				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
 				CODE_SIGN_IDENTITY = "iPhone Developer";
@@ -661,9 +854,8 @@
 				SDKROOT = iphoneos;
 				SKIP_INSTALL = YES;
 				TARGETED_DEVICE_FAMILY = "1,2";
-				VALIDATE_PRODUCT = YES;
 			};
-			name = Release;
+			name = Debug;
 		};
 		E451DDFF283F5C88C57D029CBC41594E /* Release */ = {
 			isa = XCBuildConfiguration;
@@ -728,11 +920,11 @@
 /* End XCBuildConfiguration section */
 
 /* Begin XCConfigurationList section */
-		1C9F7F0512B0877A1227F1391CD06CD3 /* Build configuration list for PBXNativeTarget "Pods-MKRRadioManager_Example" */ = {
+		21DC84FC064EEC7F47A84D79D3234623 /* Build configuration list for PBXNativeTarget "YYCategory" */ = {
 			isa = XCConfigurationList;
 			buildConfigurations = (
-				4C80B20BB4CE5586B38C88166AC919BC /* Debug */,
-				D48515CB3181CA1C81F36015F9F170C2 /* Release */,
+				41ACE190FBAB61F75609ED1354D92E06 /* Debug */,
+				51D7A7D6A0336E7A1C4F5DD2C0A823B0 /* Release */,
 			);
 			defaultConfigurationIsVisible = 0;
 			defaultConfigurationName = Release;
@@ -764,6 +956,15 @@
 			defaultConfigurationIsVisible = 0;
 			defaultConfigurationName = Release;
 		};
+		7C454F2C355999E617D5756B27DC12EF /* Build configuration list for PBXNativeTarget "Pods-MKRRadioManager_Example" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				D62DDC443FC24E1EF84880609A6E555D /* Debug */,
+				1C00E5E6DA1F159C1420EE8E52359EE6 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
 /* End XCConfigurationList section */
 	};
 	rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */;

+ 25 - 0
Example/Pods/Target Support Files/Pods-MKRRadioManager_Example/Pods-MKRRadioManager_Example-acknowledgements.markdown

@@ -23,4 +23,29 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 THE SOFTWARE.
 
+
+## YYCategory
+
+The MIT License (MIT)
+
+Copyright (c) 2016 jinying0218
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
 Generated by CocoaPods - https://cocoapods.org

+ 31 - 0
Example/Pods/Target Support Files/Pods-MKRRadioManager_Example/Pods-MKRRadioManager_Example-acknowledgements.plist

@@ -43,6 +43,37 @@ THE SOFTWARE.
 		</dict>
 		<dict>
 			<key>FooterText</key>
+			<string>The MIT License (MIT)
+
+Copyright (c) 2016 jinying0218
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+</string>
+			<key>License</key>
+			<string>MIT</string>
+			<key>Title</key>
+			<string>YYCategory</string>
+			<key>Type</key>
+			<string>PSGroupSpecifier</string>
+		</dict>
+		<dict>
+			<key>FooterText</key>
 			<string>Generated by CocoaPods - https://cocoapods.org</string>
 			<key>Title</key>
 			<string></string>

+ 4 - 4
Example/Pods/Target Support Files/Pods-MKRRadioManager_Example/Pods-MKRRadioManager_Example.debug.xcconfig

@@ -1,9 +1,9 @@
 FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/../../libs"
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MKRRadioManager"
-LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/MKRRadioManager"
-OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/MKRRadioManager" -iframework "${PODS_ROOT}/../../libs"
-OTHER_LDFLAGS = $(inherited) -ObjC -l"MKRRadioManager" -framework "libAS-Control" -framework "libUPNP" -framework "openssl"
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MKRRadioManager" "${PODS_ROOT}/Headers/Public/YYCategory"
+LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/MKRRadioManager" "${PODS_CONFIGURATION_BUILD_DIR}/YYCategory"
+OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/MKRRadioManager" -isystem "${PODS_ROOT}/Headers/Public/YYCategory" -iframework "${PODS_ROOT}/../../libs"
+OTHER_LDFLAGS = $(inherited) -ObjC -l"MKRRadioManager" -l"YYCategory" -framework "libAS-Control" -framework "libUPNP" -framework "openssl"
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_PODFILE_DIR_PATH = ${SRCROOT}/.

+ 4 - 4
Example/Pods/Target Support Files/Pods-MKRRadioManager_Example/Pods-MKRRadioManager_Example.release.xcconfig

@@ -1,9 +1,9 @@
 FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/../../libs"
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MKRRadioManager"
-LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/MKRRadioManager"
-OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/MKRRadioManager" -iframework "${PODS_ROOT}/../../libs"
-OTHER_LDFLAGS = $(inherited) -ObjC -l"MKRRadioManager" -framework "libAS-Control" -framework "libUPNP" -framework "openssl"
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MKRRadioManager" "${PODS_ROOT}/Headers/Public/YYCategory"
+LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/MKRRadioManager" "${PODS_CONFIGURATION_BUILD_DIR}/YYCategory"
+OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/MKRRadioManager" -isystem "${PODS_ROOT}/Headers/Public/YYCategory" -iframework "${PODS_ROOT}/../../libs"
+OTHER_LDFLAGS = $(inherited) -ObjC -l"MKRRadioManager" -l"YYCategory" -framework "libAS-Control" -framework "libUPNP" -framework "openssl"
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_PODFILE_DIR_PATH = ${SRCROOT}/.

+ 1 - 1
Example/Pods/Target Support Files/Pods-MKRRadioManager_Tests/Pods-MKRRadioManager_Tests.debug.xcconfig

@@ -1,6 +1,6 @@
 FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/../../libs"
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MKRRadioManager"
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MKRRadioManager" "${PODS_ROOT}/Headers/Public/YYCategory"
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_PODFILE_DIR_PATH = ${SRCROOT}/.

+ 1 - 1
Example/Pods/Target Support Files/Pods-MKRRadioManager_Tests/Pods-MKRRadioManager_Tests.release.xcconfig

@@ -1,6 +1,6 @@
 FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/../../libs"
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MKRRadioManager"
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MKRRadioManager" "${PODS_ROOT}/Headers/Public/YYCategory"
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_PODFILE_DIR_PATH = ${SRCROOT}/.

+ 5 - 0
Example/Pods/Target Support Files/YYCategory/YYCategory-dummy.m

@@ -0,0 +1,5 @@
+#import <Foundation/Foundation.h>
+@interface PodsDummy_YYCategory : NSObject
+@end
+@implementation PodsDummy_YYCategory
+@end

+ 12 - 0
Example/Pods/Target Support Files/YYCategory/YYCategory-prefix.pch

@@ -0,0 +1,12 @@
+#ifdef __OBJC__
+#import <UIKit/UIKit.h>
+#else
+#ifndef FOUNDATION_EXPORT
+#if defined(__cplusplus)
+#define FOUNDATION_EXPORT extern "C"
+#else
+#define FOUNDATION_EXPORT extern
+#endif
+#endif
+#endif
+

+ 9 - 0
Example/Pods/Target Support Files/YYCategory/YYCategory.xcconfig

@@ -0,0 +1,9 @@
+CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/YYCategory
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/YYCategory" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/YYCategory"
+PODS_BUILD_DIR = ${BUILD_DIR}
+PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_ROOT = ${SRCROOT}
+PODS_TARGET_SRCROOT = ${PODS_ROOT}/YYCategory
+PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
+SKIP_INSTALL = YES

+ 21 - 0
Example/Pods/YYCategory/LICENSE

@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016 jinying0218
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

+ 2 - 0
Example/Pods/YYCategory/README.md

@@ -0,0 +1,2 @@
+# YYCategory
+常用类别库

+ 14 - 0
Example/Pods/YYCategory/YYCategoryDemo/YYCategory/NSObject+AssociatedObject.h

@@ -0,0 +1,14 @@
+//
+//  NSObject+AssociatedObject.h
+//  
+//
+//  Created by Stephen Liu on 12-11-26.
+//  Copyright (c) 2012年 Stephen. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface NSObject (AssociatedObject)
+- (id)objectWithAssociatedKey:(void *)key;
+- (void)setObject:(id)object forAssociatedKey:(void *)key retained:(BOOL)retain;
+@end

+ 22 - 0
Example/Pods/YYCategory/YYCategoryDemo/YYCategory/NSObject+AssociatedObject.m

@@ -0,0 +1,22 @@
+//
+//  NSObject+AssociatedObject.m
+//  
+//
+//  Created by Stephen Liu on 12-11-26.
+//  Copyright (c) 2012年 Stephen. All rights reserved.
+//
+
+#import "NSObject+AssociatedObject.h"
+#import <objc/runtime.h>
+
+@implementation NSObject (AssociatedObject)
+- (id)objectWithAssociatedKey:(void *)key
+{
+    return objc_getAssociatedObject(self, key);
+}
+
+- (void)setObject:(id)object forAssociatedKey:(void *)key retained:(BOOL)retain
+{
+    objc_setAssociatedObject(self, key, object, retain?OBJC_ASSOCIATION_RETAIN_NONATOMIC:OBJC_ASSOCIATION_ASSIGN);
+}
+@end

+ 40 - 0
Example/Pods/YYCategory/YYCategoryDemo/YYCategory/NSString+ChineseLength.h

@@ -0,0 +1,40 @@
+//
+//  NSString+ChineseLength.h
+//  WoodpeckerDoctors
+//
+//  Created by Ariel on 15/10/27.
+//  Copyright © 2015年 Ariel. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface NSString (ChineseLength)
+/**
+ *  判断是否为汉字
+ *
+ *  @param string
+ *
+ *  @return BoolValue
+ */
++ (BOOL)isChinesecharacter:(NSString *)string;
+
+
+/**
+ *  计算汉字的个数
+ *
+ *  @param string
+ *
+ *  @return NSInteger
+ */
++ (NSInteger)chineseCountOfString:(NSString *)string;
+
+
+/**
+ *  计算字母的个数
+ *
+ *  @param string
+ *
+ *  @return NSInteger
+ */
++ (NSInteger)characterCountOfString:(NSString *)string;
+@end

+ 53 - 0
Example/Pods/YYCategory/YYCategoryDemo/YYCategory/NSString+ChineseLength.m

@@ -0,0 +1,53 @@
+//
+//  NSString+ChineseLength.m
+//  WoodpeckerDoctors
+//
+//  Created by Ariel on 15/10/27.
+//  Copyright © 2015年 Ariel. All rights reserved.
+//
+
+#import "NSString+ChineseLength.h"
+
+@implementation NSString (ChineseLength)
++ (BOOL)isChinesecharacter:(NSString *)string{
+    if (string.length == 0) {
+        return NO;
+    }
+    unichar c = [string characterAtIndex:0];
+    if (c >=0x4E00 && c <=0x9FA5)     {
+        return YES;//汉字
+    }else {
+        return NO;//英文
+    }
+}
+
++ (NSInteger)chineseCountOfString:(NSString *)string{
+    int ChineseCount = 0;
+    if (string.length == 0) {
+        return 0;
+    }
+    for (int i = 0; i<string.length; i++) {
+        unichar c = [string characterAtIndex:i];
+        if (c >=0x4E00 && c <=0x9FA5){
+            ChineseCount++ ;//汉字
+        }
+    }
+    return ChineseCount;
+}
+
++ (NSInteger)characterCountOfString:(NSString *)string{
+    int characterCount = 0;
+    if (string.length == 0) {
+        return 0;
+    }
+    for (int i = 0; i<string.length; i++) {
+        unichar c = [string characterAtIndex:i];
+        if (c >=0x4E00 && c <=0x9FA5){
+        }else {
+            characterCount++;//英文
+        }
+    }
+    return characterCount;
+}
+
+@end

+ 16 - 0
Example/Pods/YYCategory/YYCategoryDemo/YYCategory/NSString+Utilities.h

@@ -0,0 +1,16 @@
+//
+//  NSString+Utilities.h
+//  GHLibrary
+//
+//  Created by Stephen Liu on 13-10-17.
+//  Copyright (c) 2013年 Stephen Liu. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface NSString (Utilities)
++ (NSString *)UUIDString;
+- (NSComparisonResult)versionCompare:(NSString *)string;
+- (NSString *)urlEncodeString;
+- (NSString *)urlDecodeString;
+@end

+ 55 - 0
Example/Pods/YYCategory/YYCategoryDemo/YYCategory/NSString+Utilities.m

@@ -0,0 +1,55 @@
+//
+//  NSString+Utilities.m
+//  GHLibrary
+//
+//  Created by Stephen Liu on 13-10-17.
+//  Copyright (c) 2013年 Stephen Liu. All rights reserved.
+//
+
+#import "NSString+Utilities.h"
+
+@implementation NSString (Utilities)
++ (NSString *)UUIDString
+{
+	CFUUIDRef u = CFUUIDCreate(kCFAllocatorDefault);
+	CFStringRef s = CFUUIDCreateString(kCFAllocatorDefault, u);
+	CFRelease(u);
+	return (NSString *)CFBridgingRelease(s);
+}
+
+- (NSComparisonResult)versionCompare:(NSString *)string
+{
+    if (!string) {
+        return NSOrderedDescending;
+    }
+    __block NSComparisonResult result = NSOrderedSame;
+    NSArray *selfComponents = [self componentsSeparatedByString:@"."];
+    NSArray *stringComponents = [string componentsSeparatedByString:@"."];
+    [selfComponents enumerateObjectsUsingBlock:^(NSString *obj, NSUInteger idx, BOOL *stop) {
+        NSString *local = @"";
+        if (stringComponents.count > idx) {
+            local = [stringComponents objectAtIndex:idx];
+        }
+        if (obj.integerValue < local.integerValue) {
+            result = NSOrderedAscending;
+            *stop = YES;
+        } else if(obj.integerValue > local.integerValue) {
+            result = NSOrderedDescending;
+            *stop = YES;
+        }
+    }];
+    return result;
+}
+
+- (NSString *)urlEncodeString
+{
+	NSString *result = (__bridge_transfer NSString*)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (__bridge CFStringRef)self, NULL, CFSTR(":/?#[]@!$&’()*+,;="), kCFStringEncodingUTF8);
+	return result;
+}
+
+- (NSString *)urlDecodeString
+{
+	NSString *result = (__bridge_transfer NSString*)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(kCFAllocatorDefault, (__bridge CFStringRef)self, CFSTR(""), kCFStringEncodingUTF8);
+	return result;
+}
+@end

+ 33 - 0
Example/Pods/YYCategory/YYCategoryDemo/YYCategory/UIDevice+Helpers.h

@@ -0,0 +1,33 @@
+//
+//  UIDevice+Helpers.h
+//  
+//
+//  Created by Kai on 9/1/11.
+//  Copyright 2011 Stephen. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface UIDevice (Helpers)
+
+- (BOOL)isRetinaDisplay;
+- (BOOL)is4InchRetinaDisplay;
+- (int)systemMainVersion;
+
+- (NSString *)carrierName;
+- (NSString *)mobileCountryCode;
+- (NSString *)mobileNetworkCode;
+- (NSString *)macAddress;
+
+- (BOOL)canMakeCall;
+- (BOOL)canSendText;
+
++ (NSString *)platform;
++ (NSString *)getReturnPlat:(NSString *)platform;
++ (NSString *)getStandardPlat;
+
+- (BOOL)hasLedLight;
+- (BOOL)isLedLightOn;
+- (void)turnLedLightTo:(BOOL)on;
+
+@end

+ 251 - 0
Example/Pods/YYCategory/YYCategoryDemo/YYCategory/UIDevice+Helpers.m

@@ -0,0 +1,251 @@
+//
+//  UIDevice+Helpers.m
+//  
+//
+//  Created by Kai on 9/1/11.
+//  Copyright 2011 Stephen. All rights reserved.
+//
+
+#import "UIDevice+Helpers.h"
+#import <MessageUI/MessageUI.h>
+#import <CoreTelephony/CTTelephonyNetworkInfo.h>
+#import <CoreTelephony/CTCarrier.h>
+#import <AVFoundation/AVFoundation.h>
+
+#include <sys/types.h>
+#include <sys/sysctl.h>
+#include <sys/socket.h>
+#include <net/if.h>
+#include <net/if_dl.h>
+
+
+@implementation UIDevice (Helpers)
+
+- (BOOL)isRetinaDisplay
+{
+    if ([[UIScreen mainScreen] scale] > 1.0)
+    {
+        return YES;
+    }
+	
+	return NO;
+}
+
+- (BOOL)is4InchRetinaDisplay
+{
+    if ([[UIScreen mainScreen] applicationFrame].size.height > 480)
+    {
+        return YES;
+    }
+    
+    return NO;
+}
+
+static int systemMainVersion = 0;
+- (int)systemMainVersion
+{
+	if (systemMainVersion > 0) {
+		return systemMainVersion;
+	}
+	systemMainVersion = [self systemVersion].intValue;
+	return systemMainVersion;
+}
+
+- (NSString *)carrierName
+{
+    // Carrier name.
+    CTTelephonyNetworkInfo *telephonyNetworkInfo = [[CTTelephonyNetworkInfo alloc] init];
+	NSString *carrierName = [[telephonyNetworkInfo subscriberCellularProvider] carrierName];
+    return carrierName;
+}
+
+- (NSString *)mobileCountryCode
+{
+    CTTelephonyNetworkInfo *telephonyNetworkInfo = [[CTTelephonyNetworkInfo alloc] init];
+	return [[telephonyNetworkInfo subscriberCellularProvider] mobileCountryCode];
+}
+- (NSString *)mobileNetworkCode
+{
+    CTTelephonyNetworkInfo *telephonyNetworkInfo = [[CTTelephonyNetworkInfo alloc] init];
+	return [[telephonyNetworkInfo subscriberCellularProvider] mobileNetworkCode];
+}
+
+- (BOOL)canMakeCall
+{
+    static BOOL checked = NO;
+    static BOOL result = NO;
+    
+    if (checked == NO)
+    {
+        result = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"tel://"]];
+        checked = YES;
+    }
+    
+    return result;
+}
+
+- (BOOL)canSendText
+{
+    static BOOL checked = NO;
+    static BOOL result = NO;
+    
+    if (checked == NO)
+    {
+        result = [MFMessageComposeViewController canSendText];
+        checked = YES;
+    }
+    
+    return result;
+}
+
+
++ (NSString *) platform
+{
+	size_t size;
+	sysctlbyname("hw.machine", NULL, &size, NULL, 0);
+	char *machine = malloc(size);
+	sysctlbyname("hw.machine", machine, &size, NULL, 0);
+	NSString *platform = [NSString stringWithCString:machine encoding:NSUTF8StringEncoding];
+	free(machine);
+	return platform;
+}
+
++ (NSString *)getReturnPlat:(NSString *)platform
+{
+	if ([platform isEqualToString:@"iPod1,1"]) {
+		return @"ipodtouch1";
+	}
+	if ([platform isEqualToString:@"iPod2,1"]) {
+		return @"ipodtouch2";
+	}
+	if ([platform isEqualToString:@"iPod3,1"]) {
+		return @"ipodtouch3";
+	}
+	if ([platform isEqualToString:@"iPod4,1"]) {
+		return @"ipodtouch4";
+	}
+	if ([platform isEqualToString:@"iPhone1,1"]) {
+		return @"iphone1";
+	}
+	if ([platform isEqualToString:@"iPhone1,2"]) {
+		return @"iphone3g";
+	}
+	if ([platform isEqualToString:@"iPhone2,1"]) {
+		return @"iphone3gs";
+	}
+	if ([platform isEqualToString:@"iPhone3,1"]) {
+		return @"iphone4";
+	}
+	if ([platform isEqualToString:@"iPad1,1"]) {
+		return @"ipad1";
+	}
+	if ([platform isEqualToString:@"iPad2,1"]) {
+		return @"ipad2";
+	} else {
+		return @"iphone";
+	}
+}
+
++ (NSString *) getStandardPlat
+{
+//	return [self getReturnPlat:[self platform]];
+	return [self platform];
+}
+
+
+// 
+// source: http://mobiledevelopertips.com/device/determine-mac-address.html
+// 
+- (NSString *)macAddress
+{
+    int                 mgmtInfoBase[6];
+    char                *msgBuffer = NULL;
+    size_t              length;
+    unsigned char       macAddress[6];
+    struct if_msghdr    *interfaceMsgStruct;
+    struct sockaddr_dl  *socketStruct;
+    NSString            *errorFlag = NULL;
+    
+    // Setup the management Information Base (mib)
+    mgmtInfoBase[0] = CTL_NET;        // Request network subsystem
+    mgmtInfoBase[1] = AF_ROUTE;       // Routing table info
+    mgmtInfoBase[2] = 0;
+    mgmtInfoBase[3] = AF_LINK;        // Request link layer information
+    mgmtInfoBase[4] = NET_RT_IFLIST;  // Request all configured interfaces
+    
+    // With all configured interfaces requested, get handle index
+    if ((mgmtInfoBase[5] = if_nametoindex("en0")) == 0)
+        errorFlag = @"if_nametoindex failure";
+    else
+    {
+        // Get the size of the data available (store in len)
+        if (sysctl(mgmtInfoBase, 6, NULL, &length, NULL, 0) < 0)
+            errorFlag = @"sysctl mgmtInfoBase failure";
+        else
+        {
+            // Alloc memory based on above call
+            if ((msgBuffer = malloc(length)) == NULL)
+                errorFlag = @"buffer allocation failure";
+            else
+            {
+                // Get system information, store in buffer
+                if (sysctl(mgmtInfoBase, 6, msgBuffer, &length, NULL, 0) < 0)
+                    errorFlag = @"sysctl msgBuffer failure";
+            }
+        }
+    }
+    
+    // Befor going any further...
+    if (errorFlag != NULL)
+    {
+        //NSLog(@"Error: %@", errorFlag);
+        free(msgBuffer);
+        return nil;
+    }
+    
+    // Map msgbuffer to interface message structure
+    interfaceMsgStruct = (struct if_msghdr *) msgBuffer;
+    
+    // Map to link-level socket structure
+    socketStruct = (struct sockaddr_dl *) (interfaceMsgStruct + 1);
+    
+    // Copy link layer address data in socket structure to an array
+    memcpy(&macAddress, socketStruct->sdl_data + socketStruct->sdl_nlen, 6);
+    
+    // Read from char array into a string object, into traditional Mac address format
+    NSString *macAddressString = [NSString stringWithFormat:@"%02X:%02X:%02X:%02X:%02X:%02X",
+                                  macAddress[0], macAddress[1], macAddress[2],
+                                  macAddress[3], macAddress[4], macAddress[5]];
+    //NSLog(@"Mac Address: %@", macAddressString);
+    
+    // Release the buffer memory
+    free(msgBuffer);
+    
+    return macAddressString;
+}
+
+- (BOOL)hasLedLight
+{
+    AVCaptureDevice * device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
+    return [device hasTorch];
+}
+- (BOOL)isLedLightOn
+{
+    AVCaptureDevice * device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
+    if ([device hasTorch])
+    {
+        return [device torchMode] == AVCaptureTorchModeOn;
+    }
+    return NO;
+}
+- (void)turnLedLightTo:(BOOL)on
+{
+    AVCaptureDevice * device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
+    if ([device hasTorch])
+    {
+        [device lockForConfiguration:nil];
+        [device setTorchMode:on?AVCaptureTorchModeOn:AVCaptureTorchModeOff];
+        [device unlockForConfiguration];
+    }
+}
+@end

+ 51 - 0
Example/Pods/YYCategory/YYCategoryDemo/YYCategory/UIImage+Stretch.h

@@ -0,0 +1,51 @@
+//
+//  UIImage+Stretch.h
+//  
+//
+//  Created by Stephen Liu on 11/17/11.
+//  Copyright (c) 2011 Stephen. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface UIImage (Stretch)
+
+- (UIImage *)stretchableImageByCenter;
+- (UIImage *)stretchableImageByHeightCenter;
+- (UIImage *)stretchableImageByWidthCenter;
+
+/**
+ The right horizontal end-cap size. (read-only)
+ 
+ End caps specify the portion of an image that should not be resized when an image is stretched. This technique is used
+ to implement buttons and other resizable image-based interface elements. When a button with end caps is resized, the
+ resizing occurs only in the middle of the button, in the region between the end caps. The end caps themselves keep
+ their original size and appearance.
+ 
+ This property specifies the size of the left end cap. The middle (stretchable) portion is assumed to be `1` pixel wide.
+ 
+ By default, this property is set to `0`, which indicates that the image does not use end caps and the entire image is
+ subject to stretching. To create a new image with a nonzero value for this property, use the
+ `stretchableImageWithLeftCapWidth:topCapHeight:` method.
+ */
+@property (nonatomic, readonly) NSInteger rightCapWidth;
+
+/**
+ The bottom vertical end-cap size. (read-only)
+ 
+ End caps specify the portion of an image that should not be resized when an image is stretched. This technique is used
+ to implement buttons and other resizable image-based interface elements. When a button with end caps is resized, the
+ resizing occurs only in the middle of the button, in the region between the end caps. The end caps themselves keep
+ their original size and appearance.
+ 
+ This property specifies the size of the top end cap. The middle (stretchable) portion is assumed to be `1` pixel wide.
+ 
+ By default, this property is set to `0`, which indicates that the image does not use end caps and the entire image is
+ subject to stretching. To create a new image with a nonzero value for this property, use the
+ `stretchableImageWithLeftCapWidth:topCapHeight:` method.
+ */
+@property (nonatomic, readonly) NSInteger bottomCapHeight;
+
++ (UIImage *)imageWithColor:(UIColor *)color;
++ (UIImage *)imageWithColor:(UIColor *)color radiu:(CGFloat)radiu;
+@end

+ 92 - 0
Example/Pods/YYCategory/YYCategoryDemo/YYCategory/UIImage+Stretch.m

@@ -0,0 +1,92 @@
+//
+//  UIImage+Stretch.m
+//  
+//
+//  Created by Stephen Liu on 11/17/11.
+//  Copyright (c) 2011 Stephen. All rights reserved.
+//
+
+#import "UIImage+Stretch.h"
+
+@implementation UIImage (Stretch)
+
+- (UIImage *)stretchableImageByCenter
+{
+	CGFloat leftCapWidth = floorf(self.size.width / 2);
+	if (leftCapWidth == self.size.width / 2)
+	{
+		leftCapWidth--;
+	}
+	
+	CGFloat topCapHeight = floorf(self.size.height / 2);
+	if (topCapHeight == self.size.height / 2)
+	{
+		topCapHeight--;
+	}
+	
+	return [self stretchableImageWithLeftCapWidth:leftCapWidth 
+									 topCapHeight:topCapHeight];
+}
+
+- (UIImage *)stretchableImageByHeightCenter
+{
+	CGFloat topCapHeight = floorf(self.size.height / 2);
+	if (topCapHeight == self.size.height / 2)
+	{
+		topCapHeight--;
+	}
+	
+	return [self stretchableImageWithLeftCapWidth:0
+									 topCapHeight:topCapHeight];
+}
+
+- (UIImage *)stretchableImageByWidthCenter
+{
+	CGFloat leftCapWidth = floorf(self.size.width / 2);
+	if (leftCapWidth == self.size.width / 2)
+	{
+		leftCapWidth--;
+	}
+	
+	return [self stretchableImageWithLeftCapWidth:leftCapWidth 
+									 topCapHeight:0];
+}
+
+- (NSInteger)rightCapWidth
+{
+	return (NSInteger)self.size.width - (self.leftCapWidth + 1);
+}
+
+
+- (NSInteger)bottomCapHeight
+{
+	return (NSInteger)self.size.height - (self.topCapHeight + 1);
+}
+
++ (UIImage *)imageWithColor:(UIColor *)color
+{
+    CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
+    UIGraphicsBeginImageContext(rect.size);
+    CGContextRef context = UIGraphicsGetCurrentContext();
+    CGContextSetFillColorWithColor(context, [color CGColor]);
+    CGContextFillRect(context, rect);
+    
+    UIImage *theImage = [UIGraphicsGetImageFromCurrentImageContext() stretchableImageByCenter];
+    UIGraphicsEndImageContext();
+    return theImage;
+}
+
++ (UIImage *)imageWithColor:(UIColor *)color radiu:(CGFloat)radiu
+{
+    CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f + radiu*2, 1.0f + radiu*2);
+    UIGraphicsBeginImageContext(rect.size);
+    CGContextRef context = UIGraphicsGetCurrentContext();
+    CGContextAddPath(context, [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:radiu].CGPath);
+    CGContextSetFillColorWithColor(context, color.CGColor);
+    CGContextDrawPath(context, kCGPathFill);
+    
+    UIImage *theImage = [UIGraphicsGetImageFromCurrentImageContext() stretchableImageByCenter];
+    UIGraphicsEndImageContext();
+    return theImage;
+}
+@end

+ 140 - 0
Example/Pods/YYCategory/YYCategoryDemo/YYCategory/UIView+Sizes.h

@@ -0,0 +1,140 @@
+//
+// Copyright 2009-2010 Facebook
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#import <UIKit/UIKitDefines.h>
+
+@interface UIView (Sizes)
+
+/**
+ * Shortcut for frame.origin.x.
+ *
+ * Sets frame.origin.x = left
+ */
+@property (nonatomic) CGFloat left;
+
+/**
+ * Shortcut for frame.origin.y
+ *
+ * Sets frame.origin.y = top
+ */
+@property (nonatomic) CGFloat top;
+
+/**
+ * Shortcut for frame.origin.x + frame.size.width
+ *
+ * Sets frame.origin.x = right - frame.size.width
+ */
+@property (nonatomic) CGFloat right;
+
+/**
+ * Shortcut for frame.origin.y + frame.size.height
+ *
+ * Sets frame.origin.y = bottom - frame.size.height
+ */
+@property (nonatomic) CGFloat bottom;
+
+/**
+ * Shortcut for frame.size.width
+ *
+ * Sets frame.size.width = width
+ */
+@property (nonatomic) CGFloat width;
+
+/**
+ * Shortcut for frame.size.height
+ *
+ * Sets frame.size.height = height
+ */
+@property (nonatomic) CGFloat height;
+
+/**
+ * Shortcut for center.x
+ *
+ * Sets center.x = centerX
+ */
+@property (nonatomic) CGFloat centerX;
+
+/**
+ * Shortcut for center.y
+ *
+ * Sets center.y = centerY
+ */
+@property (nonatomic) CGFloat centerY;
+
+/**
+ * Return the x coordinate on the screen.
+ */
+@property (nonatomic, readonly) CGFloat ttScreenX;
+
+/**
+ * Return the y coordinate on the screen.
+ */
+@property (nonatomic, readonly) CGFloat ttScreenY;
+
+/**
+ * Return the x coordinate on the screen, taking into account scroll views.
+ */
+@property (nonatomic, readonly) CGFloat screenViewX;
+
+/**
+ * Return the y coordinate on the screen, taking into account scroll views.
+ */
+@property (nonatomic, readonly) CGFloat screenViewY;
+
+/**
+ * Return the view frame on the screen, taking into account scroll views.
+ */
+@property (nonatomic, readonly) CGRect screenFrame;
+
+/**
+ * Shortcut for frame.origin
+ */
+@property (nonatomic) CGPoint origin;
+
+/**
+ * Shortcut for frame.size
+ */
+@property (nonatomic) CGSize size;
+
+/**
+ * Finds the first descendant view (including this view) that is a member of a particular class.
+ */
+- (UIView*)descendantOrSelfWithClass:(Class)cls;
+
+/**
+ * Finds the first ancestor view (including this view) that is a member of a particular class.
+ */
+- (UIView*)ancestorOrSelfWithClass:(Class)cls;
+
+/**
+ * Removes all subviews.
+ */
+- (void)removeAllSubviews;
+
+/**
+ * The view controller whose view contains this view.
+ */
+- (UIViewController*)viewController;
+
+- (UIImage *)imageFromView;
+
+- (CGRect)convertFrameToWindow:(UIWindow *)window;
+
+- (CGRect)expandedFrame:(CGRect)originalFrame withVerticalOffset:(CGFloat)offset;
+- (CGRect)expandedFrame:(CGRect)originalFrame withHorizontalOffset:(CGFloat)offset;
+- (CGRect)expandedFrame:(CGRect)originalFrame withOffset:(CGFloat)offset;
+
+@end

+ 326 - 0
Example/Pods/YYCategory/YYCategoryDemo/YYCategory/UIView+Sizes.m

@@ -0,0 +1,326 @@
+//
+// Copyright 2009-2010 Facebook
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////
+#import <QuartzCore/QuartzCore.h>
+@implementation UIView (Sizes)
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+- (CGFloat)left {
+	return self.frame.origin.x;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+- (void)setLeft:(CGFloat)x {
+	CGRect frame = self.frame;
+	frame.origin.x = x;
+	self.frame = frame;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+- (CGFloat)top {
+	return self.frame.origin.y;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+- (void)setTop:(CGFloat)y {
+	CGRect frame = self.frame;
+	frame.origin.y = y;
+	self.frame = frame;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+- (CGFloat)right {
+	return self.frame.origin.x + self.frame.size.width;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+- (void)setRight:(CGFloat)right {
+	CGRect frame = self.frame;
+	frame.origin.x = right - frame.size.width;
+	self.frame = frame;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+- (CGFloat)bottom {
+	return self.frame.origin.y + self.frame.size.height;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+- (void)setBottom:(CGFloat)bottom {
+	CGRect frame = self.frame;
+	frame.origin.y = bottom - frame.size.height;
+	self.frame = frame;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+- (CGFloat)centerX {
+	return self.center.x;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+- (void)setCenterX:(CGFloat)centerX {
+	self.center = CGPointMake(centerX, self.center.y);
+}
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+- (CGFloat)centerY {
+	return self.center.y;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+- (void)setCenterY:(CGFloat)centerY {
+	self.center = CGPointMake(self.center.x, centerY);
+}
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+- (CGFloat)width {
+	return self.frame.size.width;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+- (void)setWidth:(CGFloat)width {
+	CGRect frame = self.frame;
+	frame.size.width = width;
+	self.frame = frame;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+- (CGFloat)height {
+	return self.frame.size.height;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+- (void)setHeight:(CGFloat)height {
+	CGRect frame = self.frame;
+	frame.size.height = height;
+	self.frame = frame;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+- (CGFloat)ttScreenX {
+	CGFloat x = 0;
+	for (UIView* view = self; view; view = view.superview) {
+		x += [view left];
+	}
+	return x;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+- (CGFloat)ttScreenY {
+	CGFloat y = 0;
+	for (UIView* view = self; view; view = view.superview) {
+		y += [view top];
+	}
+	return y;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+- (CGFloat)screenViewX {
+	CGFloat x = 0;
+	for (UIView* view = self; view; view = view.superview) {
+		x += [view left];
+		
+		if ([view isKindOfClass:[UIScrollView class]]) {
+			UIScrollView* scrollView = (UIScrollView*)view;
+			x -= scrollView.contentOffset.x;
+		}
+	}
+	
+	return x;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+- (CGFloat)screenViewY {
+	CGFloat y = 0;
+	for (UIView* view = self; view; view = view.superview) {
+		y += [view top];
+		
+		if ([view isKindOfClass:[UIScrollView class]]) {
+			UIScrollView* scrollView = (UIScrollView*)view;
+			y -= scrollView.contentOffset.y;
+		}
+	}
+	return y;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+- (CGRect)screenFrame {
+	return CGRectMake([self screenViewX], [self screenViewY], [self width], [self height]);
+}
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+- (CGPoint)origin {
+	return self.frame.origin;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+- (void)setOrigin:(CGPoint)origin {
+	CGRect frame = self.frame;
+	frame.origin = origin;
+	self.frame = frame;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+- (CGSize)size {
+	return self.frame.size;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+- (void)setSize:(CGSize)size {
+	CGRect frame = self.frame;
+	frame.size = size;
+	self.frame = frame;
+}
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+- (UIView*)descendantOrSelfWithClass:(Class)cls {
+	if ([self isKindOfClass:cls])
+		return self;
+	
+	for (UIView* child in self.subviews) {
+		UIView* it = [child descendantOrSelfWithClass:cls];
+		if (it)
+			return it;
+	}
+	
+	return nil;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+- (UIView*)ancestorOrSelfWithClass:(Class)cls {
+	if ([self isKindOfClass:cls]) {
+		return self;
+	} else if (self.superview) {
+		return [self.superview ancestorOrSelfWithClass:cls];
+	} else {
+		return nil;
+	}
+}
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+- (void)removeAllSubviews {
+	while (self.subviews.count) {
+		UIView* child = self.subviews.lastObject;
+		[child removeFromSuperview];
+	}
+}
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+- (CGPoint)offsetFromView:(UIView*)otherView {
+	CGFloat x = 0, y = 0;
+	for (UIView* view = self; view && view != otherView; view = view.superview) {
+		x += [view left];
+		y += [view top];
+	}
+	return CGPointMake(x, y);
+}
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+- (UIViewController*)viewController {
+	for (UIView* next = [self superview]; next; next = next.superview) {
+		UIResponder* nextResponder = [next nextResponder];
+		if ([nextResponder isKindOfClass:[UIViewController class]]) {
+			return (UIViewController*)nextResponder;
+		}
+	}
+	return nil;
+}
+
+- (UIImage *)imageFromView
+{
+    CGSize size = self.size;
+    UIGraphicsBeginImageContextWithOptions(size, NO, [UIScreen mainScreen].scale);
+    [self.layer renderInContext:UIGraphicsGetCurrentContext()];
+    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
+    image = [UIImage imageWithCGImage:image.CGImage scale:[UIScreen mainScreen].scale orientation:UIImageOrientationUp];
+    UIGraphicsEndImageContext();
+    return image;
+}
+
+- (CGRect)convertFrameToWindow:(UIWindow *)window
+{
+    
+    UIView *superView = [self superview];;
+    
+    CGRect frameInSuperView = [self frame];
+    while (superView && (superView != window)){
+        if ([superView superview])
+        {
+            frameInSuperView = [superView.superview convertRect:frameInSuperView fromView:superView];
+        }
+        superView = [superView superview];
+    }
+    return frameInSuperView;
+}
+
+- (CGRect)expandedFrame:(CGRect)originalFrame withOffset:(CGFloat)offset
+{
+    if (CGRectIsEmpty(originalFrame))
+    {
+        return CGRectZero;
+    }
+    return CGRectInset(originalFrame, -offset, -offset);
+}
+
+- (CGRect)expandedFrame:(CGRect)originalFrame withVerticalOffset:(CGFloat)offset
+{
+    if (CGRectIsEmpty(originalFrame))
+    {
+        return CGRectZero;
+    }
+    return CGRectInset(originalFrame, 0, -offset);
+}
+
+- (CGRect)expandedFrame:(CGRect)originalFrame withHorizontalOffset:(CGFloat)offset
+{
+    if (CGRectIsEmpty(originalFrame))
+    {
+        return CGRectZero;
+    }
+    return CGRectInset(originalFrame, -offset, 0);
+}
+
+@end

+ 18 - 0
Example/Pods/YYCategory/YYCategoryDemo/YYCategory/UIView+ViewController.h

@@ -0,0 +1,18 @@
+//
+//  UIView+ViewController.h
+//
+//  Created by 吴 天 on 12-10-26.
+//
+
+#import <UIKit/UIKit.h>
+
+/**
+ source:http://stackoverflow.com/questions/1340434/get-to-uiviewcontroller-from-uiview-on-iphone
+ "IMHO, this is a design flaw. The view should not need to be aware of the controller."
+ But "one reason you need to allow the UIView to be aware of its UIViewController is when you have custom UIView subclasses that need to push a modal view/dialog."
+ */
+
+@interface UIView (ViewController)
+- (UIViewController *)firstAvailableUIViewController;
+- (id)traverseResponderChainForUIViewController;
+@end

+ 33 - 0
Example/Pods/YYCategory/YYCategoryDemo/YYCategory/UIView+ViewController.m

@@ -0,0 +1,33 @@
+//
+//  UIView+ViewController.m
+//
+//  Created by 吴 天 on 12-10-26.
+//
+
+#import "UIView+ViewController.h"
+
+@implementation UIView (ViewController)
+
+- (UIViewController *)firstAvailableUIViewController
+{
+    // convenience function for casting and to "mask" the recursive function
+    return (UIViewController *)[self traverseResponderChainForUIViewController];
+}
+
+- (id)traverseResponderChainForUIViewController
+{
+    id nextResponder = [self nextResponder];
+    if ([nextResponder isKindOfClass:[UIViewController class]])
+    {
+        return nextResponder;
+    }
+    else if ([nextResponder isKindOfClass:[UIView class]])
+    {
+        return [nextResponder traverseResponderChainForUIViewController];
+    }
+    else
+    {
+        return nil;
+    }
+}
+@end

+ 1 - 0
MKRRadioManager/Classes/MKRRadioManager/MKRAVPlayer/MKRAVPlayer.m

@@ -59,6 +59,7 @@ NSURL * MKRUrlWithString(NSString *string){
     if ([string rangeOfString:@"/"].location == 0) {//本地资源
         url = [NSURL fileURLWithPath:string];
     }else{
+        string = [string stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
         url = [NSURL URLWithString:string];
     }
     return url;