以下の内容はhttps://redhologerbera.hatenablog.com/entry/2025/01/28/224543より取得しました。


Unity iOSアプリで音声認識を実装する その① 失敗

本日はUnity Apple枠です。

ふとiOSアプリで音声コマンドを使えるのかが気になったため調べていきます。

〇環境

・Windows11PC

・Unity6000.0.32.f1

iOS音声認識を行う

iOS音声認識を行う記事としていかがヒットしました。

https://qiita.com/noir_neo/items/e51f2b503883d9b26c07#comments

こちらの記事は2017年に公開されており、かなりの時間が経過していますが、今回こちらの方法が有効であるかを試していきます。

まずは記事内で公開されていたGitHubリポジトリをクローンしてプロジェクトをビルドしてみます。

https://github.com/noir-neo/UniSpeech

元々のオリジナルのプロジェクトではUnity2017が用いられています。

今回はUnity6000.32.f1で開いていきます。

Unity6で開くとAssets/UnitySwift/Editor/PostProcessor.csにてエラーが発生しています。

これはPBXProject.GetUnityTargetName()メソッドが廃止されているため発生しております。

Assets/UnitySwift/Editor/PostProcessor.csIDEで開きます。

PostProcesserの中身を以下のように書き換えます。

 public static class PostProcessor {
        [PostProcessBuild]
        public static void OnPostProcessBuild(BuildTarget buildTarget, string buildPath) {
            if(buildTarget == BuildTarget.iOS) {
                // So PBXProject.GetPBXProjectPath returns wrong path, we need to construct path by ourselves instead
                // var projPath = PBXProject.GetPBXProjectPath(buildPath);
                var projPath = buildPath + "/Unity-iPhone.xcodeproj/project.pbxproj";
                var proj = new PBXProject();
                proj.ReadFromFile(projPath);

                // Use the new methods to get the target GUIDs
                var mainTargetGuid = proj.GetUnityMainTargetGuid();
                var frameworkTargetGuid = proj.GetUnityFrameworkTargetGuid();

                //// Configure build settings for the main target
                proj.SetBuildProperty(mainTargetGuid, "ENABLE_BITCODE", "NO");
                proj.SetBuildProperty(mainTargetGuid, "SWIFT_OBJC_BRIDGING_HEADER", "Libraries/UnitySwift/UnitySwift-Bridging-Header.h");
                proj.SetBuildProperty(mainTargetGuid, "SWIFT_OBJC_INTERFACE_HEADER_NAME", "unityswift-Swift.h");
                proj.AddBuildProperty(mainTargetGuid, "LD_RUNPATH_SEARCH_PATHS", "@executable_path/Frameworks");

                // Configure build settings for the framework target if needed
                proj.SetBuildProperty(frameworkTargetGuid, "ENABLE_BITCODE", "NO");
                proj.SetBuildProperty(frameworkTargetGuid, "SWIFT_OBJC_BRIDGING_HEADER", "Libraries/UnitySwift/UnitySwift-Bridging-Header.h");
                proj.SetBuildProperty(frameworkTargetGuid, "SWIFT_OBJC_INTERFACE_HEADER_NAME", "unityswift-Swift.h");
                proj.AddBuildProperty(frameworkTargetGuid, "LD_RUNPATH_SEARCH_PATHS", "@executable_path/Frameworks");

                proj.WriteToFile(projPath);
            }
        }

具体的にはGetUnityMainTargetGuid() と GetUnityFrameworkTargetGuid() を使用して、正しいターゲットGUIDを取得することができるように変更し、最新のUnityでも対応できるようにしました。

これによってエラーが解消されます。

次にAssets/UniSpeech/Sample/Scenes/UniSpeechSample.unityを開きます。

最後にBuildSettingsからプラットフォームをiOSに変更します。

ビルドをして実機で確認します。 この際にエラーが発生しました。

Using bridging headers with framework targets is unsupportedというエラーは、Objective-CとSwiftを混在させたプロジェクトで、Bridging Header(ブリッジングヘッダー)が不適切に扱われていることが原因でUnityプロジェクトからXcodeでビルドする際、この問題が発生する場合があるそうです。

また無理やり解消してもSwiftコードのバージョンが古いことによってビルド時にエラーが出ています。

こちらは次回解消を試みます。




以上の内容はhttps://redhologerbera.hatenablog.com/entry/2025/01/28/224543より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14