飞道的博客

[Swift]SDK开发

565人阅读  评论(0)

本文主要介绍使用swift语言制作framework

Demo:https://github.com/Gamin-fzym/CMSDK

一、创建工程

1.创建目录

这里我创建了一个“CMSDK”目录

2.打开Xcode新建workspace放入CMSDK目录

这里命名为“CMSDK”

3.打开CMSDK.xcworkspace新建SDK工程放入CMSDK目录

这里还是命名为“CMSDK”

将创建的SDK工程添加到CMSDK.xcworkspace

4.打开CMSDK.xcworkspace新建测试工程放入CMSDK目录

这里命名为“CMSDKTest”

这里同样要将测试工程添加到CMSDK.xcworkspace

至此工程创建完成,打开CMSDK.xcworkspace可以看到如下目录。

二、创建Target关联SDK

1.创建AggreGate文件

这里命名为“CMSDKAggregate”

2.对“CMSDKAggregate”添加dependencies

3.对“CMSDKAggregate”添加脚本

自动生成framework的脚本内容如下,可直接复制。


  
  1. #!/bin/sh
  2. #要build的target名
  3. TARGET_NAME= ${PROJECT_NAME}
  4. if [[ $1 ]]
  5. then
  6. TARGET_NAME= $1
  7. fi
  8. UNIVERSAL_OUTPUT_FOLDER= "${SRCROOT}/${PROJECT_NAME}/"
  9. #创建输出目录,并删除之前的framework文件
  10. mkdir -p "${UNIVERSAL_OUTPUT_FOLDER}"
  11. rm -rf "${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework"
  12. #分别编译模拟器和真机的Framework
  13. xcodebuild -target "${TARGET_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR= "${BUILD_DIR}" BUILD_ROOT= "${BUILD_ROOT}" clean build
  14. xcodebuild -target "${TARGET_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphonesimulator BUILD_DIR= "${BUILD_DIR}" BUILD_ROOT= "${BUILD_ROOT}" clean build
  15. #拷贝framework到univer目录
  16. cp -R "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework" "${UNIVERSAL_OUTPUT_FOLDER}"
  17. lipo "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework/${TARGET_NAME}" -remove arm64 -output "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework/${TARGET_NAME}"
  18. #合并framework,输出最终的framework到build目录
  19. 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}"
  20. #删除编译之后生成的无关的配置文件
  21. dir_path= "${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework/"
  22. for file in ls $dir_path
  23. do
  24. if [[ ${file} =~ ".xcconfig" ]]
  25. then
  26. rm -f "${dir_path}/${file}"
  27. fi
  28. done
  29. #判断build文件夹是否存在,存在则删除
  30. if [ -d "${SRCROOT}/build" ]
  31. then
  32. rm -rf "${SRCROOT}/build"
  33. fi
  34. rm -rf "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator" "${BUILD_DIR}/${CONFIGURATION}-iphoneos"
  35. #打开合并后的文件夹
  36. open "${UNIVERSAL_OUTPUT_FOLDER}"

三、配置SDK

1.配置SDK支持的最低版本

2.配置SDK支持的设备

3.配置SDK为静态库

4.配置Enable Bitcode为NO

5.Other Linker Flags中添加-ObjC

6.配置Build Active Architecture Only

7.配置Perform Single-Object Prelink为YES

8.Edit Scheme中配置Build Configuration为Release

四、开发SDK

1.开发具体的功能

注意:Swift开发时,需要将要公开出去的方法、属性、变量使用public或者open修饰。

2.通过Bundle管理资源文件

还可以通过xcassets管理,也可以自己创建一个Resources目录来管理。

a.创建Bundle文件

这里命名为“CMSDK.bundle”

b.添加文件

c.使用文件


  
  1. //
  2. //  UIImage+BundledImage.swift
  3. //  CMSDK
  4. //
  5. //  Created by hivpn on 30/1/2023.
  6. //
  7. import UIKit
  8. extension UIImage {
  9.    
  10.     static func bundledImage( named imageName: String) -> UIImage {
  11.         // 图片放在bundle的images中
  12.         var bundleName = "CMSDK.framework/CMSDK.bundle/images/\(imageName)"
  13.         if let image = UIImage(named: bundleName) {
  14.             return image
  15.         }
  16.         // 图片放在bundle中
  17.         bundleName = "CMSDK.framework/CMSDK.bundle/\(imageName)"
  18.         if let image = UIImage(named: bundleName) {
  19.             return image
  20.         }
  21.         // 图片放在资源目录
  22.         let fileName = "CMSDK.framework/\(imageName)"
  23.         if let image = UIImage(named: fileName) {
  24.             return image
  25.         }
  26.         return UIImage()
  27.     }
  28.    
  29. }

3.设置SDK想要暴露给外部访问的头文件

4.使用真机(arm64)编译生成framework文件

进入Product -> Show Build Folder in Finder,在Release-iphoneos目录下可以找到CMSDK.framework。

5.依赖第三方SDK(可选)

a.cd到SDK工程目录pod导入第三方SDK

 b.进入SDK工程目录通过CMSDK.xcworkspace打开工程

 c.调用第三方SDK

 

 d.设置Pods_CMSDK.framework的Embed类型为Do Not Embed(不要嵌入)

 e.编译成framework

在这里我们会发现,开发SDK时依赖的SVProgressHUD.framework并不会被包含到我们的CMSDK.framework中。当然,其它项目在使用我们的CMSDK.framework时需要依赖SVProgressHUD.framework。

五、测试

1.CMSDKTest配置

a.配置Enable Bitcode为NO

b.Other Linker Flags中添加-ObjC

c.Edit Scheme配置Build Configuration为Release

2.CMSDKTest导入CMSDK.framework

将framework拖入项目中,在Copy Bundle Resources中添加framework。

3.测试能否正常访问SDK

六、参考

Swift framework制作: https://github.com/wangjialePro/PlayerListSDK

iOS优雅开发SDK详细教程:https://www.jianshu.com/p/398d015b1b2e

swift framework 中加载图片:https://www.jianshu.com/p/01c5edcf5856

iOS - framework开发资源图片如何配置:https://www.jianshu.com/p/5a3307b8bc2e


转载:https://blog.csdn.net/u012881779/article/details/128801353
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场