重复符号,GTMOAuth2和Facebook SDK的IOS都使用SBJSON



我有一个应用程序,我已经实现了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(因为它是旧版本)。

最新更新