ios - 为 iOS 应用程序创建可分发的框架

标签 ios xcode static-libraries

我目前正在构建一个库,该库应该在一些 iOS 项目中内部使用,但也应该分发给使用该库访问我们服务的客户。该库本身完全由 C++ 代码组成,我基本上能够在 iOS 上使用它创建运行良好的应用程序。我的问题是创建一个单一的、易于分发的文件,该文件可以分发给客户,客户可以轻松安装它们,使用提供的 header ,并且不需要像我目前在链接时遇到的麻烦。

我们的代码依赖于另外两个项目,即 boost 和 websocketpp。对于提升,有脚本 on github我用它来生成一个框架。对于 websocketpp,我将其导入 XCode 并使用来自 this github project 的脚本建立一个框架。我将这两个框架作为依赖项添加到我的(潜在的)框架中,并使用相同的脚本来构建一个。

我有一个应用程序使用我的库作为子项目运行良好。即使将框架包含到项目中并在设备上运行它也能正常工作。到目前为止,一切都很好。

但是,尝试创建 App 项目的存档会导致一些问题和麻烦。

  1. 我的库似乎没有包含所有架构的代码。所以我尝试归档框架项目,在构建脚本中进行小的修改以使用不同的位置来搜索 header 后工作正常。

  2. 它似乎不包含所有二进制代码或对本地文件的引用(即我的 boost 的具体位置)。我从链接器错误中收集到的信息仍然告诉我无法满足某些提升调用。

第二个问题让我觉得我一定是在做一些根本性的错误,我的直觉告诉我,为其他人创建用于 iOS 开发的框架或库并没有那么困难和“hackish”。

您现在可能已经发现,我在 iOS 方面经验不足,我想知道我是否从根本上遗漏了什么。所以,我确信这个问题相当广泛,所以一些更具体的问题:

  1. 是否有(另一种)方法来生成某种可分发的(最好是框架),其中包含:我的公共(public) header 、为支持 iOS 开发的所有平台编译的二进制代码、依赖项的二进制代码?
    • 唯一的方法是在构建过程中添加一些手写脚本吗?
    • 我觉得我找到的信息已经过时了,因为它已经超过一年了,而且主要是指 Xcode 4.2 或 4.3 -- 那么最近在这方面有什么变化吗?
  2. 例如我得到的一个错误是:

    File is universal (2 slices) but does not contain a(n) armv7s slice: <file>
    

    <file> slice 是框架中文件的路径 Products不同 XCode 工作区的文件夹(库是在与应用程序不同的工作区中构建的)。我从一个完全不同的位置将框架文件夹放入此测试的项目中。

    • 这是怎么回事?
    • 为什么它一直引用某些内部 XCode 目录?
    • 如何正确导出它?
  3. 因为我猜我的设置可能从我到现在为止尝试过的所有不同的事情中被扭曲和怪异:这个设置在理想情况下看起来如何?
  4. 是的,SO 上已经有一些关于此的问题,但是,我在这些回复中没有看到或不理解:
    • ...如何正确处理我的代码对其他第三方代码的依赖关系。
    • ...如何生成可分发文件。

最佳答案

您是否检查过编译源和复制文件下的项目构建阶段,看看您是否在构建中包含了框架源文件?

您也可以在 OSX -> Framework & Library 下尝试 C/C++ Library 模板。

最后,还有 kstenerud’s iOS Universal Framework ,我发现这非常有用。我在我的 blog 写了几篇文章关于使用它。

关于ios - 为 iOS 应用程序创建可分发的框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15879506/

相关文章:

ios - 在 swift 中加载关于方向变化的 xib View

ios - 如何使用 objective c 从 google drive 下载文件?

ios - SIGABRT 每次触摸点击,不一致的 iPad iOS

ios - 越狱应用程序开发构建和运行应用程序

c++ - Boost.Test 测试静态库

ios - 将 XIB 文件加载到 UIView Swift

ios - Xcode 9.0 在 XIB 中更改 tableView 样式时卡住,为什么?

ios - 创建一个能够检查按下的按钮的标题的函数

c++ - 已实现的父方法的共享库中没有符号

c++ - 使用 g++ 创建共享库和静态库(在 Windows 下)