Facebook-sdk-for-unity: 未定義のシンボル: swiftCompatibility

作成日 2020年06月25日  ·  21コメント  ·  ソース: facebook/facebook-sdk-for-unity

チェックリスト

環境

ここで開発環境を説明し、できるだけ多くの詳細を説明してください。 それらを持っている場合は、必ず次のものを含めてください。

  • Unity エディターのバージョン: 2018.4.23
  • Unity SDK バージョン: 7.21.0
  • インストール プラットフォームとバージョン: iOS

目標

常に問題を解決せずにFacebookSDKを更新できるようにしたいと考えています。

期待される結果

XCode は、SDK の更新後にクライアントをクリーンにビルドします。

実績

XCode がビルドに失敗する

再現する手順

7.20.0-> 7.21.0から更新し、XCode上に構築する

コードサンプルと詳細

最近のメッセージの表示
未定義のシンボル: __swift_FORCE_LOAD_$_swiftCompatibilityDynamicReplacements
未定義のシンボル: __swift_FORCE_LOAD_$_swiftCompatibility50

bug

最も参考になるコメント

@Khaled-Wolf コードをありがとう、それは本当に便利ですが、それでもプロジェクトをコンパイルしても、フレームワークはバイナリに自動的に埋め込まれず、@NumaNumaNuma が述べたように起動時にアプリがクラッシュします。 FB フレームワークをビルドに手動で埋め込もうとしましたが、正直なところ、どのプロジェクトのどのファイルをどのターゲットに追加すればよいのかわかりません。 私の試みはすべて失敗しました...それについて何か手がかりはありますか? (また、後処理スクリプトを使用してそれを機能させる方法の手がかりはありますか?)

全てのコメント21件

現在の回避策は、エクスポートされた XCode プロジェクトの Podfile にuse_framework!を追加することです。

現在の回避策は、エクスポートされた XCode プロジェクトの Podfile にuse_framework!を追加することです。

@KylinChangありがとうございます。

ありがとう@KylinChang
SDKダウンロードページのバグバージョンのリリースノートに追記していただけると助かります。

うわー、どうもありがとう、あなたは間違いなく変更ログに何かを追加するべきです.
あと、 use_frameworks! (複数)👍

use_frameworksを追加した後! プロジェクトはビルドされますが、開始時に次のエラーでクラッシュします。
[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

組み込みフレームワークのリストに追加しても役に立ちませんでした。

他に何かする必要がありますか?

それは私のために働いていません! 「use_frameworks!」を追加しました。 しかし、ビルドはまだ失敗します。 他に何か必要ですか?

use_frameworksを追加した後! プロジェクトはビルドされますが、開始時に次のエラーでクラッシュします。
[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

組み込みフレームワークのリストに追加しても役に立ちませんでした。

他に何かする必要がありますか?

私は同じことを得る:/

@KylinChang さん、あなたの podfile がどのように見えるか教えてもらえますか?

これでビルドできたのですが、実行すると同じエラーで失敗します。 誰かがそれを機能させることができましたか?

Unity 2019.4.1、Facebook SDK 7.21.1 でも同じ問題が発生します。

use_frameworks!を使用すると、静的ライブラリの代わりに動的ライブラリが使用されます。 もちろん、それはコンパイルされますが、それらのフレームワークは何らかの方法で埋め込む必要があります。 これについてはまだ調査中ですが、いずれにせよ、Unity で生成された XCode ワークスペース/プロジェクトが既にセットアップされている必要があります。さもないと、CI システムが失敗します...

podfile を手動で変更してからプロジェクトを変更する必要があることは、Facebook SDK を統合するだけのような簡単なタスクでは行うべきではありません...

Unity 2019.4.1、Facebook SDK 7.21.1 でも同じ問題が発生します。

use_frameworks!を使用すると、静的ライブラリの代わりに動的ライブラリが使用されます。 もちろん、それはコンパイルされますが、それらのフレームワークは何らかの方法で埋め込む必要があります。 これについてはまだ調査中ですが、いずれにせよ、Unity で生成された XCode ワークスペース/プロジェクトが既にセットアップされている必要があります。さもないと、CI システムが失敗します...

podfile を手動で変更してからプロジェクトを変更する必要があることは、Facebook SDK を統合するだけのような簡単なタスクでは行うべきではありません...

ここでは、ポッドファイルをプログラムで変更するための簡単なビルド後スクリプトを設定できます。プロジェクトで使用していますが、問題なく動作します。
新しいMonoBehaviourファイル(例:PostProcessBuild_Podfile.cs)を作成し、Assets / Editorフォルダーに配置します

System.Collections を使用します。
System.Linq を使用します。
System.Collections.Generic を使用します。
UnityEngine を使用します。
UnityEditor の使用。
UnityEditor.Callbacks を使用します。
System.IO を使用します。

パブリック クラス PostProcessBuild_Podfile : MonoBehaviour
{{
[PostProcessBuildAttribute(45)]// Podfile 生成 (40) によってオーバーライドされず、「pod install」(50) の前に追加されるように、40 から 50 の間である必要があります。
プライベート静的 void PostProcessBuild_iOS(BuildTarget ターゲット、文字列 buildPath)
{{
if (ターゲット == BuildTarget.iOS)
{{
var fileName = buildPath + "/Podfile";
var endTag = "プラットフォーム: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 コードをありがとう、それは本当に便利ですが、それでもプロジェクトをコンパイルしても、フレームワークはバイナリに自動的に埋め込まれず、@NumaNumaNuma が述べたように起動時にアプリがクラッシュします。 FB フレームワークをビルドに手動で埋め込もうとしましたが、正直なところ、どのプロジェクトのどのファイルをどのターゲットに追加すればよいのかわかりません。 私の試みはすべて失敗しました...それについて何か手がかりはありますか? (また、後処理スクリプトを使用してそれを機能させる方法の手がかりはありますか?)

今のところ、古いバージョンのsdkを使用するように戻しました(7.19.2は、7.0の迅速なiOS sdkを使用しない最新のものです)。

また、use_frameworks として 7.19.2 に戻しました。 私が使用している他のポッドで問題が発生したようです。
更新された Facebook SDK が再試行されるのを待ちます:(

@NumaNumaNumaええ、今のところそれが唯一のオプションのようですが、問題なくコンパイルして実行できます! これを共有してくれてありがとう!

ここでの現在の回避策は、「use_frameworks!」を追加することです。 Podfile に追加するか、エクスポートされた iOS プロジェクトに空の swift ファイルを追加します。 この問題はhttps://github.com/facebook/facebook-sdk-for-unity/commit/8fdb57a76d2f5a14c168e91663280d40f274c74cで修正されており、次のリリースで出荷される予定です。

@KylinChangそして、これはそのコミットからすでに6日ですが、何が起こりますか? なぜ travis にまだエラーがあり、まだリリースされていないのですか?

@Thaina急いでいる場合は、手動で修正してみてください。 コミットを見ると、自分で実装を試みることができる非常に小さな変更です。 Unity のビルド後のスクリプトで、その空の swift ファイルと 2 つのビルド プロパティを xcode プロジェクトに追加します。 手動で行う必要があるのはうんざりですが、リリースまでに数日 (数週間?) 節約できる可能性があります。
または、彼らは毎週リリースを行っており、明日リリースされるでしょう:D

@NumaNumaNumaまず、それが機能しないため

だから私は実際に私が何か間違ったことをしたり、修正が最初から実際に機能していないことを知りません。 または、Facebook SDKパッケージから直接修正する必要がある、または修正する必要があるという要件があります。

第二に、それは公式ではないので、私のコードを汚染し、実際の修正が公開されたときに実際に削除する必要があるため、それを避けるようにしています。 だから私はFacebookがすぐにそれをリリースしないことを確認する前にそれをしたくないのです

第三に、少なくともユニティ2020.2では、実際には機能しませんでした

  • .swiftEditorフォルダーに存在できません。さもないと、実際の xcode プロジェクトにコピーされません。
  • 2019.3以降、Unityはビルド構造をメインとフレームワークに変更します

    • したがって、1 つのメイン ターゲットだけでALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESYESしても問題は解決しません。

    • Invalid bundle… contains disallowed file 'frameworks'という両方のターゲット原因エラーに設定します

私の場合、その.swiftAssetsフォルダーの外側に移動する必要があります。 次に、このようなビルドプロセスを作成しました

```C#

UNITY_2019_3_OR_NEWERの場合

    string target = proj.GetUnityMainTargetGuid();

そうしないと

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

終了

////

UNITY_2019_3_OR_NEWERの場合

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

そうしないと

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

終了

    {
        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");
    }

`` `

ここでの現在の回避策は、「use_frameworks!」を追加することです。 Podfile に追加するか、エクスポートされた iOS プロジェクトに空の swift ファイルを追加します。 この問題は8fdb57aで修正されており、次のリリースで出荷されます。

こんにちは! 修正をいつリリースするか教えてください。

@KylinChang修正は古いバージョンの Unity では正しいですが、Unity 2019.3 以降では別のターゲットを「修正」する必要があります。
https://github.com/YousicianGit/facebook-sdk-for-unity/commit/878fc7b73d9a2c3751bb36792f0276cdfacf9495

すぐに修正を PR に提出します。

この問題は最新のリリースで修正されています

このページは役に立ちましたか?
0 / 5 - 0 評価