美文网首页iOS Developer
iOS创建.framework文件

iOS创建.framework文件

作者: Molary | 来源:发表于2016-04-16 20:07 被阅读1114次
  • iOS的库分为
  • .a 纯静态库只能包含代码
  • .dylib 动态库
  • .framework 包含动态库和静态库,可以包含图片资源Xib等
  • 动态库和静态库
    • 动态库在运行时实时部署,静态库必须在编译时连接到代码
    • 动态库加载到内存后可以重复使用,静态库必须每次import都引入一次
    • 自定义的动态库只能部署在iOS8以上系统

本篇文章介绍的是创建.framework

1.创建项目,选择cocoaTouch Framework

5F4F906E-2201-48AA-A33C-BF6F493D824C.png

2.本次创建项目的demo使用的是swift语言

327D2441-F082-4BE4-A415-E6BDD6FC58EF.png

3.把工程里的MyFramework.h给删除掉,swift不需要

4.创建一个MyFramework的类继承于NSobject里面的方法改成静态的方法添加public ,demo地址:https://github.com/molufang/MyFramework

E23CD7F6-C555-4C28-991B-C50D5E1DF990.png

代码源码:

public class MyFramework: NSObject {
static let bundle = NSBundle(forClass: MyFramework.self)
static let MyFrameworkStr = "MyFramework"
public static func loadVCFromStoryboard() {
  let vc =  UIStoryboard(name: "MyFramework", bundle: bundle).instantiateViewControllerWithIdentifier("MyFrameworkViewController")
    UIApplication.sharedApplication().keyWindow?.rootViewController?.presentViewController(vc, animated: true, completion: nil
    )
}
public static func openVCFromXib(){
    let vc = MyFrameworkViewController(nibName:MyFrameworkStr,bundle:bundle)
    UIApplication.sharedApplication().keyWindow?.rootViewController?.presentViewController(vc, animated: true, completion: nil)
}
public static func loadImage() -> UIImage {
    let image = UIImage(named: MyFrameworkStr + ".png",inBundle: bundle,compatibleWithTraitCollection:nil)
    return image!
}
}

5.在真机和模拟器上分别运行一下

就分别生成啦真机和模拟器的framework文件

右侧复制路径,文件-前往文件夹就可以看到生成的真机和模拟器的framework,此处需要注意,真机的只能在真机上运行,模拟器的只能在模拟器上运行


05AE6E76-ED33-431D-BC53-83EBA47CC99E.png

6.查看生成的静态库里面包含什么

605FC0CF-1718-4A5A-AB32-8AF08FCD2BCF.png

打开终端在终端输入

localhost:~ caxa$ lipo -info /Users/caxa/Library/Developer/Xcode/DerivedData/MyFreameWork-gtomirgjpyzhaifseycnwbmcampx/Build/Products/Debug-iphoneos/MyFreameWork.framework/MyFreameWork 

可以查看到当前的架构信息输出如下信息:

B9F73A4D-2853-404C-9861-D95CDA08251B.png

7.把真机和模拟器的framework合成一个,可以在真机和模拟器上都可以使用framework

先拷贝一个framework出来

75736DCB-E71F-42AF-A557-87A31CDE7FC6.png

然后使用命令 lipo - create 第一个目录 第二个目录 -output 第三个目录 把两个合成一个

 localhost:~ caxa$ lipo -crate    /Users/caxa/Library/Developer/Xcode/DerivedData/MyFreameWork-gtomirgjpyzhaifseycnwbmcampx/Build/Products/Debug-iphoneos/MyFreameWork.framework/MyFreameWork        /Users/caxa/Library/Developer/Xcode/DerivedData/MyFreameWork-gtomirgjpyzhaifseycnwbmcampx/Build/Products/Debug-  iphonesimulator/MyFreameWork.framework/MyFreameWork -output    /Users/caxa/Library/Developer/Xcode/DerivedData/MyFreameWork- gtomirgjpyzhaifseycnwbmcampx/Build/Products/MyFreameWork.framework 

做过推送的应该对这步并不感到陌生

此时这两个动态库就合并到一个动态库里啦

8.此时在输入命令来查看最终的合并结果
localhost:~ caxa$ lipo -info /Users/caxa/Library/Developer/Xcode/DerivedData/MyFreameWork-gtomirgjpyzhaifseycnwbmcampx/Build/Products/MyFreameWork.framework/MyFreameWork

9.打开Models把真机和模拟器上的东西都拷贝过来

47FCFF1E-9BF1-4567-AC4D-BD4C8205B394.png

10.这样我们就完成啦framework的创建

下面开始使用创建的framework吧

创建一个新项目名为TestFrameWorks

把刚刚创建好的framework复制引入到项目中

添加到项目中,一定选择General-Embedded Binaries不然会报找不到图片的错误

81DDCF01-02D3-45D2-8A1F-C59E08686A85.png

然后运行一下看下结果吧,我们期望的效果就出来啦,framework中添加的内容就被引入进来啦

Simulator Screen Shot 2016年4月16日 下午8.04.20.png

参考内容:

极客学院网站视频:http://www.jikexueyuan.com/course/2665_1.html?ss=1

欢迎大家关注我们的公众号,大家一起交流学习

143920-cff12ac7bddfe298-2.jpg

相关文章

网友评论

    本文标题:iOS创建.framework文件

    本文链接:https://www.haomeiwen.com/subject/kbxolttx.html