第1部分 创建一个静态库名字为 MySDK
![](https://img.haomeiwen.com/i4249185/f792f00cbe4cff1c.png)
![](https://img.haomeiwen.com/i4249185/4853fccc402ae38c.png)
删除没用的.m文件
![](https://img.haomeiwen.com/i4249185/a986298b64e5fe78.png)
删除.h中内容 添加 #import<UIkit/UIkit.h>
![](https://img.haomeiwen.com/i4249185/4ce3f206b86050b8.png)
导入uikit 框架
![](https://img.haomeiwen.com/i4249185/8b86e3c8178cc641.png)
选中Xcode -> Build Phases界面,选择Editor\Add Build Phase\Add Copy Headers Build Phase
![](https://img.haomeiwen.com/i4249185/962f0a806a7fc133.png)
把MySDK.h从项目导航栏中拖到中央面板的Copy Headers下的Public部分。这一步确保任何使用你的库的用户均可以获取该头文件
![](https://img.haomeiwen.com/i4249185/6526c02e4f0de02e.png)
创建一个UI页面并引用.h到 Copy Headers下的Public
![](https://img.haomeiwen.com/i4249185/de01da405ab353eb.png)
配置Build Settings
然后选择MySDK静态库目标,选择Build Setting栏,然后搜索public header,双击Public Headers Folder Path,在弹出视图中键入如图所示内容:
输入 include/$(PROJECT_NAME)
![](https://img.haomeiwen.com/i4249185/20b663847edd3fab.png)
![](https://img.haomeiwen.com/i4249185/24c01a655209ae42.png)
![](https://img.haomeiwen.com/i4249185/b2a62e6cc6e51722.png)
![](https://img.haomeiwen.com/i4249185/0d334c459bef0140.png)
选择目标为iOS Device,按下command + B进行编译,一旦成功,工程导航栏中Product目录下libMySDK.a文件将从红色变为黑色,表明现在该文件已经存在了。右键单击libMySDK.a,选择Show in Finder。
第2部分 新建工程
常见一个新的工程(Single View Application 类型)位置和MySDK位置在同一目录下
把MySDK工程关掉 将MySDK.xcodeproj拖入MyTestSDK中的工程
注意:无法将同一工程在两个Xcode窗口中同时打开,在将MySDK.xcodeproj拖入MyTestSDK之前关闭MySDK项目
![](https://img.haomeiwen.com/i4249185/942e21726341d7f1.png)
![](https://img.haomeiwen.com/i4249185/3dfef1be3cc907f9.png)
![](https://img.haomeiwen.com/i4249185/abdb4bd046903b7c.png)
![](https://img.haomeiwen.com/i4249185/35513fe701615446.png)
![](https://img.haomeiwen.com/i4249185/3bebfe683a99ad3e.png)
![](https://img.haomeiwen.com/i4249185/5a4ddd58c32015ff.png)
![](https://img.haomeiwen.com/i4249185/ce37c45421564735.png)
可以调用了
引用头文件#import<MySDK/Myview.h>或者#import<MySDK/MySDK.h>
MySDK.h中的代码
在这里把需要引用的类都引用了 之后调用的时候只需要引用#import<MySDK/MySDK.h>就可以了
不然要引用#import<MySDK/Myview.h>或者#import<MySDK/??.h>
#import<UIkit/UIkit.h>
#import<MySDK/MyView.h>
#import<MySDK/MyViewController.h>
第3部分 创建framework
在项目导航栏中选择MySDK.xcodeproj,然后选择MySDK静态库目标,选择Build Phases栏,然后选择Editor/Add Build Phase/Add Run Script Build Phase来添加一个新的脚本。
![](https://img.haomeiwen.com/i4249185/e0e6df7c4c31c766.png)
固定的脚本代码[图片上传中...(屏幕快照 2018-04-10 下午3.23.39.png-305576-1523345538046-0)]
set -e
export FRAMEWORK_LOCN="${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.framework"
# Create the path to the real Headers dir
mkdir -p "${FRAMEWORK_LOCN}/Versions/A/Headers"
# Create the required symlinks
/bin/ln -sfh A "${FRAMEWORK_LOCN}/Versions/Current"
/bin/ln -sfh Versions/Current/Headers "${FRAMEWORK_LOCN}/Headers"
/bin/ln -sfh "Versions/Current/${PRODUCT_NAME}" \
"${FRAMEWORK_LOCN}/${PRODUCT_NAME}"
# Copy the public headers into the framework
/bin/cp -a "${TARGET_BUILD_DIR}/${PUBLIC_HEADERS_FOLDER_PATH}/" \
"${FRAMEWORK_LOCN}/Versions/A/Headers"
![](https://img.haomeiwen.com/i4249185/7d5c696c41b2e0a1.png)
现在,选择MySDK静态库,然后选择iOS Device构建目标,然后使用cmd+B构建。
创建Aggregate
两种方式一样的
方式1
![](https://img.haomeiwen.com/i4249185/e0d0a5f972057aec.png)
方式2
![](https://img.haomeiwen.com/i4249185/5fdcd708a4a1fc7f.png)
命名为Framework
![](https://img.haomeiwen.com/i4249185/f1aab0ade0e8c5dd.png)
![](https://img.haomeiwen.com/i4249185/6eb914f86e0896ea.png)
![](https://img.haomeiwen.com/i4249185/e51cc2b3f513e7e0.png)
下边的操作:这个目标的主要编译部分是多平台编译,你将使用一个脚本来做到这一点。和你之前做的一样,在Framework目标下,选择Build Phases栏,点击Editor/Add Build Phase/Add Run Script Build Phase,创建一个新的Run Script Build Phase。
![](https://img.haomeiwen.com/i4249185/b5677e9848349df1.png)
![](https://img.haomeiwen.com/i4249185/f37243e57678b3da.png)
![](https://img.haomeiwen.com/i4249185/e701c36086ef8f45.png)
固定的脚本代码
set -e
# If we're already inside this script then die
if [ -n "$RW_MULTIPLATFORM_BUILD_IN_PROGRESS" ]; then
exit 0
fi
export RW_MULTIPLATFORM_BUILD_IN_PROGRESS=1
RW_FRAMEWORK_NAME=${PROJECT_NAME}
RW_INPUT_STATIC_LIB="lib${PROJECT_NAME}.a"
RW_FRAMEWORK_LOCATION="${BUILT_PRODUCTS_DIR}/${RW_FRAMEWORK_NAME}.framework"
function build_static_library {
# Will rebuild the static library as specified
# build_static_library sdk
xcrun xcodebuild -project "${PROJECT_FILE_PATH}" \
-target "${TARGET_NAME}" \
-configuration "${CONFIGURATION}" \
-sdk "${1}" \
ONLY_ACTIVE_ARCH=NO \
BUILD_DIR="${BUILD_DIR}" \
OBJROOT="${OBJROOT}" \
BUILD_ROOT="${BUILD_ROOT}" \
SYMROOT="${SYMROOT}" $ACTION
}
function make_fat_library {
# Will smash 2 static libs together
# make_fat_library in1 in2 out
xcrun lipo -create "${1}" "${2}" -output "${3}"
}
# 1 - Extract the platform (iphoneos/iphonesimulator) from the SDK name
if [[ "$SDK_NAME" =~ ([A-Za-z]+) ]]; then
RW_SDK_PLATFORM=${BASH_REMATCH[1]}
else
echo "Could not find platform name from SDK_NAME: $SDK_NAME"
exit 1
fi
# 2 - Extract the version from the SDK
if [[ "$SDK_NAME" =~ ([0-9]+.*$) ]]; then
RW_SDK_VERSION=${BASH_REMATCH[1]}
else
echo "Could not find sdk version from SDK_NAME: $SDK_NAME"
exit 1
fi
# 3 - Determine the other platform
if [ "$RW_SDK_PLATFORM" == "iphoneos" ]; then
RW_OTHER_PLATFORM=iphonesimulator
else
RW_OTHER_PLATFORM=iphoneos
fi
# 4 - Find the build directory
if [[ "$BUILT_PRODUCTS_DIR" =~ (.*)$RW_SDK_PLATFORM$ ]]; then
RW_OTHER_BUILT_PRODUCTS_DIR="${BASH_REMATCH[1]}${RW_OTHER_PLATFORM}"
else
echo "Could not find other platform build directory."
exit 1
fi
# Build the other platform.
build_static_library "${RW_OTHER_PLATFORM}${RW_SDK_VERSION}"
# If we're currently building for iphonesimulator, then need to rebuild
# to ensure that we get both i386 and x86_64
if [ "$RW_SDK_PLATFORM" == "iphonesimulator" ]; then
build_static_library "${SDK_NAME}"
fi
# Join the 2 static libs into 1 and push into the .framework
make_fat_library "${BUILT_PRODUCTS_DIR}/${RW_INPUT_STATIC_LIB}" \
"${RW_OTHER_BUILT_PRODUCTS_DIR}/${RW_INPUT_STATIC_LIB}" \
"${RW_FRAMEWORK_LOCATION}/Versions/A/${RW_FRAMEWORK_NAME}"
# Ensure that the framework is present in both platform's build directories
cp -a "${RW_FRAMEWORK_LOCATION}/Versions/A/${RW_FRAMEWORK_NAME}" \
"${RW_OTHER_BUILT_PRODUCTS_DIR}/${RW_FRAMEWORK_NAME}.framework/Versions/A/${RW_FRAMEWORK_NAME}"
# Copy the framework to the user's desktop
ditto "${RW_FRAMEWORK_LOCATION}" "${HOME}/Desktop/${RW_FRAMEWORK_NAME}.framework"
![](https://img.haomeiwen.com/i4249185/e325865f1227d805.png)
选择Framework,按下cmd+B编译
![](https://img.haomeiwen.com/i4249185/985e62013653e57a.png)
如果编译成功, 在桌面上将生成一个MySDK.framework
![](https://img.haomeiwen.com/i4249185/c81eee256819c5a1.png)
//查看生成的framework支持的架构
$ cd ~/Desktop/MySDK.framework
$ lipo -info MySDK
Xcode9这种方式生成的framework支持架构是这样
x86_64 arm64
![](https://img.haomeiwen.com/i4249185/f45745e391db39c0.png)
但是也是支持 iphone5s模拟器的 不知道为啥 就这样吧
Xcode9合并真机和模拟器的文件生成的framework支持架构是这样
i386 armv7 armv7s x86_64 arm64
处理器分为32位处理器,和64位处理器,
模拟器32位处理器测试需要i386架构,(iphone5,iphone5s以下的模拟器)
模拟器64位处理器测试需要x86_64架构,(iphone6以上的模拟器)
真机32位处理器需要armv7,或者armv7s架构,(iphone4真机/armv7, ipnone5,iphone5s真机/armv7s)
真机64位处理器需要arm64架构。(iphone6,iphone6p以上的真机)
网友评论