iOS SDK制作与发布教程【一】

3,090 阅读2分钟

最近看到有很多开发小伙伴苦恼SDK的制作,鉴于之前做了大量的马甲包SDK业务,抽出一点时间来总结一下制作SDK的各种姿势。

一:什么是SDK?

懒得打字, 请直接查看:zh.wikipedia.org/wiki/IOS%E8…

二:准备工作

MAC OS、XCode、Cocoapods、git、GitHub或者Gitee

三:开始制作

1.打开XCode,依次选择File -> New - > Project 截屏2023-08-15 15.20.39.png

出现咱们常见的创建选择区: 截屏2023-08-15 15.21.46.png

选择FrameWork,然后点击Next,进入完善SDK基础信息页面: 截屏2023-08-15 15.23.35.png

这里咱们给SDK进行一些基础信息设置:

  • Product Name设置为:NibilitySDK
  • Team设置为None
  • Bundle ID设置为:com.NibilitySDK.www
  • Language设置为Objective-C(Swift版本的于Objective-C有一些细微的区别,以后有空再写)
  • Test Info测试,咱们这里为了快速演示SDK的制作,就不过多描述测试相关的了

然后将SDK项目保存到【桌面】(当然你也可以保存到下载或者文档啥的,哪里方便就保存到哪里),保存后咱们就得到了一个自动打开的工作区: 截屏2023-08-15 15.31.45.png

为了让SDK可以正常的工作,我们需要修改Deployment info信息。

  • Minimum Deployments设置为 iOS 11.0,并且移除iPadMac的支持。 截屏2023-08-15 15.38.55.png

  • Targets → Build Settings → Mach-O Type 为Static Library 截屏2023-08-15 15.41.52.png

  • Targets → Build Settings → Build Active Architecture Only 设置为No 截屏2023-08-15 15.43.32.png

  • Build Settings → Enable Bitcode 设置为 No 截屏2023-08-15 15.46.00.png

  • Edit Scheme → Run → Info → Build Configuration 为 Release 截屏2023-08-15 15.47.09.png

到此,咱们的SDK就设置完成啦! 接下来准备SDK的开发工作。

  1. 新建一个DogManager类。 截屏2023-08-15 15.49.19.png

2.在DogManager.m中编写SDK的业务代码。

@implementation DogManager

/// 和猫打架
-(void)fightWithCat {
    NSLog(@"和猫猫打架");
}

@end

3.在DogManager.h中,暴露SDK的方法fightWithCat

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface DogManager : NSObject

/// 和猫打架
-(void)fightWithCat;

@end

NS_ASSUME_NONNULL_END

4.将DogManager设置为Public 截屏2023-08-15 15.58.22.png

5.然后我们在NibilitySDK.h文件中,引用DogManager.h头文件。 截屏2023-08-15 18.03.38.png

就这样,我们一个简单的SDK就制作完成了! 接下来准备编译模拟器&&真机,并合并framework。 截屏2023-08-15 16.02.56.png 截屏2023-08-15 16.04.05.png

然后进入信息设置页面:

  • Team设置为None
  • Product Name设置为:OutPutFramework
  • Project默认选择NibilitySDK

接下来创建Run Script脚本: 截屏2023-08-15 16.07.19.png

在Shell中输入以下脚本内容:

#!/bin/sh
#要build的target名
TARGET_NAME=${PROJECT_NAME}
if [[ $1 ]]
then
TARGET_NAME=$1
fi
UNIVERSAL_OUTPUT_FOLDER="${SRCROOT}/${PROJECT_NAME}/"

#创建输出目录,并删除之前的framework文件
mkdir -p "${UNIVERSAL_OUTPUT_FOLDER}/Framework"
rm -rf "${UNIVERSAL_OUTPUT_FOLDER}/Framework/${TARGET_NAME}.framework"

#分别编译模拟器和真机的Framework
xcodebuild -target "${TARGET_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build

xcodebuild -target "${TARGET_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphonesimulator BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build

#拷贝framework到univer目录
cp -R "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework" "${UNIVERSAL_OUTPUT_FOLDER}/Framework"

lipo "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework/${TARGET_NAME}" -remove arm64 -output "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework/${TARGET_NAME}"

#合并framework,输出最终的framework到build目录
lipo -create -output "${UNIVERSAL_OUTPUT_FOLDER}/Framework/${TARGET_NAME}.framework/${TARGET_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework/${TARGET_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${TARGET_NAME}.framework/${TARGET_NAME}"

#删除编译之后生成的无关的配置文件
dir_path="${UNIVERSAL_OUTPUT_FOLDER}/Framework/${TARGET_NAME}.framework/"
for file in ls $dir_path
do
if [[ ${file} =~ ".xcconfig" ]]
then
rm -f "${dir_path}/${file}"
fi
done

#判断build文件夹是否存在,存在则删除
if [ -d "${SRCROOT}/build" ]
then
rm -rf "${SRCROOT}/build"
fi
rm -rf "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator" "${BUILD_DIR}/${CONFIGURATION}-iphoneos"

#打开合并后的文件夹
open "${UNIVERSAL_OUTPUT_FOLDER}/Framework"

输入后: 截屏2023-08-15 16.10.37.png

然后切换Target,设备选择Any iOS Device: 截屏2023-08-15 16.11.18.png

设置OutPutFrameworkRelease: 截屏2023-08-15 18.04.59.png

四:编译SDK

Command+B,运行项目,你将会得到一个合并完成后的NibilitySDK.framework 然后你就可以把这个SDK导入到其他项目使用啦!

五:使用SDK

......