IOS SDK制作

手机游戏开发者 2024-9-7 19:47:40 70 0 来自 中国
IOS开辟有些时间通过制作SDK举行组件化, 封装化开辟很方便, 那么怎么制作一个可用的SDK呢?  直接上干货
当前情况:
MacOS 12.3.1
Xcode13.4.1
Intel Core i9
xcode → File → New → Project

1.png
Frame & Library → Framework → Next

2.png
Product Name 中填写SDK名字 → Next  之后选个本身能找的到的地方生存工程


创建好了终极是这个样子

先修改Deployment info摆设信息, 这个要根据本身的目的工程设置。例如 我加入的目的工程支持到 ios10.0, 不支持iPad, Mac, 那么我创建的SDK也要对应修改


图片中测试项目是 IOS口试题(计划模式干系) --- 工厂计划模式一个demo , 品评区有对应Demo地点,
实在本身任意一个项目加进去即可, 留意下版本号对应即可
6.png 接下来 Command + N创建一个类便于背面调用


例如我这边创建一个SpriteFactory类, 范例是NSObject, 并写入一个实例方法factoryProductSprite
10.png 建好之后, 在公共文件ProductSprite.h(第一个, 你本身建的谁人名字), 引入头文件. 留意下引入文件格式即可
11.png 接下来我们须要修改一下Build Settings中部门内容

  • Targets → Build Settings → Mach-O Type 为Static Library静态库 (动态库有点区别, 方法在最下面)
12.png

  • Targets → Build Settings → Build Active Architecture Only 仅构建生动体系为No


  • Build Settings → Enable Bitcode 启用位代码为 No


  • Build Phases → Headers 测试头文件须要移动到Public

    15.png


  • Edit Scheme → Run → Info → Build Configuration 为 Release

18.png 接下来我们创建个组群, 管理下SDK

  • Targets 点击+ → Other → Aggregate 老版本位置不一样的, 须要留意下


建完之后如下, 多了一个这个

21.png 添加framework的脚本文件, Build Phases 点击 + 选择New Run Script Phase


之后会如许

把这个复制进去
#!/bin/sh#要build的target名TARGET_NAME=${PROJECT_NAME}if [[ $1 ]]thenTARGET_NAME=$1fiUNIVERSAL_OUTPUT_FOLDER="${SRCROOT}/${PROJECT_NAME}/"#创建输出目次,并删除之前的framework文件mkdir -p "${UNIVERSAL_OUTPUT_FOLDER}"rm -rf "${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework"#分别编译模拟器和真机的Frameworkxcodebuild -target "${TARGET_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean buildxcodebuild -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_pathdoif [[ ${file} =~ ".xcconfig" ]]thenrm -f "${dir_path}/${file}"fidone#判定build文件夹是否存在,存在则删除if [ -d "${SRCROOT}/build" ]thenrm -rf "${SRCROOT}/build"firm -rf "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator" "${BUILD_DIR}/${CONFIGURATION}-iphoneos"#打开归并后的文件夹open "${UNIVERSAL_OUTPUT_FOLDER}"上方选择新加的Targets 选择Any iOS Device运行


由于我们刚才已经写脚本了, 以是会主动天生模拟器真机的SDK, 而且主动弹开, 如下

其他项目假如想使用, 把.framework拖进去或者复制项目再add进去即可
加入之后如下, 留意下General中Frameworks, Libraries, and Embedded Content这快,  假如没有(老版本), 须要手动加进去.framework


在符合地方调用, 引用头文件格式 #import "roductSprite/ProductSprite.h", 下面写进去对应方法

29.png
运行可看到



动态库假如正常按上面方式处置处罚会报错, 例如
Targets → Build Settings → Mach-O Type 为Dynamic Library
31.png 运行时间会如许Crash

目的文件:  Build Phases点击+, 选择New Copy File Phase

33.png
点击+, 选择对应动态库加进去, Destination 留意选择Frameworks


修改Targets → Build Settings → Build Options → Validate Workspace为Yes



  • Validate Workspace - Yes:  那么在构建版本的过程中将对工作区设置举行验证查抄。
设置完之后再运行, 正常打印

36.png
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-12-4 16:28, Processed in 0.170983 second(s), 36 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表