我有一个项目,需要两个步骤来构建iOS应用程序。有原生库和XCode中构建的.dext,然后它们链接到Xamarin项目,我使用该项目在VisualStudio build上完成C#中的应用程序构建。在Xamarin项目中链接静态库很简单,将.dext嵌入到其他仅在XCode中的原生应用程序也很简单,但我不确定如何将.dext嵌入到Xamarin项目应用程序中。
你能把Xamarincsproj中的所有.dext包中的文件(嵌入的配置文件、CodeSignature、Info.plist和构建的驱动程序)捆绑到.ipa中的SystemExtension文件夹中吗?似乎也没有办法从Xcode构建中获得签名的.dext包;对于特定的驱动程序dext,复制文件“复制时的代码签名”复选框被取消。
2条答案
按热度按时间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,则没有任何检查。1dkrff032#
是的,我可以使用BundleResources将.dext复制到.ipa的SystemExtensions目录中。
我面临的问题是Xamarin也有OptimizePropertyLists属性,它会扰乱捆绑的.dext的Info.plist并使其无法安装。该属性需要在Xamarin应用的构建项目上设置为false。