環境
MacOS:Monterey 12.4
Unity:2021.3.3f1
Xcode:13.4.1
Google Mobile Ads:v7.0.2
PlayFabSDK:2.138.220621
はじめに
XcodeでVaridate Appを行ったところ、
下記のエラーが発生しました。
Invalid Bundle. The bundle at '◯◯.app/Frameworks/UnityFramework.framework' contains disallowed file 'Frameworks'.
日本語訳
バンドルが無効です。 '◯◯.app/Frameworks/UnityFramework.framework'のバンドルには、許可されていないファイル'Frameworks'が含まれています。
※◯◯にはアプリ名が入ります。
対策
対策はこちらの記事の通りです。
1.Editorフォルダ下にスクリプトを新規作成
「XcodeSwiftVersionPostProcess」という名前でスクリプトを新規作成
作成したスクリプトをEditorフォルダ下に移動します。
2.スクリプト編集
スクリプト内容はこちらの内容にします。
using System.IO; using UnityEditor; using UnityEditor.Callbacks; using UnityEditor.iOS.Xcode; namespace Editor { 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); } } }
スクリプト内容
先ほどのスクリプトは以下を自動で設定する内容となります。
Unity-iPhoneターゲットの場合、
「Always EmbedSwiftStandartLibraries」を"Yes"に設定する必要があります。
それ以外のターゲットの場合、
「Always EmbedSwiftStandartLibraries」を"No"に設定する必要があります。