本日はUnity Apple枠です。
ふとiOSアプリで音声コマンドを使えるのかが気になったため調べていきます。
〇環境
・Windows11PC
・Unity6000.0.32.f1
〇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.csをIDEで開きます。

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コードのバージョンが古いことによってビルド時にエラーが出ています。

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