[unity] AppStore アップロード時の Asset validation failed エラー

いざ Swift(xcode) のコード入り Unity プロジェクトを AppStore にアップしようとすると、見慣れないこんなエラーに阻まれてしまいます。
この回避策を紹介します。

Unity2021.3 の情報なので、他のバージョンだと多少異なるかもしれません。

「UnityFramework」ビルド設定に必要な項目がある

UnityFramework の Build Settings に Always Embed Swift Standard Libraries という項目があるので、これを「No」にしてください。
その後アーカイブすれば、無事エラーを回避して AppStore にアップロードできます。

なお、Unity-iPhone Tests にも同様の項目がありますが、こちらは無視して大丈夫です。

毎回「No」にするのが面倒

Unity でビルドする度に Yes に戻ってしまうのが面倒であれば、ポストプロセスで処理しましょう。
こんなコードを Assets/Editor に含めます。

using UnityEngine;
using UnityEditor;
using UnityEditor.Callbacks;
#if UNITY_IOS
using UnityEditor.iOS.Xcode;
#endif
using System.IO;

public class OnPostBuildProcess : MonoBehaviour
{
    [PostProcessBuild]
    public static void OnPostProcessBuild(BuildTarget buildTarget, string path)
    {
        if (buildTarget == BuildTarget.iOS)
        {
            processForiOS(path);
        }
    }

    static void processForiOS(string path)
    {
#if UNITY_IOS
        string     pbxPath = PBXProject.GetPBXProjectPath(path);
        PBXProject pbx     = new PBXProject();

        pbx.ReadFromString(File.ReadAllText(pbxPath));

        string target = pbx.GetUnityFrameworkTargetGuid();
        pbx.SetBuildProperty(target, "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES", "NO");

        File.WriteAllText (pbxPath, pbx.WriteToString ());
#endif
    }
}

ビルドした後、自動的に「No」になっているかを確かめます。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA