そういうのがいいブログ

アプリ個人開発 まるブログ

アプリ開発覚え書き

【Unity】【Xcode】 Validate App エラー対応 Invalid Bundle. The bundle at '◯◯.app/Frameworks/UnityFramework.framework' contains disallowed file 'Frameworks'.

環境

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'が含まれています。

※◯◯にはアプリ名が入ります。

対策

対策はこちらの記事の通りです。

zenn.dev

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"に設定する必要があります。

参考

forum.unity.com

forum.unity.com

github.com