iOS 創(chuàng)建SDK

1.創(chuàng)建工程

image.png

選擇iOS 下的 Framework
image.png
image.png

我創(chuàng)建到桌面
image.png
創(chuàng)建成功
image.png

2.進(jìn)行相關(guān)配置

勾選自己需要支持的最低版本好,我這里選的是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便創(chuàng)建成功了

3.接下來創(chuàng)建成功后需要放到項(xiàng)目中運(yùn)行調(diào)試

在SDK中創(chuàng)建工程target
image.png
image.png
image.png

如此新的target就創(chuàng)建成功了
image.png
image.png
將Demo和SDK關(guān)聯(lián)調(diào)試
image.png
image.png
image.png
這樣在Demo工程中頭文件就可以聯(lián)想出來SDK!
image.png

接下在SDK中創(chuàng)建個(gè)controller試試,首先先配置下這里,這樣之后新建的文件都是以YJ開頭
image.png
image.png
image.png
image.png
由于用不到,我這邊將這兩個(gè)文件刪掉了
image.png
image.png
AppDelegate.h中
//
//  AppDelegate.h
//  YjSDKDemo
//
//  Created by  on 2022/8/15.
//

#import <UIKit/UIKit.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@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

此時(shí)新建的YJViewController在Demo中無法引用,要將YJViewController設(shè)置成Public外部的Demo才可以引用
image.png
image.png
image.png

然后需要在這里引用頭文件
image.png
這樣在Demo就可以聯(lián)想了
image.png

Demo的ViewController.m中
#import "ViewController.h"
#import <YjSDK/YjSDK.h>
@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<UITouch *> *)touches withEvent:(UIEvent *)event{
    YJViewController *sdkVC = [[YJViewController alloc] init];
    [self.navigationController pushViewController:sdkVC animated:YES];
}
@end

然后配置下這里,否則會(huì)報(bào)錯(cuò)
image.png
image.png

然后運(yùn)行一下就可以運(yùn)行成功了
image.png

4.創(chuàng)建Aggregate合并真機(jī)和模擬器生成的.framewrok
image.png
image.png
image.png
image.png
image.png
將下面這個(gè)復(fù)制進(jìn)去

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

#創(chuàng)建輸出目錄,并刪除之前的framework文件
mkdir -p "${UNIVERSAL_OUTPUT_FOLDER}"
rm -rf "${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework"

#分別編譯模擬器和真機(jī)的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}"

#刪除編譯之后生成的無關(guān)的配置文件
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

按照下圖指示運(yùn)行
image.png
image.png

運(yùn)行成功后會(huì)彈出文件夾顯示生成的framework,這時(shí)就可以將生成的SDK拷貝到其他項(xiàng)目中使用了
image.png
注意:如果framework生成失敗了,可以從項(xiàng)目中拷貝出對(duì)應(yīng)的framework。(如果需要真機(jī)環(huán)境下的sdk,選擇sdk然后真機(jī)運(yùn)行;如果需要模擬器下的sdk,選擇對(duì)應(yīng)模擬器,然后運(yùn)行),我這里選擇的是真機(jī)運(yùn)行
image.png
運(yùn)行成功之后,右鍵Show in Finder
image.png

選擇自己需要的,然后拷到其他項(xiàng)目即可
image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容