Giter Site home page Giter Site logo

meituan's Introduction

meituan

高仿美团iOS版,版本号5.7,不可用于其他商业用途
iOS技术交流群:112365317

运行

1.终端切换到工程目录

$ pod install

2.双击meituan.xcworkspace运行

注:采用cocoapods管理第三方库,请双击meituan.xcworkspace启动工程。不要双击meituan.xcodeproj启动,否则会提示“library not found for -lPods-AFNetworking”

百度糯米官方版:采用少量的xib文件 + 大量的纯代码方式开发的。

高仿糯米版本:采用storyboard创建界面为主方式来开发,跟官方版做区别。

美团官方版:storyboard创建界面为主方式开发。

高仿的美团5.7:以纯代码方式来开发,以作区别。

高仿糯米iOS

高仿美团iOS

React Native仿美团小demo https://github.com/lookingstars/RNMeituan


注:采用cocoapods管理第三方库,请双击meituan.xcworkspace启动工程。不要双击meituan.xcodeproj启动,否则会提示“library not found for -lPods-AFNetworking”

截图链接:http://blog.csdn.net/l863784757/article/details/46912223

Xcode7,真机调试,如果出现下面的错误提示,提示友盟的library不支持bitcode

解决办法:1.更新library

      2.关闭bitcode(Xcode7+以上才有,以下的没有这个配置项)

image

1.更新library: 友盟官方适配iOS9方案,暂时还没有适配iOS9的library。 友盟官方解决方案:http://dev.umeng.com/social/ios/ios9

2.关闭bitcode 选择工程,target-》build setting -》enable bitcode设置为NO

meituan's People

Contributors

lookingstars avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

meituan's Issues

报错。

ld: library not found for -lPods-AFNetworking
clang: error: linker command failed with exit code 1 (use -v to see invocation)

cocoa pods更新,请修改Podfile文件

platform :ios, '7.0'
use_frameworks!
inhibit_all_warnings!
target ‘meituan’
pod 'AFNetworking', '>2.0'
pod 'SDWebImage', '3.7.2'
pod 'MBProgressHUD', '
> 0.9.1'
pod 'MJRefresh', '1.4.5'
pod 'MJExtension', '1.2.1'
pod 'SVProgressHUD', '1.1.3'
pod 'UMengAnalytics', '3.4.6'
pod 'AMap3DMap', '2.5.0'
pod 'AMapSearch', '2.5.0'
pod 'AFNetworkActivityLogger'

遇到了下面的错误

clang: error: no such file or directory: '/Users/csc/Downloads/meituan-master/Pods/Target Support Files/MJExtension/MJExtension-dummy.m'
clang: error: no input files

