浏览代码

版本升级维护

yyqxiaoyin 6 年之前
父节点
当前提交
f9c07cfc36
共有 100 个文件被更改,包括 4621 次插入51 次删除
  1. 1 0
      Example/.idea/.name
  2. 2 0
      Example/.idea/Example.iml
  3. 4 0
      Example/.idea/encodings.xml
  4. 11 0
      Example/.idea/misc.xml
  5. 8 0
      Example/.idea/modules.xml
  6. 11 0
      Example/.idea/runConfigurations/MKRRadioManager_Example.xml
  7. 6 0
      Example/.idea/vcs.xml
  8. 649 0
      Example/.idea/workspace.xml
  9. 4 0
      Example/.idea/xcode.xml
  10. 65 36
      Example/MKRRadioManager.xcodeproj/project.pbxproj
  11. 1 1
      Example/MKRRadioManager.xcodeproj/xcshareddata/xcschemes/MKRRadioManager-Example.xcscheme
  12. 10 0
      Example/MKRRadioManager.xcworkspace/contents.xcworkspacedata
  13. 8 0
      Example/MKRRadioManager.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
  14. 27 4
      Example/MKRRadioManager/Base.lproj/Main.storyboard
  15. 15 0
      Example/MKRRadioManager/MKRPlayControlViewController.h
  16. 118 0
      Example/MKRRadioManager/MKRPlayControlViewController.m
  17. 2 0
      Example/MKRRadioManager/MKRRadioManager-Prefix.pch
  18. 1 1
      Example/MKRRadioManager/MKRViewController.h
  19. 49 5
      Example/MKRRadioManager/MKRViewController.m
  20. 4 4
      Example/Podfile
  21. 23 0
      Example/Podfile.lock
  22. 1 0
      Example/Pods/Headers/Private/MKRRadioManager/MKRAVPlayer.h
  23. 1 0
      Example/Pods/Headers/Private/MKRRadioManager/MKRBTRadioControlManager.h
  24. 1 0
      Example/Pods/Headers/Private/MKRRadioManager/MKRM3UListModel.h
  25. 1 0
      Example/Pods/Headers/Private/MKRRadioManager/MKRPlayControlProtocol.h
  26. 1 0
      Example/Pods/Headers/Private/MKRRadioManager/MKRPlayResourceStatus.h
  27. 1 0
      Example/Pods/Headers/Private/MKRRadioManager/MKRPlayResourceUpdateProtocol.h
  28. 1 0
      Example/Pods/Headers/Private/MKRRadioManager/MKRRadioControlMaster.h
  29. 1 0
      Example/Pods/Headers/Private/MKRRadioManager/MKRRadioPlayControlManager.h
  30. 1 0
      Example/Pods/Headers/Private/MKRRadioManager/MKRRadioResorce.h
  31. 1 0
      Example/Pods/Headers/Private/MKRRadioManager/MKRRadioResourceProtocol.h
  32. 1 0
      Example/Pods/Headers/Private/MKRRadioManager/MKRUPnPDevice.h
  33. 1 0
      Example/Pods/Headers/Private/MKRRadioManager/MKRWIFIDeviceManager.h
  34. 1 0
      Example/Pods/Headers/Private/MKRRadioManager/MKRWIFIRadioControlManager.h
  35. 1 0
      Example/Pods/Headers/Private/MKRRadioManager/NSString+MKRRadioManagerAdd.h
  36. 1 0
      Example/Pods/Headers/Private/MKRRadioManager/UIDevice+MKRRadioManagerAdd.h
  37. 1 0
      Example/Pods/Headers/Public/MKRRadioManager/MKRAVPlayer.h
  38. 1 0
      Example/Pods/Headers/Public/MKRRadioManager/MKRBTRadioControlManager.h
  39. 1 0
      Example/Pods/Headers/Public/MKRRadioManager/MKRM3UListModel.h
  40. 1 0
      Example/Pods/Headers/Public/MKRRadioManager/MKRPlayControlProtocol.h
  41. 1 0
      Example/Pods/Headers/Public/MKRRadioManager/MKRPlayResourceStatus.h
  42. 1 0
      Example/Pods/Headers/Public/MKRRadioManager/MKRPlayResourceUpdateProtocol.h
  43. 1 0
      Example/Pods/Headers/Public/MKRRadioManager/MKRRadioControlMaster.h
  44. 1 0
      Example/Pods/Headers/Public/MKRRadioManager/MKRRadioPlayControlManager.h
  45. 1 0
      Example/Pods/Headers/Public/MKRRadioManager/MKRRadioResorce.h
  46. 1 0
      Example/Pods/Headers/Public/MKRRadioManager/MKRRadioResourceProtocol.h
  47. 1 0
      Example/Pods/Headers/Public/MKRRadioManager/MKRUPnPDevice.h
  48. 1 0
      Example/Pods/Headers/Public/MKRRadioManager/MKRWIFIDeviceManager.h
  49. 1 0
      Example/Pods/Headers/Public/MKRRadioManager/MKRWIFIRadioControlManager.h
  50. 1 0
      Example/Pods/Headers/Public/MKRRadioManager/NSString+MKRRadioManagerAdd.h
  51. 1 0
      Example/Pods/Headers/Public/MKRRadioManager/UIDevice+MKRRadioManagerAdd.h
  52. 27 0
      Example/Pods/Local Podspecs/MKRRadioManager.podspec.json
  53. 23 0
      Example/Pods/Manifest.lock
  54. 909 0
      Example/Pods/Pods.xcodeproj/project.pbxproj
  55. 26 0
      Example/Pods/Target Support Files/MKRRadioManager/MKRRadioManager-Info.plist
  56. 5 0
      Example/Pods/Target Support Files/MKRRadioManager/MKRRadioManager-dummy.m
  57. 12 0
      Example/Pods/Target Support Files/MKRRadioManager/MKRRadioManager-prefix.pch
  58. 16 0
      Example/Pods/Target Support Files/MKRRadioManager/MKRRadioManager-umbrella.h
  59. 6 0
      Example/Pods/Target Support Files/MKRRadioManager/MKRRadioManager.modulemap
  60. 10 0
      Example/Pods/Target Support Files/MKRRadioManager/MKRRadioManager.xcconfig
  61. 26 0
      Example/Pods/Target Support Files/Pods-MKRRadioManager_Example/Pods-MKRRadioManager_Example-Info.plist
  62. 49 0
      Example/Pods/Target Support Files/Pods-MKRRadioManager_Example/Pods-MKRRadioManager_Example-acknowledgements.markdown
  63. 87 0
      Example/Pods/Target Support Files/Pods-MKRRadioManager_Example/Pods-MKRRadioManager_Example-acknowledgements.plist
  64. 5 0
      Example/Pods/Target Support Files/Pods-MKRRadioManager_Example/Pods-MKRRadioManager_Example-dummy.m
  65. 163 0
      Example/Pods/Target Support Files/Pods-MKRRadioManager_Example/Pods-MKRRadioManager_Example-frameworks.sh
  66. 16 0
      Example/Pods/Target Support Files/Pods-MKRRadioManager_Example/Pods-MKRRadioManager_Example-umbrella.h
  67. 10 0
      Example/Pods/Target Support Files/Pods-MKRRadioManager_Example/Pods-MKRRadioManager_Example.debug.xcconfig
  68. 6 0
      Example/Pods/Target Support Files/Pods-MKRRadioManager_Example/Pods-MKRRadioManager_Example.modulemap
  69. 10 0
      Example/Pods/Target Support Files/Pods-MKRRadioManager_Example/Pods-MKRRadioManager_Example.release.xcconfig
  70. 26 0
      Example/Pods/Target Support Files/Pods-MKRRadioManager_Tests/Pods-MKRRadioManager_Tests-Info.plist
  71. 3 0
      Example/Pods/Target Support Files/Pods-MKRRadioManager_Tests/Pods-MKRRadioManager_Tests-acknowledgements.markdown
  72. 29 0
      Example/Pods/Target Support Files/Pods-MKRRadioManager_Tests/Pods-MKRRadioManager_Tests-acknowledgements.plist
  73. 5 0
      Example/Pods/Target Support Files/Pods-MKRRadioManager_Tests/Pods-MKRRadioManager_Tests-dummy.m
  74. 16 0
      Example/Pods/Target Support Files/Pods-MKRRadioManager_Tests/Pods-MKRRadioManager_Tests-umbrella.h
  75. 8 0
      Example/Pods/Target Support Files/Pods-MKRRadioManager_Tests/Pods-MKRRadioManager_Tests.debug.xcconfig
  76. 6 0
      Example/Pods/Target Support Files/Pods-MKRRadioManager_Tests/Pods-MKRRadioManager_Tests.modulemap
  77. 8 0
      Example/Pods/Target Support Files/Pods-MKRRadioManager_Tests/Pods-MKRRadioManager_Tests.release.xcconfig
  78. 9 0
      Example/Pods/Target Support Files/libAS-Control/libAS-Control.xcconfig
  79. 19 0
      Example/Pods/libAS-Control/LICENSE
  80. 29 0
      Example/Pods/libAS-Control/README.md
  81. 304 0
      Example/Pods/libAS-Control/libAS-Control/Classes/libAS-Control.framework/Headers/ASControlTools.h
  82. 二进制
      Example/Pods/libAS-Control/libAS-Control/Classes/libAS-Control.framework/Info.plist
  83. 二进制
      Example/Pods/libAS-Control/libAS-Control/Classes/libAS-Control.framework/_CodeSignature/CodeDirectory
  84. 二进制
      Example/Pods/libAS-Control/libAS-Control/Classes/libAS-Control.framework/_CodeSignature/CodeRequirements
  85. 二进制
      Example/Pods/libAS-Control/libAS-Control/Classes/libAS-Control.framework/_CodeSignature/CodeRequirements-1
  86. 117 0
      Example/Pods/libAS-Control/libAS-Control/Classes/libAS-Control.framework/_CodeSignature/CodeResources
  87. 0 0
      Example/Pods/libAS-Control/libAS-Control/Classes/libAS-Control.framework/_CodeSignature/CodeSignature
  88. 二进制
      Example/Pods/libAS-Control/libAS-Control/Classes/libAS-Control.framework/libAS-Control
  89. 131 0
      Example/Pods/libAS-Control/libAS-Control/Classes/libUPNP.framework/Headers/FreeList.h
  90. 289 0
      Example/Pods/libAS-Control/libAS-Control/Classes/libUPNP.framework/Headers/LinkedList.h
  91. 536 0
      Example/Pods/libAS-Control/libAS-Control/Classes/libUPNP.framework/Headers/ThreadPool.h
  92. 161 0
      Example/Pods/libAS-Control/libAS-Control/Classes/libUPNP.framework/Headers/TimerThread.h
  93. 122 0
      Example/Pods/libAS-Control/libAS-Control/Classes/libUPNP.framework/Headers/UpnpGlobal.h
  94. 67 0
      Example/Pods/libAS-Control/libAS-Control/Classes/libUPNP.framework/Headers/UpnpInet.h
  95. 11 0
      Example/Pods/libAS-Control/libAS-Control/Classes/libUPNP.framework/Headers/UpnpIntTypes.h
  96. 20 0
      Example/Pods/libAS-Control/libAS-Control/Classes/libUPNP.framework/Headers/UpnpStdInt.h
  97. 171 0
      Example/Pods/libAS-Control/libAS-Control/Classes/libUPNP.framework/Headers/UpnpString.h
  98. 10 0
      Example/Pods/libAS-Control/libAS-Control/Classes/libUPNP.framework/Headers/UpnpUniStd.h
  99. 69 0
      Example/Pods/libAS-Control/libAS-Control/Classes/libUPNP.framework/Headers/VirtualDir.h
  100. 0 0
      Example/Pods/libAS-Control/libAS-Control/Classes/libUPNP.framework/Headers/autoconfig.h

+ 1 - 0
Example/.idea/.name

@@ -0,0 +1 @@
+MKRRadioManager

+ 2 - 0
Example/.idea/Example.iml

@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module classpath="AppCode" type="CIDR_MODULE" version="4" />

+ 4 - 0
Example/.idea/encodings.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Encoding" addBOMForNewFiles="with NO BOM" />
+</project>

+ 11 - 0
Example/.idea/misc.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="CidrRootsConfiguration">
+    <libraryRoots>
+      <file path="$PROJECT_DIR$/Pods" />
+    </libraryRoots>
+  </component>
+  <component name="JavaScriptSettings">
+    <option name="languageLevel" value="ES6" />
+  </component>
+</project>

+ 8 - 0
Example/.idea/modules.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/Example.iml" filepath="$PROJECT_DIR$/.idea/Example.iml" />
+    </modules>
+  </component>
+</project>

+ 11 - 0
Example/.idea/runConfigurations/MKRRadioManager_Example.xml

@@ -0,0 +1,11 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="MKRRadioManager-Example" type="AppleRunConfiguration" factoryName="Application" PASS_PARENT_ENVS_2="true" PROJECT_NAME="MKRRadioManager" TARGET_NAME="MKRRadioManager_Example" CONFIG_NAME="Debug" SCHEME_NAME="MKRRadioManager-Example" IS_LOCATION_SIMULATION_ALLOWED="true" RUN_TARGET_PROJECT_NAME="MKRRadioManager" RUN_TARGET_NAME="MKRRadioManager_Example" MAKE_ACTIVE="TRUE" SHOULD_DEBUG_EXTENSIONS="false">
+    <EXTENSION ID="org.jetbrains.appcode.reveal.RevealRunConfigurationExtension">
+      <REVEAL_SETTINGS autoInject="false" autoInstall="true" askToEnableAutoInstall="true" />
+    </EXTENSION>
+    <embedded_app_extension_list />
+    <method v="2">
+      <option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
+    </method>
+  </configuration>
+</component>

+ 6 - 0
Example/.idea/vcs.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$/.." vcs="Git" />
+  </component>
+</project>

+ 649 - 0
Example/.idea/workspace.xml

