Xcode からiOSアプリを App Store Connect に提出しようとした際「Asset validation failed」というエラーが出て送信に失敗しました。
Xcode の提出画面ではこれ以上の詳しい情報が出力されなかったので、アプリを .ipa 形式で出力して Transporter を使って提出しようとしたところ、以下のエラー詳細が得られました。
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」の対応でした。

