game-ci / unity-builder

Build Unity projects for different platforms
https://github.com/marketplace/actions/unity-builder
MIT License
846 stars 245 forks source link

Generated XCode project does not link UnityARKitFaceTracking #155

Closed marns closed 3 years ago

marns commented 4 years ago

Bug description

unity-builder successfully generates an Xcode project dependent on ARKit Face Tracking, which can then be compiled successfully from the IDE;

However when compiling that Xcode project from the command line, a linker error is generated: Undefined symbols for architecture arm64

I compared the Xcode project generated from my Unity editor to the one generated by unity-builder, and found that when running from the command line with the same parameters:

xcodebuild -scheme Unity-iPhone -project Unity-iPhone.xcodeproj -configuration Release -destination 'generic/platform=iOS'

The Xcode linking step Ld passes a number of parameters: My proj: ... -lUnityARKit -framework iosInternal -lUnityARKitFaceTracking ... unity-builder: ... -lUnityARKit -framework iosInternal ...

LibrarylUnityARKitFaceTracking is not linked in the unity-builder version, presumably causing the linker error.

Additional details

All tests running macOS 10.15.6, Xcode 12.0, Unity 2021.5f1, ARKit Face Tracking 4.1.0-preview.7

webbertakken commented 4 years ago

Hi @marns, thank you for reporting this issue.

Do you have any idea what we could do to solve this problem?

Are you using unity 2019.4+ in builder?

Could you perhaps show more logs from the Xcode linking step?

marns commented 4 years ago

Thanks for the fast reply @webbertakken

I'm not really sure yet why the flag might be missing. I verified unity-builder is using Unity 2020.1.5f1:

/usr/bin/docker build /home/runner/work/_actions/webbertakken/unity-builder/v1.2/action --file /home/runner/work/_actions/webbertakken/unity-builder/v1.2/action/Dockerfile --build-arg IMAGE=gableroux/unity3d:2020.1.5f1-ios --tag unity-builder:2020.1.5f1-ios

The whole linking step is below; it's identical to the output from my Unity build except for the missing -lUnityARKitFaceTracking and the project path.