@@ -0,0 +1,649 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="BuildServerSettings">
+    <option name="LOGIN" value="" />
+    <option name="SERVER_URL" value="http://buildserver" />
+    <option name="REMEMBER_ME" value="true" />
+    <option name="USE_IDEA_PROXY_SETTINGS" value="true" />
+    <option name="INSPECTIONS_BUILD_TYPE_IDS" />
+    <option name="DUPLICATES_BUILD_TYPE_IDS" />
+    <option name="COVERAGE_SETTINGS" />
+    <option name="TEST_STATUS_ENABLED" value="true" />
+    <option name="TEST_STATUS_SHOW_SUCCESSFUL" value="false" />
+    <option name="POSTPONE_SUITABLE_CONFIGURATIONS_SEARCH" value="false" />
+    <option name="ARTIFACTS_BUILD_TYPE_IDS" />
+    <option name="PERFORM_COMMIT_IF_SUCCESSFUL" value="true" />
+    <option name="PERFORM_COMMIT_IF_NO_NEW_FAILED_TESTS" value="false" />
+    <option name="REQUEST_CONFIRMATON" value="false" />
+    <option name="PRE_TESTED_COMMIT" value="true" />
+    <option name="FILTER_BY_STATUS" value="false" />
+    <option name="FILTER_MARKED_AS_FIXED" value="false" />
+    <option name="SHOW_CLOSE_PROMPT" value="true" />
+    <option name="TOOL_WINDOW_SELECTED_CONTENT_INDEX" value="0" />
+    <option name="FILTER_BY_CURRENT_PROJECT" value="true" />
+  </component>
+  <component name="ChangeListManager">
+    <list default="true" id="478e4dbc-5c21-445b-b829-c88da49b6e36" name="Default Changelist" comment="">
+      <change afterPath="$PROJECT_DIR$/MKRRadioManager/MKRPlayControlViewController.h" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/MKRRadioManager/MKRPlayControlViewController.m" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/../MKRRadioManager/Classes/Category/NSString+MKRRadioManagerAdd.h" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/../MKRRadioManager/Classes/Category/NSString+MKRRadioManagerAdd.m" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/../MKRRadioManager/Classes/Category/UIDevice+MKRRadioManagerAdd.h" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/../MKRRadioManager/Classes/Category/UIDevice+MKRRadioManagerAdd.m" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/../MKRRadioManager/Classes/MKRWIFIDeviceManager/MKRM3UListModel.h" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/../MKRRadioManager/Classes/MKRWIFIDeviceManager/MKRM3UListModel.m" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/../MKRRadioManager/Classes/MKRWIFIDeviceManager/MKRUPnPDevice.h" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/../MKRRadioManager/Classes/MKRWIFIDeviceManager/MKRUPnPDevice.m" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/MKRRadioManager.xcodeproj/project.pbxproj" beforeDir="false" afterPath="$PROJECT_DIR$/MKRRadioManager.xcodeproj/project.pbxproj" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/MKRRadioManager.xcodeproj/xcshareddata/xcschemes/MKRRadioManager-Example.xcscheme" beforeDir="false" afterPath="$PROJECT_DIR$/MKRRadioManager.xcodeproj/xcshareddata/xcschemes/MKRRadioManager-Example.xcscheme" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/MKRRadioManager/Base.lproj/Main.storyboard" beforeDir="false" afterPath="$PROJECT_DIR$/MKRRadioManager/Base.lproj/Main.storyboard" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/MKRRadioManager/MKRRadioManager-Prefix.pch" beforeDir="false" afterPath="$PROJECT_DIR$/MKRRadioManager/MKRRadioManager-Prefix.pch" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/MKRRadioManager/MKRViewController.h" beforeDir="false" afterPath="$PROJECT_DIR$/MKRRadioManager/MKRViewController.h" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/MKRRadioManager/MKRViewController.m" beforeDir="false" afterPath="$PROJECT_DIR$/MKRRadioManager/MKRViewController.m" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/Podfile" beforeDir="false" afterPath="$PROJECT_DIR$/Podfile" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../MKRRadioManager.podspec" beforeDir="false" afterPath="$PROJECT_DIR$/../MKRRadioManager.podspec" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../MKRRadioManager/Classes/ReplaceMe.m" beforeDir="false" />
+    </list>
+    <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
+    <option name="SHOW_DIALOG" value="false" />
+    <option name="HIGHLIGHT_CONFLICTS" value="true" />
+    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
+    <option name="LAST_RESOLUTION" value="IGNORE" />
+  </component>
+  <component name="ExecutionTargetManager" SELECTED_TARGET="iphoneos_9f30ade79109aa6ac577baf15ba6eb086e6fc8f5" />
+  <component name="FileEditorManager">
+    <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/../MKRRadioManager/Classes/MKRWIFIDeviceManager/MKRWIFIDeviceManager.m">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="9288">
+              <caret line="387" column="20" selection-start-line="387" selection-start-column="20" selection-end-line="387" selection-end-column="20" />
+              <folding>
+                <element signature="e#93#125#0" expanded="true" />
+              </folding>
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/../MKRRadioManager/Classes/MKRRadioResorce.h">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="1320">
+              <caret line="55" column="4" selection-start-line="55" selection-start-column="4" selection-end-line="55" selection-end-column="4" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/../MKRRadioManager/Classes/MKRWIFIDeviceManager/MKRM3UListModel.h">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="288">
+              <caret line="12" column="77" selection-start-line="12" selection-start-column="77" selection-end-line="12" selection-end-column="77" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/../MKRRadioManager/Classes/MKRWifiRadioManager/MKRWIFIRadioControlManager.m">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="720">
+              <caret line="30" selection-start-line="30" selection-end-line="30" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/../MKRRadioManager/Classes/MKRWifiRadioManager/MKRWIFIRadioControlManager.h">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="336">
+              <caret line="14" column="28" selection-start-line="14" selection-start-column="28" selection-end-line="14" selection-end-column="28" />
+              <folding>
+                <element signature="e#151#184#0" expanded="true" />
+              </folding>
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/../MKRRadioManager/Classes/MKRWIFIDeviceManager/MKRM3UListModel.m">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="1896">
+              <caret line="79" column="16" selection-start-line="79" selection-start-column="16" selection-end-line="79" selection-end-column="16" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/../MKRRadioManager/Classes/Headers/MKRRadioResourceProtocol.h">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="1176">
+              <caret line="49" selection-start-line="49" selection-end-line="49" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/../MKRRadioManager/Classes/Headers/MKRPlayControlProtocol.h">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="1200">
+              <caret line="50" column="37" selection-start-line="50" selection-start-column="37" selection-end-line="50" selection-end-column="37" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/../MKRRadioManager/Classes/MKRBTRadioManager/MKRBTRadioControlManager.m">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="242">
+              <caret line="54" column="10" selection-start-line="54" selection-start-column="10" selection-end-line="54" selection-end-column="10" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/../MKRRadioManager/Classes/MKRWIFIDeviceManager/MKRWIFIDeviceManager.h">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="432">
+              <caret line="18" column="39" selection-start-line="18" selection-start-column="39" selection-end-line="18" selection-end-column="39" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+    </leaf>
+  </component>
+  <component name="FileTemplateManagerImpl">
+    <option name="RECENT_TEMPLATES">
+      <list>
+        <option value="package.json" />
+      </list>
+    </option>
+  </component>
+  <component name="FindInProjectRecents">
+    <findStrings>
+      <find>搜索到设备</find>
+      <find>ReceivedPlayCallBack</find>
+      <find>playSongWithChannelNO</find>
+      <find>seek</find>
+    </findStrings>
+  </component>
+  <component name="Git.Settings">
+    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/.." />
+  </component>
+  <component name="IdeDocumentHistory">
+    <option name="CHANGED_PATHS">
+      <list>
+        <option value="$PROJECT_DIR$/Podfile" />
+        <option value="$PROJECT_DIR$/../MKRRadioManager.podspec" />
+        <option value="$PROJECT_DIR$/MKRRadioManager/MKRRadioManager/package.json" />
+        <option value="$PROJECT_DIR$/MKRRadioManager/MKRRadioManager/MKRRadioManager.h" />
+        <option value="$PROJECT_DIR$/../MKRRadioManager/Classes/MKRRadioControlMaster.m" />
+        <option value="$PROJECT_DIR$/MKRRadioManager/PrefixHeader.pch" />
+        <option value="$PROJECT_DIR$/MKRRadioManager/MKRViewController.h" />
+        <option value="$PROJECT_DIR$/Pods/Headers/Public/MKRRadioManager/MKRRadioManager.h" />
+        <option value="$PROJECT_DIR$/Pods/Headers/Public/MKRRadioManager/UIDevice+MKRRadioManagerAdd.h" />
+        <option value="$PROJECT_DIR$/Pods/Headers/Private/MKRRadioManager/UIDevice+MKRRadioManagerAdd.h" />
+        <option value="$PROJECT_DIR$/../MKRRadioManager/Classes/Category/UIDevice+MKRRadioManagerAdd.m" />
+        <option value="$PROJECT_DIR$/../MKRRadioManager/Classes/MKRRadioManager.h" />
+        <option value="$PROJECT_DIR$/MKRRadioManager/MKRViewController.m" />
+        <option value="$PROJECT_DIR$/../MKRRadioManager/Classes/Category/UIDevice+MKRRadioManagerAdd.h" />
+        <option value="$PROJECT_DIR$/MKRRadioManager/MKRPlayControlViewController.m" />
+        <option value="$PROJECT_DIR$/Pods/Headers/Public/MKRRadioManager/MKRUPnPDevice.h" />
+        <option value="$PROJECT_DIR$/../MKRRadioManager/Classes/MKRWifiRadioManager/MKRWIFIRadioControlManager.h" />
+        <option value="$PROJECT_DIR$/../MKRRadioManager/Classes/Category/NSString+MKRRadioManagerAdd.m" />
+        <option value="$PROJECT_DIR$/../MKRRadioManager/Classes/Category/NSString+MKRRadioManagerAdd.h" />
+        <option value="$PROJECT_DIR$/../MKRRadioResourceProtocol.h" />
+        <option value="$PROJECT_DIR$/../MKRRadioManager/Classes/MKRWIFIDeviceManager/MKRM3UListModel.h" />
+        <option value="$PROJECT_DIR$/../MKRRadioManager/Classes/Headers/MKRRadioResourceProtocol.h" />
+        <option value="$PROJECT_DIR$/../MKRRadioManager/Classes/MKRWIFIDeviceManager/MKRM3UListModel.m" />
+        <option value="$PROJECT_DIR$/../MKRRadioManager/Classes/MKRRadioResorce.h" />
+        <option value="$PROJECT_DIR$/../MKRRadioManager/Classes/MKRWIFIDeviceManager/MKRWIFIDeviceManager.h" />
+        <option value="$PROJECT_DIR$/../MKRRadioManager/Classes/MKRWIFIDeviceManager/MKRWIFIDeviceManager.m" />
+        <option value="$PROJECT_DIR$/../MKRRadioManager/Classes/Headers/MKRPlayControlProtocol.h" />
+        <option value="$PROJECT_DIR$/../MKRRadioManager/Classes/MKRWifiRadioManager/MKRWIFIRadioControlManager.m" />
+        <option value="$PROJECT_DIR$/../MKRRadioManager/Classes/MKRBTRadioManager/MKRBTRadioControlManager.m" />
+      </list>
+    </option>
+  </component>
+  <component name="OCFindUsagesOptions" text="true" ivars="false" properties="true" derivedClasses="false" />
+  <component name="ProjectFrameBounds">
+    <option name="x" value="67" />
+    <option name="y" value="488" />
+    <option name="width" value="1920" />
+    <option name="height" value="980" />
+  </component>
+  <component name="ProjectLevelVcsManager" settingsEditedManually="true" />
+  <component name="ProjectView">
+    <navigator proportions="" version="1">
+      <foldersAlwaysOnTop value="true" />
+    </navigator>
+    <panes>
+      <pane id="ProjectPane">
+        <subPane>
+          <expand>
+            <path>
+              <item name="" type="efc3779f:XcodeRootNode" />
+              <item name="MKRRadioManager" type="1d218c8b:XcodeProjectNode" />
+            </path>
+            <path>
+              <item name="" type="efc3779f:XcodeRootNode" />
+              <item name="MKRRadioManager" type="1d218c8b:XcodeProjectNode" />
+              <item name="Example for MKRRadioManager" type="fcab9f18:XcodeViewNode" />
+            </path>
+            <path>
+              <item name="" type="efc3779f:XcodeRootNode" />
+              <item name="MKRRadioManager" type="1d218c8b:XcodeProjectNode" />
+              <item name="Example for MKRRadioManager" type="fcab9f18:XcodeViewNode" />
+              <item name="Supporting Files" type="fcab9f18:XcodeViewNode" />
+            </path>
+            <path>
+              <item name="" type="efc3779f:XcodeRootNode" />
+              <item name="MKRRadioManager" type="1d218c8b:XcodeProjectNode" />
+              <item name="Pods" type="fcab9f18:XcodeViewNode" />
+            </path>
+            <path>
+              <item name="" type="efc3779f:XcodeRootNode" />
+              <item name="MKRRadioManager" type="1d218c8b:XcodeProjectNode" />
+              <item name="Podspec Metadata" type="fcab9f18:XcodeViewNode" />
+            </path>
+            <path>
+              <item name="" type="efc3779f:XcodeRootNode" />
+              <item name="Pods" type="1d218c8b:XcodeProjectNode" />
+            </path>
+          </expand>
+          <select />
+        </subPane>
+      </pane>
+      <pane id="Scope" />
+      <pane id="Cidr.FilesView" />
+    </panes>
+  </component>
+  <component name="PropertiesComponent">
+    <property name="OBJC.PRESERVED_TARGET_SELECTION" value="MKRAVPlayer" />
+    <property name="WebServerToolWindowFactoryState" value="false" />
+    <property name="com.intellij.ide.scratch.LRUPopupBuilder$1/New Scratch File" value="OCStringsFile" />
+    <property name="last_opened_file_path" value="$PROJECT_DIR$" />
+    <property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
+    <property name="nodejs_npm_path_reset_for_default_project" value="true" />
+  </component>
+  <component name="RunDashboard">
+    <option name="ruleStates">
+      <list>
+        <RuleState>
+          <option name="name" value="ConfigurationTypeDashboardGroupingRule" />
+        </RuleState>
+        <RuleState>
+          <option name="name" value="StatusDashboardGroupingRule" />
+        </RuleState>
+      </list>
+    </option>
+  </component>
+  <component name="SvnConfiguration">
+    <configuration />
+  </component>
+  <component name="TaskManager">
+    <task active="true" id="Default" summary="Default task">
+      <changelist id="478e4dbc-5c21-445b-b829-c88da49b6e36" name="Default Changelist" comment="" />
+      <created>1555320503612</created>
+      <option name="number" value="Default" />
+      <option name="presentableId" value="Default" />
+      <updated>1555320503612</updated>
+      <workItem from="1555320506322" duration="919000" />
+      <workItem from="1555323749408" duration="1137000" />
+      <workItem from="1555377573802" duration="161000" />
+      <workItem from="1555401303741" duration="1956000" />
+      <workItem from="1555403759978" duration="7450000" />
+      <workItem from="1555464010475" duration="2537000" />
+      <workItem from="1555469177360" duration="8389000" />
+      <workItem from="1555550404664" duration="22270000" />
+      <workItem from="1555639790691" duration="618000" />
+      <workItem from="1555898580461" duration="646000" />
+      <workItem from="1555991595635" duration="1103000" />
+    </task>
+    <servers />
+  </component>
+  <component name="TimeTrackingManager">
+    <option name="totallyTimeSpent" value="47186000" />
+  </component>
+  <component name="ToolWindowManager">
+    <frame x="67" y="488" width="1920" height="980" extended-state="0" />
+    <editor active="true" />
+    <layout>
+      <window_info active="true" content_ui="combo" id="Project" order="0" sideWeight="0.49915966" visible="true" weight="0.24973376" />
+      <window_info id="Structure" order="1" sideWeight="0.50084037" side_tool="true" weight="0.24973376" />
+      <window_info id="Designer" order="2" />
+      <window_info id="Favorites" order="3" side_tool="true" />
+      <window_info anchor="bottom" id="Message" order="0" />
+      <window_info anchor="bottom" id="Find" order="1" visible="true" weight="0.32995495" />
+      <window_info anchor="bottom" id="Run" order="2" weight="0.25" />
+      <window_info anchor="bottom" id="Debug" order="3" weight="0.4" />
+      <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
+      <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
+      <window_info anchor="bottom" id="TODO" order="6" />
+      <window_info anchor="bottom" id="Database Changes" order="7" />
+      <window_info anchor="bottom" id="TeamCity" order="8" />
+      <window_info anchor="bottom" id="Terminal" order="9" weight="0.25112614" />
+      <window_info anchor="bottom" id="Event Log" order="10" side_tool="true" />
+      <window_info anchor="bottom" id="Version Control" order="11" weight="0.32995495" />
+      <window_info anchor="bottom" id="Messages" order="12" weight="0.32995495" />
+      <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
+      <window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
+      <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
+      <window_info anchor="right" id="LuaJ" order="3" />
+      <window_info anchor="right" id="Learn" order="4" />
+      <window_info anchor="right" id="Database" order="5" />
+      <window_info anchor="right" id="Palette&#9;" order="6" />
+    </layout>
+  </component>
+  <component name="TypeScriptGeneratedFilesManager">
+    <option name="version" value="1" />
+  </component>
+  <component name="Vcs.Log.Tabs.Properties">
+    <option name="TAB_STATES">
+      <map>
+        <entry key="MAIN">
+          <value>
+            <State>
+              <option name="RECENTLY_FILTERED_USER_GROUPS">
+                <collection />
+              </option>
+              <option name="RECENTLY_FILTERED_BRANCH_GROUPS">
+                <collection />
+              </option>
+              <option name="COLUMN_ORDER">
+                <list>
+                  <option value="0" />
+                  <option value="1" />
+                  <option value="2" />
+                  <option value="3" />
+                </list>
+              </option>
+            </State>
+          </value>
+        </entry>
+      </map>
+    </option>
+    <option name="RECENT_FILTERS">
+      <map>
+        <entry key="Branch">
+          <value>
+            <list />
+          </value>
+        </entry>
+        <entry key="User">
+          <value>
+            <list />
+          </value>
+        </entry>
+      </map>
+    </option>
+  </component>
+  <component name="editorHistoryManager">
+    <entry file="file://$APPLICATION_CONFIG_DIR$/scratches/scratch.strings">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/MKRRadioManager/MKRRadioManager/package.json" />
+    <entry file="file://$PROJECT_DIR$/MKRRadioManager/MKRRadioManager/BTRadioManager/MKRBTRadioManager.h" />
+    <entry file="file://$PROJECT_DIR$/MKRRadioManager/MKRRadioManager/RadionManager/MKRRadioControlProtocol.h" />
+    <entry file="file://$PROJECT_DIR$/MKRRadioManager/MKRRadioManager/RadionManager/MKRRadioUpdateProtocol.h" />
+    <entry file="file://$PROJECT_DIR$/MKRRadioManager/MKRRadioManager/MKRRadioManager.h" />
+    <entry file="file://$PROJECT_DIR$/MKRRadioManager/MKRRadioManager/RadionManager/MKRPlayControlProtocol.h" />
+    <entry file="file://$PROJECT_DIR$/MKRRadioManager/MKRRadioManager/RadionManager/MKRM3UListModel.m" />
+    <entry file="file://$PROJECT_DIR$/MKRRadioManager/MKRRadioManager/RadionManager/MKRM3UListModel.h" />
+    <entry file="file://$PROJECT_DIR$/MKRRadioManager/PrefixHeader.pch" />
+    <entry file="file://$PROJECT_DIR$/Podfile">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="72">
+          <caret line="3" selection-start-line="3" selection-end-line="3" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/../MKRRadioManager.podspec">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="960">
+          <caret line="40" column="29" selection-start-line="40" selection-start-column="29" selection-end-line="40" selection-end-column="29" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/MKRRadioManager/MKRRadioManager-Prefix.pch">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="288">
+          <caret line="12" column="34" selection-start-line="12" selection-start-column="34" selection-end-line="12" selection-end-column="34" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/Pods/Headers/Public/MKRRadioManager/MKRRadioManager.h">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="144">
+          <caret line="6" selection-start-line="6" selection-end-line="6" />
+          <folding>
+            <element signature="e#177#210#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file:///Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIDevice.h">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="185">
+          <caret line="57" column="48" selection-start-line="57" selection-start-column="48" selection-end-line="57" selection-end-column="48" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file:///Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/resolv.h">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="281">
+          <caret line="310" column="38" selection-start-line="310" selection-start-column="38" selection-end-line="310" selection-end-column="38" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/Pods/Headers/Private/MKRRadioManager/UIDevice+MKRRadioManagerAdd.h">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="216">
+          <caret line="9" lean-forward="true" selection-start-line="9" selection-end-line="9" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/Pods/Headers/Public/MKRRadioManager/UIDevice+MKRRadioManagerAdd.h">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="288">
+          <caret line="12" column="4" lean-forward="true" selection-start-line="12" selection-start-column="4" selection-end-line="12" selection-end-column="4" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/MKRRadioManager/main.m">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="240">
+          <caret line="11" column="32" selection-start-line="11" selection-start-column="32" selection-end-line="11" selection-end-column="32" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/MKRRadioManager/MKRViewController.m">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="-203">
+          <caret line="23" column="39" selection-start-line="23" selection-start-column="39" selection-end-line="23" selection-end-column="39" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/../MKRRadioManager/Classes/MKRRadioManager.h" />
+    <entry file="file://$PROJECT_DIR$/Pods/Headers/Public/MKRRadioManager/MKRWIFIDeviceManager.h">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="414">
+          <caret line="41" column="3" selection-start-line="41" selection-start-column="3" selection-end-line="41" selection-end-column="3" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/../MKRRadioManager/Classes/Category/UIDevice+MKRRadioManagerAdd.h">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="288">
+          <caret line="12" column="3" selection-start-line="12" selection-start-column="3" selection-end-line="12" selection-end-column="3" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/Pods/Headers/Public/MKRRadioManager/MKRUPnPDevice.h">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="216">
+          <caret line="9" column="35" lean-forward="true" selection-start-line="9" selection-start-column="35" selection-end-line="9" selection-end-column="35" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/MKRRadioManager/MKRPlayControlViewController.m">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="85">
+          <caret line="12" column="40" selection-start-line="12" selection-start-column="40" selection-end-line="12" selection-end-column="40" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/../MKRRadioManager/Classes/Category/UIDevice+MKRRadioManagerAdd.m">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="203">
+          <caret line="110" column="26" lean-forward="true" selection-start-line="110" selection-start-column="26" selection-end-line="110" selection-end-column="26" />
+          <folding>
+            <element signature="e#47#86#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/../MKRRadioManager/Classes/MKRWIFIDeviceManager/MKRUPnPDevice.h">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="240">
+          <caret line="10" selection-start-line="10" selection-end-line="10" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/../MKRRadioManager/Classes/MKRBTRadioManager/MKRBTRadioControlManager.h">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="144">
+          <caret line="6" column="2" selection-start-line="6" selection-start-column="2" selection-end-line="6" selection-end-column="2" />
+          <folding>
+            <element signature="e#149#182#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/../MKRRadioManager/Classes/Category/NSString+MKRRadioManagerAdd.m">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="216">
+          <caret line="9" column="24" selection-start-line="9" selection-start-column="24" selection-end-line="9" selection-end-column="24" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/../MKRRadioManager/Classes/Category/NSString+MKRRadioManagerAdd.h">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="360">
+          <caret line="15" column="4" selection-start-line="15" selection-start-column="4" selection-end-line="15" selection-end-column="4" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/Pods/libAS-Control/libAS-Control/Classes/libAS-Control.framework/Headers/ASControlTools.h">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="233">
+          <caret line="195" column="4" selection-start-line="195" selection-start-column="4" selection-end-line="195" selection-end-column="4" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/MKRRadioManager/MKRViewController.h">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="288">
+          <caret line="12" column="3" selection-start-line="12" selection-start-column="3" selection-end-line="12" selection-end-column="3" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/../MKRRadioManager/Classes/MKRPlayResourceUpdateProtocol.h" />
+    <entry file="file://$PROJECT_DIR$/../MKRRadioManager/Classes/MKRRadioControlMaster.m">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="579">
+          <caret line="39" selection-start-line="39" selection-end-line="39" />
+          <folding>
+            <element signature="e#146#179#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/../MKRRadioManager/Classes/MKRRadioControlMaster.h">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="307">
+          <caret line="18" column="49" selection-start-line="18" selection-start-column="49" selection-end-line="18" selection-end-column="49" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/../MKRRadioResourceProtocol.h" />
+    <entry file="file://$PROJECT_DIR$/Pods/Headers/Public/MKRAVPlayer/MKRPlayResourceProtocol.h" />
+    <entry file="file://$PROJECT_DIR$/Pods/MKRAVPlayer/MKRAVPlayer/Classes/MKRAVPlayer.h" />
+    <entry file="file://$PROJECT_DIR$/../MKRRadioManager/Classes/MKRPlayControlProtocol.h" />
+    <entry file="file://$PROJECT_DIR$/../MKRRadioManager/Classes/MKRWIFIDeviceManager/MKRWIFIDeviceManager.m">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="9288">
+          <caret line="387" column="20" selection-start-line="387" selection-start-column="20" selection-end-line="387" selection-end-column="20" />
+          <folding>
+            <element signature="e#93#125#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/../MKRRadioManager/Classes/MKRRadioResorce.h">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1320">
+          <caret line="55" column="4" selection-start-line="55" selection-start-column="4" selection-end-line="55" selection-end-column="4" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/../MKRRadioManager/Classes/MKRWIFIDeviceManager/MKRM3UListModel.h">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="288">
+          <caret line="12" column="77" selection-start-line="12" selection-start-column="77" selection-end-line="12" selection-end-column="77" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/../MKRRadioManager/Classes/MKRWifiRadioManager/MKRWIFIRadioControlManager.m">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="720">
+          <caret line="30" selection-start-line="30" selection-end-line="30" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/../MKRRadioManager/Classes/MKRWifiRadioManager/MKRWIFIRadioControlManager.h">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="336">
+          <caret line="14" column="28" selection-start-line="14" selection-start-column="28" selection-end-line="14" selection-end-column="28" />
+          <folding>
+            <element signature="e#151#184#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/../MKRRadioManager/Classes/MKRWIFIDeviceManager/MKRM3UListModel.m">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1896">
+          <caret line="79" column="16" selection-start-line="79" selection-start-column="16" selection-end-line="79" selection-end-column="16" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/../MKRRadioManager/Classes/Headers/MKRRadioResourceProtocol.h">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1176">
+          <caret line="49" selection-start-line="49" selection-end-line="49" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/../MKRRadioManager/Classes/Headers/MKRPlayControlProtocol.h">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1200">
+          <caret line="50" column="37" selection-start-line="50" selection-start-column="37" selection-end-line="50" selection-end-column="37" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/../MKRRadioManager/Classes/MKRWIFIDeviceManager/MKRWIFIDeviceManager.h">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="432">
+          <caret line="18" column="39" selection-start-line="18" selection-start-column="39" selection-end-line="18" selection-end-column="39" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/../MKRRadioManager/Classes/MKRBTRadioManager/MKRBTRadioControlManager.m">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="242">
+          <caret line="54" column="10" selection-start-line="54" selection-start-column="10" selection-end-line="54" selection-end-column="10" />
+        </state>
+      </provider>
+    </entry>
+  </component>
+</project>

+ 4 - 0
Example/.idea/xcode.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="XcodeMetaData" PROJECT_FILE="$PROJECT_DIR$/MKRRadioManager.xcworkspace" SHOW_WORKSPACE_NOTIFICATIONS="true" COCOAPODS_PROJECT_EXCLUDED="true" />
+</project>

+ 65 - 36
Example/MKRRadioManager.xcodeproj/project.pbxproj

@@ -7,8 +7,7 @@
 	objects = {
 
 /* Begin PBXBuildFile section */
-		3D1319D0F3049FA91D36F428 /* Pods_MKRRadioManager_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0338CE74AA0937B9A6DABBE /* Pods_MKRRadioManager_Tests.framework */; };
-		4E468392C2E7BABABD49C72D /* Pods_MKRRadioManager_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9979DEEA91C1A947AD69BDF4 /* Pods_MKRRadioManager_Example.framework */; };
+		0431E8069A5355B24E92FF42 /* libPods-MKRRadioManager_Example.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BA0A14EA6823D25235C739B /* libPods-MKRRadioManager_Example.a */; };
 		6003F58E195388D20070C39A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58D195388D20070C39A /* Foundation.framework */; };
 		6003F590195388D20070C39A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58F195388D20070C39A /* CoreGraphics.framework */; };
 		6003F592195388D20070C39A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F591195388D20070C39A /* UIKit.framework */; };
@@ -24,6 +23,8 @@
 		6003F5BC195388D20070C39A /* Tests.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F5BB195388D20070C39A /* Tests.m */; };
 		71719F9F1E33DC2100824A3D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 71719F9D1E33DC2100824A3D /* LaunchScreen.storyboard */; };
 		873B8AEB1B1F5CCA007FD442 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 873B8AEA1B1F5CCA007FD442 /* Main.storyboard */; };
+		9131B550336D0E7612B7DB18 /* libPods-MKRRadioManager_Tests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E9B91107B24E82C699A8092B /* libPods-MKRRadioManager_Tests.a */; };
+		BAD6DE83226708F70095069D /* MKRPlayControlViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BAD6DE82226708F70095069D /* MKRPlayControlViewController.m */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
@@ -37,9 +38,10 @@
 /* End PBXContainerItemProxy section */
 
 /* Begin PBXFileReference section */
-		30CC6BE02E9C81A23E72A301 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; name = README.md; path = ../README.md; sourceTree = "<group>"; };
+		30CC6BE02E9C81A23E72A301 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = "<group>"; };
 		3342E3A76531BAB139ED3F8D /* Pods-MKRRadioManager_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MKRRadioManager_Tests.release.xcconfig"; path = "Target Support Files/Pods-MKRRadioManager_Tests/Pods-MKRRadioManager_Tests.release.xcconfig"; sourceTree = "<group>"; };
-		3EF384348FAC9DDDDC9AFFF5 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; name = LICENSE; path = ../LICENSE; sourceTree = "<group>"; };
+		3EF384348FAC9DDDDC9AFFF5 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = "<group>"; };
+		4BA0A14EA6823D25235C739B /* libPods-MKRRadioManager_Example.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MKRRadioManager_Example.a"; sourceTree = BUILT_PRODUCTS_DIR; };
 		5602B288FC72D73A0A62A866 /* Pods-MKRRadioManager_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MKRRadioManager_Tests.debug.xcconfig"; path = "Target Support Files/Pods-MKRRadioManager_Tests/Pods-MKRRadioManager_Tests.debug.xcconfig"; sourceTree = "<group>"; };
 		6003F58A195388D20070C39A /* MKRRadioManager_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MKRRadioManager_Example.app; sourceTree = BUILT_PRODUCTS_DIR; };
 		6003F58D195388D20070C39A /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
@@ -63,9 +65,10 @@
 		71719F9E1E33DC2100824A3D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
 		84C622ED86065E87CB259746 /* Pods-MKRRadioManager_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MKRRadioManager_Example.debug.xcconfig"; path = "Target Support Files/Pods-MKRRadioManager_Example/Pods-MKRRadioManager_Example.debug.xcconfig"; sourceTree = "<group>"; };
 		873B8AEA1B1F5CCA007FD442 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = Main.storyboard; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
-		9979DEEA91C1A947AD69BDF4 /* Pods_MKRRadioManager_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MKRRadioManager_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		ABE922AAA9D41BC767AB86F0 /* MKRRadioManager.podspec */ = {isa = PBXFileReference; includeInIndex = 1; name = MKRRadioManager.podspec; path = ../MKRRadioManager.podspec; sourceTree = "<group>"; };
-		C0338CE74AA0937B9A6DABBE /* Pods_MKRRadioManager_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MKRRadioManager_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		ABE922AAA9D41BC767AB86F0 /* MKRRadioManager.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = MKRRadioManager.podspec; path = ../MKRRadioManager.podspec; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
+		BAD6DE81226708F70095069D /* MKRPlayControlViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MKRPlayControlViewController.h; sourceTree = "<group>"; };
+		BAD6DE82226708F70095069D /* MKRPlayControlViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MKRPlayControlViewController.m; sourceTree = "<group>"; };
+		E9B91107B24E82C699A8092B /* libPods-MKRRadioManager_Tests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MKRRadioManager_Tests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
 		FE24A4D86C5F738B45C21E8B /* Pods-MKRRadioManager_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MKRRadioManager_Example.release.xcconfig"; path = "Target Support Files/Pods-MKRRadioManager_Example/Pods-MKRRadioManager_Example.release.xcconfig"; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
@@ -77,7 +80,7 @@
 				6003F590195388D20070C39A /* CoreGraphics.framework in Frameworks */,
 				6003F592195388D20070C39A /* UIKit.framework in Frameworks */,
 				6003F58E195388D20070C39A /* Foundation.framework in Frameworks */,
