Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在iOS框架中嵌入.dylib_Ios_Swift_Xcode_Frameworks_Dynamic Library - Fatal编程技术网

在iOS框架中嵌入.dylib

在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

我一直在尝试提交一个带有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的应用程序。 我首先尝试了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。