创建iOS库

iOS通用SDK,framework工程搭建

2018-12-12  本文已影响0人  逆风启航_

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

前言

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

创建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)

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

三、创建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)

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

四、创建通用的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.只能帮你到这里了。

上一篇 下一篇

猜你喜欢

热点阅读