Xcode使用Cocoa Touch Framework新建Framework

来源:互联网 发布:外观设计用什么软件 编辑:程序博客网 时间:2024/06/14 23:51

网上有很多教程使用Xcode新建Framework的教程,不过使用的是Cocoa Touch Static Library,Xcode 7有一个新的功能,通过Cocoa Touch Framework。能直接生成Framework。


Step 1

打开Xcode,新建工程,选择Cocoa Touch Framework,命名为xibFramework.


step 2

1)在framework中添加类,资源等文件。

如上图所示,在Resource中添加xib,在xibFramework.xvassets添加framework中所需要使用到的图片。

2)在xibFramework.h中导入#import<xibFramework/CustomView.h>

xibFramework是新建framework时,自动生成的,把所有需要公开的类的头文件包含在这个.h文件中,在使用framework时,只需要导入这个.h文件即可

3)选中xibFrmework|Build Phases

Headers中将所有需要公开的头文件拖入Public中

Run Script中添加ios-build-framework-script.sh脚本。


Build Phases中没有Headers和Run Script,在右上角的+处将他们加入到Bulid Phases中

shell脚本的路径要写对,否则编译的时候会找不到,demo中shell脚本放在xibFramework/xibFramework下

4)ios-build-framework-script.sh脚本解释

set -e

set +u

# Avoid recursively calling this script.

if [[ $SF_MASTER_SCRIPT_RUNNING ]]

then

exit 0

fi

set -u

export SF_MASTER_SCRIPT_RUNNING=1



# Constants

SF_TARGET_NAME=${PROJECT_NAME}

UNIVERSAL_OUTPUTFOLDER=`pwd`/${CONFIGURATION}-universal


# Take build target

if [[ "$SDK_NAME" =~ ([A-Za-z]+) ]]

then

SF_SDK_PLATFORM=${BASH_REMATCH[1]}

else

echo "Could not find platform name from SDK_NAME: $SDK_NAME"

exit 1

fi


if [[ "$SF_SDK_PLATFORM" ="iphoneos" ]]

then

echo "Please choose iPhone simulator as the build target."

exit 1

fi


IPHONE_DEVICE_BUILD_DIR=${BUILD_DIR}/${CONFIGURATION}-iphoneos


# Build the other (non-simulator) platform

xcodebuild -project "${PROJECT_FILE_PATH}" -target"${TARGET_NAME}" -configuration"${CONFIGURATION}" -sdk iphoneos BUILD_DIR="${BUILD_DIR}" OBJROOT="${OBJROOT}" BUILD_ROOT="${BUILD_ROOT}" CONFIGURATION_BUILD_DIR="${IPHONE_DEVICE_BUILD_DIR}/arm64" SYMROOT="${SYMROOT}" ARCHS='arm64' VALID_ARCHS='arm64' $ACTION


xcodebuild -project "${PROJECT_FILE_PATH}" -target"${TARGET_NAME}" -configuration"${CONFIGURATION}" -sdk iphoneos BUILD_DIR="${BUILD_DIR}" OBJROOT="${OBJROOT}" BUILD_ROOT="${BUILD_ROOT}"  CONFIGURATION_BUILD_DIR="${IPHONE_DEVICE_BUILD_DIR}/armv7" SYMROOT="${SYMROOT}" ARCHS='armv7 armv7s' VALID_ARCHS='armv7 armv7s' $ACTION


# Copy the framework structure to the universal folder (clean it first)

rm -rf "${UNIVERSAL_OUTPUTFOLDER}"

mkdir -p "${UNIVERSAL_OUTPUTFOLDER}"

cp -R "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework""${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework"


# Smash them together to combine all architectures

lipo -create  "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/${PROJECT_NAME}""${BUILD_DIR}/${CONFIGURATION}-iphoneos/arm64/${PROJECT_NAME}.framework/${PROJECT_NAME}""${BUILD_DIR}/${CONFIGURATION}-iphoneos/armv7/${PROJECT_NAME}.framework/${PROJECT_NAME}" -output"${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework/${PROJECT_NAME}"

这个脚本是生成支持arm64 armv7 armv7s 和i386 x86_64(i386和x86_64并为用xcodebuild命令来生成,当你选择在模拟器下编译时,会生成支持这两种架构的framework)架构的framework。该脚本只允许用户在模拟器下编译,否则会报错,生成后的framework存放在工程目录的Release-universal或者Debug-universal目录下

这一步,就已经生成了framework,下面对framework使用


Step 3

1)新建工程,选择Single View Application,命名为UseFrmeworkDemo

2)将xibFramework.framework拖入UseFrmeworkDemo中,并使用framework

选择UseFrameworkDemo|General,在Embedded Binaries和Linked Frameworks and Libraries中加入xibFramework,在拖入xibFramework时,Linked Frameworks and Libraries中就会加入这个framework.

2)command+R运行工程,可以看到xibFramework的控件在UseFrameworkDemo中能正常使用了


xibFramework 下载地址

UseFrameworkDemo 下载地址

2 0
原创粉丝点击