Facebook-sdk-for-unity: Símbolo indefinido: swiftCompatibility

Criado em 25 jun. 2020  ·  21Comentários  ·  Fonte: facebook/facebook-sdk-for-unity

Lista de controle

Meio Ambiente

Descreva seu ambiente de desenvolvimento aqui, dando o máximo de detalhes possível. Se você os tiver, certifique-se de incluir:

  • Versão do Editor do Unity: 2018.4.23
  • Versão do SDK do Unity: 7.21.0
  • Plataforma de instalação e versão: iOS

Metas

Quero ser capaz de atualizar o SDK do Facebook sem a resolução constante de problemas.

resultados esperados

O XCode criaria o cliente de forma limpa após atualizar o SDK.

Resultados reais

XCode falha ao construir

Passos para reproduzir

Atualizar de 7.20.0 -> 7.21.0 e construir no XCode

Amostras de código e detalhes

Mostrando mensagens recentes
Símbolo indefinido: __swift_FORCE_LOAD _ $ _ swiftCompatibilityDynamicReplacements
Símbolo indefinido: __swift_FORCE_LOAD _ $ _ swiftCompatibility50

bug

Comentários muito úteis

@ Khaled-Wolf obrigado pelo código, que é muito útil, mas mesmo que isso faça o projeto compilar, o framework não é incorporado ao binário automaticamente e o aplicativo trava na inicialização, conforme mencionado por @NumaNumaNuma. Tentei incorporar manualmente os frameworks FB à compilação, mas honestamente não sei qual arquivo de qual projeto devo adicionar a qual destino. Todas as minhas tentativas falharam ... Alguma pista sobre isso? (e também, alguma pista sobre como fazê-lo funcionar usando um script de pós-processamento?)

Todos 21 comentários

A solução alternativa atual é adicionar use_framework! ao Podfile em seu projeto XCode exportado

A solução alternativa atual é adicionar use_framework! ao Podfile em seu projeto XCode exportado

Obrigado @KylinChang funcionou para mim!

Obrigado @KylinChang ,
Seria útil se isso fosse adicionado às notas de lançamento da versão com bug na página de download do SDK.

Uau, muito obrigado, você definitivamente deve adicionar algo ao log de alterações.
Além disso, é use_frameworks! (plural) 👍

depois de adicionar use_frameworks! o projeto é compilado, mas trava no início com este erro:
[13858:5861271] Error loading /var/containers/Bundle/Application/59B84CDD-B5F4-4BEB-A75B-44DC54DE13E3/myProject.app/Frameworks/UnityFramework.framework/UnityFramework: dlopen(/var/containers/Bundle/Application/59B84CDD-B5F4-4BEB-A75B-44DC54DE13E3/myProject.app/Frameworks/UnityFramework.framework/UnityFramework, 265): Library not loaded: @rpath/FBSDKCoreKit.framework/FBSDKCoreKit Referenced from: /private/var/containers/Bundle/Application/59B84CDD-B5F4-4BEB-A75B-44DC54DE13E3/myProject.app/Frameworks/UnityFramework.framework/UnityFramework Reason: image not found

Adicioná-lo à lista de estruturas incorporadas não ajudou.

Mais alguma coisa que eu preciso fazer?

Não está funcionando para mim! Eu adicionei "use_frameworks!" mas a compilação ainda falha. Eu preciso de algo mais?

depois de adicionar use_frameworks! o projeto é compilado, mas trava no início com este erro:
[13858:5861271] Error loading /var/containers/Bundle/Application/59B84CDD-B5F4-4BEB-A75B-44DC54DE13E3/myProject.app/Frameworks/UnityFramework.framework/UnityFramework: dlopen(/var/containers/Bundle/Application/59B84CDD-B5F4-4BEB-A75B-44DC54DE13E3/myProject.app/Frameworks/UnityFramework.framework/UnityFramework, 265): Library not loaded: @rpath/FBSDKCoreKit.framework/FBSDKCoreKit Referenced from: /private/var/containers/Bundle/Application/59B84CDD-B5F4-4BEB-A75B-44DC54DE13E3/myProject.app/Frameworks/UnityFramework.framework/UnityFramework Reason: image not found