-				4E468392C2E7BABABD49C72D /* Pods_MKRRadioManager_Example.framework in Frameworks */,
+				0431E8069A5355B24E92FF42 /* libPods-MKRRadioManager_Example.a in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -88,7 +91,7 @@
 				6003F5B0195388D20070C39A /* XCTest.framework in Frameworks */,
 				6003F5B2195388D20070C39A /* UIKit.framework in Frameworks */,
 				6003F5B1195388D20070C39A /* Foundation.framework in Frameworks */,
-				3D1319D0F3049FA91D36F428 /* Pods_MKRRadioManager_Tests.framework in Frameworks */,
+				9131B550336D0E7612B7DB18 /* libPods-MKRRadioManager_Tests.a in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -123,8 +126,8 @@
 				6003F58F195388D20070C39A /* CoreGraphics.framework */,
 				6003F591195388D20070C39A /* UIKit.framework */,
 				6003F5AF195388D20070C39A /* XCTest.framework */,
-				9979DEEA91C1A947AD69BDF4 /* Pods_MKRRadioManager_Example.framework */,
-				C0338CE74AA0937B9A6DABBE /* Pods_MKRRadioManager_Tests.framework */,
+				4BA0A14EA6823D25235C739B /* libPods-MKRRadioManager_Example.a */,
+				E9B91107B24E82C699A8092B /* libPods-MKRRadioManager_Tests.a */,
 			);
 			name = Frameworks;
 			sourceTree = "<group>";
@@ -137,6 +140,8 @@
 				873B8AEA1B1F5CCA007FD442 /* Main.storyboard */,
 				6003F5A5195388D20070C39A /* MKRViewController.h */,
 				6003F5A6195388D20070C39A /* MKRViewController.m */,
+				BAD6DE81226708F70095069D /* MKRPlayControlViewController.h */,
+				BAD6DE82226708F70095069D /* MKRPlayControlViewController.m */,
 				71719F9D1E33DC2100824A3D /* LaunchScreen.storyboard */,
 				6003F5A8195388D20070C39A /* Images.xcassets */,
 				6003F594195388D20070C39A /* Supporting Files */,
@@ -193,7 +198,6 @@
 				5602B288FC72D73A0A62A866 /* Pods-MKRRadioManager_Tests.debug.xcconfig */,
 				3342E3A76531BAB139ED3F8D /* Pods-MKRRadioManager_Tests.release.xcconfig */,
 			);
-			name = Pods;
 			path = Pods;
 			sourceTree = "<group>";
 		};
@@ -208,7 +212,6 @@
 				6003F586195388D20070C39A /* Sources */,
 				6003F587195388D20070C39A /* Frameworks */,
 				6003F588195388D20070C39A /* Resources */,
-				308B7B6D3F309E125F36F8B3 /* [CP] Embed Pods Frameworks */,
 			);
 			buildRules = (
 			);
@@ -245,9 +248,13 @@
 			isa = PBXProject;
 			attributes = {
 				CLASSPREFIX = MKR;
-				LastUpgradeCheck = 0720;
+				LastUpgradeCheck = 1020;
 				ORGANIZATIONNAME = yyqxiaoyin;
 				TargetAttributes = {
+					6003F589195388D20070C39A = {
+						DevelopmentTeam = WSH9723Y7V;
+						ProvisioningStyle = Automatic;
+					};
 					6003F5AD195388D20070C39A = {
 						TestTargetID = 6003F589195388D20070C39A;
 					};
@@ -258,6 +265,7 @@
 			developmentRegion = English;
 			hasScannedForEncodings = 0;
 			knownRegions = (
+				English,
 				en,
 				Base,
 			);
@@ -295,28 +303,6 @@
 /* End PBXResourcesBuildPhase section */
 
 /* Begin PBXShellScriptBuildPhase section */
-		308B7B6D3F309E125F36F8B3 /* [CP] Embed Pods Frameworks */ = {
-			isa = PBXShellScriptBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			inputFileListPaths = (
-			);
-			inputPaths = (
-				"${PODS_ROOT}/Target Support Files/Pods-MKRRadioManager_Example/Pods-MKRRadioManager_Example-frameworks.sh",
-				"${BUILT_PRODUCTS_DIR}/MKRRadioManager/MKRRadioManager.framework",
-			);
-			name = "[CP] Embed Pods Frameworks";
-			outputFileListPaths = (
-			);
-			outputPaths = (
-				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MKRRadioManager.framework",
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-			shellPath = /bin/sh;
-			shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-MKRRadioManager_Example/Pods-MKRRadioManager_Example-frameworks.sh\"\n";
-			showEnvVarsInLog = 0;
-		};
 		9E8849D0A9A44C985E001AA2 /* [CP] Check Pods Manifest.lock */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 2147483647;
@@ -369,6 +355,7 @@
 			buildActionMask = 2147483647;
 			files = (
 				6003F59E195388D20070C39A /* MKRAppDelegate.m in Sources */,
+				BAD6DE83226708F70095069D /* MKRPlayControlViewController.m in Sources */,
 				6003F5A7195388D20070C39A /* MKRViewController.m in Sources */,
 				6003F59A195388D20070C39A /* main.m in Sources */,
 			);
@@ -424,24 +411,40 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
 				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
 				CLANG_CXX_LIBRARY = "libc++";
 				CLANG_ENABLE_MODULES = YES;
 				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
 				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_COMMA = YES;
 				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
 				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
 				CLANG_WARN_EMPTY_BODY = YES;
 				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INFINITE_RECURSION = YES;
 				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
 				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+				CLANG_WARN_STRICT_PROTOTYPES = YES;
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
 				COPY_PHASE_STRIP = NO;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
 				ENABLE_TESTABILITY = YES;
 				GCC_C_LANGUAGE_STANDARD = gnu99;
 				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_NO_COMMON_BLOCKS = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PRECOMPILE_PREFIX_HEADER = NO;
+				GCC_PREFIX_HEADER = "";
 				GCC_PREPROCESSOR_DEFINITIONS = (
 					"DEBUG=1",
 					"$(inherited)",
@@ -464,22 +467,38 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
 				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
 				CLANG_CXX_LIBRARY = "libc++";
 				CLANG_ENABLE_MODULES = YES;
 				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
 				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_COMMA = YES;
 				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
 				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
 				CLANG_WARN_EMPTY_BODY = YES;
 				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INFINITE_RECURSION = YES;
 				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
 				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+				CLANG_WARN_STRICT_PROTOTYPES = YES;
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
 				COPY_PHASE_STRIP = YES;
 				ENABLE_NS_ASSERTIONS = NO;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
 				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_PRECOMPILE_PREFIX_HEADER = NO;
+				GCC_PREFIX_HEADER = "";
 				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
 				GCC_WARN_UNDECLARED_SELECTOR = YES;
@@ -498,12 +517,17 @@
 			baseConfigurationReference = 84C622ED86065E87CB259746 /* Pods-MKRRadioManager_Example.debug.xcconfig */;
 			buildSettings = {
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				CODE_SIGN_IDENTITY = "iPhone Developer";
+				CODE_SIGN_STYLE = Automatic;
+				DEVELOPMENT_TEAM = WSH9723Y7V;
+				ENABLE_BITCODE = NO;
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 				GCC_PREFIX_HEADER = "MKRRadioManager/MKRRadioManager-Prefix.pch";
 				INFOPLIST_FILE = "MKRRadioManager/MKRRadioManager-Info.plist";
 				MODULE_NAME = ExampleApp;
 				PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}";
 				PRODUCT_NAME = "$(TARGET_NAME)";
+				PROVISIONING_PROFILE_SPECIFIER = "";
 				WRAPPER_EXTENSION = app;
 			};
 			name = Debug;
@@ -513,12 +537,17 @@
 			baseConfigurationReference = FE24A4D86C5F738B45C21E8B /* Pods-MKRRadioManager_Example.release.xcconfig */;
 			buildSettings = {
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				CODE_SIGN_IDENTITY = "iPhone Developer";
+				CODE_SIGN_STYLE = Automatic;
+				DEVELOPMENT_TEAM = WSH9723Y7V;
+				ENABLE_BITCODE = NO;
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
 				GCC_PREFIX_HEADER = "MKRRadioManager/MKRRadioManager-Prefix.pch";
 				INFOPLIST_FILE = "MKRRadioManager/MKRRadioManager-Info.plist";
 				MODULE_NAME = ExampleApp;
 				PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}";
 				PRODUCT_NAME = "$(TARGET_NAME)";
+				PROVISIONING_PROFILE_SPECIFIER = "";
 				WRAPPER_EXTENSION = app;
 			};
 			name = Release;

+ 1 - 1
Example/MKRRadioManager.xcodeproj/xcshareddata/xcschemes/MKRRadioManager-Example.xcscheme

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
-   LastUpgradeVersion = "0720"
+   LastUpgradeVersion = "1020"
    version = "1.3">
    <BuildAction
       parallelizeBuildables = "YES"

+ 10 - 0
Example/MKRRadioManager.xcworkspace/contents.xcworkspacedata

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+   version = "1.0">
+   <FileRef
+      location = "group:MKRRadioManager.xcodeproj">
+   </FileRef>
+   <FileRef
+      location = "group:Pods/Pods.xcodeproj">
+   </FileRef>
+</Workspace>

+ 8 - 0
Example/MKRRadioManager.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist

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

+ 27 - 4
Example/MKRRadioManager/Base.lproj/Main.storyboard

@@ -1,15 +1,15 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13771" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="whP-gf-Uak">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="s4L-Q9-AHq">
     <device id="retina4_7" orientation="portrait">
         <adaptation id="fullscreen"/>
     </device>
     <dependencies>
         <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13772"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <scenes>
-        <!--View Controller-->
+        <!--设备列表-->
         <scene sceneID="wQg-tq-qST">
             <objects>
                 <viewController id="whP-gf-Uak" customClass="MKRViewController" sceneMemberID="viewController">
@@ -22,10 +22,33 @@
                         <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                         <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                     </view>
+                    <navigationItem key="navigationItem" title="设备列表" id="SxI-oW-BSv">
+                        <barButtonItem key="rightBarButtonItem" systemItem="refresh" id="FbR-5d-Ygz">
+                            <connections>
+                                <action selector="refresh:" destination="whP-gf-Uak" id="M6A-MX-GZj"/>
+                            </connections>
+                        </barButtonItem>
+                    </navigationItem>
                 </viewController>
                 <placeholder placeholderIdentifier="IBFirstResponder" id="tc2-Qw-aMS" userLabel="First Responder" sceneMemberID="firstResponder"/>
             </objects>
-            <point key="canvasLocation" x="305" y="433"/>
+            <point key="canvasLocation" x="641" y="457"/>
+        </scene>
+        <!--Navigation Controller-->
+        <scene sceneID="9yO-Pm-DFJ">
+            <objects>
+                <navigationController id="s4L-Q9-AHq" sceneMemberID="viewController">
+                    <navigationBar key="navigationBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="GbP-Hj-gQI">
+                        <rect key="frame" x="0.0" y="20" width="375" height="44"/>
+                        <autoresizingMask key="autoresizingMask"/>
+                    </navigationBar>
+                    <connections>
+                        <segue destination="whP-gf-Uak" kind="relationship" relationship="rootViewController" id="g4c-Hf-wef"/>
+                    </connections>
+                </navigationController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="79Q-vg-zN1" userLabel="First Responder" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="12" y="457"/>
         </scene>
     </scenes>
 </document>

+ 15 - 0
Example/MKRRadioManager/MKRPlayControlViewController.h

@@ -0,0 +1,15 @@
+//
+//  MKRPlayControlViewController.h
+//  MKRRadioManager_Example
+//
+//  Created by yyqxiaoyin on 2019/4/17.
+//  Copyright © 2019 yyqxiaoyin. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface MKRPlayControlViewController : UIViewController
+
+- (instancetype)initWithDevice:(MKRUPnPDevice *)device;
+
+@end

+ 118 - 0
Example/MKRRadioManager/MKRPlayControlViewController.m

@@ -0,0 +1,118 @@
+//
+//  MKRPlayControlViewController.m
+//  MKRRadioManager_Example
+//
+//  Created by yyqxiaoyin on 2019/4/17.
+//  Copyright © 2019 yyqxiaoyin. All rights reserved.
+//
+
+#import "MKRPlayControlViewController.h"
+
+@interface MKRPlayControlViewController ()<UITableViewDataSource,UITableViewDelegate>
+
+@property (nonatomic, strong) MKRUPnPDevice *device;
+
+@property (nonatomic, strong) UITableView *tableView;
+
+@property (nonatomic, strong) NSArray *dataSource;
+
+@end
+
+@implementation MKRPlayControlViewController
+
+- (instancetype)initWithDevice:(MKRUPnPDevice *)device{
+    if (self = [super init]) {
+        [[MKRRadioControlMaster shareMaster] changeCurrentDevice:device];
+    }
+    return self;
+}
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    self.view.backgroundColor = [UIColor whiteColor];
+    self.tableView = [[UITableView alloc] initWithFrame:self.view.frame style:UITableViewStylePlain];
+    self.tableView.delegate = self;
+    self.tableView.dataSource = self;
+    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"];
+    [self.view addSubview:self.tableView];
+    self.dataSource = @[
+            @{@"播放":@"play"},
+            @{@"播放频道":@"playChannel:"},
+            @{@"暂停":@"pause"},
+            @{@"上一曲":@"previous"},
+            @{@"下一曲":@"next"},
+            @{@"停止":@"stop"},
+            @{@"音量+":@"volumePlus"},
+            @{@"音量-":@"volumeMins"},
+            ];
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
+    NSDictionary *dic = self.dataSource[indexPath.row];
+    cell.textLabel.text = [dic.allKeys firstObject];
+    return cell;
+}
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.dataSource.count;
+}
+
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    [tableView deselectRowAtIndexPath:indexPath animated:YES];
+    NSDictionary *dic = self.dataSource[indexPath.row];
+    NSString *selString = [dic.allValues firstObject];
+    SEL sel = NSSelectorFromString(selString);
+    if ([selString containsString:@":"]) {
+        int x = arc4random() % (11 - 0 + 1) + 0;
+        [self performSelector:sel withObject:@(x).stringValue afterDelay:0];
+    }else{
+        [self performSelector:sel withObject:nil afterDelay:0];
+    }
+}
+
+- (void)play{
+    [_MKRRadioControlMaster play];
+//    [_MKRWIFIDeviceManager playWithDevice:self.device];
+}
+
+- (void)playChannel:(NSString *)channel{
+    NSLog(@"播放频道:%@",channel);
+    [_MKRRadioControlMaster playSongWithChannelNO:channel userID:@""];
+//    [_MKRWIFIDeviceManager playSongWithChannelNO:[channel integerValue]
+//                                           index:0
+//                                          device:self.device
+//                                          userID:@""];
+}
+
+- (void)pause{
+    [_MKRRadioControlMaster pause];
+//    [_MKRWIFIDeviceManager pauseWithDevice:self.device];
+}
+
+- (void)previous{
+    [_MKRRadioControlMaster previous];
+//    [_MKRWIFIDeviceManager previousWithDevice:self.device];
+}
+
+- (void)next{
+    [_MKRRadioControlMaster next];
+//    [_MKRWIFIDeviceManager nextWithDevice:self.device];
+}
+
+- (void)stop{
+    [_MKRRadioControlMaster stop];
+//    [_MKRWIFIDeviceManager stopWithDevice:self.device];
+}
+
+- (void)volumePlus{
+    [_MKRRadioControlMaster setVolume:80];
+//    [_MKRWIFIDeviceManager setVolume:80 device:self.device];
+}
+
+- (void)volumeMins{
+    [_MKRRadioControlMaster setVolume:20];
+//    [_MKRWIFIDeviceManager setVolume:20 device:self.device];
+}
+
+@end

+ 2 - 0
Example/MKRRadioManager/MKRRadioManager-Prefix.pch

@@ -10,6 +10,8 @@
 #warning "This project uses features only available in iOS SDK 5.0 and later."
 #endif
 
+#import <MKRRadioManager/MKRRadioPlayControlManager.h>
+
 #ifdef __OBJC__
     @import UIKit;
     @import Foundation;

+ 1 - 1
Example/MKRRadioManager/MKRViewController.h

@@ -8,6 +8,6 @@
 
 @import UIKit;
 
-@interface MKRViewController : UIViewController
+@interface MKRViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
 
 @end

+ 49 - 5
Example/MKRRadioManager/MKRViewController.m

@@ -7,23 +7,67 @@
 //
 
 #import "MKRViewController.h"
+#import "UIDevice+MKRRadioManagerAdd.h"
+#import "MKRPlayControlViewController.h"
 
 @interface MKRViewController ()
 
+@property (nonatomic, strong)UITableView *tableView;
+
+@property (nonatomic, strong)NSMutableArray *dataSource;
+
 @end
 
 @implementation MKRViewController
 
+- (IBAction)refresh:(UIBarButtonItem *)sender {
+    [self.dataSource removeAllObjects];
+    [self searchDevice];
+}
+
+- (void)searchDevice{
+    [_MKRWIFIDeviceManager searchDeviceWithSearchTime:20 timeBlock:^(NSInteger time, NSArray *devices) {
+        if (![self.dataSource isEqualToArray:devices]) {
+            self.dataSource = devices.mutableCopy;
+            [self.tableView reloadData];
+        }
+    }];
+}
+
 - (void)viewDidLoad
 {
     [super viewDidLoad];
-	// Do any additional setup after loading the view, typically from a nib.
+    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];
 }
 
-- (void)didReceiveMemoryWarning
-{
-    [super didReceiveMemoryWarning];
-    // Dispose of any resources that can be recreated.
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.dataSource.count;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
+
+    MKRUPnPDevice *device = self.dataSource[indexPath.row];
+    cell.textLabel.text = device.deviceName;
+    return cell;
+}
+
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
+    MKRPlayControlViewController *vc = [[MKRPlayControlViewController alloc] initWithDevice:self.dataSource[indexPath.row]];
+    [self.navigationController pushViewController:vc animated:YES];
+}
+
+- (NSMutableArray *)dataSource {
+    if (!_dataSource) {
+        _dataSource = [NSMutableArray array];
+    }
+    return _dataSource;
 }
 
 @end

+ 4 - 4
Example/Podfile

@@ -1,10 +1,10 @@
-use_frameworks!
-
-platform :ios, '8.0'
+source 'https://github.com/CocoaPods/Specs.git'
+source 'ssh://zyx@192.168.66.99:/home/zyx/source/MKRPodspecs.git'
+platform :ios, '9.2'
 
+inhibit_all_warnings!
 target 'MKRRadioManager_Example' do
   pod 'MKRRadioManager', :path => '../'
-
   target 'MKRRadioManager_Tests' do
     inherit! :search_paths
 

+ 23 - 0
Example/Podfile.lock

@@ -0,0 +1,23 @@
+PODS:
+  - libAS-Control (0.0.2)
+  - MKRRadioManager (0.0.1):
+    - libAS-Control
+
+DEPENDENCIES:
+  - MKRRadioManager (from `../`)
+
+SPEC REPOS:
+  "ssh://zyx@192.168.66.99:/home/zyx/source/MKRPodspecs.git":
+    - libAS-Control
+
+EXTERNAL SOURCES:
+  MKRRadioManager:
+    :path: "../"
+
+SPEC CHECKSUMS:
+  libAS-Control: b5bdaaef7183a1a34c14de7b9fea7d0456dbddae
+  MKRRadioManager: 30abedd60601e99ca2321acf3b1c0ff4f0027b59
+
+PODFILE CHECKSUM: 1ae0e66e3079e55f416f7603f82d63724b95cb54
+
+COCOAPODS: 1.6.1

+ 1 - 0
Example/Pods/Headers/Private/MKRRadioManager/MKRAVPlayer.h

@@ -0,0 +1 @@
+../../../../../MKRRadioManager/Classes/MKRAVPlayer/MKRAVPlayer.h

+ 1 - 0
Example/Pods/Headers/Private/MKRRadioManager/MKRBTRadioControlManager.h

@@ -0,0 +1 @@
+../../../../../MKRRadioManager/Classes/MKRBTRadioManager/MKRBTRadioControlManager.h

+ 1 - 0
Example/Pods/Headers/Private/MKRRadioManager/MKRM3UListModel.h

@@ -0,0 +1 @@
+../../../../../MKRRadioManager/Classes/MKRWIFIDeviceManager/MKRM3UListModel.h

+ 1 - 0
Example/Pods/Headers/Private/MKRRadioManager/MKRPlayControlProtocol.h

@@ -0,0 +1 @@
+../../../../../MKRRadioManager/Classes/Headers/MKRPlayControlProtocol.h

+ 1 - 0
Example/Pods/Headers/Private/MKRRadioManager/MKRPlayResourceStatus.h

@@ -0,0 +1 @@
+../../../../../MKRRadioManager/Classes/MKRAVPlayer/MKRPlayResourceStatus.h

+ 1 - 0
Example/Pods/Headers/Private/MKRRadioManager/MKRPlayResourceUpdateProtocol.h

@@ -0,0 +1 @@
+../../../../../MKRRadioManager/Classes/Headers/MKRPlayResourceUpdateProtocol.h

+ 1 - 0
Example/Pods/Headers/Private/MKRRadioManager/MKRRadioControlMaster.h

@@ -0,0 +1 @@
+../../../../../MKRRadioManager/Classes/MKRRadioControlMaster.h

+ 1 - 0
Example/Pods/Headers/Private/MKRRadioManager/MKRRadioPlayControlManager.h

@@ -0,0 +1 @@
+../../../../../MKRRadioManager/Classes/Headers/MKRRadioPlayControlManager.h

+ 1 - 0
Example/Pods/Headers/Private/MKRRadioManager/MKRRadioResorce.h

@@ -0,0 +1 @@
+../../../../../MKRRadioManager/Classes/MKRRadioResorce.h

+ 1 - 0
Example/Pods/Headers/Private/MKRRadioManager/MKRRadioResourceProtocol.h

@@ -0,0 +1 @@
+../../../../../MKRRadioManager/Classes/Headers/MKRRadioResourceProtocol.h

+ 1 - 0
Example/Pods/Headers/Private/MKRRadioManager/MKRUPnPDevice.h

