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项目即可.

相关推荐
恋猫de小郭9 小时前
Flutter Widget Preview 功能已合并到 master,提前在体验毛坯的预览支持
android·flutter·ios
点金石游戏出海14 小时前
每周资讯 | Krafton斥资750亿日元收购日本动画公司ADK;《崩坏:星穹铁道》新版本首日登顶iOS畅销榜
游戏·ios·业界资讯·apple·崩坏星穹铁道
旷世奇才李先生16 小时前
Swift 安装使用教程
开发语言·ios·swift
90后的晨仔17 小时前
Xcode16报错: SDK does not contain 'libarclite' at the path '/Applicati
ios
finger2448017 小时前
谈一谈iOS线程管理
ios·objective-c
Digitally17 小时前
如何将大型视频文件从 iPhone 传输到 PC
ios·iphone
梅名智18 小时前
IOS 蓝牙连接
macos·ios·cocoa
美狐美颜sdk1 天前
跨平台直播美颜SDK集成实录:Android/iOS如何适配贴纸功能
android·人工智能·ios·架构·音视频·美颜sdk·第三方美颜sdk
恋猫de小郭1 天前
Meta 宣布加入 Kotlin 基金会,将为 Kotlin 和 Android 生态提供全新支持
android·开发语言·ios·kotlin
泓博1 天前
Objective-c把字符解析成字典
开发语言·ios·objective-c