[!] Invalid `Podfile` file: Invalid char `\x7F' in expression

你好,这个是什么问题?

13:53:21 leewi9 /Volumes/BX200/DEV/TEST/meituan-master  第6条 $ pod install --no-repo-update

[!] Invalid `Podfile` file: Invalid char `\x7F' in expression
/Volumes/BX200/DEV/TEST/meituan-master/Podfile:10: Invalid char `\x7F' in expression. Updating CocoaPods might fix the issue.

 #  from /Volumes/BX200/DEV/TEST/meituan-master/Podfile:9
 #  -------------------------------------------
 #  pod 'UMengAnalytics'
 >  pod �'AMap3DMap'
 #  pod �'AMapSearch'
 #  -------------------------------------------

xcode 10 中 高德报错

Undefined symbols for architecture x86_64:
"std::basic_string<char, std::char_traits, std::allocator >::~basic_string()", referenced from:
__GLOBAL__I_a in AMapSearchKit
__GLOBAL__I_a in AMapSearchKit
__GLOBAL__I_a in AMapSearchKit
"std::string::_Rep::_S_create(unsigned long, unsigned long, std::allocator const&)", referenced from:
char* std::string::_S_construct<char*>(char*, char*, std::allocator const&, std::forward_iterator_tag) in AMapSearchKit
"std::string::_Rep::_S_terminal", referenced from:
char* std::string::_S_construct<char*>(char*, char*, std::allocator const&, std::forward_iterator_tag) in AMapSearchKit
"std::__throw_logic_error(char const*)", referenced from:
char* std::string::_S_construct<char*>(char*, char*, std::allocator const&, std::forward_iterator_tag) in AMapSearchKit
"std::__throw_out_of_range(char const*)", referenced from:
-[GLESUtility drawRegionUsingTriangleFan:points:pointCount:fillColor:strokeLineWidth:limit:] in MAMapKit
"std::__throw_length_error(char const*)", referenced from:
std::vector<google::protobuf::(anonymous namespace)::OptionsToInterpret, std::allocator<google::protobuf::(anonymous namespace)::OptionsToInterpret> >::push_back(google::protobuf::(anonymous namespace)::OptionsToInterpret const&) in AMapSearchKit
std::vector<google::protobuf::FieldDescriptor const*, std::allocator<google::protobuf::FieldDescriptor const*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<google::protobuf::FieldDescriptor const**, std::vector<google::protobuf::FieldDescriptor const*, std::allocator<google::protobuf::FieldDescriptor const*> > >, google::protobuf::FieldDescriptor const* const&) in AMapSearchKit
std::vector<std::string, std::allocatorstd::string >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::string*, std::vector<std::string, std::allocatorstd::string > >, std::string const&) in AMapSearchKit
std::vector<google::protobuf::Message*, std::allocatorgoogle::protobuf::Message* >::_M_insert_aux(__gnu_cxx::__normal_iterator<google::protobuf::Message**, std::vector<google::protobuf::Message*, std::allocatorgoogle::protobuf::Message* > >, google::protobuf::Message* const&) in AMapSearchKit
std::vector<void*, std::allocator<void*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<void**, std::vector<void*, std::allocator<void*> > >, void* const&) in AMapSearchKit
std::vector<google::protobuf::FileDescriptorTables*, std::allocatorgoogle::protobuf::FileDescriptorTables* >::_M_insert_aux(__gnu_cxx::__normal_iterator<google::protobuf::FileDescriptorTables**, std::vector<google::protobuf::FileDescriptorTables*, std::allocatorgoogle::protobuf::FileDescriptorTables* > >, google::protobuf::FileDescriptorTables* const&) in AMapSearchKit
std::vector<std::string*, std::allocatorstd::string* >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::string**, std::vector<std::string*, std::allocatorstd::string* > >, std::string* const&) in AMapSearchKit
...
"std::string::find(char, unsigned long) const", referenced from:
google::protobuf::DescriptorBuilder::LookupSymbolNoPlaceholder(std::string const&, std::string const&, google::protobuf::DescriptorBuilder::ResolveMode) in AMapSearchKit
"std::string::erase(unsigned long, unsigned long)", referenced from:
google::protobuf::DescriptorBuilder::LookupSymbolNoPlaceholder(std::string const&, std::string const&, google::protobuf::DescriptorBuilder::ResolveMode) in AMapSearchKit
"std::_Rb_tree_insert_and_rebalance(bool, std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::_Rb_tree_node_base&)", referenced from:
std::_Rb_tree<int, std::pair<int const, google::protobuf::internal::ExtensionSet::Extension>, std::_Select1st<std::pair<int const, google::protobuf::internal::ExtensionSet::Extension> >, std::less, std::allocator<std::pair<int const, google::protobuf::internal::ExtensionSet::Extension> > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<int const, google::protobuf::internal::ExtensionSet::Extension> const&) in AMapSearchKit
std::_Rb_tree<std::string, std::string, std::_Identitystd::string, std::lessstd::string, std::allocatorstd::string >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::string const&) in AMapSearchKit
std::_Rb_tree<google::protobuf::Descriptor const*, google::protobuf::Descriptor const*, std::_Identity<google::protobuf::Descriptor const*>, std::less<google::protobuf::Descriptor const*>, std::allocator<google::protobuf::Descriptor const*> >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, google::protobuf::Descriptor const* const&) in AMapSearchKit
std::_Rb_tree<std::pair<google::protobuf::Descriptor const*, int>, std::pair<std::pair<google::protobuf::Descriptor const*, int> const, google::protobuf::FieldDescriptor const*>, std::_Select1st<std::pair<std::pair<google::protobuf::Descriptor const*, int> const, google::protobuf::FieldDescriptor const*> >, std::less<std::pair<google::protobuf::Descriptor const*, int> >, std::allocator<std::pair<std::pair<google::protobuf::Descriptor const*, int> const, google::protobuf::FieldDescriptor const*> > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<std::pair<google::protobuf::Descriptor const*, int> const, google::protobuf::FieldDescriptor const*> const&) in AMapSearchKit
std::_Rb_tree<std::pair<std::string, int>, std::pair<std::pair<std::string, int> const, std::pair<void const*, int> >, std::_Select1st<std::pair<std::pair<std::string, int> const, std::pair<void const*, int> > >, std::less<std::pair<std::string, int> >, std::allocator<std::pair<std::pair<std::string, int> const, std::pair<void const*, int> > > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<std::pair<std::string, int> const, std::pair<void const*, int> > const&) in AMapSearchKit
std::_Rb_tree<std::string, std::pair<std::string const, std::pair<void const*, int> >, std::_Select1st<std::pair<std::string const, std::pair<void const*, int> > >, std::lessstd::string, std::allocator<std::pair<std::string const, std::pair<void const*, int> > > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<std::string const, std::pair<void const*, int> > const&) in AMapSearchKit
"std::string::push_back(char)", referenced from:
google::protobuf::DescriptorBuilder::BuildFieldOrExtension(google::protobuf::FieldDescriptorProto const&, google::protobuf::Descriptor const*, google::protobuf::FieldDescriptor*, bool) in AMapSearchKit
google::protobuf::io::Tokenizer::ParseStringAppend(std::string const&, std::string*) in AMapSearchKit
google::protobuf::SimpleDescriptorDatabase::DescriptorIndex<std::pair<void const*, int> >::AddFile(google::protobuf::FileDescriptorProto const&, std::pair<void const*, int>) in AMapSearchKit
"std::_Rb_tree_rebalance_for_erase(std::_Rb_tree_node_base*, std::_Rb_tree_node_base&)", referenced from:
std::_Rb_tree<std::pair<google::protobuf::Descriptor const*, int>, std::pair<std::pair<google::protobuf::Descriptor const*, int> const, google::protobuf::FieldDescriptor const*>, std::_Select1st<std::pair<std::pair<google::protobuf::Descriptor const*, int> const, google::protobuf::FieldDescriptor const*> >, std::less<std::pair<google::protobuf::Descriptor const*, int> >, std::allocator<std::pair<std::pair<google::protobuf::Descriptor const*, int> const, google::protobuf::FieldDescriptor const*> > >::erase(std::_Rb_tree_iterator<std::pair<std::pair<google::protobuf::Descriptor const*, int> const, google::protobuf::FieldDescriptor const*> >, std::_Rb_tree_iterator<std::pair<std::pair<google::protobuf::Descriptor const*, int> const, google::protobuf::FieldDescriptor const*> >) in AMapSearchKit
"std::string::compare(char const*) const", referenced from:
google::protobuf::DescriptorBuilder::BuildFieldOrExtension(google::protobuf::FieldDescriptorProto const&, google::protobuf::Descriptor const*, google::protobuf::FieldDescriptor*, bool) in AMapSearchKit
google::protobuf::DescriptorBuilder::OptionInterpreter::InterpretSingleOption(google::protobuf::Message*) in AMapSearchKit
google::protobuf::DescriptorBuilder::OptionInterpreter::SetOptionValue(google::protobuf::FieldDescriptor const*, google::protobuf::UnknownFieldSet*) in AMapSearchKit
google::protobuf::TextFormat::Parser::ParserImpl::ConsumeFieldValue(google::protobuf::Message*, google::protobuf::Reflection const*, google::protobuf::FieldDescriptor const*) in AMapSearchKit
google::protobuf::TextFormat::Parser::ParserImpl::ConsumeDouble(double*) in AMapSearchKit
"std::string::_M_leak_hard()", referenced from:
google::protobuf::io::StringOutputStream::Next(void**, int*) in AMapSearchKit
google::protobuf::strings::SubstituteAndAppend(std::string*, char const*, google::protobuf::strings::internal::SubstituteArg const&, google::protobuf::strings::internal::SubstituteArg const&, google::protobuf::strings::internal::SubstituteArg const&, google::protobuf::strings::internal::SubstituteArg const&, google::protobuf::strings::internal::SubstituteArg const&, google::protobuf::strings::internal::SubstituteArg const&, google::protobuf::strings::internal::SubstituteArg const&, google::protobuf::strings::internal::SubstituteArg const&, google::protobuf::strings::internal::SubstituteArg const&, google::protobuf::strings::internal::SubstituteArg const&) in AMapSearchKit
google::protobuf::io::CodedInputStream::ReadString(std::string*, int) in AMapSearchKit
google::protobuf::DescriptorBuilder::BuildFieldOrExtension(google::protobuf::FieldDescriptorProto const&, google::protobuf::Descriptor const*, google::protobuf::FieldDescriptor*, bool) in AMapSearchKit
google::protobuf::internal::WireFormatLite::ReadString(google::protobuf::io::CodedInputStream*, std::string*) in AMapSearchKit
google::protobuf::internal::WireFormatLite::ReadBytes(google::protobuf::io::CodedInputStream*, std::string*) in AMapSearchKit
google::protobuf::MessageLite::AppendPartialToString(std::string*) const in AMapSearchKit
...
"std::string::append(unsigned long, char)", referenced from:
google::protobuf::DescriptorBuilder::BuildMessage(google::protobuf::DescriptorProto const&, google::protobuf::Descriptor const*, google::protobuf::Descriptor*) in AMapSearchKit
google::protobuf::DescriptorBuilder::BuildEnum(google::protobuf::EnumDescriptorProto const&, google::protobuf::Descriptor const*, google::protobuf::EnumDescriptor*) in AMapSearchKit
google::protobuf::DescriptorBuilder::BuildService(google::protobuf::ServiceDescriptorProto const&, void const*, google::protobuf::ServiceDescriptor*) in AMapSearchKit
google::protobuf::DescriptorBuilder::BuildFieldOrExtension(google::protobuf::FieldDescriptorProto const&, google::protobuf::Descriptor const*, google::protobuf::FieldDescriptor*, bool) in AMapSearchKit
google::protobuf::DescriptorBuilder::BuildMethod(google::protobuf::MethodDescriptorProto const&, google::protobuf::ServiceDescriptor const*, google::protobuf::MethodDescriptor*) in AMapSearchKit
google::protobuf::DescriptorBuilder::LookupSymbolNoPlaceholder(std::string const&, std::string const&, google::protobuf::DescriptorBuilder::ResolveMode) in AMapSearchKit
"std::ios_base::Init::~Init()", referenced from:
__GLOBAL__I_a in AMapSearchKit
__GLOBAL__I_a in MAMapKit
__GLOBAL__I_a in MAMapKit
__GLOBAL__I_a in MAMapKit
__GLOBAL__I_a in MAMapKit
__GLOBAL__I_a in MAMapKit
__GLOBAL__I_a in MAMapKit
...
"std::_Rb_tree_decrement(std::_Rb_tree_node_base*)", referenced from:
std::_Rb_tree<int, std::pair<int const, google::protobuf::internal::ExtensionSet::Extension>, std::_Select1st<std::pair<int const, google::protobuf::internal::ExtensionSet::Extension> >, std::less, std::allocator<std::pair<int const, google::protobuf::internal::ExtensionSet::Extension> > >::_M_insert_unique(std::pair<int const, google::protobuf::internal::ExtensionSet::Extension> const&) in AMapSearchKit
std::_Rb_tree<std::string, std::string, std::_Identitystd::string, std::lessstd::string, std::allocatorstd::string >::_M_insert_unique(std::string const&) in AMapSearchKit
std::_Rb_tree<google::protobuf::Descriptor const*, google::protobuf::Descriptor const*, std::_Identity<google::protobuf::Descriptor const*>, std::less<google::protobuf::Descriptor const*>, std::allocator<google::protobuf::Descriptor const*> >::_M_insert_unique(google::protobuf::Descriptor const* const&) in AMapSearchKit
std::_Rb_tree<std::pair<google::protobuf::Descriptor const*, int>, std::pair<std::pair<google::protobuf::Descriptor const*, int> const, google::protobuf::FieldDescriptor const*>, std::_Select1st<std::pair<std::pair<google::protobuf::Descriptor const*, int> const, google::protobuf::FieldDescriptor const*> >, std::less<std::pair<google::protobuf::Descriptor const*, int> >, std::allocator<std::pair<std::pair<google::protobuf::Descriptor const*, int> const, google::protobuf::FieldDescriptor const*> > >::_M_insert_unique(std::pair<std::pair<google::protobuf::Descriptor const*, int> const, google::protobuf::FieldDescriptor const*> const&) in AMapSearchKit
google::protobuf::SimpleDescriptorDatabase::DescriptorIndex<std::pair<void const*, int> >::FindLastLessOrEqual(std::string const&) in AMapSearchKit
std::_Rb_tree<std::pair<std::string, int>, std::pair<std::pair<std::string, int> const, std::pair<void const*, int> >, std::_Select1st<std::pair<std::pair<std::string, int> const, std::pair<void const*, int> > >, std::less<std::pair<std::string, int> >, std::allocator<std::pair<std::pair<std::string, int> const, std::pair<void const*, int> > > >::_M_insert_unique(std::pair<std::pair<std::string, int> const, std::pair<void const*, int> > const&) in AMapSearchKit
std::_Rb_tree<std::string, std::pair<std::string const, std::pair<void const*, int> >, std::_Select1st<std::pair<std::string const, std::pair<void const*, int> > >, std::lessstd::string, std::allocator<std::pair<std::string const, std::pair<void const*, int> > > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<std::string const, std::pair<void const*, int> > >, std::pair<std::string const, std::pair<void const*, int> > const&) in AMapSearchKit
...
"std::string::rfind(char, unsigned long) const", referenced from:
google::protobuf::DescriptorBuilder::AddPackage(std::string const&, google::protobuf::Message const&, google::protobuf::FileDescriptor const*) in AMapSearchKit
google::protobuf::DescriptorBuilder::AddSymbol(std::string const&, void const*, std::string const&, google::protobuf::Message const&, google::protobuf::(anonymous namespace)::Symbol) in AMapSearchKit
google::protobuf::DescriptorBuilder::LookupSymbol(std::string const&, std::string const&, google::protobuf::DescriptorBuilder::PlaceholderType, google::protobuf::DescriptorBuilder::ResolveMode) in AMapSearchKit
google::protobuf::DescriptorBuilder::LookupSymbolNoPlaceholder(std::string const&, std::string const&, google::protobuf::DescriptorBuilder::ResolveMode) in AMapSearchKit
"std::basic_string<char, std::char_traits, std::allocator >::basic_string(char const*, unsigned long, std::allocator const&)", referenced from:
google::protobuf::UnescapeCEscapeString(std::string const&) in AMapSearchKit
google::protobuf::CEscape(std::string const&) in AMapSearchKit
google::protobuf::strings::Utf8SafeCEscape(std::string const&) in AMapSearchKit
"std::string::append(char const*, unsigned long)", referenced from:
google::protobuf::TextFormat::Printer::PrintUnknownFields(google::protobuf::UnknownFieldSet const&, google::protobuf::TextFormat::Printer::TextGenerator&) const in AMapSearchKit
google::protobuf::TextFormat::Printer::PrintField(google::protobuf::Message const&, google::protobuf::Reflection const*, google::protobuf::FieldDescriptor const*, google::protobuf::TextFormat::Printer::TextGenerator&) const in AMapSearchKit
google::protobuf::JoinStrings(std::vector<std::string, std::allocatorstd::string > const&, char const*, std::string*) in AMapSearchKit
google::protobuf::LocalizeRadix(char const*, char const*) in AMapSearchKit
google::protobuf::io::CodedInputStream::ReadStringFallback(std::string*, int) in AMapSearchKit
google::protobuf::FieldDescriptor::DefaultValueAsString(bool) const in AMapSearchKit
google::protobuf::Descriptor::DebugString(int, std::string*) const in AMapSearchKit
...
"std::string::append(std::string const&)", referenced from:
google::protobuf::FieldDescriptor::CopyTo(google::protobuf::FieldDescriptorProto*) const in AMapSearchKit
google::protobuf::MethodDescriptor::CopyTo(google::protobuf::MethodDescriptorProto*) const in AMapSearchKit
google::protobuf::FieldDescriptor::DebugString(int, std::string*) const in AMapSearchKit
google::protobuf::(anonymous namespace)::FormatBracketedOptions(google::protobuf::Message const&, std::string*) in AMapSearchKit
google::protobuf::DescriptorBuilder::BuildFile(google::protobuf::FileDescriptorProto const&) in AMapSearchKit
google::protobuf::DescriptorBuilder::BuildMessage(google::protobuf::DescriptorProto const&, google::protobuf::Descriptor const*, google::protobuf::Descriptor*) in AMapSearchKit
google::protobuf::DescriptorBuilder::BuildEnum(google::protobuf::EnumDescriptorProto const&, google::protobuf::Descriptor const*, google::protobuf::EnumDescriptor*) in AMapSearchKit
...
"std::string::_Rep::_S_empty_rep_storage", referenced from:
google::protobuf::internal::ExtensionSet::Extension::Free() in AMapSearchKit
google::protobuf::internal::ExtensionSet::MutableString(int, unsigned char, google::protobuf::FieldDescriptor const*) in AMapSearchKit
-[AMapSearchAPI requestHeaderData:] in AMapSearchKit
-[AMapSearchAPI AMapPlaceSearch:] in AMapSearchKit
-[AMapSearchAPI AMapNavigationSearch:] in AMapSearchKit
-[AMapSearchAPI AMapInputTipsSearch:] in AMapSearchKit
-[AMapSearchAPI AMapGeocodeSearch:] in AMapSearchKit
...
"std::string::resize(unsigned long, char)", referenced from:
google::protobuf::io::StringOutputStream::Next(void**, int*) in AMapSearchKit
google::protobuf::io::StringOutputStream::BackUp(int) in AMapSearchKit
google::protobuf::strings::SubstituteAndAppend(std::string*, char const*, google::protobuf::strings::internal::SubstituteArg const&, google::protobuf::strings::internal::SubstituteArg const&, google::protobuf::strings::internal::SubstituteArg const&, google::protobuf::strings::internal::SubstituteArg const&, google::protobuf::strings::internal::SubstituteArg const&, google::protobuf::strings::internal::SubstituteArg const&, google::protobuf::strings::internal::SubstituteArg const&, google::protobuf::strings::internal::SubstituteArg const&, google::protobuf::strings::internal::SubstituteArg const&, google::protobuf::strings::internal::SubstituteArg const&) in AMapSearchKit
google::protobuf::io::CodedInputStream::ReadString(std::string*, int) in AMapSearchKit
google::protobuf::DescriptorBuilder::BuildEnumValue(google::protobuf::EnumValueDescriptorProto const&, google::protobuf::EnumDescriptor const*, google::protobuf::EnumValueDescriptor*) in AMapSearchKit
google::protobuf::DescriptorBuilder::OptionInterpreter::SetOptionValue(google::protobuf::FieldDescriptor const*, google::protobuf::UnknownFieldSet*) in AMapSearchKit
google::protobuf::internal::WireFormatLite::ReadString(google::protobuf::io::CodedInputStream*, std::string*) in AMapSearchKit
...
"std::string::assign(char const*, unsigned long)", referenced from:
-[AMapSearchAPI requestHeaderData:] in AMapSearchKit
-[AMapSearchAPI AMapPlaceSearch:] in AMapSearchKit
-[AMapSearchAPI AMapNavigationSearch:] in AMapSearchKit
-[AMapSearchAPI AMapInputTipsSearch:] in AMapSearchKit
-[AMapSearchAPI AMapGeocodeSearch:] in AMapSearchKit
-[AMapSearchAPI AMapReGoecodeSearch:] in AMapSearchKit
-[AMapSearchAPI AMapBusLineSearch:] in AMapSearchKit
...
"std::basic_string<char, std::char_traits, std::allocator >::basic_string(unsigned long, char, std::allocator const&)", referenced from:
google::protobuf::(anonymous namespace)::FormatLineOptions(int, google::protobuf::Message const&, std::string*) in AMapSearchKit
google::protobuf::EnumDescriptor::DebugString(int, std::string*) const in AMapSearchKit
google::protobuf::Descriptor::DebugString(int, std::string*) const in AMapSearchKit
google::protobuf::FieldDescriptor::DebugString(int, std::string*) const in AMapSearchKit
google::protobuf::EnumValueDescriptor::DebugString(int, std::string*) const in AMapSearchKit
"std::string::replace(unsigned long, unsigned long, char const*, unsigned long)", referenced from:
google::protobuf::LocalizeRadix(char const*, char const*) in AMapSearchKit
"std::string::assign(std::string const&)", referenced from:
google::protobuf::internal::GeneratedMessageReflection::ClearField(google::protobuf::Message*, google::protobuf::FieldDescriptor const*) const in AMapSearchKit
google::protobuf::internal::GeneratedMessageReflection::SetString(google::protobuf::Message*, google::protobuf::FieldDescriptor const*, std::string const&) const in AMapSearchKit
google::protobuf::internal::GeneratedMessageReflection::SetRepeatedString(google::protobuf::Message*, google::protobuf::FieldDescriptor const*, int, std::string const&) const in AMapSearchKit
google::protobuf::internal::GeneratedMessageReflection::AddString(google::protobuf::Message*, google::protobuf::FieldDescriptor const*, std::string const&) const in AMapSearchKit
google::protobuf::internal::ExtensionSet::MergeFrom(google::protobuf::internal::ExtensionSet const&) in AMapSearchKit
distance::Request::MergeFrom(distance::Request const&) in AMapSearchKit
distance::Response::MergeFrom(distance::Response const&) in AMapSearchKit
...
"std::string::append(std::string const&, unsigned long, unsigned long)", referenced from:
google::protobuf::DescriptorBuilder::LookupSymbolNoPlaceholder(std::string const&, std::string const&, google::protobuf::DescriptorBuilder::ResolveMode) in AMapSearchKit
"std::string::compare(std::string const&) const", referenced from:
google::protobuf::DescriptorBuilder::BuildFile(google::protobuf::FileDescriptorProto const&) in AMapSearchKit
google::protobuf::DescriptorBuilder::BuildFieldOrExtension(google::protobuf::FieldDescriptorProto const&, google::protobuf::Descriptor const*, google::protobuf::FieldDescriptor*, bool) in AMapSearchKit
google::protobuf::TextFormat::Parser::ParserImpl::ConsumeFieldValue(google::protobuf::Message*, google::protobuf::Reflection const*, google::protobuf::FieldDescriptor const*) in AMapSearchKit
google::protobuf::TextFormat::Parser::ParserImpl::TryConsume(std::string const&) in AMapSearchKit
google::protobuf::TextFormat::Parser::ParserImpl::Consume(std::string const&) in AMapSearchKit
google::protobuf::TextFormat::Parser::ParserImpl::ConsumeMessage(google::protobuf::Message*, std::string) in AMapSearchKit
google::protobuf::TextFormat::Parser::ParserImpl::ConsumeField(google::protobuf::Message*) in AMapSearchKit
...
"std::_Rb_tree_increment(std::_Rb_tree_node_base*)", referenced from:
google::protobuf::internal::ExtensionSet::~ExtensionSet() in AMapSearchKit
google::protobuf::internal::ExtensionSet::Clear() in AMapSearchKit
std::_Rb_tree<std::pair<google::protobuf::Descriptor const*, int>, std::pair<std::pair<google::protobuf::Descriptor const*, int> const, google::protobuf::FieldDescriptor const*>, std::_Select1st<std::pair<std::pair<google::protobuf::Descriptor const*, int> const, google::protobuf::FieldDescriptor const*> >, std::less<std::pair<google::protobuf::Descriptor const*, int> >, std::allocator<std::pair<std::pair<google::protobuf::Descriptor const*, int> const, google::protobuf::FieldDescriptor const*> > >::erase(std::_Rb_tree_iterator<std::pair<std::pair<google::protobuf::Descriptor const*, int> const, google::protobuf::FieldDescriptor const*> >, std::_Rb_tree_iterator<std::pair<std::pair<google::protobuf::Descriptor const*, int> const, google::protobuf::FieldDescriptor const*> >) in AMapSearchKit
google::protobuf::SimpleDescriptorDatabase::DescriptorIndex<std::pair<void const*, int> >::AddSymbol(std::string const&, std::pair<void const*, int>) in AMapSearchKit
std::_Rb_tree<std::string, std::pair<std::string const, std::pair<void const*, int> >, std::_Select1st<std::pair<std::string const, std::pair<void const*, int> > >, std::lessstd::string, std::allocator<std::pair<std::string const, std::pair<void const*, int> > > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<std::string const, std::pair<void const*, int> > >, std::pair<std::string const, std::pair<void const*, int> > const&) in AMapSearchKit
"std::string::substr(unsigned long, unsigned long) const", referenced from:
google::protobuf::DescriptorBuilder::AddPackage(std::string const&, google::protobuf::Message const&, google::protobuf::FileDescriptor const*) in AMapSearchKit
google::protobuf::DescriptorBuilder::AddSymbol(std::string const&, void const*, std::string const&, google::protobuf::Message const&, google::protobuf::(anonymous namespace)::Symbol) in AMapSearchKit
google::protobuf::DescriptorBuilder::LookupSymbol(std::string const&, std::string const&, google::protobuf::DescriptorBuilder::PlaceholderType, google::protobuf::DescriptorBuilder::ResolveMode) in AMapSearchKit
google::protobuf::DescriptorBuilder::LookupSymbolNoPlaceholder(std::string const&, std::string const&, google::protobuf::DescriptorBuilder::ResolveMode) in AMapSearchKit
google::protobuf::SimpleDescriptorDatabase::DescriptorIndex<std::pair<void const*, int> >::AddExtension(google::protobuf::FieldDescriptorProto const&, std::pair<void const*, int>) in AMapSearchKit
"std::_Rb_tree_increment(std::_Rb_tree_node_base const*)", referenced from:
google::protobuf::internal::ExtensionSet::AppendToList(google::protobuf::Descriptor const*, google::protobuf::DescriptorPool const*, std::vector<google::protobuf::FieldDescriptor const*, std::allocator<google::protobuf::FieldDescriptor const*> >) const in AMapSearchKit
google::protobuf::internal::ExtensionSet::SpaceUsedExcludingSelf() const in AMapSearchKit
google::protobuf::internal::ExtensionSet::SerializeWithCachedSizesToArray(int, int, unsigned char
) const in AMapSearchKit
google::protobuf::internal::ExtensionSet::MergeFrom(google::protobuf::internal::ExtensionSet const&) in AMapSearchKit
google::protobuf::internal::ExtensionSet::IsInitialized() const in AMapSearchKit
google::protobuf::internal::ExtensionSet::SerializeWithCachedSizes(int, int, google::protobuf::io::CodedOutputStream*) const in AMapSearchKit
google::protobuf::internal::ExtensionSet::ByteSize() const in AMapSearchKit
...
"std::string::_Rep::_M_destroy(std::allocator const&)", referenced from:
google::protobuf::internal::ExtensionSet::Extension::Free() in AMapSearchKit
distance::protobuf_AssignDesc_distance_2eproto() in AMapSearchKit
distance::Request::SharedDtor() in AMapSearchKit
distance::Response::SharedDtor() in AMapSearchKit
google::protobuf::TextFormat::Parser::MergeUsingImpl(google::protobuf::io::ZeroCopyInputStream*, google::protobuf::Message*, google::protobuf::TextFormat::Parser::ParserImpl*) in AMapSearchKit
google::protobuf::TextFormat::Printer::PrintUnknownFields(google::protobuf::UnknownFieldSet const&, google::protobuf::TextFormat::Printer::TextGenerator&) const in AMapSearchKit
google::protobuf::TextFormat::Printer::PrintFieldValue(google::protobuf::Message const&, google::protobuf::Reflection const*, google::protobuf::FieldDescriptor const*, int, google::protobuf::TextFormat::Printer::TextGenerator&) const in AMapSearchKit
...
"std::ios_base::Init::Init()", referenced from:
__GLOBAL__I_a in AMapSearchKit
__GLOBAL__I_a in MAMapKit
__GLOBAL__I_a in MAMapKit
__GLOBAL__I_a in MAMapKit
__GLOBAL__I_a in MAMapKit
__GLOBAL__I_a in MAMapKit
__GLOBAL__I_a in MAMapKit
...
"std::string::compare(unsigned long, unsigned long, std::string const&) const", referenced from:
google::protobuf::DescriptorBuilder::IsInPackage(google::protobuf::FileDescriptor const*, std::string const&) in AMapSearchKit
google::protobuf::SimpleDescriptorDatabase::DescriptorIndex<std::pair<void const*, int> >::IsSubSymbol(std::string const&, std::string const&) in AMapSearchKit
"std::basic_string<char, std::char_traits, std::allocator >::basic_string(std::string const&)", referenced from:
google::protobuf::internal::GeneratedMessageReflection::GetString(google::protobuf::Message const&, google::protobuf::FieldDescriptor const*) const in AMapSearchKit
google::protobuf::internal::GeneratedMessageReflection::SetString(google::protobuf::Message*, google::protobuf::FieldDescriptor const*, std::string const&) const in AMapSearchKit
google::protobuf::internal::GeneratedMessageReflection::GetRepeatedString(google::protobuf::Message const&, google::protobuf::FieldDescriptor const*, int) const in AMapSearchKit
google::protobuf::Message::GetTypeName() const in AMapSearchKit
google::protobuf::DescriptorPool::Tables::AllocateString(std::string const&) in AMapSearchKit
google::protobuf::FieldDescriptor::DefaultValueAsString(bool) const in AMapSearchKit
google::protobuf::DescriptorBuilder::BuildFile(google::protobuf::FileDescriptorProto const&) in AMapSearchKit
...
"std::basic_string<char, std::char_traits, std::allocator >::basic_string(char const*, std::allocator const&)", referenced from:
distance::protobuf_AssignDesc_distance_2eproto() in AMapSearchKit
geocode::protobuf_AssignDesc_geocode_2eproto() in AMapSearchKit
google::protobuf::strings::SubstituteAndAppend(std::string*, char const*, google::protobuf::strings::internal::SubstituteArg const&, google::protobuf::strings::internal::SubstituteArg const&, google::protobuf::strings::internal::SubstituteArg const&, google::protobuf::strings::internal::SubstituteArg const&, google::protobuf::strings::internal::SubstituteArg const&, google::protobuf::strings::internal::SubstituteArg const&, google::protobuf::strings::internal::SubstituteArg const&, google::protobuf::strings::internal::SubstituteArg const&, google::protobuf::strings::internal::SubstituteArg const&, google::protobuf::strings::internal::SubstituteArg const&) in AMapSearchKit
google::protobuf::SimpleItoa(int) in AMapSearchKit
google::protobuf::SimpleItoa(long long) in AMapSearchKit
google::protobuf::SimpleDtoa(double) in AMapSearchKit
google::protobuf::SimpleFtoa(float) in AMapSearchKit
...
"std::string::reserve(unsigned long)", referenced from:
google::protobuf::JoinStrings(std::vector<std::string, std::allocatorstd::string > const&, char const*, std::string*) in AMapSearchKit
google::protobuf::LocalizeRadix(char const*, char const*) in AMapSearchKit
google::protobuf::DescriptorBuilder::BuildFieldOrExtension(google::protobuf::FieldDescriptorProto const&, google::protobuf::Descriptor const*, google::protobuf::FieldDescriptor*, bool) in AMapSearchKit
google::protobuf::io::Tokenizer::ParseStringAppend(std::string const&, std::string*) in AMapSearchKit
std::basic_string<char, std::char_traits, std::allocator > std::operator+<char, std::char_traits, std::allocator >(char const*, std::basic_string<char, std::char_traits, std::allocator > const&) in AMapSearchKit
"std::string::_M_mutate(unsigned long, unsigned long, unsigned long)", referenced from:
google::protobuf::internal::GeneratedMessageReflection::ClearField(google::protobuf::Message*, google::protobuf::FieldDescriptor const*) const in AMapSearchKit
google::protobuf::internal::GeneratedMessageReflection::RemoveLast(google::protobuf::Message*, google::protobuf::FieldDescriptor const*) const in AMapSearchKit
google::protobuf::internal::ExtensionSet::Extension::Clear() in AMapSearchKit
google::protobuf::internal::ExtensionSet::RemoveLast(int) in AMapSearchKit
distance::Request::Clear() in AMapSearchKit
distance::Response::Clear() in AMapSearchKit
google::protobuf::TextFormat::Printer::PrintFieldValueToString(google::protobuf::Message const&, google::protobuf::FieldDescriptor const*, int, std::string*) const in AMapSearchKit
...
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

library not found for -lstdc++.6.0.9

Ld /Users/dilireba/Library/Developer/Xcode/DerivedData/meituan-fwkykmohghnqpnblxiywgzfvvuds/Build/Products/Debug-iphonesimulator/meituan.app/meituan normal x86_64 (in target 'meituan' from project 'meituan')
cd /Users/dilireba/Desktop/meituan-master
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -target x86_64-apple-ios8.2-simulator -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator13.1.sdk -L/Users/dilireba/Library/Developer/Xcode/DerivedData/meituan-fwkykmohghnqpnblxiywgzfvvuds/Build/Products/Debug-iphonesimulator -L/Users/dilireba/Library/Developer/Xcode/DerivedData/meituan-fwkykmohghnqpnblxiywgzfvvuds/Build/Products/Debug-iphonesimulator/AFNetworkActivityLogger -L/Users/dilireba/Library/Developer/Xcode/DerivedData/meituan-fwkykmohghnqpnblxiywgzfvvuds/Build/Products/Debug-iphonesimulator/AFNetworking -L/Users/dilireba/Library/Developer/Xcode/DerivedData/meituan-fwkykmohghnqpnblxiywgzfvvuds/Build/Products/Debug-iphonesimulator/MBProgressHUD -L/Users/dilireba/Library/Developer/Xcode/DerivedData/meituan-fwkykmohghnqpnblxiywgzfvvuds/Build/Products/Debug-iphonesimulator/MJExtension -L/Users/dilireba/Library/Developer/Xcode/DerivedData/meituan-fwkykmohghnqpnblxiywgzfvvuds/Build/Products/Debug-iphonesimulator/MJRefresh -L/Users/dilireba/Library/Developer/Xcode/DerivedData/meituan-fwkykmohghnqpnblxiywgzfvvuds/Build/Products/Debug-iphonesimulator/SDWebImage -L/Users/dilireba/Library/Developer/Xcode/DerivedData/meituan-fwkykmohghnqpnblxiywgzfvvuds/Build/Products/Debug-iphonesimulator/SVProgressHUD -LPods/UMengAnalytics -LPods/UMengAnalytics/umsdk_IOS_analytics_idfa_v3.4.6 -LPods/UMengAnalytics/umsdk_IOS_analytics_idfa_v3.4.6/UMAnalytics_Sdk_3.4.6 -L/Users/dilireba/Desktop/meituan-master/meituan/Others/Library/UMSocial_Sdk_4.2.3 -L/Users/dilireba/Desktop/meituan-master/meituan/Others/Library/UMSocial_Sdk_Extra_Frameworks/TencentOpenAPI -L/Users/dilireba/Desktop/meituan-master/meituan/Others/Library/UMSocial_Sdk_Extra_Frameworks/Wechat -L/Users/dilireba/Desktop/meituan-master/meituan/Others/Library/Wechat -L/Users/dilireba/Desktop/meituan-master/meituan/Others/Library/UMAnalytics_Sdk_3.5.16 -F/Users/dilireba/Library/Developer/Xcode/DerivedData/meituan-fwkykmohghnqpnblxiywgzfvvuds/Build/Products/Debug-iphonesimulator -F/Users/dilireba/Desktop/meituan-master/Pods/AMap3DMap -F/Users/dilireba/Desktop/meituan-master/Pods/AMapSearch -F/Users/dilireba/Desktop/meituan-master/meituan/Others/Library/UMSocial_Sdk_Extra_Frameworks/TencentOpenAPI -filelist /Users/dilireba/Library/Developer/Xcode/DerivedData/meituan-fwkykmohghnqpnblxiywgzfvvuds/Build/Intermediates.noindex/meituan.build/Debug-iphonesimulator/meituan.build/Objects-normal/x86_64/meituan.LinkFileList -Xlinker -rpath -Xlinker @executable_path/Frameworks -dead_strip -Xlinker -object_path_lto -Xlinker /Users/dilireba/Library/Developer/Xcode/DerivedData/meituan-fwkykmohghnqpnblxiywgzfvvuds/Build/Intermediates.noindex/meituan.build/Debug-iphonesimulator/meituan.build/Objects-normal/x86_64/meituan_lto.o -Xlinker -no_deduplicate -Xlinker -objc_abi_version -Xlinker 2 -fobjc-arc -fobjc-link-runtime -ObjC -lAFNetworkActivityLogger -lAFNetworking -lMBProgressHUD -lMJExtension -lMJRefresh -lMobClickLibrary -lSDWebImage -lSVProgressHUD -lstdc++.6.0.9 -lz -framework AMapSearchKit -framework CoreGraphics -framework CoreLocation -framework CoreTelephony -framework ImageIO -framework MAMapKit -framework MobileCoreServices -framework OpenGLES -framework QuartzCore -framework Security -framework SystemConfiguration -Xlinker -sectcreate -Xlinker __TEXT -Xlinker __entitlements -Xlinker /Users/dilireba/Library/Developer/Xcode/DerivedData/meituan-fwkykmohghnqpnblxiywgzfvvuds/Build/Intermediates.noindex/meituan.build/Debug-iphonesimulator/meituan.build/meituan.app-Simulated.xcent -lSocialQQ -lz -lstdc++ -lMobClickLibrary -framework CoreTelephony -framework TencentOpenAPI -lSocialWechat -lsqlite3 -framework CoreGraphics -framework SystemConfiguration -liconv -framework Security -lUMSocial_Sdk_4.2.3 -framework CoreLocation -lWeChatSDK -lPods-meituan -Xlinker -dependency_info -Xlinker /Users/dilireba/Library/Developer/Xcode/DerivedData/meituan-fwkykmohghnqpnblxiywgzfvvuds/Build/Intermediates.noindex/meituan.build/Debug-iphonesimulator/meituan.build/Objects-normal/x86_64/meituan_dependency_info.dat -o /Users/dilireba/Library/Developer/Xcode/DerivedData/meituan-fwkykmohghnqpnblxiywgzfvvuds/Build/Products/Debug-iphonesimulator/meituan.app/meituan

ld: library not found for -lstdc++.6.0.9
clang: error: linker command failed with exit code 1 (use -v to see invocation)

网络请求的代码有些冗余

比如以下这段,原封不动的有7处

AFHTTPRequestOperationManager *manager = [self baseHtppRequest];
    NSString *urlStr = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    [manager GET:urlStr parameters:userInfo success:^(AFHTTPRequestOperation *operation, id responseObject){
        successBlock(responseObject);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error){
        NSString *errorStr = [error.userInfo objectForKey:@"NSLocalizedDescription"];
        failureBlock(errorStr);
    }];

url

NSString *urlStr = [NSString stringWithFormat:@"http://api.meituan.com/config/v1/loading/check.json?app_name=group&app_version=5.7&ci=1&city_id=1&client=iphone&movieBundleVersion=100&msid=48E2B810-805D-4821-9CDD-D5C9E01BC98A2015-07-15-15-51824&platform=iphone&resolution=%d%@%d&userid=10086&utm_campaign=AgroupBgroupD100Fa20141120nanning__m1__leftflow___ab_pindaochangsha__a__leftflow___ab_gxtest__gd__leftflow___ab_gxhceshi__nostrategy__leftflow___ab_i550poi_ktv__d__j___ab_chunceshishuju__a__a___ab_gxh_82__nostrategy__leftflow___ab_i_group_5_3_poidetaildeallist__a__b___b1junglehomepagecatesort__b__leftflow___ab_gxhceshi0202__b__a___ab_pindaoquxincelue0630__b__b1___ab_i550poi_xxyl__b__leftflow___ab_i_group_5_6_searchkuang__a__leftflow___i_group_5_2_deallist_poitype__d__d___ab_pindaoshenyang__a__leftflow___ab_b_food_57_purepoilist_extinfo__a__a___ab_waimaiwending__a__a___ab_waimaizhanshi__b__b1___ab_i550poi_lr__d__leftflow___ab_i_group_5_5_onsite__b__b___ab_xinkeceshi__b__leftflowGhomepage&utm_content=4B8C0B46F5B0527D55EA292904FD7E12E48FB7BEA8DF50BFE7828AF7F20BB08D&utm_medium=iphone&utm_source=AppStore&utm_term=5.7&uuid=4B8C0B46F5B0527D55EA292904FD7E12E48FB7BEA8DF50BFE7828AF7F20BB08D&version_name=5.7",scaleW,@"%2A",scaleH];

请问这个url的参数分别是什么作用?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.