【潮汐】iOS-SDK打包framework同时进行开发与调试

多targets用pod建议使用这个方法去创建SDK,防止三方库冲突,如AFN冲突等:【潮汐】iOS framework-SDK开发用Cocoapods管理第三方库

多工程方法推荐用如下方法建立SDK,建立好后在导入pod。

iOS-SDK打包framework同时进行开发与调试步揍如下(实战项目:品创艾德广告):

2020年7月17日再次创建一个SDK,好用。

一、创建一个workspace项目

1.现在桌面创建文件夹 SHTestSDk

2.打开Xcode,创建一个workspace 流程: Xcode---File---New---Workspace 快捷键 :command +N = 创建项目

3.把创建好的添加到 文件名为 SHTestSDK 里面

如图1:

image

图2:

image

图3:创建成功效果

image

二、创建SDK

1、打开SHTestSDK.xcworkspace文件,创建project

图4:

image

图5:

image

图6:

image

图7:

image

图8:成功效果图

image

三、创建Demo

图9:

image

图10:

image

图11:成功效果图

image

四、SHTestDemo的关联以及SDK的开发调试

1.这里创建一个SHView类,继承于UIView,简单的重写了初始化方法,设置了颜色

图12:

image

2.【一些重要】设置SDK里的 Build Setting参数 将Build Active Architecture only设置为NO,

SDK里Mach-O Type 选择为Statict Library 静态库。

Demo里 Other Linker Flags 添加:-ObjC

图13:

image

3.设置Build Setting参数 在Architectures下增加armv7s

图14:

image

4.设置Headers,将要公开的头文件拖到Public下,要隐藏的放到Private或Project下,隐藏的头文件不能被引用,效果图:

图15:

image

5.在SHTestSDK.h(必须是公开的,否则无法引用)中将所有要公开的.h引入

image

6.创建一个Aggregare(目的是为了合并打包真机和模拟器都支持的SDK,参考:https://www.jianshu.com/p/b26319660667

图16:

image

图17:

image

7.嵌入脚本,选中刚刚创建的Aggregare,然后选中右侧的Build Phases,点击左边的+号,选择New Run Script Phases

图18:

image

图19:

image

8.下面把这段脚本复制进去(格式不要错,格式错编译不通过)此脚本好像有问题,不建议用。

# 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}"

2022年2月测试用的脚本,没问题。没有用上面的,上面的有问题,不好用。

#通过脚本合并真机和模拟器SDK包
TARGET_NAME=${PROJECT_NAME}
OUTPUT_DIR=${SRCROOT}/Products/${TARGET_NAME}.framework
DEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${TARGET_NAME}.framework
SIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework

if [ -d "${OUTPUT_DIR}" ]
then
rm -rf "${OUTPUT_DIR}"
fi

mkdir -p "${OUTPUT_DIR}"
cp -R "${DEVICE_DIR}/" "${OUTPUT_DIR}/"

lipo -create "${DEVICE_DIR}/${TARGET_NAME}" "${SIMULATOR_DIR}/${TARGET_NAME}" -output "${OUTPUT_DIR}/${TARGET_NAME}"

open "${SRCROOT}/Products"


图20:效果图:

image

9.先command + B在模拟器上,编译下.framework的文件(如:PCEAdSDK.framework)然后再
选择真机编译下。最后选择Aggregare编译,就能得到真机模拟器都支持的SDK了。在finder中找到framework,拷贝出来

图21:

image

图22:效果图

image

五、SHTestDemo与SHTestSDK的关联

1.把打包好的framework拖到demo里面,不要选择copy,只是引用就好。

图23:

image

2.使用SDK,运行demo

图24:

image
image

图25:效果图:

注意:以上功能就是SDK 和 demo 相关联好了.

六、SHTestSDK 调试

1.修改下面SDK中的代码,然后选择Aggregare编译下,再运行demo就是修改后的效果,然后就可以愉快的在这个工程里面开发调试SDK了,如果我把MyView的颜色设置为yellow,再去运行demo,看一下效果

图26:

image

备注:合成真机+模拟器包:https://www.jianshu.com/p/b26319660667

【潮汐】合成真机+模拟器包:https://www.jianshu.com/p/82d7e467c1d0

七、【重点】给SDK添加CocoaPods,管理AFN等三方网络请求库,防止别人接入时候冲突。
【潮汐】iOS给多工程的workspace添加CocoaPods:https://www.jianshu.com/p/d00ed0978cc1

原文作者:薛中阳
链接:https://www.jianshu.com/p/a413c17f44a5

=====SDK中使用图片方法============

1、最简单粗暴的方法,直接把图片放在SHTestDemo里,然后在SDK里可以直接正常读取就行。

2、【推荐使用】command+N建立一个Settings Bundle文件,(命名为:BRCBTwoAccountSDKImage.bundle)然后把图片都放在里面,然后copy拖入Demo中,图片资源只能放在Demo中才能读取到。


image.png
/// SDK里读取bundle图片
/// @param imageName 图片名字,不用带后缀
+(UIImage *)imageNamedBRCB:(NSString *)imageName{
    return [UIImage imageNamed:[NSString stringWithFormat:@"BRCBTwoAccountSDKImage.bundle/%@",imageName]];
}

用法:
UIImage *img = [UIImage imageNamedBRCB:@"tuijian"];

=====【重要】SDK开发中使用framework方法============

chaoxiPay.frameworkchaoxiPayRes.bundle库为例子:

1、在SDK开发时候要用到第三方定制提供的chaoxiPay.framework库的时候,我们需要在SDK和Demo的targets里都导入(直接拖进去)对应的chaoxiPay.framework和chaoxiPayRes.bundle
2、SDK和Demo的targets里都要导入chaoxiPay.framework的系统依赖与一些配置。比如有些framework库需要把bitcode设置为NO,就需要在SDK与Demo里的targets同时设置,否则无法运行与使用SDK。
例子

SDK开发中使用三方framework的方法

补充:如果SDK里要导入的是.a的静态库,如:chaoxilib.a,只需要在SDK的targets导入就行,Demo的targets里不用导入。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容