iOS开发——制作Framework
来源:互联网 发布:免费视频聊天的软件 编辑:程序博客网 时间:2024/05/22 00:41
http://www.cocoachina.com/ios/20150127/11022.html
创建一个静态库工程
点击File\New\Project,选择iOS\Framework and Library\Cocoa Touch Static Library新建一个静态库工程.
Xcode的静态库工程不会自动连接到UIKit,在工程导航栏中选择工程名,然后在中央面板中选择Targets RWUIControls ,添加UIKit.framework
添加头文件 Editor\Add Build Phase\Add Headers Build Phase (点击下方Build Phases界面的白色区域来获取Xcode的应用焦点)
RWUIControls.h拖到public下.
在项目导航栏中点击项目名,然后选择RWUIControls静态库目标,选择Build Setting栏,将public header设置为 include/$(PROJECT_NAME)
改变设置:
Dead Code Stripping设置为NO
Strip Debug Symbol During Copy 全部设置为NO
Strip Style设置为Non-Global Symbols
一旦成功,工程导航栏中Product目录下libRWUIControls.a文件将从红色变为黑色,表明现在该文件已经存在了。
创建一个依赖开发(Dependent Development)工程
使用File\New\Project创建一个新的工程,选择iOS\Application\Single View Application,将新工程命名为UIControlDevApp,将类前缀命名为RW,选择该工程只支持iPhone,最后将项目保存到和之前的RWUIControls相同的目录下。
添加RWUIControls依赖库,将RWUIControls.xcodeproj从Finder中拖到Xcode中UIControlDevApp组下。
在项目导航栏中选择UIControlDevApp。
导航到UIControlDevApp目标下Build Phases面板下。
打开Target Dependencies面板,点击+按钮调出选择器。
找到RWUIControls静态库,选择并点击Add。这一步表明当构建dev应用时,Xcode会检查是否静态库需要重新构建。
为了连接到静态库本身,展开Link Binary With Libraries面板,再次点击+按钮,从Workspace组中选择libRWUIControls.a然后点击Add。
这一步确保Xcode可以连接到静态库,就像连接到系统framework(例如UIKit)一样。
创建一个Framework
现在你需要在静态库构建过程中添加脚本来创建这种结构,在项目导航栏中选择RWUIControls,然后选择RWUIControls静态库目标,选择Build Phases栏,然后选择Editor/Add Build Phase/Add Run Script Build Phase来添加一个新的脚本。双击面板标题栏Run Script,重命名为Build Framework。
在脚本文本框中粘贴下面的Bash脚本代码
set -e
export FRAMEWORK_LOCN=
"${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.framework"
# Create the path to the real Headers die
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"
在这次构建目录中你可以看到RWUIControls.framework,可以确定一下这里展示了正确的目录结构:
不过你会注意到这里并没有一个静态lib文件
在项目导航栏中选择RWUIControls,然后点击已经存在的目标下面的Add Target按钮。
找到iOS/Other/Aggregate,点击Next,将目标命名为Framework。
在Framework目标下,选择Build Phases栏,点击Editor/Add Build Phase/Add Run Script Build Phase,创建一个新的Run Script Build Phase。
双击Run Script,重命名脚本的名字。这次命名为MultiPlatform Build。
在脚本文本框中粘贴下面的Bash脚本代码:
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"
检查一下我们的多平台编译真的成功了,启动终端
cd ~/Desktop/RWUIControls.framework
lipo -info RWUIControls
- iOS开发——制作Framework
- Framework制作 - iOS开发
- iOS开发之framework制作
- iOS开发之制作framework
- iOS开发之制作framework
- iOS开发之静态库(四)—— 静态框架framework制作
- iPhone开发:iOS Framework制作研究
- iOS开发 xcode6制作framework静态库
- iOS开发-制作Framework(最新)
- ios开发:Xcode8制作framework及使用
- ios开发:Xcode8制作framework及使用
- iOS开发:iOS Xcode8制作framework及使用
- iOS Framework 制作教程
- iOS framework 制作教程
- iOS Framework 制作教程
- iOS framework 制作教程
- iOS framework 制作教程
- iOS framework 制作教程
- oracle帮助文档——Oracle Database Security Guide
- 自己实现atoi
- Android的activity启动模式官方中文版
- C++学习笔记四之使用new来创建动态数组
- IDEA 在同一目录创建多个项目
- iOS开发——制作Framework
- oracle帮助文档——DB Reference
- Java基础教程2:类和对象
- 【bzoj3437】小P的牧场
- 【剑指offer】面试题 15:二进制中 1 的个数
- 7月6日云栖精选夜读:浅谈应用性能测试 PTS
- PayPal支付功能实现
- Linux 下开启FTP服务
- android 6.0 关于定位的那些坑