Framework是框架的意思,是组件和接口的集合,它可以将代码文件和资源文件一起打包供开发者使用。 Framework有一个重要的特性,我们在使用某些组件或接口的时候,Framework只会动态调用该组件或接口所需要的代码,从而减少了内存的消耗,也提高了系统的性能。

很多人在做项目的时候,都积累了大量自定义的UI组件和接口,我们也可以做成自己独有的Framework,方便不同项目间的使用,也方便分享给别人。

在Xcode中创建自己的Framework其实十分简单,以Xcode 8为例,如下所示:

创建一个Framework工程

打开Xcode,点击"File->New->Project", 选择"Cocoa Touch Framework"创建工程

ios framework中修改appdelegate内代码 苹果framework_整型

ios framework中修改appdelegate内代码 苹果framework_python_02

将工程命名为"RRSwiftKit",填写工程相关信息(组织名,编程语言等),点击下一步选择工程路径进行创建

ios framework中修改appdelegate内代码 苹果framework_python_03

一个简单的Framework就创建完成了

ios framework中修改appdelegate内代码 苹果framework_swift_04

创建自定义接口

接下来我们在工程中添加一个Swift文件,命名为"RRColor",然后添加一个扩展接口,实现"只传入RGB的整型值来生成 UIColor 对象",编译后,就可以得到"RRSwiftKit.framework"的框架文件

extension UIColor {
    //只需要传RGB的整型值
    public convenience init(red: Int, green: Int, blue: Int) {
        self.init(red: CGFloat(red) / 255.0, green: CGFloat(green) / 255.0, blue: CGFloat(blue) / 255.0, alpha: 1.0)
    }
}

ios framework中修改appdelegate内代码 苹果framework_自定义_05

在其他工程中使用自定义的Framework

打开Xcode,点击"File->New->Project", 选择"Single View Application"创建一个新的工程,命名为“TestFramework”

ios framework中修改appdelegate内代码 苹果framework_swift_06

ios framework中修改appdelegate内代码 苹果framework_自定义_07

**将Framework "RRSwiftKit"引入到测试工程 "TestFramework" **

如图所示,将Framework "RRSwiftKit" 添加进工程 "TestFramework"

ios framework中修改appdelegate内代码 苹果framework_swift_08

ios framework中修改appdelegate内代码 苹果framework_swift_09

ios framework中修改appdelegate内代码 苹果framework_自定义_10

依次进入 "TestFramework" 的配置中 "General->Embedded Binaries" ,点击添加按钮

ios framework中修改appdelegate内代码 苹果framework_xcode_11

选择自定义的框架 "RRSwiftKit.framework"

ios framework中修改appdelegate内代码 苹果framework_整型_12

ios framework中修改appdelegate内代码 苹果framework_xcode_13

测试扩展接口

我们在ViewController.swift中引用RRSwiftKit,然后就可以看到扩展接口的语法提示了

ios framework中修改appdelegate内代码 苹果framework_xcode_14

我们随便输入一组 0-255的数字,运行后就可以看到结果

self.view.backgroundColor = UIColor.init(red: 156, green: 180, blue: 244)

ios framework中修改appdelegate内代码 苹果framework_整型_15

完整代码示例下载地址: https://github.com/ilrrong/TestFramework