ios .framework 制作

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

前言

最近在开发个人交易所钱包需要使用合作公司的framework,但是合作公司提供给我们的是framework。现对网上部分swift 和 oc 混合制作兼容framework遇到的问题整理如下。

如果你想将你开发的框架模块提供给其他人使用,一种方法是直接提供源代码。然而,这种方法对于商业框架提供并不是很优雅。它会暴露所有的实现细节,而这些实现你可能并不想开源出来。

另一种方法是将你的代码编译成静态库(library),并公布需要公开的头文件,让其他开发者添加到自己的项目中。

在这里插入图片描述

制作framework

1.新建一个project,选择如下图方式
在这里插入图片描述

2.语言选择swift
在这里插入图片描述

3.新建相关文件如下
在这里插入图片描述

Person.h

#import <Foundation/Foundation.h>

@interface Person : NSObject

-(void) test;

@end

Person.m

#import "Person.h"

@implementation Person

-(void)test {
    NSLog(@"person test");
}

@end

Test.swift

import UIKit

open class Test: NSObject {
    public override init(){
        print("Test init")
    }
}

添加需要暴露的头文件

把需要暴露的头文件拖拽到Public
在这里插入图片描述

MyFramework.h 头文件导入需要暴露的头文件(暴露Objective-c 实现的功能)

添加Person头文件
在这里插入图片描述

swift 功能怎么暴露? swift 中通过open/public 自动实现功能暴露

4.编译
在这里插入图片描述
选择任意一个模拟器编译PC 架构体系的framework

此时 framework 已经生成
在这里插入图片描述

MyFramework.framework > show in finder 进入文件目录
在这里插入图片描述

查看该编译生成的可执行文件支持的cpu 架构:
1) 使用终端进入MyFramework.framework 目录
2) 输入 lipo -info  MyFramework

输出信息如下:显示 x86_64 说明支持的体系架构是 intel x86 体系架构
在这里插入图片描述

注意: ARM 架构和 PC 架构(x86,x64)是不兼容的架构体系,所有使用模拟器和真机的framework 是有区别的

创建一个Release 版(不创建请略过)
Xcode 顶部导航 > Product > Scheme > Edit Scheme 选择Release
在这里插入图片描述

Command+B 编译,此时Release 版已生成,目录如下
在这里插入图片描述

真机版生成过程类似,选择 Generic ios Device,依次完成Debug/Release 版本。
在这里插入图片描述

5.至此我们的framework 就生成完了,但是单独的一个framework 支持的体系架构单一,非常不友好。可以把生成的 可执行文件和并成支持多体系架构的可执行文件。

1) 终端进入生成目录 Products
在这里插入图片描述

  1. 终端运行
    lipo -create Release-iphoneos/MyFramework.framework/MyFramework Release-iphonesimulator/MyFramework.framework/MyFramework -output ./MyFramework

  2. 运行成功将生成一个 MyFramework 的可执行二进制文件
    在这里插入图片描述

  3. 查看生成的体系架构
    在这里插入图片描述

  4. 至此,我们的可执行文件体系架构的合并完成

6.替换framework 中可执行文件,使用多体系架构的可执行文件替换任意一个 MyFramework.framework 中的可执行文件,使用1 替换 2即可
在这里插入图片描述

7.framework 验证
新建一个app项目,在如下位置导入framework
在这里插入图片描述

在这里插入图片描述

8.“xxx” is unavailable: cannot find Swift declaration for this class

如果我们切换到真机编译时(framework 中可执行文件已经包含真机相关指令集)
在这里插入图片描述

9.我们需要把Release-iphoneos/MyFramework.framework/Modules/MyFramework.swiftmodule/ 下的文件 copy 到 Release-iphonesimulator/MyFramework.framework/Modules/MyFramework.swiftmodule 目录
在这里插入图片描述

把复制的文件粘贴到Release-iphonesimulator对应目录
在这里插入图片描述

至此,我们的framework 兼容真机、模拟器,制作成功!
在这里插入图片描述

如果对您有帮助,点个赞支持 奶茶37.2℃ 创作更优秀的博文

猜你喜欢

转载自blog.csdn.net/Zllvincent/article/details/83145500