diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..448e74d6 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,23 @@ +language: objective-c +osx_image: xcode6.4 + +install: + - brew install gcovr + +before_script: + - curl -L -ocast.zip https://redirector.gvt1.com/edgedl/chromecast/sdk/ios/GoogleCastSDK-2.7.1-Release-ios-default.zip + - unzip cast.zip 'GoogleCastSDK-2.7.1-Release/GoogleCast.framework/*' + - mv -v GoogleCastSDK-2.7.1-Release/GoogleCast.framework modules/google-cast/ + - curl -L -ofling.zip https://s3-us-west-1.amazonaws.com/amazon-fling/AmazonFling-SDK.zip + - unzip fling.zip 'ios-sdk/frameworks/*' + - mv -v ios-sdk/frameworks/{AmazonFling,third_party_framework/Bolts}.framework modules/firetv/Frameworks/ + +script: + - xctool -scheme ConnectSDK -configuration Debug -sdk iphonesimulator -IDECustomDerivedDataLocation="out/tests_build" GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=YES GCC_GENERATE_TEST_COVERAGE_FILES=YES test + - xctool -scheme ConnectSDKIntegrationTests -configuration Debug -sdk iphonesimulator -IDECustomDerivedDataLocation="out/integration_tests_build" test + +after_success: + - gcovr --object-directory="out/tests_build/ConnectSDK/Build/Intermediates/ConnectSDK.build/Debug-iphonesimulator/ConnectSDK.build/Objects-normal/i386/" --root=. --xml-pretty --gcov-exclude='.*#(?:\w*Tests|Frameworks)#.*' --print-summary --output="cobertura.xml" + - bash <(curl -s https://codecov.io/bash) -f "cobertura.xml" + +# vim: set sw=2 ts=2 sts=2 diff --git a/CHANGELOG.md b/CHANGELOG.md index fe245773..b9b9af99 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # Connect SDK iOS Changelog +## 1.6.0 -- 09 Sep 2015 + +- Added subtitles support for WebOS, Netcast, DLNA, Chromecast and FireTV +- Supports Android TV devices +- Fixed playing media on Roku 6.2 +- Removed Rewind and FastForward capabilities from Netcast service because they are not supported +- Miscellaneous bug fixes +- [See commits between 1.5.0 and 1.6.0](https://github.com/ConnectSDK/Connect-SDK-iOS/compare/1.5.0...1.6.0) + +[View files at version 1.6.0](https://github.com/ConnectSDK/Connect-SDK-iOS/tree/1.6.0) + ## 1.5.0 -- 09 Jul 2015 - Supports Amazon Fling SDK to play and control media on Fire TV devices diff --git a/ConnectSDK.podspec b/ConnectSDK.podspec index 1220cc89..5913881f 100644 --- a/ConnectSDK.podspec +++ b/ConnectSDK.podspec @@ -10,7 +10,7 @@ Pod::Spec.new do |s| s.name = "ConnectSDK" - s.version = "1.5.0" + s.version = "1.6.0" s.summary = "Connect SDK is an open source framework that connects your mobile apps with multiple TV platforms." s.description = <<-DESC @@ -104,11 +104,14 @@ Pod::Spec.new do |s| end s.subspec 'GoogleCast' do |sp| + cast_dir = "modules/google-cast" + sp.dependency 'ConnectSDK/Core' - sp.source_files = "modules/google-cast/**/*.{h,m}" - sp.private_header_files = "modules/google-cast/**/*_Private.h" + sp.source_files = "#{cast_dir}/**/*.{h,m}" + sp.exclude_files = "#{cast_dir}/*Tests/**/*" + sp.private_header_files = "#{cast_dir}/**/*_Private.h" - cast_version = "2.6.0" + cast_version = "2.7.1" sp.dependency "google-cast-sdk", cast_version sp.framework = "GoogleCast" sp.xcconfig = { diff --git a/ConnectSDK.xcodeproj/project.pbxproj b/ConnectSDK.xcodeproj/project.pbxproj index dbb1fc04..b44099f5 100644 --- a/ConnectSDK.xcodeproj/project.pbxproj +++ b/ConnectSDK.xcodeproj/project.pbxproj @@ -71,6 +71,7 @@ 44758BD01AE7070600EC43A6 /* airplay_playbackinfo_paused.json in Resources */ = {isa = PBXBuildFile; fileRef = 44758BCB1AE7070500EC43A6 /* airplay_playbackinfo_paused.json */; }; 44758BD11AE7070600EC43A6 /* airplay_playbackinfo_playing.json in Resources */ = {isa = PBXBuildFile; fileRef = 44758BCC1AE7070500EC43A6 /* airplay_playbackinfo_playing.json */; }; 44758BD21AE7070600EC43A6 /* airplay_playbackinfo_rewind.json in Resources */ = {isa = PBXBuildFile; fileRef = 44758BCD1AE7070600EC43A6 /* airplay_playbackinfo_rewind.json */; }; + 44789D851B585525001D5098 /* RokuServiceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 44789D841B585525001D5098 /* RokuServiceTests.m */; }; 447F63411B14F35900699843 /* GoogleCast.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4485140C1A02FC3200D66710 /* GoogleCast.framework */; }; 4480857F1A12A7BE00E13938 /* ConnectSDKDefaultPlatformsTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4480857E1A12A7BE00E13938 /* ConnectSDKDefaultPlatformsTests.m */; }; 448085801A12A7BE00E13938 /* libConnectSDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EA61EB1018FE485B00D75696 /* libConnectSDK.a */; }; @@ -119,6 +120,11 @@ 449A371B1B0FE39700E47DAC /* AdSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 44316F071AF2F9BF000FE655 /* AdSupport.framework */; }; 449A371C1B0FE3A500E47DAC /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EA61EBF118FE48EF00D75696 /* MobileCoreServices.framework */; }; 449CC26B1AF9458E0064F2F7 /* ServiceDescriptionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 449CC26A1AF9458E0064F2F7 /* ServiceDescriptionTests.m */; }; + 44A08FFA1B698E170077E87D /* WebAppSessionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 44A08FF91B698E170077E87D /* WebAppSessionTests.m */; }; + 44A08FFC1B698FCB0077E87D /* AirPlayServiceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 44A08FFB1B698FCB0077E87D /* AirPlayServiceTests.m */; }; + 44A090001B6B05850077E87D /* CastWebAppSessionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 44A08FFF1B6B05850077E87D /* CastWebAppSessionTests.m */; }; + 44A090041B6BDDBC0077E87D /* NSObject+FeatureNotSupported_Private.m in Sources */ = {isa = PBXBuildFile; fileRef = 44A090021B6BDDBC0077E87D /* NSObject+FeatureNotSupported_Private.m */; }; + 44A090071B6C07370077E87D /* XCTestCase+Common.m in Sources */ = {isa = PBXBuildFile; fileRef = 44A090061B6C07370077E87D /* XCTestCase+Common.m */; }; 44A0E1A71B3B31DC00ADF95F /* WebOSWebAppSessionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 44A0E1A51B3B2F5C00ADF95F /* WebOSWebAppSessionTests.m */; }; 44A499051B0AD0C1002C94E7 /* FireTVCapabilityMixin.h in Headers */ = {isa = PBXBuildFile; fileRef = 44A499031B0AD0C1002C94E7 /* FireTVCapabilityMixin.h */; settings = {ATTRIBUTES = (Public, ); }; }; 44A499061B0AD0C1002C94E7 /* FireTVCapabilityMixin.m in Sources */ = {isa = PBXBuildFile; fileRef = 44A499041B0AD0C1002C94E7 /* FireTVCapabilityMixin.m */; }; @@ -129,6 +135,9 @@ 44AD91771AFA7F1000C23A71 /* FireTVService.h in Headers */ = {isa = PBXBuildFile; fileRef = 44AD91751AFA7F1000C23A71 /* FireTVService.h */; settings = {ATTRIBUTES = (Public, ); }; }; 44AD91781AFA7F1000C23A71 /* FireTVService.m in Sources */ = {isa = PBXBuildFile; fileRef = 44AD91761AFA7F1000C23A71 /* FireTVService.m */; }; 44B11F521B16827C00F0156C /* OCMStubRecorder+SpectaAsync.m in Sources */ = {isa = PBXBuildFile; fileRef = 44B11F511B16827C00F0156C /* OCMStubRecorder+SpectaAsync.m */; }; + 44B43AF11B5DA99F004083E5 /* MediaInfoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 44B43AF01B5DA99F004083E5 /* MediaInfoTests.m */; }; + 44B43AFC1B6157F6004083E5 /* NSMutableDictionary+NilSafeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 44B43AFB1B6157F6004083E5 /* NSMutableDictionary+NilSafeTests.m */; }; + 44B43AFF1B61A497004083E5 /* CastServiceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 44B43AFE1B61A497004083E5 /* CastServiceTests.m */; }; 44BCC3F61AB77F7D001BCDAA /* XMLWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = 44BCC3F41AB77F7D001BCDAA /* XMLWriter.h */; settings = {ATTRIBUTES = (Public, ); }; }; 44BCC3F71AB77F7D001BCDAA /* XMLWriter.m in Sources */ = {isa = PBXBuildFile; fileRef = 44BCC3F51AB77F7D001BCDAA /* XMLWriter.m */; }; 44C2CC941AB7948300B20E46 /* XMLWriter+ConvenienceMethods.h in Headers */ = {isa = PBXBuildFile; fileRef = 44C2CC921AB7948300B20E46 /* XMLWriter+ConvenienceMethods.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -137,6 +146,9 @@ 44C2CCA21AB7A33500B20E46 /* NSString+Common.m in Sources */ = {isa = PBXBuildFile; fileRef = 44C2CCA01AB7A33500B20E46 /* NSString+Common.m */; }; 44C390121B34DCAE00723388 /* DiscoveryManagerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 44C390111B34DCAE00723388 /* DiscoveryManagerTests.m */; }; 44CF0E1A1B16ACD800B80FEF /* OCMArg+ArgumentCaptor.m in Sources */ = {isa = PBXBuildFile; fileRef = 448B286A1B03DAEA00DFF18F /* OCMArg+ArgumentCaptor.m */; }; + 44D0ECEC1B55D8FC00E02A8B /* SubtitleInfoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 44D0ECEB1B55D8FC00E02A8B /* SubtitleInfoTests.m */; }; + 44D0ECEF1B55DA9000E02A8B /* SubtitleInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 44D0ECED1B55DA9000E02A8B /* SubtitleInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 44D0ECF01B55DA9000E02A8B /* SubtitleInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 44D0ECEE1B55DA9000E02A8B /* SubtitleInfo.m */; }; 44D88F891A71C4A8009D9608 /* ssdp_device_description_chromecast.xml in Resources */ = {isa = PBXBuildFile; fileRef = 44D88F7A1A71C4A8009D9608 /* ssdp_device_description_chromecast.xml */; }; 44D88F8A1A71C4A8009D9608 /* ssdp_device_description_firetv.xml in Resources */ = {isa = PBXBuildFile; fileRef = 44D88F7B1A71C4A8009D9608 /* ssdp_device_description_firetv.xml */; }; 44D88F8B1A71C4A8009D9608 /* ssdp_device_description_roku2.xml in Resources */ = {isa = PBXBuildFile; fileRef = 44D88F7C1A71C4A8009D9608 /* ssdp_device_description_roku2.xml */; }; @@ -168,6 +180,9 @@ 44EF61981A12E1C800CF344C /* MediaAccessibility.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 44EF61971A12E1C800CF344C /* MediaAccessibility.framework */; }; 44EF619B1A12E23200CF344C /* libicucore.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 44EF619A1A12E23200CF344C /* libicucore.dylib */; }; 44EF61A41A12FC8800CF344C /* SSDPDiscoveryProviderTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 44EF61A31A12FC8800CF344C /* SSDPDiscoveryProviderTests.m */; }; + B2FA88C0C2447C5CAF1E61A4 /* NSMutableDictionary+NilSafe.h in Headers */ = {isa = PBXBuildFile; fileRef = B2FA8E8AF8F4302A1B5541EA /* NSMutableDictionary+NilSafe.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B2FA8A641C2CBEAFB9CF9097 /* NSMutableDictionary+NilSafe.m in Sources */ = {isa = PBXBuildFile; fileRef = B2FA850A1C2BA371738A19B6 /* NSMutableDictionary+NilSafe.m */; }; + B2FA8F2EAE3B0B60D75F9647 /* CapabilityConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = B2FA8C3DF809E5088781B765 /* CapabilityConstants.m */; }; BB9F706B1155B806AFBF3336 /* DLNAHTTPServer.m in Sources */ = {isa = PBXBuildFile; fileRef = BB9F703F509283F37E26C0B4 /* DLNAHTTPServer.m */; }; BB9F712900733DE480F64D8E /* DLNAHTTPServer.h in Headers */ = {isa = PBXBuildFile; fileRef = BB9F7271D17DCAE1C615A59A /* DLNAHTTPServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; BB9F726F85973936620CDADD /* MediaInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = BB9F735CB760F4387DDA84B4 /* MediaInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -429,8 +444,11 @@ 44758BCB1AE7070500EC43A6 /* airplay_playbackinfo_paused.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = airplay_playbackinfo_paused.json; sourceTree = ""; }; 44758BCC1AE7070500EC43A6 /* airplay_playbackinfo_playing.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = airplay_playbackinfo_playing.json; sourceTree = ""; }; 44758BCD1AE7070600EC43A6 /* airplay_playbackinfo_rewind.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = airplay_playbackinfo_rewind.json; sourceTree = ""; }; + 44789D841B585525001D5098 /* RokuServiceTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RokuServiceTests.m; sourceTree = ""; }; + 44789D861B5858D2001D5098 /* RokuService_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RokuService_Private.h; sourceTree = ""; }; 447F63431B14FDC600699843 /* DLNAServiceAcceptanceTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DLNAServiceAcceptanceTests.m; sourceTree = ""; }; 447F63451B15000800699843 /* ConnectSDKIntegrationTests-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "ConnectSDKIntegrationTests-Prefix.pch"; sourceTree = ""; }; + 447F93B91B714E8B005703EA /* WebOSTVService_Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WebOSTVService_Private.h; sourceTree = ""; }; 4480857A1A12A7BE00E13938 /* ConnectSDKTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ConnectSDKTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 4480857E1A12A7BE00E13938 /* ConnectSDKDefaultPlatformsTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ConnectSDKDefaultPlatformsTests.m; sourceTree = ""; }; 448414F71AEB27F400124EE9 /* OCMStubRecorder+XCTestExpectation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "OCMStubRecorder+XCTestExpectation.h"; sourceTree = ""; }; @@ -476,6 +494,14 @@ 449A37101B0FE03400E47DAC /* Expecta.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Expecta.framework; sourceTree = ""; }; 449A37111B0FE03400E47DAC /* Specta.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Specta.framework; sourceTree = ""; }; 449CC26A1AF9458E0064F2F7 /* ServiceDescriptionTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ServiceDescriptionTests.m; sourceTree = ""; }; + 44A08FF91B698E170077E87D /* WebAppSessionTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WebAppSessionTests.m; sourceTree = ""; }; + 44A08FFB1B698FCB0077E87D /* AirPlayServiceTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AirPlayServiceTests.m; sourceTree = ""; }; + 44A08FFD1B6991CC0077E87D /* AirPlayService_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AirPlayService_Private.h; sourceTree = ""; }; + 44A08FFF1B6B05850077E87D /* CastWebAppSessionTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CastWebAppSessionTests.m; sourceTree = ""; }; + 44A090011B6BDDBC0077E87D /* NSObject+FeatureNotSupported_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+FeatureNotSupported_Private.h"; sourceTree = ""; }; + 44A090021B6BDDBC0077E87D /* NSObject+FeatureNotSupported_Private.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+FeatureNotSupported_Private.m"; sourceTree = ""; }; + 44A090051B6C07370077E87D /* XCTestCase+Common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "XCTestCase+Common.h"; sourceTree = ""; }; + 44A090061B6C07370077E87D /* XCTestCase+Common.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "XCTestCase+Common.m"; sourceTree = ""; }; 44A0E1A51B3B2F5C00ADF95F /* WebOSWebAppSessionTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WebOSWebAppSessionTests.m; sourceTree = ""; }; 44A499031B0AD0C1002C94E7 /* FireTVCapabilityMixin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FireTVCapabilityMixin.h; sourceTree = ""; }; 44A499041B0AD0C1002C94E7 /* FireTVCapabilityMixin.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FireTVCapabilityMixin.m; sourceTree = ""; }; @@ -488,6 +514,10 @@ 44AD91761AFA7F1000C23A71 /* FireTVService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FireTVService.m; sourceTree = ""; }; 44B11F501B16827C00F0156C /* OCMStubRecorder+SpectaAsync.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "OCMStubRecorder+SpectaAsync.h"; sourceTree = ""; }; 44B11F511B16827C00F0156C /* OCMStubRecorder+SpectaAsync.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "OCMStubRecorder+SpectaAsync.m"; sourceTree = ""; }; + 44B43AF01B5DA99F004083E5 /* MediaInfoTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MediaInfoTests.m; sourceTree = ""; }; + 44B43AFB1B6157F6004083E5 /* NSMutableDictionary+NilSafeTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSMutableDictionary+NilSafeTests.m"; sourceTree = ""; }; + 44B43AFE1B61A497004083E5 /* CastServiceTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CastServiceTests.m; sourceTree = ""; }; + 44B43B001B62B6AC004083E5 /* CastService_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CastService_Private.h; sourceTree = ""; }; 44B4C5B71B0E96E80024F229 /* FireTVAcceptanceTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FireTVAcceptanceTests.m; sourceTree = ""; }; 44BCC3F41AB77F7D001BCDAA /* XMLWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XMLWriter.h; sourceTree = ""; }; 44BCC3F51AB77F7D001BCDAA /* XMLWriter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XMLWriter.m; sourceTree = ""; }; @@ -497,6 +527,9 @@ 44C2CCA01AB7A33500B20E46 /* NSString+Common.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+Common.m"; sourceTree = ""; }; 44C3900E1B34A7B500723388 /* WebOSWebAppSession_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebOSWebAppSession_Private.h; sourceTree = ""; }; 44C390111B34DCAE00723388 /* DiscoveryManagerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DiscoveryManagerTests.m; sourceTree = ""; }; + 44D0ECEB1B55D8FC00E02A8B /* SubtitleInfoTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SubtitleInfoTests.m; sourceTree = ""; }; + 44D0ECED1B55DA9000E02A8B /* SubtitleInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SubtitleInfo.h; sourceTree = ""; }; + 44D0ECEE1B55DA9000E02A8B /* SubtitleInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SubtitleInfo.m; sourceTree = ""; }; 44D2ACD21B30B07700CE4A3A /* DiscoveryManager_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DiscoveryManager_Private.h; sourceTree = ""; }; 44D88F7A1A71C4A8009D9608 /* ssdp_device_description_chromecast.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = ssdp_device_description_chromecast.xml; sourceTree = ""; }; 44D88F7B1A71C4A8009D9608 /* ssdp_device_description_firetv.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = ssdp_device_description_firetv.xml; sourceTree = ""; }; @@ -529,6 +562,9 @@ 44EF61971A12E1C800CF344C /* MediaAccessibility.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MediaAccessibility.framework; path = System/Library/Frameworks/MediaAccessibility.framework; sourceTree = SDKROOT; }; 44EF619A1A12E23200CF344C /* libicucore.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libicucore.dylib; path = usr/lib/libicucore.dylib; sourceTree = SDKROOT; }; 44EF61A31A12FC8800CF344C /* SSDPDiscoveryProviderTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SSDPDiscoveryProviderTests.m; sourceTree = ""; }; + B2FA850A1C2BA371738A19B6 /* NSMutableDictionary+NilSafe.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSMutableDictionary+NilSafe.m"; sourceTree = ""; }; + B2FA8C3DF809E5088781B765 /* CapabilityConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CapabilityConstants.m; sourceTree = ""; }; + B2FA8E8AF8F4302A1B5541EA /* NSMutableDictionary+NilSafe.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSMutableDictionary+NilSafe.h"; sourceTree = ""; }; BB9F703F509283F37E26C0B4 /* DLNAHTTPServer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DLNAHTTPServer.m; sourceTree = ""; }; BB9F71B68553DCA74ED1C43E /* ImageInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageInfo.h; sourceTree = ""; }; BB9F7271D17DCAE1C615A59A /* DLNAHTTPServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DLNAHTTPServer.h; sourceTree = ""; }; @@ -888,8 +924,10 @@ 449CC2691AF945800064F2F7 /* Config */, 4433F3DD1A421733008D9A04 /* Helpers */, 44A0E1A41B3B2F5C00ADF95F /* Sessions */, + 44A08FFB1B698FCB0077E87D /* AirPlayServiceTests.m */, 4498D9911A65B69F008C0B72 /* DLNAServiceTests.m */, 44A5518E1AC1DF4C001AF783 /* NetcastTVServiceTests.m */, + 44789D841B585525001D5098 /* RokuServiceTests.m */, 44A551981AC338E0001AF783 /* WebOSTVServiceTests.m */, 4498D9A61A661500008C0B72 /* upnperror_response_sonos.xml */, 4498D9A41A66148F008C0B72 /* upnperror_response_xbox.xml */, @@ -939,6 +977,8 @@ 448414F81AEB27F400124EE9 /* OCMStubRecorder+XCTestExpectation.m */, 44D8F7D81AB27B4800559FE3 /* NSInvocation+ObjectGetter.h */, 44D8F7D91AB27B4800559FE3 /* NSInvocation+ObjectGetter.m */, + 44A090051B6C07370077E87D /* XCTestCase+Common.h */, + 44A090061B6C07370077E87D /* XCTestCase+Common.m */, 4480857E1A12A7BE00E13938 /* ConnectSDKDefaultPlatformsTests.m */, 44EF61A11A12FC5000CF344C /* Discovery */, 4498D98E1A65A1B7008C0B72 /* Helpers */, @@ -998,8 +1038,11 @@ children = ( 449426311AF82F75006BAFF2 /* BlockRunner */, 44D90AA81B06AA9E00A5CF2A /* AppStateChangeNotifierTests.m */, + 44B43AF01B5DA99F004083E5 /* MediaInfoTests.m */, 4498D98F1A65A1D7008C0B72 /* NSDictionary+KeyPredicateSearchTests.m */, + 44B43AFB1B6157F6004083E5 /* NSMutableDictionary+NilSafeTests.m */, 441C9EFE1B3DD8C500F912D5 /* SubscriptionDeduplicatorTests.m */, + 44D0ECEB1B55D8FC00E02A8B /* SubtitleInfoTests.m */, ); path = Helpers; sourceTree = ""; @@ -1055,10 +1098,20 @@ isa = PBXGroup; children = ( 44A0E1A51B3B2F5C00ADF95F /* WebOSWebAppSessionTests.m */, + 44A08FF91B698E170077E87D /* WebAppSessionTests.m */, ); path = Sessions; sourceTree = ""; }; + 44B43AFD1B61A46A004083E5 /* GoogleCastTests */ = { + isa = PBXGroup; + children = ( + 44B43AFE1B61A497004083E5 /* CastServiceTests.m */, + 44A08FFF1B6B05850077E87D /* CastWebAppSessionTests.m */, + ); + path = GoogleCastTests; + sourceTree = ""; + }; 44BCC3F31AB77F7D001BCDAA /* xswi */ = { isa = PBXGroup; children = ( @@ -1401,6 +1454,8 @@ 0F446CC81A6D924D000BB1C0 /* MediaLaunchObject.m */, 4498D98A1A659F43008C0B72 /* NSDictionary+KeyPredicateSearch.h */, 4498D98B1A659F43008C0B72 /* NSDictionary+KeyPredicateSearch.m */, + B2FA8E8AF8F4302A1B5541EA /* NSMutableDictionary+NilSafe.h */, + B2FA850A1C2BA371738A19B6 /* NSMutableDictionary+NilSafe.m */, 44C2CC9F1AB7A33500B20E46 /* NSString+Common.h */, 44C2CCA01AB7A33500B20E46 /* NSString+Common.m */, 44A5519D1AC36672001AF783 /* CommonMacros.h */, @@ -1408,6 +1463,8 @@ 44D90AAB1B06B26C00A5CF2A /* AppStateChangeNotifier.m */, 441C9ED31B3DBCB200F912D5 /* SubscriptionDeduplicator.h */, 441C9ED41B3DBCB200F912D5 /* SubscriptionDeduplicator.m */, + 44D0ECED1B55DA9000E02A8B /* SubtitleInfo.h */, + 44D0ECEE1B55DA9000E02A8B /* SubtitleInfo.m */, ); path = Helpers; sourceTree = ""; @@ -1416,6 +1473,7 @@ isa = PBXGroup; children = ( EA5FB817199AEC550057B4B4 /* AirPlayService.h */, + 44A08FFD1B6991CC0077E87D /* AirPlayService_Private.h */, EA5FB818199AEC550057B4B4 /* AirPlayService.m */, EA5FB819199AEC550057B4B4 /* Capabilities */, EA5FB827199AEC550057B4B4 /* Commands */, @@ -1433,9 +1491,11 @@ 44A5518B1AC1D924001AF783 /* NetcastTVService_Private.h */, EA5FB84A199AEC550057B4B4 /* NetcastTVService.m */, EA5FB84B199AEC550057B4B4 /* RokuService.h */, + 44789D861B5858D2001D5098 /* RokuService_Private.h */, EA5FB84C199AEC550057B4B4 /* RokuService.m */, EA5FB84D199AEC550057B4B4 /* Sessions */, EA5FB857199AEC550057B4B4 /* WebOSTVService.h */, + 447F93B91B714E8B005703EA /* WebOSTVService_Private.h */, EA5FB858199AEC550057B4B4 /* WebOSTVService.m */, ); path = Services; @@ -1445,6 +1505,7 @@ isa = PBXGroup; children = ( EA5FB81A199AEC550057B4B4 /* Capability.h */, + B2FA8C3DF809E5088781B765 /* CapabilityConstants.m */, EA5FB81B199AEC550057B4B4 /* ExternalInputControl.h */, EA5FB81C199AEC550057B4B4 /* KeyControl.h */, EA5FB81D199AEC550057B4B4 /* Launcher.h */, @@ -1502,6 +1563,8 @@ 443063C01A4210F0007779DA /* AirPlayServiceHTTPKeepAlive.m */, EA5FB843199AEC550057B4B4 /* AirPlayServiceMirrored.h */, EA5FB844199AEC550057B4B4 /* AirPlayServiceMirrored.m */, + 44A090011B6BDDBC0077E87D /* NSObject+FeatureNotSupported_Private.h */, + 44A090021B6BDDBC0077E87D /* NSObject+FeatureNotSupported_Private.m */, EA5FB845199AEC550057B4B4 /* WebOSTVServiceMouse.h */, EA5FB846199AEC550057B4B4 /* WebOSTVServiceMouse.m */, EA5FB847199AEC550057B4B4 /* WebOSTVServiceSocketClient.h */, @@ -1545,10 +1608,12 @@ EA5FB85A199AEC550057B4B4 /* google-cast */ = { isa = PBXGroup; children = ( + 44B43AFD1B61A46A004083E5 /* GoogleCastTests */, 4485140C1A02FC3200D66710 /* GoogleCast.framework */, EA5FB85C199AEC550057B4B4 /* CastDiscoveryProvider.h */, EA5FB85D199AEC550057B4B4 /* CastDiscoveryProvider.m */, EA5FB85E199AEC550057B4B4 /* CastService.h */, + 44B43B001B62B6AC004083E5 /* CastService_Private.h */, EA5FB85F199AEC550057B4B4 /* CastService.m */, EA5FB860199AEC550057B4B4 /* CastServiceChannel.h */, EA5FB861199AEC550057B4B4 /* CastServiceChannel.m */, @@ -1693,6 +1758,7 @@ 4494263E1AF83588006BAFF2 /* DispatchQueueBlockRunner.h in Headers */, EA5FB87C199AEC550057B4B4 /* DiscoveryProvider.h in Headers */, EA5FB8C7199AEC560057B4B4 /* JSONObjectCoding.h in Headers */, + 44D0ECEF1B55DA9000E02A8B /* SubtitleInfo.h in Headers */, EA5FB8F8199AEC570057B4B4 /* WebOSTVServiceMouse.h in Headers */, EA5FB8A5199AEC560057B4B4 /* GCDWebServerDataRequest.h in Headers */, EA5FB886199AEC560057B4B4 /* CTASIDataCompressor.h in Headers */, @@ -1722,6 +1788,7 @@ 448B28761B041A5600DFF18F /* FireTVMediaControl.h in Headers */, BB9F7AD33329FD4AC66C2D12 /* ImageInfo.h in Headers */, BB9F712900733DE480F64D8E /* DLNAHTTPServer.h in Headers */, + B2FA88C0C2447C5CAF1E61A4 /* NSMutableDictionary+NilSafe.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1951,28 +2018,37 @@ 449426351AF83055006BAFF2 /* SynchronousBlockRunnerTests.m in Sources */, 4433F3DF1A421750008D9A04 /* AirPlayServiceHTTPKeepAliveTests.m in Sources */, 44A551991AC338E0001AF783 /* WebOSTVServiceTests.m in Sources */, + 44B43AFF1B61A497004083E5 /* CastServiceTests.m in Sources */, 448B28701B041A3B00DFF18F /* FireTVMediaPlayerTests.m in Sources */, + 44B43AF11B5DA99F004083E5 /* MediaInfoTests.m in Sources */, 449426331AF82F8E006BAFF2 /* BlockRunnerTests.m in Sources */, 4494263B1AF8353A006BAFF2 /* DispatchQueueBlockRunnerTests.m in Sources */, 44D8F7DA1AB27B4800559FE3 /* NSInvocation+ObjectGetter.m in Sources */, 449CC26B1AF9458E0064F2F7 /* ServiceDescriptionTests.m in Sources */, 444287CA1B055E0C00B1F875 /* XCTestCase+TaskTests.m in Sources */, + 44A08FFC1B698FCB0077E87D /* AirPlayServiceTests.m in Sources */, 448B286F1B041A3A00DFF18F /* FireTVMediaControlTests.m in Sources */, 448B286B1B03DAEA00DFF18F /* OCMArg+ArgumentCaptor.m in Sources */, 44291C521A68B4C000280E5C /* SSDPDiscoveryProvider_FilteringTests.m in Sources */, 4480857F1A12A7BE00E13938 /* ConnectSDKDefaultPlatformsTests.m in Sources */, 44316F021AF2F09B000FE655 /* FireTVDiscoveryProviderTests.m in Sources */, + 44789D851B585525001D5098 /* RokuServiceTests.m in Sources */, 4498D9A91A66F027008C0B72 /* DLNAHTTPServerTests.m in Sources */, 448F36C51A1BD64200536649 /* ZeroConfDiscoveryProviderTests.m in Sources */, 441C9EFF1B3DD8C500F912D5 /* SubscriptionDeduplicatorTests.m in Sources */, 4498D9921A65B69F008C0B72 /* DLNAServiceTests.m in Sources */, + 44A090001B6B05850077E87D /* CastWebAppSessionTests.m in Sources */, 44758BBB1AE6C06200EC43A6 /* AirPlayServiceHTTPTests.m in Sources */, 44AD91741AF9A02300C23A71 /* FireTVServiceTests.m in Sources */, 440A031D1A854EDE0007E3D3 /* WebOSTVServiceSocketClientTests.m in Sources */, 448414F91AEB27F400124EE9 /* OCMStubRecorder+XCTestExpectation.m in Sources */, + 44B43AFC1B6157F6004083E5 /* NSMutableDictionary+NilSafeTests.m in Sources */, 44D90AA91B06AA9E00A5CF2A /* AppStateChangeNotifierTests.m in Sources */, + 44A08FFA1B698E170077E87D /* WebAppSessionTests.m in Sources */, 44A5518F1AC1DF4C001AF783 /* NetcastTVServiceTests.m in Sources */, + 44D0ECEC1B55D8FC00E02A8B /* SubtitleInfoTests.m in Sources */, 4498D9901A65A1D7008C0B72 /* NSDictionary+KeyPredicateSearchTests.m in Sources */, + 44A090071B6C07370077E87D /* XCTestCase+Common.m in Sources */, 44A0E1A71B3B31DC00ADF95F /* WebOSWebAppSessionTests.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -2010,7 +2086,9 @@ EA5FB8E3199AEC560057B4B4 /* ServiceSubscription.m in Sources */, EA5FB8F9199AEC570057B4B4 /* WebOSTVServiceMouse.m in Sources */, EA5FB88B199AEC560057B4B4 /* CTASIDownloadCache.m in Sources */, + 44A090041B6BDDBC0077E87D /* NSObject+FeatureNotSupported_Private.m in Sources */, EA5FB878199AEC550057B4B4 /* CapabilityFilter.m in Sources */, + 44D0ECF01B55DA9000E02A8B /* SubtitleInfo.m in Sources */, EA5FB8F3199AEC570057B4B4 /* DLNAService.m in Sources */, EA5FB8B8199AEC560057B4B4 /* LGSRWebSocket.m in Sources */, 44AD91781AFA7F1000C23A71 /* FireTVService.m in Sources */, @@ -2078,6 +2156,8 @@ BB9F7B7905ABBE72E0843AA0 /* MediaInfo.m in Sources */, BB9F776F4924E08D116738B1 /* ImageInfo.m in Sources */, BB9F706B1155B806AFBF3336 /* DLNAHTTPServer.m in Sources */, + B2FA8F2EAE3B0B60D75F9647 /* CapabilityConstants.m in Sources */, + B2FA8A641C2CBEAFB9CF9097 /* NSMutableDictionary+NilSafe.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2415,6 +2495,7 @@ ALWAYS_SEARCH_USER_PATHS = YES; COPY_PHASE_STRIP = NO; DEAD_CODE_STRIPPING = NO; + DEPLOYMENT_POSTPROCESSING = YES; DSTROOT = /tmp/Connect_SDK.dst; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", @@ -2422,6 +2503,7 @@ "$(PROJECT_DIR)/modules/google-cast", "$(PROJECT_DIR)/modules/firetv/Frameworks", ); + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "core/ConnectSDK-Prefix.pch"; GCC_WARN_ABOUT_MISSING_NEWLINE = YES; diff --git a/README.md b/README.md index dbe654d5..d73b1589 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,12 @@ #Connect SDK iOS + +[![Build Status](https://travis-ci.org/ConnectSDK/Connect-SDK-iOS.svg)](https://travis-ci.org/ConnectSDK/Connect-SDK-iOS) +[![Code Coverage](https://img.shields.io/codecov/c/github/ConnectSDK/Connect-SDK-iOS/dev.svg)](https://codecov.io/github/ConnectSDK/Connect-SDK-iOS) +[![CocoaPods Compatible](https://img.shields.io/cocoapods/v/ConnectSDK.svg)](https://cocoapods.org/pods/ConnectSDK) +[![Apache License, 2.0](https://img.shields.io/cocoapods/l/ConnectSDK.svg)](https://github.com/ConnectSDK/Connect-SDK-iOS/blob/master/LICENSE) +[![Platform: iOS](https://img.shields.io/cocoapods/p/ConnectSDK.svg)](http://cocoadocs.org/docsets/ConnectSDK/) +[![Twitter: @ConnectSDK](https://img.shields.io/badge/twitter-@ConnectSDK-blue.svg)](https://twitter.com/ConnectSDK) + Connect SDK is an open source framework that connects your mobile apps with multiple TV platforms. Because most TV platforms support a variety of protocols, Connect SDK integrates and abstracts the discovery and connectivity between all supported protocols. For more information, visit our [website](http://www.connectsdk.com/). @@ -16,7 +24,7 @@ This project has the following dependencies, some of which require manual setup. * Automatic Reference Counting (ARC) * [Connect-SDK-iOS-Core](https://github.com/ConnectSDK/Connect-SDK-iOS-Core) submodule * [Connect-SDK-iOS-Google-Cast](https://github.com/ConnectSDK/Connect-SDK-iOS-Google-Cast) submodule - - Requires [`GoogleCast.framework`](https://developers.google.com/cast/docs/downloads) + - Requires [`GoogleCast.framework`](https://developers.google.com/cast/docs/developers#libraries) * [Connect-SDK-iOS-FireTV](https://github.com/ConnectSDK/Connect-SDK-iOS-FireTV) submodule - Requires [`AmazonFling.framework`](https://developer.amazon.com/public/apis/experience/fling/docs/amazon-fling-sdk-download) @@ -72,6 +80,16 @@ The required third-party test frameworks are already pre-built and included in t All of the test targets are compiled when the main `ConnectSDK` scheme is built, but only the unit tests are setup to run when testing the scheme. The other tests can be run by selecting the corresponding scheme. +##Limitations/Caveats + +###Subtitles + +- DLNA service supports `SRT` format only. Since there is no official specification for them, subtitles may not work on all DLNA-compatible devices. This feature has been tested and works on LG WebOS and Netcast TVs. +- Netcast service supports `SRT` format only, through DLNA. +- Google Cast service supports `WebVTT` format only. Servers providing subtitles and media files should support [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing) headers (unless they are of the same origin). The simplest change is to send this HTTP response header for your files: `Access-Control-Allow-Origin: *`. More information is here: [https://developers.google.com/cast/docs/ios_sender#cors-requirements](https://developers.google.com/cast/docs/ios_sender#cors-requirements). +- FireTV service supports `WebVTT` format only. Subtitles on Fire TV are hidden by default. To display them, the user should manually pick one in the media player (click the "Options" button on the remote). The Fling SDK doesn't provide any way to make them appear remotely. +- WebOS service supports `WebVTT` format only. Server providing subtitles should support CORS headers, similarly to Cast service's requirements. + ##Contact - Twitter: [@ConnectSDK](https://twitter.com/ConnectSDK) - Ask a question on Stack Overflow with the [Connect-SDK tag](https://stackoverflow.com/tags/connect-sdk) (or [TV tag](https://stackoverflow.com/tags/tv)) diff --git a/core b/core index b2f1c6ba..894c28c8 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit b2f1c6ba26ce65115e95e9d9d0957a47462e1271 +Subproject commit 894c28c8c4386e0c750b950bff549d00c7c4d8b1 diff --git a/modules/firetv b/modules/firetv index 51c3d136..13aefc3e 160000 --- a/modules/firetv +++ b/modules/firetv @@ -1 +1 @@ -Subproject commit 51c3d1367cc9a77af794107bbf280c2e42701a54 +Subproject commit 13aefc3e09fe29ea5d3998d8b28c6d9962834c46 diff --git a/modules/google-cast b/modules/google-cast index d444a4f3..cfd489e9 160000 --- a/modules/google-cast +++ b/modules/google-cast @@ -1 +1 @@ -Subproject commit d444a4f36b53839c05a3ac541ef033eb55744502 +Subproject commit cfd489e9bb1178be16a178e8541ab7a344afe882