Rou*_*nak 5 objective-c dylib ios openh264 xcode9
我正在使用支持 H264 的 PJSIP 库构建一个 iOS 应用程序。在构建 H264 时,我得到 1 个 .a 文件和 2 个 .dylib 文件。我尝试通过添加为“嵌入式库”以及创建单独的框架然后将其添加到“嵌入式库”来在我的项目中使用 .dylibs。但是当将构建上传到 App Store 时,我收到错误“ERROR ITMS-90206:...”、“ERROR ITMS-90171:...”。所有指向在项目中使用外部动态库。我跟着https://developer.apple.com/library/content/technotes/tn2435/_index.html#//apple_ref/doc/uid/DTS40017543-CH1-TROUBLESHOOTING_BUNDLE_ERRORS-EMBEDDED__DYLIB_FILES
但他们要求遵循“添加框架目标”中的步骤。我不知道如何创建一个只有 2 个 .dylib 文件且没有其他源代码或头文件的框架。请展示将 .dylib 文件嵌入 iOS 应用程序以供 App Store 提交的步骤。
小智 7
我能够通过首先创建一个框架来提交带有 .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
您必须像框架一样将所有共享库(.dylib 文件)直接添加并嵌入到顶层应用程序中。您不能将 dylib 放入框架中,因为 Apple 强烈建议不要使用此类框架(称为Umbrella 框架),并且不接受 AppStore 中具有此类框架的应用程序(这是错误 ITMS-90171 的原因)。
正如苹果文档所说:
伞式框架是包含其他框架的框架包。虽然可以为 macOS 应用程序创建伞式框架,但对于大多数开发人员来说没有必要,也不建议这样做。iOS、watchOS 或 tvOS 不支持 Umbrella 框架。
| 归档时间: |
|
| 查看次数: |
2199 次 |
| 最近记录: |