@@ -0,0 +1 @@
+../../../../../MKRRadioManager/Classes/MKRWIFIDeviceManager/MKRUPnPDevice.h

+ 1 - 0
Example/Pods/Headers/Private/MKRRadioManager/MKRWIFIDeviceManager.h

@@ -0,0 +1 @@
+../../../../../MKRRadioManager/Classes/MKRWIFIDeviceManager/MKRWIFIDeviceManager.h

+ 1 - 0
Example/Pods/Headers/Private/MKRRadioManager/MKRWIFIRadioControlManager.h

@@ -0,0 +1 @@
+../../../../../MKRRadioManager/Classes/MKRWifiRadioManager/MKRWIFIRadioControlManager.h

+ 1 - 0
Example/Pods/Headers/Private/MKRRadioManager/NSString+MKRRadioManagerAdd.h

@@ -0,0 +1 @@
+../../../../../MKRRadioManager/Classes/Category/NSString+MKRRadioManagerAdd.h

+ 1 - 0
Example/Pods/Headers/Private/MKRRadioManager/UIDevice+MKRRadioManagerAdd.h

@@ -0,0 +1 @@
+../../../../../MKRRadioManager/Classes/Category/UIDevice+MKRRadioManagerAdd.h

+ 1 - 0
Example/Pods/Headers/Public/MKRRadioManager/MKRAVPlayer.h

@@ -0,0 +1 @@
+../../../../../MKRRadioManager/Classes/MKRAVPlayer/MKRAVPlayer.h

+ 1 - 0
Example/Pods/Headers/Public/MKRRadioManager/MKRBTRadioControlManager.h

@@ -0,0 +1 @@
+../../../../../MKRRadioManager/Classes/MKRBTRadioManager/MKRBTRadioControlManager.h

+ 1 - 0
Example/Pods/Headers/Public/MKRRadioManager/MKRM3UListModel.h

@@ -0,0 +1 @@
+../../../../../MKRRadioManager/Classes/MKRWIFIDeviceManager/MKRM3UListModel.h

+ 1 - 0
Example/Pods/Headers/Public/MKRRadioManager/MKRPlayControlProtocol.h

@@ -0,0 +1 @@
+../../../../../MKRRadioManager/Classes/Headers/MKRPlayControlProtocol.h

+ 1 - 0
Example/Pods/Headers/Public/MKRRadioManager/MKRPlayResourceStatus.h

@@ -0,0 +1 @@
+../../../../../MKRRadioManager/Classes/MKRAVPlayer/MKRPlayResourceStatus.h

+ 1 - 0
Example/Pods/Headers/Public/MKRRadioManager/MKRPlayResourceUpdateProtocol.h

@@ -0,0 +1 @@
+../../../../../MKRRadioManager/Classes/Headers/MKRPlayResourceUpdateProtocol.h

+ 1 - 0
Example/Pods/Headers/Public/MKRRadioManager/MKRRadioControlMaster.h

@@ -0,0 +1 @@
+../../../../../MKRRadioManager/Classes/MKRRadioControlMaster.h

+ 1 - 0
Example/Pods/Headers/Public/MKRRadioManager/MKRRadioPlayControlManager.h

@@ -0,0 +1 @@
+../../../../../MKRRadioManager/Classes/Headers/MKRRadioPlayControlManager.h

+ 1 - 0
Example/Pods/Headers/Public/MKRRadioManager/MKRRadioResorce.h

@@ -0,0 +1 @@
+../../../../../MKRRadioManager/Classes/MKRRadioResorce.h

+ 1 - 0
Example/Pods/Headers/Public/MKRRadioManager/MKRRadioResourceProtocol.h

@@ -0,0 +1 @@
+../../../../../MKRRadioManager/Classes/Headers/MKRRadioResourceProtocol.h

+ 1 - 0
Example/Pods/Headers/Public/MKRRadioManager/MKRUPnPDevice.h

@@ -0,0 +1 @@
+../../../../../MKRRadioManager/Classes/MKRWIFIDeviceManager/MKRUPnPDevice.h

+ 1 - 0
Example/Pods/Headers/Public/MKRRadioManager/MKRWIFIDeviceManager.h

@@ -0,0 +1 @@
+../../../../../MKRRadioManager/Classes/MKRWIFIDeviceManager/MKRWIFIDeviceManager.h

+ 1 - 0
Example/Pods/Headers/Public/MKRRadioManager/MKRWIFIRadioControlManager.h

@@ -0,0 +1 @@
+../../../../../MKRRadioManager/Classes/MKRWifiRadioManager/MKRWIFIRadioControlManager.h

+ 1 - 0
Example/Pods/Headers/Public/MKRRadioManager/NSString+MKRRadioManagerAdd.h

@@ -0,0 +1 @@
+../../../../../MKRRadioManager/Classes/Category/NSString+MKRRadioManagerAdd.h

+ 1 - 0
Example/Pods/Headers/Public/MKRRadioManager/UIDevice+MKRRadioManagerAdd.h

@@ -0,0 +1 @@
+../../../../../MKRRadioManager/Classes/Category/UIDevice+MKRRadioManagerAdd.h

+ 27 - 0
Example/Pods/Local Podspecs/MKRRadioManager.podspec.json

@@ -0,0 +1,27 @@
+{
+  "name": "MKRRadioManager",
+  "version": "0.0.1",
+  "summary": "A short description of MKRRadioManager.",
+  "description": "TODO: Add long description of the pod here.",
+  "homepage": "ssh://zyx@192.168.66.99:/home/zyx/source/MKRComponent/MKRRadioManager.git",
+  "license": {
+    "type": "MIT",
+    "file": "LICENSE"
+  },
+  "authors": {
+    "yyqxiaoyin": "357491060@qq.com"
+  },
+  "source": {
+    "git": "ssh://zyx@192.168.66.99:/home/zyx/source/MKRComponent/MKRRadioManager.git",
+    "tag": "0.0.1"
+  },
+  "platforms": {
+    "ios": "8.0"
+  },
+  "source_files": "MKRRadioManager/Classes/**/*",
+  "dependencies": {
+    "libAS-Control": [
+
+    ]
+  }
+}

+ 23 - 0
Example/Pods/Manifest.lock

@@ -0,0 +1,23 @@
+PODS:
+  - libAS-Control (0.0.2)
+  - MKRRadioManager (0.0.1):
+    - libAS-Control
+
+DEPENDENCIES:
+  - MKRRadioManager (from `../`)
+
+SPEC REPOS:
+  "ssh://zyx@192.168.66.99:/home/zyx/source/MKRPodspecs.git":
+    - libAS-Control
+
+EXTERNAL SOURCES:
+  MKRRadioManager:
+    :path: "../"
+
+SPEC CHECKSUMS:
+  libAS-Control: b5bdaaef7183a1a34c14de7b9fea7d0456dbddae
+  MKRRadioManager: 30abedd60601e99ca2321acf3b1c0ff4f0027b59
+
+PODFILE CHECKSUM: 1ae0e66e3079e55f416f7603f82d63724b95cb54
+
+COCOAPODS: 1.6.1

+ 909 - 0
Example/Pods/Pods.xcodeproj/project.pbxproj

