应用程序编译并使用没有框架

时间:2013-10-30 14:22:28

标签: ios iphone objective-c xcode frameworks

所以我有一个大项目(让我们称之为A),有些人与应用B想把我的应用程序的一部分放在他们的应用程序中,所以我创建了一个框架添加到他们的应用程序。创建它的步骤是清理我的应用程序的代码,只留下与他们想要的内容相关的东西,从中创建一个框架,创建一个使用框架进行调试的示例应用程序,看看一切正常。到目前为止,在框架方面,我所做的是我刚从我的应用程序(A)添加到我的示例应用程序中的所有框架。

现在,在我将它发送给B app app之前,我已经开始清理框架和示例应用程序中的东西和剩余物。所以我开始逐个删除我的示例应用程序中的框架,每次都在我的设备上构建和运行,每次一切都运行完美。我停下来的每2-3个框架都做了深层构建 - 清理,并从我的iPhone中删除了应用程序,但仍然一切正常。我最终删除了我在一个A app框架类中专门导入的特定框架,仍然有效。我的最后一招是删除UIKit和Foundation框架。仍然很完美。我做了深度清理,从我的iPhone卸载,删除DerivedData文件夹的内容,并重新启动计算机,一切仍然编译,构建和工作。 我开始得到的唯一问题是我的Localytics会话向NSLogs提供了AdSupport框架丢失的信息,这可能会损害跟踪......仍然没有崩溃。

据我所知,我正在编译我的A应用程序的框架而没有任何框架(甚至可以在框架内编译框架?)。我的框架是用这个精彩的git构建的:iOS Universal Framework Mk 8(我正在创建一个真正的框架而不是假框架)。

我基本上关心这一切,因为我确实想要查看哪些框架无用且可以删除,而且我的项目太大而无法检查是否以及谁在使用任何框架。

我正在使用Xcode 5.0.1, ios7 SDK, iphone5c。 我确实确保我删除的所有框架都没有留在Link binary with Libraries部分......

这些是我从Example App项目中删除的框架: CoreGraphics CFNetwork SystemConfiguration MobileCoreServices QuartzCore CoreData StoreKit AdSupport(< - 我唯一获得的任何人回应红色的问题AVFoundation CoreText XCTest UIKit Foundation

感谢任何帮助或想法(:

2 个答案:

答案 0 :(得分:1)

我知道这个帖子有点旧,但我遇到了同样的问题,并认为我的回答可以帮助其他人。

不知何故,我使用的TestFlight库中包含了所有必需的符号。从我的链接步骤中删除libTestflight.a迫使我再次链接UIKit / CoreGraphics。

答案 1 :(得分:0)

使用C从代码转换为二进制的过程是一个多步骤的过程。预处理,编译,链接,加载。

  1. 将源(.c / .m)预处理为.i文件(删除注释,评估宏等)。
  2. 预处理代码(.i)被修改,解析并编译成程序集(.s)。
  3. 汇编(.s)被编译为对象或库文件(.o / .so / .a)中的机器代码。
  4. 目标文件(.o / .a)链接到一个二进制文件中。
  5. 在运行时,系统会确定可执行文件需要哪些共享库(.so)并加载它们。
  6. 在构建库时,您的编译在第3步之后停止,因此您不需要实际拥有库二进制文件,只需要头文件来声明函数(以及任何typedef,结构,宏等) )。但是,使用您的库的人将完成步骤4和5,因此需要库二进制文件。