Google Cloud Endpoints链接iOS客户端问题

Ven*_*Rao 3 google-app-engine ios google-cloud-endpoints

这个问题源于我不完全理解iOS中的静态库,而谷歌的文档似乎有点稀疏.

我正在尝试将Google Cloud Endpoints用于我的移动后端.

我为我的客户端库生成.m和.h文件.然后我创建了一个新项目(OwnItApi),将libGTLTouchStaticLib.a静态库从GTL.proj拖到这个新项目中.然后我将生成的文件.m和.h文件添加到此项目中.我将所有.m文件添加到编译源,然后我将头文件复制文件.在构建设置中,我将"-ObjC -all_load"添加到Other Linker Flags项目.

更新:我忘了提到我还将GTL.proj中的头文件复制到了OwnItAPI项目中.这些包括文件GTLBase64.h,GTLBatchQuery.h,GTLBatchResult,h等.我想我必须这样做,因为没有它们的构建失败了.

没有标题,我得到:错误"'找不到GTLObject.h'文件." 在进口声明中.

然后我从这个项目生成静态库,并将其添加到我的主项目,其目标是一个iPhone应用程序.为了测试API是否正常工作,我将其添加到App Delegate

#import "OwnItApi/GTLServiceOwnit.h"
#import "OwnItApi/GTLQueryOwnit.h"
#import "OwnItApi/GTLOwnitApiBrands.h"
Run Code Online (Sandbox Code Playgroud)

这是在应用程序内:didFinishLaunchingWithOptions:function

static GTLServiceOwnit *service = nil;
if (!service) {
    service = [[GTLServiceOwnit alloc] init];
    service.retryEnabled = YES;
    [GTMHTTPFetcher setLoggingEnabled:YES];
}

GTLQueryOwnit *query = [GTLQueryOwnit queryForBrandsListWithUserID:@"venkat"];
[service executeQuery:query completionHandler:^(GTLServiceTicket *ticket,    GTLOwnitApiBrands *object, NSError *error) {
    NSArray *items = [object brands];;
    NSLog(@"%@", items);
}];
Run Code Online (Sandbox Code Playgroud)

当我编译时,我得到这样的重复错误:

duplicate symbol _OBJC_METACLASS_$_GTLOwnitApiBrand in:
/Users/vrao/Library/Developer/Xcode/DerivedData/Own_It!-ertvnctptaddricdrjyrmgemzgsh/Build/Products/Release-iphoneos/libOwnItApi.a(GTLOwnit_Sources.o)
Run Code Online (Sandbox Code Playgroud)

17个错误看起来就像那样.然后最后

clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)

更新:在GTL项目中,libGTLTouchStaticLib.a在我构建之后是红色的,当我右键单击它时,"Show in Finder"显示为灰色.要查找.a文件,我在"GTL.framework"中使用"Show in Finder",然后返回一个文件夹以查找libGTLTouchStaticLib.a.

Dan*_*oet 7

我相信你看到了你看到的问题,因为你也包含了这个GTLOwnit_Sources.m文件.您可以从包含的文件列表中省略它.

  • 将它添加到Compile Sources而不是所有文件是有意义的.然后,当我重新生成我的客户端文件时,我不必进行很多更改.您是否考虑过允许服务生成器创建静态库而不仅仅是文件?我还需要将头文件复制到API项目吗?这看起来有点不对劲. (2认同)