From a505366162b027dd1f15edafa506f30b22cec399 Mon Sep 17 00:00:00 2001 From: Derek Clarkson Date: Tue, 7 Jun 2016 22:38:13 +1000 Subject: [PATCH 1/7] Creating project for carthage builds. --- .DS_Store | Bin 0 -> 6148 bytes .gitignore | 1 + Cartfile | 6 + Cartfile.resolved | 4 + CocoaUPnP.xcodeproj/project.pbxproj | 619 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/xcschemes/CocoaUPnP.xcscheme | 80 +++ Info.plist | 26 + 8 files changed, 743 insertions(+) create mode 100644 .DS_Store create mode 100644 Cartfile create mode 100644 Cartfile.resolved create mode 100644 CocoaUPnP.xcodeproj/project.pbxproj create mode 100644 CocoaUPnP.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 CocoaUPnP.xcodeproj/xcshareddata/xcschemes/CocoaUPnP.xcscheme create mode 100644 Info.plist diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..9499f2294a89ca78564f7d99cb55f4c0e8549874 GIT binary patch literal 6148 zcmeHKu}T9$5PhR50ycqISnd}HDeRAU_Cl~%?j$0fcSr&j7WWH&o4??P_-1CK30@H! z5t)J6w>z`5xBEhNb^yqHUC)3CfH753v@;-T9&{b#$s?lJ8aKGYB_64#0}K5{lkR;k!N4a2dOswpVv(_Tw5x-Sl>kJ2Mw_s2 zZ%txS1F^{1JJLcC4<&l2l zfkPioH2+`lFF9D`?}o%E7zhUb83QsZ7v-FX%DMI1@if;a>NQnG=k?m5uy3iDXsMV3 hy+=;W>HegB`iqRcqpqTM3n#`yzzB&Z82AMSJ^;o1J30UW literal 0 HcmV?d00001 diff --git a/.gitignore b/.gitignore index ae12729..ab4b193 100644 --- a/.gitignore +++ b/.gitignore @@ -42,3 +42,4 @@ docs/ # Fastlane fastlane/report.xml fastlane/test_output +Carthage diff --git a/Cartfile b/Cartfile new file mode 100644 index 0000000..0c268cf --- /dev/null +++ b/Cartfile @@ -0,0 +1,6 @@ + +github "drekka/Ono" "develop" + +github "robbiehanson/CocoaAsyncSocket" +github "AFNetworking/AFNetworking" +github "swisspol/GCDWebServer" \ No newline at end of file diff --git a/Cartfile.resolved b/Cartfile.resolved new file mode 100644 index 0000000..a591f83 --- /dev/null +++ b/Cartfile.resolved @@ -0,0 +1,4 @@ +github "AFNetworking/AFNetworking" "3.1.0" +github "robbiehanson/CocoaAsyncSocket" "7.4.3" +github "swisspol/GCDWebServer" "3.3.2" +github "drekka/Ono" "67259eb5ed591564149156d88eee38a4669fb183" diff --git a/CocoaUPnP.xcodeproj/project.pbxproj b/CocoaUPnP.xcodeproj/project.pbxproj new file mode 100644 index 0000000..f06e3e7 --- /dev/null +++ b/CocoaUPnP.xcodeproj/project.pbxproj @@ -0,0 +1,619 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 6C3EE80F1D06EE1400506613 /* UPPEventServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7C51D06EE1400506613 /* UPPEventServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C3EE8101D06EE1400506613 /* UPPEventServer.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE7C61D06EE1400506613 /* UPPEventServer.m */; }; + 6C3EE8111D06EE1400506613 /* UPPEventSubscription.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7C71D06EE1400506613 /* UPPEventSubscription.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C3EE8121D06EE1400506613 /* UPPEventSubscription.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE7C81D06EE1400506613 /* UPPEventSubscription.m */; }; + 6C3EE8131D06EE1400506613 /* UPPEventSubscriptionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7C91D06EE1400506613 /* UPPEventSubscriptionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C3EE8141D06EE1400506613 /* UPPEventSubscriptionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE7CA1D06EE1400506613 /* UPPEventSubscriptionManager.m */; }; + 6C3EE8151D06EE1400506613 /* NSArray+firstObjectMatchingPredicate.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7CC1D06EE1400506613 /* NSArray+firstObjectMatchingPredicate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C3EE8161D06EE1400506613 /* NSArray+firstObjectMatchingPredicate.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE7CD1D06EE1400506613 /* NSArray+firstObjectMatchingPredicate.m */; }; + 6C3EE8171D06EE1400506613 /* NSMutableString+xmlNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7CE1D06EE1400506613 /* NSMutableString+xmlNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C3EE8181D06EE1400506613 /* NSMutableString+xmlNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE7CF1D06EE1400506613 /* NSMutableString+xmlNode.m */; }; + 6C3EE8191D06EE1400506613 /* UPPMetadataHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7D01D06EE1400506613 /* UPPMetadataHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C3EE81A1D06EE1400506613 /* UPPMetadataHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE7D11D06EE1400506613 /* UPPMetadataHelper.m */; }; + 6C3EE81B1D06EE1400506613 /* UPPBasicDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7D31D06EE1400506613 /* UPPBasicDevice.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C3EE81C1D06EE1400506613 /* UPPBasicDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE7D41D06EE1400506613 /* UPPBasicDevice.m */; }; + 6C3EE81D1D06EE1400506613 /* UPPConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7D51D06EE1400506613 /* UPPConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C3EE81E1D06EE1400506613 /* UPPConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE7D61D06EE1400506613 /* UPPConstants.m */; }; + 6C3EE81F1D06EE1400506613 /* UPPDeviceIcon.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7D71D06EE1400506613 /* UPPDeviceIcon.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C3EE8201D06EE1400506613 /* UPPDeviceIcon.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE7D81D06EE1400506613 /* UPPDeviceIcon.m */; }; + 6C3EE8211D06EE1400506613 /* UPPError.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7D91D06EE1400506613 /* UPPError.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C3EE8221D06EE1400506613 /* UPPError.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE7DA1D06EE1400506613 /* UPPError.m */; }; + 6C3EE8231D06EE1400506613 /* UPPMediaItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7DB1D06EE1400506613 /* UPPMediaItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C3EE8241D06EE1400506613 /* UPPMediaItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE7DC1D06EE1400506613 /* UPPMediaItem.m */; }; + 6C3EE8251D06EE1400506613 /* UPPMediaItemResource.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7DD1D06EE1400506613 /* UPPMediaItemResource.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C3EE8261D06EE1400506613 /* UPPMediaItemResource.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE7DE1D06EE1400506613 /* UPPMediaItemResource.m */; }; + 6C3EE8271D06EE1400506613 /* UPPMediaRendererDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7DF1D06EE1400506613 /* UPPMediaRendererDevice.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C3EE8281D06EE1400506613 /* UPPMediaRendererDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE7E01D06EE1400506613 /* UPPMediaRendererDevice.m */; }; + 6C3EE8291D06EE1400506613 /* UPPMediaServerDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7E11D06EE1400506613 /* UPPMediaServerDevice.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C3EE82A1D06EE1400506613 /* UPPMediaServerDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE7E21D06EE1400506613 /* UPPMediaServerDevice.m */; }; + 6C3EE82B1D06EE1400506613 /* UPPParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7E31D06EE1400506613 /* UPPParameters.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C3EE82C1D06EE1400506613 /* UPPParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE7E41D06EE1400506613 /* UPPParameters.m */; }; + 6C3EE82D1D06EE1400506613 /* UPPServiceDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7E51D06EE1400506613 /* UPPServiceDescription.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C3EE82E1D06EE1400506613 /* UPPServiceDescription.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE7E61D06EE1400506613 /* UPPServiceDescription.m */; }; + 6C3EE82F1D06EE1400506613 /* SSDPService.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7E91D06EE1400506613 /* SSDPService.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C3EE8301D06EE1400506613 /* SSDPService.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE7EA1D06EE1400506613 /* SSDPService.m */; }; + 6C3EE8311D06EE1400506613 /* SSDPServiceBrowser.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7EB1D06EE1400506613 /* SSDPServiceBrowser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C3EE8321D06EE1400506613 /* SSDPServiceBrowser.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE7EC1D06EE1400506613 /* SSDPServiceBrowser.m */; }; + 6C3EE8331D06EE1400506613 /* UPPDiscovery.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7ED1D06EE1400506613 /* UPPDiscovery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C3EE8341D06EE1400506613 /* UPPDiscovery.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE7EE1D06EE1400506613 /* UPPDiscovery.m */; }; + 6C3EE8351D06EE1400506613 /* UPPRequestSerializer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7EF1D06EE1400506613 /* UPPRequestSerializer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C3EE8361D06EE1400506613 /* UPPRequestSerializer.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE7F01D06EE1400506613 /* UPPRequestSerializer.m */; }; + 6C3EE8371D06EE1400506613 /* UPPResponseSerializer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7F11D06EE1400506613 /* UPPResponseSerializer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C3EE8381D06EE1400506613 /* UPPResponseSerializer.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE7F21D06EE1400506613 /* UPPResponseSerializer.m */; }; + 6C3EE8391D06EE1400506613 /* UPPSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7F31D06EE1400506613 /* UPPSessionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C3EE83A1D06EE1400506613 /* UPPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE7F41D06EE1400506613 /* UPPSessionManager.m */; }; + 6C3EE83B1D06EE1400506613 /* UPPBaseParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7F61D06EE1400506613 /* UPPBaseParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C3EE83C1D06EE1400506613 /* UPPBaseParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE7F71D06EE1400506613 /* UPPBaseParser.m */; }; + 6C3EE83D1D06EE1400506613 /* UPPDeviceParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7F81D06EE1400506613 /* UPPDeviceParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C3EE83E1D06EE1400506613 /* UPPDeviceParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE7F91D06EE1400506613 /* UPPDeviceParser.m */; }; + 6C3EE83F1D06EE1400506613 /* UPPErrorParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7FA1D06EE1400506613 /* UPPErrorParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C3EE8401D06EE1400506613 /* UPPErrorParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE7FB1D06EE1400506613 /* UPPErrorParser.m */; }; + 6C3EE8411D06EE1400506613 /* UPPLastChangeParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7FC1D06EE1400506613 /* UPPLastChangeParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C3EE8421D06EE1400506613 /* UPPLastChangeParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE7FD1D06EE1400506613 /* UPPLastChangeParser.m */; }; + 6C3EE8431D06EE1400506613 /* UPPMediaItemParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7FE1D06EE1400506613 /* UPPMediaItemParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C3EE8441D06EE1400506613 /* UPPMediaItemParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE7FF1D06EE1400506613 /* UPPMediaItemParser.m */; }; + 6C3EE8451D06EE1400506613 /* UPPResponseParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE8001D06EE1400506613 /* UPPResponseParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C3EE8461D06EE1400506613 /* UPPResponseParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE8011D06EE1400506613 /* UPPResponseParser.m */; }; + 6C3EE8471D06EE1400506613 /* UPPMediaItemProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE8031D06EE1400506613 /* UPPMediaItemProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C3EE8481D06EE1400506613 /* UPPAVTransportService.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE8051D06EE1400506613 /* UPPAVTransportService.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C3EE8491D06EE1400506613 /* UPPAVTransportService.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE8061D06EE1400506613 /* UPPAVTransportService.m */; }; + 6C3EE84A1D06EE1400506613 /* UPPBasicService.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE8071D06EE1400506613 /* UPPBasicService.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C3EE84B1D06EE1400506613 /* UPPBasicService.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE8081D06EE1400506613 /* UPPBasicService.m */; }; + 6C3EE84C1D06EE1400506613 /* UPPConnectionManagerService.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE8091D06EE1400506613 /* UPPConnectionManagerService.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C3EE84D1D06EE1400506613 /* UPPConnectionManagerService.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE80A1D06EE1400506613 /* UPPConnectionManagerService.m */; }; + 6C3EE84E1D06EE1400506613 /* UPPContentDirectoryService.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE80B1D06EE1400506613 /* UPPContentDirectoryService.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C3EE84F1D06EE1400506613 /* UPPContentDirectoryService.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE80C1D06EE1400506613 /* UPPContentDirectoryService.m */; }; + 6C3EE8501D06EE1400506613 /* UPPRenderingControlService.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE80D1D06EE1400506613 /* UPPRenderingControlService.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C3EE8511D06EE1400506613 /* UPPRenderingControlService.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE80E1D06EE1400506613 /* UPPRenderingControlService.m */; }; + 6CA6C7761D06ED8800BA8CF1 /* CocoaUPnP.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CA6C7751D06ED8800BA8CF1 /* CocoaUPnP.h */; settings = {ATTRIBUTES = (Public, ); }; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 6C3EE7C51D06EE1400506613 /* UPPEventServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UPPEventServer.h; sourceTree = ""; }; + 6C3EE7C61D06EE1400506613 /* UPPEventServer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPEventServer.m; sourceTree = ""; }; + 6C3EE7C71D06EE1400506613 /* UPPEventSubscription.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UPPEventSubscription.h; sourceTree = ""; }; + 6C3EE7C81D06EE1400506613 /* UPPEventSubscription.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPEventSubscription.m; sourceTree = ""; }; + 6C3EE7C91D06EE1400506613 /* UPPEventSubscriptionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UPPEventSubscriptionManager.h; sourceTree = ""; }; + 6C3EE7CA1D06EE1400506613 /* UPPEventSubscriptionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPEventSubscriptionManager.m; sourceTree = ""; }; + 6C3EE7CC1D06EE1400506613 /* NSArray+firstObjectMatchingPredicate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+firstObjectMatchingPredicate.h"; sourceTree = ""; }; + 6C3EE7CD1D06EE1400506613 /* NSArray+firstObjectMatchingPredicate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSArray+firstObjectMatchingPredicate.m"; sourceTree = ""; }; + 6C3EE7CE1D06EE1400506613 /* NSMutableString+xmlNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSMutableString+xmlNode.h"; sourceTree = ""; }; + 6C3EE7CF1D06EE1400506613 /* NSMutableString+xmlNode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSMutableString+xmlNode.m"; sourceTree = ""; }; + 6C3EE7D01D06EE1400506613 /* UPPMetadataHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UPPMetadataHelper.h; sourceTree = ""; }; + 6C3EE7D11D06EE1400506613 /* UPPMetadataHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPMetadataHelper.m; sourceTree = ""; }; + 6C3EE7D31D06EE1400506613 /* UPPBasicDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UPPBasicDevice.h; sourceTree = ""; }; + 6C3EE7D41D06EE1400506613 /* UPPBasicDevice.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPBasicDevice.m; sourceTree = ""; }; + 6C3EE7D51D06EE1400506613 /* UPPConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UPPConstants.h; sourceTree = ""; }; + 6C3EE7D61D06EE1400506613 /* UPPConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPConstants.m; sourceTree = ""; }; + 6C3EE7D71D06EE1400506613 /* UPPDeviceIcon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UPPDeviceIcon.h; sourceTree = ""; }; + 6C3EE7D81D06EE1400506613 /* UPPDeviceIcon.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPDeviceIcon.m; sourceTree = ""; }; + 6C3EE7D91D06EE1400506613 /* UPPError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UPPError.h; sourceTree = ""; }; + 6C3EE7DA1D06EE1400506613 /* UPPError.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPError.m; sourceTree = ""; }; + 6C3EE7DB1D06EE1400506613 /* UPPMediaItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UPPMediaItem.h; sourceTree = ""; }; + 6C3EE7DC1D06EE1400506613 /* UPPMediaItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPMediaItem.m; sourceTree = ""; }; + 6C3EE7DD1D06EE1400506613 /* UPPMediaItemResource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UPPMediaItemResource.h; sourceTree = ""; }; + 6C3EE7DE1D06EE1400506613 /* UPPMediaItemResource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPMediaItemResource.m; sourceTree = ""; }; + 6C3EE7DF1D06EE1400506613 /* UPPMediaRendererDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UPPMediaRendererDevice.h; sourceTree = ""; }; + 6C3EE7E01D06EE1400506613 /* UPPMediaRendererDevice.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPMediaRendererDevice.m; sourceTree = ""; }; + 6C3EE7E11D06EE1400506613 /* UPPMediaServerDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UPPMediaServerDevice.h; sourceTree = ""; }; + 6C3EE7E21D06EE1400506613 /* UPPMediaServerDevice.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPMediaServerDevice.m; sourceTree = ""; }; + 6C3EE7E31D06EE1400506613 /* UPPParameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UPPParameters.h; sourceTree = ""; }; + 6C3EE7E41D06EE1400506613 /* UPPParameters.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPParameters.m; sourceTree = ""; }; + 6C3EE7E51D06EE1400506613 /* UPPServiceDescription.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UPPServiceDescription.h; sourceTree = ""; }; + 6C3EE7E61D06EE1400506613 /* UPPServiceDescription.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPServiceDescription.m; sourceTree = ""; }; + 6C3EE7E91D06EE1400506613 /* SSDPService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SSDPService.h; sourceTree = ""; }; + 6C3EE7EA1D06EE1400506613 /* SSDPService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SSDPService.m; sourceTree = ""; }; + 6C3EE7EB1D06EE1400506613 /* SSDPServiceBrowser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SSDPServiceBrowser.h; sourceTree = ""; }; + 6C3EE7EC1D06EE1400506613 /* SSDPServiceBrowser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SSDPServiceBrowser.m; sourceTree = ""; }; + 6C3EE7ED1D06EE1400506613 /* UPPDiscovery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UPPDiscovery.h; sourceTree = ""; }; + 6C3EE7EE1D06EE1400506613 /* UPPDiscovery.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPDiscovery.m; sourceTree = ""; }; + 6C3EE7EF1D06EE1400506613 /* UPPRequestSerializer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UPPRequestSerializer.h; sourceTree = ""; }; + 6C3EE7F01D06EE1400506613 /* UPPRequestSerializer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPRequestSerializer.m; sourceTree = ""; }; + 6C3EE7F11D06EE1400506613 /* UPPResponseSerializer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UPPResponseSerializer.h; sourceTree = ""; }; + 6C3EE7F21D06EE1400506613 /* UPPResponseSerializer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPResponseSerializer.m; sourceTree = ""; }; + 6C3EE7F31D06EE1400506613 /* UPPSessionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UPPSessionManager.h; sourceTree = ""; }; + 6C3EE7F41D06EE1400506613 /* UPPSessionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPSessionManager.m; sourceTree = ""; }; + 6C3EE7F61D06EE1400506613 /* UPPBaseParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UPPBaseParser.h; sourceTree = ""; }; + 6C3EE7F71D06EE1400506613 /* UPPBaseParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPBaseParser.m; sourceTree = ""; }; + 6C3EE7F81D06EE1400506613 /* UPPDeviceParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UPPDeviceParser.h; sourceTree = ""; }; + 6C3EE7F91D06EE1400506613 /* UPPDeviceParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPDeviceParser.m; sourceTree = ""; }; + 6C3EE7FA1D06EE1400506613 /* UPPErrorParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UPPErrorParser.h; sourceTree = ""; }; + 6C3EE7FB1D06EE1400506613 /* UPPErrorParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPErrorParser.m; sourceTree = ""; }; + 6C3EE7FC1D06EE1400506613 /* UPPLastChangeParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UPPLastChangeParser.h; sourceTree = ""; }; + 6C3EE7FD1D06EE1400506613 /* UPPLastChangeParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPLastChangeParser.m; sourceTree = ""; }; + 6C3EE7FE1D06EE1400506613 /* UPPMediaItemParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UPPMediaItemParser.h; sourceTree = ""; }; + 6C3EE7FF1D06EE1400506613 /* UPPMediaItemParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPMediaItemParser.m; sourceTree = ""; }; + 6C3EE8001D06EE1400506613 /* UPPResponseParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UPPResponseParser.h; sourceTree = ""; }; + 6C3EE8011D06EE1400506613 /* UPPResponseParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPResponseParser.m; sourceTree = ""; }; + 6C3EE8031D06EE1400506613 /* UPPMediaItemProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UPPMediaItemProtocol.h; sourceTree = ""; }; + 6C3EE8051D06EE1400506613 /* UPPAVTransportService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UPPAVTransportService.h; sourceTree = ""; }; + 6C3EE8061D06EE1400506613 /* UPPAVTransportService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPAVTransportService.m; sourceTree = ""; }; + 6C3EE8071D06EE1400506613 /* UPPBasicService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UPPBasicService.h; sourceTree = ""; }; + 6C3EE8081D06EE1400506613 /* UPPBasicService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPBasicService.m; sourceTree = ""; }; + 6C3EE8091D06EE1400506613 /* UPPConnectionManagerService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UPPConnectionManagerService.h; sourceTree = ""; }; + 6C3EE80A1D06EE1400506613 /* UPPConnectionManagerService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPConnectionManagerService.m; sourceTree = ""; }; + 6C3EE80B1D06EE1400506613 /* UPPContentDirectoryService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UPPContentDirectoryService.h; sourceTree = ""; }; + 6C3EE80C1D06EE1400506613 /* UPPContentDirectoryService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPContentDirectoryService.m; sourceTree = ""; }; + 6C3EE80D1D06EE1400506613 /* UPPRenderingControlService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UPPRenderingControlService.h; sourceTree = ""; }; + 6C3EE80E1D06EE1400506613 /* UPPRenderingControlService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPRenderingControlService.m; sourceTree = ""; }; + 6C3EE8521D06EE8100506613 /* Cartfile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Cartfile; sourceTree = ""; }; + 6CA6C7721D06ED8700BA8CF1 /* CocoaUPnP.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CocoaUPnP.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6CA6C7751D06ED8800BA8CF1 /* CocoaUPnP.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CocoaUPnP.h; sourceTree = ""; }; + 6CA6C7771D06ED8800BA8CF1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 6CA6C76E1D06ED8700BA8CF1 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 6C3EE7C41D06EE1400506613 /* Events */ = { + isa = PBXGroup; + children = ( + 6C3EE7C51D06EE1400506613 /* UPPEventServer.h */, + 6C3EE7C61D06EE1400506613 /* UPPEventServer.m */, + 6C3EE7C71D06EE1400506613 /* UPPEventSubscription.h */, + 6C3EE7C81D06EE1400506613 /* UPPEventSubscription.m */, + 6C3EE7C91D06EE1400506613 /* UPPEventSubscriptionManager.h */, + 6C3EE7CA1D06EE1400506613 /* UPPEventSubscriptionManager.m */, + ); + path = Events; + sourceTree = ""; + }; + 6C3EE7CB1D06EE1400506613 /* Helpers */ = { + isa = PBXGroup; + children = ( + 6C3EE7CC1D06EE1400506613 /* NSArray+firstObjectMatchingPredicate.h */, + 6C3EE7CD1D06EE1400506613 /* NSArray+firstObjectMatchingPredicate.m */, + 6C3EE7CE1D06EE1400506613 /* NSMutableString+xmlNode.h */, + 6C3EE7CF1D06EE1400506613 /* NSMutableString+xmlNode.m */, + 6C3EE7D01D06EE1400506613 /* UPPMetadataHelper.h */, + 6C3EE7D11D06EE1400506613 /* UPPMetadataHelper.m */, + ); + path = Helpers; + sourceTree = ""; + }; + 6C3EE7D21D06EE1400506613 /* Models */ = { + isa = PBXGroup; + children = ( + 6C3EE7D31D06EE1400506613 /* UPPBasicDevice.h */, + 6C3EE7D41D06EE1400506613 /* UPPBasicDevice.m */, + 6C3EE7D51D06EE1400506613 /* UPPConstants.h */, + 6C3EE7D61D06EE1400506613 /* UPPConstants.m */, + 6C3EE7D71D06EE1400506613 /* UPPDeviceIcon.h */, + 6C3EE7D81D06EE1400506613 /* UPPDeviceIcon.m */, + 6C3EE7D91D06EE1400506613 /* UPPError.h */, + 6C3EE7DA1D06EE1400506613 /* UPPError.m */, + 6C3EE7DB1D06EE1400506613 /* UPPMediaItem.h */, + 6C3EE7DC1D06EE1400506613 /* UPPMediaItem.m */, + 6C3EE7DD1D06EE1400506613 /* UPPMediaItemResource.h */, + 6C3EE7DE1D06EE1400506613 /* UPPMediaItemResource.m */, + 6C3EE7DF1D06EE1400506613 /* UPPMediaRendererDevice.h */, + 6C3EE7E01D06EE1400506613 /* UPPMediaRendererDevice.m */, + 6C3EE7E11D06EE1400506613 /* UPPMediaServerDevice.h */, + 6C3EE7E21D06EE1400506613 /* UPPMediaServerDevice.m */, + 6C3EE7E31D06EE1400506613 /* UPPParameters.h */, + 6C3EE7E41D06EE1400506613 /* UPPParameters.m */, + 6C3EE7E51D06EE1400506613 /* UPPServiceDescription.h */, + 6C3EE7E61D06EE1400506613 /* UPPServiceDescription.m */, + ); + path = Models; + sourceTree = ""; + }; + 6C3EE7E71D06EE1400506613 /* Networking */ = { + isa = PBXGroup; + children = ( + 6C3EE7E81D06EE1400506613 /* SSDP */, + 6C3EE7ED1D06EE1400506613 /* UPPDiscovery.h */, + 6C3EE7EE1D06EE1400506613 /* UPPDiscovery.m */, + 6C3EE7EF1D06EE1400506613 /* UPPRequestSerializer.h */, + 6C3EE7F01D06EE1400506613 /* UPPRequestSerializer.m */, + 6C3EE7F11D06EE1400506613 /* UPPResponseSerializer.h */, + 6C3EE7F21D06EE1400506613 /* UPPResponseSerializer.m */, + 6C3EE7F31D06EE1400506613 /* UPPSessionManager.h */, + 6C3EE7F41D06EE1400506613 /* UPPSessionManager.m */, + ); + path = Networking; + sourceTree = ""; + }; + 6C3EE7E81D06EE1400506613 /* SSDP */ = { + isa = PBXGroup; + children = ( + 6C3EE7E91D06EE1400506613 /* SSDPService.h */, + 6C3EE7EA1D06EE1400506613 /* SSDPService.m */, + 6C3EE7EB1D06EE1400506613 /* SSDPServiceBrowser.h */, + 6C3EE7EC1D06EE1400506613 /* SSDPServiceBrowser.m */, + ); + path = SSDP; + sourceTree = ""; + }; + 6C3EE7F51D06EE1400506613 /* Parsers */ = { + isa = PBXGroup; + children = ( + 6C3EE7F61D06EE1400506613 /* UPPBaseParser.h */, + 6C3EE7F71D06EE1400506613 /* UPPBaseParser.m */, + 6C3EE7F81D06EE1400506613 /* UPPDeviceParser.h */, + 6C3EE7F91D06EE1400506613 /* UPPDeviceParser.m */, + 6C3EE7FA1D06EE1400506613 /* UPPErrorParser.h */, + 6C3EE7FB1D06EE1400506613 /* UPPErrorParser.m */, + 6C3EE7FC1D06EE1400506613 /* UPPLastChangeParser.h */, + 6C3EE7FD1D06EE1400506613 /* UPPLastChangeParser.m */, + 6C3EE7FE1D06EE1400506613 /* UPPMediaItemParser.h */, + 6C3EE7FF1D06EE1400506613 /* UPPMediaItemParser.m */, + 6C3EE8001D06EE1400506613 /* UPPResponseParser.h */, + 6C3EE8011D06EE1400506613 /* UPPResponseParser.m */, + ); + path = Parsers; + sourceTree = ""; + }; + 6C3EE8021D06EE1400506613 /* Protocols */ = { + isa = PBXGroup; + children = ( + 6C3EE8031D06EE1400506613 /* UPPMediaItemProtocol.h */, + ); + path = Protocols; + sourceTree = ""; + }; + 6C3EE8041D06EE1400506613 /* Services */ = { + isa = PBXGroup; + children = ( + 6C3EE8051D06EE1400506613 /* UPPAVTransportService.h */, + 6C3EE8061D06EE1400506613 /* UPPAVTransportService.m */, + 6C3EE8071D06EE1400506613 /* UPPBasicService.h */, + 6C3EE8081D06EE1400506613 /* UPPBasicService.m */, + 6C3EE8091D06EE1400506613 /* UPPConnectionManagerService.h */, + 6C3EE80A1D06EE1400506613 /* UPPConnectionManagerService.m */, + 6C3EE80B1D06EE1400506613 /* UPPContentDirectoryService.h */, + 6C3EE80C1D06EE1400506613 /* UPPContentDirectoryService.m */, + 6C3EE80D1D06EE1400506613 /* UPPRenderingControlService.h */, + 6C3EE80E1D06EE1400506613 /* UPPRenderingControlService.m */, + ); + path = Services; + sourceTree = ""; + }; + 6CA6C7681D06ED8700BA8CF1 = { + isa = PBXGroup; + children = ( + 6C3EE8521D06EE8100506613 /* Cartfile */, + 6CA6C7771D06ED8800BA8CF1 /* Info.plist */, + 6CA6C7741D06ED8800BA8CF1 /* CocoaUPnP */, + 6CA6C7731D06ED8700BA8CF1 /* Products */, + ); + sourceTree = ""; + }; + 6CA6C7731D06ED8700BA8CF1 /* Products */ = { + isa = PBXGroup; + children = ( + 6CA6C7721D06ED8700BA8CF1 /* CocoaUPnP.framework */, + ); + name = Products; + sourceTree = ""; + }; + 6CA6C7741D06ED8800BA8CF1 /* CocoaUPnP */ = { + isa = PBXGroup; + children = ( + 6C3EE7C41D06EE1400506613 /* Events */, + 6C3EE7CB1D06EE1400506613 /* Helpers */, + 6C3EE7D21D06EE1400506613 /* Models */, + 6C3EE7E71D06EE1400506613 /* Networking */, + 6C3EE7F51D06EE1400506613 /* Parsers */, + 6C3EE8021D06EE1400506613 /* Protocols */, + 6C3EE8041D06EE1400506613 /* Services */, + 6CA6C7751D06ED8800BA8CF1 /* CocoaUPnP.h */, + ); + path = CocoaUPnP; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 6CA6C76F1D06ED8700BA8CF1 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 6C3EE82F1D06EE1400506613 /* SSDPService.h in Headers */, + 6C3EE83D1D06EE1400506613 /* UPPDeviceParser.h in Headers */, + 6C3EE8371D06EE1400506613 /* UPPResponseSerializer.h in Headers */, + 6C3EE84C1D06EE1400506613 /* UPPConnectionManagerService.h in Headers */, + 6C3EE8111D06EE1400506613 /* UPPEventSubscription.h in Headers */, + 6C3EE80F1D06EE1400506613 /* UPPEventServer.h in Headers */, + 6C3EE8211D06EE1400506613 /* UPPError.h in Headers */, + 6C3EE8351D06EE1400506613 /* UPPRequestSerializer.h in Headers */, + 6C3EE81D1D06EE1400506613 /* UPPConstants.h in Headers */, + 6C3EE8391D06EE1400506613 /* UPPSessionManager.h in Headers */, + 6C3EE84E1D06EE1400506613 /* UPPContentDirectoryService.h in Headers */, + 6C3EE8131D06EE1400506613 /* UPPEventSubscriptionManager.h in Headers */, + 6C3EE8471D06EE1400506613 /* UPPMediaItemProtocol.h in Headers */, + 6C3EE8151D06EE1400506613 /* NSArray+firstObjectMatchingPredicate.h in Headers */, + 6C3EE83B1D06EE1400506613 /* UPPBaseParser.h in Headers */, + 6C3EE8271D06EE1400506613 /* UPPMediaRendererDevice.h in Headers */, + 6CA6C7761D06ED8800BA8CF1 /* CocoaUPnP.h in Headers */, + 6C3EE84A1D06EE1400506613 /* UPPBasicService.h in Headers */, + 6C3EE8311D06EE1400506613 /* SSDPServiceBrowser.h in Headers */, + 6C3EE8451D06EE1400506613 /* UPPResponseParser.h in Headers */, + 6C3EE81B1D06EE1400506613 /* UPPBasicDevice.h in Headers */, + 6C3EE8231D06EE1400506613 /* UPPMediaItem.h in Headers */, + 6C3EE8501D06EE1400506613 /* UPPRenderingControlService.h in Headers */, + 6C3EE8291D06EE1400506613 /* UPPMediaServerDevice.h in Headers */, + 6C3EE81F1D06EE1400506613 /* UPPDeviceIcon.h in Headers */, + 6C3EE8171D06EE1400506613 /* NSMutableString+xmlNode.h in Headers */, + 6C3EE8251D06EE1400506613 /* UPPMediaItemResource.h in Headers */, + 6C3EE82D1D06EE1400506613 /* UPPServiceDescription.h in Headers */, + 6C3EE8331D06EE1400506613 /* UPPDiscovery.h in Headers */, + 6C3EE8431D06EE1400506613 /* UPPMediaItemParser.h in Headers */, + 6C3EE8481D06EE1400506613 /* UPPAVTransportService.h in Headers */, + 6C3EE82B1D06EE1400506613 /* UPPParameters.h in Headers */, + 6C3EE83F1D06EE1400506613 /* UPPErrorParser.h in Headers */, + 6C3EE8191D06EE1400506613 /* UPPMetadataHelper.h in Headers */, + 6C3EE8411D06EE1400506613 /* UPPLastChangeParser.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 6CA6C7711D06ED8700BA8CF1 /* CocoaUPnP */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6CA6C77A1D06ED8800BA8CF1 /* Build configuration list for PBXNativeTarget "CocoaUPnP" */; + buildPhases = ( + 6CA6C76D1D06ED8700BA8CF1 /* Sources */, + 6CA6C76E1D06ED8700BA8CF1 /* Frameworks */, + 6CA6C76F1D06ED8700BA8CF1 /* Headers */, + 6CA6C7701D06ED8700BA8CF1 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = CocoaUPnP; + productName = CocoaUPnP; + productReference = 6CA6C7721D06ED8700BA8CF1 /* CocoaUPnP.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 6CA6C7691D06ED8700BA8CF1 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0730; + ORGANIZATIONNAME = ARCAM; + TargetAttributes = { + 6CA6C7711D06ED8700BA8CF1 = { + CreatedOnToolsVersion = 7.3.1; + }; + }; + }; + buildConfigurationList = 6CA6C76C1D06ED8700BA8CF1 /* Build configuration list for PBXProject "CocoaUPnP" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 6CA6C7681D06ED8700BA8CF1; + productRefGroup = 6CA6C7731D06ED8700BA8CF1 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 6CA6C7711D06ED8700BA8CF1 /* CocoaUPnP */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 6CA6C7701D06ED8700BA8CF1 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 6CA6C76D1D06ED8700BA8CF1 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6C3EE8491D06EE1400506613 /* UPPAVTransportService.m in Sources */, + 6C3EE8181D06EE1400506613 /* NSMutableString+xmlNode.m in Sources */, + 6C3EE8141D06EE1400506613 /* UPPEventSubscriptionManager.m in Sources */, + 6C3EE8221D06EE1400506613 /* UPPError.m in Sources */, + 6C3EE81A1D06EE1400506613 /* UPPMetadataHelper.m in Sources */, + 6C3EE8401D06EE1400506613 /* UPPErrorParser.m in Sources */, + 6C3EE83C1D06EE1400506613 /* UPPBaseParser.m in Sources */, + 6C3EE81E1D06EE1400506613 /* UPPConstants.m in Sources */, + 6C3EE8261D06EE1400506613 /* UPPMediaItemResource.m in Sources */, + 6C3EE83A1D06EE1400506613 /* UPPSessionManager.m in Sources */, + 6C3EE84B1D06EE1400506613 /* UPPBasicService.m in Sources */, + 6C3EE8341D06EE1400506613 /* UPPDiscovery.m in Sources */, + 6C3EE8301D06EE1400506613 /* SSDPService.m in Sources */, + 6C3EE84F1D06EE1400506613 /* UPPContentDirectoryService.m in Sources */, + 6C3EE8461D06EE1400506613 /* UPPResponseParser.m in Sources */, + 6C3EE8201D06EE1400506613 /* UPPDeviceIcon.m in Sources */, + 6C3EE8361D06EE1400506613 /* UPPRequestSerializer.m in Sources */, + 6C3EE8281D06EE1400506613 /* UPPMediaRendererDevice.m in Sources */, + 6C3EE82C1D06EE1400506613 /* UPPParameters.m in Sources */, + 6C3EE8101D06EE1400506613 /* UPPEventServer.m in Sources */, + 6C3EE8121D06EE1400506613 /* UPPEventSubscription.m in Sources */, + 6C3EE8511D06EE1400506613 /* UPPRenderingControlService.m in Sources */, + 6C3EE8321D06EE1400506613 /* SSDPServiceBrowser.m in Sources */, + 6C3EE8421D06EE1400506613 /* UPPLastChangeParser.m in Sources */, + 6C3EE81C1D06EE1400506613 /* UPPBasicDevice.m in Sources */, + 6C3EE8441D06EE1400506613 /* UPPMediaItemParser.m in Sources */, + 6C3EE82E1D06EE1400506613 /* UPPServiceDescription.m in Sources */, + 6C3EE82A1D06EE1400506613 /* UPPMediaServerDevice.m in Sources */, + 6C3EE84D1D06EE1400506613 /* UPPConnectionManagerService.m in Sources */, + 6C3EE8161D06EE1400506613 /* NSArray+firstObjectMatchingPredicate.m in Sources */, + 6C3EE8381D06EE1400506613 /* UPPResponseSerializer.m in Sources */, + 6C3EE83E1D06EE1400506613 /* UPPDeviceParser.m in Sources */, + 6C3EE8241D06EE1400506613 /* UPPMediaItem.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 6CA6C7781D06ED8800BA8CF1 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + 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_PREPROCESSOR_DEFINITIONS = ( + "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.3; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 6CA6C7791D06ED8800BA8CF1 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + 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.3; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 6CA6C77B1D06ED8800BA8CF1 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "$(SRCROOT)/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = uk.com.arcam.cocoaupnp; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 6CA6C77C1D06ED8800BA8CF1 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "$(SRCROOT)/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = uk.com.arcam.cocoaupnp; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 6CA6C76C1D06ED8700BA8CF1 /* Build configuration list for PBXProject "CocoaUPnP" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6CA6C7781D06ED8800BA8CF1 /* Debug */, + 6CA6C7791D06ED8800BA8CF1 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 6CA6C77A1D06ED8800BA8CF1 /* Build configuration list for PBXNativeTarget "CocoaUPnP" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6CA6C77B1D06ED8800BA8CF1 /* Debug */, + 6CA6C77C1D06ED8800BA8CF1 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 6CA6C7691D06ED8700BA8CF1 /* Project object */; +} diff --git a/CocoaUPnP.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/CocoaUPnP.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..04351f3 --- /dev/null +++ b/CocoaUPnP.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/CocoaUPnP.xcodeproj/xcshareddata/xcschemes/CocoaUPnP.xcscheme b/CocoaUPnP.xcodeproj/xcshareddata/xcschemes/CocoaUPnP.xcscheme new file mode 100644 index 0000000..e71acd8 --- /dev/null +++ b/CocoaUPnP.xcodeproj/xcshareddata/xcschemes/CocoaUPnP.xcscheme @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Info.plist b/Info.plist new file mode 100644 index 0000000..d3de8ee --- /dev/null +++ b/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSPrincipalClass + + + From 4d6ec18d388658876c50ba29b0ced98e95e15f36 Mon Sep 17 00:00:00 2001 From: Derek Clarkson Date: Tue, 7 Jun 2016 23:04:43 +1000 Subject: [PATCH 2/7] Fixing completion and import issues. --- .DS_Store | Bin 6148 -> 6148 bytes CocoaUPnP.xcodeproj/project.pbxproj | 24 +++++ CocoaUPnP/Events/UPPEventServer.h | 2 +- CocoaUPnP/Events/UPPEventServer.m | 12 +-- .../Events/UPPEventSubscriptionManager.m | 100 +++++++++--------- CocoaUPnP/Models/UPPConstants.m | 2 + .../Networking/SSDP/SSDPServiceBrowser.m | 68 ++++++------ CocoaUPnP/Parsers/UPPDeviceParser.m | 37 +++---- CocoaUPnP/Parsers/UPPErrorParser.m | 10 +- CocoaUPnP/Parsers/UPPLastChangeParser.m | 2 +- CocoaUPnP/Parsers/UPPMediaItemParser.m | 44 ++++---- CocoaUPnP/Parsers/UPPResponseParser.m | 26 ++--- 12 files changed, 179 insertions(+), 148 deletions(-) diff --git a/.DS_Store b/.DS_Store index 9499f2294a89ca78564f7d99cb55f4c0e8549874..58d20a5574c61bf9c8e901ced0a0004ad04b2ea2 100644 GIT binary patch delta 63 zcmZoMXffE}%*f2hVLiElQHRIHC8e|^nStSQP0^Rhb&M8FU`mIhAj2>?IX|~x^Lr6d Q=FI|3Y|NY4IsWnk0D*iIN&o-= delta 68 zcmZoMXffE}%*f2}#B_24qYjUYOG;@;G6Tcqn)Hd2>liJV(nWxj4u3(0VQ_MOZUF-b UFbZsDWMX5R*ub}$o#QV*0K-KSBLDyZ diff --git a/CocoaUPnP.xcodeproj/project.pbxproj b/CocoaUPnP.xcodeproj/project.pbxproj index f06e3e7..5de9e0a 100644 --- a/CocoaUPnP.xcodeproj/project.pbxproj +++ b/CocoaUPnP.xcodeproj/project.pbxproj @@ -74,6 +74,10 @@ 6C3EE84F1D06EE1400506613 /* UPPContentDirectoryService.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE80C1D06EE1400506613 /* UPPContentDirectoryService.m */; }; 6C3EE8501D06EE1400506613 /* UPPRenderingControlService.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE80D1D06EE1400506613 /* UPPRenderingControlService.h */; settings = {ATTRIBUTES = (Public, ); }; }; 6C3EE8511D06EE1400506613 /* UPPRenderingControlService.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE80E1D06EE1400506613 /* UPPRenderingControlService.m */; }; + 6C3EE86C1D06F9F400506613 /* AFNetworking.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C3EE8681D06F9F400506613 /* AFNetworking.framework */; }; + 6C3EE86D1D06F9F400506613 /* CocoaAsyncSocket.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C3EE8691D06F9F400506613 /* CocoaAsyncSocket.framework */; }; + 6C3EE86E1D06F9F400506613 /* GCDWebServers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C3EE86A1D06F9F400506613 /* GCDWebServers.framework */; }; + 6C3EE86F1D06F9F400506613 /* Ono.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C3EE86B1D06F9F400506613 /* Ono.framework */; }; 6CA6C7761D06ED8800BA8CF1 /* CocoaUPnP.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CA6C7751D06ED8800BA8CF1 /* CocoaUPnP.h */; settings = {ATTRIBUTES = (Public, ); }; }; /* End PBXBuildFile section */ @@ -146,6 +150,10 @@ 6C3EE80D1D06EE1400506613 /* UPPRenderingControlService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UPPRenderingControlService.h; sourceTree = ""; }; 6C3EE80E1D06EE1400506613 /* UPPRenderingControlService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPRenderingControlService.m; sourceTree = ""; }; 6C3EE8521D06EE8100506613 /* Cartfile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Cartfile; sourceTree = ""; }; + 6C3EE8681D06F9F400506613 /* AFNetworking.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AFNetworking.framework; path = Carthage/Build/iOS/AFNetworking.framework; sourceTree = ""; }; + 6C3EE8691D06F9F400506613 /* CocoaAsyncSocket.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CocoaAsyncSocket.framework; path = Carthage/Build/iOS/CocoaAsyncSocket.framework; sourceTree = ""; }; + 6C3EE86A1D06F9F400506613 /* GCDWebServers.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GCDWebServers.framework; path = Carthage/Build/iOS/GCDWebServers.framework; sourceTree = ""; }; + 6C3EE86B1D06F9F400506613 /* Ono.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Ono.framework; path = Carthage/Build/iOS/Ono.framework; sourceTree = ""; }; 6CA6C7721D06ED8700BA8CF1 /* CocoaUPnP.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CocoaUPnP.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 6CA6C7751D06ED8800BA8CF1 /* CocoaUPnP.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CocoaUPnP.h; sourceTree = ""; }; 6CA6C7771D06ED8800BA8CF1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -156,6 +164,10 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 6C3EE86C1D06F9F400506613 /* AFNetworking.framework in Frameworks */, + 6C3EE86D1D06F9F400506613 /* CocoaAsyncSocket.framework in Frameworks */, + 6C3EE86E1D06F9F400506613 /* GCDWebServers.framework in Frameworks */, + 6C3EE86F1D06F9F400506613 /* Ono.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -289,6 +301,10 @@ 6CA6C7681D06ED8700BA8CF1 = { isa = PBXGroup; children = ( + 6C3EE8681D06F9F400506613 /* AFNetworking.framework */, + 6C3EE8691D06F9F400506613 /* CocoaAsyncSocket.framework */, + 6C3EE86A1D06F9F400506613 /* GCDWebServers.framework */, + 6C3EE86B1D06F9F400506613 /* Ono.framework */, 6C3EE8521D06EE8100506613 /* Cartfile */, 6CA6C7771D06ED8800BA8CF1 /* Info.plist */, 6CA6C7741D06ED8800BA8CF1 /* CocoaUPnP */, @@ -567,6 +583,10 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + ); INFOPLIST_FILE = "$(SRCROOT)/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; @@ -583,6 +603,10 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + ); INFOPLIST_FILE = "$(SRCROOT)/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; diff --git a/CocoaUPnP/Events/UPPEventServer.h b/CocoaUPnP/Events/UPPEventServer.h index ac643c4..3ce9c6f 100644 --- a/CocoaUPnP/Events/UPPEventServer.h +++ b/CocoaUPnP/Events/UPPEventServer.h @@ -2,7 +2,7 @@ // Copyright 2015 Arcam. See LICENSE file. #import -#import +#import /** A delegate protocol for recieving parsed UPnP events. diff --git a/CocoaUPnP/Events/UPPEventServer.m b/CocoaUPnP/Events/UPPEventServer.m index b11ffcc..1351080 100644 --- a/CocoaUPnP/Events/UPPEventServer.m +++ b/CocoaUPnP/Events/UPPEventServer.m @@ -2,7 +2,7 @@ // Copyright 2015 Arcam. See LICENSE file. #import "UPPEventServer.h" -#import "GCDWebServerDataRequest.h" +#import #import "UPPLastChangeParser.h" const NSUInteger UPPEventServerPort = 54123; @@ -18,14 +18,14 @@ @implementation UPPEventServer - (void)startServer { __weak typeof(self) weakSelf = self; - + [self.webServer addHandlerForMethod:@"NOTIFY" path:@"/Event" requestClass:[GCDWebServerDataRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest *request) { if (request != nil) { [weakSelf requestRecieved:(GCDWebServerDataRequest *)request]; } return [[GCDWebServerResponse alloc] init]; }]; - + if ([self.webServer startWithPort:UPPEventServerPort bonjourName:nil]) { NSURL *baseURL = self.webServer.serverURL; self.callbackURL = [baseURL URLByAppendingPathComponent:@"Event"]; @@ -65,18 +65,18 @@ - (void)requestRecieved:(GCDWebServerDataRequest *)request { NSDictionary *headers = request.headers; NSMutableDictionary *eventDictionary = [NSMutableDictionary dictionary]; - + NSString *sid = headers[@"SID"]; if (sid) { [eventDictionary setObject:sid forKey:UPPEventServerSIDKey]; } - + [UPPLastChangeParser parseData:request.data completion:^(NSDictionary *event, NSError *error) { if (event) { eventDictionary[UPPEventServerBodyKey] = event; } }]; - + [self.eventDelegate eventReceived:[eventDictionary copy]]; } diff --git a/CocoaUPnP/Events/UPPEventSubscriptionManager.m b/CocoaUPnP/Events/UPPEventSubscriptionManager.m index 29efa5f..aa2f96a 100644 --- a/CocoaUPnP/Events/UPPEventSubscriptionManager.m +++ b/CocoaUPnP/Events/UPPEventSubscriptionManager.m @@ -1,6 +1,8 @@ // CocoaUPnP by A&R Cambridge Ltd, http://www.arcam.co.uk // Copyright 2015 Arcam. See LICENSE file. +@import UIKit; + #import "UPPEventSubscriptionManager.h" #import "UPPBasicService.h" #import "UPPEventSubscription.h" @@ -17,13 +19,13 @@ @implementation UPPEventSubscriptionManager + (instancetype)sharedManager { static dispatch_once_t onceToken = 0; - + __strong static id _sharedManager = nil; dispatch_once(&onceToken, ^{ NSURLSession *session = [NSURLSession sharedSession]; _sharedManager = [[self alloc] initWithSession:session]; }); - + return _sharedManager; } @@ -33,7 +35,7 @@ - (instancetype)initWithSession:(NSURLSession *)session self.session = session; [self addNotificationObservers]; } - + return self; } @@ -45,12 +47,12 @@ - (void)dealloc - (void)addNotificationObservers { NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; - + [nc addObserver:self selector:@selector(invalidateAllTimers) name:UIApplicationDidEnterBackgroundNotification object:nil]; - + [nc addObserver:self selector:@selector(renewAllTimers) name:UIApplicationDidBecomeActiveNotification @@ -64,7 +66,7 @@ - (NSMutableArray *)activeSubscriptions if (!_activeSubscriptions) { _activeSubscriptions = [NSMutableArray array]; } - + return _activeSubscriptions; } @@ -73,7 +75,7 @@ - (UPPEventServer *)eventServer if (!_eventServer) { _eventServer = [[UPPEventServer alloc] init]; } - + return _eventServer; } @@ -85,7 +87,7 @@ - (void)subscribeObserver:(id)observer toService:( self.eventServer.eventDelegate = self; [self.eventServer startServer]; } - + // If we already have an existing subscription, add the new observer then // bail out early. UPPEventSubscription *subscription = [self subscriptionWithURL:service.eventSubscriptionURL]; @@ -96,7 +98,7 @@ - (void)subscribeObserver:(id)observer toService:( } return; } - + // Create a new subscription. NSURL *url = service.eventSubscriptionURL; subscription = [UPPEventSubscription subscriptionWithSubscriptionURL:url @@ -121,13 +123,13 @@ - (void)subscribeObserver:(id)observer toService:( - (void)subscribe:(UPPEventSubscription *)subscription completion:(void(^)(NSString *subscriptionID, NSDate *expiryDate, NSError *error))completion { if (!completion) { return; } - + NSURL *url = subscription.eventSubscriptionURL; NSURLRequest *request = [self subscriptionRequestWithEventSubscriptionURL:url]; - + [self sendSubscriptionRequest:request completion:^(NSURLResponse *response, NSError *error) { NSInteger code = [(NSHTTPURLResponse *)response statusCode]; - + if (code != 200) { if (self.activeSubscriptions.count == 0) { [self.eventServer stopServer]; @@ -152,34 +154,34 @@ - (void)renewSubscription:(UPPEventSubscription *)subscription completion:(void( return; } NSURL *subscriptionURL = subscription.eventSubscriptionURL; - + NSDictionary *headers = @{ @"HOST": [subscriptionURL absoluteString], @"SID": [subscription subscriptionID], @"TIMEOUT": @"Second-1800" }; - + NSMutableURLRequest *request = [self requestWithURL:subscriptionURL method:@"SUBSCRIBE" headers:headers]; - + NSURLSessionDataTask *task = [self.session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { - + if (!completion) { return; } - + NSInteger code = [(NSHTTPURLResponse *)response statusCode]; - + if (code != 200) { NSError *e = error ?: UPPErrorWithCodeAndDescription(code, @"Renew subscription error"); completion(nil, nil, e); return; } - + NSDictionary *headers = [(NSHTTPURLResponse *)response allHeaderFields]; NSString *subscriptionID = headers[@"SID"]; NSDate *expiryDate = [self dateFromHeader:headers[@"TIMEOUT"]]; - + completion(subscriptionID, expiryDate, nil); }]; - + [task resume]; } @@ -194,18 +196,18 @@ - (NSURLRequest *)subscriptionRequestWithEventSubscriptionURL:(NSURL *)url NSString *host = [NSString stringWithFormat:@"%@:%@", [subscriptionURL host], [subscriptionURL port]]; - + NSURL *callbackURL = [self.eventServer eventServerCallbackURL]; NSString *callback = [NSString stringWithFormat:@"<%@>", [callbackURL absoluteString]]; - + NSDictionary *headers = @{ @"HOST": host, @"USER-AGENT": @"iOS/8.4 UPnP/1.1 Example/1.0", @"CALLBACK": callback, @"NT": @"upnp:event", @"TIMEOUT": @"Second-1800" }; - - + + return [self requestWithURL:url method:@"SUBSCRIBE" headers:headers]; } @@ -213,27 +215,27 @@ - (void)unsubscribe:(UPPEventSubscription *)subscription completion:(void(^)(BOO { [subscription invalidateTimers]; [self.activeSubscriptions removeObject:subscription]; - + if (!subscription.eventSubscriptionURL || !subscription.subscriptionID) { if (completion) { completion(NO); } return; } - + NSURL *subscriptionURL = subscription.eventSubscriptionURL; - + NSDictionary *headers = @{ @"HOST": [subscriptionURL absoluteString], @"SID": [subscription subscriptionID] }; - + NSMutableURLRequest *request = [self requestWithURL:subscriptionURL method:@"UNSUBSCRIBE" headers:headers]; - + NSURLSessionDataTask *task = [self.session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { - + NSInteger code = [(NSHTTPURLResponse *)response statusCode]; - + if (code == 200) { - + if (self.activeSubscriptions.count == 0) { [self.eventServer stopServer]; self.eventServer = nil; @@ -247,22 +249,22 @@ - (void)unsubscribe:(UPPEventSubscription *)subscription completion:(void(^)(BOO } } }]; - + [task resume]; } - (void)removeObserver:(id)observer fromService:(UPPBasicService *)service completion:(void (^)(BOOL))completion { UPPEventSubscription *subscripton = [self subscriptionWithURL:service.eventSubscriptionURL]; - + if (subscripton) { [subscripton removeEventObserver:observer]; - + if ([subscripton eventObservers].count == 0) { [self unsubscribe:subscripton completion:nil]; } } - + if (completion) { completion(NO); } @@ -271,18 +273,18 @@ - (void)removeObserver:(id)observer fromService:(U - (void)removeSubscriptionsForServices:(NSArray *)services deviceId:(NSString *)deviceId { NSMutableArray *subscriptions = [NSMutableArray array]; - + for (UPPServiceDescription *service in services) { NSString *identifier = [NSString stringWithFormat:@"%@::%@", deviceId, service.serviceType]; NSArray *objects = [self subscriptionsForServiceIdentifier:identifier]; [subscriptions addObjectsFromArray:objects]; } - + if (subscriptions.count == 0) { return; } - + for (UPPEventSubscription *subscription in subscriptions) { [subscription invalidateTimers]; [self.activeSubscriptions removeObject:subscription]; @@ -297,11 +299,11 @@ - (void)eventReceived:(NSDictionary *)event NSPredicate *predicate = [NSPredicate predicateWithFormat:@"subscriptionID == %@", sid]; UPPEventSubscription *subscription = [self.activeSubscriptions upp_firstObjectMatchingPredicate:predicate]; - + if (!subscription) { return; } - + [subscription informObserversOfEvent:event]; } @@ -325,7 +327,7 @@ - (UPPEventSubscription *)subscriptionWithURL:(NSURL *)url { NSPredicate *predicate = [NSPredicate predicateWithFormat:@"eventSubscriptionURL = %@", url]; NSArray *matches = [self.activeSubscriptions filteredArrayUsingPredicate:predicate]; - + return [matches firstObject]; } @@ -340,10 +342,10 @@ - (NSDate *)dateFromHeader:(NSString *)header if (!header) { return nil; } - + NSString *timeout = [header stringByReplacingOccurrencesOfString:@"Second-" withString:@""]; - + return [NSDate dateWithTimeIntervalSinceNow:[timeout doubleValue]]; } @@ -351,13 +353,13 @@ - (void)sendSubscriptionRequest:(NSURLRequest *)request completion:(void (^)(NSU { if (!completion) { return; } if (!request) { return; } - + NSURLSessionDataTask *task = [self.session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { dispatch_async(dispatch_get_main_queue(), ^{ completion(response, error); }); }]; - + [task resume]; } @@ -365,11 +367,11 @@ - (NSMutableURLRequest *)requestWithURL:(NSURL *)url method:(NSString *)method h { NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; [request setHTTPMethod:method]; - + [headers enumerateKeysAndObjectsUsingBlock:^(NSString *header, NSString *value, BOOL *stop) { [request setValue:value forHTTPHeaderField:header]; }]; - + return [request copy]; } diff --git a/CocoaUPnP/Models/UPPConstants.m b/CocoaUPnP/Models/UPPConstants.m index e4fddfb..3b99f66 100644 --- a/CocoaUPnP/Models/UPPConstants.m +++ b/CocoaUPnP/Models/UPPConstants.m @@ -1,6 +1,8 @@ // CocoaUPnP by A&R Cambridge Ltd, http://www.arcam.co.uk // Copyright 2015 Arcam. See LICENSE file. +@import Foundation; + #import "UPPConstants.h" NSString * const UPPSOAPActionKey = @"SoapAction"; diff --git a/CocoaUPnP/Networking/SSDP/SSDPServiceBrowser.m b/CocoaUPnP/Networking/SSDP/SSDPServiceBrowser.m index 7da8374..d9b1b91 100644 --- a/CocoaUPnP/Networking/SSDP/SSDPServiceBrowser.m +++ b/CocoaUPnP/Networking/SSDP/SSDPServiceBrowser.m @@ -22,9 +22,11 @@ // Expanded for CocoaUPnP by A&R Cambridge Ltd, http://www.arcam.co.uk // Copyright 2015 Arcam. See LICENSE file. +@import UIKit; + #import "SSDPServiceBrowser.h" -#import "GCDAsyncUdpSocket.h" +#import #import "SSDPService.h" #import @@ -54,19 +56,19 @@ @implementation SSDPServiceBrowser #pragma mark - Public Methods - (void)startBrowsingForServiceTypes:(NSString *)serviceType { - + if (self.multicastSocket.isClosed) { [self setupMulticastSocket]; } - + if (self.unicastSocket.isClosed) { [self setupUnicastSocket]; } - + NSString *searchHeader; searchHeader = [self _prepareSearchRequestWithServiceType:serviceType]; NSData *d = [searchHeader dataUsingEncoding:NSUTF8StringEncoding]; - + [self.multicastSocket sendData:d toHost:SSDPMulticastGroupAddress port:SSDPMulticastUDPPort @@ -77,26 +79,26 @@ - (void)startBrowsingForServiceTypes:(NSString *)serviceType { - (void)setupMulticastSocket { [self.multicastSocket setIPv6Enabled:NO]; - + NSError *err = nil; - + NSDictionary *interfaces = [SSDPServiceBrowser availableNetworkInterfaces]; NSData *sourceAddress = _networkInterface? [interfaces objectForKey:_networkInterface] : nil; - + if (!sourceAddress) { sourceAddress = [[interfaces allValues] firstObject]; } - + if (![self.multicastSocket bindToAddress:sourceAddress error:&err]) { [self _notifyDelegateWithError:err]; return; } - + if (![self.multicastSocket joinMulticastGroup:SSDPMulticastGroupAddress error:&err]) { [self _notifyDelegateWithError:err]; return; } - + if (![self.multicastSocket beginReceiving:&err]) { [self _notifyDelegateWithError:err]; return; @@ -106,19 +108,19 @@ - (void)setupMulticastSocket - (void)setupUnicastSocket { [self.unicastSocket setIPv6Enabled:NO]; - + NSError *err = nil; - + if (![self.unicastSocket bindToPort:1900 error:&err]) { [self _notifyDelegateWithError:err]; return; } - + if (![self.unicastSocket joinMulticastGroup:SSDPMulticastGroupAddress error:&err]) { [self _notifyDelegateWithError:err]; return; } - + if (![self.unicastSocket beginReceiving:&err]) { [self _notifyDelegateWithError:err]; return; @@ -139,8 +141,8 @@ - (GCDAsyncUdpSocket *)unicastSocket { if (!_unicastSocket) { _unicastSocket = [[GCDAsyncUdpSocket alloc] - initWithDelegate:self - delegateQueue:dispatch_get_main_queue()]; + initWithDelegate:self + delegateQueue:dispatch_get_main_queue()]; } return _unicastSocket; } @@ -149,7 +151,7 @@ - (void)stopBrowsingForServices { [self closeSocket:self.multicastSocket]; self.multicastSocket = nil; - + [self closeSocket:self.unicastSocket]; self.unicastSocket = nil; } @@ -172,21 +174,21 @@ - (void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data fromAddress:(NSData *)address withFilterContext:(id)filterContext { NSString *msg = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; - + if (!msg) { return; } - + NSDictionary *headers = [self _parseHeadersFromMessage:msg]; SSDPService *service = [[SSDPService alloc] initWithHeaders:headers]; - + if ([headers[SSDPResponseStatusKey] isEqualToString:@"200"]) { [self _notifyDelegateWithFoundService:service]; } - + else if ([headers[SSDPRequestMethodKey] isEqualToString:@"NOTIFY"]) { NSString *nts = headers[@"nts"]; - + if ( [nts isEqualToString:@"ssdp:alive"] ) { [self _notifyDelegateWithFoundService:service]; } @@ -206,10 +208,10 @@ - (NSMutableDictionary *)_parseHeadersFromMessage:(NSString *)message { regularExpressionWithPattern:pattern options:options error:nil]; - + NSMutableDictionary *headers = [NSMutableDictionary dictionary]; __block SSDPMessageType type = SSDPUnknownMessage; - + [message enumerateLinesUsingBlock:^(NSString *line, BOOL *stop) { if (type == SSDPUnknownMessage) { // First line describes type of message @@ -239,7 +241,7 @@ - (NSMutableDictionary *)_parseHeadersFromMessage:(NSString *)message { }]; } }]; - + return headers; } @@ -273,7 +275,7 @@ - (void)_notifyDelegateWithRemovedService:(SSDPService *)service - (NSString *)_prepareSearchRequestWithServiceType:(NSString *)serviceType { NSString *userAgent = [self _userAgentString]; - + return [NSString stringWithFormat: @"M-SEARCH * HTTP/1.1\r\n" "HOST: %@:%d\r\n" @@ -291,20 +293,20 @@ - (NSString *)_userAgentString { NSString *userAgent = nil; NSDictionary *bundleInfos = [[NSBundle mainBundle] infoDictionary]; NSString *bundleExecutable = bundleInfos[(__bridge NSString *)kCFBundleExecutableKey] ?: bundleInfos[(__bridge NSString *)kCFBundleIdentifierKey]; - + #if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) userAgent = [NSString stringWithFormat:@"%@/%@ (%@; iOS %@) %@", bundleExecutable, (__bridge id)CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), kCFBundleVersionKey) ?: bundleInfos[(__bridge NSString *)kCFBundleVersionKey], [[UIDevice currentDevice] model], [[UIDevice currentDevice] systemVersion], SSDPVersionString]; - + #elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED) userAgent = [NSString stringWithFormat:@"%@/%@ (Mac OS X %@) %@", bundleExecutable, bundleInfos[@"CFBundleShortVersionString"] ?: bundleInfos[(__bridge NSString *)kCFBundleVersionKey], [[NSProcessInfo processInfo] operatingSystemVersionString], SSDPVersionString]; #endif - + return userAgent; } @@ -312,7 +314,7 @@ + (NSDictionary *)availableNetworkInterfaces { NSMutableDictionary *addresses = [NSMutableDictionary dictionary]; struct ifaddrs *interfaces = NULL; struct ifaddrs *ifa = NULL; - + // retrieve the current interfaces - returns 0 on success if( getifaddrs(&interfaces) == 0 ) { for( ifa = interfaces; ifa != NULL; ifa = ifa->ifa_next ) { @@ -322,10 +324,10 @@ + (NSDictionary *)availableNetworkInterfaces { [addresses setObject:data forKey:if_name]; } } - + freeifaddrs(interfaces); } - + return addresses; } diff --git a/CocoaUPnP/Parsers/UPPDeviceParser.m b/CocoaUPnP/Parsers/UPPDeviceParser.m index 320f405..a83b255 100644 --- a/CocoaUPnP/Parsers/UPPDeviceParser.m +++ b/CocoaUPnP/Parsers/UPPDeviceParser.m @@ -1,13 +1,14 @@ // CocoaUPnP by A&R Cambridge Ltd, http://www.arcam.co.uk // Copyright 2015 Arcam. See LICENSE file. +#import +#import + #import "UPPDeviceParser.h" #import "UPPBasicDevice.h" -#import "Ono.h" #import "UPPDeviceIcon.h" #import "UPPServiceDescription.h" #import "UPPError.h" -#import "AFHTTPSessionManager.h" #import "UPPRequestSerializer.h" #import "UPPMediaRendererDevice.h" #import "UPPMediaServerDevice.h" @@ -17,7 +18,7 @@ @implementation UPPDeviceParser + (void)parseURL:(NSURL *)url withCompletion:(CompletionBlock)completion { if (!completion) { return; } - + AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; manager.responseSerializer = [AFHTTPResponseSerializer serializer]; [manager GET:url.absoluteString parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, NSData *data) { @@ -35,27 +36,27 @@ + (void)parseURL:(NSURL *)url withCompletion:(CompletionBlock)completion - (void)parseWithBaseURL:(NSURL *)baseURL completion:(CompletionBlock)completion { if (!completion) { return; } - + if (self.data.length == 0) { completion(nil, UPPErrorWithCode(UPPErrorCodeEmptyData)); return; } - + NSError *error = nil; ONOXMLDocument *document = [ONOXMLDocument XMLDocumentWithData:self.data error:&error]; - + if (!document) { completion(nil, error); return; } - + __block NSMutableArray *devices; - + [document.rootElement enumerateElementsWithXPath:@"//*[name()='device']" usingBlock:^(ONOXMLElement *element, NSUInteger idx, BOOL *stop) { NSString *deviceType = [[element firstChildWithTag:@"deviceType"] stringValue]; - + UPPBasicDevice *device; - + if ([deviceType rangeOfString:@":MediaRenderer:"].location != NSNotFound) { device = [UPPMediaRendererDevice mediaRendererWithURN:deviceType baseURL:baseURL]; @@ -66,23 +67,23 @@ - (void)parseWithBaseURL:(NSURL *)baseURL completion:(CompletionBlock)completion [self parseElement:element intoDevice:device]; [self parseIcons:[element firstChildWithTag:@"iconList"] intoDevice:device]; [self parseServices:[element firstChildWithTag:@"serviceList"] intoDevice:device]; - + if (!device) { return; } - + if (!devices) { devices = [NSMutableArray array]; } - + [devices addObject:device]; }]; - + if (!devices) { completion(nil, UPPErrorWithCode(UPPErrorCodeNoDeviceElementFound)); return; } - + completion([devices copy], nil); } @@ -95,7 +96,7 @@ - (void)parseElement:(ONOXMLElement *)element intoDevice:(UPPBasicDevice *)devic device.modelNumber = [[element firstChildWithTag:@"modelNumber"] stringValue]; device.serialNumber = [[element firstChildWithTag:@"serialNumber"] stringValue]; device.udn = [[element firstChildWithTag:@"UDN"] stringValue]; - + NSString *url = [[element firstChildWithTag:@"manufacturerURL"] stringValue]; device.manufacturerURL = [NSURL URLWithString:url]; url = [[element firstChildWithTag:@"modelURL"] stringValue]; @@ -114,7 +115,7 @@ - (void)parseIcons:(ONOXMLElement *)iconList intoDevice:(UPPBasicDevice *)device icon.url = [[iconElement firstChildWithTag:@"url"] stringValue]; [icons addObject:icon]; }]; - + if (icons.count > 0) { device.iconList = [icons copy]; } @@ -132,7 +133,7 @@ - (void)parseServices:(ONOXMLElement *)serviceList intoDevice:(UPPBasicDevice *) service.eventSubURL = [[serviceElement firstChildWithTag:@"eventSubURL"] stringValue]; [services addObject:service]; }]; - + if (services.count > 0) { device.services = [services copy]; } diff --git a/CocoaUPnP/Parsers/UPPErrorParser.m b/CocoaUPnP/Parsers/UPPErrorParser.m index 92e244e..bd03c19 100644 --- a/CocoaUPnP/Parsers/UPPErrorParser.m +++ b/CocoaUPnP/Parsers/UPPErrorParser.m @@ -3,7 +3,7 @@ #import "UPPErrorParser.h" #import "UPPError.h" -#import "Ono.h" +#import @implementation UPPErrorParser @@ -12,20 +12,20 @@ + (NSError *)parseErrorXML:(NSData *)data if (!data) { return nil; } - + NSError *error; ONOXMLDocument *document = [ONOXMLDocument XMLDocumentWithData:data error:&error]; - + if (!document) { return error; } - + ONOXMLElement *element = [document firstChildWithXPath:@"//*[name()='UPnPError']"]; NSString *errorCode = [[element firstChildWithTag:@"errorCode"] stringValue]; NSString *errorDescription = [[element firstChildWithTag:@"errorDescription"] stringValue]; NSString *description = [NSString stringWithFormat:@"%@ - %@", errorCode, errorDescription]; - + NSDictionary *userInfo = @{ NSLocalizedDescriptionKey : description }; error = [[NSError alloc] initWithDomain:UPPErrorDomain code:UPPErrorCodeUPnPErrorReturned diff --git a/CocoaUPnP/Parsers/UPPLastChangeParser.m b/CocoaUPnP/Parsers/UPPLastChangeParser.m index b73f186..12f3c87 100644 --- a/CocoaUPnP/Parsers/UPPLastChangeParser.m +++ b/CocoaUPnP/Parsers/UPPLastChangeParser.m @@ -2,7 +2,7 @@ // Copyright 2015 Arcam. See LICENSE file. #import "UPPLastChangeParser.h" -#import "Ono.h" +#import #import "UPPError.h" #import "UPPMediaItemParser.h" diff --git a/CocoaUPnP/Parsers/UPPMediaItemParser.m b/CocoaUPnP/Parsers/UPPMediaItemParser.m index c698f4b..5dd234c 100644 --- a/CocoaUPnP/Parsers/UPPMediaItemParser.m +++ b/CocoaUPnP/Parsers/UPPMediaItemParser.m @@ -2,7 +2,7 @@ // Copyright 2015 Arcam. See LICENSE file. #import "UPPMediaItemParser.h" -#import "Ono.h" +#import #import "UPPMediaItem.h" #import "UPPMediaItemResource.h" #import "UPPError.h" @@ -14,24 +14,24 @@ @implementation UPPMediaItemParser + (void)parseResults:(NSDictionary *)results withCompletion:(void (^)(NSDictionary *results, NSError *error))completion { if (!results || !completion) { return; } - + NSString *resultsString = results[UPnPXMLResultsKey]; - + if (!resultsString) { completion(nil, UPPErrorWithCode(UPPErrorCodeEmptyData)); return; } - + NSError *error = nil; ONOXMLDocument *document = [ONOXMLDocument XMLDocumentWithString:resultsString encoding:NSUTF8StringEncoding error:&error]; - + if (!document) { completion(nil, error); return; } - + NSArray *items = [self parseItemsInDocument:document]; if (items) { NSMutableDictionary *parsedResults = [results mutableCopy]; @@ -46,14 +46,14 @@ + (NSArray *)parseItemsInDocument:(ONOXMLDocument *)document { __block NSMutableArray *items; [document enumerateElementsWithXPath:@"/*[local-name() = 'DIDL-Lite']/*" usingBlock:^(ONOXMLElement *element, NSUInteger idx, BOOL *stop) { - + UPPMediaItem *item = [[UPPMediaItem alloc] init]; - + if ([[element tag] isEqualToString:@"container"]) { item.isContainer = YES; item.childCount = [element valueForAttribute:@"childCount"]; } - + item.albumTitle = [[element firstChildWithTag:@"album"] stringValue]; item.artist = [[element firstChildWithTag:@"artist"] stringValue]; item.date = [[element firstChildWithTag:@"date"] stringValue]; @@ -65,7 +65,7 @@ + (NSArray *)parseItemsInDocument:(ONOXMLDocument *)document item.parentID = [element valueForAttribute:@"parentID"]; item.objectID = [element valueForAttribute:@"id"]; item.resources = [self parseResources:[element childrenWithTag:@"res"]]; - + NSArray *durations = [item.resources valueForKey:@"duration"]; [durations enumerateObjectsUsingBlock:^(NSString *duration, NSUInteger idx, BOOL *stop) { if (duration && ![duration isEqual:[NSNull null]]) { @@ -73,21 +73,21 @@ + (NSArray *)parseItemsInDocument:(ONOXMLDocument *)document *stop = YES; } }]; - + if (!items) { items = [NSMutableArray array]; } - + [items addObject:item]; }]; - + return [items copy]; } + (NSArray *)parseResources:(NSArray *)res { __block NSMutableArray *mutableResources; - + [res enumerateObjectsUsingBlock:^(ONOXMLElement *resource, NSUInteger idx, BOOL *stop) { UPPMediaItemResource *r = [[UPPMediaItemResource alloc] init]; r.numberOfAudioChannels = [resource valueForAttribute:@"nrAudioChannels"]; @@ -97,14 +97,14 @@ + (NSArray *)parseResources:(NSArray *)res r.protocolInfo = [resource valueForAttribute:@"protocolInfo"]; r.itemSize = [resource valueForAttribute:@"size"]; r.resourceURLString = [resource stringValue]; - + if (!mutableResources) { mutableResources = [NSMutableArray array]; } - + [mutableResources addObject:r]; }]; - + return [mutableResources copy]; } @@ -113,22 +113,22 @@ + (NSArray *)parseResources:(NSArray *)res + (NSInteger)durationFromString:(NSString *)string { NSInteger seconds = 0; - + NSArray *components = [string componentsSeparatedByString:@":"]; - + if ([components count] == 3) { // hh NSInteger hours = [(NSString *)components[0] integerValue]; seconds += hours * 60 * 60; - + // mm NSInteger minutes = [(NSString *)components[1] integerValue]; seconds += minutes * 60; - + // ss - actually a double seconds += [(NSString *)components[2] integerValue]; } - + return seconds; } diff --git a/CocoaUPnP/Parsers/UPPResponseParser.m b/CocoaUPnP/Parsers/UPPResponseParser.m index 5a521a3..5f4d316 100644 --- a/CocoaUPnP/Parsers/UPPResponseParser.m +++ b/CocoaUPnP/Parsers/UPPResponseParser.m @@ -2,7 +2,7 @@ // Copyright 2015 Arcam. See LICENSE file. #import "UPPResponseParser.h" -#import "Ono.h" +#import #import "UPPError.h" #import "UPPMediaItemParser.h" @@ -13,37 +13,37 @@ - (void)parseWithResponse:(Response)responseBlock if (!responseBlock) { return; } - + NSError *error = nil; - + if (![self data]) { responseBlock(nil, UPPErrorWithCode(UPPErrorCodeEmptyData)); return; } - + ONOXMLDocument *document = [ONOXMLDocument XMLDocumentWithData:self.data error:&error]; - + if (!document) { responseBlock(nil, error); return; } - + __block NSMutableDictionary *responseDictionary; - + [document enumerateElementsWithXPath:@"/*[local-name() = 'Envelope']/*[local-name() = 'Body']/*/*" usingBlock:^(ONOXMLElement *element, NSUInteger idx, BOOL *stop) { - + if (!responseDictionary) { responseDictionary = [NSMutableDictionary dictionary]; } - + NSString *tag = element.tag; NSString *value = [element stringValue]; - + if (tag && value) { if ([tag rangeOfString:@"MetaData"].location != NSNotFound) { ONOXMLDocument *metadata = [ONOXMLDocument XMLDocumentWithString:value encoding:NSUTF8StringEncoding error:nil]; NSArray *items = [UPPMediaItemParser parseItemsInDocument:metadata]; - + if (items.count > 0) { responseDictionary[tag] = [items firstObject]; } @@ -51,9 +51,9 @@ - (void)parseWithResponse:(Response)responseBlock responseDictionary[tag] = value; } } - + }]; - + responseBlock(responseDictionary, nil); } From b46d7188144527991fbaaed31629c8683034e033 Mon Sep 17 00:00:00 2001 From: Derek Clarkson Date: Thu, 9 Jun 2016 21:38:46 +1000 Subject: [PATCH 3/7] Untracking .DS_Store --- .DS_Store | Bin 6148 -> 0 bytes .gitignore | 1 + 2 files changed, 1 insertion(+) delete mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 58d20a5574c61bf9c8e901ced0a0004ad04b2ea2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKy-EZz5T4O17Hkf#vCI<)SKEYhuNMw`Wmgn&-R1DW!XoeJtM~wZ^P}A27Keq1 z%)rc-%w&@62b*Mwh*!IINi-*-3M$Cbm=JMKhK_vj49Ggi4PDVCJweYVCi;sm+53Vn zsHX;Pv+L`+-90x%Z?D^T%|CF>u5W*sIo$8> zHtV8cf`MQl7zhS}0Wg3&TckQM3>ypt1Hr%-19Cnjs9<(1hI(|sXbAw6XS531QcFlq za?Fm!5D^GlD$r8dOANMj_>+&zj>XW@iM{w>U-`3mVO<^bCml|l4Z{Wl!N8b-W9!c4 z{$JylnJn_hDbWiCf`Na=0MF`8y~0QN-TLkG Date: Thu, 9 Jun 2016 23:22:44 +1000 Subject: [PATCH 4/7] Removing empty lines of whitespace I put in. --- CocoaUPnP.xcodeproj/project.pbxproj | 4 +- CocoaUPnP/Events/UPPEventServer.m | 10 +-- .../Events/UPPEventSubscriptionManager.m | 78 +++++++++---------- .../Networking/SSDP/SSDPServiceBrowser.m | 58 +++++++------- CocoaUPnP/Parsers/UPPDeviceParser.m | 32 ++++---- CocoaUPnP/Parsers/UPPErrorParser.m | 8 +- CocoaUPnP/Parsers/UPPLastChangeParser.m | 2 +- CocoaUPnP/Parsers/UPPMediaItemParser.m | 42 +++++----- CocoaUPnP/Parsers/UPPResponseParser.m | 14 ++-- 9 files changed, 124 insertions(+), 124 deletions(-) diff --git a/CocoaUPnP.xcodeproj/project.pbxproj b/CocoaUPnP.xcodeproj/project.pbxproj index 5de9e0a..a3f3662 100644 --- a/CocoaUPnP.xcodeproj/project.pbxproj +++ b/CocoaUPnP.xcodeproj/project.pbxproj @@ -87,7 +87,7 @@ 6C3EE7C71D06EE1400506613 /* UPPEventSubscription.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UPPEventSubscription.h; sourceTree = ""; }; 6C3EE7C81D06EE1400506613 /* UPPEventSubscription.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPEventSubscription.m; sourceTree = ""; }; 6C3EE7C91D06EE1400506613 /* UPPEventSubscriptionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UPPEventSubscriptionManager.h; sourceTree = ""; }; - 6C3EE7CA1D06EE1400506613 /* UPPEventSubscriptionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPEventSubscriptionManager.m; sourceTree = ""; }; + 6C3EE7CA1D06EE1400506613 /* UPPEventSubscriptionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = UPPEventSubscriptionManager.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; 6C3EE7CC1D06EE1400506613 /* NSArray+firstObjectMatchingPredicate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+firstObjectMatchingPredicate.h"; sourceTree = ""; }; 6C3EE7CD1D06EE1400506613 /* NSArray+firstObjectMatchingPredicate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSArray+firstObjectMatchingPredicate.m"; sourceTree = ""; }; 6C3EE7CE1D06EE1400506613 /* NSMutableString+xmlNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSMutableString+xmlNode.h"; sourceTree = ""; }; @@ -117,7 +117,7 @@ 6C3EE7E91D06EE1400506613 /* SSDPService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SSDPService.h; sourceTree = ""; }; 6C3EE7EA1D06EE1400506613 /* SSDPService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SSDPService.m; sourceTree = ""; }; 6C3EE7EB1D06EE1400506613 /* SSDPServiceBrowser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SSDPServiceBrowser.h; sourceTree = ""; }; - 6C3EE7EC1D06EE1400506613 /* SSDPServiceBrowser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SSDPServiceBrowser.m; sourceTree = ""; }; + 6C3EE7EC1D06EE1400506613 /* SSDPServiceBrowser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = SSDPServiceBrowser.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; 6C3EE7ED1D06EE1400506613 /* UPPDiscovery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UPPDiscovery.h; sourceTree = ""; }; 6C3EE7EE1D06EE1400506613 /* UPPDiscovery.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPDiscovery.m; sourceTree = ""; }; 6C3EE7EF1D06EE1400506613 /* UPPRequestSerializer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UPPRequestSerializer.h; sourceTree = ""; }; diff --git a/CocoaUPnP/Events/UPPEventServer.m b/CocoaUPnP/Events/UPPEventServer.m index 1351080..05ac75e 100644 --- a/CocoaUPnP/Events/UPPEventServer.m +++ b/CocoaUPnP/Events/UPPEventServer.m @@ -18,14 +18,14 @@ @implementation UPPEventServer - (void)startServer { __weak typeof(self) weakSelf = self; - + [self.webServer addHandlerForMethod:@"NOTIFY" path:@"/Event" requestClass:[GCDWebServerDataRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest *request) { if (request != nil) { [weakSelf requestRecieved:(GCDWebServerDataRequest *)request]; } return [[GCDWebServerResponse alloc] init]; }]; - + if ([self.webServer startWithPort:UPPEventServerPort bonjourName:nil]) { NSURL *baseURL = self.webServer.serverURL; self.callbackURL = [baseURL URLByAppendingPathComponent:@"Event"]; @@ -65,18 +65,18 @@ - (void)requestRecieved:(GCDWebServerDataRequest *)request { NSDictionary *headers = request.headers; NSMutableDictionary *eventDictionary = [NSMutableDictionary dictionary]; - + NSString *sid = headers[@"SID"]; if (sid) { [eventDictionary setObject:sid forKey:UPPEventServerSIDKey]; } - + [UPPLastChangeParser parseData:request.data completion:^(NSDictionary *event, NSError *error) { if (event) { eventDictionary[UPPEventServerBodyKey] = event; } }]; - + [self.eventDelegate eventReceived:[eventDictionary copy]]; } diff --git a/CocoaUPnP/Events/UPPEventSubscriptionManager.m b/CocoaUPnP/Events/UPPEventSubscriptionManager.m index aa2f96a..8ee9c91 100644 --- a/CocoaUPnP/Events/UPPEventSubscriptionManager.m +++ b/CocoaUPnP/Events/UPPEventSubscriptionManager.m @@ -19,13 +19,13 @@ @implementation UPPEventSubscriptionManager + (instancetype)sharedManager { static dispatch_once_t onceToken = 0; - + __strong static id _sharedManager = nil; dispatch_once(&onceToken, ^{ NSURLSession *session = [NSURLSession sharedSession]; _sharedManager = [[self alloc] initWithSession:session]; }); - + return _sharedManager; } @@ -35,7 +35,7 @@ - (instancetype)initWithSession:(NSURLSession *)session self.session = session; [self addNotificationObservers]; } - + return self; } @@ -47,12 +47,12 @@ - (void)dealloc - (void)addNotificationObservers { NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; - + [nc addObserver:self selector:@selector(invalidateAllTimers) name:UIApplicationDidEnterBackgroundNotification object:nil]; - + [nc addObserver:self selector:@selector(renewAllTimers) name:UIApplicationDidBecomeActiveNotification @@ -66,7 +66,7 @@ - (NSMutableArray *)activeSubscriptions if (!_activeSubscriptions) { _activeSubscriptions = [NSMutableArray array]; } - + return _activeSubscriptions; } @@ -75,7 +75,7 @@ - (UPPEventServer *)eventServer if (!_eventServer) { _eventServer = [[UPPEventServer alloc] init]; } - + return _eventServer; } @@ -87,7 +87,7 @@ - (void)subscribeObserver:(id)observer toService:( self.eventServer.eventDelegate = self; [self.eventServer startServer]; } - + // If we already have an existing subscription, add the new observer then // bail out early. UPPEventSubscription *subscription = [self subscriptionWithURL:service.eventSubscriptionURL]; @@ -98,7 +98,7 @@ - (void)subscribeObserver:(id)observer toService:( } return; } - + // Create a new subscription. NSURL *url = service.eventSubscriptionURL; subscription = [UPPEventSubscription subscriptionWithSubscriptionURL:url @@ -123,10 +123,10 @@ - (void)subscribeObserver:(id)observer toService:( - (void)subscribe:(UPPEventSubscription *)subscription completion:(void(^)(NSString *subscriptionID, NSDate *expiryDate, NSError *error))completion { if (!completion) { return; } - + NSURL *url = subscription.eventSubscriptionURL; NSURLRequest *request = [self subscriptionRequestWithEventSubscriptionURL:url]; - + [self sendSubscriptionRequest:request completion:^(NSURLResponse *response, NSError *error) { NSInteger code = [(NSHTTPURLResponse *)response statusCode]; @@ -154,15 +154,15 @@ - (void)renewSubscription:(UPPEventSubscription *)subscription completion:(void( return; } NSURL *subscriptionURL = subscription.eventSubscriptionURL; - + NSDictionary *headers = @{ @"HOST": [subscriptionURL absoluteString], @"SID": [subscription subscriptionID], @"TIMEOUT": @"Second-1800" }; - + NSMutableURLRequest *request = [self requestWithURL:subscriptionURL method:@"SUBSCRIBE" headers:headers]; - + NSURLSessionDataTask *task = [self.session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { if (!completion) { return; } @@ -181,7 +181,7 @@ - (void)renewSubscription:(UPPEventSubscription *)subscription completion:(void( completion(subscriptionID, expiryDate, nil); }]; - + [task resume]; } @@ -196,18 +196,18 @@ - (NSURLRequest *)subscriptionRequestWithEventSubscriptionURL:(NSURL *)url NSString *host = [NSString stringWithFormat:@"%@:%@", [subscriptionURL host], [subscriptionURL port]]; - + NSURL *callbackURL = [self.eventServer eventServerCallbackURL]; NSString *callback = [NSString stringWithFormat:@"<%@>", [callbackURL absoluteString]]; - + NSDictionary *headers = @{ @"HOST": host, @"USER-AGENT": @"iOS/8.4 UPnP/1.1 Example/1.0", @"CALLBACK": callback, @"NT": @"upnp:event", @"TIMEOUT": @"Second-1800" }; - - + + return [self requestWithURL:url method:@"SUBSCRIBE" headers:headers]; } @@ -215,21 +215,21 @@ - (void)unsubscribe:(UPPEventSubscription *)subscription completion:(void(^)(BOO { [subscription invalidateTimers]; [self.activeSubscriptions removeObject:subscription]; - + if (!subscription.eventSubscriptionURL || !subscription.subscriptionID) { if (completion) { completion(NO); } return; } - + NSURL *subscriptionURL = subscription.eventSubscriptionURL; - + NSDictionary *headers = @{ @"HOST": [subscriptionURL absoluteString], @"SID": [subscription subscriptionID] }; - + NSMutableURLRequest *request = [self requestWithURL:subscriptionURL method:@"UNSUBSCRIBE" headers:headers]; - + NSURLSessionDataTask *task = [self.session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { NSInteger code = [(NSHTTPURLResponse *)response statusCode]; @@ -249,14 +249,14 @@ - (void)unsubscribe:(UPPEventSubscription *)subscription completion:(void(^)(BOO } } }]; - + [task resume]; } - (void)removeObserver:(id)observer fromService:(UPPBasicService *)service completion:(void (^)(BOOL))completion { UPPEventSubscription *subscripton = [self subscriptionWithURL:service.eventSubscriptionURL]; - + if (subscripton) { [subscripton removeEventObserver:observer]; @@ -264,7 +264,7 @@ - (void)removeObserver:(id)observer fromService:(U [self unsubscribe:subscripton completion:nil]; } } - + if (completion) { completion(NO); } @@ -273,18 +273,18 @@ - (void)removeObserver:(id)observer fromService:(U - (void)removeSubscriptionsForServices:(NSArray *)services deviceId:(NSString *)deviceId { NSMutableArray *subscriptions = [NSMutableArray array]; - + for (UPPServiceDescription *service in services) { NSString *identifier = [NSString stringWithFormat:@"%@::%@", deviceId, service.serviceType]; NSArray *objects = [self subscriptionsForServiceIdentifier:identifier]; [subscriptions addObjectsFromArray:objects]; } - + if (subscriptions.count == 0) { return; } - + for (UPPEventSubscription *subscription in subscriptions) { [subscription invalidateTimers]; [self.activeSubscriptions removeObject:subscription]; @@ -299,11 +299,11 @@ - (void)eventReceived:(NSDictionary *)event NSPredicate *predicate = [NSPredicate predicateWithFormat:@"subscriptionID == %@", sid]; UPPEventSubscription *subscription = [self.activeSubscriptions upp_firstObjectMatchingPredicate:predicate]; - + if (!subscription) { return; } - + [subscription informObserversOfEvent:event]; } @@ -327,7 +327,7 @@ - (UPPEventSubscription *)subscriptionWithURL:(NSURL *)url { NSPredicate *predicate = [NSPredicate predicateWithFormat:@"eventSubscriptionURL = %@", url]; NSArray *matches = [self.activeSubscriptions filteredArrayUsingPredicate:predicate]; - + return [matches firstObject]; } @@ -342,10 +342,10 @@ - (NSDate *)dateFromHeader:(NSString *)header if (!header) { return nil; } - + NSString *timeout = [header stringByReplacingOccurrencesOfString:@"Second-" withString:@""]; - + return [NSDate dateWithTimeIntervalSinceNow:[timeout doubleValue]]; } @@ -353,13 +353,13 @@ - (void)sendSubscriptionRequest:(NSURLRequest *)request completion:(void (^)(NSU { if (!completion) { return; } if (!request) { return; } - + NSURLSessionDataTask *task = [self.session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { dispatch_async(dispatch_get_main_queue(), ^{ completion(response, error); }); }]; - + [task resume]; } @@ -367,11 +367,11 @@ - (NSMutableURLRequest *)requestWithURL:(NSURL *)url method:(NSString *)method h { NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; [request setHTTPMethod:method]; - + [headers enumerateKeysAndObjectsUsingBlock:^(NSString *header, NSString *value, BOOL *stop) { [request setValue:value forHTTPHeaderField:header]; }]; - + return [request copy]; } diff --git a/CocoaUPnP/Networking/SSDP/SSDPServiceBrowser.m b/CocoaUPnP/Networking/SSDP/SSDPServiceBrowser.m index d9b1b91..137c2db 100644 --- a/CocoaUPnP/Networking/SSDP/SSDPServiceBrowser.m +++ b/CocoaUPnP/Networking/SSDP/SSDPServiceBrowser.m @@ -56,19 +56,19 @@ @implementation SSDPServiceBrowser #pragma mark - Public Methods - (void)startBrowsingForServiceTypes:(NSString *)serviceType { - + if (self.multicastSocket.isClosed) { [self setupMulticastSocket]; } - + if (self.unicastSocket.isClosed) { [self setupUnicastSocket]; } - + NSString *searchHeader; searchHeader = [self _prepareSearchRequestWithServiceType:serviceType]; NSData *d = [searchHeader dataUsingEncoding:NSUTF8StringEncoding]; - + [self.multicastSocket sendData:d toHost:SSDPMulticastGroupAddress port:SSDPMulticastUDPPort @@ -79,26 +79,26 @@ - (void)startBrowsingForServiceTypes:(NSString *)serviceType { - (void)setupMulticastSocket { [self.multicastSocket setIPv6Enabled:NO]; - + NSError *err = nil; - + NSDictionary *interfaces = [SSDPServiceBrowser availableNetworkInterfaces]; NSData *sourceAddress = _networkInterface? [interfaces objectForKey:_networkInterface] : nil; - + if (!sourceAddress) { sourceAddress = [[interfaces allValues] firstObject]; } - + if (![self.multicastSocket bindToAddress:sourceAddress error:&err]) { [self _notifyDelegateWithError:err]; return; } - + if (![self.multicastSocket joinMulticastGroup:SSDPMulticastGroupAddress error:&err]) { [self _notifyDelegateWithError:err]; return; } - + if (![self.multicastSocket beginReceiving:&err]) { [self _notifyDelegateWithError:err]; return; @@ -108,19 +108,19 @@ - (void)setupMulticastSocket - (void)setupUnicastSocket { [self.unicastSocket setIPv6Enabled:NO]; - + NSError *err = nil; - + if (![self.unicastSocket bindToPort:1900 error:&err]) { [self _notifyDelegateWithError:err]; return; } - + if (![self.unicastSocket joinMulticastGroup:SSDPMulticastGroupAddress error:&err]) { [self _notifyDelegateWithError:err]; return; } - + if (![self.unicastSocket beginReceiving:&err]) { [self _notifyDelegateWithError:err]; return; @@ -151,7 +151,7 @@ - (void)stopBrowsingForServices { [self closeSocket:self.multicastSocket]; self.multicastSocket = nil; - + [self closeSocket:self.unicastSocket]; self.unicastSocket = nil; } @@ -174,21 +174,21 @@ - (void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data fromAddress:(NSData *)address withFilterContext:(id)filterContext { NSString *msg = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; - + if (!msg) { return; } - + NSDictionary *headers = [self _parseHeadersFromMessage:msg]; SSDPService *service = [[SSDPService alloc] initWithHeaders:headers]; - + if ([headers[SSDPResponseStatusKey] isEqualToString:@"200"]) { [self _notifyDelegateWithFoundService:service]; } - + else if ([headers[SSDPRequestMethodKey] isEqualToString:@"NOTIFY"]) { NSString *nts = headers[@"nts"]; - + if ( [nts isEqualToString:@"ssdp:alive"] ) { [self _notifyDelegateWithFoundService:service]; } @@ -208,10 +208,10 @@ - (NSMutableDictionary *)_parseHeadersFromMessage:(NSString *)message { regularExpressionWithPattern:pattern options:options error:nil]; - + NSMutableDictionary *headers = [NSMutableDictionary dictionary]; __block SSDPMessageType type = SSDPUnknownMessage; - + [message enumerateLinesUsingBlock:^(NSString *line, BOOL *stop) { if (type == SSDPUnknownMessage) { // First line describes type of message @@ -241,7 +241,7 @@ - (NSMutableDictionary *)_parseHeadersFromMessage:(NSString *)message { }]; } }]; - + return headers; } @@ -275,7 +275,7 @@ - (void)_notifyDelegateWithRemovedService:(SSDPService *)service - (NSString *)_prepareSearchRequestWithServiceType:(NSString *)serviceType { NSString *userAgent = [self _userAgentString]; - + return [NSString stringWithFormat: @"M-SEARCH * HTTP/1.1\r\n" "HOST: %@:%d\r\n" @@ -293,20 +293,20 @@ - (NSString *)_userAgentString { NSString *userAgent = nil; NSDictionary *bundleInfos = [[NSBundle mainBundle] infoDictionary]; NSString *bundleExecutable = bundleInfos[(__bridge NSString *)kCFBundleExecutableKey] ?: bundleInfos[(__bridge NSString *)kCFBundleIdentifierKey]; - + #if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) userAgent = [NSString stringWithFormat:@"%@/%@ (%@; iOS %@) %@", bundleExecutable, (__bridge id)CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), kCFBundleVersionKey) ?: bundleInfos[(__bridge NSString *)kCFBundleVersionKey], [[UIDevice currentDevice] model], [[UIDevice currentDevice] systemVersion], SSDPVersionString]; - + #elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED) userAgent = [NSString stringWithFormat:@"%@/%@ (Mac OS X %@) %@", bundleExecutable, bundleInfos[@"CFBundleShortVersionString"] ?: bundleInfos[(__bridge NSString *)kCFBundleVersionKey], [[NSProcessInfo processInfo] operatingSystemVersionString], SSDPVersionString]; #endif - + return userAgent; } @@ -314,7 +314,7 @@ + (NSDictionary *)availableNetworkInterfaces { NSMutableDictionary *addresses = [NSMutableDictionary dictionary]; struct ifaddrs *interfaces = NULL; struct ifaddrs *ifa = NULL; - + // retrieve the current interfaces - returns 0 on success if( getifaddrs(&interfaces) == 0 ) { for( ifa = interfaces; ifa != NULL; ifa = ifa->ifa_next ) { @@ -327,7 +327,7 @@ + (NSDictionary *)availableNetworkInterfaces { freeifaddrs(interfaces); } - + return addresses; } diff --git a/CocoaUPnP/Parsers/UPPDeviceParser.m b/CocoaUPnP/Parsers/UPPDeviceParser.m index a83b255..ffc5b35 100644 --- a/CocoaUPnP/Parsers/UPPDeviceParser.m +++ b/CocoaUPnP/Parsers/UPPDeviceParser.m @@ -18,7 +18,7 @@ @implementation UPPDeviceParser + (void)parseURL:(NSURL *)url withCompletion:(CompletionBlock)completion { if (!completion) { return; } - + AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; manager.responseSerializer = [AFHTTPResponseSerializer serializer]; [manager GET:url.absoluteString parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, NSData *data) { @@ -36,27 +36,27 @@ + (void)parseURL:(NSURL *)url withCompletion:(CompletionBlock)completion - (void)parseWithBaseURL:(NSURL *)baseURL completion:(CompletionBlock)completion { if (!completion) { return; } - + if (self.data.length == 0) { completion(nil, UPPErrorWithCode(UPPErrorCodeEmptyData)); return; } - + NSError *error = nil; ONOXMLDocument *document = [ONOXMLDocument XMLDocumentWithData:self.data error:&error]; - + if (!document) { completion(nil, error); return; } - + __block NSMutableArray *devices; - + [document.rootElement enumerateElementsWithXPath:@"//*[name()='device']" usingBlock:^(ONOXMLElement *element, NSUInteger idx, BOOL *stop) { NSString *deviceType = [[element firstChildWithTag:@"deviceType"] stringValue]; - + UPPBasicDevice *device; - + if ([deviceType rangeOfString:@":MediaRenderer:"].location != NSNotFound) { device = [UPPMediaRendererDevice mediaRendererWithURN:deviceType baseURL:baseURL]; @@ -67,23 +67,23 @@ - (void)parseWithBaseURL:(NSURL *)baseURL completion:(CompletionBlock)completion [self parseElement:element intoDevice:device]; [self parseIcons:[element firstChildWithTag:@"iconList"] intoDevice:device]; [self parseServices:[element firstChildWithTag:@"serviceList"] intoDevice:device]; - + if (!device) { return; } - + if (!devices) { devices = [NSMutableArray array]; } - + [devices addObject:device]; }]; - + if (!devices) { completion(nil, UPPErrorWithCode(UPPErrorCodeNoDeviceElementFound)); return; } - + completion([devices copy], nil); } @@ -96,7 +96,7 @@ - (void)parseElement:(ONOXMLElement *)element intoDevice:(UPPBasicDevice *)devic device.modelNumber = [[element firstChildWithTag:@"modelNumber"] stringValue]; device.serialNumber = [[element firstChildWithTag:@"serialNumber"] stringValue]; device.udn = [[element firstChildWithTag:@"UDN"] stringValue]; - + NSString *url = [[element firstChildWithTag:@"manufacturerURL"] stringValue]; device.manufacturerURL = [NSURL URLWithString:url]; url = [[element firstChildWithTag:@"modelURL"] stringValue]; @@ -115,7 +115,7 @@ - (void)parseIcons:(ONOXMLElement *)iconList intoDevice:(UPPBasicDevice *)device icon.url = [[iconElement firstChildWithTag:@"url"] stringValue]; [icons addObject:icon]; }]; - + if (icons.count > 0) { device.iconList = [icons copy]; } @@ -133,7 +133,7 @@ - (void)parseServices:(ONOXMLElement *)serviceList intoDevice:(UPPBasicDevice *) service.eventSubURL = [[serviceElement firstChildWithTag:@"eventSubURL"] stringValue]; [services addObject:service]; }]; - + if (services.count > 0) { device.services = [services copy]; } diff --git a/CocoaUPnP/Parsers/UPPErrorParser.m b/CocoaUPnP/Parsers/UPPErrorParser.m index bd03c19..dec5be6 100644 --- a/CocoaUPnP/Parsers/UPPErrorParser.m +++ b/CocoaUPnP/Parsers/UPPErrorParser.m @@ -12,20 +12,20 @@ + (NSError *)parseErrorXML:(NSData *)data if (!data) { return nil; } - + NSError *error; ONOXMLDocument *document = [ONOXMLDocument XMLDocumentWithData:data error:&error]; - + if (!document) { return error; } - + ONOXMLElement *element = [document firstChildWithXPath:@"//*[name()='UPnPError']"]; NSString *errorCode = [[element firstChildWithTag:@"errorCode"] stringValue]; NSString *errorDescription = [[element firstChildWithTag:@"errorDescription"] stringValue]; NSString *description = [NSString stringWithFormat:@"%@ - %@", errorCode, errorDescription]; - + NSDictionary *userInfo = @{ NSLocalizedDescriptionKey : description }; error = [[NSError alloc] initWithDomain:UPPErrorDomain code:UPPErrorCodeUPnPErrorReturned diff --git a/CocoaUPnP/Parsers/UPPLastChangeParser.m b/CocoaUPnP/Parsers/UPPLastChangeParser.m index 12f3c87..487a980 100644 --- a/CocoaUPnP/Parsers/UPPLastChangeParser.m +++ b/CocoaUPnP/Parsers/UPPLastChangeParser.m @@ -50,7 +50,7 @@ + (void)parseData:(NSData *)data completion:(void (^)(NSDictionary *event, NSErr if (value.length == 0) { value = [element stringValue]; } - + if (tag && value) { responseDictionary[tag] = value; } diff --git a/CocoaUPnP/Parsers/UPPMediaItemParser.m b/CocoaUPnP/Parsers/UPPMediaItemParser.m index 5dd234c..1e8bbdb 100644 --- a/CocoaUPnP/Parsers/UPPMediaItemParser.m +++ b/CocoaUPnP/Parsers/UPPMediaItemParser.m @@ -14,24 +14,24 @@ @implementation UPPMediaItemParser + (void)parseResults:(NSDictionary *)results withCompletion:(void (^)(NSDictionary *results, NSError *error))completion { if (!results || !completion) { return; } - + NSString *resultsString = results[UPnPXMLResultsKey]; - + if (!resultsString) { completion(nil, UPPErrorWithCode(UPPErrorCodeEmptyData)); return; } - + NSError *error = nil; ONOXMLDocument *document = [ONOXMLDocument XMLDocumentWithString:resultsString encoding:NSUTF8StringEncoding error:&error]; - + if (!document) { completion(nil, error); return; } - + NSArray *items = [self parseItemsInDocument:document]; if (items) { NSMutableDictionary *parsedResults = [results mutableCopy]; @@ -46,14 +46,14 @@ + (NSArray *)parseItemsInDocument:(ONOXMLDocument *)document { __block NSMutableArray *items; [document enumerateElementsWithXPath:@"/*[local-name() = 'DIDL-Lite']/*" usingBlock:^(ONOXMLElement *element, NSUInteger idx, BOOL *stop) { - + UPPMediaItem *item = [[UPPMediaItem alloc] init]; - + if ([[element tag] isEqualToString:@"container"]) { item.isContainer = YES; item.childCount = [element valueForAttribute:@"childCount"]; } - + item.albumTitle = [[element firstChildWithTag:@"album"] stringValue]; item.artist = [[element firstChildWithTag:@"artist"] stringValue]; item.date = [[element firstChildWithTag:@"date"] stringValue]; @@ -65,7 +65,7 @@ + (NSArray *)parseItemsInDocument:(ONOXMLDocument *)document item.parentID = [element valueForAttribute:@"parentID"]; item.objectID = [element valueForAttribute:@"id"]; item.resources = [self parseResources:[element childrenWithTag:@"res"]]; - + NSArray *durations = [item.resources valueForKey:@"duration"]; [durations enumerateObjectsUsingBlock:^(NSString *duration, NSUInteger idx, BOOL *stop) { if (duration && ![duration isEqual:[NSNull null]]) { @@ -73,21 +73,21 @@ + (NSArray *)parseItemsInDocument:(ONOXMLDocument *)document *stop = YES; } }]; - + if (!items) { items = [NSMutableArray array]; } - + [items addObject:item]; }]; - + return [items copy]; } + (NSArray *)parseResources:(NSArray *)res { __block NSMutableArray *mutableResources; - + [res enumerateObjectsUsingBlock:^(ONOXMLElement *resource, NSUInteger idx, BOOL *stop) { UPPMediaItemResource *r = [[UPPMediaItemResource alloc] init]; r.numberOfAudioChannels = [resource valueForAttribute:@"nrAudioChannels"]; @@ -97,14 +97,14 @@ + (NSArray *)parseResources:(NSArray *)res r.protocolInfo = [resource valueForAttribute:@"protocolInfo"]; r.itemSize = [resource valueForAttribute:@"size"]; r.resourceURLString = [resource stringValue]; - + if (!mutableResources) { mutableResources = [NSMutableArray array]; } - + [mutableResources addObject:r]; }]; - + return [mutableResources copy]; } @@ -113,22 +113,22 @@ + (NSArray *)parseResources:(NSArray *)res + (NSInteger)durationFromString:(NSString *)string { NSInteger seconds = 0; - + NSArray *components = [string componentsSeparatedByString:@":"]; - + if ([components count] == 3) { // hh NSInteger hours = [(NSString *)components[0] integerValue]; seconds += hours * 60 * 60; - + // mm NSInteger minutes = [(NSString *)components[1] integerValue]; seconds += minutes * 60; - + // ss - actually a double seconds += [(NSString *)components[2] integerValue]; } - + return seconds; } diff --git a/CocoaUPnP/Parsers/UPPResponseParser.m b/CocoaUPnP/Parsers/UPPResponseParser.m index 5f4d316..3152998 100644 --- a/CocoaUPnP/Parsers/UPPResponseParser.m +++ b/CocoaUPnP/Parsers/UPPResponseParser.m @@ -13,23 +13,23 @@ - (void)parseWithResponse:(Response)responseBlock if (!responseBlock) { return; } - + NSError *error = nil; - + if (![self data]) { responseBlock(nil, UPPErrorWithCode(UPPErrorCodeEmptyData)); return; } - + ONOXMLDocument *document = [ONOXMLDocument XMLDocumentWithData:self.data error:&error]; - + if (!document) { responseBlock(nil, error); return; } - + __block NSMutableDictionary *responseDictionary; - + [document enumerateElementsWithXPath:@"/*[local-name() = 'Envelope']/*[local-name() = 'Body']/*/*" usingBlock:^(ONOXMLElement *element, NSUInteger idx, BOOL *stop) { if (!responseDictionary) { @@ -53,7 +53,7 @@ - (void)parseWithResponse:(Response)responseBlock } }]; - + responseBlock(responseDictionary, nil); } From 17ef2c3d178c6f3d52b96b76b76a2a79b68bd806 Mon Sep 17 00:00:00 2001 From: Derek Clarkson Date: Thu, 9 Jun 2016 23:28:43 +1000 Subject: [PATCH 5/7] Some longer whitespace lines removed. --- .../Events/UPPEventSubscriptionManager.m | 20 +++++++++---------- .../Networking/SSDP/SSDPServiceBrowser.m | 2 +- CocoaUPnP/Parsers/UPPResponseParser.m | 10 +++++----- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/CocoaUPnP/Events/UPPEventSubscriptionManager.m b/CocoaUPnP/Events/UPPEventSubscriptionManager.m index 8ee9c91..4cd23fc 100644 --- a/CocoaUPnP/Events/UPPEventSubscriptionManager.m +++ b/CocoaUPnP/Events/UPPEventSubscriptionManager.m @@ -129,7 +129,7 @@ - (void)subscribe:(UPPEventSubscription *)subscription completion:(void(^)(NSStr [self sendSubscriptionRequest:request completion:^(NSURLResponse *response, NSError *error) { NSInteger code = [(NSHTTPURLResponse *)response statusCode]; - + if (code != 200) { if (self.activeSubscriptions.count == 0) { [self.eventServer stopServer]; @@ -164,21 +164,21 @@ - (void)renewSubscription:(UPPEventSubscription *)subscription completion:(void( headers:headers]; NSURLSessionDataTask *task = [self.session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { - + if (!completion) { return; } - + NSInteger code = [(NSHTTPURLResponse *)response statusCode]; - + if (code != 200) { NSError *e = error ?: UPPErrorWithCodeAndDescription(code, @"Renew subscription error"); completion(nil, nil, e); return; } - + NSDictionary *headers = [(NSHTTPURLResponse *)response allHeaderFields]; NSString *subscriptionID = headers[@"SID"]; NSDate *expiryDate = [self dateFromHeader:headers[@"TIMEOUT"]]; - + completion(subscriptionID, expiryDate, nil); }]; @@ -231,11 +231,11 @@ - (void)unsubscribe:(UPPEventSubscription *)subscription completion:(void(^)(BOO headers:headers]; NSURLSessionDataTask *task = [self.session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { - + NSInteger code = [(NSHTTPURLResponse *)response statusCode]; - + if (code == 200) { - + if (self.activeSubscriptions.count == 0) { [self.eventServer stopServer]; self.eventServer = nil; @@ -259,7 +259,7 @@ - (void)removeObserver:(id)observer fromService:(U if (subscripton) { [subscripton removeEventObserver:observer]; - + if ([subscripton eventObservers].count == 0) { [self unsubscribe:subscripton completion:nil]; } diff --git a/CocoaUPnP/Networking/SSDP/SSDPServiceBrowser.m b/CocoaUPnP/Networking/SSDP/SSDPServiceBrowser.m index 137c2db..8e056c5 100644 --- a/CocoaUPnP/Networking/SSDP/SSDPServiceBrowser.m +++ b/CocoaUPnP/Networking/SSDP/SSDPServiceBrowser.m @@ -324,7 +324,7 @@ + (NSDictionary *)availableNetworkInterfaces { [addresses setObject:data forKey:if_name]; } } - + freeifaddrs(interfaces); } diff --git a/CocoaUPnP/Parsers/UPPResponseParser.m b/CocoaUPnP/Parsers/UPPResponseParser.m index 3152998..e2e49c8 100644 --- a/CocoaUPnP/Parsers/UPPResponseParser.m +++ b/CocoaUPnP/Parsers/UPPResponseParser.m @@ -31,19 +31,19 @@ - (void)parseWithResponse:(Response)responseBlock __block NSMutableDictionary *responseDictionary; [document enumerateElementsWithXPath:@"/*[local-name() = 'Envelope']/*[local-name() = 'Body']/*/*" usingBlock:^(ONOXMLElement *element, NSUInteger idx, BOOL *stop) { - + if (!responseDictionary) { responseDictionary = [NSMutableDictionary dictionary]; } - + NSString *tag = element.tag; NSString *value = [element stringValue]; - + if (tag && value) { if ([tag rangeOfString:@"MetaData"].location != NSNotFound) { ONOXMLDocument *metadata = [ONOXMLDocument XMLDocumentWithString:value encoding:NSUTF8StringEncoding error:nil]; NSArray *items = [UPPMediaItemParser parseItemsInDocument:metadata]; - + if (items.count > 0) { responseDictionary[tag] = [items firstObject]; } @@ -51,7 +51,7 @@ - (void)parseWithResponse:(Response)responseBlock responseDictionary[tag] = value; } } - + }]; responseBlock(responseDictionary, nil); From 6b6e53cb9088ddb99b13fcfc57bc86b352f9bd20 Mon Sep 17 00:00:00 2001 From: Derek Clarkson Date: Thu, 9 Jun 2016 23:37:00 +1000 Subject: [PATCH 6/7] Adding module file to enable usage as a module. I've set one header as private to illustrate how that can work. --- CocoaUPnP.xcodeproj/project.pbxproj | 26 +++++++++++++++++++++----- CocoaUPnP/CocoaUPnP.h | 8 +++++++- module.modulemap | 4 ++++ module.private.modulemap | 4 ++++ 4 files changed, 36 insertions(+), 6 deletions(-) create mode 100644 module.modulemap create mode 100644 module.private.modulemap diff --git a/CocoaUPnP.xcodeproj/project.pbxproj b/CocoaUPnP.xcodeproj/project.pbxproj index a3f3662..71bb603 100644 --- a/CocoaUPnP.xcodeproj/project.pbxproj +++ b/CocoaUPnP.xcodeproj/project.pbxproj @@ -57,7 +57,7 @@ 6C3EE83E1D06EE1400506613 /* UPPDeviceParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE7F91D06EE1400506613 /* UPPDeviceParser.m */; }; 6C3EE83F1D06EE1400506613 /* UPPErrorParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7FA1D06EE1400506613 /* UPPErrorParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; 6C3EE8401D06EE1400506613 /* UPPErrorParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE7FB1D06EE1400506613 /* UPPErrorParser.m */; }; - 6C3EE8411D06EE1400506613 /* UPPLastChangeParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7FC1D06EE1400506613 /* UPPLastChangeParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C3EE8411D06EE1400506613 /* UPPLastChangeParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7FC1D06EE1400506613 /* UPPLastChangeParser.h */; settings = {ATTRIBUTES = (Private, ); }; }; 6C3EE8421D06EE1400506613 /* UPPLastChangeParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE7FD1D06EE1400506613 /* UPPLastChangeParser.m */; }; 6C3EE8431D06EE1400506613 /* UPPMediaItemParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7FE1D06EE1400506613 /* UPPMediaItemParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; 6C3EE8441D06EE1400506613 /* UPPMediaItemParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE7FF1D06EE1400506613 /* UPPMediaItemParser.m */; }; @@ -157,6 +157,8 @@ 6CA6C7721D06ED8700BA8CF1 /* CocoaUPnP.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CocoaUPnP.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 6CA6C7751D06ED8800BA8CF1 /* CocoaUPnP.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CocoaUPnP.h; sourceTree = ""; }; 6CA6C7771D06ED8800BA8CF1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 6CA741F01D09A76B007CCFEF /* module.modulemap */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = "sourcecode.module-map"; path = module.modulemap; sourceTree = ""; }; + 6CA741F11D09A76B007CCFEF /* module.private.modulemap */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = "sourcecode.module-map"; path = module.private.modulemap; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -301,10 +303,9 @@ 6CA6C7681D06ED8700BA8CF1 = { isa = PBXGroup; children = ( - 6C3EE8681D06F9F400506613 /* AFNetworking.framework */, - 6C3EE8691D06F9F400506613 /* CocoaAsyncSocket.framework */, - 6C3EE86A1D06F9F400506613 /* GCDWebServers.framework */, - 6C3EE86B1D06F9F400506613 /* Ono.framework */, + 6CA741F01D09A76B007CCFEF /* module.modulemap */, + 6CA741F11D09A76B007CCFEF /* module.private.modulemap */, + 6CA741EF1D09A6AF007CCFEF /* New Group */, 6C3EE8521D06EE8100506613 /* Cartfile */, 6CA6C7771D06ED8800BA8CF1 /* Info.plist */, 6CA6C7741D06ED8800BA8CF1 /* CocoaUPnP */, @@ -335,6 +336,17 @@ path = CocoaUPnP; sourceTree = ""; }; + 6CA741EF1D09A6AF007CCFEF /* New Group */ = { + isa = PBXGroup; + children = ( + 6C3EE8681D06F9F400506613 /* AFNetworking.framework */, + 6C3EE8691D06F9F400506613 /* CocoaAsyncSocket.framework */, + 6C3EE86A1D06F9F400506613 /* GCDWebServers.framework */, + 6C3EE86B1D06F9F400506613 /* Ono.framework */, + ); + name = "New Group"; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -590,6 +602,8 @@ INFOPLIST_FILE = "$(SRCROOT)/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = module.modulemap; + MODULEMAP_PRIVATE_FILE = module.private.modulemap; PRODUCT_BUNDLE_IDENTIFIER = uk.com.arcam.cocoaupnp; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -610,6 +624,8 @@ INFOPLIST_FILE = "$(SRCROOT)/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = module.modulemap; + MODULEMAP_PRIVATE_FILE = module.private.modulemap; PRODUCT_BUNDLE_IDENTIFIER = uk.com.arcam.cocoaupnp; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; diff --git a/CocoaUPnP/CocoaUPnP.h b/CocoaUPnP/CocoaUPnP.h index 5cb33d0..3d434e9 100644 --- a/CocoaUPnP/CocoaUPnP.h +++ b/CocoaUPnP/CocoaUPnP.h @@ -3,6 +3,12 @@ #import +//! Project version number for CocoaUPnP. +FOUNDATION_EXPORT double CocoaUPnPVersionNumber; + +//! Project version string for CocoaUPnP. +FOUNDATION_EXPORT const unsigned char CocoaUPnPVersionString[]; + // Events #import "UPPEventServer.h" #import "UPPEventSubscription.h" @@ -35,7 +41,7 @@ #import "UPPBaseParser.h" #import "UPPDeviceParser.h" #import "UPPErrorParser.h" -#import "UPPLastChangeParser.h" +//#import "UPPLastChangeParser.h" #import "UPPMediaItemParser.h" #import "UPPResponseParser.h" diff --git a/module.modulemap b/module.modulemap new file mode 100644 index 0000000..20cddb1 --- /dev/null +++ b/module.modulemap @@ -0,0 +1,4 @@ +module CocoaUPnP { + umbrella header "Headers/CocoaUPnP.h" + requires objc_arc +} \ No newline at end of file diff --git a/module.private.modulemap b/module.private.modulemap new file mode 100644 index 0000000..3707a87 --- /dev/null +++ b/module.private.modulemap @@ -0,0 +1,4 @@ +explicit module CocoaUPnP.Private { + umbrella "PrivateHeaders" + requires objc_arc +} \ No newline at end of file From 5a7dde90c3eb25bc3716a6884a370ca52851104d Mon Sep 17 00:00:00 2001 From: Derek Clarkson Date: Mon, 13 Jun 2016 20:30:30 +1000 Subject: [PATCH 7/7] Adding specta tests back in. Added test classes. Added imports where needed. BUild everything as frameworks. Coverted global blocks to C function to fix duplicate symbol issues. All tests green. --- Cartfile | 10 +- Cartfile.resolved | 4 + CocoaUPnP.xcodeproj/project.pbxproj | 466 +++++++++++++++++- .../xcshareddata/xcschemes/CocoaUPnP.xcscheme | 19 + CocoaUPnPTests/Events/UPPEventServerSpec.m | 6 +- .../Events/UPPEventSubscriptionManagerSpec.m | 2 + .../Events/UPPEventSubscriptionSpec.m | 2 + .../EXPMatchers+beWithinAMillisecondOf.h | 2 +- .../Helpers/UPPMetadataHelperSpec.m | 3 + CocoaUPnPTests/Info.plist | 24 + CocoaUPnPTests/Models/UPPBasicDeviceSpec.m | 3 + CocoaUPnPTests/Models/UPPBasicServiceSpec.m | 2 + CocoaUPnPTests/Models/UPPDeviceIconSpec.m | 2 + CocoaUPnPTests/Models/UPPErrorSpec.m | 2 + .../Models/UPPMediaItemResourceSpec.m | 2 + CocoaUPnPTests/Models/UPPMediaItemSpec.m | 3 + .../Models/UPPMediaRendererDeviceSpec.m | 2 + .../Models/UPPMediaServerDeviceSpec.m | 2 + CocoaUPnPTests/Models/UPPParametersSpec.m | 2 + CocoaUPnPTests/Models/UPPServiceSpec.m | 3 + .../Networking/SSDP/SSDPDelegateTestHelper.h | 4 +- .../SSDP/SSDPServiceBrowserDelegateSpec.m | 4 + .../Networking/SSDP/SSDPServiceBrowserSpec.m | 15 +- CocoaUPnPTests/Networking/UPPDiscoverySpec.m | 9 +- .../Networking/UPPRequestSerializerSpec.m | 4 + .../Networking/UPPResponseSerializerSpec.m | 4 + .../Networking/UPPSessionManagerSpec.m | 2 + CocoaUPnPTests/Parsers/UPPDeviceParserSpec.m | 3 + CocoaUPnPTests/Parsers/UPPErrorParserSpec.m | 3 + .../Parsers/UPPLastChangeParserSpec.m | 7 +- .../Parsers/UPPMediaItemParserSpec.m | 4 +- .../Parsers/UPPResponseParserSpec.m | 3 + .../Protocols/UPPMediaItemProtocolSpec.m | 4 + .../Services/UPPAVTransportServiceSpec.m | 3 + .../UPPConnectionManagerServiceSpec.m | 4 + .../Services/UPPContentDirectoryServiceSpec.m | 4 + .../Services/UPPRenderingControlServiceSpec.m | 4 + .../Test Helpers/MockFailSessionManager.h | 3 + .../Test Helpers/NetworkTestHelpers.h | 9 +- .../Test Helpers/NetworkTestHelpers.m | 28 +- CocoaUPnPTests/Test Helpers/TestHelpers.h | 2 +- CocoaUPnPTests/Test Helpers/TestHelpers.m | 6 +- 42 files changed, 646 insertions(+), 44 deletions(-) create mode 100644 CocoaUPnPTests/Info.plist diff --git a/Cartfile b/Cartfile index 0c268cf..19e854c 100644 --- a/Cartfile +++ b/Cartfile @@ -1,6 +1,14 @@ +# Modified to support carthage. github "drekka/Ono" "develop" +# Already carthage friendly. github "robbiehanson/CocoaAsyncSocket" github "AFNetworking/AFNetworking" -github "swisspol/GCDWebServer" \ No newline at end of file +github "swisspol/GCDWebServer" + +# Testing +github "erikdoe/ocmock" +github "specta/specta" +github "specta/expecta" +github "AliSoftware/OHHTTPStubs" \ No newline at end of file diff --git a/Cartfile.resolved b/Cartfile.resolved index a591f83..8310347 100644 --- a/Cartfile.resolved +++ b/Cartfile.resolved @@ -1,4 +1,8 @@ github "AFNetworking/AFNetworking" "3.1.0" github "robbiehanson/CocoaAsyncSocket" "7.4.3" github "swisspol/GCDWebServer" "3.3.2" +github "AliSoftware/OHHTTPStubs" "5.1.0" github "drekka/Ono" "67259eb5ed591564149156d88eee38a4669fb183" +github "specta/expecta" "v1.0.5" +github "erikdoe/ocmock" "v3.3" +github "specta/specta" "v1.0.5" diff --git a/CocoaUPnP.xcodeproj/project.pbxproj b/CocoaUPnP.xcodeproj/project.pbxproj index 71bb603..2c92b8e 100644 --- a/CocoaUPnP.xcodeproj/project.pbxproj +++ b/CocoaUPnP.xcodeproj/project.pbxproj @@ -7,6 +7,13 @@ objects = { /* Begin PBXBuildFile section */ + 6C3E411A1D0ADD29002119F5 /* CocoaUPnP.podspec in Resources */ = {isa = PBXBuildFile; fileRef = 6C3E41191D0ADD29002119F5 /* CocoaUPnP.podspec */; }; + 6C3E411E1D0AE656002119F5 /* Expecta.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C3E411B1D0AE656002119F5 /* Expecta.framework */; }; + 6C3E411F1D0AE656002119F5 /* OCMock.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C3E411C1D0AE656002119F5 /* OCMock.framework */; }; + 6C3E41201D0AE656002119F5 /* OHHTTPStubs.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C3E411D1D0AE656002119F5 /* OHHTTPStubs.framework */; }; + 6C3E41221D0AE7B3002119F5 /* Specta.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C3E41211D0AE7B3002119F5 /* Specta.framework */; }; + 6C3E41231D0E940F002119F5 /* TestHelpers.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA7423E1D09A8DD007CCFEF /* TestHelpers.m */; }; + 6C3E41251D0E96F2002119F5 /* NetworkTestHelpers.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA7423C1D09A8DD007CCFEF /* NetworkTestHelpers.m */; }; 6C3EE80F1D06EE1400506613 /* UPPEventServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7C51D06EE1400506613 /* UPPEventServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; 6C3EE8101D06EE1400506613 /* UPPEventServer.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE7C61D06EE1400506613 /* UPPEventServer.m */; }; 6C3EE8111D06EE1400506613 /* UPPEventSubscription.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7C71D06EE1400506613 /* UPPEventSubscription.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -39,9 +46,9 @@ 6C3EE82C1D06EE1400506613 /* UPPParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE7E41D06EE1400506613 /* UPPParameters.m */; }; 6C3EE82D1D06EE1400506613 /* UPPServiceDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7E51D06EE1400506613 /* UPPServiceDescription.h */; settings = {ATTRIBUTES = (Public, ); }; }; 6C3EE82E1D06EE1400506613 /* UPPServiceDescription.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE7E61D06EE1400506613 /* UPPServiceDescription.m */; }; - 6C3EE82F1D06EE1400506613 /* SSDPService.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7E91D06EE1400506613 /* SSDPService.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C3EE82F1D06EE1400506613 /* SSDPService.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7E91D06EE1400506613 /* SSDPService.h */; settings = {ATTRIBUTES = (Private, ); }; }; 6C3EE8301D06EE1400506613 /* SSDPService.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE7EA1D06EE1400506613 /* SSDPService.m */; }; - 6C3EE8311D06EE1400506613 /* SSDPServiceBrowser.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7EB1D06EE1400506613 /* SSDPServiceBrowser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C3EE8311D06EE1400506613 /* SSDPServiceBrowser.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7EB1D06EE1400506613 /* SSDPServiceBrowser.h */; settings = {ATTRIBUTES = (Private, ); }; }; 6C3EE8321D06EE1400506613 /* SSDPServiceBrowser.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE7EC1D06EE1400506613 /* SSDPServiceBrowser.m */; }; 6C3EE8331D06EE1400506613 /* UPPDiscovery.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3EE7ED1D06EE1400506613 /* UPPDiscovery.h */; settings = {ATTRIBUTES = (Public, ); }; }; 6C3EE8341D06EE1400506613 /* UPPDiscovery.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3EE7EE1D06EE1400506613 /* UPPDiscovery.m */; }; @@ -79,9 +86,73 @@ 6C3EE86E1D06F9F400506613 /* GCDWebServers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C3EE86A1D06F9F400506613 /* GCDWebServers.framework */; }; 6C3EE86F1D06F9F400506613 /* Ono.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C3EE86B1D06F9F400506613 /* Ono.framework */; }; 6CA6C7761D06ED8800BA8CF1 /* CocoaUPnP.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CA6C7751D06ED8800BA8CF1 /* CocoaUPnP.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6CA741FB1D09A8A9007CCFEF /* CocoaUPnP.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6CA6C7721D06ED8700BA8CF1 /* CocoaUPnP.framework */; }; + 6CA7423F1D09A8DD007CCFEF /* UPPEventServerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA742021D09A8DD007CCFEF /* UPPEventServerSpec.m */; }; + 6CA742401D09A8DD007CCFEF /* UPPEventSubscriptionManagerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA742031D09A8DD007CCFEF /* UPPEventSubscriptionManagerSpec.m */; }; + 6CA742411D09A8DD007CCFEF /* UPPEventSubscriptionSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA742041D09A8DD007CCFEF /* UPPEventSubscriptionSpec.m */; }; + 6CA742421D09A8DD007CCFEF /* Containers.xml in Resources */ = {isa = PBXBuildFile; fileRef = 6CA742061D09A8DD007CCFEF /* Containers.xml */; }; + 6CA742431D09A8DD007CCFEF /* Device.xml in Resources */ = {isa = PBXBuildFile; fileRef = 6CA742071D09A8DD007CCFEF /* Device.xml */; }; + 6CA742441D09A8DD007CCFEF /* Empty.xml in Resources */ = {isa = PBXBuildFile; fileRef = 6CA742081D09A8DD007CCFEF /* Empty.xml */; }; + 6CA742451D09A8DD007CCFEF /* Error.xml in Resources */ = {isa = PBXBuildFile; fileRef = 6CA742091D09A8DD007CCFEF /* Error.xml */; }; + 6CA742461D09A8DD007CCFEF /* FullMetadata.xml in Resources */ = {isa = PBXBuildFile; fileRef = 6CA7420A1D09A8DD007CCFEF /* FullMetadata.xml */; }; + 6CA742471D09A8DD007CCFEF /* GetConnectionID.xml in Resources */ = {isa = PBXBuildFile; fileRef = 6CA7420B1D09A8DD007CCFEF /* GetConnectionID.xml */; }; + 6CA742481D09A8DD007CCFEF /* GetPositionInfoResponse.xml in Resources */ = {isa = PBXBuildFile; fileRef = 6CA7420C1D09A8DD007CCFEF /* GetPositionInfoResponse.xml */; }; + 6CA742491D09A8DD007CCFEF /* Items.xml in Resources */ = {isa = PBXBuildFile; fileRef = 6CA7420D1D09A8DD007CCFEF /* Items.xml */; }; + 6CA7424A1D09A8DD007CCFEF /* LastChangeFull.xml in Resources */ = {isa = PBXBuildFile; fileRef = 6CA7420E1D09A8DD007CCFEF /* LastChangeFull.xml */; }; + 6CA7424B1D09A8DD007CCFEF /* MediaServer.xml in Resources */ = {isa = PBXBuildFile; fileRef = 6CA7420F1D09A8DD007CCFEF /* MediaServer.xml */; }; + 6CA7424C1D09A8DD007CCFEF /* PlayRequest.xml in Resources */ = {isa = PBXBuildFile; fileRef = 6CA742111D09A8DD007CCFEF /* PlayRequest.xml */; }; + 6CA7424D1D09A8DD007CCFEF /* EXPMatchers+beWithinAMillisecondOf.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA742141D09A8DD007CCFEF /* EXPMatchers+beWithinAMillisecondOf.m */; }; + 6CA7424E1D09A8DD007CCFEF /* UPPMetadataHelperSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA742151D09A8DD007CCFEF /* UPPMetadataHelperSpec.m */; }; + 6CA7424F1D09A8DD007CCFEF /* UPPBasicDeviceSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA742171D09A8DD007CCFEF /* UPPBasicDeviceSpec.m */; }; + 6CA742501D09A8DD007CCFEF /* UPPBasicServiceSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA742181D09A8DD007CCFEF /* UPPBasicServiceSpec.m */; }; + 6CA742511D09A8DD007CCFEF /* UPPDeviceIconSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA742191D09A8DD007CCFEF /* UPPDeviceIconSpec.m */; }; + 6CA742521D09A8DD007CCFEF /* UPPErrorSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA7421A1D09A8DD007CCFEF /* UPPErrorSpec.m */; }; + 6CA742531D09A8DD007CCFEF /* UPPMediaItemResourceSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA7421B1D09A8DD007CCFEF /* UPPMediaItemResourceSpec.m */; }; + 6CA742541D09A8DD007CCFEF /* UPPMediaItemSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA7421C1D09A8DD007CCFEF /* UPPMediaItemSpec.m */; }; + 6CA742551D09A8DD007CCFEF /* UPPMediaRendererDeviceSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA7421D1D09A8DD007CCFEF /* UPPMediaRendererDeviceSpec.m */; }; + 6CA742561D09A8DD007CCFEF /* UPPMediaServerDeviceSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA7421E1D09A8DD007CCFEF /* UPPMediaServerDeviceSpec.m */; }; + 6CA742571D09A8DD007CCFEF /* UPPParametersSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA7421F1D09A8DD007CCFEF /* UPPParametersSpec.m */; }; + 6CA742581D09A8DD007CCFEF /* UPPServiceSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA742201D09A8DD007CCFEF /* UPPServiceSpec.m */; }; + 6CA742591D09A8DD007CCFEF /* SSDPDelegateTestHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA742241D09A8DD007CCFEF /* SSDPDelegateTestHelper.m */; }; + 6CA7425A1D09A8DD007CCFEF /* SSDPServiceBrowserDelegateSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA742251D09A8DD007CCFEF /* SSDPServiceBrowserDelegateSpec.m */; }; + 6CA7425B1D09A8DD007CCFEF /* SSDPServiceBrowserSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA742261D09A8DD007CCFEF /* SSDPServiceBrowserSpec.m */; }; + 6CA7425C1D09A8DD007CCFEF /* UPPDiscoverySpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA742271D09A8DD007CCFEF /* UPPDiscoverySpec.m */; }; + 6CA7425D1D09A8DD007CCFEF /* UPPRequestSerializerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA742281D09A8DD007CCFEF /* UPPRequestSerializerSpec.m */; }; + 6CA7425E1D09A8DD007CCFEF /* UPPResponseSerializerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA742291D09A8DD007CCFEF /* UPPResponseSerializerSpec.m */; }; + 6CA7425F1D09A8DD007CCFEF /* UPPSessionManagerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA7422A1D09A8DD007CCFEF /* UPPSessionManagerSpec.m */; }; + 6CA742601D09A8DD007CCFEF /* UPPDeviceParserSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA7422C1D09A8DD007CCFEF /* UPPDeviceParserSpec.m */; }; + 6CA742611D09A8DD007CCFEF /* UPPErrorParserSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA7422D1D09A8DD007CCFEF /* UPPErrorParserSpec.m */; }; + 6CA742621D09A8DD007CCFEF /* UPPLastChangeParserSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA7422E1D09A8DD007CCFEF /* UPPLastChangeParserSpec.m */; }; + 6CA742631D09A8DD007CCFEF /* UPPMediaItemParserSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA7422F1D09A8DD007CCFEF /* UPPMediaItemParserSpec.m */; }; + 6CA742641D09A8DD007CCFEF /* UPPResponseParserSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA742301D09A8DD007CCFEF /* UPPResponseParserSpec.m */; }; + 6CA742651D09A8DD007CCFEF /* UPPMediaItemProtocolSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA742321D09A8DD007CCFEF /* UPPMediaItemProtocolSpec.m */; }; + 6CA742661D09A8DD007CCFEF /* UPPAVTransportServiceSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA742341D09A8DD007CCFEF /* UPPAVTransportServiceSpec.m */; }; + 6CA742671D09A8DD007CCFEF /* UPPConnectionManagerServiceSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA742351D09A8DD007CCFEF /* UPPConnectionManagerServiceSpec.m */; }; + 6CA742681D09A8DD007CCFEF /* UPPContentDirectoryServiceSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA742361D09A8DD007CCFEF /* UPPContentDirectoryServiceSpec.m */; }; + 6CA742691D09A8DD007CCFEF /* UPPRenderingControlServiceSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA742371D09A8DD007CCFEF /* UPPRenderingControlServiceSpec.m */; }; + 6CA7426A1D09A8DD007CCFEF /* MockFailSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CA7423A1D09A8DD007CCFEF /* MockFailSessionManager.m */; }; + 6CA7426D1D09A93B007CCFEF /* AFNetworking.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C3EE8681D06F9F400506613 /* AFNetworking.framework */; }; + 6CA7426E1D09A93B007CCFEF /* CocoaAsyncSocket.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C3EE8691D06F9F400506613 /* CocoaAsyncSocket.framework */; }; + 6CA7426F1D09A93B007CCFEF /* GCDWebServers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C3EE86A1D06F9F400506613 /* GCDWebServers.framework */; }; + 6CA742701D09A93B007CCFEF /* Ono.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C3EE86B1D06F9F400506613 /* Ono.framework */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + 6CA741FC1D09A8A9007CCFEF /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 6CA6C7691D06ED8700BA8CF1 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 6CA6C7711D06ED8700BA8CF1; + remoteInfo = CocoaUPnP; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXFileReference section */ + 6C3E41191D0ADD29002119F5 /* CocoaUPnP.podspec */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CocoaUPnP.podspec; sourceTree = ""; }; + 6C3E411B1D0AE656002119F5 /* Expecta.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Expecta.framework; path = Carthage/Build/iOS/Expecta.framework; sourceTree = ""; }; + 6C3E411C1D0AE656002119F5 /* OCMock.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OCMock.framework; path = Carthage/Build/iOS/OCMock.framework; sourceTree = ""; }; + 6C3E411D1D0AE656002119F5 /* OHHTTPStubs.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OHHTTPStubs.framework; path = Carthage/Build/iOS/OHHTTPStubs.framework; sourceTree = ""; }; + 6C3E41211D0AE7B3002119F5 /* Specta.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Specta.framework; path = Carthage/Build/iOS/Specta.framework; sourceTree = ""; }; 6C3EE7C51D06EE1400506613 /* UPPEventServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UPPEventServer.h; sourceTree = ""; }; 6C3EE7C61D06EE1400506613 /* UPPEventServer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPEventServer.m; sourceTree = ""; }; 6C3EE7C71D06EE1400506613 /* UPPEventSubscription.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UPPEventSubscription.h; sourceTree = ""; }; @@ -159,6 +230,59 @@ 6CA6C7771D06ED8800BA8CF1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 6CA741F01D09A76B007CCFEF /* module.modulemap */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = "sourcecode.module-map"; path = module.modulemap; sourceTree = ""; }; 6CA741F11D09A76B007CCFEF /* module.private.modulemap */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = "sourcecode.module-map"; path = module.private.modulemap; sourceTree = ""; }; + 6CA741F61D09A8A9007CCFEF /* CocoaUPnPTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CocoaUPnPTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 6CA741FA1D09A8A9007CCFEF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 6CA742021D09A8DD007CCFEF /* UPPEventServerSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPEventServerSpec.m; sourceTree = ""; }; + 6CA742031D09A8DD007CCFEF /* UPPEventSubscriptionManagerSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPEventSubscriptionManagerSpec.m; sourceTree = ""; }; + 6CA742041D09A8DD007CCFEF /* UPPEventSubscriptionSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPEventSubscriptionSpec.m; sourceTree = ""; }; + 6CA742061D09A8DD007CCFEF /* Containers.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Containers.xml; sourceTree = ""; }; + 6CA742071D09A8DD007CCFEF /* Device.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Device.xml; sourceTree = ""; }; + 6CA742081D09A8DD007CCFEF /* Empty.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Empty.xml; sourceTree = ""; }; + 6CA742091D09A8DD007CCFEF /* Error.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Error.xml; sourceTree = ""; }; + 6CA7420A1D09A8DD007CCFEF /* FullMetadata.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = FullMetadata.xml; sourceTree = ""; }; + 6CA7420B1D09A8DD007CCFEF /* GetConnectionID.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = GetConnectionID.xml; sourceTree = ""; }; + 6CA7420C1D09A8DD007CCFEF /* GetPositionInfoResponse.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = GetPositionInfoResponse.xml; sourceTree = ""; }; + 6CA7420D1D09A8DD007CCFEF /* Items.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Items.xml; sourceTree = ""; }; + 6CA7420E1D09A8DD007CCFEF /* LastChangeFull.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = LastChangeFull.xml; sourceTree = ""; }; + 6CA7420F1D09A8DD007CCFEF /* MediaServer.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = MediaServer.xml; sourceTree = ""; }; + 6CA742111D09A8DD007CCFEF /* PlayRequest.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = PlayRequest.xml; sourceTree = ""; }; + 6CA742131D09A8DD007CCFEF /* EXPMatchers+beWithinAMillisecondOf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "EXPMatchers+beWithinAMillisecondOf.h"; sourceTree = ""; }; + 6CA742141D09A8DD007CCFEF /* EXPMatchers+beWithinAMillisecondOf.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "EXPMatchers+beWithinAMillisecondOf.m"; sourceTree = ""; }; + 6CA742151D09A8DD007CCFEF /* UPPMetadataHelperSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPMetadataHelperSpec.m; sourceTree = ""; }; + 6CA742171D09A8DD007CCFEF /* UPPBasicDeviceSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPBasicDeviceSpec.m; sourceTree = ""; }; + 6CA742181D09A8DD007CCFEF /* UPPBasicServiceSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPBasicServiceSpec.m; sourceTree = ""; }; + 6CA742191D09A8DD007CCFEF /* UPPDeviceIconSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPDeviceIconSpec.m; sourceTree = ""; }; + 6CA7421A1D09A8DD007CCFEF /* UPPErrorSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPErrorSpec.m; sourceTree = ""; }; + 6CA7421B1D09A8DD007CCFEF /* UPPMediaItemResourceSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPMediaItemResourceSpec.m; sourceTree = ""; }; + 6CA7421C1D09A8DD007CCFEF /* UPPMediaItemSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPMediaItemSpec.m; sourceTree = ""; }; + 6CA7421D1D09A8DD007CCFEF /* UPPMediaRendererDeviceSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPMediaRendererDeviceSpec.m; sourceTree = ""; }; + 6CA7421E1D09A8DD007CCFEF /* UPPMediaServerDeviceSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPMediaServerDeviceSpec.m; sourceTree = ""; }; + 6CA7421F1D09A8DD007CCFEF /* UPPParametersSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPParametersSpec.m; sourceTree = ""; }; + 6CA742201D09A8DD007CCFEF /* UPPServiceSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPServiceSpec.m; sourceTree = ""; }; + 6CA742231D09A8DD007CCFEF /* SSDPDelegateTestHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SSDPDelegateTestHelper.h; sourceTree = ""; }; + 6CA742241D09A8DD007CCFEF /* SSDPDelegateTestHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SSDPDelegateTestHelper.m; sourceTree = ""; }; + 6CA742251D09A8DD007CCFEF /* SSDPServiceBrowserDelegateSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SSDPServiceBrowserDelegateSpec.m; sourceTree = ""; }; + 6CA742261D09A8DD007CCFEF /* SSDPServiceBrowserSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SSDPServiceBrowserSpec.m; sourceTree = ""; }; + 6CA742271D09A8DD007CCFEF /* UPPDiscoverySpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPDiscoverySpec.m; sourceTree = ""; }; + 6CA742281D09A8DD007CCFEF /* UPPRequestSerializerSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPRequestSerializerSpec.m; sourceTree = ""; }; + 6CA742291D09A8DD007CCFEF /* UPPResponseSerializerSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPResponseSerializerSpec.m; sourceTree = ""; }; + 6CA7422A1D09A8DD007CCFEF /* UPPSessionManagerSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPSessionManagerSpec.m; sourceTree = ""; }; + 6CA7422C1D09A8DD007CCFEF /* UPPDeviceParserSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPDeviceParserSpec.m; sourceTree = ""; }; + 6CA7422D1D09A8DD007CCFEF /* UPPErrorParserSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPErrorParserSpec.m; sourceTree = ""; }; + 6CA7422E1D09A8DD007CCFEF /* UPPLastChangeParserSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPLastChangeParserSpec.m; sourceTree = ""; }; + 6CA7422F1D09A8DD007CCFEF /* UPPMediaItemParserSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPMediaItemParserSpec.m; sourceTree = ""; }; + 6CA742301D09A8DD007CCFEF /* UPPResponseParserSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPResponseParserSpec.m; sourceTree = ""; }; + 6CA742321D09A8DD007CCFEF /* UPPMediaItemProtocolSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPMediaItemProtocolSpec.m; sourceTree = ""; }; + 6CA742341D09A8DD007CCFEF /* UPPAVTransportServiceSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPAVTransportServiceSpec.m; sourceTree = ""; }; + 6CA742351D09A8DD007CCFEF /* UPPConnectionManagerServiceSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPConnectionManagerServiceSpec.m; sourceTree = ""; }; + 6CA742361D09A8DD007CCFEF /* UPPContentDirectoryServiceSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPContentDirectoryServiceSpec.m; sourceTree = ""; }; + 6CA742371D09A8DD007CCFEF /* UPPRenderingControlServiceSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UPPRenderingControlServiceSpec.m; sourceTree = ""; }; + 6CA742391D09A8DD007CCFEF /* MockFailSessionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MockFailSessionManager.h; sourceTree = ""; }; + 6CA7423A1D09A8DD007CCFEF /* MockFailSessionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MockFailSessionManager.m; sourceTree = ""; }; + 6CA7423B1D09A8DD007CCFEF /* NetworkTestHelpers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkTestHelpers.h; sourceTree = ""; }; + 6CA7423C1D09A8DD007CCFEF /* NetworkTestHelpers.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NetworkTestHelpers.m; sourceTree = ""; }; + 6CA7423D1D09A8DD007CCFEF /* TestHelpers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TestHelpers.h; sourceTree = ""; }; + 6CA7423E1D09A8DD007CCFEF /* TestHelpers.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TestHelpers.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -173,6 +297,22 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 6CA741F31D09A8A9007CCFEF /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 6C3E41221D0AE7B3002119F5 /* Specta.framework in Frameworks */, + 6C3E411E1D0AE656002119F5 /* Expecta.framework in Frameworks */, + 6C3E411F1D0AE656002119F5 /* OCMock.framework in Frameworks */, + 6C3E41201D0AE656002119F5 /* OHHTTPStubs.framework in Frameworks */, + 6CA742701D09A93B007CCFEF /* Ono.framework in Frameworks */, + 6CA7426E1D09A93B007CCFEF /* CocoaAsyncSocket.framework in Frameworks */, + 6CA7426F1D09A93B007CCFEF /* GCDWebServers.framework in Frameworks */, + 6CA741FB1D09A8A9007CCFEF /* CocoaUPnP.framework in Frameworks */, + 6CA7426D1D09A93B007CCFEF /* AFNetworking.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -303,12 +443,14 @@ 6CA6C7681D06ED8700BA8CF1 = { isa = PBXGroup; children = ( - 6CA741F01D09A76B007CCFEF /* module.modulemap */, - 6CA741F11D09A76B007CCFEF /* module.private.modulemap */, - 6CA741EF1D09A6AF007CCFEF /* New Group */, 6C3EE8521D06EE8100506613 /* Cartfile */, - 6CA6C7771D06ED8800BA8CF1 /* Info.plist */, 6CA6C7741D06ED8800BA8CF1 /* CocoaUPnP */, + 6C3E41191D0ADD29002119F5 /* CocoaUPnP.podspec */, + 6CA741F71D09A8A9007CCFEF /* CocoaUPnPTests */, + 6CA741EF1D09A6AF007CCFEF /* Frameworks */, + 6CA6C7771D06ED8800BA8CF1 /* Info.plist */, + 6CA741F01D09A76B007CCFEF /* module.modulemap */, + 6CA741F11D09A76B007CCFEF /* module.private.modulemap */, 6CA6C7731D06ED8700BA8CF1 /* Products */, ); sourceTree = ""; @@ -317,6 +459,7 @@ isa = PBXGroup; children = ( 6CA6C7721D06ED8700BA8CF1 /* CocoaUPnP.framework */, + 6CA741F61D09A8A9007CCFEF /* CocoaUPnPTests.xctest */, ); name = Products; sourceTree = ""; @@ -336,15 +479,166 @@ path = CocoaUPnP; sourceTree = ""; }; - 6CA741EF1D09A6AF007CCFEF /* New Group */ = { + 6CA741EF1D09A6AF007CCFEF /* Frameworks */ = { isa = PBXGroup; children = ( + 6C3E41211D0AE7B3002119F5 /* Specta.framework */, + 6C3E411B1D0AE656002119F5 /* Expecta.framework */, + 6C3E411C1D0AE656002119F5 /* OCMock.framework */, + 6C3E411D1D0AE656002119F5 /* OHHTTPStubs.framework */, 6C3EE8681D06F9F400506613 /* AFNetworking.framework */, 6C3EE8691D06F9F400506613 /* CocoaAsyncSocket.framework */, 6C3EE86A1D06F9F400506613 /* GCDWebServers.framework */, 6C3EE86B1D06F9F400506613 /* Ono.framework */, ); - name = "New Group"; + name = Frameworks; + sourceTree = ""; + }; + 6CA741F71D09A8A9007CCFEF /* CocoaUPnPTests */ = { + isa = PBXGroup; + children = ( + 6CA742011D09A8DD007CCFEF /* Events */, + 6CA742051D09A8DD007CCFEF /* ExampleXML */, + 6CA742121D09A8DD007CCFEF /* Helpers */, + 6CA742161D09A8DD007CCFEF /* Models */, + 6CA742211D09A8DD007CCFEF /* Networking */, + 6CA7422B1D09A8DD007CCFEF /* Parsers */, + 6CA742311D09A8DD007CCFEF /* Protocols */, + 6CA742331D09A8DD007CCFEF /* Services */, + 6CA742381D09A8DD007CCFEF /* Test Helpers */, + 6CA741FA1D09A8A9007CCFEF /* Info.plist */, + ); + path = CocoaUPnPTests; + sourceTree = ""; + }; + 6CA742011D09A8DD007CCFEF /* Events */ = { + isa = PBXGroup; + children = ( + 6CA742021D09A8DD007CCFEF /* UPPEventServerSpec.m */, + 6CA742031D09A8DD007CCFEF /* UPPEventSubscriptionManagerSpec.m */, + 6CA742041D09A8DD007CCFEF /* UPPEventSubscriptionSpec.m */, + ); + path = Events; + sourceTree = ""; + }; + 6CA742051D09A8DD007CCFEF /* ExampleXML */ = { + isa = PBXGroup; + children = ( + 6CA742061D09A8DD007CCFEF /* Containers.xml */, + 6CA742071D09A8DD007CCFEF /* Device.xml */, + 6CA742081D09A8DD007CCFEF /* Empty.xml */, + 6CA742091D09A8DD007CCFEF /* Error.xml */, + 6CA7420A1D09A8DD007CCFEF /* FullMetadata.xml */, + 6CA7420B1D09A8DD007CCFEF /* GetConnectionID.xml */, + 6CA7420C1D09A8DD007CCFEF /* GetPositionInfoResponse.xml */, + 6CA7420D1D09A8DD007CCFEF /* Items.xml */, + 6CA7420E1D09A8DD007CCFEF /* LastChangeFull.xml */, + 6CA7420F1D09A8DD007CCFEF /* MediaServer.xml */, + 6CA742101D09A8DD007CCFEF /* Requests */, + ); + path = ExampleXML; + sourceTree = ""; + }; + 6CA742101D09A8DD007CCFEF /* Requests */ = { + isa = PBXGroup; + children = ( + 6CA742111D09A8DD007CCFEF /* PlayRequest.xml */, + ); + path = Requests; + sourceTree = ""; + }; + 6CA742121D09A8DD007CCFEF /* Helpers */ = { + isa = PBXGroup; + children = ( + 6CA742131D09A8DD007CCFEF /* EXPMatchers+beWithinAMillisecondOf.h */, + 6CA742141D09A8DD007CCFEF /* EXPMatchers+beWithinAMillisecondOf.m */, + 6CA742151D09A8DD007CCFEF /* UPPMetadataHelperSpec.m */, + ); + path = Helpers; + sourceTree = ""; + }; + 6CA742161D09A8DD007CCFEF /* Models */ = { + isa = PBXGroup; + children = ( + 6CA742171D09A8DD007CCFEF /* UPPBasicDeviceSpec.m */, + 6CA742181D09A8DD007CCFEF /* UPPBasicServiceSpec.m */, + 6CA742191D09A8DD007CCFEF /* UPPDeviceIconSpec.m */, + 6CA7421A1D09A8DD007CCFEF /* UPPErrorSpec.m */, + 6CA7421B1D09A8DD007CCFEF /* UPPMediaItemResourceSpec.m */, + 6CA7421C1D09A8DD007CCFEF /* UPPMediaItemSpec.m */, + 6CA7421D1D09A8DD007CCFEF /* UPPMediaRendererDeviceSpec.m */, + 6CA7421E1D09A8DD007CCFEF /* UPPMediaServerDeviceSpec.m */, + 6CA7421F1D09A8DD007CCFEF /* UPPParametersSpec.m */, + 6CA742201D09A8DD007CCFEF /* UPPServiceSpec.m */, + ); + path = Models; + sourceTree = ""; + }; + 6CA742211D09A8DD007CCFEF /* Networking */ = { + isa = PBXGroup; + children = ( + 6CA742221D09A8DD007CCFEF /* SSDP */, + 6CA742271D09A8DD007CCFEF /* UPPDiscoverySpec.m */, + 6CA742281D09A8DD007CCFEF /* UPPRequestSerializerSpec.m */, + 6CA742291D09A8DD007CCFEF /* UPPResponseSerializerSpec.m */, + 6CA7422A1D09A8DD007CCFEF /* UPPSessionManagerSpec.m */, + ); + path = Networking; + sourceTree = ""; + }; + 6CA742221D09A8DD007CCFEF /* SSDP */ = { + isa = PBXGroup; + children = ( + 6CA742231D09A8DD007CCFEF /* SSDPDelegateTestHelper.h */, + 6CA742241D09A8DD007CCFEF /* SSDPDelegateTestHelper.m */, + 6CA742251D09A8DD007CCFEF /* SSDPServiceBrowserDelegateSpec.m */, + 6CA742261D09A8DD007CCFEF /* SSDPServiceBrowserSpec.m */, + ); + path = SSDP; + sourceTree = ""; + }; + 6CA7422B1D09A8DD007CCFEF /* Parsers */ = { + isa = PBXGroup; + children = ( + 6CA7422C1D09A8DD007CCFEF /* UPPDeviceParserSpec.m */, + 6CA7422D1D09A8DD007CCFEF /* UPPErrorParserSpec.m */, + 6CA7422E1D09A8DD007CCFEF /* UPPLastChangeParserSpec.m */, + 6CA7422F1D09A8DD007CCFEF /* UPPMediaItemParserSpec.m */, + 6CA742301D09A8DD007CCFEF /* UPPResponseParserSpec.m */, + ); + path = Parsers; + sourceTree = ""; + }; + 6CA742311D09A8DD007CCFEF /* Protocols */ = { + isa = PBXGroup; + children = ( + 6CA742321D09A8DD007CCFEF /* UPPMediaItemProtocolSpec.m */, + ); + path = Protocols; + sourceTree = ""; + }; + 6CA742331D09A8DD007CCFEF /* Services */ = { + isa = PBXGroup; + children = ( + 6CA742341D09A8DD007CCFEF /* UPPAVTransportServiceSpec.m */, + 6CA742351D09A8DD007CCFEF /* UPPConnectionManagerServiceSpec.m */, + 6CA742361D09A8DD007CCFEF /* UPPContentDirectoryServiceSpec.m */, + 6CA742371D09A8DD007CCFEF /* UPPRenderingControlServiceSpec.m */, + ); + path = Services; + sourceTree = ""; + }; + 6CA742381D09A8DD007CCFEF /* Test Helpers */ = { + isa = PBXGroup; + children = ( + 6CA742391D09A8DD007CCFEF /* MockFailSessionManager.h */, + 6CA7423A1D09A8DD007CCFEF /* MockFailSessionManager.m */, + 6CA7423B1D09A8DD007CCFEF /* NetworkTestHelpers.h */, + 6CA7423C1D09A8DD007CCFEF /* NetworkTestHelpers.m */, + 6CA7423D1D09A8DD007CCFEF /* TestHelpers.h */, + 6CA7423E1D09A8DD007CCFEF /* TestHelpers.m */, + ); + path = "Test Helpers"; sourceTree = ""; }; /* End PBXGroup section */ @@ -413,6 +707,25 @@ productReference = 6CA6C7721D06ED8700BA8CF1 /* CocoaUPnP.framework */; productType = "com.apple.product-type.framework"; }; + 6CA741F51D09A8A9007CCFEF /* CocoaUPnPTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6CA741FE1D09A8A9007CCFEF /* Build configuration list for PBXNativeTarget "CocoaUPnPTests" */; + buildPhases = ( + 6CA741F21D09A8A9007CCFEF /* Sources */, + 6CA741F31D09A8A9007CCFEF /* Frameworks */, + 6CA741F41D09A8A9007CCFEF /* Resources */, + 6C86CC361D0EC0D000D06C48 /* Carthage copy frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 6CA741FD1D09A8A9007CCFEF /* PBXTargetDependency */, + ); + name = CocoaUPnPTests; + productName = CocoaUPnPTests; + productReference = 6CA741F61D09A8A9007CCFEF /* CocoaUPnPTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -425,6 +738,9 @@ 6CA6C7711D06ED8700BA8CF1 = { CreatedOnToolsVersion = 7.3.1; }; + 6CA741F51D09A8A9007CCFEF = { + CreatedOnToolsVersion = 7.3.1; + }; }; }; buildConfigurationList = 6CA6C76C1D06ED8700BA8CF1 /* Build configuration list for PBXProject "CocoaUPnP" */; @@ -440,6 +756,7 @@ projectRoot = ""; targets = ( 6CA6C7711D06ED8700BA8CF1 /* CocoaUPnP */, + 6CA741F51D09A8A9007CCFEF /* CocoaUPnPTests */, ); }; /* End PBXProject section */ @@ -449,11 +766,55 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 6C3E411A1D0ADD29002119F5 /* CocoaUPnP.podspec in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6CA741F41D09A8A9007CCFEF /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6CA742441D09A8DD007CCFEF /* Empty.xml in Resources */, + 6CA742471D09A8DD007CCFEF /* GetConnectionID.xml in Resources */, + 6CA742491D09A8DD007CCFEF /* Items.xml in Resources */, + 6CA742461D09A8DD007CCFEF /* FullMetadata.xml in Resources */, + 6CA742421D09A8DD007CCFEF /* Containers.xml in Resources */, + 6CA7424C1D09A8DD007CCFEF /* PlayRequest.xml in Resources */, + 6CA742451D09A8DD007CCFEF /* Error.xml in Resources */, + 6CA742431D09A8DD007CCFEF /* Device.xml in Resources */, + 6CA7424B1D09A8DD007CCFEF /* MediaServer.xml in Resources */, + 6CA742481D09A8DD007CCFEF /* GetPositionInfoResponse.xml in Resources */, + 6CA7424A1D09A8DD007CCFEF /* LastChangeFull.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ +/* Begin PBXShellScriptBuildPhase section */ + 6C86CC361D0EC0D000D06C48 /* Carthage copy frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "$(SRCROOT)/Carthage/Build/iOS/Specta.framework", + "$(SRCROOT)/Carthage/Build/iOS/Expecta.framework", + "$(SRCROOT)/Carthage/Build/iOS/OCMock.framework", + "$(SRCROOT)/Carthage/Build/iOS/OHHTTPStubs.framework", + "$(SRCROOT)/Carthage/Build/iOS/AFNetworking.framework", + "$(SRCROOT)/Carthage/Build/iOS/CocoaAsyncSocket.framework", + "$(SRCROOT)/Carthage/Build/iOS/GCDWebServers.framework", + "$(SRCROOT)/Carthage/Build/iOS/Ono.framework", + ); + name = "Carthage copy frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "carthage copy-frameworks"; + }; +/* End PBXShellScriptBuildPhase section */ + /* Begin PBXSourcesBuildPhase section */ 6CA6C76D1D06ED8700BA8CF1 /* Sources */ = { isa = PBXSourcesBuildPhase; @@ -495,8 +856,58 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 6CA741F21D09A8A9007CCFEF /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6CA7425D1D09A8DD007CCFEF /* UPPRequestSerializerSpec.m in Sources */, + 6CA7425C1D09A8DD007CCFEF /* UPPDiscoverySpec.m in Sources */, + 6CA742521D09A8DD007CCFEF /* UPPErrorSpec.m in Sources */, + 6CA742411D09A8DD007CCFEF /* UPPEventSubscriptionSpec.m in Sources */, + 6CA742681D09A8DD007CCFEF /* UPPContentDirectoryServiceSpec.m in Sources */, + 6CA7424D1D09A8DD007CCFEF /* EXPMatchers+beWithinAMillisecondOf.m in Sources */, + 6CA742621D09A8DD007CCFEF /* UPPLastChangeParserSpec.m in Sources */, + 6CA742401D09A8DD007CCFEF /* UPPEventSubscriptionManagerSpec.m in Sources */, + 6CA742611D09A8DD007CCFEF /* UPPErrorParserSpec.m in Sources */, + 6CA742531D09A8DD007CCFEF /* UPPMediaItemResourceSpec.m in Sources */, + 6CA742641D09A8DD007CCFEF /* UPPResponseParserSpec.m in Sources */, + 6CA742671D09A8DD007CCFEF /* UPPConnectionManagerServiceSpec.m in Sources */, + 6CA742651D09A8DD007CCFEF /* UPPMediaItemProtocolSpec.m in Sources */, + 6CA7426A1D09A8DD007CCFEF /* MockFailSessionManager.m in Sources */, + 6CA7424F1D09A8DD007CCFEF /* UPPBasicDeviceSpec.m in Sources */, + 6CA742541D09A8DD007CCFEF /* UPPMediaItemSpec.m in Sources */, + 6CA7424E1D09A8DD007CCFEF /* UPPMetadataHelperSpec.m in Sources */, + 6CA742591D09A8DD007CCFEF /* SSDPDelegateTestHelper.m in Sources */, + 6CA742661D09A8DD007CCFEF /* UPPAVTransportServiceSpec.m in Sources */, + 6CA742581D09A8DD007CCFEF /* UPPServiceSpec.m in Sources */, + 6CA742601D09A8DD007CCFEF /* UPPDeviceParserSpec.m in Sources */, + 6CA7425A1D09A8DD007CCFEF /* SSDPServiceBrowserDelegateSpec.m in Sources */, + 6CA7425F1D09A8DD007CCFEF /* UPPSessionManagerSpec.m in Sources */, + 6CA742691D09A8DD007CCFEF /* UPPRenderingControlServiceSpec.m in Sources */, + 6CA742561D09A8DD007CCFEF /* UPPMediaServerDeviceSpec.m in Sources */, + 6CA7425E1D09A8DD007CCFEF /* UPPResponseSerializerSpec.m in Sources */, + 6CA742501D09A8DD007CCFEF /* UPPBasicServiceSpec.m in Sources */, + 6C3E41231D0E940F002119F5 /* TestHelpers.m in Sources */, + 6CA742571D09A8DD007CCFEF /* UPPParametersSpec.m in Sources */, + 6CA7423F1D09A8DD007CCFEF /* UPPEventServerSpec.m in Sources */, + 6CA7425B1D09A8DD007CCFEF /* SSDPServiceBrowserSpec.m in Sources */, + 6CA742631D09A8DD007CCFEF /* UPPMediaItemParserSpec.m in Sources */, + 6C3E41251D0E96F2002119F5 /* NetworkTestHelpers.m in Sources */, + 6CA742551D09A8DD007CCFEF /* UPPMediaRendererDeviceSpec.m in Sources */, + 6CA742511D09A8DD007CCFEF /* UPPDeviceIconSpec.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + 6CA741FD1D09A8A9007CCFEF /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 6CA6C7711D06ED8700BA8CF1 /* CocoaUPnP */; + targetProxy = 6CA741FC1D09A8A9007CCFEF /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin XCBuildConfiguration section */ 6CA6C7781D06ED8800BA8CF1 /* Debug */ = { isa = XCBuildConfiguration; @@ -632,6 +1043,36 @@ }; name = Release; }; + 6CA741FF1D09A8A9007CCFEF /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + EMBEDDED_CONTENT_CONTAINS_SWIFT = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + ); + INFOPLIST_FILE = CocoaUPnPTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = uk.com.arcam.CocoaUPnPTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 6CA742001D09A8A9007CCFEF /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + EMBEDDED_CONTENT_CONTAINS_SWIFT = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + ); + INFOPLIST_FILE = CocoaUPnPTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = uk.com.arcam.CocoaUPnPTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -653,6 +1094,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 6CA741FE1D09A8A9007CCFEF /* Build configuration list for PBXNativeTarget "CocoaUPnPTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6CA741FF1D09A8A9007CCFEF /* Debug */, + 6CA742001D09A8A9007CCFEF /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; /* End XCConfigurationList section */ }; rootObject = 6CA6C7691D06ED8700BA8CF1 /* Project object */; diff --git a/CocoaUPnP.xcodeproj/xcshareddata/xcschemes/CocoaUPnP.xcscheme b/CocoaUPnP.xcodeproj/xcshareddata/xcschemes/CocoaUPnP.xcscheme index e71acd8..aa194d3 100644 --- a/CocoaUPnP.xcodeproj/xcshareddata/xcschemes/CocoaUPnP.xcscheme +++ b/CocoaUPnP.xcodeproj/xcshareddata/xcschemes/CocoaUPnP.xcscheme @@ -28,7 +28,26 @@ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" shouldUseLaunchSchemeArgsEnv = "YES"> + + + + + + + + diff --git a/CocoaUPnPTests/Events/UPPEventServerSpec.m b/CocoaUPnPTests/Events/UPPEventServerSpec.m index 5a40c0e..4324655 100644 --- a/CocoaUPnPTests/Events/UPPEventServerSpec.m +++ b/CocoaUPnPTests/Events/UPPEventServerSpec.m @@ -3,10 +3,10 @@ #import #import -#import -#import -#import +#import #import "TestHelpers.h" +#import +#import SpecBegin(UPPEventServer) diff --git a/CocoaUPnPTests/Events/UPPEventSubscriptionManagerSpec.m b/CocoaUPnPTests/Events/UPPEventSubscriptionManagerSpec.m index 88b2b06..f751b80 100644 --- a/CocoaUPnPTests/Events/UPPEventSubscriptionManagerSpec.m +++ b/CocoaUPnPTests/Events/UPPEventSubscriptionManagerSpec.m @@ -5,6 +5,8 @@ #import "EXPMatchers+beWithinAMillisecondOf.h" #import #import "UPPError.h" +#import +#import /* NOTE: This spec shouldn't know about the existance of activeSubscriptions, but diff --git a/CocoaUPnPTests/Events/UPPEventSubscriptionSpec.m b/CocoaUPnPTests/Events/UPPEventSubscriptionSpec.m index 37d504d..bfe7310 100644 --- a/CocoaUPnPTests/Events/UPPEventSubscriptionSpec.m +++ b/CocoaUPnPTests/Events/UPPEventSubscriptionSpec.m @@ -4,6 +4,8 @@ #import #import "EXPMatchers+beWithinAMillisecondOf.h" #import +#import +#import SpecBegin(UPPEventSubscription) diff --git a/CocoaUPnPTests/Helpers/EXPMatchers+beWithinAMillisecondOf.h b/CocoaUPnPTests/Helpers/EXPMatchers+beWithinAMillisecondOf.h index 30734e0..653df01 100644 --- a/CocoaUPnPTests/Helpers/EXPMatchers+beWithinAMillisecondOf.h +++ b/CocoaUPnPTests/Helpers/EXPMatchers+beWithinAMillisecondOf.h @@ -1,7 +1,7 @@ // CocoaUPnP by A&R Cambridge Ltd, http://www.arcam.co.uk // Copyright 2015 Arcam. See LICENSE file. -#import "Expecta.h" +#import EXPMatcherInterface(beWithinAMillisecondOf, (NSDate *expected)) diff --git a/CocoaUPnPTests/Helpers/UPPMetadataHelperSpec.m b/CocoaUPnPTests/Helpers/UPPMetadataHelperSpec.m index 51a469e..7547b88 100644 --- a/CocoaUPnPTests/Helpers/UPPMetadataHelperSpec.m +++ b/CocoaUPnPTests/Helpers/UPPMetadataHelperSpec.m @@ -3,6 +3,9 @@ #import #import "TestHelpers.h" +#import +#import +#import "TestHelpers.h" static UPPMediaItem * CreateMediaItem() { UPPMediaItem *item = [[UPPMediaItem alloc] init]; diff --git a/CocoaUPnPTests/Info.plist b/CocoaUPnPTests/Info.plist new file mode 100644 index 0000000..ba72822 --- /dev/null +++ b/CocoaUPnPTests/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/CocoaUPnPTests/Models/UPPBasicDeviceSpec.m b/CocoaUPnPTests/Models/UPPBasicDeviceSpec.m index 56c5357..b5876b2 100644 --- a/CocoaUPnPTests/Models/UPPBasicDeviceSpec.m +++ b/CocoaUPnPTests/Models/UPPBasicDeviceSpec.m @@ -2,6 +2,9 @@ // Copyright 2015 Arcam. See LICENSE file. #import +#import +#import +#import "TestHelpers.h" SpecBegin(UPPBasicDevice) diff --git a/CocoaUPnPTests/Models/UPPBasicServiceSpec.m b/CocoaUPnPTests/Models/UPPBasicServiceSpec.m index f16119c..9ff5b44 100644 --- a/CocoaUPnPTests/Models/UPPBasicServiceSpec.m +++ b/CocoaUPnPTests/Models/UPPBasicServiceSpec.m @@ -2,6 +2,8 @@ // Copyright 2015 Arcam. See LICENSE file. #import +#import +#import SpecBegin(UPPBasicService) diff --git a/CocoaUPnPTests/Models/UPPDeviceIconSpec.m b/CocoaUPnPTests/Models/UPPDeviceIconSpec.m index 9ef87dc..282f43f 100644 --- a/CocoaUPnPTests/Models/UPPDeviceIconSpec.m +++ b/CocoaUPnPTests/Models/UPPDeviceIconSpec.m @@ -2,6 +2,8 @@ // Copyright 2015 Arcam. See LICENSE file. #import +#import +#import SpecBegin(UPPDeviceIcon) diff --git a/CocoaUPnPTests/Models/UPPErrorSpec.m b/CocoaUPnPTests/Models/UPPErrorSpec.m index ca275be..c5c0b37 100644 --- a/CocoaUPnPTests/Models/UPPErrorSpec.m +++ b/CocoaUPnPTests/Models/UPPErrorSpec.m @@ -2,6 +2,8 @@ // Copyright 2015 Arcam. See LICENSE file. #import +#import +#import SpecBegin(UPPError) diff --git a/CocoaUPnPTests/Models/UPPMediaItemResourceSpec.m b/CocoaUPnPTests/Models/UPPMediaItemResourceSpec.m index 81cc90f..168bb4e 100644 --- a/CocoaUPnPTests/Models/UPPMediaItemResourceSpec.m +++ b/CocoaUPnPTests/Models/UPPMediaItemResourceSpec.m @@ -2,6 +2,8 @@ // Copyright 2015 Arcam. See LICENSE file. #import +#import +#import SpecBegin(UPPMediaItemResource) diff --git a/CocoaUPnPTests/Models/UPPMediaItemSpec.m b/CocoaUPnPTests/Models/UPPMediaItemSpec.m index 1021551..99012b2 100644 --- a/CocoaUPnPTests/Models/UPPMediaItemSpec.m +++ b/CocoaUPnPTests/Models/UPPMediaItemSpec.m @@ -2,6 +2,9 @@ // Copyright 2015 Arcam. See LICENSE file. #import +#import +#import +#import "TestHelpers.h" SpecBegin(UPPMediaItem) diff --git a/CocoaUPnPTests/Models/UPPMediaRendererDeviceSpec.m b/CocoaUPnPTests/Models/UPPMediaRendererDeviceSpec.m index e9087e8..c5949fe 100644 --- a/CocoaUPnPTests/Models/UPPMediaRendererDeviceSpec.m +++ b/CocoaUPnPTests/Models/UPPMediaRendererDeviceSpec.m @@ -2,6 +2,8 @@ // Copyright 2015 Arcam. See LICENSE file. #import +#import +#import SpecBegin(UPPMediaRendererDevice) diff --git a/CocoaUPnPTests/Models/UPPMediaServerDeviceSpec.m b/CocoaUPnPTests/Models/UPPMediaServerDeviceSpec.m index 7203057..fb0c608 100644 --- a/CocoaUPnPTests/Models/UPPMediaServerDeviceSpec.m +++ b/CocoaUPnPTests/Models/UPPMediaServerDeviceSpec.m @@ -2,6 +2,8 @@ // Copyright 2015 Arcam. See LICENSE file. #import +#import +#import SpecBegin(UPPMediaServerDevice) diff --git a/CocoaUPnPTests/Models/UPPParametersSpec.m b/CocoaUPnPTests/Models/UPPParametersSpec.m index c2fb3e1..4e1f770 100644 --- a/CocoaUPnPTests/Models/UPPParametersSpec.m +++ b/CocoaUPnPTests/Models/UPPParametersSpec.m @@ -2,6 +2,8 @@ // Copyright 2015 Arcam. See LICENSE file. #import +#import +#import @interface UPPParameters () @property (copy, nonatomic) NSArray *keys; diff --git a/CocoaUPnPTests/Models/UPPServiceSpec.m b/CocoaUPnPTests/Models/UPPServiceSpec.m index f7a1762..5f58e36 100644 --- a/CocoaUPnPTests/Models/UPPServiceSpec.m +++ b/CocoaUPnPTests/Models/UPPServiceSpec.m @@ -2,6 +2,9 @@ // Copyright 2015 Arcam. See LICENSE file. #import +#import +#import +#import "TestHelpers.h" SpecBegin(UPPServiceDescription) diff --git a/CocoaUPnPTests/Networking/SSDP/SSDPDelegateTestHelper.h b/CocoaUPnPTests/Networking/SSDP/SSDPDelegateTestHelper.h index 6c4f9fd..17b09d8 100644 --- a/CocoaUPnPTests/Networking/SSDP/SSDPDelegateTestHelper.h +++ b/CocoaUPnPTests/Networking/SSDP/SSDPDelegateTestHelper.h @@ -21,8 +21,10 @@ // THE SOFTWARE. // +@import CocoaUPnP; +@import CocoaUPnP.Private; + #import -#import typedef void (^CallbackBlock)(id firstArgument, id secondArgument); diff --git a/CocoaUPnPTests/Networking/SSDP/SSDPServiceBrowserDelegateSpec.m b/CocoaUPnPTests/Networking/SSDP/SSDPServiceBrowserDelegateSpec.m index bfd1dd4..1ff6981 100644 --- a/CocoaUPnPTests/Networking/SSDP/SSDPServiceBrowserDelegateSpec.m +++ b/CocoaUPnPTests/Networking/SSDP/SSDPServiceBrowserDelegateSpec.m @@ -4,6 +4,10 @@ #import #import #import "SSDPDelegateTestHelper.h" +#import +#import +#import +#import SpecBegin(SSDPServiceBrowserDelegate) diff --git a/CocoaUPnPTests/Networking/SSDP/SSDPServiceBrowserSpec.m b/CocoaUPnPTests/Networking/SSDP/SSDPServiceBrowserSpec.m index c0c1017..fe1c24b 100644 --- a/CocoaUPnPTests/Networking/SSDP/SSDPServiceBrowserSpec.m +++ b/CocoaUPnPTests/Networking/SSDP/SSDPServiceBrowserSpec.m @@ -1,8 +1,13 @@ // CocoaUPnP by A&R Cambridge Ltd, http://www.arcam.co.uk // Copyright 2015 Arcam. See LICENSE file. -#import -#import +@import CocoaUPnP; +@import CocoaUPnP.Private; + +#import +#import +#import +#import // Expose private methods @interface SSDPServiceBrowser () @@ -78,7 +83,7 @@ - (NSString *)_userAgentString; // We don't really care about what the methods parameters are, // just need to state we expect it to be called. - [[[strictMock expect] ignoringNonObjectArgs] sendData:[OCMArg any] + [(GCDAsyncUdpSocket *)[[strictMock expect] ignoringNonObjectArgs] sendData:[OCMArg any] toHost:[OCMArg any] port:123 withTimeout:123 @@ -103,7 +108,7 @@ - (NSString *)_userAgentString; [browser _userAgentString]]; NSData *data = [searchHeader dataUsingEncoding:NSUTF8StringEncoding]; - OCMExpect([mockMulticastSocket sendData:data + OCMExpect([(GCDAsyncUdpSocket *)mockMulticastSocket sendData:data toHost:@"239.255.255.250" port:1900 withTimeout:-1 @@ -127,7 +132,7 @@ - (NSString *)_userAgentString; [browser _userAgentString]]; NSData *data = [searchHeader dataUsingEncoding:NSUTF8StringEncoding]; - OCMExpect([mockMulticastSocket sendData:data + OCMExpect([(GCDAsyncUdpSocket *)mockMulticastSocket sendData:data toHost:@"239.255.255.250" port:1900 withTimeout:-1 diff --git a/CocoaUPnPTests/Networking/UPPDiscoverySpec.m b/CocoaUPnPTests/Networking/UPPDiscoverySpec.m index 07a6c74..b5489ab 100644 --- a/CocoaUPnPTests/Networking/UPPDiscoverySpec.m +++ b/CocoaUPnPTests/Networking/UPPDiscoverySpec.m @@ -1,9 +1,12 @@ // CocoaUPnP by A&R Cambridge Ltd, http://www.arcam.co.uk // Copyright 2015 Arcam. See LICENSE file. -#import -#import -#import +@import CocoaUPnP; +@import CocoaUPnP.Private; + +#import +#import +#import @interface UPPDiscovery () @property (strong, nonatomic) NSMutableArray *devices; diff --git a/CocoaUPnPTests/Networking/UPPRequestSerializerSpec.m b/CocoaUPnPTests/Networking/UPPRequestSerializerSpec.m index 6b3a9c2..145b423 100644 --- a/CocoaUPnPTests/Networking/UPPRequestSerializerSpec.m +++ b/CocoaUPnPTests/Networking/UPPRequestSerializerSpec.m @@ -2,6 +2,10 @@ // Copyright 2015 Arcam. See LICENSE file. #import +#import +#import +#import +#import "TestHelpers.h" SpecBegin(UPPRequestSerializer) diff --git a/CocoaUPnPTests/Networking/UPPResponseSerializerSpec.m b/CocoaUPnPTests/Networking/UPPResponseSerializerSpec.m index c7a073a..c704bc0 100644 --- a/CocoaUPnPTests/Networking/UPPResponseSerializerSpec.m +++ b/CocoaUPnPTests/Networking/UPPResponseSerializerSpec.m @@ -1,7 +1,11 @@ // CocoaUPnP by A&R Cambridge Ltd, http://www.arcam.co.uk // Copyright 2015 Arcam. See LICENSE file. +#import #import +#import +#import +#import "TestHelpers.h" SpecBegin(UPPResponseSerializer) diff --git a/CocoaUPnPTests/Networking/UPPSessionManagerSpec.m b/CocoaUPnPTests/Networking/UPPSessionManagerSpec.m index 51bce0c..76458d7 100644 --- a/CocoaUPnPTests/Networking/UPPSessionManagerSpec.m +++ b/CocoaUPnPTests/Networking/UPPSessionManagerSpec.m @@ -2,6 +2,8 @@ // Copyright 2015 Arcam. See LICENSE file. #import +#import +#import SpecBegin(UPPSessionManager) diff --git a/CocoaUPnPTests/Parsers/UPPDeviceParserSpec.m b/CocoaUPnPTests/Parsers/UPPDeviceParserSpec.m index 2fab758..dc460e3 100644 --- a/CocoaUPnPTests/Parsers/UPPDeviceParserSpec.m +++ b/CocoaUPnPTests/Parsers/UPPDeviceParserSpec.m @@ -3,6 +3,9 @@ #import #import +#import +#import +#import "TestHelpers.h" SpecBegin(UPPDeviceParser) diff --git a/CocoaUPnPTests/Parsers/UPPErrorParserSpec.m b/CocoaUPnPTests/Parsers/UPPErrorParserSpec.m index 5e9ddd2..57a72f6 100644 --- a/CocoaUPnPTests/Parsers/UPPErrorParserSpec.m +++ b/CocoaUPnPTests/Parsers/UPPErrorParserSpec.m @@ -2,6 +2,9 @@ // Copyright 2015 Arcam. See LICENSE file. #import +#import +#import +#import "TestHelpers.h" SpecBegin(UPPErrorParser) diff --git a/CocoaUPnPTests/Parsers/UPPLastChangeParserSpec.m b/CocoaUPnPTests/Parsers/UPPLastChangeParserSpec.m index 0c6125b..999968d 100644 --- a/CocoaUPnPTests/Parsers/UPPLastChangeParserSpec.m +++ b/CocoaUPnPTests/Parsers/UPPLastChangeParserSpec.m @@ -1,7 +1,12 @@ // CocoaUPnP by A&R Cambridge Ltd, http://www.arcam.co.uk // Copyright 2015 Arcam. See LICENSE file. -#import +@import CocoaUPnP; +@import CocoaUPnP.Private; + +#import +#import +#import "TestHelpers.h" NSData *(^StubEventWithTransportState)(NSString *) = ^NSData * (NSString *transportState) { diff --git a/CocoaUPnPTests/Parsers/UPPMediaItemParserSpec.m b/CocoaUPnPTests/Parsers/UPPMediaItemParserSpec.m index 268814f..133054a 100644 --- a/CocoaUPnPTests/Parsers/UPPMediaItemParserSpec.m +++ b/CocoaUPnPTests/Parsers/UPPMediaItemParserSpec.m @@ -1,9 +1,11 @@ // CocoaUPnP by A&R Cambridge Ltd, http://www.arcam.co.uk // Copyright 2015 Arcam. See LICENSE file. -#import "Specta.h" +#import +#import #import #import +#import "TestHelpers.h" SpecBegin(UPPMediaItemParser) diff --git a/CocoaUPnPTests/Parsers/UPPResponseParserSpec.m b/CocoaUPnPTests/Parsers/UPPResponseParserSpec.m index cc17173..c435bdd 100644 --- a/CocoaUPnPTests/Parsers/UPPResponseParserSpec.m +++ b/CocoaUPnPTests/Parsers/UPPResponseParserSpec.m @@ -2,6 +2,9 @@ // Copyright 2015 Arcam. See LICENSE file. #import +#import +#import +#import "TestHelpers.h" SpecBegin(UPPResponseParser) diff --git a/CocoaUPnPTests/Protocols/UPPMediaItemProtocolSpec.m b/CocoaUPnPTests/Protocols/UPPMediaItemProtocolSpec.m index d29be81..8144e16 100644 --- a/CocoaUPnPTests/Protocols/UPPMediaItemProtocolSpec.m +++ b/CocoaUPnPTests/Protocols/UPPMediaItemProtocolSpec.m @@ -2,6 +2,10 @@ // Copyright 2015 Arcam. See LICENSE file. #import +#import +#import +#import +#import "TestHelpers.h" SpecBegin(UPPMediaItemProtocol) diff --git a/CocoaUPnPTests/Services/UPPAVTransportServiceSpec.m b/CocoaUPnPTests/Services/UPPAVTransportServiceSpec.m index cc8c50b..907af5e 100644 --- a/CocoaUPnPTests/Services/UPPAVTransportServiceSpec.m +++ b/CocoaUPnPTests/Services/UPPAVTransportServiceSpec.m @@ -4,6 +4,9 @@ #import #import "MockFailSessionManager.h" #import "NetworkTestHelpers.h" +#import +#import +#import SpecBegin(UPPAVTransportService) diff --git a/CocoaUPnPTests/Services/UPPConnectionManagerServiceSpec.m b/CocoaUPnPTests/Services/UPPConnectionManagerServiceSpec.m index 94ac5b9..759fb56 100644 --- a/CocoaUPnPTests/Services/UPPConnectionManagerServiceSpec.m +++ b/CocoaUPnPTests/Services/UPPConnectionManagerServiceSpec.m @@ -4,6 +4,10 @@ #import #import "NetworkTestHelpers.h" #import "MockFailSessionManager.h" +#import +#import +#import "TestHelpers.h" +#import SpecBegin(UPPConnectionManagerService) diff --git a/CocoaUPnPTests/Services/UPPContentDirectoryServiceSpec.m b/CocoaUPnPTests/Services/UPPContentDirectoryServiceSpec.m index 896db28..eab65ae 100644 --- a/CocoaUPnPTests/Services/UPPContentDirectoryServiceSpec.m +++ b/CocoaUPnPTests/Services/UPPContentDirectoryServiceSpec.m @@ -2,6 +2,10 @@ // Copyright 2015 Arcam. See LICENSE file. #import + +#import +#import +#import #import "NetworkTestHelpers.h" SpecBegin(UPPContentDirectoryService) diff --git a/CocoaUPnPTests/Services/UPPRenderingControlServiceSpec.m b/CocoaUPnPTests/Services/UPPRenderingControlServiceSpec.m index bb0bfc6..b430ae7 100644 --- a/CocoaUPnPTests/Services/UPPRenderingControlServiceSpec.m +++ b/CocoaUPnPTests/Services/UPPRenderingControlServiceSpec.m @@ -3,6 +3,10 @@ #import #import "NetworkTestHelpers.h" +#import +#import +#import "TestHelpers.h" +#import SpecBegin(UPPRenderingControlService) diff --git a/CocoaUPnPTests/Test Helpers/MockFailSessionManager.h b/CocoaUPnPTests/Test Helpers/MockFailSessionManager.h index 4a5a54a..5dd7c4f 100644 --- a/CocoaUPnPTests/Test Helpers/MockFailSessionManager.h +++ b/CocoaUPnPTests/Test Helpers/MockFailSessionManager.h @@ -2,6 +2,9 @@ // Copyright 2015 Arcam. See LICENSE file. #import +#import +#import +#import "TestHelpers.h" extern const NSInteger MockFailSessionErrorCode; diff --git a/CocoaUPnPTests/Test Helpers/NetworkTestHelpers.h b/CocoaUPnPTests/Test Helpers/NetworkTestHelpers.h index 8fe021f..e907c8b 100644 --- a/CocoaUPnPTests/Test Helpers/NetworkTestHelpers.h +++ b/CocoaUPnPTests/Test Helpers/NetworkTestHelpers.h @@ -2,7 +2,6 @@ // Copyright 2015 Arcam. See LICENSE file. #import -#import @class UPPParameters; @@ -11,7 +10,7 @@ @return Returns a UPPParamaters object containing `InstanceID: 0`. */ -UPPParameters *(^InstanceParams)(void); +UPPParameters * InstanceParams(void); /** Setup an expectation for a failed network call, and return stubbed error @@ -20,15 +19,15 @@ UPPParameters *(^InstanceParams)(void); @param id The session manager to set the expectation on @param NSString The URL the message is posted to */ -void (^ExpectAndReturnErrorWithParams)(NSDictionary *, id, NSString *); +void ExpectAndReturnErrorWithParams(NSDictionary *params, id sessionManager, NSString *url); /** Setup an expectation for a successful network call, passing in a session manager, a dictionary of parameters, and a URL. */ -void (^ExpectGetWithParams)(id, NSDictionary *, NSString *); +void ExpectGetWithParams(id sessionManager, NSDictionary *params, NSString *url); /** Reject any network call, passing in a session manager and a URL. */ -void (^RejectGetWithURL)(id, NSString *); +void RejectGetWithURL(id sessionManager, NSString *url); diff --git a/CocoaUPnPTests/Test Helpers/NetworkTestHelpers.m b/CocoaUPnPTests/Test Helpers/NetworkTestHelpers.m index 5db519d..a91341d 100644 --- a/CocoaUPnPTests/Test Helpers/NetworkTestHelpers.m +++ b/CocoaUPnPTests/Test Helpers/NetworkTestHelpers.m @@ -3,15 +3,19 @@ #import "NetworkTestHelpers.h" #import +#import +#import -UPPParameters *(^InstanceParams)(void) = ^UPPParameters*(void) { +UPPParameters * InstanceParams(void) +{ return [UPPParameters paramsWithKey:@"InstanceID" value:@"0"]; }; -void (^ExpectAndReturnErrorWithParams)(NSDictionary *, id, NSString *) = ^void (NSDictionary *params, id manager, NSString *url) { +void ExpectAndReturnErrorWithParams(NSDictionary *params, id sessionManager, NSString *url) +{ // This is horrible. Much cleaner in Kiwi with KWCaptureSpy :( - [[[manager expect] + [[[sessionManager expect] andDo:^(NSInvocation *invocation) { void (^failureBlock)(NSURLSessionTask *task, NSError *error); [invocation getArgument:&failureBlock atIndex:6]; @@ -24,14 +28,16 @@ failure:[OCMArg any]]; }; -void (^ExpectGetWithParams)(id, NSDictionary *, NSString *) = ^void(id manager, NSDictionary *params, NSString *url) { - OCMExpect([manager POST:url parameters:params progress:nil success:[OCMArg any] failure:[OCMArg any]]); +void ExpectGetWithParams(id sessionManager, NSDictionary *params, NSString *url) +{ + OCMExpect([sessionManager POST:url parameters:params progress:nil success:[OCMArg any] failure:[OCMArg any]]); }; -void (^RejectGetWithURL)(id, NSString *) = ^void(id manager, NSString *url) { - [[manager reject] POST:url - parameters:[OCMArg any] - progress:nil - success:[OCMArg any] - failure:[OCMArg any]]; +void RejectGetWithURL(id sessionManager, NSString *url) +{ + [[sessionManager reject] POST:url + parameters:[OCMArg any] + progress:nil + success:[OCMArg any] + failure:[OCMArg any]]; }; \ No newline at end of file diff --git a/CocoaUPnPTests/Test Helpers/TestHelpers.h b/CocoaUPnPTests/Test Helpers/TestHelpers.h index 72bea61..64f3054 100644 --- a/CocoaUPnPTests/Test Helpers/TestHelpers.h +++ b/CocoaUPnPTests/Test Helpers/TestHelpers.h @@ -11,4 +11,4 @@ * * @return Returns `NSData` with contents of file */ -NSData *(^LoadDataFromXML)(NSString *, Class); +NSData *LoadDataFromXML(NSString *filename, Class aClass); diff --git a/CocoaUPnPTests/Test Helpers/TestHelpers.m b/CocoaUPnPTests/Test Helpers/TestHelpers.m index 4834945..fb36adf 100644 --- a/CocoaUPnPTests/Test Helpers/TestHelpers.m +++ b/CocoaUPnPTests/Test Helpers/TestHelpers.m @@ -3,9 +3,9 @@ #import "TestHelpers.h" -NSData *(^LoadDataFromXML)(NSString *, Class) = ^NSData *(NSString *fileName, Class class) +NSData *LoadDataFromXML(NSString *filename, Class aClass) { - NSBundle *bundle = [NSBundle bundleForClass:class]; - NSString *filePath = [bundle pathForResource:fileName ofType:@"xml"]; + NSBundle *bundle = [NSBundle bundleForClass:aClass]; + NSString *filePath = [bundle pathForResource:filename ofType:@"xml"]; return [NSData dataWithContentsOfFile:filePath]; };