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

时间:2013-04-08 12:50:10

标签: ios xcode static-libraries

我目前正在构建一个应该在几个iOS项目内部使用的库,但也应该分发给访问我们的库服务的客户。图书馆本身完全由C ++代码组成,我基本上能够在iOS上用它创建应用程序。我的问题是创建一个可轻松分发的单个文件,可以发给客户,可以轻松安装它们,使用提供的标题,而不需要在链接时遇到我目前面临的麻烦。

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

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

但是,尝试创建App项目的存档会导致几个问题和令人头疼的问题。

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

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

  3. 第二个问题让我觉得我必须做一些根本错误的事情,而且我的直觉告诉我,为iOS开发创建框架或库不是那么困难和“hackish”。

    正如你现在可能已经发现的那样,我对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. 是的,在SO上已经存在一些关于此的问题,但是,我在这些回复中看不到或者不理解:
      • ...如何正确处理我的代码与其他第三方代码的依赖关系。
      • ...如何生成可分发文件。

1 个答案:

答案 0 :(得分:1)

您是否在“编译源代码”和“复制文件”下检查了项目构建阶段,以确定是否在构建中包含了框架源文件?

您也可以在OSX下试用C / C ++ Library模板 - &gt;框架&amp;库。

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