使用Xamarin将dext绑定到iOS.ipa中

apeeds0o  于 2023-08-01  发布在  iOS
关注(0)|答案(2)|浏览(104)

我有一个项目,需要两个步骤来构建iOS应用程序。有原生库和XCode中构建的.dext,然后它们链接到Xamarin项目,我使用该项目在VisualStudio build上完成C#中的应用程序构建。在Xamarin项目中链接静态库很简单,将.dext嵌入到其他仅在XCode中的原生应用程序也很简单,但我不确定如何将.dext嵌入到Xamarin项目应用程序中。
你能把Xamarincsproj中的所有.dext包中的文件(嵌入的配置文件、CodeSignature、Info.plist和构建的驱动程序)捆绑到.ipa中的SystemExtension文件夹中吗?似乎也没有办法从Xcode构建中获得签名的.dext包;对于特定的驱动程序dext,复制文件“复制时的代码签名”复选框被取消。

mzaanser

mzaanser1#

我不知道Xamarin,但我可以回答你的部分问题:
似乎也没有办法从Xcode构建中获得签名的.dext包;对于特定的驱动程序dext,复制文件“复制时的代码签名”复选框被取消。
这是因为你 * 真的不想 * 用与应用程序相同的代码签名设置对dext进行签名。它有自己的应用ID、授权和相应的配置文件。然而,禁用的tickbox只是意味着当涉及到将其嵌入应用程序时,dext应该 * 已经 * 被预签名。如果你在Xcode/xcodebuild中构建了自己的dext目标,它应该已经被签名了--如果不是这样,你的dext目标配置错误。
“复制文件”步骤是在目标捆绑包签名之前将项目 * 复制到 * 目标捆绑包中,而不是将构建的目标复制到其他地方。“拷贝时代码签名”选项可单独对拷贝的项目进行签名,* 此外 * 还可在最后对整个捆绑包进行签名。因此,这不适合作为在构建过程中将构建并签名的dext复制到特定位置的机制。
嵌入dext所需的全部工作应该是将其复制到应用程序包中的正确位置,然后正常签署应用程序(可能使用communicates-with-drivers entitlement)。
我不能告诉你这是如何与Xamarin,具体。但是,我的建议可能是在Xamarin应用程序构建中为您的dext执行xcodebuild install步骤。这将在build+sign之后将目标“安装”到$DSTROOT/$INSTALL_PATH中。这些变量是Xcode构建设置,可以在.xcodeproj/project.pbxproj中根据项目/目标/配置进行设置,也可以在xcodebuild命令行上显式设置。如果您将DSTROOT作为Xamarin将查找要捆绑到应用程序中的项目的基本目录,并且将INSTALL_PATH作为Library/SystemExtensions,如果我理解正确,应该可以解决您的问题。
我相信在iPadOS上也有一个要求,即dext具有一个以应用ID的bundle ID开头的bundle ID,所以类似于:com.example.apps.myapp.drivername,如果应用的捆绑包标识符为com.example.apps.myapp。Xcode通常会为您执行此操作,但如果您“手工”组装bundle,则没有任何检查。

1dkrff03

1dkrff032#

是的,我可以使用BundleResources将.dext复制到.ipa的SystemExtensions目录中。
我面临的问题是Xamarin也有OptimizePropertyLists属性,它会扰乱捆绑的.dext的Info.plist并使其无法安装。该属性需要在Xamarin应用的构建项目上设置为false。

相关问题