diff --git a/src/objective-c/GRPCClient/private/GRPCHost.m b/src/objective-c/GRPCClient/private/GRPCHost.m index 5b1ca16e120f6ea7335795c372e43736db53a5c9..f750841a4464c7a760281d4729c922080f8972c4 100644 --- a/src/objective-c/GRPCClient/private/GRPCHost.m +++ b/src/objective-c/GRPCClient/private/GRPCHost.m @@ -40,6 +40,10 @@ #import "GRPCCompletionQueue.h" #import "NSDictionary+GRPC.h" +// TODO(jcanizales): Generate the version in a standalone header, from templates. Like +// templates/src/core/surface/version.c.template . +#define GRPC_OBJC_VERSION_STRING @"0.13.0" + @interface GRPCHost () // TODO(mlumish): Investigate whether caching channels with strong links is a good idea. @property(nonatomic, strong) GRPCChannel *channel; @@ -109,9 +113,14 @@ if (!_channel) { NSMutableDictionary *args = [NSMutableDictionary dictionary]; + + // TODO(jcanizales): Add OS and device information (see + // https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#user-agents ). + NSString *userAgent = @"grpc-objc/" GRPC_OBJC_VERSION_STRING; if (_userAgentPrefix) { - args[@GRPC_ARG_PRIMARY_USER_AGENT_STRING] = _userAgentPrefix; + userAgent = [@[_userAgentPrefix, userAgent] componentsJoinedByString:@" "]; } + args[@GRPC_ARG_PRIMARY_USER_AGENT_STRING] = userAgent; if (_secure) { if (_hostNameOverride) {