0

Facebookログインを実装したアプリがあります。ソースを facebook SDK からプロジェクトに直接コピーしました。次に、Google ログインを追加する必要があります。今回は静的ライブラリとして GTMOAuth2 を追加しました。(私もこれのソースを持っていますが、特に理由もなく静的ライブラリとして追加しました)。問題は、両方とも SBJson を使用していて、シンボルが重複していることです。Facebook SDK の SBJson は、GTMOAuth2 ライブラリの SBJson よりも新しいようです。私は以前にシンボルを重複させたことがない初心者ですが、どうすればよいですか? この特定の問題に対する解決策、または一般的に重複するシンボルを解決する解決策はありますか? 機能するまで2回表示されるものを削除するだけですか?リンカー設定はありますか? ありがとう。

更新 - 私が試したこと:

両方のプロジェクトを静的ライブラリとして追加しました。

  • GTMOAuth2 から SBJSON.h/m ファイルを削除しようとしましたが、結果: Google ログイン後の json 解析エラー:

  • Facebook iOS SDK から SBJSON.h/m ファイルを削除してみました。結果: Facebook ログイン後の json 解析エラー。

これら 2 つのバージョンの SBJSON を、シンボルを重複させることなくアプリ内で魔法のように共存させることはできますか? 使用することを決めた 1 つの SBJSON で動作するように、1 つのライブラリを変更する必要がありますか?

4

2 に答える 2

3

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 の両方がそれを使用します。それはうまくいくはずです。

于 2011-07-13T06:19:02.560 に答える
1

はい、GTMOAuth2 ライブラリの SBJSON を削除します (古いバージョンであるため)。

于 2011-07-08T09:37:00.510 に答える