Adicioná-lo à lista de estruturas incorporadas não ajudou.

Mais alguma coisa que eu preciso fazer?

Eu recebo a mesma coisa: /

@KylinChang você pode compartilhar a aparência do seu podfile, por favor?

Consegui construí-lo agora, mas ele falha com o mesmo erro durante a execução. Alguém conseguiu fazer funcionar?

O mesmo problema aqui com Unity 2019.4.1, Facebook SDK 7.21.1.

Usando use_frameworks! usará apenas as bibliotecas dinâmicas em vez das estáticas. É claro que ele compila, mas essas estruturas devem ser incorporadas de alguma forma. Ainda estou olhando para isso, mas em qualquer caso, preciso que a área de trabalho / projeto XCode gerado pelo Unity já esteja configurado ou nosso sistema de CI irá falhar ...

Ter que modificar manualmente o podfile e então o projeto é algo que não deveríamos ter que fazer para uma tarefa tão fácil como simplesmente integrar o SDK do Facebook ...

O mesmo problema aqui com Unity 2019.4.1, Facebook SDK 7.21.1.

Usando use_frameworks! usará apenas as bibliotecas dinâmicas em vez das estáticas. É claro que ele compila, mas essas estruturas devem ser incorporadas de alguma forma. Ainda estou olhando para isso, mas em qualquer caso, preciso que a área de trabalho / projeto XCode gerado pelo Unity já esteja configurado ou nosso sistema de CI irá falhar ...

Ter que modificar manualmente o podfile e então o projeto é algo que não deveríamos ter que fazer para uma tarefa tão fácil como simplesmente integrar o SDK do Facebook ...

Aqui você pode configurar um script simples de pós-compilação para modificar o podfile programaticamente, eu o uso no meu projeto e funciona muito bem
Crie um novo arquivo MonoBehaviour (por exemplo: PostProcessBuild_Podfile.cs) e coloque-o na pasta Assets / Editor

using System.Collections;
usando System.Linq;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using UnityEditor.Callbacks;
using System.IO;

public class PostProcessBuild_Podfile: MonoBehaviour
{
[PostProcessBuildAttribute (45)] // deve estar entre 40 e 50 para garantir que não seja substituído pela geração do Podfile (40) e que seja adicionado antes da "instalação do pod" (50)
private static void PostProcessBuild_iOS (BuildTarget target, string buildPath)
{
if (target == BuildTarget.iOS)
{
var fileName = buildPath + "/ Podfile";
var endTag = "plataforma: ios, '9.0'";
var lineToAdd = "use_frameworks!";

        Debug.Log("PostProcess: Adding use_frameworks! to podfile, this fix for new Facebook SDK");
        var txtLines = File.ReadAllLines(fileName).ToList();
        txtLines.Insert(txtLines.IndexOf(endTag)+1, lineToAdd);
        File.WriteAllLines(fileName, txtLines);
        Debug.Log("PostProcess: Adding use_frameworks! to podfile Completed successfully!");
    }
}

}

image

@ Khaled-Wolf obrigado pelo código, que é muito útil, mas mesmo que isso faça o projeto compilar, o framework não é incorporado ao binário automaticamente e o aplicativo trava na inicialização, conforme mencionado por @NumaNumaNuma. Tentei incorporar manualmente os frameworks FB à compilação, mas honestamente não sei qual arquivo de qual projeto devo adicionar a qual destino. Todas as minhas tentativas falharam ... Alguma pista sobre isso? (e também, alguma pista sobre como fazê-lo funcionar usando um script de pós-processamento?)

Eu voltei a usar uma versão mais antiga do SDK por enquanto (7.19.2 é o mais recente que não usa o SDK do iOS 7.0 swift).

