1

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

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

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

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

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

  2. 它似乎不包含所有二进制代码或对本地文件的引用(即我的 boost 的特定位置)。我从 Linker 错误中收集到,我仍然得到它告诉我一些 boost 调用无法满足。

第二个问题让我认为我一定是在做一些根本错误的事情,我的直觉告诉我,为其他人创建 iOS 开发框架或库并不是那么困难和“骇人听闻”。

正如您现在可能已经发现的那样,我在 iOS 方面不是很有经验,我想知道我是否从根本上错过了一些东西。所以,我确信这个问题相当广泛,所以有一些更具体的问题:

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

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

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

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

1 回答 1

1

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

你也可以试试 OSX -> Framework & Library 下的 C/C++ Library 模板。

最后,还有kstenerud 的 iOS 通用框架,我发现它非常有用。我在博客中写了几篇关于使用它的文章。

于 2013-04-30T16:14:42.913 回答