我是想把常用的工具方法,封装成一个framework
封装成framework,运行速度会快,不会暴露方法的实现,装逼!!
缺点,不能很好的根据需求的变动,来修改内部的实现,所以,想讨论说自己的一些方法要不要封装成一个framework,我感觉,没必要。毕竟自己写的不会那么完美,修改起来又麻烦。
这里,只是教大家怎么制作framework,不涉及其他!!!
开始coding
创建一个工程
我这里选择的是1,在一个工程里创建,不用新的工程再去测试,当然选择2也是一样的
然后选择这个
跟一个工程一样,你可以选择framework支持的版本和类型
创建之后,会有一个文件夹,里边会自动生成一个swift文件,删掉,然后自己创建一个swift文件,像这样
这里,我新建的framework名字叫RSDK,RMamager文件夹,是我自己创建的,里边就是我们要写的代码
注意:Swift跟OC不一样的地方,没有头文件,所以,要想外界可以访问你的方法,必须要把类和方法都声明为public的权限,像这样
public class RManager: NSObject {
public class func sayHelloTo(name:String) {
print("你对\(name)说了hello!!")
}
}
这里的sayHelloTo是一个类方法,当然你也可以写一个单例,来调用成员方法,像这样
public class RManager: NSObject {
public static let share = RManager()
public func sayHelloTo(name:String) {
print("你对\(name)说了hello!!")
}
}
调用的时候,就不用说了吧
RManager.sayHelloTo(name:"jack)//类方法调用
RManager.share.sayHelloTo(name:"jack")//成员方法调用
当然,这里你也可以对系统的类进行扩展,比如常用的,用十六进制的字符串的到颜色,你可以这样
public extension UIColor {
class func colorWidthString(hexString:String, alaph:Float) -> UIColor {
var color:UIColor!
var cStr : String = hexString.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines).uppercased()
if cStr.hasPrefix("#") {
let index = cStr.index(after: cStr.startIndex)
cStr = cStr.substring(from: index)
}
if cStr.characters.count != 6 {
return UIColor.black
}
let rRange = cStr.startIndex ..< cStr.index(cStr.startIndex, offsetBy: 2)
let rStr = cStr.substring(with: rRange)
let gRange = cStr.index(cStr.startIndex, offsetBy: 2) ..< cStr.index(cStr.startIndex, offsetBy: 4)
let gStr = cStr.substring(with: gRange)
let bIndex = cStr.index(cStr.endIndex, offsetBy: -2)
let bStr = cStr.substring(from: bIndex)
var r:CUnsignedInt = 0, g:CUnsignedInt = 0, b:CUnsignedInt = 0;
Scanner(string: rStr).scanHexInt32(&r)
Scanner(string: gStr).scanHexInt32(&g)
Scanner(string: bStr).scanHexInt32(&b)
color = UIColor(red: CGFloat(r) / 255.0, green: CGFloat(g) / 255.0, blue: CGFloat(b) / 255.0, alpha: CGFloat(alaph))
return color
}
}
当你引入这个framework,就可以直接这样
view.backgroundColor = UIColor.colorWidthString(hexString: "ffcccc", alaph: 1)
coding的部分,要实现什么功能,就自己写,注意一点就是public。
写完代码之后,就是要生成framework
选择运行目标为framework
我这里,就要选择RSDK,选择模拟器和真机,分别command + b编译一下,然后选择release模式下,选择模拟器和真机command + b。也就是debug模式和release都要编译一下,模式选择点这里进去就能看到
编译完了之后,就可以看到是这样的结构
有时候,编译成了,但是framework还是红色的,退出Xcode,重新打开有可能就好了,或者直接选中framework,在finder中显示,可以看到文件结构是这样的
可以看到,有真机和模拟器的版本,接下来就是合并模拟器和真机framework
在终端中,cd到文件夹的上层目录,或者你自定义的一个目录
这个东西,是等下要拖到终端中的,有两个,模拟器(path1)的和真机的(path2)
终端中这样写
lipo -create -output RSDK path1 path2
我这里是把SDK名字叫成了RSDK,换成自己的名字就行,回车,会看到在你指定的路径下,有一个RSDK的东西生成,然后有这个RSDK来替换模拟器或者真机里边的RSDK,也就是把这个RSDK换成刚才生成的
然后进入模拟器的release里边
红框内的东西全部复制,放到对应的真机的对应目录下
完了之后,这个东西就是最终生成的framework
将framework加入到工程测试,就不用说了吧,注意一点,这个地方,也要加上你的framework引用
到此,结束,自己的framework就制作完成了,个人建议,常用的,不怎么会变的方法工具,可以这样弄。