美文网首页
iOS Framework封装与调试

iOS Framework封装与调试

作者: Timmy_Yang | 来源:发表于2023-07-09 19:05 被阅读0次

最近帮兄弟公司的做支付业务sdk,积累了 sdk 封装的经验!下面我会从零开始把我的 sdk 封装和调试经历分享给大家,希望能给看到这篇文章的人有所帮助!

这边文章我会从以下几个方面来讲述:

Framework怎么集成在主项目里调试

xib 文件和图片怎么生成引用

Pods 第三方库的使用

Framework 的配置与导出

1、新建主项目,主项目的 ProjectName 是 HelloFramework(也就是我们要使用 sdk 业务的主项目)

2、接下来在主项目里创建Framework,就叫MyFramework好了

创建 Framework

3、然后我们点开 Project 文件,在Target 列表里选中 MyFramework,Build Settings

a、Architectures→Architectures 配置支持的指令集,这里系统已经默认配置了 arm64和 armv7,所以只要增加一个 armv7s 就可以了

配置指令集

以下是指令集对应的设备

armv6

iPhone、iPhone 3G

iPod 1G、iPod 2G

armv7

iPhone 3GS、iPhone 4

iPod 3G、iPod 4G、iPod 5G

iPad、iPad 2、iPad 3、iPad Mini

armv7s

iPhone 5、iPhone 5C

iPad 4

arm64

iPhone 5s iPhone 6iPhone 6P iPhone 6s iPhone 6sP iPhone 7 iPhone 7P

iPad Air, Retina iPad Mini

b、Linking→Mach-O Type 将Dynimic Library 改成 Static Library

配置 Library 类型

c、Deployment→iOS Deployment Target 选择你想兼容的最低 iOS 版本

d、新建一个 FrameworkManager,然后再创建好我们要使用的内容,这里创建一个用 Xib 来显示的 UIViewController,以及在里面显示图片

@interface MyFrameworkManager : NSObject

+ (void)showFileVCWithSourceVC:(UIViewController *)VC;

@end

e、接下来可以将 Target 选为 Framework 开始编译了

f、在工程文件列表里找到 Products 文件,右键 MyFramework.framework,show in finder。把所有的 Nib 文件 Copy 出来,接下来会放到另外一个专门存放资源文件的 bundle 里

g、在Build phase→Headers 里面将要暴露出来的.h文件拖放到 Public 目录下

4、创建bundle,放置资源文件(xib 文件,图片)

a、新建一个空文件夹,

b、把图片和3f 步骤里的 nib 文件都放进文件夹

c、然后把文件名改成任何你想要的名字(一般都会与你的 Framework 名字匹配),但是注意,添加.bundle后缀

5、pods 库的引用和调试,同普通的 pods 库应用,直接 pod init ,在 podfile 里添加自己要用的库,pod install 就可以直接在 Framework 里使用 pods 库的东西了

6、第三方库的使用,这里以引入支付宝为例

a、在主工程引入 AlipaySDK.framework 和 AlipaySDK.bundle

b、在主工程的 link binary 添加支付宝 sdk 依赖的库

c、MyFramework 下添加link binary 添加 AlipaySDK.framework

d、编译通过,可以在 Framework 下正常调用

7、接下来就是导出 Framework 了

A、用 shell 脚本自动导出 Framework

a、如果是单 Project

# Sets the target folders and the final framework product.

# 如果工程名称和Framework的Target名称不一样的话,要自定义FMKNAME

#FMK_NAME = "MyFramework"

FMK_NAME=${PROJECT_NAME}

# Install dir will be the final output to the framework.

# The following line create it in the root folder of the current project.

INSTALL_DIR=${SRCROOT}/Products/${FMK_NAME}.framework

# Working dir will be deleted after the framework creation.

WRK_DIR=build

DEVICE_DIR=${WRK_DIR}/Release-iphoneos/${FMK_NAME}.framework

SIMULATOR_DIR=${WRK_DIR}/Release-iphonesimulator/${FMK_NAME}.framework

# -configuration ${CONFIGURATION}

# Clean and Building both architectures.

xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphoneos clean build

xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphonesimulator clean build

# Cleaning the oldest.

if [ -d "${INSTALL_DIR}" ]

then

rm -rf "${INSTALL_DIR}"

fi

mkdir -p "${INSTALL_DIR}"

cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"

