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

一:什么是SDK?

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

二:预备工作

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

三:开始制造

1.翻开XCode,顺次挑选File -> New – > Project

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

呈现我们常见的创立挑选区:

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

挑选FrameWork,然后点击Next,进入完善SDK基础信息页面:

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

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

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

然后将SDK项目保存到【桌面】(当然你也可以保存到下载或许文档啥的,哪里方便就保存到哪里),保存后我们就得到了一个自动翻开的工作区:

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

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

  • Minimum Deployments设置为 iOS 11.0,并且移除iPadMac的支持。

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

  • TargetsBuild SettingsMach-O TypeStatic Library

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

  • TargetsBuild SettingsBuild Active Architecture Only设置为No

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

  • Build SettingsEnable Bitcode设置为No

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

  • Edit SchemeRunInfoBuild ConfigurationRelease

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

到此,我们的SDK就设置完结啦! 接下来预备SDK的开发工作。

  1. 新建一个DogManager类。
    iOS SDK制作与发布教程【一】

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

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

5.然后我们在NibilitySDK.h文件中,引证DogManager.h头文件。

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

就这样,我们一个简单的SDK就制造完结了! 接下来预备编译模拟器&&真机,并兼并framework。

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

然后进入信息设置页面:

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

接下来创立Run Script脚本:

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

在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"

输入后:

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

然后切换Target,设备挑选Any iOS Device:

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

设置OutPutFrameworkRelease:

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

四:编译SDK

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

五:运用SDK

……