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」の対応でした。