我有一个应用程序,我已经实现了facebook登录。我将facebook sdk的源代码直接复制到我的项目中。现在我需要添加google登录。这次我添加了GTMOAuth2作为静态库。(我也有这个的源代码,但我添加了一个静态库,没有特定的原因)。问题是他们都使用SBJson,我得到重复的符号。看来facebook sdk中的SBJson比GTMOAuth2库中的SBJson更新。我是个新手,我从来没有重复的符号,我该怎么办?是否有解决这个特定问题或解决重复符号的一般方法?我只是删除的东西,出现两次,直到它的工作,有一些链接设置?谢谢。
Update - What I tried:
将两个项目添加为静态库。
-
我尝试从GTMOAuth2中删除SBJSON.h/m文件,结果:google登录后json解析错误:
-
我尝试从Facebook iOS SDK中删除SBJSON.h/m文件;
我可以让这两个版本的SBJSON神奇地共存在我的应用程序没有重复的符号?我是否必须修改一个库才能使用我决定使用的一个SBJSON ?
我正在使用来自facebook sdk的SBJSON。我刚刚从GTMOAuth2库中删除了SBJSON,以避免Ishu
所建议的重复符号。下一个问题是GTMOAuth2首先尝试使用SBJSONParser,并且该类没有objectWithString:error:方法,只有SBJSON有该方法。我修改了代码以使用SBJSON类,甚至没有尝试使用SBJSONParser,因为它不起作用。在原始版本中,首先检查SBJsonParser
,然后检查SBJSON。
- (NSDictionary *)dictionaryWithJSONData:(NSData *)data {
...
// try SBJsonParser or SBJSON
Class jsonParseClass = NSClassFromString(@"SBJSON");
/*
if (!jsonParseClass) {
jsonParseClass = NSClassFromString(@"SBJsonParser");
}
*/
if (jsonParseClass) {
GTMOAuth2ParserClass *parser = [[[jsonParseClass alloc] init] autorelease];
NSString *jsonStr = [[[NSString alloc] initWithData:data
encoding:NSUTF8StringEncoding] autorelease];
if (jsonStr) {
obj = [parser objectWithString:jsonStr error:&error];
#if DEBUG
if (error) {
NSLog(@"%@ error %@ parsing %@", NSStringFromClass(jsonParseClass),
error, jsonStr);
}
#endif
return obj;
}
}
...
}
我在GTM-OAuth2讨论组中问了同样的问题。这是在我回答问题之后发生的,但是我忘了在这里更新我的答案。总之,我是这样做的:
- 使用Facebook SDK和GTMOAuth2作为静态库(可能这是不必要的)
- 获取最新版本的SBJSON
- 将Facebook SDK中的SBJSON替换为这个
- 从GTM-OAuth2中删除SBJSON源(或从构建阶段删除它们)
这给您留下了Facebook SDK中包含的最新的SBJSON库。Facebook SDK和GTM-OAuth2都将使用它。
是删除GTMOAuth2库的SBJSON(因为它是旧版本)。