使用iOS的Xcode - 以一种易于在调试模式下运行,分发,迭代的方式创建库

jps*_*ain 20 xcodebuild ios xcode4 xcode4.5

这适用于Xcode 4.5.x iOS armv7 armv7s以及sim和特别关于Xcode项目设置/项目构建设置:

我有一个项目"A",它是应用程序商店中的一个应用程序.我有一个项目"B",它是一个将在A中用作依赖项的库,但也作为第三方库分发给其他公司以在其应用程序中使用.(其他公司的第三方应用在这种情况下表示为"Y").

以下是要求:

  • 必须能够在调试模式下运行"A",当然,在同一个构建/会话中同时调试嵌套的"B"项目.
  • 从"A"我可以CMD +点击"B"中的方法签名并直接跳转到那个src文件,在那里我可以自由编辑然后重新编译,就像它来自同一个项目一样.
  • 其他公司的dev"X"必须能够轻松地将我们的库"B"拖到他的项目"Y"中,其中"B"是一个静态库,只显示所需的头文件."Y"当然从"B"的实际头文件的子集中调用方法.只有来自此子集的文件才应包含在Dev"X"的分发中.
  • Dev"X"不需要在他的Xcode项目中修改任何内容,只需将"B"(包含静态库和头文件子集)的文件夹拖到他的项目中,然后单击"复制资源,创建引用等" ".
  • 我需要能够轻松地生成"B"的静态库构建,基于我一直在编辑的相同文件,因为我在其依赖项目"A"中迭代并调试该项目"B".
  • 除了源代码之外,"B"没有资源 - 没有图像资产,xib或类似的东西.
  • 从"B",我点击"存档"和噗!有一个静态库(必须是胖二进制文件,我的意思是它适用于模拟器+ armv7 + armv7s,请!!),基本的头文件已准备好分发.
  • 所有这一切都必须是app store apps-friendly
  • 这也必须是可靠的.如果我每次添加一个文件时必须不断回来进行大量的配置更改,那就不好了.

更新:
* 最重要的:这需要是一个我可以检查的回购,这是一个完整的端到端模板,我正在寻找,我需要能够打开Xcode 4.5.2+并点击播放和看到这个东西建立,无痛苦.

500分给任何可以提供我一个模板项目的人,该模板项目演示了我上面描述的所有内容,"A","B"和"Y"("B"静态库用作dep).我需要的只是一组骨架项目("A","B"(嵌套在"A"中)和"Y"),它们展示了如何做到这一点.在发布赏金之前,请不要阻止答案.如果它符合我的要求,我会确保你得到我的赏金积分.

我有点担心,由于Xcode的限制,这甚至不可能以一种不是完全麻烦的方式.请证明我错了.

更新:我决定不再关心armv6了.再见,armv6. 额外的功劳,如果你可以使用armv7,armv7s,i386 /模拟器将armv6卷入dist输出.

PS我保证我会合理地给予积分.我不打算在技术上隐瞒它们.如果你让我的生活在这一领域大大减少痛苦,我很乐意给你积分.

Dun*_*ern 6

仅在Xcode中这是不可能的.由于编译目标开关(模拟器,设备等),您将需要一些构建脚本(当然可以在Xcode中调用).

我认为您必须至少在"复制文件"构建步骤中添加其他分发标头.但是,如果你改变某些东西,则不需要进行其他修改.

我为libturbojpeg做了类似的事情,请参阅https://github.com/dunkelstern/libturbojpeg-ios以供参考.如果从终端调用"build.sh"文件,它目前将胖库放入"lib",但省略了分发头.在libturbojpeg的情况下,我需要2个项目文件,因为每个目标将不同的汇编程序文件子集编译到库中(最好不要查看汇编程序的makefile文件).要编译,你需要一个最新版本的NASM,因为苹果的版本是古老的(用brew得到它).我将很快在同一帐户上发布这样一个库构建项目的模板.(如果在此处使用适当的链接进行编辑或评论)

基本上它的工作原理如下:

  1. 创建一个构建脚本,以调用xcodebuild每个所需的平台目标
  2. Xcode库项目必须包含一个脚本,用于将构建脚本放在可以找到的目录中
  3. 必须通过"复制文件"目标操作复制其他标头
  4. 构建脚本必须与所有库构建合并 lipo
  5. 将构建脚本添加为构建的"运行脚本"目标,但要注意不要创建无限循环(或者只是从终端调用它来创建发布版本)
  6. 在主项目中添加库子项目

然后,您可以使用复制的头文件和lipo合并的通用库分发输出目录,并像正常情况一样将库通常用作工作空间中的子项目(它只构建和链接所需的库,而不是通用库,但应该没问题)

这实际上并没有解决为库创建DSYM文件的问题.但通常,在构建调试版本时,调试符号应该在库本身中.它将在发布版本上删除调试符号,然后您将没有DSYM.

链接到示例项目:https://github.com/dunkelstern/StaticLibraryTemplate