Ld /Users/martin/Library/Developer/Xcode/DerivedData/Unity-iPhone-cajovpwrdcbxyubykzhxzsxcwohi/Build/Products/Release-iphoneos/UnityFramework.framework/UnityFramework normal arm64
    cd /Users/martin/Downloads/iOS/iOS
    export PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/Users/martin/platform-tools:/Users/martin/miniconda3/bin:/Users/martin/miniconda3/condabin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/share/dotnet:/opt/X11/bin:~/.dotnet/tools:/Library/Apple/usr/bin:/Library/Frameworks/Mono.framework/Versions/Current/Commands:/Applications/Xamarin Workbooks.app/Contents/SharedSupport/path-bin:/Users/martin/.dotnet/tools"
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -target arm64-apple-ios13.0 -dynamiclib -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk -L/Users/martin/Library/Developer/Xcode/DerivedData/Unity-iPhone-cajovpwrdcbxyubykzhxzsxcwohi/Build/Products/Release-iphoneos -L/Users/martin/Downloads/iOS/iOS/Libraries -L/Users/martin/Downloads/iOS/iOS/Libraries/com.unity.xr.arkit/Runtime/iOS/Xcode1200 -F/Users/martin/Library/Developer/Xcode/DerivedData/Unity-iPhone-cajovpwrdcbxyubykzhxzsxcwohi/Build/Products/Release-iphoneos -F/Users/martin/Downloads/iOS/iOS/Frameworks/itseez3d/avatar_sdk/sdk_core/Plugins/iOS -F/Users/martin/Downloads/iOS/iOS/Frameworks/com.microsoft.azure.spatial-anchors-sdk.ios/Plugins/iOS -filelist /Users/martin/Library/Developer/Xcode/DerivedData/Unity-iPhone-cajovpwrdcbxyubykzhxzsxcwohi/Build/Intermediates.noindex/Unity-iPhone.build/Release-iphoneos/UnityFramework.build/Objects-normal/arm64/UnityFramework.LinkFileList -install_name @rpath/UnityFramework.framework/UnityFramework -Xlinker -rpath -Xlinker @executable_path/Frameworks -Xlinker -rpath -Xlinker @loader_path/Frameworks -Xlinker -map -Xlinker /Users/martin/Library/Developer/Xcode/DerivedData/Unity-iPhone-cajovpwrdcbxyubykzhxzsxcwohi/Build/Intermediates.noindex/Unity-iPhone.build/Release-iphoneos/UnityFramework.build/UnityFramework-LinkMap-normal-arm64.txt -dead_strip -Xlinker -object_path_lto -Xlinker /Users/martin/Library/Developer/Xcode/DerivedData/Unity-iPhone-cajovpwrdcbxyubykzhxzsxcwohi/Build/Intermediates.noindex/Unity-iPhone.build/Release-iphoneos/UnityFramework.build/Objects-normal/arm64/UnityFramework_lto.o -fembed-bitcode-marker -stdlib=libc++ -fobjc-arc -fobjc-link-runtime -weak_framework CoreMotion -weak-lSystem -liPhone-lib -framework Security -framework MediaToolbox -framework CoreText -framework AudioToolbox -weak_framework AVFoundation -framework AVKit -framework CFNetwork -framework CoreGraphics -framework CoreMedia -weak_framework CoreMotion -framework CoreVideo -framework Foundation -framework OpenAL -framework QuartzCore -framework SystemConfiguration -framework UIKit -liconv.2 -lil2cpp /Users/martin/Downloads/iOS/iOS/Libraries/baselib.a -lUnityARKit -framework iosInternal -framework AzureSpatialAnchors -framework CoarseReloc -framework ARKit -framework MetalPerformanceShaders -weak_framework ReplayKit -weak_framework Metal -weak_framework GameController -Xlinker -dependency_info -Xlinker /Users/martin/Library/Developer/Xcode/DerivedData/Unity-iPhone-cajovpwrdcbxyubykzhxzsxcwohi/Build/Intermediates.noindex/Unity-iPhone.build/Release-iphoneos/UnityFramework.build/Objects-normal/arm64/UnityFramework_dependency_info.dat -o /Users/martin/Library/Developer/Xcode/DerivedData/Unity-iPhone-cajovpwrdcbxyubykzhxzsxcwohi/Build/Products/Release-iphoneos/UnityFramework.framework/UnityFramework
Undefined symbols for architecture arm64:
  "_UnityARKit_FaceProvider_AcquireFaceAnchor", referenced from:
      _ARKitFaceSubsystem_UnityARKit_FaceProvider_AcquireFaceAnchor_mCA5ED0BAF8F40A1381C924F3746F6F4A7D24E859 in Unity.XR.ARKit.FaceTracking.o
      _ARKitProvider_GetFaceMesh_m741F0339012243B63B323EA9479A61D12D2B6C58 in Unity.XR.ARKit.FaceTracking.o
     (maybe you meant: _ARKitFaceSubsystem_UnityARKit_FaceProvider_AcquireFaceAnchor_mCA5ED0BAF8F40A1381C924F3746F6F4A7D24E859)
  "_UnityARKit_FaceProvider_SetRequestedMaximumFaceCount", referenced from:
      _ARKitFaceSubsystem_UnityARKit_FaceProvider_SetRequestedMaximumFaceCount_mEF2E6553693DE0FF024B275DF8A24D4EE63E0C67 in Unity.XR.ARKit.FaceTracking.o
      _ARKitProvider_set_requestedMaximumFaceCount_m797EE5A23724B35FFF5A50F0715919BC8A06B57E in Unity.XR.ARKit.FaceTracking.o
     (maybe you meant: _ARKitFaceSubsystem_UnityARKit_FaceProvider_SetRequestedMaximumFaceCount_mEF2E6553693DE0FF024B275DF8A24D4EE63E0C67)
  "_UnityARKit_FaceProvider_ReleaseChanges", referenced from:
      _ARKitFaceSubsystem_UnityARKit_FaceProvider_ReleaseChanges_m37CA49550D76A937A3A0741A07A5C5D3BA616906 in Unity.XR.ARKit.FaceTracking.o
      _ARKitProvider_GetChanges_m74FB16F6645BC80CE2F96636884D6B22E5B7FBF3 in Unity.XR.ARKit.FaceTracking.o
      _ARKitProvider_GetChanges_m74FB16F6645BC80CE2F96636884D6B22E5B7FBF3.cold.1 in Unity.XR.ARKit.FaceTracking.o
     (maybe you meant: _ARKitFaceSubsystem_UnityARKit_FaceProvider_ReleaseChanges_m37CA49550D76A937A3A0741A07A5C5D3BA616906)
  "_UnityARKit_FaceProvider_GetSupportedFaceCount", referenced from:
      _ARKitFaceSubsystem_UnityARKit_FaceProvider_GetSupportedFaceCount_m660368444B21A741EAB6714221AB68F6C2CD0451 in Unity.XR.ARKit.FaceTracking.o
      _ARKitProvider_get_supportedFaceCount_m2C25996917B196615DBC337F0909B21C7C82B39E in Unity.XR.ARKit.FaceTracking.o
     (maybe you meant: _ARKitFaceSubsystem_UnityARKit_FaceProvider_GetSupportedFaceCount_m660368444B21A741EAB6714221AB68F6C2CD0451)
  "_UnityARKit_FaceProvider_AcquireChanges", referenced from:
      _ARKitFaceSubsystem_UnityARKit_FaceProvider_AcquireChanges_m903B774621588E06CA5641B802BDEB8FF7645CA7 in Unity.XR.ARKit.FaceTracking.o
      _ARKitProvider_GetChanges_m74FB16F6645BC80CE2F96636884D6B22E5B7FBF3 in Unity.XR.ARKit.FaceTracking.o
     (maybe you meant: _ARKitFaceSubsystem_UnityARKit_FaceProvider_AcquireChanges_m903B774621588E06CA5641B802BDEB8FF7645CA7)
  "_UnityARKit_FaceProvider_DeallocateTempMemory", referenced from:
      _ARKitFaceSubsystem_UnityARKit_FaceProvider_DeallocateTempMemory_mFA056649EBEC0EA596B86E7776ED89A69CA54DA3 in Unity.XR.ARKit.FaceTracking.o
      _ARKitFaceSubsystem_GetBlendShapeCoefficients_mE983A3A34A04F8C6340EF79A06138BEA025F9721 in Unity.XR.ARKit.FaceTracking.o
     (maybe you meant: _ARKitFaceSubsystem_UnityARKit_FaceProvider_DeallocateTempMemory_mFA056649EBEC0EA596B86E7776ED89A69CA54DA3)
  "_UnityARKit_FaceProvider_GetRequestedMaximumFaceCount", referenced from:
      _ARKitFaceSubsystem_UnityARKit_FaceProvider_GetRequestedMaximumFaceCount_m009D20663FC8567FDF16E9B6DDE8A3F738A797D3 in Unity.XR.ARKit.FaceTracking.o
      _ARKitProvider_get_requestedMaximumFaceCount_mC10877AC4500D774E06CCAAC976421ED9E0F09A1 in Unity.XR.ARKit.FaceTracking.o
     (maybe you meant: _ARKitFaceSubsystem_UnityARKit_FaceProvider_GetRequestedMaximumFaceCount_m009D20663FC8567FDF16E9B6DDE8A3F738A797D3)
  "_UnityARKit_FaceProvider_Initialize", referenced from:
      _ARKitFaceSubsystem_UnityARKit_FaceProvider_Initialize_mFEFCC10A1D16F6A553EC9480EE070081C8201070 in Unity.XR.ARKit.FaceTracking.o
      _ARKitFaceSubsystem_CreateProvider_mE7BD8AFDB6B4B734CB1D7B96C806FA1BE98AAEB4 in Unity.XR.ARKit.FaceTracking.o
      _ARKitProvider__ctor_mF8ABBB36CFF4009240926841B45BBACD66DB52D9 in Unity.XR.ARKit.FaceTracking.o
     (maybe you meant: _ARKitFaceSubsystem_UnityARKit_FaceProvider_Initialize_mFEFCC10A1D16F6A553EC9480EE070081C8201070)
  "_UnityARKit_FaceProvider_TryAcquireFaceBlendCoefficients", referenced from:
      _ARKitFaceSubsystem_UnityARKit_FaceProvider_TryAcquireFaceBlendCoefficients_m72678365F53600A14CDD44564E9EE616163AE3A3 in Unity.XR.ARKit.FaceTracking.o
      _ARKitFaceSubsystem_GetBlendShapeCoefficients_mE983A3A34A04F8C6340EF79A06138BEA025F9721 in Unity.XR.ARKit.FaceTracking.o
     (maybe you meant: _ARKitFaceSubsystem_UnityARKit_FaceProvider_TryAcquireFaceBlendCoefficients_m72678365F53600A14CDD44564E9EE616163AE3A3)
  "_UnityARKit_FaceProvider_IsEyeTrackingSupported", referenced from:
      _ARKitFaceSubsystem_UnityARKit_FaceProvider_IsEyeTrackingSupported_m834B62EA3CE8D12C7520F7AF88C91692D9F29F97 in Unity.XR.ARKit.FaceTracking.o
      _ARKitFaceSubsystem_RegisterDescriptor_mCDE7CD16B0F2524FFBE6C1E05A1C78CFA0E0DF3E in Unity.XR.ARKit.FaceTracking.o
     (maybe you meant: _ARKitFaceSubsystem_UnityARKit_FaceProvider_IsEyeTrackingSupported_m834B62EA3CE8D12C7520F7AF88C91692D9F29F97)
  "_UnityARKit_FaceProvider_Stop", referenced from:
      _ARKitFaceSubsystem_UnityARKit_FaceProvider_Stop_mA78405212AF75CD7AAEA96213249DF6B329DCFB1 in Unity.XR.ARKit.FaceTracking.o
      _ARKitProvider_Stop_m0A7356D17D90ED001CE4B86B9E9502863547F756 in Unity.XR.ARKit.FaceTracking.o
     (maybe you meant: _ARKitFaceSubsystem_UnityARKit_FaceProvider_Stop_mA78405212AF75CD7AAEA96213249DF6B329DCFB1)
  "_UnityARKit_FaceProvider_IsSupported", referenced from:
      _ARKitFaceSubsystem_UnityARKit_FaceProvider_IsSupported_mD5D180359516D9C3EC555426FDE731EB16D7EFCC in Unity.XR.ARKit.FaceTracking.o
      _ARKitFaceSubsystem_RegisterDescriptor_mCDE7CD16B0F2524FFBE6C1E05A1C78CFA0E0DF3E in Unity.XR.ARKit.FaceTracking.o
     (maybe you meant: _ARKitFaceSubsystem_UnityARKit_FaceProvider_IsSupported_mD5D180359516D9C3EC555426FDE731EB16D7EFCC)
  "_UnityARKit_FaceProvider_Start", referenced from:
      _ARKitFaceSubsystem_UnityARKit_FaceProvider_Start_mF2AD76E77A382459ADB0E61D88ACD355C5A54BD4 in Unity.XR.ARKit.FaceTracking.o
      _ARKitProvider_Start_mABAF1866CBBE303A459729E26B23CC63DD977200 in Unity.XR.ARKit.FaceTracking.o
     (maybe you meant: _ARKitFaceSubsystem_UnityARKit_FaceProvider_Start_mF2AD76E77A382459ADB0E61D88ACD355C5A54BD4)
  "_UnityARKit_FaceProvider_GetMaximumFaceCount", referenced from:
      _ARKitFaceSubsystem_UnityARKit_FaceProvider_GetMaximumFaceCount_m989B8F9A715B39D93A3B0C23D2CD3B0B0C794CD2 in Unity.XR.ARKit.FaceTracking.o
      _ARKitProvider_get_currentMaximumFaceCount_m7D7FD609848BD6DDD79A56D157C6E3AF72649DC6 in Unity.XR.ARKit.FaceTracking.o
     (maybe you meant: _ARKitFaceSubsystem_UnityARKit_FaceProvider_GetMaximumFaceCount_m989B8F9A715B39D93A3B0C23D2CD3B0B0C794CD2)
  "_UnityARKit_FaceProvider_ReleaseFaceAnchor", referenced from:
      _ARKitFaceSubsystem_UnityARKit_FaceProvider_ReleaseFaceAnchor_m61116A7538B74311076BECF2FF59D111B069754D in Unity.XR.ARKit.FaceTracking.o
      _ARKitProvider_GetFaceMesh_m741F0339012243B63B323EA9479A61D12D2B6C58 in Unity.XR.ARKit.FaceTracking.o
     (maybe you meant: _ARKitFaceSubsystem_UnityARKit_FaceProvider_ReleaseFaceAnchor_m61116A7538B74311076BECF2FF59D111B069754D)
  "_UnityARKit_FaceProvider_OnRegisterDescriptor", referenced from:
      _ARKitFaceSubsystem_UnityARKit_FaceProvider_OnRegisterDescriptor_mFF88BD6F056A332E14175370D504D4A4A4C899F0 in Unity.XR.ARKit.FaceTracking.o
      _ARKitFaceSubsystem_RegisterDescriptor_mCDE7CD16B0F2524FFBE6C1E05A1C78CFA0E0DF3E in Unity.XR.ARKit.FaceTracking.o
     (maybe you meant: _ARKitFaceSubsystem_UnityARKit_FaceProvider_OnRegisterDescriptor_mFF88BD6F056A332E14175370D504D4A4A4C899F0)
  "_UnityARKit_FaceProvider_Shutdown", referenced from:
      _ARKitFaceSubsystem_UnityARKit_FaceProvider_Shutdown_mA1DCC2FDFB73EC97C05A1DECC68E82BCCC794A75 in Unity.XR.ARKit.FaceTracking.o
      _ARKitProvider_Destroy_m85F85F4DDB06853CF29F442E83D799211BA2F6B8 in Unity.XR.ARKit.FaceTracking.o
     (maybe you meant: _ARKitFaceSubsystem_UnityARKit_FaceProvider_Shutdown_mA1DCC2FDFB73EC97C05A1DECC68E82BCCC794A75)
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

