这是Xcode的4.5.x的iOS的ARMv7 armv7s和SIM卡和specifcially约Xcode项目设置/项目构建设置:
我有一个项目“A”,也就是在App Store中的应用程序。 我有一个项目“B”,也就是将被用作为依赖,而且还分布第三方库,其他公司在他们的应用程序使用的库。 (其他公司的第三方应用程序在这种情况下,‘Y’表示)。
这里的要求是:
- 必须能够在调试模式下运行“A”,当然调试嵌套“B”项目的同时,在相同的生成/会话。
- 从“A”我可以CMD +点击从“B”的方法签名,并直接进入该SRC文件,在那里我可以自由地修改和重新编译,就好像它是来自同一个项目。
- dev的“X”在其他公司必须能够随意拖动我们的图书馆“B”为他的项目“Y”,其中“B”是只露出了所需的头文件,静态库。 当然,“Y”要求从“B”的实际的头文件的一个子集的方法。 只有从这个子集的文件应包括在分布开发的“X”。
- 开发“X”应该不需要在他的Xcode项目都做任何修改,只需拖动文件夹“B”(其中包含静态库和头文件子集)到他的项目,然后单击“复制资源,打造引用等”。
- 我需要能够生成静态库构建“B”的轻松,基于我一直在编辑这整个的时间相同的文件,因为我遍历和调试该项目“B”的依赖项目“A”的内部。
- “B”没有资源除了源代码 - 有没有图像资产,xibs,或类似的东西。
- 从“B”,我点击“存档”和噗! 有一个静态库(必须是脂肪二进制的,我的意思是它的工作原理在模拟器+的ARMv7 + armv7s,请!)有必要的头文件准备分发。
- 所有这一切都必须在应用程序商店的批准 -友好
- 另外这必须是可靠的。 这是没有好,如果我继续回来做了很多配置的变化,每我添加一个文件的时间。
更新:
* 最重要的是 :这需要一个回购协议,我可以检查出是什么在寻找一个完整的端至端模板,我需要能够打开的Xcode 4.5.2+并点击播放,看看这个事情的身材,无痛苦。
500分的人谁可以给我提供一个模板项目,展示了我上面所描述的一切,“A”,“B”和“Y”(与用作DEP“B”静态库)。 我需要的是一套骨架项目(“A”,“B”(嵌套的“A”)和“Y”内)展示了如何可以做到这一点。 直到赏金张贴请不要憋了答案。 如果它符合我的要求,我会确保你得到我的奖金分。
我有点担心,在Xcode的限制,这甚至是不可能实现的方式,是不是一个完整的麻烦。 请证明我错了。
更新:我决定我不关心的ARMv6了。 再见,ARMv6的。 如果你能得到额外的ARMv6信贷滚入DIST输出用的ARMv7,armv7s,I386 /模拟器一起。
PS我承诺,我将是合理的奖励积分。 我并不想隐瞒他们在专业性质。 如果你让我的生活发生了巨大的这一片区域痛苦少,我会很乐意授予你的点。
这不会在Xcode可能独自一人。 你需要,因为编译目标交换机(模拟器,设备等)的一些构建脚本(你可以从内当然Xcode中调用)。
我认为你将不得不至少增加额外的分配头的“复制文件”构建步骤。 但是,如果你想改变什么其他的修改不应该是必要的。
我做这样的事情了libturbojpeg,看到https://github.com/dunkelstern/libturbojpeg-ios以供参考。 目前,它使脂肪库为“LIB”如果你调用来自终端的“build.sh”文件,但忽略了分配头。 在libturbojpeg的情况下,我需要2个项目文件,因为每个目标编译的汇编文件的不同子集到库(最好不看汇编生成文件的东西)。 为了编译你需要一个最近NASM的版本与版本苹果船是古(冲泡用得到它)。 我将发布一个模板,在同一个帐户这样的库构建项目不久。 (将编辑或如果在这里与适当的链接进行评论)
基本上,它的工作原理是这样的:
- 创建一个调用构建脚本
xcodebuild
为每个需要的平台目标 - Xcode的库项目必须包含一个脚本,删除内置库的目录中生成脚本可以找到
- 额外的头必须由一个“复制文件”目标的行动被复制
- 构建脚本必须合并所有库的建立与
lipo
- 添加构建脚本为“运行脚本”目标到您的构建,但要注意不要创建一个无限循环(或者只是把它从终端创建一个发布版本)
- 在您的主项目添加库子项目
然后,您可以用复制的头文件分发输出目录和lipo
合并通用库,并在您的工作,你通常会做正常使用库作为子项目(它建立和链接只需要库的话,不是万能的lib但应该没问题)
这其实并没有解决库创建DSYM文件的问题。 但通常调试符号应该构建一个调试版本时,在图书馆本身。 它会剥去发布版本的调试符号,你不会有任何DSYM然后。
链接到示例项目: https://github.com/dunkelstern/StaticLibraryTemplate
我使用https://github.com/jverkoey/iOS-Framework达到神似您需要的东西。 给他所有的功劳,我只是总结了我是怎么做的。
创建加一个静态库和往常一样,这些调整:
- 添加一个文件复制阶段复制的头。 因为我读的地方它不推荐用于iOS的静态库我不使用正确的“复制头”阶段。
- 目的地:产品目录
- 子路径:
${PROJECT_NAME}/Headers
- 更改一些设置:
- “死代码剥离” =>否(所有设置)
- “带调试符号复制在” =>否(所有设置)
- “条样式” =>非全局符号(对于所有的设置)
- 添加运行脚本,准备与库的框架:
- 使用脚本
prepare_framework.sh
。
您可以在应用程序中使用静态库项目:将其拖动到您的应用程序项目,添加.a
库作为依赖和联系吧。 您可以与您的应用程序一起调试库,步入方法,导航到符号定义等。
所制备的框架将被用来分发二进制版本:
在相同的静态库项目添加一个总目标:
- 添加静态库的依赖。
- 添加运行脚本阶段建立丢失的架构。 使用脚本
build_framework.sh
。
该脚本猜有什么其他的平台,并使用xcodebuild
进行编译。 然后用lipo
创建一个胖二进制与所有的架构。 脂肪静态库的目的地将是我们之前创建的框架树。 最终的框架被复制到build文件夹中的文件夹产品。
通过这种方法,您可以:
- 构建和静态库为嵌套项目调试应用程序。
- 在一个步骤嵌入框状束的头建立图书馆的分发版本。 内置框架位于项目产品目录。
- 使用Xcode的存档功能。 出于某种原因,最终的文件不会被复制到存档位置。 你可以用它来构建框架的一个简化版本。
随意复制使用这种技术来封装库中的项目: JSON框架叉 。 我已经稍微修改脚本,请查看我的叉子的iOS框架 。
对于armv6
,我猜你需要老的iOS SDK 4.3和手动文字添加armv6
到有效的架构和实际架构的列表。 我没有老SDK现在对它进行测试。
的CocoaPods涵盖你的需求。 虽然使用标准的方式,它是提交荚规格到中央混帐回购协议。 它支持添加备用回购用于分发,或手动创建它们,请参见此处 。 使用的CocoaPods的优点是,这既满足您的所有需求,它正在成为分发库的一个非常标准的方式(例如,由公司,如Facebook和stackmob使用)和开源(如afnetworking)。 所以,如果你依赖于第三方库,现在还是将来,有机会,会的CocoaPods帮助你处理这种依赖性。
文章来源: Xcode with iOS - Creating a library in a way that is easy to run in debug mode, distribute, iterate