Ada*_*ski 7 xcode frameworks dynamic-library ios swift
我一直在尝试提交一个带有 Obj-C 动态库 (.dylib) 的 Swift 应用程序,但它不断被 iOS 应用商店拒绝,并显示错误消息,例如
\n\n\n\n\n无效 Swift 支持 - 文件 libswiftDarwin.dylib、\n libswiftDispatch.dylib、libswiftCoreGraphics.dylib、\n libswiftUIKit.dylib、libswiftCore.dylib、libswiftFoundation.dylib、\n libswiftQuartzCore.dylib、libswiftObjectiveC.dylib、\n libswiftCoreImage.dylib 为\xe2\x80\x99t 位于预期位置\n /Payload//Frameworks。将文件移动到预期位置,使用当前公共 (GM) 版本的 Xcode 重新构建应用程序,然后重新提交
\n
来自Apple文档https://developer.apple.com/library/archive/technotes/tn2435/_index.html#//apple_ref/doc/uid/DTS40017543-CH1-PROJ_CONFIG-APPS_WITH_DEPENDENCIES_BETWEEN_FRAMEWORKS错误“可能表明您的应用程序是嵌入未打包为框架的动态库。框架包外部的动态库(通常具有文件扩展名 .dylib)在 iOS、watchOS 或 tvOS 上不受支持,除了 Xcode 提供的系统 Swift 库之外。 ”
\n\n因此,下一步是将动态库(作为子项目)嵌入到 Cocoa Touch Framework 项目中。设置完成后,尽管框架构建得很好,但我还是陷入了导入 dylib 类的“符号未找到”错误。
\n\n我想知道实现这个项目结构所需的步骤,或者它是否可以在 iOS 上实现。
\n小智 8
我能够通过首先创建一个框架来提交带有 .dylib 的应用程序。我首先尝试了苹果文档中描述的方法,但在提交到商店时出现错误(“无效的捆绑包。xyz.framework处的捆绑包包含不允许的文件‘Frameworks’)
我所做的是使用 lipo 手动将我的 .dylib 打包到框架中。
$ lipo -create mylib.dylib -output mylib
Run Code Online (Sandbox Code Playgroud)
现在您将获得一个名为“mylib”的二进制文件。创建一个名为 mylib.framework 的文件夹并将二进制文件放入其中。然后添加一个 Info.plist(您可以从现有框架中复制并修改一个 Info.plist。)在 Info.plist 中,填写您的框架的字段。要更新或添加的主要文件是“可执行文件”,它应该是该二进制文件的名称。
我遇到了另一个问题,我使用的另一个框架正在引用我原来的 .dylib,它已经消失,现在位于框架内。为了解决这个问题,我使用“install_name_tool”来修改其他框架以查找我的新框架。
$ cd OtherLib.framework
$ install_name_tool -change @rpath/mylib.dylib @rpath/mylib.framework/mylib OtherLib
Run Code Online (Sandbox Code Playgroud)
您可以在这篇优秀的博客文章中阅读有关该工具的更多信息: https://medium.com/@donblas/fun-with-rpath-otool-and-install-name-tool-e3e41ae86172
| 归档时间: |
|
| 查看次数: |
5431 次 |
| 最近记录: |