美文网首页创建iOS库
iOS通用SDK,framework工程搭建

iOS通用SDK,framework工程搭建

作者: 逆风启航_ | 来源:发表于2018-12-12 18:42 被阅读0次

关于SDK开发的工程搭建。
<font color=#FF0000>题外话:SDK代码不要使用指定文件名的方式,例如用文件名生成类等。因为后期做代码混淆会修改文件的前缀,指定文件名方式就会出错。</font>

前言

本文档主要是记录SDK的开发工程的搭建。比较以前的方法有点在于打包SDK流程简单、调试SDK方便等、SDK代码和资源统一管理等。

创建SDK工程的流程
  • 创建调试项目。
  • 创建framework target。
  • 创建bundle target。
  • 创建通用的SDK打包target。
  • sdk打包导出。
一、创建调试项目

创建一个常规开发APP的项目工程(如xxSDKSource)。这个工程作用是把所有SDK的资源统一起来,同时也可以在改工程上进行调试。

创建过程略。单元测试看个人情况是否需要添加。

二、创建framework target

1.在创建好的工程里添加一个新的target,类型选择为ios -> Framework&library -> Cocoa Touch Framework,填写target的名字(xxSDK).
这是工程TARGETS列表里会多一个Framework的target。

2.配置framework的相关参数。
2.1.sdk生成的规则配置。
TARGETS列表里-> 选中xxSDK -> Build Settings -> (ALL & Combined)

  • Dead Code Stripping 配置值为:NO.
  • Link With Standard Libraries 配置值为:NO.
  • Mach-O Type 配置值为:Static Library.
  • Build Active Architecture Only 配置值为:NO.

2.2.SDK导出配置。
TARGETS列表里-> 选中xxSDK -> Build Phases

  • 添加代码实现文件。在Complile Sources添加代码的实现文件,如.m .mm .c 等文件,否则生成的SDK里是不会包含这些文件里实现的方法的,使用就会报错。
  • 添加使用的库/静态库。在Link Binary With Libraries添加SDK使用到的Framework或.a库。
  • 添加SDK的头文件。在Headers里添加SDK的头文件,添加类型有3种分别为Public、Private、Project。其中只有Public类型在SDK里是可见的,即在生成的SDK里可以看到并使用Public列表里的头文件。
三、创建bundle target

在SDK里使用到的一些资源,如图片、i18文件、plist文件等等,想要提供出去给使用,这是就要打包为bundle资源包。

1.在创建好的工程里添加一个新的target,类型选择为macOS -> Framework&library -> Bundle,填写target的名字(xxSDKRes).
这是工程TARGETS列表里会多一个Bundle的target。

2.配置Bundle的相关参数。
2.1.Bundle生成的规则配置。
TARGETS列表里-> 选中xxSDKRes -> Build Settings -> (ALL & Combined)

  • Build Active Architecture Only 配置值为:YES.
  • Code Signing Identity 配置值为:Don't Code Sign.
  • iOS Deployment Target 配置值为:iOS 9.0.
  • Skip Install 配置值为:NO.
  • Strip Debug Symbols During Copy 中"Release"模式设置为:YES.
  • COMBINE_HIDPI_IMAGES 配置值为:"NO"

2.2.Bundle导出配置。
TARGETS列表里-> 选中xxSDKRes -> Build Phases

  • 添加需要导出的所有资源文件。在Copy Bundle Resources里添加所有需要导出到Bundle里的文件,生成的Bundle只包含了该列表里的文件。
四、创建通用的SDK打包target

平时打包SDK就是使用这个target,可以达到一次性把SDK和Bundle都打包出来,并且SDK已经是支持真机和模拟器的。(其实这个target是执行了一些Shell的命名)

1.在创建好的工程里添加一个新的target,类型选择为Cross-platform -> Other-> Aggregate,填写target的名字(xxSDKGeneral).
这是工程TARGETS列表里会多一个Aggregate的target。

2.嵌入打包相关脚本。
TARGETS列表里-> 选中xxSDKGeneral -> Build Phases
点击“+”选择类型“New Run Script Phase”。并且填写如下代码:

# Sets the target folders and the final framework product.
# 如果工程名称和Framework的Target名称不一样的话,要自定义FMKNAME
# 例如: FMK_NAME = "MyFramework"
#FMK_NAME=${PROJECT_NAME}
FMK_NAME=framework名字 #如xxSDK
BUNDLE_NAME=bundle名字 #如xxSDKRes
# 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}/通用版SDK/${FMK_NAME}.framework
BUNDLE_DIR=${SRCROOT}/通用版SDK/${BUNDLE_NAME}.bundle
# Working dir will be deleted after the framework creation.
WRK_DIR=build
DEVICE_DIR=${WRK_DIR}/Release-iphoneos/${FMK_NAME}.framework
DEVICE_BUNDLE_FIR=${WRK_DIR}/Release-iphoneos/${BUNDLE_NAME}.bundle
SIMULATOR_DIR=${WRK_DIR}/Release-iphonesimulator/${FMK_NAME}.framework
# -configuration ${CONFIGURATION}
# Clean and Building both architectures.
xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphoneos build
xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphonesimulator build
xcodebuild -configuration "Release" -target "${BUNDLE_NAME}" -sdk iphoneos build
# Cleaning the oldest.
rm -rf "${BUNDLE_DIR}"
if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi
mkdir -p "${INSTALL_DIR}"
cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"
cp -R "${DEVICE_BUNDLE_FIR}/" "${BUNDLE_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}"
五、sdk打包导出。

1.选择打包的target为“xxSDKGeneral”,设备为 “General iOS Device”。
2.执行编译,编译完成,生成的SDK和资源包会自动弹出一个文件夹。
3.只能帮你到这里了。

相关文章

网友评论

    本文标题:iOS通用SDK,framework工程搭建

    本文链接:https://www.haomeiwen.com/subject/qjbphqtx.html