[Cocoa]深入浅出 Cocoa 之 Framework
CC许可,转载请注明出处
Framework 简介
Mac OS X 扩展了 framework 的功能,让我们能够利用它来共享代码和资源。framework 在概念上有点像 Window 下的库,但是比库更加强大,通过 framework 我们可以共享所有形式的资源,如动态共享库,nib 文件,图像字符资源以及文档等。系统会在需要的时候将 framework 载入内存中,多个应用程序可以同时使用同一个 framework,而内存中的拷贝只有一份。一个 framework 同时也是一个 bundle,我们可以在 finder 里浏览其内容,也可以在代码中通过
NSBundle 访问它。利用 framework 我们可以实现动态或静态库的功能。与动态/静态库相比,framework 有如下优势:
第一,framework 能将不同类型的资源打包在一起,使之易于安装,卸载与定位;
第二,framework 能够进行版本管理,这使得 framework 能不断更新并向后兼容;
第三,在同一时间,即使有多个应用程序使用同一 framework,但在内存中只有一份 framework 只读资源的拷贝,这减少了对内存的占用
Framework 的结构
下面是一个带有A,B两个版本和一个 resources 目录的 framework 结构,并设定当前版本为 B:
结合上面的结构,下面我们来看本例中 ExampleFramework 的结构图:
Framework 存放位置
在 Mac OS 中有三个级别的位置来存放 framework。一般我们自己编写的 framework 都应该是应用程序级别。
1,系统级,/Library/Frameworks,放置到该级别,这需要管理员权限,整个系统都可以共享使用该级别的 framework;
2,用户级,/Users/用户名/Library/Frameworks,拥有用户权限的应用程序都可以共享使用该级别的 framework;
3,应用程序级。
在应用程序中内嵌 Framework
1,创建 Framework
新建一个名为 FrameworkDemo 的 Cocoa application 工程,然后选中项目名,向其中添加名为 ExampleFramework 的 Cocoa Framework。
2,添加内容
向 Framework 中添加源代码(请下载源代码),并导出需要向外部公开的头文件。
导出头文件有一些技巧:
1,如果有我们不想向用户公开的类名出现在必须公开的头文件中,我们可以使用 id 替代该类名或使用 @class 前置申明来避免导出该类的头文件,在本例中使用 id 替代 InternalObject,从而避免导出 InternalObject 类的头文件。
2,如果需要导出多个头文件,常见的做法是新建一个与 framework 同名的 .h 文件,将需要导出的头文件包含到该头文件中来。如本例中的 ExampleFramework.h。
3,修改 framework build 选项
我们在使用自己编写的库时,常碰到下面的编译错误:
这多半是由于 framework 的 Installation Directory 编译选项设置不正确,导致应用程序无法正确定位 framework 所致。这需要我们设置编译选项 Installation Directory 为 @executable_path/../Frameworks。
4,使用 framework
至此,framework 编写完成,下面我们来在 FrameworkDemo 中来使用它。首先我们需要将 ExampleFramework 导入到FrameworkDemo 中来,这样FrameworkDemo 在运行时才能定位该 framework。新建一个 Add copy files 型的 build phase,设置其 destination 为 framework,加入已经编写好的ExampleFramework。
导入 framework 之后,我们就可以在工程中使用该 framework 了。编写如下代码:
注意:我们使用 framework 的方式为 :framework名/framework名.h,这是约定的常规做法,Cocoa 自带的 framework 也都遵守这一约定,所以我们自己编写的库最后也遵守这一约定。
5,编译运行
至此,工作完成,编译运行,应当输出如下:
6,清除冗余文件
这时可选项,且只对使用内嵌 framework 的应用程序有效。当我们拷贝导入 framework 之后,应用程序 bundle 已经拷贝了一份 framework,那么原本编译生成的那一份 framework就变得多余了,我们可以将其清理掉。在使用内嵌 framework 的应用程序的 build phases 中加入 run script phase,脚本内容如下:
使用外部 framework
上面的示例是在应用程序内嵌 framework,供应用程序本身使用,很多时候,我们是使用第三方编写的 framework,下面接着来演示如何将ExampleFramework 当做外部framework。
1,新建名为 TestExampleFramework 的 Cocoa Application 程序,在 TestExampleFrameworkAppDelegate.m 中添加如上步骤 4 中使用 framework 的代码。
2,编译运行,这时会报找不到头文件,类名的错误。这时因为我们还没有导入framework。在 Build Phase 的 Link Binary With Libraries 中加入生成好的ExampleFramework,该 framework 的默认生成路径在: /用户名/Library/Developer/XCode/DerivedData/FrameworkDemo-XXXX/Build/Products/Debug/下。至此,编译运行,输出应当如上步骤 5 相同。
此外还有一种方式使用第三方 framework,如果我们拥有第三方 framework 的源代码工程,想在我们的工程中编译该 framework,并使用它。我们可以将第三方 framework 的工程文件加入我们自己的工程,并在 Target Dependencies 和 Link Binary With Libraires 加入第三方 framework,这样我们就可以使用该 framework了。如下图所示:
分享到:
相关推荐
这是本人在学习和使用 Cocoa 开发过程...CSDN移动开发专栏《深入浅出Cocoa》包含了这个pdf 中的所有文章,并会持续添加新的文章,欢迎大家访问该专栏(http://blog.csdn.net/column/details/cocoa.html),查看最新情况。
资源来自pypi官网。 资源全名:pyobjc-framework-Cocoa-6.0.1.tar.gz
适用于初学者,了解苹果公司的cocoa框架,为深入编程打下坚实的基础
苹果开发之Cocoa编程原书第4版,想学习mac app开发的可以先看看!
苹果开发之Cocoa编程(原书第4版).pdf
每一章都建立在前一章内容的基础上,每个部分都给出某个主题的重要细节,但又仅仅在较高的级别上进行描述。文中还提供很多指引,方便读者了解其它更为详尽的文档。 在Cocoa的开发文档中,Cocoa基本原理指南是介绍...
You’ll learn how to work with the Xcode IDE, Objective-C’s Foundation library, and other developer tools such as Event Kit framework and Core Animation. Along the way, you’ll build example projects...
这本书手把手教你使用xcode开发cocoa程序,菜鸟必备
Mantle 是 Cocoa 和 Cocoa Touch 的模型框架,你可以通过它为你的 Cocoa 和 Cocoa Touch 写简单的模型层。示例代码:@interface XYUser : MTLModel @property (readonly, nonatomic, copy) NSString *name;...
You will learn not only how to use the components of this rich framework, but also which of them fit together, and why. What you’ll learn How to actually make your own Cocoa applications—this is ...
对于刚刚加入这个阵营的开发者来说,Cocoa 像是一个巨大而未知的新世界。Cocoa 开发环境的各种特性、工具、概念、术语、编程接口、甚至是编程语言对他们来说可能都比较生疏。Cocoa 基本原理指南提供了领略Cocoa 技术...
iOS 和 macOS 性能优化书。iOS and macOS Performance Tuning Cocoa, Cocoa Touch, Objective-C, and Swift
Cocoa Programming Developer’s Handbook 书籍以及配套源码 对应的中文译本名《Cocoa编程开发者手册》,这里提供的是其原本,技术人员建议还是读原本。 《Cocoa编程开发者手册》是关于MacOSX上CocoaAPI的指南,...
Cocoa Fundamentals Guide 的中文版
The key to creating a modern Mac application is Cocoa. According to Apple, Cocoa is a set of object-oriented frameworks that provide a runtime environment for Mac OS X applications. As you make your ...
苹果开发之Cocoa编程,ios开发必备。
We’ve been developing for the Cocoa framework from when the Mac first supported it. Since then, we’ve seen the ecosystem of Cocoa and Objective-C development evolve from a small programmer’s niche ...