Дублирующиеся символы, GTMOAuth2 и Facebook SDK для IOS, использующие SBJSON - PullRequest
0 голосов
/ 08 июля 2011

У меня есть приложение, в котором я реализовал вход на Facebook. Я скопировал источники из Facebook SDK непосредственно в мой проект. Теперь мне нужно добавить логин Google. На этот раз я добавил GTMOAuth2 в качестве статической библиотеки. (У меня также есть источник для этого, но я добавил как статическую библиотеку без особой причины). Проблема в том, что они оба используют SBJson, а я получаю дубликаты символов. Похоже, что SBJson в SDK facebook новее, чем в библиотеке GTMOAuth2. Я нуб, у меня никогда не было дубликатов символов, что мне делать? Существуют ли решения этой конкретной проблемы или решения дублирующих символов в целом? Я просто удаляю материал, который появляется дважды, пока он не заработает, есть ли какие-нибудь настройки компоновщика? Спасибо.

Обновление - что я пробовал:

Добавлены оба проекта в виде статической библиотеки.

  • Я попытался удалить файлы SBJSON.h / m из GTMOAuth2, результат: ошибка синтаксического анализа json после входа в Google:

  • Я попытался удалить файлы SBJSON.h / m из SDK Facebook iOS; результат: ошибка синтаксического анализа json после входа в Facebook.

Могу ли я заставить эти две версии SBJSON магически сосуществовать в моем приложении без повторяющихся символов? Нужно ли изменять одну библиотеку для работы с ОДНЫМ SBJSON, который я решил использовать?

Ответы [ 2 ]

3 голосов
/ 13 июля 2011

Я использую SBJSON из Facebook SDK. Я только что удалил SBJSON из библиотеки GTMOAuth2, чтобы избежать дублирования символа, как предложено 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;
      }
    }
  ...
}

UPDATE Здесь Я задавал тот же вопрос в дискуссионной группе GTM-OAuth2. Это произошло после того, как я ответил на вопрос, но я забыл обновить свой ответ здесь. Итак, вот что я сделал:

  • Используйте Facebook SDK и GTMOAuth2 в качестве статических библиотек (вероятно, это не обязательно)
  • Получить последнюю версию SBJSON с здесь
  • Замените SBJSON в Facebook SDK на этот
  • Удалить источники SBJSON из GTM-OAuth2 (или удалить их из фазы сборки)

Это дает вам самую последнюю версию библиотеки SBJSON, включенной в SDK Facebook. И Facebook SDK, и GTM-OAuth2 будут использовать его. Это должно работать.

1 голос
/ 08 июля 2011

да удалить SBJSON библиотеки GTMOAuth2 (поскольку это более старая версия).

...