# Uses the Lipo Tool to merge both binary files (i386 + armv6/armv7) into one Universal final product.

lipo -create "${DEVICE_DIR}/${FMK_NAME}" "${SIMULATOR_DIR}/${FMK_NAME}" -output "${INSTALL_DIR}/${FMK_NAME}"

rm -r "${WRK_DIR}"

open "${INSTALL_DIR}"

b、 如果是 workspace 的话,编译的命令会有些区别,不是配置 Target 而是配置workspace 和 scheme,这两个参数的值可以通过中断 cd 当前项目目录下 xcodebuild -list查看,以下是我根据例子配置了一个

xcodebuild -configuration "Release" -workspace "HelloFramework.xcworkspace" -scheme "MyFramework" -target "${FMK_NAME}" -sdk iphoneos -arch armv7 -arch armv7s -arch arm64  clean build

xcodebuild -configuration "Release" -workspace "HelloFramework.xcworkspace" -scheme "MyFramework" -target "${FMK_NAME}" -sdk iphonesimulator -arch x86_64 -arch i386 clean build

B、在终端手动操作

a、选择模拟器和Generic iOS Device两种设备编译出两个包(为了导出一个兼容模拟器和真机都能用的 Framework)

b、编译完事后,同3f 步骤,在 finder 里找到 iPhoneOS 和 iPhonesimulator 里的两个 framework 包

c、将两个包里的 MyFramework 文件合成一个,命令如下

lipo -create /Users/OuYangTimmy/Library/Developer/Xcode/DerivedData/BBGPaySDK-bahiyajwgypizfascjejguaoiqje/Build/Products/Debug-iphonesimulator/BBGPaySDK.framework/BBGPaySDK /Users/OuYangTimmy/Library/Developer/Xcode/DerivedData/BBGPaySDK-bahiyajwgypizfascjejguaoiqje/Build/Products/Debug-iphoneos/BBGPaySDK.framework/BBGPaySDK -output /Users/OuYangTimmy/Library/Developer/Xcode/DerivedData/BBGPaySDK-bahiyajwgypizfascjejguaoiqje/Build/Products/BBGPaySDK

d、将合成 MyFramework 替换原有的,那么这个 framework 就是我们要的包了

8、最后一步就是编写文档了,作为 sdk 的导出,文档里你的表明自己 build 版本和依赖的库,有 Pods 配置的话,也得注明,系统配置,编译配置等等~More detailed the better!

至此,整个Framework 调试和封装流程就分享完了!希望路过的大牛不要笑话,也热烈欢迎大家指正错误和不足,或者有更好的方式方法我们一起讨论!


文章最后是多谢和感恩!

行文前我阅读过的文章:

http://www.jianshu.com/p/038dab7accbc

https://gist.github.com/leonardvandriel/3775603

相关文章

  • iOS SDK~ 打包framework、开发与调试

    原文iOS SDK~ 打包framework、开发与调试iOS项目中SDK的开发与调试iOS 中的 armv7,a...

  • iOS开发--Framework调试与封装

    最近帮兄弟公司的做支付业务sdk,积累了 sdk 封装的经验!下面我会从零开始把我的 sdk 封装和调试经历分享给...

  • iOS开发--Framework 封装、调试

    https://www.jianshu.com/p/38ed8811c17f[https://www.jiansh...

  • 学习如何封装Framework

    参考iOS封装功能生成 .framework 一. Framework的制作 首先新建一个Framework文件 ...

  • framework使用pod安装

    上篇文章《iOS封装功能生成 .framework》中讲到了如何封装framework以及简单使用,不过是通过直接...

  • iOS封装framework小结

    1.封装SDK Flies -> New -> Project -> iOS -> Framework & Lib...

  • iOS 封装framework

    1. 创建framework 关于创建静态库framework,新建project选择以下标签,然后自己命名 在创...

  • iOS 封装.framework

    今天去面试,结果是一家做sdk的公司,一下子断了思路,怎么封装成framework,不暴露源代码,回来了马上研究一...

  • iOS 封装framework

    1、Xcode 本文使用Xcode版本为:Version 11.2.1 (11B500) 2、创建一个framew...

  • IOS FrameWork调试

    一.Framework调试 Framework无法单独进行调试,需要依赖于项目进行调试 增加一个Target,选择...

网友评论

      本文标题:iOS Framework封装与调试

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