iOS创建与使用SDK (framework)

iOS创建与使用SDK (framework)

开发准备

xcode: 版本14.2 (14C18)

创建SDK

New Project

选择iOS -> framework

项目名称暂且就叫SDK

选择保存路径

创建成功

新建文件

选择Swift文件, 然后Next

输入文件名index.swift

文件创建成功

在index.swift编写一个sayHello方法, 需要用public

swift 复制代码
import Foundation


public func sayHello(_ name: String) {
    print("Hello", name)
}

build项目

command + b 或者点击build按钮

build成功后就会生成SDK

查看build后生成的SDK

SDK.framework目录就是我们需要的SDK, 等会使用SDK的时候会用到这个文件夹

可以看到SDK.framework的前面一个目录是Debug-iphonesimulator, 这说明SDK只能用于模拟器, 不能用于真机, 先暂且不管这些, 跑通整个流程了后面再讲怎么合并真机与模拟器SDK

到此SDK创建成功, 接下来使用SDK

使用SDK

创建一个iOS App项目来使用SDK

继续New Project

选择iOS -> App

项目名称就叫App

选择保存路径

App创建成功

点击build, 就会启动iPhone 14 Pro模拟器

在App中导入SDK

找到SDK build后生成的SDK.framework文件夹

按住SDK.framework文件夹, 拖拽到xcode的App项目里面的App文件夹, 如下图位置, 然后松开

会弹出一个框, 勾选Copy items if needed, 然后点击Finish

然后可以看到目录里面多了一个SDK.framework

在App配置里面也可以看到成功引入了SDK

将Embed由Do Not Embed改为Embed & Sign

再次点击build, 提示Build Succeeded, 一切正常

调用SDK的方法

先导入SDK, 然后直接调用即可, 控制台成功输出Hello

代码:

swift 复制代码
import SwiftUI
import SDK

struct ContentView: View {
    
    let msg: () = sayHello("ZP")
    
    var body: some View {
        VStack {
            Image(systemName: "globe")
                .imageScale(.large)
                .foregroundColor(.accentColor)
            Text("Hello, world!")
        }
        .padding()
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

整个创建与使用SDK的流程结束了

但是还有一个问题, 在开发SDK的时候每次改动SDK的代码, 就要重新build一次并且在App中重新导入一次, 很麻烦, 所以在开发中可以直接导入SDK源码, 这样的话修改SDK代码后, build App的时候会自动把SDK build一次并且使用最新的SDK代码

将SDK源码添加到App, 方便开发

先删除现在已经导入的SDK

选第一个

重新build, 报错说明删除成功

在finder中找到SDK项目

然后在xcode中关闭SDK项目, 一定要在xcode中关闭SDK项目才能做下一步操作!

在finder中选中SDK.xcodeproj

将SDK.xcodeproj拖进App项目

在App项目中双击SDK.xcodeproj, 如果能看到这个界面就说明成功了

但还差一步, 按如下操作把SDK加入App中

选择SDK.framework, 点击Add

成功

重新build, 没有报错

修改SDK代码

在App中使用

重新build就可以看到效果了, 屏幕中多了"你好"两个字, 这两个字来自SDK函数的返回值

代码:

index.swift

swift 复制代码
import Foundation

public func sayHello(_ name: String) {
    print("Hello", name)
}

public class MySDK {
    public init () {}
    public func getMessage() -> String {
        return "你好"
    }
}

ContentView.swift

swift 复制代码
import SwiftUI
import SDK

let sdk = MySDK()

struct ContentView: View {
    
    let msg: () = sayHello("ZP")
    
    var body: some View {
        VStack {
            Image(systemName: "globe")
                .imageScale(.large)
                .foregroundColor(.accentColor)
            Text("Hello, world!")
            Text(sdk.getMessage())
        }
        .padding()
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

将SDK由debug改为release

打开SDK build后的目录, 现在是debug模式

将其改为release, 操作如下:

改为release, 然后关闭就行

重新build一次, 现在就是release了

合并真机与模拟器SDK

网上很多教程都是用的lipo -create合并的, 例如

shell 复制代码
lipo -create "Release-iphonesimulator/SDK.framework/SDK" "Release-iphoneos/SDK.framework/SDK" -output "common/SDK.framework/SDK"

但如果模拟器的架构和真机的架构相同, 用这条命令合并就会报错, 更推荐使用xcframework合并

xcframework: Xcode 11.0及以上版本支持

用法

shell 复制代码
xcodebuild -create-xcframework -framework <path> [-framework <path>...] -output <path>

分别生成模拟器和真机SDK

首先进入到SDK项目根目录(SDK.xcodeproj同级的目录)

生成模拟器SDK, 执行

shell 复制代码
xcodebuild -scheme SDK -sdk iphonesimulator clean build

生成真机SDK, 执行

shell 复制代码
xcodebuild -scheme SDK -sdk iphoneos

现在模拟器和真机SDK都有了, 命令行进入到Products目录, 开始合并

执行:

shell 复制代码
xcodebuild -create-xcframework -framework ./Release-iphonesimulator/SDK.framework -framework ./Release-iphoneos/SDK.framework -output ./SDK.xcframework

就会在Products目录里面生成SDK.xcframework, 这个就是模拟器和真机都可以使用的SDK

使用方法也很简单, 和使用framework一样, 将SDK.xcframework文件夹拖进App项目即可.

相关推荐
人月神话-Lee4 小时前
【图像处理】图像直方图——从“频率分布“到“智能决策“
图像处理·人工智能·ios·ai编程·swift
会Tk矩阵群控的小木4 小时前
imessage虚拟机群发系统搭建:基于UTM+Frida的完整实现与海外社媒集成
macos·ios·objective-c·cocoa·开源软件·个人开发·tk矩阵
灰鲸广告联盟6 小时前
新老用户广告价值不同?差异化策略如何实现收益最大化
android·开发语言·flutter·ios
壹方秘境7 小时前
iOS抓包新选择:ApiCatcher同时支持捕获HTTP(s)和WebSocket(s)协议数据包
websocket·ios·api
2501_915918418 小时前
Python如何抓取HTTPS请求包的完整教程与代码示例
android·ios·小程序·https·uni-app·iphone·webview
linweidong8 小时前
iOS 开发面试 50 个高频易混淆知识点详解
ios·设计模式·面试·cocoa·uikit·uiview·uistackview
MonkeyKing9 小时前
iOS 屏幕旋转与多窗口适配原理:横竖屏控制、SizeClasses、iPad分屏终极适配
ios
MonkeyKing9 小时前
iOS 事件传递与响应链全解:hitTest、pointInside 底层流程
ios
人月神话Lee9 小时前
【图像处理】图像直方图——从"频率分布"到"智能决策"
ios·ai编程·图像识别
2501_916008899 小时前
全面解析常用Web前端开发工具:编辑器、调试工具、性能分析器与框架
android·前端·ios·小程序·uni-app·编辑器·iphone