iOS 创建SDK

1.创建工程

image.png

选择iOS 下的 Framework
image.png
image.png

我创建到桌面
image.png
创建成功
image.png

2.进行相关配置

勾选自己需要支持的最低版本好,我这里选的是12.0


image.png

配置Mach-O Type
image.png
配置Build Active Architecture Only
image.png

配置Enable Bitcode
image.png
配置Build Configuration
image.png
image.png

如此SDK便创建成功了

3.接下来创建成功后需要放到项目中运行调试

在SDK中创建工程target
image.png
image.png
image.png

如此新的target就创建成功了
image.png
image.png
将Demo和SDK关联调试
image.png
image.png
image.png
这样在Demo工程中头文件就可以联想出来SDK!
image.png

接下在SDK中创建个controller试试,首先先配置下这里,这样之后新建的文件都是以YJ开头
image.png
image.png
image.png
image.png
由于用不到,我这边将这两个文件删掉了
image.png
image.png
AppDelegate.h中
//
//  AppDelegate.h
//  YjSDKDemo
//
//  Created by  on 2022/8/15.
//

#import 

@interface AppDelegate : UIResponder 

@property (strong, nonatomic) UIWindow * window;
@end

AppDelegate.m中

#import "AppDelegate.h"
#import "ViewController.h"
@interface AppDelegate ()

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    self.window.backgroundColor = [UIColor whiteColor];
    
    ViewController *RootVC = [[ViewController alloc] init];
    RootVC.view.backgroundColor = [UIColor whiteColor];
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:RootVC];
    self.window.rootViewController = nav;
    [self.window makeKeyAndVisible];
    return YES;
}
@end

此时新建的YJViewController在Demo中无法引用,要将YJViewController设置成Public外部的Demo才可以引用
image.png
image.png
image.png

然后需要在这里引用头文件
image.png
这样在Demo就可以联想了
image.png

Demo的ViewController.m中
#import "ViewController.h"
#import 
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.view.backgroundColor = [UIColor grayColor];
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    YJViewController *sdkVC = [[YJViewController alloc] init];
    [self.navigationController pushViewController:sdkVC animated:YES];
}
@end

然后配置下这里,否则会报错
image.png
image.png

然后运行一下就可以运行成功了
image.png

4.创建Aggregate合并真机和模拟器生成的.framewrok
image.png
image.png
image.png
image.png
image.png
将下面这个复制进去

#!/bin/sh
#要build的target名
TARGET_NAME=${PROJECT_NAME}
if [[ $1 ]]
then
TARGET_NAME=$1
fi
UNIVERSAL_OUTPUT_FOLDER="${SRCROOT}/${PROJECT_NAME}/"

#创建输出目录,并删除之前的framework文件
mkdir -p "${UNIVERSAL_OUTPUT_FOLDER}"
rm -rf "${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework"

#分别编译模拟器和真机的Framework
xcodebuild -target "${TARGET_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build
xcodebuild -target "${TARGET_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphonesimulator BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build

#拷贝framework到univer目录
cp -R "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework" "${UNIVERSAL_OUTPUT_FOLDER}"

lipo "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework/${TARGET_NAME}" -remove arm64 -output "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework/${TARGET_NAME}"


#合并framework,输出最终的framework到build目录
lipo -create -output "${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework/${TARGET_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework/${TARGET_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${TARGET_NAME}.framework/${TARGET_NAME}"

#删除编译之后生成的无关的配置文件
dir_path="${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework/"
for file in ls $dir_path
do
if [[ ${file} =~ ".xcconfig" ]]
then
rm -f "${dir_path}/${file}"
fi
done
#判断build文件夹是否存在,存在则删除
if [ -d "${SRCROOT}/build" ]
then
rm -rf "${SRCROOT}/build"
fi
rm -rf "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator" "${BUILD_DIR}/${CONFIGURATION}-iphoneos"
#打开合并后的文件夹
open "${UNIVERSAL_OUTPUT_FOLDER}"
image.png

按照下图指示运行
image.png
image.png

运行成功后会弹出文件夹显示生成的framework,这时就可以将生成的SDK拷贝到其他项目中使用了
image.png
注意:如果framework生成失败了,可以从项目中拷贝出对应的framework。(如果需要真机环境下的sdk,选择sdk然后真机运行;如果需要模拟器下的sdk,选择对应模拟器,然后运行),我这里选择的是真机运行
image.png
运行成功之后,右键Show in Finder
image.png

选择自己需要的,然后拷到其他项目即可
image.png

你可能感兴趣的:(iOS 创建SDK)