** BUILD FAILED **

The following build commands failed:
    Ld /Users/martin/Library/Developer/Xcode/DerivedData/Unity-iPhone-cajovpwrdcbxyubykzhxzsxcwohi/Build/Products/Release-iphoneos/UnityFramework.framework/UnityFramework normal arm64
(1 failure)
(base) martin@Martins-MacBook-Pro iOS % xcodebuild -scheme Unity-iPhone -project Unity-iPhone.xcodeproj -configuration Release -destination 'generic/platform=iOS'
webbertakken commented 4 years ago

Thank you @marns.

By the way feel free to join us on http://unity-ci.com/discord to discuss it further. There may be other people that know better how to go about this than I.

marns commented 4 years ago

I compared the project.pbxproj files and found that the unity-builder version is missing all references to com.unity.xr.arkit-face-tracking, e.g. it should be found in:

LIBRARY_SEARCH_PATHS = (
                    "$(inherited)",
                    "$(PROJECT_DIR)/Libraries",
                    "$(SRCROOT)/Libraries/com.unity.xr.arkit/Runtime/iOS/Xcode1200",
                    "$(SRCROOT)/Libraries/com.unity.xr.arkit-face-tracking/Runtime/iOS/Xcode1200",
                );

and

D8A1C7220E80637F000160D3 /* Libraries */ = {
            isa = PBXGroup;
            children = (
                AAC3E38B1A68945900F6174A /* RegisterFeatures.cpp */,
                                ....
                BBB74B529B7CE7F9D8BAD8B6 /* com.unity.xr.arkit-face-tracking */,
            );
marns commented 4 years ago

Looking at the ARKitBuildProcessor, I found that the preprocessor class includes libUnityARKitFaceTracking.a conditionally (using plugin.SetIncludeInBuildDelegate) based on whether ARKitSettings.faceTracking (an XR config setting) is true.

I added a custom preprocessor to do something similar, and verify the setting (it was true as expected). But for some reason the framework / lib is just not getting added to the Xcode project.

webbertakken commented 3 years ago

@marns did you ever solve this problem?

charlieroberts commented 3 years ago

just pinging the thread in case any progress has been made on this... I'm having the same errors. edit: if I go ahead and check the box in Unity to include face tracking (2021.1.0f1) then the linking errors disappear. So it seems like the build settings coming from Unity are incorrect when that box (Project settings > XR Plug-in Management > ARKit > Face Tracking) is not checked.

davidmfinol commented 3 years ago

@charlieroberts looks like you found a solution/workaround, so closing this issue.

acmoles commented 2 years ago

@charlieroberts Great find, this helped me.

For anyone else looking for build issues relating to ARKit face tracking, the solution is still to check Face Tracking even if you're not using it.