多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:
图2:
图3:创建成功效果
二、创建SDK
1、打开SHTestSDK.xcworkspace文件,创建project
图4:
图5:
图6:
图7:
图8:成功效果图
三、创建Demo
图9:
图10:
图11:成功效果图
四、SHTestDemo的关联以及SDK的开发调试
1.这里创建一个SHView类,继承于UIView,简单的重写了初始化方法,设置了颜色
图12:
2.【一些重要】设置SDK里的 Build Setting参数 将Build Active Architecture only设置为NO,
SDK里Mach-O Type 选择为Statict Library 静态库。
Demo里 Other Linker Flags 添加:-ObjC
图13:
3.设置Build Setting参数 在Architectures下增加armv7s
图14:
4.设置Headers,将要公开的头文件拖到Public下,要隐藏的放到Private或Project下,隐藏的头文件不能被引用,效果图:
图15:
5.在SHTestSDK.h(必须是公开的,否则无法引用)中将所有要公开的.h引入
6.创建一个Aggregare(目的是为了合并打包真机和模拟器都支持的SDK,参考:https://www.jianshu.com/p/b26319660667)
图16:
图17:
7.嵌入脚本,选中刚刚创建的Aggregare,然后选中右侧的Build Phases,点击左边的+号,选择New Run Script Phases
图18:
图19:
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:效果图:
9.先command + B在模拟器上,编译下.framework的文件(如:PCEAdSDK.framework)然后再
选择真机编译下。最后选择Aggregare编译,就能得到真机模拟器都支持的SDK了。在finder中找到framework,拷贝出来
图21:
图22:效果图
五、SHTestDemo与SHTestSDK的关联
1.把打包好的framework拖到demo里面,不要选择copy,只是引用就好。
图23:
2.使用SDK,运行demo
图24:
图25:效果图:
注意:以上功能就是SDK 和 demo 相关联好了.
六、SHTestSDK 调试
1.修改下面SDK中的代码,然后选择Aggregare编译下,再运行demo就是修改后的效果,然后就可以愉快的在这个工程里面开发调试SDK了,如果我把MyView的颜色设置为yellow,再去运行demo,看一下效果
图26:
备注:合成真机+模拟器包: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中才能读取到。

/// SDK里读取bundle图片
/// @param imageName 图片名字,不用带后缀
+(UIImage *)imageNamedBRCB:(NSString *)imageName{
return [UIImage imageNamed:[NSString stringWithFormat:@"BRCBTwoAccountSDKImage.bundle/%@",imageName]];
}
用法:
UIImage *img = [UIImage imageNamedBRCB:@"tuijian"];
=====【重要】SDK开发中使用framework方法============
以chaoxiPay.framework和chaoxiPayRes.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里要导入的是.a的静态库,如:chaoxilib.a,只需要在SDK的targets导入就行,Demo的targets里不用导入。