@@ -0,0 +1,909 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXAggregateTarget section */
+		176427A91D7FBE8FBD09CC427F0E0D95 /* libAS-Control */ = {
+			isa = PBXAggregateTarget;
+			buildConfigurationList = 9FE39FD844737A9A33089B81D717C13E /* Build configuration list for PBXAggregateTarget "libAS-Control" */;
+			buildPhases = (
+			);
+			dependencies = (
+			);
+			name = "libAS-Control";
+		};
+/* End PBXAggregateTarget section */
+
+/* Begin PBXBuildFile section */
+		18301444BF8A25DBB9DF450B37FA5DF8 /* MKRAVPlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BC88BA00721D201D8AF05E8069391B5 /* MKRAVPlayer.h */; settings = {ATTRIBUTES = (Project, ); }; };
+		202D27F8E230590486BFC89F2E56BB5D /* Pods-MKRRadioManager_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 04AED1516C7448E307FC2B445928E20A /* Pods-MKRRadioManager_Example-dummy.m */; };
+		21673168F486937F4C325F0CAE2372F9 /* MKRBTRadioControlManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E452DEBEAEC9DEFB3D974AE0B1F5ED2C /* MKRBTRadioControlManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+		2FF234B9E0F700AA0D809DD14C335422 /* MKRRadioControlMaster.m in Sources */ = {isa = PBXBuildFile; fileRef = F617BF96A5E8F758C7C116CC7FDCD430 /* MKRRadioControlMaster.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+		3F3416F3484064DDB4541F9D0A2E5C12 /* MKRRadioControlMaster.h in Headers */ = {isa = PBXBuildFile; fileRef = 2632A0BA530AC2F35D30C1C718DB0766 /* MKRRadioControlMaster.h */; settings = {ATTRIBUTES = (Project, ); }; };
+		4685BF0947A4EB10BF306010E2619525 /* NSString+MKRRadioManagerAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D6F26858DFB9CBD4099D334413041F3 /* NSString+MKRRadioManagerAdd.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+		57BF519E918C7EBEBE9B378A5C8A2B00 /* MKRAVPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 248D6C8C0AEF3D1E4D01A0B1E5057470 /* MKRAVPlayer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+		598AC68150FA5ED78EDF7DFBFBB2A7E4 /* NSString+MKRRadioManagerAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = F81004F28F2A3CE32898DF5A83DCFB42 /* NSString+MKRRadioManagerAdd.h */; settings = {ATTRIBUTES = (Project, ); }; };
+		5C856BB06E12CA03B034EF036E82C6F7 /* MKRWIFIDeviceManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F38B49394149F0ED5808599DA8A6E45 /* MKRWIFIDeviceManager.h */; settings = {ATTRIBUTES = (Project, ); }; };
+		63DE8CEF17DFE7C28F61455531C76779 /* MKRM3UListModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 31C875FA5E9154CC02521A5000A4E5EF /* MKRM3UListModel.h */; settings = {ATTRIBUTES = (Project, ); }; };
+		68F58F44E296F746239546318DCDC9A5 /* MKRM3UListModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 944B75BDAD38EA0BEAE4DD0F2A523D4C /* MKRM3UListModel.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+		6D453DFFEBB4CAF5BA6570362A244339 /* UIDevice+MKRRadioManagerAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = 30306CB8640A29C69BB2C85D08311718 /* UIDevice+MKRRadioManagerAdd.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+		7AC2AA8E4E2A62D77D7A975E4F37FA9C /* MKRPlayResourceUpdateProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = BF6C5FA07FC0D4E23E741C056A41A3DA /* MKRPlayResourceUpdateProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };
+		7C357CD2EEE6358B3B5E567AF3AC6858 /* MKRBTRadioControlManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 0360E8B6D9FF6AFF920DCDCE8015B591 /* MKRBTRadioControlManager.h */; settings = {ATTRIBUTES = (Project, ); }; };
+		8496E6EEE04B4008A8C2035F447CC554 /* MKRRadioResorce.m in Sources */ = {isa = PBXBuildFile; fileRef = 549E5EAA95251A4C759E67C59D9126EC /* MKRRadioResorce.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+		8543951AB998652071F80DBF7C28240B /* MKRPlayResourceStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 406924AD85E05D6889D66F97EFF71577 /* MKRPlayResourceStatus.h */; settings = {ATTRIBUTES = (Project, ); }; };
+		91EFCF638843A598F5E762373B6FCCD8 /* MKRRadioManager-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 875D9F386D89009D225197B4A1109ACA /* MKRRadioManager-dummy.m */; };
+		98E320C982CFB4E9C388EA6F884AE696 /* Pods-MKRRadioManager_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D7CF56072B96161F75CE20E922BD8487 /* Pods-MKRRadioManager_Tests-dummy.m */; };
+		9C29FE292CAFD44CB528865EDB3B8312 /* MKRRadioResorce.h in Headers */ = {isa = PBXBuildFile; fileRef = 1038855BBD902A57F8ED722D28464983 /* MKRRadioResorce.h */; settings = {ATTRIBUTES = (Project, ); }; };
+		A553D8F295C8CC32244AFFCD7BFCB742 /* MKRRadioPlayControlManager.h in Headers */ = {isa = PBXBuildFile; fileRef = B26EADC384393417061F9619299B29BE /* MKRRadioPlayControlManager.h */; settings = {ATTRIBUTES = (Project, ); }; };
+		B4AC6D28264C8F342AACBDAD7FD1FD33 /* MKRWIFIRadioControlManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 33088341C1A1E0BC7152D37D236A9032 /* MKRWIFIRadioControlManager.h */; settings = {ATTRIBUTES = (Project, ); }; };
+		C35876E67A459FFEA7A68E6F0D92A1F7 /* MKRPlayResourceStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = EE4CA692B0AA8098AF3438F8FB2B8CA2 /* MKRPlayResourceStatus.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+		C646A5DD29ABC18FB763CC846E26F141 /* MKRWIFIDeviceManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 14E3281F77850F9DE3F6A749656E307F /* MKRWIFIDeviceManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+		D0BB2B2167CB270180ECEAF9DF100975 /* UIDevice+MKRRadioManagerAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = 60B57F7E247991A1CB8067F15DE15CC2 /* UIDevice+MKRRadioManagerAdd.h */; settings = {ATTRIBUTES = (Project, ); }; };
+		D5E33F73A931EB4EBC2542150DD488F6 /* MKRRadioResourceProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = F010182BF8409D426558693BCDF69379 /* MKRRadioResourceProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };
+		DB32948FC59DEA2949FF7118C7B57E59 /* MKRUPnPDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = B94CB6B8686BD964272F88B11351AC67 /* MKRUPnPDevice.h */; settings = {ATTRIBUTES = (Project, ); }; };
+		E376837917B000790D7F7986C68E15BD /* MKRUPnPDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = F38F87F227A8FC0D4743A1E86E0EEC99 /* MKRUPnPDevice.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+		EBD2C83F69E6823F4AC8C604DDA7CB55 /* MKRPlayControlProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 677C4A7E93791E8E2A40DEDA1C50D239 /* MKRPlayControlProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };
+		EFFC4FC9E592D75EE1FD5F595AF5AAFB /* MKRWIFIRadioControlManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 96D4818EEC2F01B15A0DF9371CC09BA6 /* MKRWIFIRadioControlManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+		322E3C99DB43221480A19E54E7C8CB59 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 176427A91D7FBE8FBD09CC427F0E0D95;
+			remoteInfo = "libAS-Control";
+		};
+		CACA4E40EC1F329128568E5ADC2C87C6 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 237EEFBCE41172495C503D5B90634B1E;
+			remoteInfo = "Pods-MKRRadioManager_Example";
+		};
+		D0FDD993311F00D9EA68251C007C3074 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 176427A91D7FBE8FBD09CC427F0E0D95;
+			remoteInfo = "libAS-Control";
+		};
+		E63FEE5248D55F54B476E0DB84487CFE /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 817E4D50E9FBF8DCF0B9358BFB3EA239;
+			remoteInfo = MKRRadioManager;
+		};
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+		0360E8B6D9FF6AFF920DCDCE8015B591 /* MKRBTRadioControlManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MKRBTRadioControlManager.h; sourceTree = "<group>"; };
+		04AED1516C7448E307FC2B445928E20A /* Pods-MKRRadioManager_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MKRRadioManager_Example-dummy.m"; sourceTree = "<group>"; };
+		05C600E5DE0A3BBC3510F9F62B5A8853 /* Pods-MKRRadioManager_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MKRRadioManager_Example.release.xcconfig"; sourceTree = "<group>"; };
+		0BB9CAFFEE21255B503D37DC62E7B4E0 /* libMKRRadioManager.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libMKRRadioManager.a; path = libMKRRadioManager.a; sourceTree = BUILT_PRODUCTS_DIR; };
+		1038855BBD902A57F8ED722D28464983 /* MKRRadioResorce.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MKRRadioResorce.h; path = MKRRadioManager/Classes/MKRRadioResorce.h; sourceTree = "<group>"; };
+		14E3281F77850F9DE3F6A749656E307F /* MKRWIFIDeviceManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MKRWIFIDeviceManager.m; sourceTree = "<group>"; };
+		20B421E559A89DFE1ED49D45C77CB4D1 /* openssl.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = openssl.framework; path = "libAS-Control/Classes/openssl.framework"; sourceTree = "<group>"; };
+		221903307F45CAD5285374714542595D /* MKRRadioManager-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MKRRadioManager-prefix.pch"; sourceTree = "<group>"; };
+		248D6C8C0AEF3D1E4D01A0B1E5057470 /* MKRAVPlayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MKRAVPlayer.m; sourceTree = "<group>"; };
+		2632A0BA530AC2F35D30C1C718DB0766 /* MKRRadioControlMaster.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MKRRadioControlMaster.h; path = MKRRadioManager/Classes/MKRRadioControlMaster.h; sourceTree = "<group>"; };
+		30306CB8640A29C69BB2C85D08311718 /* UIDevice+MKRRadioManagerAdd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "UIDevice+MKRRadioManagerAdd.m"; sourceTree = "<group>"; };
+		31C875FA5E9154CC02521A5000A4E5EF /* MKRM3UListModel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MKRM3UListModel.h; sourceTree = "<group>"; };
+		33088341C1A1E0BC7152D37D236A9032 /* MKRWIFIRadioControlManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MKRWIFIRadioControlManager.h; sourceTree = "<group>"; };
+		406924AD85E05D6889D66F97EFF71577 /* MKRPlayResourceStatus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MKRPlayResourceStatus.h; sourceTree = "<group>"; };
+		43992B8F0978434A64104A4F6C6F691C /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = "<group>"; };
+		460E39087576B3236F80743E4F3ADCE0 /* Pods-MKRRadioManager_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MKRRadioManager_Example.debug.xcconfig"; sourceTree = "<group>"; };
+		4F38B49394149F0ED5808599DA8A6E45 /* MKRWIFIDeviceManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MKRWIFIDeviceManager.h; sourceTree = "<group>"; };
+		549E5EAA95251A4C759E67C59D9126EC /* MKRRadioResorce.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MKRRadioResorce.m; path = MKRRadioManager/Classes/MKRRadioResorce.m; sourceTree = "<group>"; };
+		60B57F7E247991A1CB8067F15DE15CC2 /* UIDevice+MKRRadioManagerAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UIDevice+MKRRadioManagerAdd.h"; sourceTree = "<group>"; };
+		6735C5D81B32849E2323EE2D72CCC7B2 /* Pods-MKRRadioManager_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MKRRadioManager_Example-acknowledgements.plist"; sourceTree = "<group>"; };
+		677C4A7E93791E8E2A40DEDA1C50D239 /* MKRPlayControlProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MKRPlayControlProtocol.h; sourceTree = "<group>"; };
+		7BC88BA00721D201D8AF05E8069391B5 /* MKRAVPlayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MKRAVPlayer.h; sourceTree = "<group>"; };
+		7BE4A694CEB55A6344A8F58B9194FB69 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = "<group>"; };
+		7F6411A5C1FDB8DD5B593A9CCFDC8628 /* 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; };
+		83BE0B5AA49922EDC2F825E9E238E13D /* Pods-MKRRadioManager_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MKRRadioManager_Tests.debug.xcconfig"; sourceTree = "<group>"; };
+		84796DC5813A725BFE5242FBB691C887 /* libAS-Control.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = "libAS-Control.framework"; path = "libAS-Control/Classes/libAS-Control.framework"; sourceTree = "<group>"; };
+		875D9F386D89009D225197B4A1109ACA /* MKRRadioManager-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MKRRadioManager-dummy.m"; sourceTree = "<group>"; };
+		8D6F26858DFB9CBD4099D334413041F3 /* NSString+MKRRadioManagerAdd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NSString+MKRRadioManagerAdd.m"; sourceTree = "<group>"; };
+		90D81577586A41A5AA297C3041BB1AD2 /* libUPNP.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = libUPNP.framework; path = "libAS-Control/Classes/libUPNP.framework"; sourceTree = "<group>"; };
+		944B75BDAD38EA0BEAE4DD0F2A523D4C /* MKRM3UListModel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MKRM3UListModel.m; sourceTree = "<group>"; };
+		955A4AA263A30685A72788E69DE02A4F /* Pods-MKRRadioManager_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MKRRadioManager_Tests-acknowledgements.plist"; sourceTree = "<group>"; };
+		96D4818EEC2F01B15A0DF9371CC09BA6 /* MKRWIFIRadioControlManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MKRWIFIRadioControlManager.m; sourceTree = "<group>"; };
+		96E55B6C74255CA1F98782C59FAB97A4 /* Pods-MKRRadioManager_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MKRRadioManager_Tests-acknowledgements.markdown"; sourceTree = "<group>"; };
+		9AE479EC49D794250F91ED848403DC5E /* MKRRadioManager.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MKRRadioManager.xcconfig; sourceTree = "<group>"; };
+		9D36A6FE4AB88B4A333A933521275BC9 /* Pods-MKRRadioManager_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MKRRadioManager_Tests.release.xcconfig"; sourceTree = "<group>"; };
+		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; };
+		B26EADC384393417061F9619299B29BE /* MKRRadioPlayControlManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MKRRadioPlayControlManager.h; sourceTree = "<group>"; };
+		B94CB6B8686BD964272F88B11351AC67 /* MKRUPnPDevice.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MKRUPnPDevice.h; sourceTree = "<group>"; };
+		BF6C5FA07FC0D4E23E741C056A41A3DA /* MKRPlayResourceUpdateProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MKRPlayResourceUpdateProtocol.h; sourceTree = "<group>"; };
+		D1502FE232E0C3E63437F28404F0DC6A /* Pods-MKRRadioManager_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MKRRadioManager_Example-acknowledgements.markdown"; sourceTree = "<group>"; };
+		D7CF56072B96161F75CE20E922BD8487 /* Pods-MKRRadioManager_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MKRRadioManager_Tests-dummy.m"; sourceTree = "<group>"; };
+		E187F911AE17EA34148018D920F195A0 /* MKRRadioManager.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = MKRRadioManager.podspec; sourceTree = "<group>"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
+		E452DEBEAEC9DEFB3D974AE0B1F5ED2C /* MKRBTRadioControlManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MKRBTRadioControlManager.m; sourceTree = "<group>"; };
+		EDAB866E46F332DC88525D90E647CD4B /* libAS-Control.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "libAS-Control.xcconfig"; sourceTree = "<group>"; };
+		EE4CA692B0AA8098AF3438F8FB2B8CA2 /* MKRPlayResourceStatus.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MKRPlayResourceStatus.m; sourceTree = "<group>"; };
+		F010182BF8409D426558693BCDF69379 /* MKRRadioResourceProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MKRRadioResourceProtocol.h; sourceTree = "<group>"; };
+		F38F87F227A8FC0D4743A1E86E0EEC99 /* MKRUPnPDevice.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MKRUPnPDevice.m; sourceTree = "<group>"; };
+		F617BF96A5E8F758C7C116CC7FDCD430 /* MKRRadioControlMaster.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MKRRadioControlMaster.m; path = MKRRadioManager/Classes/MKRRadioControlMaster.m; sourceTree = "<group>"; };
+		F81004F28F2A3CE32898DF5A83DCFB42 /* NSString+MKRRadioManagerAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSString+MKRRadioManagerAdd.h"; sourceTree = "<group>"; };
+		FEDE63D14980B80899321B74B039AE39 /* libPods-MKRRadioManager_Example.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-MKRRadioManager_Example.a"; path = "libPods-MKRRadioManager_Example.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		1EFCADD5C48163B19488BFFCFB8BD9DA /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		6B7E48B42A8572A36A06DF6AA870A12D /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		6BFE8A6569CDDDD29EA2469362B9EC00 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		011A1216DE327BDB80E5F71DD7369A44 /* Development Pods */ = {
+			isa = PBXGroup;
+			children = (
+				017DB9C2EBED1106CFCB2629F4CF22F8 /* MKRRadioManager */,
+			);
+			name = "Development Pods";
+			sourceTree = "<group>";
+		};
+		017DB9C2EBED1106CFCB2629F4CF22F8 /* MKRRadioManager */ = {
+			isa = PBXGroup;
+			children = (
+				2632A0BA530AC2F35D30C1C718DB0766 /* MKRRadioControlMaster.h */,
+				F617BF96A5E8F758C7C116CC7FDCD430 /* MKRRadioControlMaster.m */,
+				1038855BBD902A57F8ED722D28464983 /* MKRRadioResorce.h */,
+				549E5EAA95251A4C759E67C59D9126EC /* MKRRadioResorce.m */,
+				2A37AC3DEB44D5ABCCC02B5633B1A8C3 /* Category */,
+				93FC8AE95925A6DF08DF127D8975496A /* Headers */,
+				7A3C674942A4D3EB20E1922D020EDFB0 /* MKRAVPlayer */,
+				0F14B373BB1153D401F257B27FF93B18 /* MKRBTRadioManager */,
+				EE2E75E7FEAC921727BFC2B00F97ACE8 /* MKRWIFIDeviceManager */,
+				67611CD3C0DB48A524AF35C76FC89454 /* MKRWifiRadioManager */,
+				9109C4F68B2496C0A0B708A7662AB3FE /* Pod */,
+				10A4E2AC258B930AAA9283AE9F4AF07B /* Support Files */,
+			);
+			name = MKRRadioManager;
+			path = ../..;
+			sourceTree = "<group>";
+		};
+		0B21C33FCE0C78E442D9723AD83947FC /* Targets Support Files */ = {
+			isa = PBXGroup;
+			children = (
+				5F01D01CFE32DEBA5826B49EE7195A51 /* Pods-MKRRadioManager_Example */,
+				D11630159CE7728A2F7396B7AA12FD9A /* Pods-MKRRadioManager_Tests */,
+			);
+			name = "Targets Support Files";
+			sourceTree = "<group>";
+		};
+		0F14B373BB1153D401F257B27FF93B18 /* MKRBTRadioManager */ = {
+			isa = PBXGroup;
+			children = (
+				0360E8B6D9FF6AFF920DCDCE8015B591 /* MKRBTRadioControlManager.h */,
+				E452DEBEAEC9DEFB3D974AE0B1F5ED2C /* MKRBTRadioControlManager.m */,
+			);
+			name = MKRBTRadioManager;
+			path = MKRRadioManager/Classes/MKRBTRadioManager;
+			sourceTree = "<group>";
+		};
+		10A4E2AC258B930AAA9283AE9F4AF07B /* Support Files */ = {
+			isa = PBXGroup;
+			children = (
+				9AE479EC49D794250F91ED848403DC5E /* MKRRadioManager.xcconfig */,
+				875D9F386D89009D225197B4A1109ACA /* MKRRadioManager-dummy.m */,
+				221903307F45CAD5285374714542595D /* MKRRadioManager-prefix.pch */,
+			);
+			name = "Support Files";
+			path = "Example/Pods/Target Support Files/MKRRadioManager";
+			sourceTree = "<group>";
+		};
+		2A37AC3DEB44D5ABCCC02B5633B1A8C3 /* Category */ = {
+			isa = PBXGroup;
+			children = (
+				F81004F28F2A3CE32898DF5A83DCFB42 /* NSString+MKRRadioManagerAdd.h */,
+				8D6F26858DFB9CBD4099D334413041F3 /* NSString+MKRRadioManagerAdd.m */,
+				60B57F7E247991A1CB8067F15DE15CC2 /* UIDevice+MKRRadioManagerAdd.h */,
+				30306CB8640A29C69BB2C85D08311718 /* UIDevice+MKRRadioManagerAdd.m */,
+			);
+			name = Category;
+			path = MKRRadioManager/Classes/Category;
+			sourceTree = "<group>";
+		};
+		453202A8AB343905F5CA15A3A58D87D7 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				0BB9CAFFEE21255B503D37DC62E7B4E0 /* libMKRRadioManager.a */,
+				FEDE63D14980B80899321B74B039AE39 /* libPods-MKRRadioManager_Example.a */,
+				7F6411A5C1FDB8DD5B593A9CCFDC8628 /* libPods-MKRRadioManager_Tests.a */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		48DC6D8CD8762F7B78959151BF50D55A /* Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				84796DC5813A725BFE5242FBB691C887 /* libAS-Control.framework */,
+				90D81577586A41A5AA297C3041BB1AD2 /* libUPNP.framework */,
+				20B421E559A89DFE1ED49D45C77CB4D1 /* openssl.framework */,
+			);
+			name = Frameworks;
+			sourceTree = "<group>";
+		};
+		5F01D01CFE32DEBA5826B49EE7195A51 /* Pods-MKRRadioManager_Example */ = {
+			isa = PBXGroup;
+			children = (
+				D1502FE232E0C3E63437F28404F0DC6A /* Pods-MKRRadioManager_Example-acknowledgements.markdown */,
+				6735C5D81B32849E2323EE2D72CCC7B2 /* Pods-MKRRadioManager_Example-acknowledgements.plist */,
+				04AED1516C7448E307FC2B445928E20A /* Pods-MKRRadioManager_Example-dummy.m */,
+				460E39087576B3236F80743E4F3ADCE0 /* Pods-MKRRadioManager_Example.debug.xcconfig */,
+				05C600E5DE0A3BBC3510F9F62B5A8853 /* Pods-MKRRadioManager_Example.release.xcconfig */,
+			);
+			name = "Pods-MKRRadioManager_Example";
+			path = "Target Support Files/Pods-MKRRadioManager_Example";
+			sourceTree = "<group>";
+		};
+		67611CD3C0DB48A524AF35C76FC89454 /* MKRWifiRadioManager */ = {
+			isa = PBXGroup;
+			children = (
+				33088341C1A1E0BC7152D37D236A9032 /* MKRWIFIRadioControlManager.h */,
+				96D4818EEC2F01B15A0DF9371CC09BA6 /* MKRWIFIRadioControlManager.m */,
+			);
+			name = MKRWifiRadioManager;
+			path = MKRRadioManager/Classes/MKRWifiRadioManager;
+			sourceTree = "<group>";
+		};
+		7A3C674942A4D3EB20E1922D020EDFB0 /* MKRAVPlayer */ = {
+			isa = PBXGroup;
+			children = (
+				7BC88BA00721D201D8AF05E8069391B5 /* MKRAVPlayer.h */,
+				248D6C8C0AEF3D1E4D01A0B1E5057470 /* MKRAVPlayer.m */,
+				406924AD85E05D6889D66F97EFF71577 /* MKRPlayResourceStatus.h */,
+				EE4CA692B0AA8098AF3438F8FB2B8CA2 /* MKRPlayResourceStatus.m */,
+			);
+			name = MKRAVPlayer;
+			path = MKRRadioManager/Classes/MKRAVPlayer;
+			sourceTree = "<group>";
+		};
+		9109C4F68B2496C0A0B708A7662AB3FE /* Pod */ = {
+			isa = PBXGroup;
+			children = (
+				43992B8F0978434A64104A4F6C6F691C /* LICENSE */,
+				E187F911AE17EA34148018D920F195A0 /* MKRRadioManager.podspec */,
+				7BE4A694CEB55A6344A8F58B9194FB69 /* README.md */,
+			);
+			name = Pod;
+			sourceTree = "<group>";
+		};
+		93FC8AE95925A6DF08DF127D8975496A /* Headers */ = {
+			isa = PBXGroup;
+			children = (
+				677C4A7E93791E8E2A40DEDA1C50D239 /* MKRPlayControlProtocol.h */,
+				BF6C5FA07FC0D4E23E741C056A41A3DA /* MKRPlayResourceUpdateProtocol.h */,
+				B26EADC384393417061F9619299B29BE /* MKRRadioPlayControlManager.h */,
+				F010182BF8409D426558693BCDF69379 /* MKRRadioResourceProtocol.h */,
+			);
+			name = Headers;
+			path = MKRRadioManager/Classes/Headers;
+			sourceTree = "<group>";
+		};
+		9AD90FC67711A04416BFDDF68EC39CB6 /* Support Files */ = {
+			isa = PBXGroup;
+			children = (
+				EDAB866E46F332DC88525D90E647CD4B /* libAS-Control.xcconfig */,
+			);
+			name = "Support Files";
+			path = "../Target Support Files/libAS-Control";
+			sourceTree = "<group>";
+		};
+		BBE6DCE343B0852D70A51B761203EF78 /* Pods */ = {
+			isa = PBXGroup;
+			children = (
+				D09015795F5CA6ACD3D91BDE2CFE8746 /* libAS-Control */,
+			);
+			name = Pods;
+			sourceTree = "<group>";
+		};
+		CF1408CF629C7361332E53B88F7BD30C = {
+			isa = PBXGroup;
+			children = (
+				9D940727FF8FB9C785EB98E56350EF41 /* Podfile */,
+				011A1216DE327BDB80E5F71DD7369A44 /* Development Pods */,
+				D89477F20FB1DE18A04690586D7808C4 /* Frameworks */,
+				BBE6DCE343B0852D70A51B761203EF78 /* Pods */,
+				453202A8AB343905F5CA15A3A58D87D7 /* Products */,
+				0B21C33FCE0C78E442D9723AD83947FC /* Targets Support Files */,
+			);
+			sourceTree = "<group>";
+		};
+		D09015795F5CA6ACD3D91BDE2CFE8746 /* libAS-Control */ = {
+			isa = PBXGroup;
+			children = (
+				48DC6D8CD8762F7B78959151BF50D55A /* Frameworks */,
+				9AD90FC67711A04416BFDDF68EC39CB6 /* Support Files */,
+			);
+			name = "libAS-Control";
+			path = "libAS-Control";
+			sourceTree = "<group>";
+		};
+		D11630159CE7728A2F7396B7AA12FD9A /* Pods-MKRRadioManager_Tests */ = {
+			isa = PBXGroup;
+			children = (
+				96E55B6C74255CA1F98782C59FAB97A4 /* Pods-MKRRadioManager_Tests-acknowledgements.markdown */,
+				955A4AA263A30685A72788E69DE02A4F /* Pods-MKRRadioManager_Tests-acknowledgements.plist */,
+				D7CF56072B96161F75CE20E922BD8487 /* Pods-MKRRadioManager_Tests-dummy.m */,
+				83BE0B5AA49922EDC2F825E9E238E13D /* Pods-MKRRadioManager_Tests.debug.xcconfig */,
+				9D36A6FE4AB88B4A333A933521275BC9 /* Pods-MKRRadioManager_Tests.release.xcconfig */,
+			);
+			name = "Pods-MKRRadioManager_Tests";
+			path = "Target Support Files/Pods-MKRRadioManager_Tests";
+			sourceTree = "<group>";
+		};
+		D89477F20FB1DE18A04690586D7808C4 /* Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			name = Frameworks;
+			sourceTree = "<group>";
+		};
+		EE2E75E7FEAC921727BFC2B00F97ACE8 /* MKRWIFIDeviceManager */ = {
+			isa = PBXGroup;
+			children = (
+				31C875FA5E9154CC02521A5000A4E5EF /* MKRM3UListModel.h */,
+				944B75BDAD38EA0BEAE4DD0F2A523D4C /* MKRM3UListModel.m */,
+				B94CB6B8686BD964272F88B11351AC67 /* MKRUPnPDevice.h */,
+				F38F87F227A8FC0D4743A1E86E0EEC99 /* MKRUPnPDevice.m */,
+				4F38B49394149F0ED5808599DA8A6E45 /* MKRWIFIDeviceManager.h */,
+				14E3281F77850F9DE3F6A749656E307F /* MKRWIFIDeviceManager.m */,
+			);
+			name = MKRWIFIDeviceManager;
+			path = MKRRadioManager/Classes/MKRWIFIDeviceManager;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+		1BCC1778584E5E7577FF7D2FB8766A35 /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				18301444BF8A25DBB9DF450B37FA5DF8 /* MKRAVPlayer.h in Headers */,
+				7C357CD2EEE6358B3B5E567AF3AC6858 /* MKRBTRadioControlManager.h in Headers */,
+				63DE8CEF17DFE7C28F61455531C76779 /* MKRM3UListModel.h in Headers */,
+				EBD2C83F69E6823F4AC8C604DDA7CB55 /* MKRPlayControlProtocol.h in Headers */,
+				8543951AB998652071F80DBF7C28240B /* MKRPlayResourceStatus.h in Headers */,
+				7AC2AA8E4E2A62D77D7A975E4F37FA9C /* MKRPlayResourceUpdateProtocol.h in Headers */,
+				3F3416F3484064DDB4541F9D0A2E5C12 /* MKRRadioControlMaster.h in Headers */,
+				A553D8F295C8CC32244AFFCD7BFCB742 /* MKRRadioPlayControlManager.h in Headers */,
+				9C29FE292CAFD44CB528865EDB3B8312 /* MKRRadioResorce.h in Headers */,
+				D5E33F73A931EB4EBC2542150DD488F6 /* MKRRadioResourceProtocol.h in Headers */,
+				DB32948FC59DEA2949FF7118C7B57E59 /* MKRUPnPDevice.h in Headers */,
+				5C856BB06E12CA03B034EF036E82C6F7 /* MKRWIFIDeviceManager.h in Headers */,
+				B4AC6D28264C8F342AACBDAD7FD1FD33 /* MKRWIFIRadioControlManager.h in Headers */,
+				598AC68150FA5ED78EDF7DFBFBB2A7E4 /* NSString+MKRRadioManagerAdd.h in Headers */,
+				D0BB2B2167CB270180ECEAF9DF100975 /* UIDevice+MKRRadioManagerAdd.h in Headers */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		3B3D2932910D6B97766F21D6060EE427 /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		5C3EE38A065A4B4239CCAAFF17BB3E65 /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXNativeTarget section */
+		237EEFBCE41172495C503D5B90634B1E /* Pods-MKRRadioManager_Example */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = D106ACAF25B07E9CFC1FC908BC260643 /* Build configuration list for PBXNativeTarget "Pods-MKRRadioManager_Example" */;
+			buildPhases = (
+				3B3D2932910D6B97766F21D6060EE427 /* Headers */,
+				8B65DFAB94B336E349630C72B131AA63 /* Sources */,
+				6B7E48B42A8572A36A06DF6AA870A12D /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				3A50B52B8F272FC2E9E8C0B574588EB4 /* PBXTargetDependency */,
+				578B7F0B00B6471F4ACB0669D0C5F544 /* PBXTargetDependency */,
+			);
+			name = "Pods-MKRRadioManager_Example";
+			productName = "Pods-MKRRadioManager_Example";
+			productReference = FEDE63D14980B80899321B74B039AE39 /* libPods-MKRRadioManager_Example.a */;
+			productType = "com.apple.product-type.library.static";
+		};
+		437AED5C219DE2C4C8AD815EAFF0D585 /* Pods-MKRRadioManager_Tests */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 758CFC41020D653D2AA36A9ACBD77AB1 /* Build configuration list for PBXNativeTarget "Pods-MKRRadioManager_Tests" */;
+			buildPhases = (
+				5C3EE38A065A4B4239CCAAFF17BB3E65 /* Headers */,
+				49D876C978E29185892987504848FC88 /* Sources */,
+				1EFCADD5C48163B19488BFFCFB8BD9DA /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				53384CBE0BDA5134847A9C6C2C7BD3DC /* PBXTargetDependency */,
+			);
+			name = "Pods-MKRRadioManager_Tests";
+			productName = "Pods-MKRRadioManager_Tests";
+			productReference = 7F6411A5C1FDB8DD5B593A9CCFDC8628 /* libPods-MKRRadioManager_Tests.a */;
+			productType = "com.apple.product-type.library.static";
+		};
+		817E4D50E9FBF8DCF0B9358BFB3EA239 /* MKRRadioManager */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = F5ABE93CBA249F098100E9CBBBC10F44 /* Build configuration list for PBXNativeTarget "MKRRadioManager" */;
+			buildPhases = (
+				1BCC1778584E5E7577FF7D2FB8766A35 /* Headers */,
+				E05BC24E20666A627484DA72D2EB789B /* Sources */,
+				6BFE8A6569CDDDD29EA2469362B9EC00 /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				16F93EDE55D0C3CAC805B956D2AA3F4C /* PBXTargetDependency */,
+			);
+			name = MKRRadioManager;
+			productName = MKRRadioManager;
+			productReference = 0BB9CAFFEE21255B503D37DC62E7B4E0 /* libMKRRadioManager.a */;
+			productType = "com.apple.product-type.library.static";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		BFDFE7DC352907FC980B868725387E98 /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastSwiftUpdateCheck = 0930;
+				LastUpgradeCheck = 0930;
+			};
+			buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+			);
+			mainGroup = CF1408CF629C7361332E53B88F7BD30C;
+			productRefGroup = 453202A8AB343905F5CA15A3A58D87D7 /* Products */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				176427A91D7FBE8FBD09CC427F0E0D95 /* libAS-Control */,
+				817E4D50E9FBF8DCF0B9358BFB3EA239 /* MKRRadioManager */,
+				237EEFBCE41172495C503D5B90634B1E /* Pods-MKRRadioManager_Example */,
+				437AED5C219DE2C4C8AD815EAFF0D585 /* Pods-MKRRadioManager_Tests */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+		49D876C978E29185892987504848FC88 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				98E320C982CFB4E9C388EA6F884AE696 /* Pods-MKRRadioManager_Tests-dummy.m in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		8B65DFAB94B336E349630C72B131AA63 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				202D27F8E230590486BFC89F2E56BB5D /* Pods-MKRRadioManager_Example-dummy.m in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		E05BC24E20666A627484DA72D2EB789B /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				57BF519E918C7EBEBE9B378A5C8A2B00 /* MKRAVPlayer.m in Sources */,
+				21673168F486937F4C325F0CAE2372F9 /* MKRBTRadioControlManager.m in Sources */,
+				68F58F44E296F746239546318DCDC9A5 /* MKRM3UListModel.m in Sources */,
+				C35876E67A459FFEA7A68E6F0D92A1F7 /* MKRPlayResourceStatus.m in Sources */,
+				2FF234B9E0F700AA0D809DD14C335422 /* MKRRadioControlMaster.m in Sources */,
+				91EFCF638843A598F5E762373B6FCCD8 /* MKRRadioManager-dummy.m in Sources */,
+				8496E6EEE04B4008A8C2035F447CC554 /* MKRRadioResorce.m in Sources */,
+				E376837917B000790D7F7986C68E15BD /* MKRUPnPDevice.m in Sources */,
+				C646A5DD29ABC18FB763CC846E26F141 /* MKRWIFIDeviceManager.m in Sources */,
+				EFFC4FC9E592D75EE1FD5F595AF5AAFB /* MKRWIFIRadioControlManager.m in Sources */,
+				4685BF0947A4EB10BF306010E2619525 /* NSString+MKRRadioManagerAdd.m in Sources */,
+				6D453DFFEBB4CAF5BA6570362A244339 /* UIDevice+MKRRadioManagerAdd.m in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+		16F93EDE55D0C3CAC805B956D2AA3F4C /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			name = "libAS-Control";
+			target = 176427A91D7FBE8FBD09CC427F0E0D95 /* libAS-Control */;
+			targetProxy = D0FDD993311F00D9EA68251C007C3074 /* PBXContainerItemProxy */;
+		};
+		3A50B52B8F272FC2E9E8C0B574588EB4 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			name = MKRRadioManager;
+			target = 817E4D50E9FBF8DCF0B9358BFB3EA239 /* MKRRadioManager */;
+			targetProxy = E63FEE5248D55F54B476E0DB84487CFE /* PBXContainerItemProxy */;
+		};
+		53384CBE0BDA5134847A9C6C2C7BD3DC /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			name = "Pods-MKRRadioManager_Example";
+			target = 237EEFBCE41172495C503D5B90634B1E /* Pods-MKRRadioManager_Example */;
+			targetProxy = CACA4E40EC1F329128568E5ADC2C87C6 /* PBXContainerItemProxy */;
+		};
+		578B7F0B00B6471F4ACB0669D0C5F544 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			name = "libAS-Control";
+			target = 176427A91D7FBE8FBD09CC427F0E0D95 /* libAS-Control */;
+			targetProxy = 322E3C99DB43221480A19E54E7C8CB59 /* PBXContainerItemProxy */;
+		};
+/* End PBXTargetDependency section */
+
+/* Begin XCBuildConfiguration section */
+		0F9DE41FC108FC05B463FCAC96ED8EF9 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_ANALYZER_NONNULL = YES;
+				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_ENABLE_OBJC_WEAK = YES;
+				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_COMMA = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INFINITE_RECURSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+				CLANG_WARN_STRICT_PROTOTYPES = YES;
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
+				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				COPY_PHASE_STRIP = NO;
+				DEBUG_INFORMATION_FORMAT = dwarf;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				ENABLE_TESTABILITY = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu11;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"POD_CONFIGURATION_DEBUG=1",
+					"DEBUG=1",
+					"$(inherited)",
+				);
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 9.2;
+				MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+				MTL_FAST_MATH = YES;
+				ONLY_ACTIVE_ARCH = YES;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				STRIP_INSTALLED_PRODUCT = NO;
+				SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
+				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+				SWIFT_VERSION = 4.2;
+				SYMROOT = "${SRCROOT}/../build";
+			};
+			name = Debug;
+		};
+		28261157A87550DEE1E10EA2D28DB761 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = 460E39087576B3236F80743E4F3ADCE0 /* Pods-MKRRadioManager_Example.debug.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";
+			};
+			name = Debug;
+		};
+		339A62E45BB2152A97CD350E96F2094B /* Release */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = EDAB866E46F332DC88525D90E647CD4B /* libAS-Control.xcconfig */;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				CODE_SIGN_IDENTITY = "iPhone Developer";
+				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+				SDKROOT = iphoneos;
+				TARGETED_DEVICE_FAMILY = "1,2";
+				VALIDATE_PRODUCT = YES;
+			};
+			name = Release;
+		};
+		463495E8933E95BC80C6AEFE98C60633 /* Release */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = 05C600E5DE0A3BBC3510F9F62B5A8853 /* 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;
+		};
+		4AE89AC6457728FBA2DEB4FB1B372398 /* Release */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = 9D36A6FE4AB88B4A333A933521275BC9 /* Pods-MKRRadioManager_Tests.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;
+		};
+		7CA2BE03D2BD1727EBC4221F8AE0BCA9 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = 9AE479EC49D794250F91ED848403DC5E /* MKRRadioManager.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/MKRRadioManager/MKRRadioManager-prefix.pch";
+				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+				OTHER_LDFLAGS = "";
+				OTHER_LIBTOOLFLAGS = "";
+				PRIVATE_HEADERS_FOLDER_PATH = "";
+				PRODUCT_MODULE_NAME = MKRRadioManager;
+				PRODUCT_NAME = MKRRadioManager;
+				PUBLIC_HEADERS_FOLDER_PATH = "";
+				SDKROOT = iphoneos;
+				SKIP_INSTALL = YES;
+				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
+				TARGETED_DEVICE_FAMILY = "1,2";
+			};
+			name = Debug;
+		};
+		88D3150831443093F28A58D803ABCDE4 /* Release */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = 9AE479EC49D794250F91ED848403DC5E /* MKRRadioManager.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/MKRRadioManager/MKRRadioManager-prefix.pch";
+				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+				OTHER_LDFLAGS = "";
+				OTHER_LIBTOOLFLAGS = "";
+				PRIVATE_HEADERS_FOLDER_PATH = "";
+				PRODUCT_MODULE_NAME = MKRRadioManager;
+				PRODUCT_NAME = MKRRadioManager;
+				PUBLIC_HEADERS_FOLDER_PATH = "";
+				SDKROOT = iphoneos;
+				SKIP_INSTALL = YES;
+				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
+				TARGETED_DEVICE_FAMILY = "1,2";
+				VALIDATE_PRODUCT = YES;
+			};
+			name = Release;
+		};
+		934C7493EB128783848124E69879A71D /* Debug */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = 83BE0B5AA49922EDC2F825E9E238E13D /* Pods-MKRRadioManager_Tests.debug.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";
+			};
+			name = Debug;
+		};
+		B758FBEC27C09CD6E60596DDF8B1CDBB /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_ANALYZER_NONNULL = YES;
+				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_ENABLE_OBJC_WEAK = YES;
+				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_COMMA = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INFINITE_RECURSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+				CLANG_WARN_STRICT_PROTOTYPES = YES;
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
+				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				COPY_PHASE_STRIP = NO;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				ENABLE_NS_ASSERTIONS = NO;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu11;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"POD_CONFIGURATION_RELEASE=1",
+					"$(inherited)",
+				);
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 9.2;
+				MTL_ENABLE_DEBUG_INFO = NO;
+				MTL_FAST_MATH = YES;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				STRIP_INSTALLED_PRODUCT = NO;
+				SWIFT_COMPILATION_MODE = wholemodule;
+				SWIFT_OPTIMIZATION_LEVEL = "-O";
+				SWIFT_VERSION = 4.2;
+				SYMROOT = "${SRCROOT}/../build";
+			};
+			name = Release;
+		};
+		D3A3C861EE50802454B2A4B9921456F0 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = EDAB866E46F332DC88525D90E647CD4B /* libAS-Control.xcconfig */;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				CODE_SIGN_IDENTITY = "iPhone Developer";
+				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+				SDKROOT = iphoneos;
+				TARGETED_DEVICE_FAMILY = "1,2";
+			};
+			name = Debug;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				0F9DE41FC108FC05B463FCAC96ED8EF9 /* Debug */,
+				B758FBEC27C09CD6E60596DDF8B1CDBB /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		758CFC41020D653D2AA36A9ACBD77AB1 /* Build configuration list for PBXNativeTarget "Pods-MKRRadioManager_Tests" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				934C7493EB128783848124E69879A71D /* Debug */,
+				4AE89AC6457728FBA2DEB4FB1B372398 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		9FE39FD844737A9A33089B81D717C13E /* Build configuration list for PBXAggregateTarget "libAS-Control" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				D3A3C861EE50802454B2A4B9921456F0 /* Debug */,
+				339A62E45BB2152A97CD350E96F2094B /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		D106ACAF25B07E9CFC1FC908BC260643 /* Build configuration list for PBXNativeTarget "Pods-MKRRadioManager_Example" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				28261157A87550DEE1E10EA2D28DB761 /* Debug */,
+				463495E8933E95BC80C6AEFE98C60633 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		F5ABE93CBA249F098100E9CBBBC10F44 /* Build configuration list for PBXNativeTarget "MKRRadioManager" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				7CA2BE03D2BD1727EBC4221F8AE0BCA9 /* Debug */,
+				88D3150831443093F28A58D803ABCDE4 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+}

