{"action":"created","comment":{"url":"https://api.github.com/repos/smartdevicelink/sdl_ios/pulls/comments/210906117","pull_request_review_id":147221626,"id":210906117,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIxMDkwNjExNw==","diff_hunk":"@@ -0,0 +1,806 @@\n+//\n+//  SDLSecondaryTransportManager.m\n+//  SmartDeviceLink\n+//\n+//  Created by Sho Amano on 2018/02/28.\n+//  Copyright © 2018 Xevo Inc. All rights reserved.\n+//\n+\n+#import <Foundation/Foundation.h>\n+#import <UIKit/UIKit.h>\n+\n+#import \"SDLSecondaryTransportManager.h\"\n+\n+#import \"SDLControlFramePayloadConstants.h\"\n+#import \"SDLControlFramePayloadRPCStartServiceAck.h\"\n+#import \"SDLControlFramePayloadTransportEventUpdate.h\"\n+#import \"SDLIAPTransport.h\"\n+#import \"SDLLogMacros.h\"\n+#import \"SDLNotificationConstants.h\"\n+#import \"SDLProtocol.h\"\n+#import \"SDLProtocolHeader.h\"\n+#import \"SDLProtocolMessage.h\"\n+#import \"SDLSecondaryTransportManagerConstants.h\"\n+#import \"SDLStateMachine.h\"\n+#import \"SDLTCPTransport.h\"\n+#import \"SDLTimer.h\"\n+\n+NS_ASSUME_NONNULL_BEGIN\n+\n+// same as SDLProtocol.m\n+typedef NSNumber SDLServiceTypeBox;\n+\n+typedef NS_ENUM(NSInteger, SDLTransportClass) {\n+    SDLTransportClassInvalid = 0,\n+    SDLTransportClassPrimary = 1,\n+    SDLTransportClassSecondary = 2,\n+};\n+typedef NSNumber SDLTransportClassBox;\n+\n+typedef NS_ENUM(NSInteger, SDLTransportSelection) {\n+    SDLTransportSelectionDisabled,   // only for Secondary Transport\n+    SDLTransportSelectionIAP,\n+    SDLTransportSelectionTCP\n+};\n+typedef NSNumber SDLTransportSelectionBox;\n+\n+SDLSecondaryTransportState *const SDLSecondaryTransportStateStopped = @\"Stopped\";\n+SDLSecondaryTransportState *const SDLSecondaryTransportStateStarted = @\"Started\";\n+SDLSecondaryTransportState *const SDLSecondaryTransportStateConfigured = @\"Configured\";\n+SDLSecondaryTransportState *const SDLSecondaryTransportStateConnecting = @\"Connecting\";\n+SDLSecondaryTransportState *const SDLSecondaryTransportStateRegistered = @\"Registered\";\n+SDLSecondaryTransportState *const SDLSecondaryTransportStateReconnecting = @\"Reconnecting\";\n+\n+/// Timeout for receiving Register Secondary Transport ACK frame\n+static const float RegisterTransportTime = 10.0;\n+\n+/// Delay to retry connection after secondary transport is disconnected or registration is failed\n+static const float RetryConnectionDelay = 15.0;\n+\n+\n+/// An internal class to receive event from primary transport.\n+@interface PrimaryProtocolListener : NSObject <SDLProtocolListener>\n+\n+@property (weak, nonatomic) SDLProtocol *primaryProtocol;\n+@property (copy, nonatomic) SDLProtocolHeader *primaryRPCHeader;\n+\n+@end\n+\n+@implementation PrimaryProtocolListener\n+\n+- (instancetype)initWithProtocol:(SDLProtocol *)primaryProtocol {\n+    self = [super init];\n+    if (!self) {\n+        return nil;\n+    }\n+\n+    _primaryProtocol = primaryProtocol;\n+\n+    return self;\n+}\n+\n+- (void)start {\n+    @synchronized(self.primaryProtocol.protocolDelegateTable) {\n+        [self.primaryProtocol.protocolDelegateTable addObject:self];\n+    }\n+}\n+\n+- (void)stop {\n+    @synchronized(self.primaryProtocol.protocolDelegateTable) {\n+        [self.primaryProtocol.protocolDelegateTable removeObject:self];\n+    }\n+}\n+\n+// called from protocol's _reeiveQueue of Primary Transport\n+- (void)handleProtocolStartServiceACKMessage:(SDLProtocolMessage *)startServiceACK {\n+    if (startServiceACK.header.serviceType != SDLServiceTypeRPC) {\n+        return;\n+    }\n+\n+    SDLLogV(@\"Received Start Service ACK header of RPC service on primary transport\");\n+\n+    // keep header to acquire Session ID\n+    self.primaryRPCHeader = startServiceACK.header;\n+\n+    SDLControlFramePayloadRPCStartServiceAck *payload = [[SDLControlFramePayloadRPCStartServiceAck alloc] initWithData:startServiceACK.payload];\n+\n+    NSDictionary<NSString *, id> *userInfo = @{SDLNotificationUserInfoObject: payload};\n+    [[NSNotificationCenter defaultCenter] postNotificationName:SDLStartSecondaryTransportManagerNotification object:self userInfo:userInfo];\n+}\n+\n+// called from protocol's _reeiveQueue of Primary Transport\n+- (void)handleTransportEventUpdateMessage:(SDLProtocolMessage *)transportEventUpdate {\n+\n+    SDLControlFramePayloadTransportEventUpdate *payload = [[SDLControlFramePayloadTransportEventUpdate alloc] initWithData:transportEventUpdate.payload];\n+    SDLLogV(@\"Transport Config Update: %@\", payload);\n+\n+    NSDictionary<NSString *, id> *userInfo = @{SDLNotificationUserInfoObject: payload};\n+    [[NSNotificationCenter defaultCenter] postNotificationName:SDLTransportEventUpdateNotification object:self userInfo:userInfo];\n+}\n+\n+@end\n+\n+@interface SDLSecondaryTransportManager ()\n+\n+/// state of this manager\n+@property (strong, nonatomic, readwrite) SDLStateMachine *stateMachine;\n+/// dedicated queue that the state machine will run on\n+@property (copy, nonatomic) dispatch_queue_t stateMachineQueue;","path":"SmartDeviceLink/SDLSecondaryTransportManager.m","position":null,"original_position":128,"commit_id":"b32fac3ea910101e1856f927bd573bdf0fdfe4f2","original_commit_id":"054a6c906544c1efc545e41c3871aaa8fa66b99f","user":{"login":"shoamano83","id":26382896,"node_id":"MDQ6VXNlcjI2MzgyODk2","avatar_url":"https://avatars1.githubusercontent.com/u/26382896?v=4","gravatar_id":"","url":"https://api.github.com/users/shoamano83","html_url":"https://github.com/shoamano83","followers_url":"https://api.github.com/users/shoamano83/followers","following_url":"https://api.github.com/users/shoamano83/following{/other_user}","gists_url":"https://api.github.com/users/shoamano83/gists{/gist_id}","starred_url":"https://api.github.com/users/shoamano83/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shoamano83/subscriptions","organizations_url":"https://api.github.com/users/shoamano83/orgs","repos_url":"https://api.github.com/users/shoamano83/repos","events_url":"https://api.github.com/users/shoamano83/events{/privacy}","received_events_url":"https://api.github.com/users/shoamano83/received_events","type":"User","site_admin":false},"body":"Thank you for your suggestion. Reusing `lifecycleQueue` seems good. Please give me a little more time as I need to update the test code as well.","created_at":"2018-08-17T13:19:22Z","updated_at":"2018-08-17T13:19:22Z","html_url":"https://github.com/smartdevicelink/sdl_ios/pull/947#discussion_r210906117","pull_request_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/pulls/947","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/smartdevicelink/sdl_ios/pulls/comments/210906117"},"html":{"href":"https://github.com/smartdevicelink/sdl_ios/pull/947#discussion_r210906117"},"pull_request":{"href":"https://api.github.com/repos/smartdevicelink/sdl_ios/pulls/947"}},"in_reply_to_id":205577954},"pull_request":{"url":"https://api.github.com/repos/smartdevicelink/sdl_ios/pulls/947","id":185107782,"node_id":"MDExOlB1bGxSZXF1ZXN0MTg1MTA3Nzgy","html_url":"https://github.com/smartdevicelink/sdl_ios/pull/947","diff_url":"https://github.com/smartdevicelink/sdl_ios/pull/947.diff","patch_url":"https://github.com/smartdevicelink/sdl_ios/pull/947.patch","issue_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/issues/947","number":947,"state":"open","locked":false,"title":"Multiple simultaneous transports","user":{"login":"shoamano83","id":26382896,"node_id":"MDQ6VXNlcjI2MzgyODk2","avatar_url":"https://avatars1.githubusercontent.com/u/26382896?v=4","gravatar_id":"","url":"https://api.github.com/users/shoamano83","html_url":"https://github.com/shoamano83","followers_url":"https://api.github.com/users/shoamano83/followers","following_url":"https://api.github.com/users/shoamano83/following{/other_user}","gists_url":"https://api.github.com/users/shoamano83/gists{/gist_id}","starred_url":"https://api.github.com/users/shoamano83/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shoamano83/subscriptions","organizations_url":"https://api.github.com/users/shoamano83/orgs","repos_url":"https://api.github.com/users/shoamano83/repos","events_url":"https://api.github.com/users/shoamano83/events{/privacy}","received_events_url":"https://api.github.com/users/shoamano83/received_events","type":"User","site_admin":false},"body":"Fixes https://github.com/smartdevicelink/sdl_ios/issues/900\r\n\r\nThis PR is **ready** for review.\r\n\r\n### Risk\r\nThis PR makes **minor** API changes.\r\n(Addition of internal methods in SDLStreamingMediaManager.h.)\r\n\r\n### Testing Plan\r\nUnit tests are included in this PR.\r\n\r\n### Summary\r\nThis PR includes necessary changes for multiple-transports feature.\r\n\r\n### Changelog\r\n##### Breaking Changes\r\n* SDLStreamingMediaLifecycleManager is split into `SDLStreamingMediaVideoLifecycleManager` and `SDLStreamingMediaAudioLifecycleManager` as the streamings have to be controlled separately.\r\n* Protocol version is bumped to 5.1.0.\r\n\r\n##### Enhancements\r\n* Addition of `SecondaryTransportManager`.\r\n* Support of new control frames as well as new parameters in BSON.\r\n* Addition of protection against `protocolDelegateTable` in SDLProtocol.\r\n\r\n##### Bug Fixes\r\n* Minor test case fixes in SDLStreamingMediaAudioLifecycleManagerSpec and SDLProtocolSpec.\r\n\r\n### Tasks Remaining:\r\n- None\r\n\r\n### CLA\r\n- [X] I have signed [the CLA](https://docs.google.com/forms/d/e/1FAIpQLSdsgJY33VByaX482zHzi-xUm49JNnmuJOyAM6uegPQ2LXYVfA/viewform)","created_at":"2018-05-01T02:15:31Z","updated_at":"2018-08-17T13:19:22Z","closed_at":null,"merged_at":null,"merge_commit_sha":"f66ee407b30720565d679dc04d7b04691fbeda6b","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":135859170,"node_id":"MDU6TGFiZWwxMzU4NTkxNzA=","url":"https://api.github.com/repos/smartdevicelink/sdl_ios/labels/enhancement","name":"enhancement","color":"5677fc","default":true},{"id":141314506,"node_id":"MDU6TGFiZWwxNDEzMTQ1MDY=","url":"https://api.github.com/repos/smartdevicelink/sdl_ios/labels/proposal","name":"proposal","color":"ff9800","default":false}],"milestone":{"url":"https://api.github.com/repos/smartdevicelink/sdl_ios/milestones/20","html_url":"https://github.com/smartdevicelink/sdl_ios/milestone/20","labels_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/milestones/20/labels","id":3348717,"node_id":"MDk6TWlsZXN0b25lMzM0ODcxNw==","number":20,"title":"6.1.0","description":null,"creator":{"login":"joeljfischer","id":1767063,"node_id":"MDQ6VXNlcjE3NjcwNjM=","avatar_url":"https://avatars0.githubusercontent.com/u/1767063?v=4","gravatar_id":"","url":"https://api.github.com/users/joeljfischer","html_url":"https://github.com/joeljfischer","followers_url":"https://api.github.com/users/joeljfischer/followers","following_url":"https://api.github.com/users/joeljfischer/following{/other_user}","gists_url":"https://api.github.com/users/joeljfischer/gists{/gist_id}","starred_url":"https://api.github.com/users/joeljfischer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/joeljfischer/subscriptions","organizations_url":"https://api.github.com/users/joeljfischer/orgs","repos_url":"https://api.github.com/users/joeljfischer/repos","events_url":"https://api.github.com/users/joeljfischer/events{/privacy}","received_events_url":"https://api.github.com/users/joeljfischer/received_events","type":"User","site_admin":false},"open_issues":20,"closed_issues":41,"state":"open","created_at":"2018-05-15T13:15:08Z","updated_at":"2018-08-16T19:56:08Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/pulls/947/commits","review_comments_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/pulls/947/comments","review_comment_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/pulls/comments{/number}","comments_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/issues/947/comments","statuses_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/statuses/b32fac3ea910101e1856f927bd573bdf0fdfe4f2","head":{"label":"XevoInc:feature/multiple_transports","ref":"feature/multiple_transports","sha":"b32fac3ea910101e1856f927bd573bdf0fdfe4f2","user":{"login":"XevoInc","id":26581725,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI2NTgxNzI1","avatar_url":"https://avatars3.githubusercontent.com/u/26581725?v=4","gravatar_id":"","url":"https://api.github.com/users/XevoInc","html_url":"https://github.com/XevoInc","followers_url":"https://api.github.com/users/XevoInc/followers","following_url":"https://api.github.com/users/XevoInc/following{/other_user}","gists_url":"https://api.github.com/users/XevoInc/gists{/gist_id}","starred_url":"https://api.github.com/users/XevoInc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/XevoInc/subscriptions","organizations_url":"https://api.github.com/users/XevoInc/orgs","repos_url":"https://api.github.com/users/XevoInc/repos","events_url":"https://api.github.com/users/XevoInc/events{/privacy}","received_events_url":"https://api.github.com/users/XevoInc/received_events","type":"Organization","site_admin":false},"repo":{"id":88789584,"node_id":"MDEwOlJlcG9zaXRvcnk4ODc4OTU4NA==","name":"sdl_ios","full_name":"XevoInc/sdl_ios","owner":{"login":"XevoInc","id":26581725,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI2NTgxNzI1","avatar_url":"https://avatars3.githubusercontent.com/u/26581725?v=4","gravatar_id":"","url":"https://api.github.com/users/XevoInc","html_url":"https://github.com/XevoInc","followers_url":"https://api.github.com/users/XevoInc/followers","following_url":"https://api.github.com/users/XevoInc/following{/other_user}","gists_url":"https://api.github.com/users/XevoInc/gists{/gist_id}","starred_url":"https://api.github.com/users/XevoInc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/XevoInc/subscriptions","organizations_url":"https://api.github.com/users/XevoInc/orgs","repos_url":"https://api.github.com/users/XevoInc/repos","events_url":"https://api.github.com/users/XevoInc/events{/privacy}","received_events_url":"https://api.github.com/users/XevoInc/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/XevoInc/sdl_ios","description":"Get your app connected to the 🚙, make your users feel like a 🌟","fork":true,"url":"https://api.github.com/repos/XevoInc/sdl_ios","forks_url":"https://api.github.com/repos/XevoInc/sdl_ios/forks","keys_url":"https://api.github.com/repos/XevoInc/sdl_ios/keys{/key_id}","collaborators_url":"https://api.github.com/repos/XevoInc/sdl_ios/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/XevoInc/sdl_ios/teams","hooks_url":"https://api.github.com/repos/XevoInc/sdl_ios/hooks","issue_events_url":"https://api.github.com/repos/XevoInc/sdl_ios/issues/events{/number}","events_url":"https://api.github.com/repos/XevoInc/sdl_ios/events","assignees_url":"https://api.github.com/repos/XevoInc/sdl_ios/assignees{/user}","branches_url":"https://api.github.com/repos/XevoInc/sdl_ios/branches{/branch}","tags_url":"https://api.github.com/repos/XevoInc/sdl_ios/tags","blobs_url":"https://api.github.com/repos/XevoInc/sdl_ios/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/XevoInc/sdl_ios/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/XevoInc/sdl_ios/git/refs{/sha}","trees_url":"https://api.github.com/repos/XevoInc/sdl_ios/git/trees{/sha}","statuses_url":"https://api.github.com/repos/XevoInc/sdl_ios/statuses/{sha}","languages_url":"https://api.github.com/repos/XevoInc/sdl_ios/languages","stargazers_url":"https://api.github.com/repos/XevoInc/sdl_ios/stargazers","contributors_url":"https://api.github.com/repos/XevoInc/sdl_ios/contributors","subscribers_url":"https://api.github.com/repos/XevoInc/sdl_ios/subscribers","subscription_url":"https://api.github.com/repos/XevoInc/sdl_ios/subscription","commits_url":"https://api.github.com/repos/XevoInc/sdl_ios/commits{/sha}","git_commits_url":"https://api.github.com/repos/XevoInc/sdl_ios/git/commits{/sha}","comments_url":"https://api.github.com/repos/XevoInc/sdl_ios/comments{/number}","issue_comment_url":"https://api.github.com/repos/XevoInc/sdl_ios/issues/comments{/number}","contents_url":"https://api.github.com/repos/XevoInc/sdl_ios/contents/{+path}","compare_url":"https://api.github.com/repos/XevoInc/sdl_ios/compare/{base}...{head}","merges_url":"https://api.github.com/repos/XevoInc/sdl_ios/merges","archive_url":"https://api.github.com/repos/XevoInc/sdl_ios/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/XevoInc/sdl_ios/downloads","issues_url":"https://api.github.com/repos/XevoInc/sdl_ios/issues{/number}","pulls_url":"https://api.github.com/repos/XevoInc/sdl_ios/pulls{/number}","milestones_url":"https://api.github.com/repos/XevoInc/sdl_ios/milestones{/number}","notifications_url":"https://api.github.com/repos/XevoInc/sdl_ios/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/XevoInc/sdl_ios/labels{/name}","releases_url":"https://api.github.com/repos/XevoInc/sdl_ios/releases{/id}","deployments_url":"https://api.github.com/repos/XevoInc/sdl_ios/deployments","created_at":"2017-04-19T20:49:53Z","updated_at":"2018-07-03T05:12:35Z","pushed_at":"2018-08-17T13:15:48Z","git_url":"git://github.com/XevoInc/sdl_ios.git","ssh_url":"git@github.com:XevoInc/sdl_ios.git","clone_url":"https://github.com/XevoInc/sdl_ios.git","svn_url":"https://github.com/XevoInc/sdl_ios","homepage":"www.smartdevicelink.com","size":30638,"stargazers_count":0,"watchers_count":0,"language":"Objective-C","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"smartdevicelink:develop","ref":"develop","sha":"3cb0f3be950203b8c0737ffe36debb2628d8d707","user":{"login":"smartdevicelink","id":8671397,"node_id":"MDEyOk9yZ2FuaXphdGlvbjg2NzEzOTc=","avatar_url":"https://avatars3.githubusercontent.com/u/8671397?v=4","gravatar_id":"","url":"https://api.github.com/users/smartdevicelink","html_url":"https://github.com/smartdevicelink","followers_url":"https://api.github.com/users/smartdevicelink/followers","following_url":"https://api.github.com/users/smartdevicelink/following{/other_user}","gists_url":"https://api.github.com/users/smartdevicelink/gists{/gist_id}","starred_url":"https://api.github.com/users/smartdevicelink/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/smartdevicelink/subscriptions","organizations_url":"https://api.github.com/users/smartdevicelink/orgs","repos_url":"https://api.github.com/users/smartdevicelink/repos","events_url":"https://api.github.com/users/smartdevicelink/events{/privacy}","received_events_url":"https://api.github.com/users/smartdevicelink/received_events","type":"Organization","site_admin":false},"repo":{"id":24940582,"node_id":"MDEwOlJlcG9zaXRvcnkyNDk0MDU4Mg==","name":"sdl_ios","full_name":"smartdevicelink/sdl_ios","owner":{"login":"smartdevicelink","id":8671397,"node_id":"MDEyOk9yZ2FuaXphdGlvbjg2NzEzOTc=","avatar_url":"https://avatars3.githubusercontent.com/u/8671397?v=4","gravatar_id":"","url":"https://api.github.com/users/smartdevicelink","html_url":"https://github.com/smartdevicelink","followers_url":"https://api.github.com/users/smartdevicelink/followers","following_url":"https://api.github.com/users/smartdevicelink/following{/other_user}","gists_url":"https://api.github.com/users/smartdevicelink/gists{/gist_id}","starred_url":"https://api.github.com/users/smartdevicelink/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/smartdevicelink/subscriptions","organizations_url":"https://api.github.com/users/smartdevicelink/orgs","repos_url":"https://api.github.com/users/smartdevicelink/repos","events_url":"https://api.github.com/users/smartdevicelink/events{/privacy}","received_events_url":"https://api.github.com/users/smartdevicelink/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/smartdevicelink/sdl_ios","description":"Get your app connected to the 🚙, make your users feel like a 🌟","fork":false,"url":"https://api.github.com/repos/smartdevicelink/sdl_ios","forks_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/forks","keys_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/keys{/key_id}","collaborators_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/teams","hooks_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/hooks","issue_events_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/issues/events{/number}","events_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/events","assignees_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/assignees{/user}","branches_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/branches{/branch}","tags_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/tags","blobs_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/git/refs{/sha}","trees_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/git/trees{/sha}","statuses_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/statuses/{sha}","languages_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/languages","stargazers_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/stargazers","contributors_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/contributors","subscribers_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/subscribers","subscription_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/subscription","commits_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/commits{/sha}","git_commits_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/git/commits{/sha}","comments_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/comments{/number}","issue_comment_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/issues/comments{/number}","contents_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/contents/{+path}","compare_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/compare/{base}...{head}","merges_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/merges","archive_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/downloads","issues_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/issues{/number}","pulls_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/pulls{/number}","milestones_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/milestones{/number}","notifications_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/labels{/name}","releases_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/releases{/id}","deployments_url":"https://api.github.com/repos/smartdevicelink/sdl_ios/deployments","created_at":"2014-10-08T12:57:22Z","updated_at":"2018-08-06T19:25:59Z","pushed_at":"2018-08-17T13:15:50Z","git_url":"git://github.com/smartdevicelink/sdl_ios.git","ssh_url":"git@github.com:smartdevicelink/sdl_ios.git","clone_url":"https://github.com/smartdevicelink/sdl_ios.git","svn_url":"https://github.com/smartdevicelink/sdl_ios","homepage":"www.smartdevicelink.com","size":30910,"stargazers_count":111,"watchers_count":111,"language":"Objective-C","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":70,"mirror_url":null,"archived":false,"open_issues_count":59,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"forks":70,"open_issues":59,"watchers":111,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/smartdevicelink/sdl_ios/pulls/947"},"html":{"href":"https://github.com/smartdevicelink/sdl_ios/pull/947"},"issue":{"href":"https://api.github.com/repos/smartdevicelink/sdl_ios/issues/947"},"comments":{"href":"https://api.github.com/repos/smartdevicelink/sdl_ios/issues/947/comments"},"review_comments":{"href":"https://api.github.com/repos/smartdevicelink/sdl_ios/pulls/947/comments"},"review_comment":{"href":"https://api.github.com/repos/smartdevicelink/sdl_ios/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/smartdevicelink/sdl_ios/pulls/947/commits"},"statuses":{"href":"https://api.github.com/repos/smartdevicelink/sdl_ios/statuses/b32fac3ea910101e1856f927bd573bdf0fdfe4f2"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"shoamano83"}}