iOSアプリ提出時のエラー「Asset validation failed」の対応

2022年7月28日(更新: 2022年7月28日)

Xcode からiOSアプリを App Store Connect に提出しようとした際「Asset validation failed」というエラーが出て送信に失敗しました。

Xcode の提出画面ではこれ以上の詳しい情報が出力されなかったので、アプリを .ipa 形式で出力して Transporter を使って提出しようとしたところ、以下のエラー詳細が得られました。

エラー「Asset validation failed」の詳細

Asset validation failed
Invalid Bundle. The bundle at ‘Name.app/Frameworks/UnityFramework.framework’ contains disallowed file ‘Frameworks’.

調べてみると Xcode の Target にて Build Option > Always Embed Swift Standard Libraries を Yes に設定することで直るという情報がありましたが、確認してみると既に Yes に設定されていました。

さらに調べてみると以下のフォーラムに、あるスクリプトが公開されていました。

Bug – An empty folder named ‘Frameworks’ in UnityFramework.framework – Unity Forum

XcodeSwiftVersionPostProcess.cs

using UnityEditor;
using UnityEditor.Callbacks;
using UnityEditor.iOS.Xcode;

public static class XcodeSwiftVersionPostProcess
{
    [PostProcessBuild(999)]
    public static void OnPostProcessBuild(BuildTarget buildTarget, string path)
    {
        if (buildTarget == BuildTarget.iOS)
        {
            ModifyFrameworks(path);
        }
    }

    private static void ModifyFrameworks(string path)
    {
        string projPath = PBXProject.GetPBXProjectPath(path);

        var project = new PBXProject();
        project.ReadFromFile(projPath);

        string mainTargetGuid = project.GetUnityMainTargetGuid();

        foreach (var targetGuid in new[] { mainTargetGuid, project.GetUnityFrameworkTargetGuid() })
        {
            project.SetBuildProperty(targetGuid, "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES", "NO");
        }

        project.SetBuildProperty(mainTargetGuid, "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES", "YES");

        project.WriteToFile(projPath);
    }
}

こちらを Editor フォルダに入れて再度提出を試みたところ Xcode から無事に送信することができました。

以上、iOSアプリ提出時のエラー「Asset validation failed」の対応でした。

コメントを残す

メールアドレスが公開されることはありません。