面试资料iOS 你不知道的新鲜事iOS 开发成长中心

如何创建你自己的Framework

2016-12-30  本文已影响63人  爱吃鱼的小灰
这个是适用于模拟器的,下一篇分享如何做出适用于模拟器和真机的FrameWork
什么是Framework?
下面来看如何创建你自己的FrameWork吧

1、创建一个framework:

1.png

2、创建两个工具类:

2.png

3、这两个类里的代码如下:

// 这个是JHTools1.h文件
#import <Foundation/Foundation.h>
@interface JHTools1 : NSObject
- (void) print;
@end

// JHTools1.m文件内容
#import "JHTools1.h"
@implementation JHTools1
- (void) print
{
    NSLog(@"JHTools1");
}
@end
// JHTools2.h文件
#import <Foundation/Foundation.h>
@interface JhTools2 : NSObject
- (void) myPrint;
@end

// JHTools2.m文件
#import "JhTools2.h"
#import "JHTools1.h"
@implementation JhTools2
- (void) myPrint
{
    JHTools1 * tool = [[JHTools1 alloc]init];
    [tool print];
}
@end

4、然后是这个frameworktest.h文件的内容

#import <UIKit/UIKit.h>
// 其实就是把创建的两个类的头文件放进来了
#import "JHTools1.h"
#import "JHTools2.h"
//! Project version number for frameworktest.
FOUNDATION_EXPORT double frameworktestVersionNumber;

//! Project version string for frameworktest.
FOUNDATION_EXPORT const unsigned char frameworktestVersionString[];

// In this header, you should import all the public headers of your framework using statements like #import <frameworktest/PublicHeader.h>

5、创建一个target,生成一个同时支持模拟器和真机的framework

3.png

6、选择 Cross-platform->Aggregate

4.png

7、选中target,点击➕新建 run script phase

5.png 6.png

脚本在下边哦!
8、粘贴以下脚本

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

SF_TARGET_NAME=${PROJECT_NAME}
SF_EXECUTABLE_PATH="${SF_TARGET_NAME}.framework/${SF_TARGET_NAME}"
SF_WRAPPER_NAME="${SF_TARGET_NAME}.framework"

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 [[ "$SDK_NAME" =~ ([0-9]+.*$) ]]
then
SF_SDK_VERSION=${BASH_REMATCH[1]}
else
echo "Could not find sdk version from SDK_NAME: $SDK_NAME"
exit 1
fi

if [[ "$SF_SDK_PLATFORM" = "iphoneos" ]]
then
SF_OTHER_PLATFORM=iphonesimulator
else
SF_OTHER_PLATFORM=iphoneos
fi

if [[ "$BUILT_PRODUCTS_DIR" =~ (.*)$SF_SDK_PLATFORM$ ]]
then
SF_OTHER_BUILT_PRODUCTS_DIR="${BASH_REMATCH[1]}${SF_OTHER_PLATFORM}"
else
echo "Could not find platform name from build products directory: $BUILT_PRODUCTS_DIR"
exit 1
fi

rm -rf buildProducts
mkdir buildProducts

# Build the other platform.
xcrun xcodebuild -project "${PROJECT_FILE_PATH}" -target "${TARGET_NAME}" -configuration "${CONFIGURATION}" -sdk ${SF_OTHER_PLATFORM}${SF_SDK_VERSION} BUILD_DIR="${BUILD_DIR}" OBJROOT="${OBJROOT}" BUILD_ROOT="${BUILD_ROOT}" SYMROOT="${SYMROOT}" $ACTION

# Smash the two static libraries into one fat binary and store it in the .framework
xcrun lipo -create "${BUILT_PRODUCTS_DIR}/$PRODUCT_NAME.framework/$PRODUCT_NAME" "${SF_OTHER_BUILT_PRODUCTS_DIR}/$PRODUCT_NAME.framework/$PRODUCT_NAME" -output "${PROJECT_DIR}/buildProducts/$PRODUCT_NAME"

cp -rf ${BUILT_PRODUCTS_DIR}/$PRODUCT_NAME.framework ${PROJECT_DIR}/buildProducts
mv ${PROJECT_DIR}/buildProducts/$PRODUCT_NAME ${PROJECT_DIR}/buildProducts/$PRODUCT_NAME.framework

9、选中framework 这是需要暴露的头文件

7.png

10、commod +b 编译,选中项目找到静态库的位置

8.png
如何使用呢?

1、将库导入工程

9.png

2、在ViewController.m中导入头文件代码如下:

#import "ViewController.h"
// 导入头文件
#import <frameworktest/frameworktest.h>
@interface ViewController ()

@end

@implementation ViewController
 - (void)viewDidLoad {
    [super viewDidLoad];、
// 创建类
    JhTools2 * tools = [[JhTools2 alloc]init];
// 调用方法
    [tools myPrint];
}
@end
10.png

3、解决办法首先Build Phases -> 左上角的➕->New Copy Files Phase:

11.png

接下来继续跟着步骤走啊:

12.png

4、到此结束完成了运行下吧
调用结果为:

2016-12-30 11:22:22.534 test[8283:11798681] JHTools1
上一篇 下一篇

猜你喜欢

热点阅读