- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在 iOS 中看到一些静态库项目。我看到两种不同类型的链接静态库。
a) 将.a静态库添加到新的xcode项目及其头文件中。这意味着通用静态库。
b) 将.a 静态库添加到新的xcode 项目并添加创建静态库的xcode 项目。这称为跨项目引用?示例:adding cocos2d to xcode 3.2
当我从第二个项目中删除通过其创建静态库的 xcode 项目时,它给出了错误。我尝试了第二种方法的第一种方法。但它不起作用。
1)您能解释一下为什么不同吗?我们使用的 xcode 版本会有所不同吗?旧 xcode 版本的第二种方法是什么?
2)最近的 xcode 版本(例如 xcode 4.3)是否支持跨项目引用?如果支持,哪种方法更好?这两种方法有什么区别?
最佳答案
我先粗略的解释一下什么是.a文件和框架。在 Cocoa 中,您将类写入 .m 文件中,或多或少在每个文件的类中。当您编译项目时,编译器会一个一个地处理您的每个 .m 文件,并生成源代码的二进制表示(机器代码)以及一些 header 信息,例如对象方法的列表和偏移量。结果是每个 .m 源代码文件对应一个 .o 目标文件。现在,如果您要链接静态库,所有这些目标文件都会打包到给定平台的 .a 存档文件中:i386 用于模拟器,armv7 和 armv7s 用于设备。要使用这些存档,您还需要公开 SDK 的头文件(即使可以从存档中提取相同的信息)。一个 .framework 包是一组简单的这些 .a 文件,用于每个要支持的体系结构,加上公共(public)头文件,可以说很好地打包到一个包中。由于链接是“静态”的,当您链接最终可执行文件时,.o 文件将从 .a 文件中提取并复制到最终可执行文件的二进制文件中。
一些静态库提供商不想向第三方开发人员透露他们的库的源代码,因此只发布 .a 二进制文件。此类库的示例是 Facebook 或 Aviary SDK。当您将 .a 文件添加到您的项目时,您实际上是在添加已编译对象的二进制表示形式。由于您还可以访问 header ,因此即使您无法访问源代码,您仍然可以使用这些二进制文件。
当您处理嵌入式项目时,您可以访问库的源代码。在这种情况下,XCode 将首先编译您的嵌入式项目,再次生成 .o,然后从原始 .m 源代码文件生成 .a 文件。然后它开始编译您的应用程序,该应用程序声明它对库的 .a 文件的依赖性,这次很容易获得,因为它是几秒钟前由 XCode 编译的。所以链接成功。另一方面,当您删除嵌入式项目时,它不仅会删除源代码文件,还会删除生成的 .a 文件,因此最终应用程序的链接将失败。
正如您从最终二进制文件的角度所见,无论您使用预编译的 .a 文件还是嵌入式项目都没有区别,相同的 .o 文件将最终出现在您的最终二进制文件中,只是在第一个文件中在第二种情况下,它们是由图书馆的提供者编译的,而在第二种情况下,它们是由您编译的。即使您可以访问源代码,使用 .a 文件的唯一优点是编译时间稍快一些。缺点是调试器需要额外的配置才能进入库的源代码。
无论如何,如果你想删除嵌入的项目,你可以这样做。将库作为静态库编译一次,并在目标目录中搜索生成的 .a 文件。将每个体系结构的 .a 文件复制到您的应用程序的项目文件夹中,并将它们与公共(public)头文件一起添加到项目中,并编译您的最终应用程序。
关于iphone - 新版本的 xcode 是否支持跨项目引用以添加用于链接的静态库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17357111/
我正在观看来自 iTunes U. 的视频讲座,其中讲师展示了如何使用 Xcode 的调试器部分并能够将该窗口从主窗口拉开。 不幸的是,视频显示了如何在 Xcode3 中执行此操作的说明。如何在 Xc
现在我正在开发一个使用 Markdown 的静态网站。我不想在 SublimeText 中编辑文件,而是想在 Xcode 中编辑它们。我可以在 Xcode 中打开各个文件,但我想打开整个静态站点目录并
现在我正在开发一个使用 Markdown 的静态网站。我不想在 SublimeText 中编辑文件,而是想在 Xcode 中编辑它们。我可以在 Xcode 中打开各个文件,但我想打开整个静态站点目录并
我真的厌倦了其他用户的项目错误,因为 XCode 的默认类引用类型是“相对于 XCode 文件夹”。我知道您可以将其更改为“相对于封闭组”,这就是我们的项目,但是任何时候有人创建一个新的类文件并且忘记
我对 Xcode 一无所知,除了它是来自 Apple 的开发人员界面,它实际上来自 OSX CD,它也用于创建 iPhone 应用程序。 我也知道它有一个 Applications 文件夹,里面装满了
更新 Xcode(从 7.2 到 7.2.1)后,XcodeServer 无法运行 Xcode Service。当我选择更新的 Xcode 时,提示消息:Enable Accessibility ac
我很难找到有关新 XCode 布局的信息。如何查看源文件的反汇编,而不仅仅是 C++ 代码? 最佳答案 在 Xcode 4.2(和 Xcode 5)中,您可以通过以下方式查看文件的汇编或反汇编: 显示
我在 XCode 中为我的项目添加了一个文件夹并将其命名为 Themes,它将用于存储我的 iPad 应用程序的主题。在那下面我有红色、蓝色等等。 它们出现在 XCode 中。但是当我查看物理文件夹时
作为我之前 How can I create a reference cycle using dispatchQueues? 的后续: 对于强引用(会造成泄漏,但不是循环引用),例如Timer、Dis
我有一台 macbook air,我去商店安装 Xcode 7.3 并点击更新 App 按钮,然后出现了一个加载图标,但等待 30 分钟后什么也没发生。我从商店成功安装了 simple recorde
我的项目现在有一个project.xcworkspace/xcshareddata目录。 Xcode在project.xcworkspace/xcshareddata目录中存储什么? 最佳答案 xcs
我不经常使用 XCode 进行开发,最近 MacPorts 告诉我我需要获得 3.1 才能使包工作。我去了苹果,他们为我提供了最新版本,结果只适用于 OSX 6。因为我有 OSX 5,它对我没有任何帮
有谁知道如何强制 Xcode 停止运行。我更新到 6.2 但现在它不能正常工作。我需要退出 Xcode 才能完成更新或卸载并重新安装。菜单中的相当 Xcode 不可用。无法将其拖到垃圾箱,因为它说它仍
我最近从我的项目中删除了一些旧的测试类并删除了文件。正如预期的那样,文件被移到垃圾箱并在 git 中显示为已删除。 不幸的是,测试类和它们定义的测试用例继续出现在测试导航器中。我已经尝试过常见的疑点,
Xcode 中的场景编辑器显示大小但不显示单位。它是以英寸为单位的尺寸还是以米为单位的尺寸? 例如,当我选择一个节点时,例如一个盒子,当我在节点检查器中检查它的属性并在“边界框”旁边的“变换”部分检查
只想知道 xcode 项目中事件可执行文件的目的是什么? 谢谢 索拉布 最佳答案 自己找到了..希望它会帮助某人。 您可以在其中运行和测试软件产品的可执行环境。可执行环境定义了应该用来运行产品的程序。
刚回到我的办公 table ,Xcode 一直在文件中突出显示/强调空白区域。如果我输入一些东西它就会消失,但如果我切换标签并回来,它们会重新出现。 更新:这不是由“显示隐形”选项引起的。那看起来不一
我首先注意到这一点 Cmd-/偶尔拒绝为注释取消注释的代码行工作。但是现在(刚刚使用 XCode 4.1,虽然这可能无关)它发生在 Cmd-B建立。 我无法弄清楚我正在做什么导致这种情况,或者是否有任
我不太了解Xcode 4的工作区的实用程序。它们的用途是什么,它们如何帮助Xcode进行开发? 最佳答案 例如。您有一个在两个应用程序中使用的库。您很可能为此库拥有一个自己的项目,对吗?现在,您可以自
我正在关注一个应用程序教程,它说: “接下来,在 Xcode 应用程序项目目录的根目录下创建一个空文件,并调用该文件 Podfile。使用您喜欢的文本编辑器打开它,然后在其中粘贴以下行:” 我很困惑这
我是一名优秀的程序员,十分优秀!