最近看到有很多开发小伙伴苦恼SDK的制造,鉴于之前做了大量的马甲包SDK业务,抽出一点时刻来总结一下制造SDK的各种姿态。
一:什么是SDK?
懒得打字, 请直接查看:zh.wikipedia.org/wiki/IOS%E8…
二:预备工作
MAC OS、XCode、Cocoapods、git、GitHub或许Gitee
三:开始制造
1.翻开XCode,顺次挑选File
-> New
– > Project
呈现我们常见的创立挑选区:
挑选FrameWork
,然后点击Next
,进入完善SDK基础信息页面:
这里我们给SDK进行一些基础信息设置:
-
Product Name
设置为:NibilitySDK -
Team
设置为None -
Bundle ID
设置为:com.NibilitySDK.www -
Language
设置为Objective-C(Swift版本的于Objective-C有一些细微的区别,以后有空再写) -
Test Info
测验,我们这里为了快速演示SDK的制造,就不过多描述测验相关的了
然后将SDK项目保存到【桌面】
(当然你也可以保存到下载或许文档啥的,哪里方便就保存到哪里),保存后我们就得到了一个自动翻开的工作区:
为了让SDK可以正常的工作,我们需要修正Deployment info
信息。
-
Minimum Deployments
设置为 iOS 11.0,并且移除iPad和Mac的支持。 -
Targets
→Build Settings
→Mach-O Type
为Static Library
-
Targets
→Build Settings
→Build Active Architecture Only
设置为No
-
Build Settings
→Enable Bitcode
设置为No
-
Edit Scheme
→Run
→Info
→Build Configuration
为Release
到此,我们的SDK就设置完结啦! 接下来预备SDK的开发工作。
- 新建一个
DogManager
类。
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
5.然后我们在NibilitySDK.h
文件中,引证DogManager.h
头文件。
就这样,我们一个简单的SDK就制造完结了! 接下来预备编译模拟器&&真机,并兼并framework。
然后进入信息设置页面:
-
Team
设置为None -
Product Name
设置为:OutPutFramework -
Project
默认挑选NibilitySDK
接下来创立Run Script
脚本:
在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"
输入后:
然后切换Target
,设备挑选Any iOS Device
:
设置OutPutFramework
为Release:
四:编译SDK
Command+B,运行项目,你将会得到一个兼并完结后的NibilitySDK.framework 然后你就可以把这个SDK导入到其他项目运用啦!
五:运用SDK
……