Swift-Framework开发及使用(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kmonarch/article/details/83415435

在开发中我们常常会用到一些第三方 SDK 库,使用时只需将 framework 文件添加到项目中即可,十分方便。同样地,我们也可以创建自己的 framework 框架,用来封装一些常用的工具方法、框架类等。一来不会使源代码完全暴露在外,二来也便于代码复用。

下面演示一个最基础framework的开发及使用

一、framework的制作
  1. 新建一个工程,创建时选择 iOS->Framework & Library,如下图所示

1
2. 在“General”->“Deployment Info”里设置个较低的发布版本,设置好之后的文件目录如下图所示:
2
3. 之后我们在工程中创建一个测试类及一个测试方法,如下:

import UIKit

class MyTest: NSObject
{
   class func sayHello()
   {
       print("Hello World")
   }
}

但是需要注意的是:对于那些需要暴露出来,即在框架外部也能访问使用的类、方便、变量前面需要加上关键字 Public。如果还允许 override 和继承的话,可以使用 open 关键字。所以修改后的代码如下:

import UIKit

public class MyTest: NSObject
{
    public class func sayHello()
    {
        print("Hello World")
    }
}
  1. 生成framework库文件
    1. 发布编译目标选择“Generic iOS Device”后,使用快捷键 command+B 或者点击菜单 Product > Build 进行编译。这时生成的是真机调试使用的 framework。
    2. 如果发布编译目标选择的是模拟器,那么编译出来的模拟器使用的 framework。
    3. 分别编译后我们可以选择 项目中的Products -> SDKDemoOne.framework 然后右键选择Show in Finder 即可进入所在文件夹,这是我们可以看到分别对应于 真机 和 模拟器的连个文件夹,里面各有一个.framework 文件。如下图所示:
      3

二、framework的使用
  1. 引入framework
    1. 将生成的 SDKDemoOne.framework添加到项目中来。(注意:要根据你是使用真机调试还是模拟器调试选择对应的 framework)
    2. 接着在“General”->“Embedded Binaries”中把 SDKDemoOne.framework 添加进来。这两步完成之后的工程文件目录如下:
      4
  2. 使用
    由于之前定义的是一个类方法,所以我们在需要使用的地方直接调用该方法即可,如下所示
import UIKit
import SDKDemoOne


class ViewController: UIViewController
{

    
    override func viewDidLoad()
    {
        super.viewDidLoad()

        SDKTest.sayHello()
    }
 
}

如此,即完成了这个framework的调用


三、常见问题
  1. 制作的Framework是动态库、还是静态库?
    1. framework 文件可以是动态库,也可以是静态库。创建 framework 的时候默认是 Dynamic Library(即动态库),像本文样例就是动态库。
    2. 如果要制作静态库,只需要编译 framework 时指定Build Settings-< Mach-O Type 为 Static Library
  2. 开发的sdk怎么同时支持模拟器和真机
    1. 首先我们先进入到真机和模拟器对应的静态库文件路径
    2. 打开终端:使用如下命令:
      lipo -create 模拟器文件路径/SDKDemoOne.framework/SDKDemoOne 真机文件路径/SDKDemoOne.framework/SDKDemoOne -output 输出路径/SDKDemoOne.framework
      即可得到在真机和模拟器下均可使用的静态库文件。

猜你喜欢

转载自blog.csdn.net/kmonarch/article/details/83415435