mirror of https://github.com/grpc/grpc.git
Starting a new branch with same changes from https://github.com/grpc/grpc/pull/19621
parent
6ba7d2c21d
commit
44868ae12a
23 changed files with 1641 additions and 0 deletions
@ -0,0 +1,215 @@ |
|||||||
|
load( |
||||||
|
"//bazel:protobuf.bzl", |
||||||
|
"get_include_protoc_args", |
||||||
|
"get_plugin_args", |
||||||
|
"proto_path_to_generated_filename", |
||||||
|
) |
||||||
|
load(":grpc_util.bzl", "to_upper_camel_with_extension",) |
||||||
|
|
||||||
|
_GRPC_PROTO_HEADER_FMT = "{}.pbrpc.h" |
||||||
|
_GRPC_PROTO_SRC_FMT = "{}.pbrpc.m" |
||||||
|
_PROTO_HEADER_FMT = "{}.pbobjc.h" |
||||||
|
_PROTO_SRC_FMT = "{}.pbobjc.m" |
||||||
|
_GENERATED_PROTOS_DIR = "_generated_protos" |
||||||
|
|
||||||
|
_GENERATE_HDRS = 1 |
||||||
|
_GENERATE_SRCS = 2 |
||||||
|
_GENERATE_NON_ARC_SRCS = 3 |
||||||
|
|
||||||
|
def _generate_objc_impl(ctx): |
||||||
|
"""Implementation of the generate_objc rule.""" |
||||||
|
protos = [ |
||||||
|
f |
||||||
|
for src in ctx.attr.deps |
||||||
|
for f in src[ProtoInfo].transitive_imports.to_list() |
||||||
|
] |
||||||
|
|
||||||
|
target_package = _join_directories([ctx.label.workspace_root, ctx.label.package]) |
||||||
|
|
||||||
|
files_with_rpc = [_label_to_full_file_path(f, target_package) for f in ctx.attr.srcs] |
||||||
|
|
||||||
|
outs = [] |
||||||
|
for proto in protos: |
||||||
|
outs += [_get_output_file_name_from_proto(proto, _PROTO_HEADER_FMT)] |
||||||
|
outs += [_get_output_file_name_from_proto(proto, _PROTO_SRC_FMT)] |
||||||
|
|
||||||
|
file_path = _get_full_path_from_file(proto) |
||||||
|
if file_path in files_with_rpc: |
||||||
|
outs += [_get_output_file_name_from_proto(proto, _GRPC_PROTO_HEADER_FMT)] |
||||||
|
outs += [_get_output_file_name_from_proto(proto, _GRPC_PROTO_SRC_FMT)] |
||||||
|
|
||||||
|
out_files = [ctx.actions.declare_file(out) for out in outs] |
||||||
|
dir_out = _join_directories([ |
||||||
|
str(ctx.genfiles_dir.path), target_package, _GENERATED_PROTOS_DIR |
||||||
|
]) |
||||||
|
|
||||||
|
arguments = [] |
||||||
|
if ctx.executable.plugin: |
||||||
|
arguments += get_plugin_args( |
||||||
|
ctx.executable.plugin, |
||||||
|
[], |
||||||
|
dir_out, |
||||||
|
False, |
||||||
|
) |
||||||
|
tools = [ctx.executable.plugin] |
||||||
|
arguments += ["--objc_out=" + dir_out] |
||||||
|
|
||||||
|
arguments += ["--proto_path=."] |
||||||
|
arguments += get_include_protoc_args(protos) |
||||||
|
# Include the output directory so that protoc puts the generated code in the |
||||||
|
# right directory. |
||||||
|
arguments += ["--proto_path={}".format(dir_out)] |
||||||
|
arguments += ["--proto_path={}".format(_get_directory_from_proto(proto)) for proto in protos] |
||||||
|
arguments += [_get_full_path_from_file(proto) for proto in protos] |
||||||
|
|
||||||
|
# create a list of well known proto files if the argument is non-None |
||||||
|
well_known_proto_files = [] |
||||||
|
if ctx.attr.use_well_known_protos: |
||||||
|
f = ctx.attr.well_known_protos.files.to_list()[0].dirname |
||||||
|
# go two levels up so that #import "google/protobuf/..." is correct |
||||||
|
arguments += ["-I{0}".format(f + "/../..")] |
||||||
|
well_known_proto_files = ctx.attr.well_known_protos.files.to_list() |
||||||
|
ctx.actions.run( |
||||||
|
inputs = protos + well_known_proto_files, |
||||||
|
tools = tools, |
||||||
|
outputs = out_files, |
||||||
|
executable = ctx.executable._protoc, |
||||||
|
arguments = arguments, |
||||||
|
) |
||||||
|
|
||||||
|
return struct(files = depset(out_files)) |
||||||
|
|
||||||
|
def _label_to_full_file_path(src, package): |
||||||
|
if not src.startswith("//"): |
||||||
|
# Relative from current package |
||||||
|
if not src.startswith(":"): |
||||||
|
# "a.proto" -> ":a.proto" |
||||||
|
src = ":" + src |
||||||
|
src = "//" + package + src |
||||||
|
# Converts //path/to/package:File.ext to path/to/package/File.ext. |
||||||
|
src = src.replace("//", "") |
||||||
|
src = src.replace(":", "/") |
||||||
|
if src.startswith("/"): |
||||||
|
# "//:a.proto" -> "/a.proto" so remove the initial slash |
||||||
|
return src[1:] |
||||||
|
else: |
||||||
|
return src |
||||||
|
|
||||||
|
def _get_output_file_name_from_proto(proto, fmt): |
||||||
|
return proto_path_to_generated_filename( |
||||||
|
_GENERATED_PROTOS_DIR + "/" + |
||||||
|
_get_directory_from_proto(proto) + _get_slash_or_null_from_proto(proto) + |
||||||
|
to_upper_camel_with_extension(_get_file_name_from_proto(proto), "proto"), |
||||||
|
fmt, |
||||||
|
) |
||||||
|
|
||||||
|
def _get_file_name_from_proto(proto): |
||||||
|
return proto.path.rpartition("/")[2] |
||||||
|
|
||||||
|
def _get_slash_or_null_from_proto(proto): |
||||||
|
"""Potentially returns empty (if the file is in the root directory)""" |
||||||
|
return proto.path.rpartition("/")[1] |
||||||
|
|
||||||
|
def _get_directory_from_proto(proto): |
||||||
|
return proto.path.rpartition("/")[0] |
||||||
|
|
||||||
|
def _get_full_path_from_file(file): |
||||||
|
gen_dir_length = 0 |
||||||
|
# if file is generated, then prepare to remote its root |
||||||
|
# (including CPU architecture...) |
||||||
|
if not file.is_source: |
||||||
|
gen_dir_length = len(file.root.path) + 1 |
||||||
|
|
||||||
|
return file.path[gen_dir_length:] |
||||||
|
|
||||||
|
def _join_directories(directories): |
||||||
|
massaged_directories = [directory for directory in directories if len(directory) != 0] |
||||||
|
return "/".join(massaged_directories) |
||||||
|
|
||||||
|
|
||||||
|
generate_objc = rule( |
||||||
|
attrs = { |
||||||
|
"deps": attr.label_list( |
||||||
|
mandatory = True, |
||||||
|
allow_empty = False, |
||||||
|
providers = [ProtoInfo], |
||||||
|
), |
||||||
|
"plugin": attr.label( |
||||||
|
default = "@com_github_grpc_grpc//src/compiler:grpc_objective_c_plugin", |
||||||
|
executable = True, |
||||||
|
providers = ["files_to_run"], |
||||||
|
cfg = "host", |
||||||
|
), |
||||||
|
"srcs": attr.string_list( |
||||||
|
mandatory = False, |
||||||
|
allow_empty = True |
||||||
|
), |
||||||
|
"use_well_known_protos": attr.bool( |
||||||
|
mandatory = False, |
||||||
|
default = False |
||||||
|
), |
||||||
|
"well_known_protos": attr.label( |
||||||
|
default = "@com_google_protobuf//:well_known_protos" |
||||||
|
), |
||||||
|
"_protoc": attr.label( |
||||||
|
default = Label("//external:protocol_compiler"), |
||||||
|
executable = True, |
||||||
|
cfg = "host", |
||||||
|
), |
||||||
|
}, |
||||||
|
output_to_genfiles = True, |
||||||
|
implementation = _generate_objc_impl |
||||||
|
) |
||||||
|
|
||||||
|
def _group_objc_files_impl(ctx): |
||||||
|
suffix = "" |
||||||
|
if ctx.attr.gen_mode == _GENERATE_HDRS: |
||||||
|
suffix = "h" |
||||||
|
elif ctx.attr.gen_mode == _GENERATE_SRCS: |
||||||
|
suffix = "pbrpc.m" |
||||||
|
elif ctx.attr.gen_mode == _GENERATE_NON_ARC_SRCS: |
||||||
|
suffix = "pbobjc.m" |
||||||
|
else: |
||||||
|
fail("Undefined gen_mode") |
||||||
|
out_files = [ |
||||||
|
file |
||||||
|
for file in ctx.attr.src.files.to_list() |
||||||
|
if file.basename.endswith(suffix) |
||||||
|
] |
||||||
|
return struct(files = depset(out_files)) |
||||||
|
|
||||||
|
generate_objc_hdrs = rule( |
||||||
|
attrs = { |
||||||
|
"src": attr.label( |
||||||
|
mandatory = True, |
||||||
|
), |
||||||
|
"gen_mode": attr.int( |
||||||
|
default = _GENERATE_HDRS, |
||||||
|
) |
||||||
|
}, |
||||||
|
implementation = _group_objc_files_impl |
||||||
|
) |
||||||
|
|
||||||
|
generate_objc_srcs = rule( |
||||||
|
attrs = { |
||||||
|
"src": attr.label( |
||||||
|
mandatory = True, |
||||||
|
), |
||||||
|
"gen_mode": attr.int( |
||||||
|
default = _GENERATE_SRCS, |
||||||
|
) |
||||||
|
}, |
||||||
|
implementation = _group_objc_files_impl |
||||||
|
) |
||||||
|
|
||||||
|
generate_objc_non_arc_srcs = rule( |
||||||
|
attrs = { |
||||||
|
"src": attr.label( |
||||||
|
mandatory = True, |
||||||
|
), |
||||||
|
"gen_mode": attr.int( |
||||||
|
default = _GENERATE_NON_ARC_SRCS, |
||||||
|
) |
||||||
|
}, |
||||||
|
implementation = _group_objc_files_impl |
||||||
|
) |
@ -0,0 +1,46 @@ |
|||||||
|
# Follows convention set in objectivec_helpers.cc in the protobuf ObjC compiler. |
||||||
|
_upper_segments_list = ["url", "http", "https"] |
||||||
|
|
||||||
|
def strip_extension(str): |
||||||
|
return str.rpartition(".")[0] |
||||||
|
|
||||||
|
def capitalize(word): |
||||||
|
if word in _upper_segments_list: |
||||||
|
return word.upper() |
||||||
|
else: |
||||||
|
return word.capitalize() |
||||||
|
|
||||||
|
def lower_underscore_to_upper_camel(str): |
||||||
|
str = strip_extension(str) |
||||||
|
camel_case_str = "" |
||||||
|
word = "" |
||||||
|
for c in str.elems(): # NB: assumes ASCII! |
||||||
|
if c.isalpha(): |
||||||
|
word += c.lower() |
||||||
|
else: |
||||||
|
# Last word is finished. |
||||||
|
if len(word): |
||||||
|
camel_case_str += capitalize(word) |
||||||
|
word = "" |
||||||
|
if c.isdigit(): |
||||||
|
camel_case_str += c |
||||||
|
|
||||||
|
# Otherwise, drop the character. See UnderscoresToCamelCase in: |
||||||
|
# third_party/protobuf/src/google/protobuf/compiler/objectivec/objectivec_helpers.cc |
||||||
|
|
||||||
|
if len(word): |
||||||
|
camel_case_str += capitalize(word) |
||||||
|
return camel_case_str |
||||||
|
|
||||||
|
def file_to_upper_camel(src): |
||||||
|
elements = src.rpartition("/") |
||||||
|
upper_camel = lower_underscore_to_upper_camel(elements[-1]) |
||||||
|
return "".join(list(elements[:-1]) + [upper_camel]) |
||||||
|
|
||||||
|
def file_with_extension(src, ext): |
||||||
|
elements = src.rpartition("/") |
||||||
|
return "".join(list(elements[:-1]) + [elements[-1], "." + ext]) |
||||||
|
|
||||||
|
def to_upper_camel_with_extension(src, ext): |
||||||
|
src = file_to_upper_camel(src) |
||||||
|
return file_with_extension(src, ext) |
@ -0,0 +1,68 @@ |
|||||||
|
load( |
||||||
|
"//bazel:generate_objc.bzl", |
||||||
|
"generate_objc", |
||||||
|
"generate_objc_hdrs", |
||||||
|
"generate_objc_srcs", |
||||||
|
"generate_objc_non_arc_srcs" |
||||||
|
) |
||||||
|
load("//bazel:protobuf.bzl", "well_known_proto_libs") |
||||||
|
|
||||||
|
def objc_grpc_library(name, deps, srcs = [], use_well_known_protos = False, **kwargs): |
||||||
|
"""Generates messages and/or service stubs for given proto_library and all transitively dependent proto files |
||||||
|
|
||||||
|
Args: |
||||||
|
name: name of target |
||||||
|
deps: a list of proto_library targets that needs to be compiled |
||||||
|
srcs: a list of labels to proto files with service stubs to be generated, |
||||||
|
labels specified must include service stubs; otherwise Bazel will complain about srcs being empty |
||||||
|
use_well_known_protos: whether to use the well known protos defined in |
||||||
|
@com_google_protobuf//src/google/protobuf, default to false |
||||||
|
**kwargs: other arguments |
||||||
|
""" |
||||||
|
objc_grpc_library_name = "_" + name + "_objc_grpc_library" |
||||||
|
|
||||||
|
generate_objc( |
||||||
|
name = objc_grpc_library_name, |
||||||
|
srcs = srcs, |
||||||
|
deps = deps, |
||||||
|
use_well_known_protos = use_well_known_protos, |
||||||
|
**kwargs |
||||||
|
) |
||||||
|
|
||||||
|
generate_objc_hdrs( |
||||||
|
name = objc_grpc_library_name + "_hdrs", |
||||||
|
src = ":" + objc_grpc_library_name, |
||||||
|
) |
||||||
|
|
||||||
|
generate_objc_non_arc_srcs( |
||||||
|
name = objc_grpc_library_name + "_non_arc_srcs", |
||||||
|
src = ":" + objc_grpc_library_name, |
||||||
|
) |
||||||
|
|
||||||
|
arc_srcs = None |
||||||
|
if len(srcs) > 0: |
||||||
|
generate_objc_srcs( |
||||||
|
name = objc_grpc_library_name + "_srcs", |
||||||
|
src = ":" + objc_grpc_library_name, |
||||||
|
) |
||||||
|
arc_srcs = [":" + objc_grpc_library_name + "_srcs"] |
||||||
|
|
||||||
|
native.objc_library( |
||||||
|
name = name, |
||||||
|
hdrs = [":" + objc_grpc_library_name + "_hdrs"], |
||||||
|
non_arc_srcs = [":" + objc_grpc_library_name + "_non_arc_srcs"], |
||||||
|
srcs = arc_srcs, |
||||||
|
defines = [ |
||||||
|
"GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=0", |
||||||
|
"GPB_GRPC_FORWARD_DECLARE_MESSAGE_PROTO=0", |
||||||
|
], |
||||||
|
includes = [ |
||||||
|
"_generated_protos", |
||||||
|
"src/objective-c", |
||||||
|
], |
||||||
|
deps = [ |
||||||
|
"@com_github_grpc_grpc//src/objective-c:proto_objc_rpc", |
||||||
|
"@com_google_protobuf//:protobuf_objc", |
||||||
|
], |
||||||
|
) |
||||||
|
|
@ -0,0 +1,96 @@ |
|||||||
|
# gRPC Bazel BUILD file. |
||||||
|
# |
||||||
|
# Copyright 2019 gRPC authors. |
||||||
|
# |
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
# you may not use this file except in compliance with the License. |
||||||
|
# You may obtain a copy of the License at |
||||||
|
# |
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0 |
||||||
|
# |
||||||
|
# Unless required by applicable law or agreed to in writing, software |
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
# See the License for the specific language governing permissions and |
||||||
|
# limitations under the License. |
||||||
|
|
||||||
|
licenses(["notice"]) # Apache v2 |
||||||
|
|
||||||
|
package(default_visibility = ["//visibility:public"]) |
||||||
|
|
||||||
|
load("//bazel:grpc_build_system.bzl", "grpc_objc_library", "grpc_objc_use_cronet_config") |
||||||
|
|
||||||
|
exports_files(["LICENSE"]) |
||||||
|
|
||||||
|
grpc_objc_use_cronet_config() |
||||||
|
|
||||||
|
grpc_objc_library( |
||||||
|
name = "rx_library", |
||||||
|
srcs = glob([ |
||||||
|
"RxLibrary/*.m", |
||||||
|
"RxLibrary/transformations/*.m", |
||||||
|
]), |
||||||
|
hdrs = glob([ |
||||||
|
"RxLibrary/*.h", |
||||||
|
"RxLibrary/transformations/*.h", |
||||||
|
]), |
||||||
|
includes = ["."], |
||||||
|
deps = [":rx_library_private"], |
||||||
|
) |
||||||
|
|
||||||
|
grpc_objc_library( |
||||||
|
name = "rx_library_private", |
||||||
|
srcs = glob([ |
||||||
|
"RxLibrary/private/*.m", |
||||||
|
]), |
||||||
|
textual_hdrs = glob([ |
||||||
|
"RxLibrary/private/*.h", |
||||||
|
]), |
||||||
|
visibility = ["//visibility:private"], |
||||||
|
) |
||||||
|
|
||||||
|
grpc_objc_library( |
||||||
|
name = "grpc_objc_client", |
||||||
|
srcs = glob( |
||||||
|
[ |
||||||
|
"GRPCClient/*.m", |
||||||
|
"GRPCClient/private/*.m", |
||||||
|
], |
||||||
|
exclude = ["GRPCClient/GRPCCall+GID.m"], |
||||||
|
), |
||||||
|
hdrs = glob( |
||||||
|
[ |
||||||
|
"GRPCClient/*.h", |
||||||
|
"GRPCClient/internal/*.h", |
||||||
|
], |
||||||
|
exclude = ["GRPCClient/GRPCCall+GID.h"], |
||||||
|
), |
||||||
|
data = ["//:gRPCCertificates"], |
||||||
|
includes = ["."], |
||||||
|
textual_hdrs = glob([ |
||||||
|
"GRPCClient/private/*.h", |
||||||
|
]), |
||||||
|
deps = [ |
||||||
|
":rx_library", |
||||||
|
"//:grpc_objc", |
||||||
|
], |
||||||
|
) |
||||||
|
|
||||||
|
grpc_objc_library( |
||||||
|
name = "proto_objc_rpc", |
||||||
|
srcs = glob( |
||||||
|
["ProtoRPC/*.m"], |
||||||
|
), |
||||||
|
hdrs = glob( |
||||||
|
["ProtoRPC/*.h"], |
||||||
|
), |
||||||
|
# Different from Cocoapods, do not import as if @com_google_protobuf//:protobuf_objc is a framework, |
||||||
|
# use the real paths of @com_google_protobuf//:protobuf_objc instead |
||||||
|
defines = ["GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=0"], |
||||||
|
includes = ["src/objective-c"], |
||||||
|
deps = [ |
||||||
|
":grpc_objc_client", |
||||||
|
":rx_library", |
||||||
|
"@com_google_protobuf//:protobuf_objc", |
||||||
|
], |
||||||
|
) |
@ -0,0 +1,69 @@ |
|||||||
|
# gRPC Bazel BUILD file. |
||||||
|
# |
||||||
|
# Copyright 2019 gRPC authors. |
||||||
|
# |
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
# you may not use this file except in compliance with the License. |
||||||
|
# You may obtain a copy of the License at |
||||||
|
# |
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0 |
||||||
|
# |
||||||
|
# Unless required by applicable law or agreed to in writing, software |
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
# See the License for the specific language governing permissions and |
||||||
|
# limitations under the License. |
||||||
|
|
||||||
|
|
||||||
|
load("@build_bazel_rules_apple//apple:ios.bzl", "ios_application") |
||||||
|
load( |
||||||
|
"@com_github_grpc_grpc//bazel:objc_grpc_library.bzl", |
||||||
|
"objc_grpc_library", |
||||||
|
) |
||||||
|
|
||||||
|
proto_library( |
||||||
|
name = "messages_proto", |
||||||
|
srcs = ["BazelBuildSamples/messages.proto"], |
||||||
|
visibility = ["//visibility:public"], |
||||||
|
) |
||||||
|
|
||||||
|
objc_grpc_library( |
||||||
|
name = "test_grpc_objc", |
||||||
|
srcs = ["BazelBuildSamples/rmt/test.proto"], |
||||||
|
use_well_known_protos = True, |
||||||
|
deps = [ |
||||||
|
"//src/objective-c/examples/BazelBuildSamples/rmt:test_proto", |
||||||
|
], |
||||||
|
) |
||||||
|
|
||||||
|
# Proof that without this works without srcs |
||||||
|
objc_grpc_library( |
||||||
|
name = "test_objc", |
||||||
|
use_well_known_protos = True, |
||||||
|
deps = [ |
||||||
|
"//src/objective-c/examples/BazelBuildSamples/rmt:test_proto", |
||||||
|
] |
||||||
|
) |
||||||
|
|
||||||
|
objc_library( |
||||||
|
name = "ios-sample-lib", |
||||||
|
srcs = glob(["BazelBuildSamples/ios-sample/ios-sample/**/*.m"]), |
||||||
|
hdrs = glob(["BazelBuildSamples/ios-sample/ios-sample/**/*.h"]), |
||||||
|
data = glob([ |
||||||
|
"BazelBuildSamples/ios-sample/ios-sample/Assets.xcassets/**/*", |
||||||
|
"BazelBuildSamples/ios-sample/ios-sample/Base.lproj/**/*" |
||||||
|
]), |
||||||
|
deps = [ |
||||||
|
":test_grpc_objc", |
||||||
|
] |
||||||
|
) |
||||||
|
|
||||||
|
ios_application( |
||||||
|
name = "ios-sample", |
||||||
|
bundle_id = "com.google.ios-sample-objc-bazel", |
||||||
|
families = ["iphone"], |
||||||
|
minimum_os_version = "9.0", |
||||||
|
infoplists = ["BazelBuildSamples/ios-sample/ios-sample/Info.plist"], |
||||||
|
visibility = ["//visibility:public"], |
||||||
|
deps = [":ios-sample-lib"], |
||||||
|
) |
@ -0,0 +1,31 @@ |
|||||||
|
platform :ios, '8.0' |
||||||
|
|
||||||
|
install! 'cocoapods', :deterministic_uuids => false |
||||||
|
|
||||||
|
ROOT_DIR = '../../../../..' |
||||||
|
|
||||||
|
target 'ios-sample' do |
||||||
|
pod 'gRPC-ProtoRPC', :path => ROOT_DIR |
||||||
|
pod 'gRPC', :path => ROOT_DIR |
||||||
|
pod 'gRPC-Core', :path => ROOT_DIR |
||||||
|
pod 'gRPC-RxLibrary', :path => ROOT_DIR |
||||||
|
pod 'RemoteTest', :path => "../../RemoteTestClient" |
||||||
|
pod '!ProtoCompiler-gRPCPlugin', :path => "#{ROOT_DIR}/src/objective-c" |
||||||
|
end |
||||||
|
|
||||||
|
pre_install do |installer| |
||||||
|
grpc_core_spec = installer.pod_targets.find{|t| t.name.start_with?('gRPC-Core')}.root_spec |
||||||
|
|
||||||
|
src_root = "$(PODS_TARGET_SRCROOT)" |
||||||
|
grpc_core_spec.pod_target_xcconfig = { |
||||||
|
'GRPC_SRC_ROOT' => src_root, |
||||||
|
'HEADER_SEARCH_PATHS' => '"$(inherited)" "$(GRPC_SRC_ROOT)/include"', |
||||||
|
'USER_HEADER_SEARCH_PATHS' => '"$(GRPC_SRC_ROOT)"', |
||||||
|
# If we don't set these two settings, `include/grpc/support/time.h` and |
||||||
|
# `src/core/lib/gpr/string.h` shadow the system `<time.h>` and `<string.h>`, breaking the |
||||||
|
# build. |
||||||
|
'USE_HEADERMAP' => 'NO', |
||||||
|
'ALWAYS_SEARCH_USER_PATHS' => 'NO', |
||||||
|
} |
||||||
|
end |
||||||
|
|
@ -0,0 +1,413 @@ |
|||||||
|
// !$*UTF8*$! |
||||||
|
{ |
||||||
|
archiveVersion = 1; |
||||||
|
classes = { |
||||||
|
}; |
||||||
|
objectVersion = 50; |
||||||
|
objects = { |
||||||
|
|
||||||
|
/* Begin PBXBuildFile section */ |
||||||
|
AB433CC922D7E38000D579CC /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = AB433CC822D7E38000D579CC /* AppDelegate.m */; }; |
||||||
|
AB433CCC22D7E38000D579CC /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB433CCB22D7E38000D579CC /* ViewController.m */; }; |
||||||
|
AB433CCF22D7E38000D579CC /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AB433CCD22D7E38000D579CC /* Main.storyboard */; }; |
||||||
|
AB433CD122D7E38100D579CC /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AB433CD022D7E38100D579CC /* Assets.xcassets */; }; |
||||||
|
AB433CD422D7E38100D579CC /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AB433CD222D7E38100D579CC /* LaunchScreen.storyboard */; }; |
||||||
|
AB433CD722D7E38100D579CC /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = AB433CD622D7E38100D579CC /* main.m */; }; |
||||||
|
ED11F6CDF54788FC7CFD87B1 /* libPods-ios-sample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5AF80A181E30BD84FA56BE33 /* libPods-ios-sample.a */; }; |
||||||
|
/* End PBXBuildFile section */ |
||||||
|
|
||||||
|
/* Begin PBXFileReference section */ |
||||||
|
112D4595FA3E81552DA9E877 /* Pods-ios-sample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ios-sample.release.xcconfig"; path = "Target Support Files/Pods-ios-sample/Pods-ios-sample.release.xcconfig"; sourceTree = "<group>"; }; |
||||||
|
5AF80A181E30BD84FA56BE33 /* libPods-ios-sample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ios-sample.a"; sourceTree = BUILT_PRODUCTS_DIR; }; |
||||||
|
72599BE4AC5785D3368D40DD /* Pods-ios-sample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ios-sample.debug.xcconfig"; path = "Target Support Files/Pods-ios-sample/Pods-ios-sample.debug.xcconfig"; sourceTree = "<group>"; }; |
||||||
|
AB433CC422D7E38000D579CC /* ios-sample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "ios-sample.app"; sourceTree = BUILT_PRODUCTS_DIR; }; |
||||||
|
AB433CC722D7E38000D579CC /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; }; |
||||||
|
AB433CC822D7E38000D579CC /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; }; |
||||||
|
AB433CCA22D7E38000D579CC /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = "<group>"; }; |
||||||
|
AB433CCB22D7E38000D579CC /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = "<group>"; }; |
||||||
|
AB433CCE22D7E38000D579CC /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; }; |
||||||
|
AB433CD022D7E38100D579CC /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; |
||||||
|
AB433CD322D7E38100D579CC /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; }; |
||||||
|
AB433CD522D7E38100D579CC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; |
||||||
|
AB433CD622D7E38100D579CC /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; }; |
||||||
|
/* End PBXFileReference section */ |
||||||
|
|
||||||
|
/* Begin PBXFrameworksBuildPhase section */ |
||||||
|
AB433CC122D7E38000D579CC /* Frameworks */ = { |
||||||
|
isa = PBXFrameworksBuildPhase; |
||||||
|
buildActionMask = 2147483647; |
||||||
|
files = ( |
||||||
|
ED11F6CDF54788FC7CFD87B1 /* libPods-ios-sample.a in Frameworks */, |
||||||
|
); |
||||||
|
runOnlyForDeploymentPostprocessing = 0; |
||||||
|
}; |
||||||
|
/* End PBXFrameworksBuildPhase section */ |
||||||
|
|
||||||
|
/* Begin PBXGroup section */ |
||||||
|
2A170580B60E92B1A65525D4 /* Pods */ = { |
||||||
|
isa = PBXGroup; |
||||||
|
children = ( |
||||||
|
72599BE4AC5785D3368D40DD /* Pods-ios-sample.debug.xcconfig */, |
||||||
|
112D4595FA3E81552DA9E877 /* Pods-ios-sample.release.xcconfig */, |
||||||
|
); |
||||||
|
name = Pods; |
||||||
|
path = Pods; |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
AB433CBB22D7E38000D579CC = { |
||||||
|
isa = PBXGroup; |
||||||
|
children = ( |
||||||
|
AB433CC622D7E38000D579CC /* ios-sample */, |
||||||
|
AB433CC522D7E38000D579CC /* Products */, |
||||||
|
2A170580B60E92B1A65525D4 /* Pods */, |
||||||
|
FD148AE940967C50DB2C12CB /* Frameworks */, |
||||||
|
); |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
AB433CC522D7E38000D579CC /* Products */ = { |
||||||
|
isa = PBXGroup; |
||||||
|
children = ( |
||||||
|
AB433CC422D7E38000D579CC /* ios-sample.app */, |
||||||
|
); |
||||||
|
name = Products; |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
AB433CC622D7E38000D579CC /* ios-sample */ = { |
||||||
|
isa = PBXGroup; |
||||||
|
children = ( |
||||||
|
AB433CC722D7E38000D579CC /* AppDelegate.h */, |
||||||
|
AB433CC822D7E38000D579CC /* AppDelegate.m */, |
||||||
|
AB433CCA22D7E38000D579CC /* ViewController.h */, |
||||||
|
AB433CCB22D7E38000D579CC /* ViewController.m */, |
||||||
|
AB433CCD22D7E38000D579CC /* Main.storyboard */, |
||||||
|
AB433CD022D7E38100D579CC /* Assets.xcassets */, |
||||||
|
AB433CD222D7E38100D579CC /* LaunchScreen.storyboard */, |
||||||
|
AB433CD522D7E38100D579CC /* Info.plist */, |
||||||
|
AB433CD622D7E38100D579CC /* main.m */, |
||||||
|
); |
||||||
|
path = "ios-sample"; |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
FD148AE940967C50DB2C12CB /* Frameworks */ = { |
||||||
|
isa = PBXGroup; |
||||||
|
children = ( |
||||||
|
5AF80A181E30BD84FA56BE33 /* libPods-ios-sample.a */, |
||||||
|
); |
||||||
|
name = Frameworks; |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
/* End PBXGroup section */ |
||||||
|
|
||||||
|
/* Begin PBXNativeTarget section */ |
||||||
|
AB433CC322D7E38000D579CC /* ios-sample */ = { |
||||||
|
isa = PBXNativeTarget; |
||||||
|
buildConfigurationList = AB433CDA22D7E38100D579CC /* Build configuration list for PBXNativeTarget "ios-sample" */; |
||||||
|
buildPhases = ( |
||||||
|
9DD34A50D448CD3F464D4A3C /* [CP] Check Pods Manifest.lock */, |
||||||
|
AB433CC022D7E38000D579CC /* Sources */, |
||||||
|
AB433CC122D7E38000D579CC /* Frameworks */, |
||||||
|
AB433CC222D7E38000D579CC /* Resources */, |
||||||
|
630985F7228D41528084692C /* [CP] Copy Pods Resources */, |
||||||
|
); |
||||||
|
buildRules = ( |
||||||
|
); |
||||||
|
dependencies = ( |
||||||
|
); |
||||||
|
name = "ios-sample"; |
||||||
|
productName = "ios-sample"; |
||||||
|
productReference = AB433CC422D7E38000D579CC /* ios-sample.app */; |
||||||
|
productType = "com.apple.product-type.application"; |
||||||
|
}; |
||||||
|
/* End PBXNativeTarget section */ |
||||||
|
|
||||||
|
/* Begin PBXProject section */ |
||||||
|
AB433CBC22D7E38000D579CC /* Project object */ = { |
||||||
|
isa = PBXProject; |
||||||
|
attributes = { |
||||||
|
LastUpgradeCheck = 1010; |
||||||
|
ORGANIZATIONNAME = "Tony Lu"; |
||||||
|
TargetAttributes = { |
||||||
|
AB433CC322D7E38000D579CC = { |
||||||
|
CreatedOnToolsVersion = 10.1; |
||||||
|
}; |
||||||
|
}; |
||||||
|
}; |
||||||
|
buildConfigurationList = AB433CBF22D7E38000D579CC /* Build configuration list for PBXProject "ios-sample" */; |
||||||
|
compatibilityVersion = "Xcode 9.3"; |
||||||
|
developmentRegion = en; |
||||||
|
hasScannedForEncodings = 0; |
||||||
|
knownRegions = ( |
||||||
|
en, |
||||||
|
Base, |
||||||
|
); |
||||||
|
mainGroup = AB433CBB22D7E38000D579CC; |
||||||
|
productRefGroup = AB433CC522D7E38000D579CC /* Products */; |
||||||
|
projectDirPath = ""; |
||||||
|
projectRoot = ""; |
||||||
|
targets = ( |
||||||
|
AB433CC322D7E38000D579CC /* ios-sample */, |
||||||
|
); |
||||||
|
}; |
||||||
|
/* End PBXProject section */ |
||||||
|
|
||||||
|
/* Begin PBXResourcesBuildPhase section */ |
||||||
|
AB433CC222D7E38000D579CC /* Resources */ = { |
||||||
|
isa = PBXResourcesBuildPhase; |
||||||
|
buildActionMask = 2147483647; |
||||||
|
files = ( |
||||||
|
AB433CD422D7E38100D579CC /* LaunchScreen.storyboard in Resources */, |
||||||
|
AB433CD122D7E38100D579CC /* Assets.xcassets in Resources */, |
||||||
|
AB433CCF22D7E38000D579CC /* Main.storyboard in Resources */, |
||||||
|
); |
||||||
|
runOnlyForDeploymentPostprocessing = 0; |
||||||
|
}; |
||||||
|
/* End PBXResourcesBuildPhase section */ |
||||||
|
|
||||||
|
/* Begin PBXShellScriptBuildPhase section */ |
||||||
|
630985F7228D41528084692C /* [CP] Copy Pods Resources */ = { |
||||||
|
isa = PBXShellScriptBuildPhase; |
||||||
|
buildActionMask = 2147483647; |
||||||
|
files = ( |
||||||
|
); |
||||||
|
inputFileListPaths = ( |
||||||
|
"${PODS_ROOT}/Target Support Files/Pods-ios-sample/Pods-ios-sample-resources-${CONFIGURATION}-input-files.xcfilelist", |
||||||
|
); |
||||||
|
name = "[CP] Copy Pods Resources"; |
||||||
|
outputFileListPaths = ( |
||||||
|
"${PODS_ROOT}/Target Support Files/Pods-ios-sample/Pods-ios-sample-resources-${CONFIGURATION}-output-files.xcfilelist", |
||||||
|
); |
||||||
|
runOnlyForDeploymentPostprocessing = 0; |
||||||
|
shellPath = /bin/sh; |
||||||
|
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ios-sample/Pods-ios-sample-resources.sh\"\n"; |
||||||
|
showEnvVarsInLog = 0; |
||||||
|
}; |
||||||
|
9DD34A50D448CD3F464D4A3C /* [CP] Check Pods Manifest.lock */ = { |
||||||
|
isa = PBXShellScriptBuildPhase; |
||||||
|
buildActionMask = 2147483647; |
||||||
|
files = ( |
||||||
|
); |
||||||
|
inputFileListPaths = ( |
||||||
|
); |
||||||
|
inputPaths = ( |
||||||
|
"${PODS_PODFILE_DIR_PATH}/Podfile.lock", |
||||||
|
"${PODS_ROOT}/Manifest.lock", |
||||||
|
); |
||||||
|
name = "[CP] Check Pods Manifest.lock"; |
||||||
|
outputFileListPaths = ( |
||||||
|
); |
||||||
|
outputPaths = ( |
||||||
|
"$(DERIVED_FILE_DIR)/Pods-ios-sample-checkManifestLockResult.txt", |
||||||
|
); |
||||||
|
runOnlyForDeploymentPostprocessing = 0; |
||||||
|
shellPath = /bin/sh; |
||||||
|
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; |
||||||
|
showEnvVarsInLog = 0; |
||||||
|
}; |
||||||
|
/* End PBXShellScriptBuildPhase section */ |
||||||
|
|
||||||
|
/* Begin PBXSourcesBuildPhase section */ |
||||||
|
AB433CC022D7E38000D579CC /* Sources */ = { |
||||||
|
isa = PBXSourcesBuildPhase; |
||||||
|
buildActionMask = 2147483647; |
||||||
|
files = ( |
||||||
|
AB433CCC22D7E38000D579CC /* ViewController.m in Sources */, |
||||||
|
AB433CD722D7E38100D579CC /* main.m in Sources */, |
||||||
|
AB433CC922D7E38000D579CC /* AppDelegate.m in Sources */, |
||||||
|
); |
||||||
|
runOnlyForDeploymentPostprocessing = 0; |
||||||
|
}; |
||||||
|
/* End PBXSourcesBuildPhase section */ |
||||||
|
|
||||||
|
/* Begin PBXVariantGroup section */ |
||||||
|
AB433CCD22D7E38000D579CC /* Main.storyboard */ = { |
||||||
|
isa = PBXVariantGroup; |
||||||
|
children = ( |
||||||
|
AB433CCE22D7E38000D579CC /* Base */, |
||||||
|
); |
||||||
|
name = Main.storyboard; |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
AB433CD222D7E38100D579CC /* LaunchScreen.storyboard */ = { |
||||||
|
isa = PBXVariantGroup; |
||||||
|
children = ( |
||||||
|
AB433CD322D7E38100D579CC /* Base */, |
||||||
|
); |
||||||
|
name = LaunchScreen.storyboard; |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
/* End PBXVariantGroup section */ |
||||||
|
|
||||||
|
/* Begin XCBuildConfiguration section */ |
||||||
|
AB433CD822D7E38100D579CC /* Debug */ = { |
||||||
|
isa = XCBuildConfiguration; |
||||||
|
buildSettings = { |
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO; |
||||||
|
CLANG_ANALYZER_NONNULL = YES; |
||||||
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; |
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; |
||||||
|
CLANG_CXX_LIBRARY = "libc++"; |
||||||
|
CLANG_ENABLE_MODULES = YES; |
||||||
|
CLANG_ENABLE_OBJC_ARC = YES; |
||||||
|
CLANG_ENABLE_OBJC_WEAK = YES; |
||||||
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; |
||||||
|
CLANG_WARN_BOOL_CONVERSION = YES; |
||||||
|
CLANG_WARN_COMMA = YES; |
||||||
|
CLANG_WARN_CONSTANT_CONVERSION = YES; |
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; |
||||||
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; |
||||||
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES; |
||||||
|
CLANG_WARN_EMPTY_BODY = YES; |
||||||
|
CLANG_WARN_ENUM_CONVERSION = YES; |
||||||
|
CLANG_WARN_INFINITE_RECURSION = YES; |
||||||
|
CLANG_WARN_INT_CONVERSION = YES; |
||||||
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; |
||||||
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; |
||||||
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; |
||||||
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; |
||||||
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; |
||||||
|
CLANG_WARN_STRICT_PROTOTYPES = YES; |
||||||
|
CLANG_WARN_SUSPICIOUS_MOVE = YES; |
||||||
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; |
||||||
|
CLANG_WARN_UNREACHABLE_CODE = YES; |
||||||
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; |
||||||
|
CODE_SIGN_IDENTITY = "iPhone Developer"; |
||||||
|
COPY_PHASE_STRIP = NO; |
||||||
|
DEBUG_INFORMATION_FORMAT = dwarf; |
||||||
|
ENABLE_STRICT_OBJC_MSGSEND = YES; |
||||||
|
ENABLE_TESTABILITY = YES; |
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu11; |
||||||
|
GCC_DYNAMIC_NO_PIC = NO; |
||||||
|
GCC_NO_COMMON_BLOCKS = YES; |
||||||
|
GCC_OPTIMIZATION_LEVEL = 0; |
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = ( |
||||||
|
"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 = 12.1; |
||||||
|
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; |
||||||
|
MTL_FAST_MATH = YES; |
||||||
|
ONLY_ACTIVE_ARCH = YES; |
||||||
|
SDKROOT = iphoneos; |
||||||
|
}; |
||||||
|
name = Debug; |
||||||
|
}; |
||||||
|
AB433CD922D7E38100D579CC /* Release */ = { |
||||||
|
isa = XCBuildConfiguration; |
||||||
|
buildSettings = { |
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO; |
||||||
|
CLANG_ANALYZER_NONNULL = YES; |
||||||
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; |
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; |
||||||
|
CLANG_CXX_LIBRARY = "libc++"; |
||||||
|
CLANG_ENABLE_MODULES = YES; |
||||||
|
CLANG_ENABLE_OBJC_ARC = YES; |
||||||
|
CLANG_ENABLE_OBJC_WEAK = YES; |
||||||
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; |
||||||
|
CLANG_WARN_BOOL_CONVERSION = YES; |
||||||
|
CLANG_WARN_COMMA = YES; |
||||||
|
CLANG_WARN_CONSTANT_CONVERSION = YES; |
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; |
||||||
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; |
||||||
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES; |
||||||
|
CLANG_WARN_EMPTY_BODY = YES; |
||||||
|
CLANG_WARN_ENUM_CONVERSION = YES; |
||||||
|
CLANG_WARN_INFINITE_RECURSION = YES; |
||||||
|
CLANG_WARN_INT_CONVERSION = YES; |
||||||
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; |
||||||
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; |
||||||
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; |
||||||
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; |
||||||
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; |
||||||
|
CLANG_WARN_STRICT_PROTOTYPES = YES; |
||||||
|
CLANG_WARN_SUSPICIOUS_MOVE = YES; |
||||||
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; |
||||||
|
CLANG_WARN_UNREACHABLE_CODE = YES; |
||||||
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; |
||||||
|
CODE_SIGN_IDENTITY = "iPhone Developer"; |
||||||
|
COPY_PHASE_STRIP = NO; |
||||||
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; |
||||||
|
ENABLE_NS_ASSERTIONS = NO; |
||||||
|
ENABLE_STRICT_OBJC_MSGSEND = YES; |
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu11; |
||||||
|
GCC_NO_COMMON_BLOCKS = YES; |
||||||
|
GCC_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 = 12.1; |
||||||
|
MTL_ENABLE_DEBUG_INFO = NO; |
||||||
|
MTL_FAST_MATH = YES; |
||||||
|
SDKROOT = iphoneos; |
||||||
|
VALIDATE_PRODUCT = YES; |
||||||
|
}; |
||||||
|
name = Release; |
||||||
|
}; |
||||||
|
AB433CDB22D7E38100D579CC /* Debug */ = { |
||||||
|
isa = XCBuildConfiguration; |
||||||
|
baseConfigurationReference = 72599BE4AC5785D3368D40DD /* Pods-ios-sample.debug.xcconfig */; |
||||||
|
buildSettings = { |
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; |
||||||
|
CODE_SIGN_STYLE = Automatic; |
||||||
|
DEVELOPMENT_TEAM = 6T98ZJNPG5; |
||||||
|
INFOPLIST_FILE = "ios-sample/Info.plist"; |
||||||
|
LD_RUNPATH_SEARCH_PATHS = ( |
||||||
|
"$(inherited)", |
||||||
|
"@executable_path/Frameworks", |
||||||
|
); |
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = "com.google.ios-sample-objc-bazel"; |
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)"; |
||||||
|
TARGETED_DEVICE_FAMILY = "1,2"; |
||||||
|
}; |
||||||
|
name = Debug; |
||||||
|
}; |
||||||
|
AB433CDC22D7E38100D579CC /* Release */ = { |
||||||
|
isa = XCBuildConfiguration; |
||||||
|
baseConfigurationReference = 112D4595FA3E81552DA9E877 /* Pods-ios-sample.release.xcconfig */; |
||||||
|
buildSettings = { |
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; |
||||||
|
CODE_SIGN_STYLE = Automatic; |
||||||
|
DEVELOPMENT_TEAM = 6T98ZJNPG5; |
||||||
|
INFOPLIST_FILE = "ios-sample/Info.plist"; |
||||||
|
LD_RUNPATH_SEARCH_PATHS = ( |
||||||
|
"$(inherited)", |
||||||
|
"@executable_path/Frameworks", |
||||||
|
); |
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = "com.google.ios-sample-objc-bazel"; |
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)"; |
||||||
|
TARGETED_DEVICE_FAMILY = "1,2"; |
||||||
|
}; |
||||||
|
name = Release; |
||||||
|
}; |
||||||
|
/* End XCBuildConfiguration section */ |
||||||
|
|
||||||
|
/* Begin XCConfigurationList section */ |
||||||
|
AB433CBF22D7E38000D579CC /* Build configuration list for PBXProject "ios-sample" */ = { |
||||||
|
isa = XCConfigurationList; |
||||||
|
buildConfigurations = ( |
||||||
|
AB433CD822D7E38100D579CC /* Debug */, |
||||||
|
AB433CD922D7E38100D579CC /* Release */, |
||||||
|
); |
||||||
|
defaultConfigurationIsVisible = 0; |
||||||
|
defaultConfigurationName = Release; |
||||||
|
}; |
||||||
|
AB433CDA22D7E38100D579CC /* Build configuration list for PBXNativeTarget "ios-sample" */ = { |
||||||
|
isa = XCConfigurationList; |
||||||
|
buildConfigurations = ( |
||||||
|
AB433CDB22D7E38100D579CC /* Debug */, |
||||||
|
AB433CDC22D7E38100D579CC /* Release */, |
||||||
|
); |
||||||
|
defaultConfigurationIsVisible = 0; |
||||||
|
defaultConfigurationName = Release; |
||||||
|
}; |
||||||
|
/* End XCConfigurationList section */ |
||||||
|
}; |
||||||
|
rootObject = AB433CBC22D7E38000D579CC /* Project object */; |
||||||
|
} |
@ -0,0 +1,25 @@ |
|||||||
|
/*
|
||||||
|
* |
||||||
|
* Copyright 2019 gRPC authors. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
*/ |
||||||
|
|
||||||
|
#import <UIKit/UIKit.h> |
||||||
|
|
||||||
|
@interface AppDelegate : UIResponder<UIApplicationDelegate> |
||||||
|
|
||||||
|
@property(strong, nonatomic) UIWindow* window; |
||||||
|
|
||||||
|
@end |
@ -0,0 +1,63 @@ |
|||||||
|
/* |
||||||
|
* |
||||||
|
* Copyright 2019 gRPC authors. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0 |
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
*/ |
||||||
|
|
||||||
|
#import "AppDelegate.h" |
||||||
|
|
||||||
|
@interface AppDelegate () |
||||||
|
|
||||||
|
@end |
||||||
|
|
||||||
|
@implementation AppDelegate |
||||||
|
|
||||||
|
- (BOOL)application:(UIApplication *)application |
||||||
|
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { |
||||||
|
// Override point for customization after application launch. |
||||||
|
return YES; |
||||||
|
} |
||||||
|
|
||||||
|
- (void)applicationWillResignActive:(UIApplication *)application { |
||||||
|
// Sent when the application is about to move from active to inactive state. This can occur for |
||||||
|
// certain types of temporary interruptions (such as an incoming phone call or SMS message) or |
||||||
|
// when the user quits the application and it begins the transition to the background state. Use |
||||||
|
// this method to pause ongoing tasks, disable timers, and invalidate graphics rendering |
||||||
|
// callbacks. Games should use this method to pause the game. |
||||||
|
} |
||||||
|
|
||||||
|
- (void)applicationDidEnterBackground:(UIApplication *)application { |
||||||
|
// Use this method to release shared resources, save user data, invalidate timers, and store |
||||||
|
// enough application state information to restore your application to its current state in case |
||||||
|
// it is terminated later. If your application supports background execution, this method is |
||||||
|
// called instead of applicationWillTerminate: when the user quits. |
||||||
|
} |
||||||
|
|
||||||
|
- (void)applicationWillEnterForeground:(UIApplication *)application { |
||||||
|
// Called as part of the transition from the background to the active state; here you can undo |
||||||
|
// many of the changes made on entering the background. |
||||||
|
} |
||||||
|
|
||||||
|
- (void)applicationDidBecomeActive:(UIApplication *)application { |
||||||
|
// Restart any tasks that were paused (or not yet started) while the application was inactive. If |
||||||
|
// the application was previously in the background, optionally refresh the user interface. |
||||||
|
} |
||||||
|
|
||||||
|
- (void)applicationWillTerminate:(UIApplication *)application { |
||||||
|
// Called when the application is about to terminate. Save data if appropriate. See also |
||||||
|
// applicationDidEnterBackground:. |
||||||
|
} |
||||||
|
|
||||||
|
@end |
@ -0,0 +1,98 @@ |
|||||||
|
{ |
||||||
|
"images" : [ |
||||||
|
{ |
||||||
|
"idiom" : "iphone", |
||||||
|
"size" : "20x20", |
||||||
|
"scale" : "2x" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "iphone", |
||||||
|
"size" : "20x20", |
||||||
|
"scale" : "3x" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "iphone", |
||||||
|
"size" : "29x29", |
||||||
|
"scale" : "2x" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "iphone", |
||||||
|
"size" : "29x29", |
||||||
|
"scale" : "3x" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "iphone", |
||||||
|
"size" : "40x40", |
||||||
|
"scale" : "2x" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "iphone", |
||||||
|
"size" : "40x40", |
||||||
|
"scale" : "3x" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "iphone", |
||||||
|
"size" : "60x60", |
||||||
|
"scale" : "2x" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "iphone", |
||||||
|
"size" : "60x60", |
||||||
|
"scale" : "3x" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "ipad", |
||||||
|
"size" : "20x20", |
||||||
|
"scale" : "1x" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "ipad", |
||||||
|
"size" : "20x20", |
||||||
|
"scale" : "2x" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "ipad", |
||||||
|
"size" : "29x29", |
||||||
|
"scale" : "1x" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "ipad", |
||||||
|
"size" : "29x29", |
||||||
|
"scale" : "2x" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "ipad", |
||||||
|
"size" : "40x40", |
||||||
|
"scale" : "1x" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "ipad", |
||||||
|
"size" : "40x40", |
||||||
|
"scale" : "2x" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "ipad", |
||||||
|
"size" : "76x76", |
||||||
|
"scale" : "1x" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "ipad", |
||||||
|
"size" : "76x76", |
||||||
|
"scale" : "2x" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "ipad", |
||||||
|
"size" : "83.5x83.5", |
||||||
|
"scale" : "2x" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "ios-marketing", |
||||||
|
"size" : "1024x1024", |
||||||
|
"scale" : "1x" |
||||||
|
} |
||||||
|
], |
||||||
|
"info" : { |
||||||
|
"version" : 1, |
||||||
|
"author" : "xcode" |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,6 @@ |
|||||||
|
{ |
||||||
|
"info" : { |
||||||
|
"version" : 1, |
||||||
|
"author" : "xcode" |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,25 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
||||||
|
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM"> |
||||||
|
<dependencies> |
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/> |
||||||
|
<capability name="Safe area layout guides" minToolsVersion="9.0"/> |
||||||
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> |
||||||
|
</dependencies> |
||||||
|
<scenes> |
||||||
|
<!--View Controller--> |
||||||
|
<scene sceneID="EHf-IW-A2E"> |
||||||
|
<objects> |
||||||
|
<viewController id="01J-lp-oVM" sceneMemberID="viewController"> |
||||||
|
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3"> |
||||||
|
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/> |
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> |
||||||
|
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
||||||
|
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/> |
||||||
|
</view> |
||||||
|
</viewController> |
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/> |
||||||
|
</objects> |
||||||
|
<point key="canvasLocation" x="53" y="375"/> |
||||||
|
</scene> |
||||||
|
</scenes> |
||||||
|
</document> |
@ -0,0 +1,38 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="BYZ-38-t0r"> |
||||||
|
<device id="retina4_7" orientation="portrait"> |
||||||
|
<adaptation id="fullscreen"/> |
||||||
|
</device> |
||||||
|
<dependencies> |
||||||
|
<deployment identifier="iOS"/> |
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14460.20"/> |
||||||
|
<capability name="Safe area layout guides" minToolsVersion="9.0"/> |
||||||
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> |
||||||
|
</dependencies> |
||||||
|
<scenes> |
||||||
|
<!--View Controller--> |
||||||
|
<scene sceneID="tne-QT-ifu"> |
||||||
|
<objects> |
||||||
|
<viewController id="BYZ-38-t0r" customClass="ViewController" sceneMemberID="viewController"> |
||||||
|
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC"> |
||||||
|
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/> |
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> |
||||||
|
<subviews> |
||||||
|
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="iTL-zv-YSZ"> |
||||||
|
<rect key="frame" x="164" y="318" width="46" height="30"/> |
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> |
||||||
|
<state key="normal" title="Button"/> |
||||||
|
<connections> |
||||||
|
<action selector="tapCall:" destination="BYZ-38-t0r" eventType="touchUpInside" id="c5c-m5-SGC"/> |
||||||
|
</connections> |
||||||
|
</button> |
||||||
|
</subviews> |
||||||
|
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
||||||
|
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/> |
||||||
|
</view> |
||||||
|
</viewController> |
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/> |
||||||
|
</objects> |
||||||
|
</scene> |
||||||
|
</scenes> |
||||||
|
</document> |
@ -0,0 +1,45 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
||||||
|
<plist version="1.0"> |
||||||
|
<dict> |
||||||
|
<key>CFBundleDevelopmentRegion</key> |
||||||
|
<string>en_US</string> |
||||||
|
<key>CFBundleExecutable</key> |
||||||
|
<string>$(EXECUTABLE_NAME)</string> |
||||||
|
<key>CFBundleIdentifier</key> |
||||||
|
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> |
||||||
|
<key>CFBundleInfoDictionaryVersion</key> |
||||||
|
<string>6.0</string> |
||||||
|
<key>CFBundleName</key> |
||||||
|
<string>$(PRODUCT_NAME)</string> |
||||||
|
<key>CFBundlePackageType</key> |
||||||
|
<string>APPL</string> |
||||||
|
<key>CFBundleShortVersionString</key> |
||||||
|
<string>1.0</string> |
||||||
|
<key>CFBundleVersion</key> |
||||||
|
<string>1</string> |
||||||
|
<key>LSRequiresIPhoneOS</key> |
||||||
|
<true/> |
||||||
|
<key>UILaunchStoryboardName</key> |
||||||
|
<string>LaunchScreen</string> |
||||||
|
<key>UIMainStoryboardFile</key> |
||||||
|
<string>Main</string> |
||||||
|
<key>UIRequiredDeviceCapabilities</key> |
||||||
|
<array> |
||||||
|
<string>armv7</string> |
||||||
|
</array> |
||||||
|
<key>UISupportedInterfaceOrientations</key> |
||||||
|
<array> |
||||||
|
<string>UIInterfaceOrientationPortrait</string> |
||||||
|
<string>UIInterfaceOrientationLandscapeLeft</string> |
||||||
|
<string>UIInterfaceOrientationLandscapeRight</string> |
||||||
|
</array> |
||||||
|
<key>UISupportedInterfaceOrientations~ipad</key> |
||||||
|
<array> |
||||||
|
<string>UIInterfaceOrientationPortrait</string> |
||||||
|
<string>UIInterfaceOrientationPortraitUpsideDown</string> |
||||||
|
<string>UIInterfaceOrientationLandscapeLeft</string> |
||||||
|
<string>UIInterfaceOrientationLandscapeRight</string> |
||||||
|
</array> |
||||||
|
</dict> |
||||||
|
</plist> |
@ -0,0 +1,23 @@ |
|||||||
|
/*
|
||||||
|
* |
||||||
|
* Copyright 2019 gRPC authors. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
*/ |
||||||
|
|
||||||
|
#import <UIKit/UIKit.h> |
||||||
|
|
||||||
|
@interface ViewController : UIViewController |
||||||
|
|
||||||
|
@end |
@ -0,0 +1,86 @@ |
|||||||
|
/* |
||||||
|
* |
||||||
|
* Copyright 2019 gRPC authors. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0 |
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
*/ |
||||||
|
|
||||||
|
#import "ViewController.h" |
||||||
|
|
||||||
|
#import <GRPCClient/GRPCCall.h> |
||||||
|
#if COCOAPODS |
||||||
|
#import <RemoteTest/Messages.pbobjc.h> |
||||||
|
#import <RemoteTest/Test.pbrpc.h> |
||||||
|
#else |
||||||
|
#import "src/objective-c/examples/BazelBuildSamples/Messages.pbobjc.h" |
||||||
|
#import "src/objective-c/examples/BazelBuildSamples/rmt/Test.pbrpc.h" |
||||||
|
#endif |
||||||
|
|
||||||
|
static NSString *const kPackage = @"grpc.testing"; |
||||||
|
static NSString *const kService = @"TestService"; |
||||||
|
|
||||||
|
@interface ViewController ()<GRPCResponseHandler> |
||||||
|
|
||||||
|
@end |
||||||
|
|
||||||
|
@implementation ViewController { |
||||||
|
GRPCCallOptions *_options; |
||||||
|
} |
||||||
|
|
||||||
|
- (void)viewDidLoad { |
||||||
|
[super viewDidLoad]; |
||||||
|
|
||||||
|
GRPCMutableCallOptions *options = [[GRPCMutableCallOptions alloc] init]; |
||||||
|
// optionally modify options |
||||||
|
_options = options; |
||||||
|
} |
||||||
|
|
||||||
|
- (IBAction)tapCall:(id)sender { |
||||||
|
GRPCProtoMethod *kUnaryCallMethod = |
||||||
|
[[GRPCProtoMethod alloc] initWithPackage:kPackage service:kService method:@"UnaryCall"]; |
||||||
|
|
||||||
|
GRPCRequestOptions *requestOptions = |
||||||
|
[[GRPCRequestOptions alloc] initWithHost:@"grpc-test.sandbox.googleapis.com" |
||||||
|
path:kUnaryCallMethod.HTTPPath |
||||||
|
safety:GRPCCallSafetyCacheableRequest]; |
||||||
|
|
||||||
|
GRPCCall2 *call = [[GRPCCall2 alloc] initWithRequestOptions:requestOptions |
||||||
|
responseHandler:self |
||||||
|
callOptions:_options]; |
||||||
|
|
||||||
|
RMTSimpleRequest *request = [RMTSimpleRequest message]; |
||||||
|
request.responseSize = 100; |
||||||
|
|
||||||
|
[call start]; |
||||||
|
[call writeData:[request data]]; |
||||||
|
[call finish]; |
||||||
|
} |
||||||
|
|
||||||
|
- (dispatch_queue_t)dispatchQueue { |
||||||
|
return dispatch_get_main_queue(); |
||||||
|
} |
||||||
|
|
||||||
|
- (void)didReceiveInitialMetadata:(NSDictionary *)initialMetadata { |
||||||
|
NSLog(@"Header: %@", initialMetadata); |
||||||
|
} |
||||||
|
|
||||||
|
- (void)didReceiveData:(id)data { |
||||||
|
NSLog(@"Message: %@", data); |
||||||
|
} |
||||||
|
|
||||||
|
- (void)didCloseWithTrailingMetadata:(NSDictionary *)trailingMetadata error:(NSError *)error { |
||||||
|
NSLog(@"Trailer: %@\nError: %@", trailingMetadata, error); |
||||||
|
} |
||||||
|
|
||||||
|
@end |
@ -0,0 +1,26 @@ |
|||||||
|
/* |
||||||
|
* |
||||||
|
* Copyright 2019 gRPC authors. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0 |
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
*/ |
||||||
|
|
||||||
|
#import <UIKit/UIKit.h> |
||||||
|
#import "AppDelegate.h" |
||||||
|
|
||||||
|
int main(int argc, char* argv[]) { |
||||||
|
@autoreleasepool { |
||||||
|
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,118 @@ |
|||||||
|
// Copyright 2015 gRPC authors. |
||||||
|
// |
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
// you may not use this file except in compliance with the License. |
||||||
|
// You may obtain a copy of the License at |
||||||
|
// |
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0 |
||||||
|
// |
||||||
|
// Unless required by applicable law or agreed to in writing, software |
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
// See the License for the specific language governing permissions and |
||||||
|
// limitations under the License. |
||||||
|
|
||||||
|
// Message definitions to be used by integration test service definitions. |
||||||
|
|
||||||
|
syntax = "proto3"; |
||||||
|
|
||||||
|
package grpc.testing; |
||||||
|
|
||||||
|
option objc_class_prefix = "RMT"; |
||||||
|
|
||||||
|
// The type of payload that should be returned. |
||||||
|
enum PayloadType { |
||||||
|
// Compressable text format. |
||||||
|
COMPRESSABLE = 0; |
||||||
|
|
||||||
|
// Uncompressable binary format. |
||||||
|
UNCOMPRESSABLE = 1; |
||||||
|
|
||||||
|
// Randomly chosen from all other formats defined in this enum. |
||||||
|
RANDOM = 2; |
||||||
|
} |
||||||
|
|
||||||
|
// A block of data, to simply increase gRPC message size. |
||||||
|
message Payload { |
||||||
|
// The type of data in body. |
||||||
|
PayloadType type = 1; |
||||||
|
// Primary contents of payload. |
||||||
|
bytes body = 2; |
||||||
|
} |
||||||
|
|
||||||
|
// Unary request. |
||||||
|
message SimpleRequest { |
||||||
|
// Desired payload type in the response from the server. |
||||||
|
// If response_type is RANDOM, server randomly chooses one from other formats. |
||||||
|
PayloadType response_type = 1; |
||||||
|
|
||||||
|
// Desired payload size in the response from the server. |
||||||
|
// If response_type is COMPRESSABLE, this denotes the size before compression. |
||||||
|
int32 response_size = 2; |
||||||
|
|
||||||
|
// Optional input payload sent along with the request. |
||||||
|
Payload payload = 3; |
||||||
|
|
||||||
|
// Whether SimpleResponse should include username. |
||||||
|
bool fill_username = 4; |
||||||
|
|
||||||
|
// Whether SimpleResponse should include OAuth scope. |
||||||
|
bool fill_oauth_scope = 5; |
||||||
|
} |
||||||
|
|
||||||
|
// Unary response, as configured by the request. |
||||||
|
message SimpleResponse { |
||||||
|
// Payload to increase message size. |
||||||
|
Payload payload = 1; |
||||||
|
// The user the request came from, for verifying authentication was |
||||||
|
// successful when the client expected it. |
||||||
|
string username = 2; |
||||||
|
// OAuth scope. |
||||||
|
string oauth_scope = 3; |
||||||
|
} |
||||||
|
|
||||||
|
// Client-streaming request. |
||||||
|
message StreamingInputCallRequest { |
||||||
|
// Optional input payload sent along with the request. |
||||||
|
Payload payload = 1; |
||||||
|
|
||||||
|
// Not expecting any payload from the response. |
||||||
|
} |
||||||
|
|
||||||
|
// Client-streaming response. |
||||||
|
message StreamingInputCallResponse { |
||||||
|
// Aggregated size of payloads received from the client. |
||||||
|
int32 aggregated_payload_size = 1; |
||||||
|
} |
||||||
|
|
||||||
|
// Configuration for a particular response. |
||||||
|
message ResponseParameters { |
||||||
|
// Desired payload sizes in responses from the server. |
||||||
|
// If response_type is COMPRESSABLE, this denotes the size before compression. |
||||||
|
int32 size = 1; |
||||||
|
|
||||||
|
// Desired interval between consecutive responses in the response stream in |
||||||
|
// microseconds. |
||||||
|
int32 interval_us = 2; |
||||||
|
} |
||||||
|
|
||||||
|
// Server-streaming request. |
||||||
|
message StreamingOutputCallRequest { |
||||||
|
// Desired payload type in the response from the server. |
||||||
|
// If response_type is RANDOM, the payload from each response in the stream |
||||||
|
// might be of different types. This is to simulate a mixed type of payload |
||||||
|
// stream. |
||||||
|
PayloadType response_type = 1; |
||||||
|
|
||||||
|
// Configuration for each expected response message. |
||||||
|
repeated ResponseParameters response_parameters = 2; |
||||||
|
|
||||||
|
// Optional input payload sent along with the request. |
||||||
|
Payload payload = 3; |
||||||
|
} |
||||||
|
|
||||||
|
// Server-streaming response, as configured by the request and parameters. |
||||||
|
message StreamingOutputCallResponse { |
||||||
|
// Payload to increase response size. |
||||||
|
Payload payload = 1; |
||||||
|
} |
@ -0,0 +1,28 @@ |
|||||||
|
# gRPC Bazel BUILD file. |
||||||
|
# |
||||||
|
# Copyright 2019 gRPC authors. |
||||||
|
# |
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
# you may not use this file except in compliance with the License. |
||||||
|
# You may obtain a copy of the License at |
||||||
|
# |
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0 |
||||||
|
# |
||||||
|
# Unless required by applicable law or agreed to in writing, software |
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
# See the License for the specific language governing permissions and |
||||||
|
# limitations under the License. |
||||||
|
|
||||||
|
licenses(["notice"]) # Apache v2 |
||||||
|
|
||||||
|
package(default_visibility = ["//visibility:public"]) |
||||||
|
|
||||||
|
exports_files(["LICENSE"]) |
||||||
|
|
||||||
|
proto_library( |
||||||
|
name = "test_proto", |
||||||
|
srcs = ["test.proto"], |
||||||
|
deps = ["//src/objective-c/examples:messages_proto"], |
||||||
|
visibility = ["//visibility:public"], |
||||||
|
) |
@ -0,0 +1,57 @@ |
|||||||
|
// Copyright 2015 gRPC authors. |
||||||
|
// |
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
// you may not use this file except in compliance with the License. |
||||||
|
// You may obtain a copy of the License at |
||||||
|
// |
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0 |
||||||
|
// |
||||||
|
// Unless required by applicable law or agreed to in writing, software |
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
// See the License for the specific language governing permissions and |
||||||
|
// limitations under the License. |
||||||
|
|
||||||
|
// An integration test service that covers all the method signature permutations |
||||||
|
// of unary/streaming requests/responses. |
||||||
|
syntax = "proto3"; |
||||||
|
|
||||||
|
import "google/protobuf/empty.proto"; |
||||||
|
import "src/objective-c/examples/BazelBuildSamples/messages.proto"; |
||||||
|
|
||||||
|
package grpc.testing; |
||||||
|
|
||||||
|
option objc_class_prefix = "RMT"; |
||||||
|
|
||||||
|
// A simple service to test the various types of RPCs and experiment with |
||||||
|
// performance with various types of payload. |
||||||
|
service TestService { |
||||||
|
// One empty request followed by one empty response. |
||||||
|
rpc EmptyCall(google.protobuf.Empty) returns (google.protobuf.Empty); |
||||||
|
|
||||||
|
// One request followed by one response. |
||||||
|
rpc UnaryCall(SimpleRequest) returns (SimpleResponse); |
||||||
|
|
||||||
|
// One request followed by a sequence of responses (streamed download). |
||||||
|
// The server returns the payload with client desired type and sizes. |
||||||
|
rpc StreamingOutputCall(StreamingOutputCallRequest) |
||||||
|
returns (stream StreamingOutputCallResponse); |
||||||
|
|
||||||
|
// A sequence of requests followed by one response (streamed upload). |
||||||
|
// The server returns the aggregated size of client payload as the result. |
||||||
|
rpc StreamingInputCall(stream StreamingInputCallRequest) |
||||||
|
returns (StreamingInputCallResponse); |
||||||
|
|
||||||
|
// A sequence of requests with each request served by the server immediately. |
||||||
|
// As one request could lead to multiple responses, this interface |
||||||
|
// demonstrates the idea of full duplexing. |
||||||
|
rpc FullDuplexCall(stream StreamingOutputCallRequest) |
||||||
|
returns (stream StreamingOutputCallResponse); |
||||||
|
|
||||||
|
// A sequence of requests followed by a sequence of responses. |
||||||
|
// The server buffers all the client requests and then serves them in order. A |
||||||
|
// stream of responses are returned to the client when the server starts with |
||||||
|
// first request. |
||||||
|
rpc HalfDuplexCall(stream StreamingOutputCallRequest) |
||||||
|
returns (stream StreamingOutputCallResponse); |
||||||
|
} |
Loading…
Reference in new issue