Problems with EmbeddedFramework

I’m getting an error with [Require("Xcode.EmbeddedFramework", "@('my_path/my_framework':Path)]
It looks good in the project but I get

Undefined symbols for architecture arm64:
  "_OBJC_CLASS_$_External", referenced from:
      objc-class-ref in _root.Module.o

Everything works if I remove it and add it to the project manually.

This is the diff I get adding manually

diff --git a/CompabilityCheck.xcodeproj/project.pbxproj b/CompabilityCheck.xcodeproj/project.pbxproj
index fe68a47..f23eb15 100644
--- a/CompabilityCheck.xcodeproj/project.pbxproj
+++ b/CompabilityCheck.xcodeproj/project.pbxproj
@@ -9,6 +9,8 @@
 /* Begin PBXBuildFile section */
 		5A4940FC151D17AD000ACE3F /* data in Resources */ = {isa = PBXBuildFile; fileRef = 5A4940FB151D17AD000ACE3F /* data */; };
 		5AB0DAB318F6CF6C00975F8B /* CompabilityCheck/Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5AB0DAB218F6CF6C00975F8B /* CompabilityCheck/Images.xcassets */; };
+		BDCA1A2F208B324E00B58BAC /* zentri_ble_command.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BDCA1A2E208B324D00B58BAC /* zentri_ble_command.framework */; };
+		BDCA1A30208B324E00B58BAC /* zentri_ble_command.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BDCA1A2E208B324D00B58BAC /* zentri_ble_command.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
 		F00570010000000000000000 /* Uno.h in Headers */ = {isa = PBXBuildFile; fileRef = F00570010000000000000001 /* Uno.h */; };
 		F00570010000000000000002 /* _config.h in Headers */ = {isa = PBXBuildFile; fileRef = F00570010000000000000003 /* _config.h */; };
 		F00570010000000000000004 /* _internal.h in Headers */ = {isa = PBXBuildFile; fileRef = F00570010000000000000005 /* _internal.h */; };
@@ -2026,17 +2028,16 @@
 		F00570010000000000000FBC /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F00570010000000000000FBD /* CoreVideo.framework */; };
 		F00570010000000000000FBE /* CoreMedia.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F00570010000000000000FBF /* CoreMedia.framework */; };
 		F00570010000000000000FC0 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F00570010000000000000FC1 /* Security.framework */; };
-		F00570010000000000000FC6 /* zentri_ble_command.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = F00570010000000000000FC7 /* zentri_ble_command.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
 /* End PBXBuildFile section */
 
 /* Begin PBXCopyFilesBuildPhase section */
-		411CA8EC1C3C02DF00161584 /* Embed Frameworks */ = {
+		BDCA1A31208B324E00B58BAC /* Embed Frameworks */ = {
 			isa = PBXCopyFilesBuildPhase;
 			buildActionMask = 2147483647;
 			dstPath = "";
 			dstSubfolderSpec = 10;
 			files = (
-				F00570010000000000000FC6 /* zentri_ble_command.framework in Embed Frameworks */,
+				BDCA1A30208B324E00B58BAC /* zentri_ble_command.framework in Embed Frameworks */,
 			);
 			name = "Embed Frameworks";
 			runOnlyForDeploymentPostprocessing = 0;
@@ -2047,6 +2048,7 @@
 		5A493DA5151A216A000ACE3F /* CompabilityCheck.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CompabilityCheck.app; sourceTree = BUILT_PRODUCTS_DIR; };
 		5A4940FB151D17AD000ACE3F /* data */ = {isa = PBXFileReference; lastKnownFileType = folder; path = data; sourceTree = "<group>"; };
 		5AB0DAB218F6CF6C00975F8B /* CompabilityCheck/Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = CompabilityCheck/Images.xcassets; sourceTree = "<group>"; };
+		BDCA1A2E208B324D00B58BAC /* zentri_ble_command.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = zentri_ble_command.framework; path = ../../../ios/zentri_ble_command.framework; sourceTree = "<group>"; };
 		F00570010000000000000001 /* Uno.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Uno.h; path = include/Uno.h; sourceTree = "<group>"; };
 		F00570010000000000000003 /* _config.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = _config.h; path = include/Uno/_config.h; sourceTree = "<group>"; };
 		F00570010000000000000005 /* _internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = _internal.h; path = include/Uno/_internal.h; sourceTree = "<group>"; };
@@ -4091,6 +4093,7 @@
 				F00570010000000000000FBC /* CoreVideo.framework in Frameworks */,
 				F00570010000000000000FBE /* CoreMedia.framework in Frameworks */,
 				F00570010000000000000FC0 /* Security.framework in Frameworks */,
+				BDCA1A2F208B324E00B58BAC /* zentri_ble_command.framework in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -4100,6 +4103,7 @@
 		5A493D9A151A216A000ACE3F = {
 			isa = PBXGroup;
 			children = (
+				BDCA1A2E208B324D00B58BAC /* zentri_ble_command.framework */,
 				FC61D3661F1CECFC00DC7109 /* CompabilityCheck.entitlements */,
 				5A4940F1151BFBA0000ACE3F /* Resources */,
 				5A493DA9151A216A000ACE3F /* Headers */,
@@ -8027,8 +8031,8 @@
 				5A493DA1151A216A000ACE3F /* Sources */,
 				5A493DA2151A216A000ACE3F /* Frameworks */,
 				5A493DA3151A216A000ACE3F /* Resources */,
-				411CA8EC1C3C02DF00161584 /* Embed Frameworks */,
 				9AD4CD511E23E76F005179FC /* ShellScript */,
+				BDCA1A31208B324E00B58BAC /* Embed Frameworks */,
 			);
 			buildRules = (
 			);
diff --git a/CompabilityCheck.xcodeproj/project.xcworkspace/xcuserdata/bolav.xcuserdatad/UserInterfaceState.xcuserstate b/CompabilityCheck.xcodeproj/project.xcworkspace/xcuserdata/bolav.xcuserdatad/UserInterfaceState.xcuserstate
index 7fbcc42..26da9a6 100644
Binary files a/CompabilityCheck.xcodeproj/project.xcworkspace/xcuserdata/bolav.xcuserdatad/UserInterfaceState.xcuserstate and b/CompabilityCheck.xcodeproj/project.xcworkspace/xcuserdata/bolav.xcuserdatad/UserInterfaceState.xcuserstate differ

Hmm, odd! It seems like Xcode is doing something more than it usually does for embedded frameworks, or it has changed since we added this feature.

It looks a little bit like adding the framework both as Xcode.EmbeddedFramework and Xcode.Framework might work. If it doesn’t it’d be helpful if you could provide a full (and preferably small) project that reproduces the problem, including the framework in question, for us to be able to verify a potential fix.

Yes that works. I actually tried it before reading this post, and it seems like it works. I haven’t tested it enough yet, though.