Eu também voltei para 7.19.2 como use_frameworks! Parece ter causado problemas com outros pods que estou usando.
Esperaremos por um SDK do Facebook atualizado para tentar novamente :(

@NumaNumaNuma sim, parece ser a única opção por enquanto, ele compila e roda sem problemas! Obrigado por compartilhar isso!

A solução atual aqui é adicionar "use_frameworks!" ao Podfile ou adicione um arquivo swift vazio ao projeto iOS exportado. O problema foi corrigido em https://github.com/facebook/facebook-sdk-for-unity/commit/8fdb57a76d2f5a14c168e91663280d40f274c74c e será enviado na próxima versão.

@KylinChang E já

@Thaina Se você estiver com pressa, talvez possa tentar consertá-lo manualmente. Se você olhar para o commit, é uma mudança muito pequena que você pode tentar implementar. Adicione aquele arquivo swift em branco e as 2 propriedades de construção ao seu projeto xcode em um script de pós-construção na unidade. É chato ter que fazer isso manualmente, mas você pode economizar alguns dias (semanas?) Enquanto eles o lançam.
Ou talvez eles façam lançamentos semanais e saia amanhã: D

@NumaNumaNuma Primeiro, porque isso não funciona

Então, na verdade, não sei se fiz algo errado ou se a correção não funcionou bem. Ou tem algum requisito de que deve ou deve ser uma correção do pacote SDK do Facebook diretamente ou por qualquer outro motivo

Em segundo lugar, não é oficial, por isso polui meu código e preciso removê-lo no futuro, quando a correção real for lançada, então tento evitar isso. E é por isso que não gosto de fazer isso antes de confirmar que o facebook não vai lançar em breve

Terceiro, realmente não funcionou, pelo menos na unidade 2020.2

  • Esse .swift não pode existir na pasta Editor ou então não seria copiado para o projeto xcode real
  • Em 2019.3 e depois, a unidade muda sua estrutura de construção em principal e estrutura

    • Portanto, basta definir ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES para YES em apenas um alvo principal, não corrigindo o problema

    • Definir para ambos os alvos causa um erro que Invalid bundle… contains disallowed file 'frameworks'

No meu caso, preciso mover esse .swift fora para a pasta Assets . Em seguida, fiz um processo de construção como este

`` `C #

se UNITY_2019_3_OR_NEWER

    string target = proj.GetUnityMainTargetGuid();

senão

    string targetName = PBXProject.GetUnityTargetName();
    string target = proj.TargetGuidByName(targetName);

fim se

////

se UNITY_2019_3_OR_NEWER

    foreach(var framework in new [] { target,proj.GetUnityFrameworkTargetGuid() })

senão

    foreach(var framework in new [] { target })

fim se

    {
        proj.SetBuildProperty(framework, "ENABLE_BITCODE", "NO");
        proj.SetBuildProperty(framework, "EMBEDDED_CONTENT_CONTAINS_SWIFT", "YES");
        proj.SetBuildProperty(framework, "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES", "NO");
        proj.SetBuildProperty(framework, "SWIFT_VERSION", "5.0");
    }

`` `

A solução atual aqui é adicionar "use_frameworks!" ao Podfile ou adicione um arquivo swift vazio ao projeto iOS exportado. O problema foi corrigido no 8fdb57a e será lançado na próxima versão.

Oi! Você pode dizer quando vai lançar a correção?

@KylinChang A correção está correta para as versões mais antigas do Unity, mas o Unity 2019.3 e mais recentes exigem que um alvo diferente seja "consertado":
https://github.com/YousicianGit/facebook-sdk-for-unity/commit/878fc7b73d9a2c3751bb36792f0276cdfacf9495

Vou enviar a correção em um PR em breve.

O problema foi corrigido na versão mais recente

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

manofspirit picture manofspirit  ·  6Comentários

MorganMoon picture MorganMoon  ·  7Comentários

SeriouslySam picture SeriouslySam  ·  6Comentários

edscodeblenders picture edscodeblenders  ·  4Comentários

bblpny picture bblpny  ·  4Comentários