Search Unity

Resolved arkit linker error command line build

Discussion in 'AR' started by keil_unity, Apr 21, 2021.

  1. keil_unity

    keil_unity

    Joined:
    Mar 2, 2021
    Posts:
    28
    hey all I am currently doing a command line build for ios and xcode and am receiving the error of


    [B]9:05:13[/B] "_UnityARKit_HumanBodyProvider_DoesSupportBodyPose2DEstimation", referenced from:
    [B]09:05:13[/B] _ARKitHumanBodySubsystem_Register_m4D905B68E4657CC74FE39C182B4381901B50BCAB in Unity.XR.ARKit.o
    [B]09:05:13[/B] _NativeApi_UnityARKit_HumanBodyProvider_DoesSupportBodyPose2DEstimation_mCD61190B23D81F08442BFCC33D933B476258C723 in Unity.XR.ARKit.o
    [B]09:05:13[/B] (maybe you meant: _NativeApi_UnityARKit_HumanBodyProvider_DoesSupportBodyPose2DEstimation_mCD61190B23D81F08442BFCC33D933B476258C723)
    [B]09:05:13[/B] ld: symbol(s) not found for architecture arm64
    [B]09:05:13[/B] clang: error: linker command failed with exit code 1 (use -v to see invocation)


    my original understanding is it could be due to the xr plugin managment system not being triggered so i wrote an enabler via script for it

    Code (CSharp):
    1.     private static void EnableARKit()
    2.     {
    3.         System.Console.WriteLine("ENABLE ARKIT");
    4.         string loaderTypeName = "UnityEngine.XR.ARKit.ARKitLoader";
    5.  
    6.         var iosXRSettings = XRGeneralSettingsPerBuildTarget.XRGeneralSettingsForBuildTarget(BuildTargetGroup.iOS);
    7.         if (iosXRSettings.Manager.activeLoaders.Count <= 0)
    8.         {
    9.             XRGeneralSettingsPerBuildTarget buildTargetSettings = null;
    10.             EditorBuildSettings.TryGetConfigObject(XRGeneralSettings.k_SettingsKey, out buildTargetSettings);
    11.             XRGeneralSettings settings = buildTargetSettings.SettingsForBuildTarget(BuildTargetGroup.iOS);
    12.             bool foundLoader = XRPackageMetadataStore.AssignLoader(settings.Manager, loaderTypeName, BuildTargetGroup.iOS);
    13.  
    14.             if (foundLoader)
    15.             {
    16.                 System.Console.WriteLine($"{loaderTypeName}: Found");
    17.             }
    18.             else
    19.             {
    20.                 throw new System.Exception($"{loaderTypeName}: Not Found");
    21.             }
    22.  
    23.             System.Console.WriteLine("Mark as dirty");
    24.             EditorUtility.SetDirty(settings);
    25.             System.Console.WriteLine("waiting 5 seconds");
    26.  
    27.             var waitForOneSecond = new EditorWaitForSeconds(5.0f);
    28.  
    29.             System.Console.WriteLine("finished waiting");
    30.  
    31.         }
    32.  
    33.     }

    but still seem to have no luck i really quite at a loss and would love some insight or discussion
     
  2. keil_unity

    keil_unity

    Joined:
    Mar 2, 2021
    Posts:
    28
    I got it to work with this
    Code (CSharp):
    1. using UnityEditor.Build;
    2. using UnityEditor.Build.Reporting;
    3. using UnityEditor;
    4. using UnityEngine.XR.Management;
    5. using UnityEditor.XR.Management;
    6. using UnityEditor.XR.Management.Metadata;
    7. using UnityEditor.PackageManager.Requests;
    8. using UnityEditor.PackageManager;
    9. using System.Threading;
    10. using System.Text;

    11. public class PluginController : IPreprocessBuildWithReport
    12. {
    13. public int callbackOrder => 1;

    14. public void OnPreprocessBuild(BuildReport report)
    15. {
    16. System.Console.WriteLine("starting packages");
    17. InitializePackages();
    18. }



    19. private void InitializePackages()
    20. {
    21. System.Console.WriteLine("Initialize packages");

    22. var listRequest = Client.List(true);
    23. while (!listRequest.IsCompleted)
    24. Thread.Sleep(100);

    25. if (listRequest.Error != null)
    26. {
    27. System.Console.WriteLine("Error: " + listRequest.Error.message);
    28. return;
    29. }

    30. var packages = listRequest.Result;
    31. var text = new StringBuilder("Packages:\n");
    32. foreach (var package in packages)
    33. {
    34. if (package.source == PackageSource.Registry)
    35. text.AppendLine($"{package.name}: {package.version} [{package.resolvedPath}]");
    36. }

    37. System.Console.WriteLine(text.ToString());
    38. EnableARKit();
    39. }


    40. private void EnableARKit()
    41. {
    42. System.Console.WriteLine("ENABLE ARKIT");
    43. string loaderTypeName = "UnityEngine.XR.ARKit.ARKitLoader";

    44. var iosXRSettings = XRGeneralSettingsPerBuildTarget.XRGeneralSettingsForBuildTarget(BuildTargetGroup.iOS);
    45. if (iosXRSettings.Manager.activeLoaders.Count <= 0)
    46. {
    47. EditorBuildSettings.TryGetConfigObject(XRGeneralSettings.k_SettingsKey, out XRGeneralSettingsPerBuildTarget buildTargetSettings);
    48. XRGeneralSettings settings = buildTargetSettings.SettingsForBuildTarget(BuildTargetGroup.iOS);
    49. bool foundLoader = XRPackageMetadataStore.AssignLoader(settings.Manager, loaderTypeName, BuildTargetGroup.iOS);

    50. if (foundLoader)
    51. {
    52. System.Console.WriteLine($"{loaderTypeName}: Found");
    53. }
    54. else
    55. {
    56. throw new System.Exception($"{loaderTypeName}: Not Found");
    57. }

    58. System.Console.WriteLine("Mark as dirty");
    59. EditorUtility.SetDirty(settings);
    60. }
    61. }

    62. }
    basically it initializes the packages and enables arkit during the preprocess phase so when we start to build for our platform target everthing is ready to go
     
  3. keil_unity

    keil_unity

    Joined:
    Mar 2, 2021
    Posts:
    28
    updated to new unity engine and now is broken
     
  4. davidmo_unity

    davidmo_unity

    Unity Technologies

    Joined:
    Jun 18, 2019
    Posts:
    99
    Would you mind posting which version of Unity + ARFoundation, ARKit, and XR Management package versions?