在iOS框架中嵌入.dylib
我一直在尝试提交一个带有Obj-C动态库(.dylib)的Swift应用程序,该应用程序一直被iOS应用程序商店拒绝,错误消息如下 Swift支持无效-文件libswiftDarwin.dylib, libswiftDispatch.dylib,libswiftCoreGraphics.dylib, libswiftUIKit.dylib、libswiftCore.dylib、libswiftffoundation.dylib、, libswiftQuartzCore.dylib,libswiftObjectiveC.dylib, libswiftCoreImage.dylib不在预期位置 /有效负载//框架。将文件移动到预期的位置 位置,使用当前的公共(GM)版本重建应用程序 Xcode,然后重新提交它 从Apple文档中,出现错误“可能表示您的应用程序正在嵌入一个未打包为框架的动态库。框架包之外的动态库(通常具有.dylib文件扩展名)在iOS、watchOS或tvOS上不受支持,Xcode提供的system Swift库除外。” 因此,下一步是将动态库(作为子项目)嵌入Cocoa Touch框架项目中。一旦设置好了,尽管框架构建得很好,但对于导入的dylib类,我遇到了“symbol not found”错误在iOS框架中嵌入.dylib,ios,swift,xcode,frameworks,dynamic-library,Ios,Swift,Xcode,Frameworks,Dynamic Library,我一直在尝试提交一个带有Obj-C动态库(.dylib)的Swift应用程序,该应用程序一直被iOS应用程序商店拒绝,错误消息如下 Swift支持无效-文件libswiftDarwin.dylib, libswiftDispatch.dylib,libswiftCoreGraphics.dylib, libswiftUIKit.dylib、libswiftCore.dylib、libswiftffoundation.dylib、, libswiftQuartzCore.dylib,libswif
我想知道实现此项目结构所需的步骤,或者在iOS上是否可行 通过先创建一个框架,我可以提交一个带有.dylib的应用程序。 我首先尝试了apple文档中描述的方法,但在提交到应用商店时出错(“无效捆绑包。xyz.framework处的捆绑包包含不允许的文件‘Frameworks’) 我所做的是使用lipo手动将我的.dylib打包到一个框架中
$ lipo -create mylib.dylib -output mylib
$ cd OtherLib.framework
$ install_name_tool -change @rpath/mylib.dylib @rpath/mylib.framework/mylib OtherLib
现在您得到一个名为“mylib”的二进制文件
创建一个名为mylib.framework的文件夹,并将二进制文件放入其中。
然后添加一个Info.plist(您可以从现有框架复制和修改一个)。在Info.plist中,填写框架的字段。要更新或添加的主要字段是“Executable”,它应该是该二进制文件的名称
我还遇到了另一个问题,我使用的另一个框架引用了我原来的.dylib,它已经不在框架内了。为了解决这个问题,我使用了“install_name_tool”来修改另一个框架以查找我的新框架
$ lipo -create mylib.dylib -output mylib
$ cd OtherLib.framework
$ install_name_tool -change @rpath/mylib.dylib @rpath/mylib.framework/mylib OtherLib
您可以在这篇好的博文中阅读更多关于该工具的信息:
请确保应用程序项目具有作为依赖项的动态库。我认为您可以在XCode中签入link命令,它应该包含--framework YouFramework。对此有任何更新吗?我目前在转换dylib->framework时面临相同的问题。在XCode中的Cocoa Touch framework项目中,dylib是链接的(在linkedlibs和Frameworks部分)但是当我检查构建的最后框架的大小时,它只有50KB,尽管动态库大约是4MB。