Как я могу исправить Facebook PostProcessBuild PBXParser для Facebook SDK 6.x в Unity 4.6.1 и XCode 6.1.1

При сборке для iOS метод Facebook PostProcessBuild, OnPostProcessBuild, пытается проанализировать некоторые данные, чтобы сделать что-то, например, добавить библиотеки Facebook в окончательный проект XCode.

Парсер получает неверный формат файла. В своем методе Decode() он ожидает данные, которые начинаются с:

public const string PBX_HEADER_TOKEN = "// !$*UTF8*$!\n";

как это:

// !$*UTF8*$!
{
    archiveVersion = 1;
    classes = {
    };
    objectVersion = 46;
    objects = {

/ Begin PBXBuildFile section /
        011C65182C1C4E78903D645B / libxml2.dylib / = {isa = PBXBuildFile; fileRef = 318C8AB7C5D04BBFA6BA701D / libxml2.dylib /; };

но вместо этого он получает строку с содержимым project.pbxproj в правильном формате xml. как это:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>archiveVersion</key>
    <string>1</string>
    <key>classes</key>
    <dict/>
    <key>objectVersion</key>
    <string>46</string>
    <key>objects</key>
    <dict>

Кто-нибудь еще испытывает это? Я обнаружил, что эти вопросы связаны между собой, но ни один из них не отвечает на реальную проблему.

Ошибка компоновщика FacebookSDK для Unity iOS Mach-O - неопределенные символы _iosLogin,

http://forum.unity3d.com/threads/mach-o-linker-error-with-facebook-sdk.239085/

Есть идеи, как это решить?

2 ответа

Вы можете заставить FB внести свои изменения в project.pbxproj файл позже, когда файл возвращается в исходном формате УАТС:

Изменяя линию [PostProcessBuild(100)] в [PostProcessBuild(99999999)] в файле FacebookPostprocess.cs,

У меня та же проблема. После того, как я установил другой плагин, который изменяет файл project.pbxproj, данные, поступающие в PBXParser, имеют формат xml1. Я нашел где-то, что легко изменить формат, подобный json, но трудно сохранить его в формате, понятном Xcode. Стандартный процесс - сохранить его в формате xml1. Xcode может понимать формат xml1, так что это не проблема. Итак, мой обходной путь заключается в следующем:

  1. Запустите сборку как обычно.
  2. После сбоя сборки закройте Xcode (Xcode запишет файл проекта в правильном формате json при закрытии).
  3. Скопируйте измененный файл project.pbxproj в другое место.
  4. Измените PBXParser для чтения данных из измененного файла, если в формате xml!
  5. Запустите сборку еще раз.

Это не очень чисто, но сработало для меня. Лучшим вариантом будет преобразование xml в json для PBXParser...

Другие вопросы по тегам