+ 26 - 0
Example/Pods/Target Support Files/MKRRadioManager/MKRRadioManager-Info.plist

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

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

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

+ 12 - 0
Example/Pods/Target Support Files/MKRRadioManager/MKRRadioManager-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
+

+ 16 - 0
Example/Pods/Target Support Files/MKRRadioManager/MKRRadioManager-umbrella.h

@@ -0,0 +1,16 @@
+#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
+
+
+FOUNDATION_EXPORT double MKRRadioManagerVersionNumber;
+FOUNDATION_EXPORT const unsigned char MKRRadioManagerVersionString[];
+

+ 6 - 0
Example/Pods/Target Support Files/MKRRadioManager/MKRRadioManager.modulemap

@@ -0,0 +1,6 @@
+framework module MKRRadioManager {
+  umbrella header "MKRRadioManager-umbrella.h"
+
+  export *
+  module * { export * }
+}

+ 10 - 0
Example/Pods/Target Support Files/MKRRadioManager/MKRRadioManager.xcconfig

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

+ 26 - 0
Example/Pods/Target Support Files/Pods-MKRRadioManager_Example/Pods-MKRRadioManager_Example-Info.plist

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

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

@@ -0,0 +1,49 @@
+# Acknowledgements
+This application makes use of the following third party libraries:
+
+## MKRRadioManager
+
+Copyright (c) 2019 yyqxiaoyin <357491060@qq.com>
+
+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.
+
+
+## libAS-Control
+
+Copyright (c) 2018 yyqxiaoyin <357491060@qq.com>
+
+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

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

@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>PreferenceSpecifiers</key>
+	<array>
+		<dict>
+			<key>FooterText</key>
+			<string>This application makes use of the following third party libraries:</string>
+			<key>Title</key>
+			<string>Acknowledgements</string>
+			<key>Type</key>
+			<string>PSGroupSpecifier</string>
+		</dict>
+		<dict>
+			<key>FooterText</key>
+			<string>Copyright (c) 2019 yyqxiaoyin &lt;357491060@qq.com&gt;
+
+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>MKRRadioManager</string>
+			<key>Type</key>
+			<string>PSGroupSpecifier</string>
+		</dict>
+		<dict>
+			<key>FooterText</key>
+			<string>Copyright (c) 2018 yyqxiaoyin &lt;357491060@qq.com&gt;
+
+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>libAS-Control</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>
+			<key>Type</key>
+			<string>PSGroupSpecifier</string>
+		</dict>
+	</array>
+	<key>StringsTable</key>
+	<string>Acknowledgements</string>
+	<key>Title</key>
+	<string>Acknowledgements</string>
+</dict>
+</plist>

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

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

+ 163 - 0
Example/Pods/Target Support Files/Pods-MKRRadioManager_Example/Pods-MKRRadioManager_Example-frameworks.sh

@@ -0,0 +1,163 @@
+#!/bin/sh
+set -e
+set -u
+set -o pipefail
+
+function on_error {
+  echo "$(realpath -mq "${0}"):$1: error: Unexpected failure"
+}
+trap 'on_error $LINENO' ERR
+
+if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then
+  # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy
+  # frameworks to, so exit 0 (signalling the script phase was successful).
+  exit 0
+fi
+
+echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
+mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
+
+COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}"
+SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}"
+
+# Used as a return value for each invocation of `strip_invalid_archs` function.
+STRIP_BINARY_RETVAL=0
+
+# This protects against multiple targets copying the same framework dependency at the same time. The solution
+# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html
+RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????")
+
+# Copies and strips a vendored framework
+install_framework()
+{
+  if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then
+    local source="${BUILT_PRODUCTS_DIR}/$1"
+  elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then
+    local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")"
+  elif [ -r "$1" ]; then
+    local source="$1"
+  fi
+
+  local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
+
+  if [ -L "${source}" ]; then
+    echo "Symlinked..."
+    source="$(readlink "${source}")"
+  fi
+
+  # Use filter instead of exclude so missing patterns don't throw errors.
+  echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\""
+  rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}"
+
+  local basename
+  basename="$(basename -s .framework "$1")"
+  binary="${destination}/${basename}.framework/${basename}"
+
+  if ! [ -r "$binary" ]; then
+    binary="${destination}/${basename}"
+  elif [ -L "${binary}" ]; then
+    echo "Destination binary is symlinked..."
+    dirname="$(dirname "${binary}")"
+    binary="${dirname}/$(readlink "${binary}")"
+  fi
+
+  # Strip invalid architectures so "fat" simulator / device frameworks work on device
+  if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then
+    strip_invalid_archs "$binary"
+  fi
+
+  # Resign the code if required by the build settings to avoid unstable apps
+  code_sign_if_enabled "${destination}/$(basename "$1")"
+
+  # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7.
+  if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then
+    local swift_runtime_libs
+    swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u)
+    for lib in $swift_runtime_libs; do
+      echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\""
+      rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}"
+      code_sign_if_enabled "${destination}/${lib}"
+    done
+  fi
+}
+
+# Copies and strips a vendored dSYM
+install_dsym() {
+  local source="$1"
+  if [ -r "$source" ]; then
+    # Copy the dSYM into a the targets temp dir.
+    echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\""
+    rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}"
+
+    local basename
+    basename="$(basename -s .framework.dSYM "$source")"
+    binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}"
+
+    # Strip invalid architectures so "fat" simulator / device frameworks work on device
+    if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then
+      strip_invalid_archs "$binary"
+    fi
+
+    if [[ $STRIP_BINARY_RETVAL == 1 ]]; then
+      # Move the stripped file into its final destination.
+      echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\""
+      rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}"
+    else
+      # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing.
+      touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM"
+    fi
+  fi
+}
+
+# Signs a framework with the provided identity
+code_sign_if_enabled() {
+  if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then
+    # Use the current code_sign_identity
+    echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}"
+    local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'"
+
+    if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
+      code_sign_cmd="$code_sign_cmd &"
+    fi
+    echo "$code_sign_cmd"
+    eval "$code_sign_cmd"
+  fi
+}
+
+# Strip invalid architectures
+strip_invalid_archs() {
+  binary="$1"
+  # Get architectures for current target binary
+  binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)"
+  # Intersect them with the architectures we are building for
+  intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)"
+  # If there are no archs supported by this binary then warn the user
+  if [[ -z "$intersected_archs" ]]; then
+    echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)."
+    STRIP_BINARY_RETVAL=0
+    return
+  fi
+  stripped=""
+  for arch in $binary_archs; do
+    if ! [[ "${ARCHS}" == *"$arch"* ]]; then
+      # Strip non-valid architectures in-place
+      lipo -remove "$arch" -output "$binary" "$binary"
+      stripped="$stripped $arch"
+    fi
+  done
+  if [[ "$stripped" ]]; then
+    echo "Stripped $binary of architectures:$stripped"
+  fi
+  STRIP_BINARY_RETVAL=1
+}
+
+
+if [[ "$CONFIGURATION" == "Debug" ]]; then
+  install_framework "${BUILT_PRODUCTS_DIR}/MKRRadioManager/MKRRadioManager.framework"
+fi
+if [[ "$CONFIGURATION" == "Release" ]]; then
+  install_framework "${BUILT_PRODUCTS_DIR}/MKRRadioManager/MKRRadioManager.framework"
+fi
+if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
+  wait
+fi

+ 16 - 0
Example/Pods/Target Support Files/Pods-MKRRadioManager_Example/Pods-MKRRadioManager_Example-umbrella.h

@@ -0,0 +1,16 @@
+#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
+
+
+FOUNDATION_EXPORT double Pods_MKRRadioManager_ExampleVersionNumber;
+FOUNDATION_EXPORT const unsigned char Pods_MKRRadioManager_ExampleVersionString[];
+

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

@@ -0,0 +1,10 @@
+FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/libAS-Control/libAS-Control/Classes"
+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}/libAS-Control/libAS-Control/Classes"
+OTHER_LDFLAGS = $(inherited) -ObjC -l"MKRRadioManager" -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}/.
+PODS_ROOT = ${SRCROOT}/Pods

+ 6 - 0
Example/Pods/Target Support Files/Pods-MKRRadioManager_Example/Pods-MKRRadioManager_Example.modulemap

@@ -0,0 +1,6 @@
+framework module Pods_MKRRadioManager_Example {
+  umbrella header "Pods-MKRRadioManager_Example-umbrella.h"
+
+  export *
+  module * { export * }
+}

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

@@ -0,0 +1,10 @@
+FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/libAS-Control/libAS-Control/Classes"
+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}/libAS-Control/libAS-Control/Classes"
+OTHER_LDFLAGS = $(inherited) -ObjC -l"MKRRadioManager" -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}/.
+PODS_ROOT = ${SRCROOT}/Pods

+ 26 - 0
Example/Pods/Target Support Files/Pods-MKRRadioManager_Tests/Pods-MKRRadioManager_Tests-Info.plist

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

+ 3 - 0
Example/Pods/Target Support Files/Pods-MKRRadioManager_Tests/Pods-MKRRadioManager_Tests-acknowledgements.markdown

@@ -0,0 +1,3 @@
+# Acknowledgements
+This application makes use of the following third party libraries:
+Generated by CocoaPods - https://cocoapods.org

+ 29 - 0
Example/Pods/Target Support Files/Pods-MKRRadioManager_Tests/Pods-MKRRadioManager_Tests-acknowledgements.plist

@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>PreferenceSpecifiers</key>
+	<array>
+		<dict>
+			<key>FooterText</key>
+			<string>This application makes use of the following third party libraries:</string>
+			<key>Title</key>
+			<string>Acknowledgements</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>
+			<key>Type</key>
+			<string>PSGroupSpecifier</string>
+		</dict>
+	</array>
+	<key>StringsTable</key>
+	<string>Acknowledgements</string>
+	<key>Title</key>
+	<string>Acknowledgements</string>
+</dict>
+</plist>

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

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

+ 16 - 0
Example/Pods/Target Support Files/Pods-MKRRadioManager_Tests/Pods-MKRRadioManager_Tests-umbrella.h

@@ -0,0 +1,16 @@
+#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
+
+
+FOUNDATION_EXPORT double Pods_MKRRadioManager_TestsVersionNumber;
+FOUNDATION_EXPORT const unsigned char Pods_MKRRadioManager_TestsVersionString[];
+

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

@@ -0,0 +1,8 @@
+FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/libAS-Control/libAS-Control/Classes"
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MKRRadioManager"
+OTHER_LDFLAGS = $(inherited) -ObjC
+PODS_BUILD_DIR = ${BUILD_DIR}
+PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
+PODS_ROOT = ${SRCROOT}/Pods

+ 6 - 0
Example/Pods/Target Support Files/Pods-MKRRadioManager_Tests/Pods-MKRRadioManager_Tests.modulemap

@@ -0,0 +1,6 @@
+framework module Pods_MKRRadioManager_Tests {
+  umbrella header "Pods-MKRRadioManager_Tests-umbrella.h"
+
+  export *
+  module * { export * }
+}

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

@@ -0,0 +1,8 @@
+FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/libAS-Control/libAS-Control/Classes"
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MKRRadioManager"
+OTHER_LDFLAGS = $(inherited) -ObjC
+PODS_BUILD_DIR = ${BUILD_DIR}
+PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
+PODS_ROOT = ${SRCROOT}/Pods

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

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

+ 19 - 0
Example/Pods/libAS-Control/LICENSE

@@ -0,0 +1,19 @@
+Copyright (c) 2018 yyqxiaoyin <357491060@qq.com>
+
+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.

+ 29 - 0
Example/Pods/libAS-Control/README.md

