美文网首页
制作生成framework步骤方式1

制作生成framework步骤方式1

作者: 温水煮青蛙a | 来源:发表于2018-04-11 15:33 被阅读0次

第1部分 创建一个静态库名字为 MySDK

屏幕快照 2018-04-09 上午9.47.55.png 屏幕快照 2018-04-09 上午9.48.36.png

删除没用的.m文件


屏幕快照 2018-04-09 上午9.48.52.png

删除.h中内容 添加 #import<UIkit/UIkit.h>


屏幕快照 2018-04-09 上午9.49.20.png

导入uikit 框架


屏幕快照 2018-04-09 上午9.49.43.png

选中Xcode -> Build Phases界面,选择Editor\Add Build Phase\Add Copy Headers Build Phase


屏幕快照 2018-04-09 上午9.50.03.png

把MySDK.h从项目导航栏中拖到中央面板的Copy Headers下的Public部分。这一步确保任何使用你的库的用户均可以获取该头文件


屏幕快照 2018-04-09 上午9.50.22.png

创建一个UI页面并引用.h到 Copy Headers下的Public


屏幕快照 2018-04-10 上午10.13.52.png

配置Build Settings
然后选择MySDK静态库目标,选择Build Setting栏,然后搜索public header,双击Public Headers Folder Path,在弹出视图中键入如图所示内容:
输入 include/$(PROJECT_NAME)


屏幕快照 2018-04-10 下午2.28.34.png 屏幕快照 2018-04-10 上午10.15.42.png 屏幕快照 2018-04-10 上午10.15.58.png 屏幕快照 2018-04-10 上午10.16.19.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项目


屏幕快照 2018-04-10 下午2.41.37.png 屏幕快照 2018-04-10 上午10.21.02.png 屏幕快照 2018-04-10 上午10.21.09.png 屏幕快照 2018-04-10 上午10.21.14.png 屏幕快照 2018-04-10 上午10.21.23.png 屏幕快照 2018-04-10 上午10.21.27.png 屏幕快照 2018-04-10 上午10.21.31.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来添加一个新的脚本。


屏幕快照 2018-04-10 下午3.24.48.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"
屏幕快照 2018-04-10 下午3.06.27.png
现在,选择MySDK静态库,然后选择iOS Device构建目标,然后使用cmd+B构建。

创建Aggregate

两种方式一样的

方式1


屏幕快照 2018-04-10 下午1.23.04.png

方式2


屏幕快照 2018-04-10 下午1.23.13.png

命名为Framework

屏幕快照 2018-04-10 下午1.23.45.png 屏幕快照 2018-04-10 下午1.23.49.png 屏幕快照 2018-04-10 下午1.23.58.png

下边的操作:这个目标的主要编译部分是多平台编译,你将使用一个脚本来做到这一点。和你之前做的一样,在Framework目标下,选择Build Phases栏,点击Editor/Add Build Phase/Add Run Script Build Phase,创建一个新的Run Script Build Phase。


屏幕快照 2018-04-10 下午3.20.07.png 屏幕快照 2018-04-10 下午3.22.49.png 屏幕快照 2018-04-10 下午3.23.03.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"
屏幕快照 2018-04-10 下午3.23.39.png

选择Framework,按下cmd+B编译

屏幕快照 2018-04-10 下午3.37.45.png
如果编译成功, 在桌面上将生成一个MySDK.framework 屏幕快照 2018-04-10 下午3.40.21.png
//查看生成的framework支持的架构
$ cd ~/Desktop/MySDK.framework
$ lipo -info MySDK
Xcode9这种方式生成的framework支持架构是这样

x86_64 arm64


屏幕快照 2018-04-10 下午3.46.01.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以上的真机)

相关文章

网友评论

      本文标题:制作生成framework步骤方式1

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