@@ -0,0 +1,29 @@
+# libAS-Control
+
+[![CI Status](https://img.shields.io/travis/yyqxiaoyin/libAS-Control.svg?style=flat)](https://travis-ci.org/yyqxiaoyin/libAS-Control)
+[![Version](https://img.shields.io/cocoapods/v/libAS-Control.svg?style=flat)](https://cocoapods.org/pods/libAS-Control)
+[![License](https://img.shields.io/cocoapods/l/libAS-Control.svg?style=flat)](https://cocoapods.org/pods/libAS-Control)
+[![Platform](https://img.shields.io/cocoapods/p/libAS-Control.svg?style=flat)](https://cocoapods.org/pods/libAS-Control)
+
+## Example
+
+To run the example project, clone the repo, and run `pod install` from the Example directory first.
+
+## Requirements
+
+## Installation
+
+libAS-Control is available through [CocoaPods](https://cocoapods.org). To install
+it, simply add the following line to your Podfile:
+
+```ruby
+pod 'libAS-Control'
+```
+
+## Author
+
+yyqxiaoyin, 357491060@qq.com
+
+## License
+
+libAS-Control is available under the MIT license. See the LICENSE file for more info.

文件差异内容过多而无法显示
+ 304 - 0
Example/Pods/libAS-Control/libAS-Control/Classes/libAS-Control.framework/Headers/ASControlTools.h


二进制
Example/Pods/libAS-Control/libAS-Control/Classes/libAS-Control.framework/Info.plist


二进制
Example/Pods/libAS-Control/libAS-Control/Classes/libAS-Control.framework/_CodeSignature/CodeDirectory


二进制
Example/Pods/libAS-Control/libAS-Control/Classes/libAS-Control.framework/_CodeSignature/CodeRequirements


二进制
Example/Pods/libAS-Control/libAS-Control/Classes/libAS-Control.framework/_CodeSignature/CodeRequirements-1


+ 117 - 0
Example/Pods/libAS-Control/libAS-Control/Classes/libAS-Control.framework/_CodeSignature/CodeResources

@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>files</key>
+	<dict>
+		<key>Headers/ASControlTools.h</key>
+		<data>
+		UUl3igN9p/QKLiGsyexZo1WFBX4=
+		</data>
+		<key>Info.plist</key>
+		<data>
+		9V6zM0JBlliHTbUR9SKQWwPLT0A=
+		</data>
+	</dict>
+	<key>files2</key>
+	<dict>
+		<key>Headers/ASControlTools.h</key>
+		<dict>
+			<key>hash</key>
+			<data>
+			UUl3igN9p/QKLiGsyexZo1WFBX4=
+			</data>
+			<key>hash2</key>
+			<data>
+			4OXqWnqCe6+e4IHD83/PgIPCWOSiAGHk9tia0rEuGmg=
+			</data>
+		</dict>
+	</dict>
+	<key>rules</key>
+	<dict>
+		<key>^.*</key>
+		<true/>
+		<key>^.*\.lproj/</key>
+		<dict>
+			<key>optional</key>
+			<true/>
+			<key>weight</key>
+			<real>1000</real>
+		</dict>
+		<key>^.*\.lproj/locversion.plist$</key>
+		<dict>
+			<key>omit</key>
+			<true/>
+			<key>weight</key>
+			<real>1100</real>
+		</dict>
+		<key>^Base\.lproj/</key>
+		<dict>
+			<key>weight</key>
+			<real>1010</real>
+		</dict>
+		<key>^version.plist$</key>
+		<true/>
+	</dict>
+	<key>rules2</key>
+	<dict>
+		<key>.*\.dSYM($|/)</key>
+		<dict>
+			<key>weight</key>
+			<real>11</real>
+		</dict>
+		<key>^(.*/)?\.DS_Store$</key>
+		<dict>
+			<key>omit</key>
+			<true/>
+			<key>weight</key>
+			<real>2000</real>
+		</dict>
+		<key>^.*</key>
+		<true/>
+		<key>^.*\.lproj/</key>
+		<dict>
+			<key>optional</key>
+			<true/>
+			<key>weight</key>
+			<real>1000</real>
+		</dict>
+		<key>^.*\.lproj/locversion.plist$</key>
+		<dict>
+			<key>omit</key>
+			<true/>
+			<key>weight</key>
+			<real>1100</real>
+		</dict>
+		<key>^Base\.lproj/</key>
+		<dict>
+			<key>weight</key>
+			<real>1010</real>
+		</dict>
+		<key>^Info\.plist$</key>
+		<dict>
+			<key>omit</key>
+			<true/>
+			<key>weight</key>
+			<real>20</real>
+		</dict>
+		<key>^PkgInfo$</key>
+		<dict>
+			<key>omit</key>
+			<true/>
+			<key>weight</key>
+			<real>20</real>
+		</dict>
+		<key>^embedded\.provisionprofile$</key>
+		<dict>
+			<key>weight</key>
+			<real>20</real>
+		</dict>
+		<key>^version\.plist$</key>
+		<dict>
+			<key>weight</key>
+			<real>20</real>
+		</dict>
+	</dict>
+</dict>
+</plist>

MKRRadioManager/Classes/.gitkeep → Example/Pods/libAS-Control/libAS-Control/Classes/libAS-Control.framework/_CodeSignature/CodeSignature


二进制
Example/Pods/libAS-Control/libAS-Control/Classes/libAS-Control.framework/libAS-Control


+ 131 - 0
Example/Pods/libAS-Control/libAS-Control/Classes/libUPNP.framework/Headers/FreeList.h

@@ -0,0 +1,131 @@
+/*******************************************************************************
+ *
+ * Copyright (c) 2000-2003 Intel Corporation 
+ * All rights reserved. 
+ *
+ * Redistribution and use in source and binary forms, with or without 
+ * modification, are permitted provided that the following conditions are met: 
+ *
+ * * Redistributions of source code must retain the above copyright notice, 
+ * this list of conditions and the following disclaimer. 
+ * * Redistributions in binary form must reproduce the above copyright notice, 
+ * this list of conditions and the following disclaimer in the documentation 
+ * and/or other materials provided with the distribution. 
+ * * Neither name of Intel Corporation nor the names of its contributors 
+ * may be used to endorse or promote products derived from this software 
+ * without specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR 
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************/
+
+#ifndef FREE_LIST_H
+#define FREE_LIST_H
+
+/*!
+ * \file
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ithread.h"
+
+#include <errno.h>
+
+/*!
+ * Free list node. points to next free item.
+ * Memory for node is borrowed from allocated items.
+ * \internal
+ */
+typedef struct FREELISTNODE
+{
+	struct FREELISTNODE *next;
+} FreeListNode;
+
+/*!
+ * Stores head and size of free list, as well as mutex for protection.
+ * \internal
+ */
+typedef struct FREELIST
+{
+	FreeListNode *head;
+	size_t element_size;
+ 	int maxFreeListLength;
+	int freeListLength;
+} FreeList;
+
+/*!
+ * \brief Initializes Free List.
+ *
+ * Must be called first and only once for FreeList.
+ *
+ * \return:
+ *	\li \c 0 on success.
+ *	\li \c EINVAL on failure.
+ */
+int FreeListInit(
+	/*! Must be valid, non null, pointer to a linked list. */
+	FreeList *free_list,
+	/*! Size of elements to store in free list. */
+	size_t elementSize,
+	/*! Max size that the free list can grow to before returning
+	 * memory to O.S. */
+	int maxFreeListLength);
+
+/*!
+ * \brief Allocates chunk of set size.
+ *
+ * If a free item is available in the list, returnes the stored item,
+ * otherwise calls the O.S. to allocate memory.
+ *
+ * \return Non NULL on success. NULL on failure.
+ */
+void *FreeListAlloc(
+	/*! Must be valid, non null, pointer to a linked list. */
+	FreeList *free_list);
+
+/*!
+ * \brief Returns an item to the Free List.
+ *
+ * If the free list is smaller than the max size then adds the item to the
+ * free list, otherwise returns the item to the O.S.
+ *
+ * \return:
+ *	\li \c 0 on success.
+ *	\li \c EINVAL on failure.
+ */
+int FreeListFree(
+	/*! Must be valid, non null, pointer to a free list. */
+	FreeList *free_list,
+	/*! Must be a pointer allocated by FreeListAlloc. */
+	void *element);
+
+/*!
+ * \brief Releases the resources stored with the free list.
+ *
+ * \return:
+ *	\li \c 0 on success.
+ *	\li \c EINVAL on failure.
+ */
+int FreeListDestroy(
+	/*! Must be valid, non null, pointer to a linked list. */
+	FreeList *free_list);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* FREE_LIST_H */
+

+ 289 - 0
Example/Pods/libAS-Control/libAS-Control/Classes/libUPNP.framework/Headers/LinkedList.h

@@ -0,0 +1,289 @@
+/*******************************************************************************
+ *
+ * Copyright (c) 2000-2003 Intel Corporation 
+ * All rights reserved. 
+ *
+ * Redistribution and use in source and binary forms, with or without 
+ * modification, are permitted provided that the following conditions are met: 
+ *
+ * * Redistributions of source code must retain the above copyright notice, 
+ * this list of conditions and the following disclaimer. 
+ * * Redistributions in binary form must reproduce the above copyright notice, 
+ * this list of conditions and the following disclaimer in the documentation 
+ * and/or other materials provided with the distribution. 
+ * * Neither name of Intel Corporation nor the names of its contributors 
+ * may be used to endorse or promote products derived from this software 
+ * without specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR 
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************/
+
+#ifndef LINKED_LIST_H
+#define LINKED_LIST_H
+
+/*!
+ * \file
+ */
+
+#include "FreeList.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define EOUTOFMEM (-7 & 1<<29)
+
+#define FREELISTSIZE 100
+#define LIST_SUCCESS 1
+#define LIST_FAIL 0
+
+/*! Function for freeing list items. */
+typedef void (*free_function)(void *arg);
+
+/*! Function for comparing list items. Returns 1 if itemA==itemB */
+typedef int (*cmp_routine)(void *itemA,void *itemB);
+
+/*! Linked list node. Stores generic item and pointers to next and prev.
+ * \internal
+ */
+typedef struct LISTNODE
+{
+	struct LISTNODE *prev;
+	struct LISTNODE *next;
+	void *item;
+} ListNode;
+
+/*!
+ * Linked list (no protection).
+ *
+ * Because this is for internal use, parameters are NOT checked for validity.
+ * The first item of the list is stored at node: head->next
+ * The last item of the list is stored at node: tail->prev
+ * If head->next=tail, then list is empty.
+ * To iterate through the list:
+ *
+ *	LinkedList g;
+ *	ListNode *temp = NULL;
+ *	for (temp = ListHead(g);temp!=NULL;temp = ListNext(g,temp)) {
+ *	}
+ *
+ * \internal
+ */
+typedef struct LINKEDLIST
+{
+	/*! head, first item is stored at: head->next */
+	ListNode head;
+	/*! tail, last item is stored at: tail->prev  */
+	ListNode tail;
+	/*! size of list */
+	long size;
+	/*! free list to use */
+	FreeList freeNodeList;
+	/*! free function to use */
+	free_function free_func;
+	/*! compare function to use */
+	cmp_routine cmp_func;
+} LinkedList;
+
+/*!
+ * \brief Initializes LinkedList. Must be called first and only once for List.
+ * 
+ *  \return
+ *	\li \c 0 on success.
+ *	\li \c EOUTOFMEM on failure.
+ */
+int ListInit(
+	/*! Must be valid, non null, pointer to a linked list. */
+	LinkedList *list,
+	/*! Function used to compare items. (May be NULL). */
+	cmp_routine cmp_func,
+	/*! Function used to free items. (May be NULL). */
+	free_function free_func);
+
+/*!
+ * \brief Adds a node to the head of the list. Node gets immediately after
+ * list head.
+ *
+ *  Precondition:
+ *      The list has been initialized.
+ *
+ * \return The pointer to the ListNode on success, NULL on failure.
+ */
+ListNode *ListAddHead(
+	/*! Must be valid, non null, pointer to a linked list. */
+	LinkedList *list,
+	/*! Item to be added. */
+	void *item);
+
+/*!
+ * \brief Adds a node to the tail of the list. Node gets added immediately
+ * before list.tail.
+ *
+ * Precondition: The list has been initialized.
+ *
+ * \return The pointer to the ListNode on success, NULL on failure.
+ */
+ListNode *ListAddTail(
+	/*! Must be valid, non null, pointer to a linked list. */
+	LinkedList *list,
+	/*! Item to be added. */
+	void *item);
+
+/*!
+ * \brief Adds a node after the specified node. Node gets added immediately
+ * after bnode.
+ *
+ *  Precondition: The list has been initialized.
+ *
+ * \return The pointer to the ListNode on success, NULL on failure.
+ */
+ListNode *ListAddAfter(
+	/*! Must be valid, non null, pointer to a linked list. */
+	LinkedList *list,
+	/*! Item to be added. */
+	void *item,
+	/*! Node to add after. */
+	ListNode *bnode);
+
+/*!
+ * \brief Adds a node before the specified node. Node gets added immediately
+ * before anode.
+ *
+ * Precondition: The list has been initialized.
+ *
+ * \return The pointer to the ListNode on success, NULL on failure.
+ */
+ListNode *ListAddBefore(
+	/*! Must be valid, non null, pointer to a linked list. */
+	LinkedList *list,
+	/*! Item to be added. */
+	void *item,
+	/*! Node to add in front of. */
+	ListNode *anode);
+
+/*!
+ * \brief Removes a node from the list. The memory for the node is freed.
+ *
+ * Precondition: The list has been initialized.
+ *
+ * \return The pointer to the item stored in the node or NULL if the item
+ * is freed.
+ */
+void *ListDelNode(
+	/*! Must be valid, non null, pointer to a linked list. */
+	LinkedList *list,
+	/*! Node to delete. */
+	ListNode *dnode,
+	/*! if !0 then item is freed using free function. If 0 (or free
+	 * function is NULL) then item is not freed. */
+	int freeItem);
+
+/*!
+ * \brief Removes all memory associated with list nodes. Does not free
+ * LinkedList *list.
+ *
+ * Precondition: The list has been initialized.
+ *
+ * \return 0 on success, EINVAL on failure.
+ */
+int ListDestroy(
+	/*! Must be valid, non null, pointer to a linked list. */
+	LinkedList *list,
+	/*! if !0 then item is freed using free function. If 0 (or free
+	 * function is NULL) then item is not freed. */
+	int freeItem);
+
+/*!
+ * \brief Returns the head of the list.
+ *    
+ * Precondition: The list has been initialized.
+ *
+ * \return The head of the list. NULL if list is empty.
+ */
+ListNode *ListHead(
+	/*! Must be valid, non null, pointer to a linked list. */
+	LinkedList *list);
+
+/*!
+ * \brief Returns the tail of the list.
+ *    
+ * Precondition: The list has been initialized.
+ *
+ * \return The tail of the list. NULL if list is empty.
+ */
+ListNode *ListTail(
+	/*! Must be valid, non null, pointer to a linked list. */
+	LinkedList *list);
+
+/*!
+ * \brief Returns the next item in the list.
+ *    
+ * Precondition: The list has been initialized.
+ *
+ * \return The next item in the list. NULL if there are no more items in list.
+ */
+ListNode *ListNext(
+	/*! Must be valid, non null, pointer to a linked list. */
+	LinkedList *list,
+	/*! Node from the list. */
+	ListNode *node);
+
+/*!
+ * \brief Returns the previous item in the list.
+ *    
+ * Precondition: The list has been initialized.
+ *
+ * \return The previous item in the list. NULL if there are no more items in list.
+ */
+ListNode *ListPrev(
+	/*! Must be valid, non null, pointer to a linked list. */
+	LinkedList *list,
+	/*! Node from the list. */
+	ListNode *node);
+
+/*!
+ * \brief Finds the specified item in the list.
+ *
+ * Uses the compare function specified in ListInit. If compare function
+ * is NULL then compares items as pointers.
+ *
+ * Precondition: The list has been initialized.
+ *
+ * \return The node containing the item. NULL if no node contains the item.
+ */
+ListNode* ListFind(
+	/*! Must be valid, non null, pointer to a linked list. */
+	LinkedList *list,
+	/*! The node to start from, NULL if to start from beginning. */
+	ListNode *start,
+	/*! The item to search for. */
+	void *item);
+
+/*!
+ * \brief Returns the size of the list.
+ *
+ * Precondition: The list has been initialized.
+ *
+ * \return The number of items in the list.
+ */
+long ListSize(
+	/*! Must be valid, non null, pointer to a linked list. */
+	LinkedList* list);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LINKED_LIST_H */
+

+ 536 - 0
Example/Pods/libAS-Control/libAS-Control/Classes/libUPNP.framework/Headers/ThreadPool.h

@@ -0,0 +1,536 @@
+/*******************************************************************************
+ *
+ * Copyright (c) 2000-2003 Intel Corporation 
+ * All rights reserved. 
+ * Copyright (c) 2012 France Telecom All rights reserved. 
+ *
+ * Redistribution and use in source and binary forms, with or without 
+ * modification, are permitted provided that the following conditions are met: 
+ *
+ * * Redistributions of source code must retain the above copyright notice, 
+ * this list of conditions and the following disclaimer. 
+ * * Redistributions in binary form must reproduce the above copyright notice, 
+ * this list of conditions and the following disclaimer in the documentation 
+ * and/or other materials provided with the distribution. 
+ * * Neither name of Intel Corporation nor the names of its contributors 
+ * may be used to endorse or promote products derived from this software 
+ * without specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR 
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************/
+
+#ifndef THREADPOOL_H
+#define THREADPOOL_H
+
+/*!
+ * \file
+ */
+
+#include "FreeList.h"
+#include "ithread.h"
+#include "LinkedList.h"
+#include "UpnpInet.h"
+#include "UpnpGlobal.h" /* for UPNP_INLINE, EXPORT_SPEC */
+
+#include <errno.h>
+
+#ifdef WIN32
+	#include <time.h>
+	struct timezone
+	{
+		int  tz_minuteswest; /* minutes W of Greenwich */
+		int  tz_dsttime;     /* type of dst correction */
+	};
+	int gettimeofday(struct timeval *tv, struct timezone *tz);
+#else /* WIN32 */
+	#include <sys/param.h>
+	#include <sys/time.h> /* for gettimeofday() */
+	#if defined(__OSX__) || defined(__APPLE__) || defined(__NetBSD__)
+		#include <sys/resource.h>	/* for setpriority() */
+	#endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*! Size of job free list */
+#define JOBFREELISTSIZE 100
+
+#define INFINITE_THREADS -1
+
+#define EMAXTHREADS (-8 & 1<<29)
+
+/*! Invalid Policy */
+#define INVALID_POLICY (-9 & 1<<29)
+
+/*! Invalid JOB Id */
+#define INVALID_JOB_ID (-2 & 1<<29)
+
+typedef enum duration {
+	SHORT_TERM,
+	PERSISTENT
+} Duration;
+
+typedef enum priority {
+	LOW_PRIORITY,
+	MED_PRIORITY,
+	HIGH_PRIORITY
+} ThreadPriority;
+
+/*! default priority used by TPJobInit */
+#define DEFAULT_PRIORITY MED_PRIORITY
+
+/*! default minimum used by TPAttrInit */
+#define DEFAULT_MIN_THREADS 1
+
+/*! default max used by TPAttrInit */
+#define DEFAULT_MAX_THREADS 10
+
+/*! default stack size used by TPAttrInit */
+#define DEFAULT_STACK_SIZE 0u
+
+/*! default jobs per thread used by TPAttrInit */
+#define DEFAULT_JOBS_PER_THREAD 10
+
+/*! default starvation time used by TPAttrInit */
+#define DEFAULT_STARVATION_TIME	500
+
+/*! default idle time used by TPAttrInit */
+#define DEFAULT_IDLE_TIME 10 * 1000
+
+/*! default free routine used TPJobInit */
+#define DEFAULT_FREE_ROUTINE NULL
+
+/*! default max jobs used TPAttrInit */
+#define DEFAULT_MAX_JOBS_TOTAL 100
+
+/*!
+ * \brief Statistics.
+ *
+ * Always include stats because code change is minimal.
+ */
+#define STATS 1
+
+#ifdef _DEBUG
+	#define DEBUG 1
+#endif
+
+typedef int PolicyType;
+
+#define DEFAULT_POLICY SCHED_OTHER
+
+/*! Function for freeing a thread argument. */
+typedef void (*free_routine)(void *arg);
+
+
+/*! Attributes for thread pool. Used to set and change parameters of thread
+ * pool. */
+typedef struct THREADPOOLATTR
+{
+	/*! ThreadPool will always maintain at least this many threads. */
+	int minThreads;
+	/*! ThreadPool will never have more than this number of threads. */
+	int maxThreads;
+	/*! This is the minimum stack size allocated for each thread. */
+	size_t stackSize;
+	/*! This is the maximum time a thread will
+	 * remain idle before dying (in milliseconds). */
+	int maxIdleTime;
+	/*! Jobs per thread to maintain. */
+	int jobsPerThread;
+	/*! Maximum number of jobs that can be queued totally. */
+	int maxJobsTotal;
+	/*! the time a low priority or med priority job waits before getting
+	 * bumped up a priority (in milliseconds). */
+	int starvationTime;
+	/*! scheduling policy to use. */
+	PolicyType schedPolicy;
+} ThreadPoolAttr;
+
+/*! Internal ThreadPool Job. */
+typedef struct THREADPOOLJOB
+{
+	start_routine func;
+	void *arg;
+	free_routine free_func;
+	struct timeval requestTime;
+	ThreadPriority priority;
+	int jobId;
+} ThreadPoolJob;
+
+/*! Structure to hold statistics. */
+typedef struct TPOOLSTATS
+{
+	double totalTimeHQ;
+	int totalJobsHQ;
+	double avgWaitHQ;
+	double totalTimeMQ;
+	int totalJobsMQ;
+	double avgWaitMQ;
+	double totalTimeLQ;
+	int totalJobsLQ;
+	double avgWaitLQ;
+	double totalWorkTime;
+	double totalIdleTime;
+	int workerThreads;
+	int idleThreads;
+	int persistentThreads;
+	int totalThreads;
+	int maxThreads;
+	int currentJobsHQ;
+	int currentJobsLQ;
+	int currentJobsMQ;
+} ThreadPoolStats;
+
+/*!
+ * \brief A thread pool similar to the thread pool in the UPnP SDK.
+ *
+ * Allows jobs to be scheduled for running by threads in a 
+ * thread pool. The thread pool is initialized with a 
+ * minimum and maximum thread number as well as a max idle time
+ * and a jobs per thread ratio. If a worker thread waits the whole
+ * max idle time without receiving a job and the thread pool
+ * currently has more threads running than the minimum
+ * then the worker thread will exit. If when 
+ * scheduling a job the current job to thread ratio
+ * becomes greater than the set ratio and the thread pool currently has
+ * less than the maximum threads then a new thread will
+ * be created.
+ */
+typedef struct THREADPOOL
+{
+	/*! Mutex to protect job qs. */
+	ithread_mutex_t mutex;
+	/*! Condition variable to signal Q. */
+	ithread_cond_t condition;
+	/*! Condition variable for start and stop. */
+	ithread_cond_t start_and_shutdown;
+	/*! ids for jobs */
+	int lastJobId;
+	/*! whether or not we are shutting down */
+	int shutdown;
+	/*! total number of threads */
+	int totalThreads;
+	/*! flag that's set when waiting for a new worker thread to start */
+	int pendingWorkerThreadStart;
+	/*! number of threads that are currently executing jobs */
+	int busyThreads;
+	/*! number of persistent threads */
+	int persistentThreads;
+	/*! free list of jobs */
+	FreeList jobFreeList;
+	/*! low priority job Q */
+	LinkedList lowJobQ;
+	/*! med priority job Q */
+	LinkedList medJobQ;
+	/*! high priority job Q */
+	LinkedList highJobQ;
+	/*! persistent job */
+	ThreadPoolJob *persistentJob;
+	/*! thread pool attributes */
+	ThreadPoolAttr attr;
+	/*! statistics */
+	ThreadPoolStats stats;
+} ThreadPool;
+
+/*!
+ * \brief Initializes and starts ThreadPool. Must be called first and
+ * only once for ThreadPool.
+ *
+ * \return
+ * \li \c 0 on success.
+ * \li \c EAGAIN if not enough system resources to create minimum threads.
+ * \li \c INVALID_POLICY if schedPolicy can't be set.
+ * \li \c EMAXTHREADS if minimum threads is greater than maximum threads.
+ */
+int ThreadPoolInit(
+	/*! Must be valid, non null, pointer to ThreadPool. */
+	ThreadPool *tp,
+	/*! Can be null. if not null then attr contains the following fields:
+	 * \li \c minWorkerThreads - minimum number of worker threads thread
+	 * pool will never have less than this number of threads.
+	 * \li \c maxWorkerThreads - maximum number of worker threads thread
+	 * pool will never have more than this number of threads.
+	 * \li \c maxIdleTime - maximum time that a worker thread will spend
+	 * idle. If a worker is idle longer than this time and there are more
+	 * than the min number of workers running, then the worker thread
+	 * exits.
+	 * \li \c jobsPerThread - ratio of jobs to thread to try and maintain
+	 * if a job is scheduled and the number of jobs per thread is greater
+	 * than this number,and if less than the maximum number of workers are
+	 * running then a new thread is started to help out with efficiency.
+	 * \li \c schedPolicy - scheduling policy to try and set (OS dependent).
+	 */
+	ThreadPoolAttr *attr);
+
+/*!
+ * \brief Adds a persistent job to the thread pool.
+ *
+ * Job will be run as soon as possible. Call will block until job is scheduled.
+ * 
+ * \return
+ *	\li \c 0 on success.
+ *	\li \c EOUTOFMEM not enough memory to add job.
+ *	\li \c EMAXTHREADS not enough threads to add persistent job.
+ */
+int ThreadPoolAddPersistent(
+	/*! Valid thread pool pointer. */
+	ThreadPool*tp,
+	/*! Valid thread pool job. */
+	ThreadPoolJob *job,
+	/*! . */
+	int *jobId);
+
+/*!
+ * \brief Gets the current set of attributes associated with the thread pool.
+ *
+ * \return
+ * 	\li \c 0 on success, nonzero on failure.
+ */
+int ThreadPoolGetAttr(
+	/*! valid thread pool pointer. */
+	ThreadPool *tp,
+	/*! non null pointer to store attributes. */
+	ThreadPoolAttr *out);
+
+/*!
+ * \brief Sets the attributes for the thread pool.
+ * Only affects future calculations.
+ *
+ * \return
+ * 	\li \c 0 on success, nonzero on failure.
+ * 	\li \c INVALID_POLICY if policy can not be set.
+ */
+int ThreadPoolSetAttr(
+	/*! valid thread pool pointer. */
+	ThreadPool *tp,
+	/*! pointer to attributes, null sets attributes to default. */
+	ThreadPoolAttr *attr);
+
+/*!
+ * \brief Adds a job to the thread pool. Job will be run as soon as possible.
+ *
+ * \return
+ * 	\li \c 0 on success, nonzero on failure.
+ * 	\li \c EOUTOFMEM if not enough memory to add job.
+ */
+int ThreadPoolAdd(
+	/*! valid thread pool pointer. */
+	ThreadPool*tp,
+	/*! . */
+	ThreadPoolJob *job,
+	/*! id of job. */
+	int *jobId);
+
+/*!
+ * \brief Removes a job from the thread pool. Can only remove jobs which
+ * are not currently running.
+ *
+ * \return
+ * 	\li \c 0 on success, nonzero on failure.
+ * 	\li \c INVALID_JOB_ID if job not found. 
+ */
+int ThreadPoolRemove(
+	/*! valid thread pool pointer. */
+	ThreadPool *tp,
+	/*! id of job. */
+	int jobId,
+	/*! space for removed job. */
+	ThreadPoolJob *out);
+
+/*!
+ * \brief Shuts the thread pool down. Waits for all threads to finish.
+ * May block indefinitely if jobs do not exit.
+ *
+ * \return 0 on success, nonzero on failure
+ */
+int ThreadPoolShutdown(
+	/*! must be valid tp. */
+	ThreadPool *tp);
+
+/*!
+ * \brief Initializes thread pool job. Sets the priority to default defined
+ * in ThreadPool.h. Sets the free_routine to default defined in ThreadPool.h.
+ *
+ * \return Always returns 0.
+ */
+int TPJobInit(
+	/*! must be valid thread pool attributes. */
+	ThreadPoolJob *job,
+	/*! function to run, must be valid. */
+	start_routine func,
+	/*! argument to pass to function. */
+	void *arg);
+
+/*!
+ * \brief Sets the max threads for the thread pool attributes.
+ *
+ * \return Always returns 0.
+ */
+int TPJobSetPriority(
+	/*! must be valid thread pool attributes. */
+	ThreadPoolJob *job,
+	/*! value to set. */
+	ThreadPriority priority);
+
+/*!
+ * \brief Sets the max threads for the thread pool attributes.
+ *
+ * \return Always returns 0.
+ */
+int TPJobSetFreeFunction(
+	/*! must be valid thread pool attributes. */
+	ThreadPoolJob *job,
+	/*! value to set. */
+	free_routine func);
+
+/*!
+ * \brief Initializes thread pool attributes. Sets values to defaults defined
+ * in ThreadPool.h.
+ *
+ * \return Always returns 0.
+ */
+int TPAttrInit(
+	/*! must be valid thread pool attributes. */
+	ThreadPoolAttr *attr);
+
+/*!
+ * \brief Sets the max threads for the thread pool attributes.
+ *
+ * \return Always returns 0.
+ */
+int TPAttrSetMaxThreads(
+	/*! must be valid thread pool attributes. */
+	ThreadPoolAttr *attr,
+	/*! value to set. */
+	int maxThreads);
+
+/*!
+ * \brief Sets the min threads for the thread pool attributes.
+ *
+ * \return Always returns 0.
+ */
+int TPAttrSetMinThreads(
+	/*! must be valid thread pool attributes. */
+	ThreadPoolAttr *attr,
+	/*! value to set. */
+	int minThreads);
+
+/*!
+ * \brief Sets the stack size for the thread pool attributes.
+ *
+ * \return Always returns 0.
+ */
+int TPAttrSetStackSize(
+	/*! must be valid thread pool attributes. */
+	ThreadPoolAttr *attr,
+	/*! value to set. */
+	size_t stackSize);
+
+/*!
+ * \brief Sets the idle time for the thread pool attributes.
+ *
+ * \return Always returns 0.
+ */
+int TPAttrSetIdleTime(
+	/*! must be valid thread pool attributes. */
+	ThreadPoolAttr *attr,
+	/*! . */
+	int idleTime);
+
+/*!
+ * \brief Sets the jobs per thread ratio
+ *
+ * \return Always returns 0.
+ */
+int TPAttrSetJobsPerThread(
+	/*! must be valid thread pool attributes. */
+	ThreadPoolAttr *attr,
+	/*! number of jobs per thread to maintain. */
+	int jobsPerThread);
+
+/*!
+ * \brief Sets the starvation time for the thread pool attributes.
+ *
+ * \return Always returns 0.
+ */
+int TPAttrSetStarvationTime(
+	/*! must be valid thread pool attributes. */
+	ThreadPoolAttr *attr,
+	/*! milliseconds. */
+	int starvationTime);
+
+/*!
+ * \brief Sets the scheduling policy for the thread pool attributes.
+ *
+ * \return Always returns 0.
+ */
+int TPAttrSetSchedPolicy(
+	/*! must be valid thread pool attributes. */
+	ThreadPoolAttr *attr,
+	/*! must be a valid policy type. */
+	PolicyType schedPolicy);
+
+/*!
+ * \brief Sets the maximum number jobs that can be qeued totally.
+ *
+ * \return Always returns 0.
+ */
+int TPAttrSetMaxJobsTotal(
+	/*! must be valid thread pool attributes. */
+	ThreadPoolAttr *attr,
+	/*! maximum number of jobs. */
+	int maxJobsTotal);
+
+/*!
+ * \brief Returns various statistics about the thread pool.
+ *
+ * Only valid if STATS has been defined.
+ *
+ * \return Always returns 0.
+ */
+#ifdef STATS
+	EXPORT_SPEC int ThreadPoolGetStats(
+		/*! Valid initialized threadpool. */
+		ThreadPool *tp,
+		/*! Valid stats, out parameter. */
+		ThreadPoolStats *stats);
+#else
+	static UPNP_INLINE int ThreadPoolGetStats(
+		/*! Valid initialized threadpool. */
+		ThreadPool *tp,
+		/*! Valid stats, out parameter. */
+		ThreadPoolStats *stats) {}
+#endif
+
+/*!
+ * \brief
+ */
+#ifdef STATS
+	EXPORT_SPEC void ThreadPoolPrintStats(
+		/*! . */
+		ThreadPoolStats *stats);
+#else
+	static UPNP_INLINE void ThreadPoolPrintStats(
+		/*! . */
+		ThreadPoolStats *stats) {}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* THREADPOOL_H */
+

+ 161 - 0
Example/Pods/libAS-Control/libAS-Control/Classes/libUPNP.framework/Headers/TimerThread.h

@@ -0,0 +1,161 @@
+/*******************************************************************************
+ *
+ * Copyright (c) 2000-2003 Intel Corporation 
+ * All rights reserved. 
+ *
+ * Redistribution and use in source and binary forms, with or without 
+ * modification, are permitted provided that the following conditions are met: 
+ *
+ * * Redistributions of source code must retain the above copyright notice, 
+ * this list of conditions and the following disclaimer. 
+ * * Redistributions in binary form must reproduce the above copyright notice, 
+ * this list of conditions and the following disclaimer in the documentation 
+ * and/or other materials provided with the distribution. 
+ * * Neither name of Intel Corporation nor the names of its contributors 
+ * may be used to endorse or promote products derived from this software 
+ * without specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR 
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************/
+
+#ifndef TIMERTHREAD_H
+#define TIMERTHREAD_H
+
+/*!
+ * \file
+ */
+
+#include "FreeList.h"
+#include "ithread.h"
+#include "LinkedList.h"
+#include "ThreadPool.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define INVALID_EVENT_ID (-10 & 1<<29)
+
+/*! Timeout Types. */
+typedef enum timeoutType {
+	/*! seconds from Jan 1, 1970. */
+	ABS_SEC,
+	/*! seconds from current time. */
+	REL_SEC
+} TimeoutType;
+
+/*!
+ * A timer thread similar to the one in the Upnp SDK that allows
+ * the scheduling of a job to run at a specified time in the future.
+ *
+ * Because the timer thread uses the thread pool there is no 
+ * gurantee of timing, only approximate timing.
+ *
+ * Uses ThreadPool, Mutex, Condition, Thread.
+ */
+typedef struct TIMERTHREAD
+{
+	ithread_mutex_t mutex;
+	ithread_cond_t condition;
+	int lastEventId;
+	LinkedList eventQ;
+	int shutdown;
+	FreeList freeEvents;
+	ThreadPool *tp;
+} TimerThread;
+
+/*!
+ * Struct to contain information for a timer event.
+ *
+ * Internal to the TimerThread.
+ */
+typedef struct TIMEREVENT
+{
+	ThreadPoolJob job;
+	/*! [in] Absolute time for event in seconds since Jan 1, 1970. */
+	time_t eventTime;
+	/*! [in] Long term or short term job. */
+	Duration persistent;
+	int id;
+} TimerEvent;
+
+/*!
+ * \brief Initializes and starts timer thread.
+ *
+ * \return 0 on success, nonzero on failure. Returns error from
+ * 	ThreadPoolAddPersistent on failure.
+ */
+int TimerThreadInit(
+	/*! [in] Valid timer thread pointer. */
+	TimerThread *timer,
+	/*! [in] Valid thread pool to use. Must be started. Must be valid for
+	 * lifetime of timer. Timer must be shutdown BEFORE thread pool. */
+	ThreadPool *tp);
+
+/*!
+ * \brief Schedules an event to run at a specified time.
+ *
+ * \return 0 on success, nonzero on failure, EOUTOFMEM if not enough memory
+ * 	to schedule job.
+ */
+int TimerThreadSchedule(
+	/*! [in] Valid timer thread pointer. */
+	TimerThread* timer,
+	/*! [in] time of event. Either in absolute seconds, or relative
+	 * seconds in the future. */
+	time_t time, 
+	/*! [in] either ABS_SEC, or REL_SEC. If REL_SEC, then the event
+	 * will be scheduled at the current time + REL_SEC. */
+	TimeoutType type,
+	/*! [in] Valid Thread pool job with following fields. */
+	ThreadPoolJob *job,
+	/*! [in] . */
+	Duration duration,
+	/*! [in] Id of timer event. (out, can be null). */
+	int *id);
+
+/*!
+ * \brief Removes an event from the timer Q.
+ *
+ * Events can only be removed before they have been placed in the thread pool.
+ *
+ * \return 0 on success, INVALID_EVENT_ID on failure.
+ */
+int TimerThreadRemove(
+	/*! [in] Valid timer thread pointer. */
+	TimerThread *timer,
+	/*! [in] Id of event to remove. */
+	int id,
+	/*! [in] Space for thread pool job. */
+	ThreadPoolJob *out);
+
+/*!
+ * \brief Shutdown the timer thread.
+ *
+ * Events scheduled in the future will NOT be run.
+ *
+ * Timer thread should be shutdown BEFORE it's associated thread pool.
+ *
+ * \return 0 if succesfull, nonzero otherwise. Always returns 0.
+ */
+int TimerThreadShutdown(
+	/*! [in] Valid timer thread pointer. */
+	TimerThread *timer);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* TIMER_THREAD_H */
+

+ 122 - 0
Example/Pods/libAS-Control/libAS-Control/Classes/libUPNP.framework/Headers/UpnpGlobal.h

@@ -0,0 +1,122 @@
+#ifndef UPNPGLOBAL_H
+#define UPNPGLOBAL_H
+
+/*!
+ * \file
+ *
+ * \brief Defines constants that for some reason are not defined on some systems.
+ */
+
+#if defined MYLIB_LARGEFILE_SENSITIVE && _FILE_OFFSET_BITS+0 != 64
+	#if defined __GNUC__
+		#warning libupnp requires largefile mode - use AC_SYS_LARGEFILE
+	#else
+		#error  libupnp requires largefile mode - use AC_SYS_LARGEFILE
+	#endif
+#endif
+
+#ifdef WIN32
+	/*
+	 * EXPORT_SPEC
+	 */
+	#ifdef UPNP_STATIC_LIB
+		#define EXPORT_SPEC
+	#else /* UPNP_STATIC_LIB */
+		#ifdef LIBUPNP_EXPORTS
+			/*! set up declspec for dll export to make functions
+			 * visible to library users */
+			#define EXPORT_SPEC __declspec(dllexport)
+		#else /* LIBUPNP_EXPORTS */
+			#define EXPORT_SPEC __declspec(dllimport)
+		#endif /* LIBUPNP_EXPORTS */
+	#endif /* UPNP_STATIC_LIB */
+
+	/*
+	 * UPNP_INLINE
+	 * PRId64
+	 * PRIzd
+	 * PRIzu
+	 * PRIzx
+	 */
+	#ifdef UPNP_USE_MSVCPP
+		/* define some things the M$ VC++ doesn't know */
+		#define UPNP_INLINE _inline
+		typedef __int64 int64_t;
+		#define PRId64 "I64d"
+		#define PRIzd "ld"
+		#define PRIzu "lu"
+		#define PRIzx "lx"
+	#endif /* UPNP_USE_MSVCPP */
+
+	#ifdef UPNP_USE_BCBPP
+		/* define some things Borland Builder doesn't know */
+		#define UPNP_INLINE inline
+		typedef __int64 int64_t;
+		#warning The Borland C compiler is probably broken on PRId64,
+		#warning please someone provide a proper fix here
+		#define PRId64 "I64d"
+		#define PRIzd "zd"
+		#define PRIzu "zu"
+		#define PRIzx "zx"
+	#endif /* UPNP_USE_BCBPP */
+
+	#ifdef __GNUC__
+		#define UPNP_INLINE inline
+		/* Note with PRIzu that in the case of Mingw32, it's the MS C
+		 * runtime printf which ends up getting called, not the glibc
+		 * printf, so it genuinely doesn't have "zu"
+		 */
+		#define PRIzd "ld"
+		#define PRIzu "lu"
+		#define PRIzx "lx"
+	#endif /* __GNUC__ */
+#else
+	/*! 
+	 * \brief Export functions on WIN32 DLLs.
+	 *
+	 * Every funtion that belongs to the library API must use this
+	 * definition upon declaration or it will not be exported on WIN32
+	 * DLLs.
+	 */
+	#define EXPORT_SPEC
+
+	/*!
+	 * \brief Declares an inline function.
+	 *
+	 * Surprisingly, there are some compilers that do not understand the
+	 * inline keyword. This definition makes the use of this keyword
+	 * portable to these systems.
+	 */
+	#ifdef __STRICT_ANSI__
+		#define UPNP_INLINE __inline__
+	#else
+		#define UPNP_INLINE inline
+	#endif
+
+	/*!
+	 * \brief Supply the PRId64 printf() macro.
+	 *
+	 * MSVC still does not know about this.
+	 */
+	/* #define PRId64 PRId64 */
+
+	/*!
+	 * \brief Supply the PRIz* printf() macros.
+	 *
+	 * These macros were invented so that we can live a little longer with
+	 * MSVC lack of C99. "z" is the correct printf() size specifier for
+	 * the size_t type.
+	 */
+	#define PRIzd "zd"
+	#define PRIzu "zu"
+	#define PRIzx "zx"
+#endif
+
+/*
+ * Defining this macro here gives some interesting information about unused
+ * functions in the code. Of course, this should never go uncommented on a
+ * release.
+ */
+/*#define inline*/
+
+#endif /* UPNPGLOBAL_H */

+ 67 - 0
Example/Pods/libAS-Control/libAS-Control/Classes/libUPNP.framework/Headers/UpnpInet.h

@@ -0,0 +1,67 @@
+#ifndef UPNPINET_H
+#define UPNPINET_H
+
+/*!
+ * \addtogroup Sock
+ * 
+ * @{
+ * 
+ * \file
+ *
+ * \brief Provides a platform independent way to include TCP/IP types and functions.
+ */
+
+#include "UpnpUniStd.h" /* for close() */
+
+#ifdef WIN32
+	#include <stdarg.h>
+	#ifndef UPNP_USE_MSVCPP
+		/* Removed: not required (and cause compilation issues) */
+		#include <winbase.h>
+		#include <windef.h>
+	#endif
+	#include <winsock2.h>
+	#include <iphlpapi.h>
+	#include <ws2tcpip.h>
+
+	#define UpnpCloseSocket closesocket
+
+	#if(_WIN32_WINNT < 0x0600)
+		typedef short sa_family_t;
+	#else
+		typedef ADDRESS_FAMILY sa_family_t;
+	#endif
+
+#else /* WIN32 */
+	#include <sys/param.h>
+	#if defined(__sun)
+		#include <fcntl.h>
+		#include <sys/sockio.h>
+	#elif (defined(BSD) && BSD >= 199306) || defined (__FreeBSD_kernel__)
+		#include <ifaddrs.h>
+		/* Do not move or remove the include below for "sys/socket"!
+		 * Will break FreeBSD builds. */
+		#include <sys/socket.h>
+	#endif
+	#include <arpa/inet.h>  /* for inet_pton() */
+	#include <net/if.h>
+	#include <netinet/in.h>
+
+	/*! This typedef makes the code slightly more WIN32 tolerant.
+	 * On WIN32 systems, SOCKET is unsigned and is not a file
+	 * descriptor. */
+	typedef int SOCKET;
+
+	/*! INVALID_SOCKET is unsigned on win32. */
+	#define INVALID_SOCKET (-1)
+
+	/*! select() returns SOCKET_ERROR on win32. */
+	#define SOCKET_ERROR (-1)
+
+	/*! Alias to close() to make code more WIN32 tolerant. */
+	#define UpnpCloseSocket close
+#endif /* WIN32 */
+
+/* @} Sock */
+
+#endif /* UPNPINET_H */

+ 11 - 0
Example/Pods/libAS-Control/libAS-Control/Classes/libUPNP.framework/Headers/UpnpIntTypes.h

@@ -0,0 +1,11 @@
+#ifndef UPNPINTTYPES_H
+#define UPNPINTTYPES_H
+
+#if !defined(UPNP_USE_BCBPP)
+
+/* Printf format for integers. */
+#include <inttypes.h>
+
+#endif /* !defined(UPNP_USE_BCBPP) */
+
+#endif /* UPNPINTTYPES_H */

+ 20 - 0
Example/Pods/libAS-Control/libAS-Control/Classes/libUPNP.framework/Headers/UpnpStdInt.h

@@ -0,0 +1,20 @@
+#ifndef UPNPSTDINT_H
+#define UPNPSTDINT_H
+
+#if !defined(UPNP_USE_BCBPP)
+
+/* Sized integer types. */
+#include <stdint.h>
+
+#ifdef UPNP_USE_MSVCPP
+	/* no ssize_t defined for VC */
+	#ifdef  _WIN64
+		typedef int64_t ssize_t;
+	#else
+		typedef int32_t ssize_t;
+	#endif
+#endif
+
+#endif /* !defined(UPNP_USE_BCBPP) */
+
+#endif /* UPNPSTDINT_H */

+ 171 - 0
Example/Pods/libAS-Control/libAS-Control/Classes/libUPNP.framework/Headers/UpnpString.h

@@ -0,0 +1,171 @@
+
+
+#ifndef STRING_H
+#define STRING_H
+
+
+/*!
+ * \defgroup UpnpString The UpnpString Class
+ *
+ * \brief Implements string operations in the UPnP library.
+ *
+ * \author Marcelo Roberto Jimenez
+ *
+ * \version 1.0
+ *
+ * @{
+ *
+ * \file
+ *
+ * \brief UpnpString object declaration.
+ */
+
+
+#include "UpnpGlobal.h" /* for EXPORT_SPEC */
+
+
+#include <stdlib.h> /* for size_t */
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+/*!
+ * \brief Type of the string objects inside libupnp.
+ */
+typedef struct s_UpnpString UpnpString;
+
+
+/*!
+ * \brief Constructor.
+ *
+ * \return A pointer to a new allocated object.
+ */
+EXPORT_SPEC UpnpString *UpnpString_new();
+
+
+/*!
+ * \brief Destructor.
+ */
+EXPORT_SPEC void UpnpString_delete(
+	/*! [in] The \em \b this pointer. */
+	UpnpString *p);
+
+
+/*!
+ * \brief Copy Constructor.
+ *
+ * \return A pointer to a new allocated copy of the original object.
+ */
+EXPORT_SPEC UpnpString *UpnpString_dup(
+	/*! [in] The \em \b this pointer. */
+	const UpnpString *p);
+
+
+/*!
+ * \brief Assignment operator.
+ */
+EXPORT_SPEC void UpnpString_assign(
+	/*! [in] The \em \b this pointer. */
+	UpnpString *p,
+	/*! [in] The \em \b that pointer. */
+	const UpnpString *q);
+
+
+/*!
+ * \brief Returns the length of the string.
+ *
+ * \return The length of the string.
+ * */
+EXPORT_SPEC size_t UpnpString_get_Length(
+	/*! [in] The \em \b this pointer. */
+	const UpnpString *p);
+
+
+/*!
+ * \brief Truncates the string to the specified lenght, or does nothing
+ * if the current lenght is less than or equal to the requested length.
+ * */
+EXPORT_SPEC void UpnpString_set_Length(
+	/*! [in] The \em \b this pointer. */
+	UpnpString *p,
+	/*! [in] The requested length. */
+	size_t n);
+
+
+/*!
+ * \brief Returns the pointer to char.
+ *
+ * \return The pointer to char.
+ */
+EXPORT_SPEC const char *UpnpString_get_String(
+	/*! [in] The \em \b this pointer. */
+	const UpnpString *p);
+
+
+/*!
+ * \brief Sets the string from a pointer to char.
+ */
+EXPORT_SPEC int UpnpString_set_String(
+	/*! [in] The \em \b this pointer. */
+	UpnpString *p,
+	/*! [in] (char *) to copy from. */
+	const char *s);
+
+
+/*!
+ * \brief Sets the string from a pointer to char using a maximum of N chars.
+ */
+EXPORT_SPEC int UpnpString_set_StringN(
+	/*! [in] The \em \b this pointer. */
+	UpnpString *p,
+	/*! [in] (char *) to copy from. */
+	const char *s,
+	/*! Maximum number of chars to copy.*/
+	size_t n);
+
+
+/*!
+ * \brief Clears the string, sets its size to zero.
+ */
+EXPORT_SPEC void UpnpString_clear(
+	/*! [in] The \em \b this pointer. */
+	UpnpString *p);
+
+
+/*!
+ * \brief Compares two strings for equality. Case matters.
+ *
+ * \return The result of strcmp().
+ */
+EXPORT_SPEC int UpnpString_cmp(
+	/*! [in] The \em \b the first string. */
+	UpnpString *p,
+	/*! [in] The \em \b the second string. */
+	UpnpString *q);
+
+
+/*!
+ * \brief Compares two strings for equality. Case does not matter.
+ *
+ * \return The result of strcasecmp().
+ */
+EXPORT_SPEC int UpnpString_casecmp(
+	/*! [in] The \em \b the first string. */
+	UpnpString *p,
+	/*! [in] The \em \b the second string. */
+	UpnpString *q);
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+
+/* @} UpnpString The UpnpString API */
+
+
+#endif /* STRING_H */
+

+ 10 - 0
Example/Pods/libAS-Control/libAS-Control/Classes/libUPNP.framework/Headers/UpnpUniStd.h

@@ -0,0 +1,10 @@
+#ifndef UPNPUNISTD_H
+#define UPNPUNISTD_H
+
+#ifdef WIN32
+	/* Do not #include <unistd.h> on WIN32. */
+#else /* WIN32 */
+	#include <unistd.h> /* for close() */
+#endif /* WIN32 */
+
+#endif /* UPNPUNISTD_H */

+ 69 - 0
Example/Pods/libAS-Control/libAS-Control/Classes/libUPNP.framework/Headers/VirtualDir.h

@@ -0,0 +1,69 @@
+
+
+#ifndef VIRTUALDIR_H
+#define VIRTUALDIR_H
+
+
+/** The \b VirtualDirCallbacks structure contains the pointers to
+ *  file-related callback functions a device application can register to
+ *  virtualize URLs.  
+ */
+struct VirtualDirCallbacks
+{
+	/** Called by the web server to query information on a file.  The callback
+	 *  should return 0 on success or -1 on an error. */
+	VDCallback_GetInfo get_info;
+
+	/** Called by the web server to open a file.  The callback should return
+	 *  a valid handle if the file can be opened.  Otherwise, it should return
+	 *  \c NULL to signify an error. */
+	VDCallback_Open open;
+
+	/** Called by the web server to perform a sequential read from an open
+	 *  file.  The callback should copy \b buflen bytes from the file into
+	 *  the buffer.
+	 *  @return An integer representing one of the following:
+	 *      \li <tt>   0</tt>:  The file contains no more data (EOF).
+	 *      \li <tt> > 0</tt>: A successful read of the number of bytes in the
+	 *      	return code.
+	 *      \li <tt> < 0</tt>: An error occurred reading the file.
+	 */
+	VDCallback_Read read;
+
+	/** Called by the web server to perform a sequential write to an open
+	 *  file.  The callback should write \b buflen bytes into the file from
+	 *  the buffer.  It should return the actual number of bytes written, 
+	 *  which might be less than \b buflen in the case of a write error.
+	 */
+	VDCallback_Write write;
+
+	/** Called by the web server to move the file pointer, or offset, into
+	 *  an open file.  The \b origin parameter determines where to start
+	 *  moving the file pointer.  A value of \c SEEK_CUR moves the
+	 *  file pointer relative to where it is.  The \b offset parameter can
+	 *  be either positive (move forward) or negative (move backward).  
+	 *  \c SEEK_END moves relative to the end of the file.  A positive 
+	 *  \b offset extends the file.  A negative \b offset moves backward 
+	 *  in the file.  Finally, \c SEEK_SET moves to an absolute position in 
+	 *  the file. In this case, \b offset must be positive.  The callback 
+	 *  should return 0 on a successful seek or a non-zero value on an error.
+	 */
+	VDCallback_Seek seek;
+
+	/** Called by the web server to close a file opened via the \b open
+	 *  callback.  It should return 0 on success, or a non-zero value on an 
+	 *  error.
+	 */
+	VDCallback_Close close;
+};
+
+
+typedef struct virtual_Dir_List
+{
+	struct virtual_Dir_List *next;
+	char dirName[NAME_SIZE];
+} virtualDirList;
+
+
+#endif /* VIRTUALDIR_H */
+

+ 0 - 0
Example/Pods/libAS-Control/libAS-Control/Classes/libUPNP.framework/Headers/autoconfig.h


部分文件因为文件数量过多而无法显示