iOS创立与运用SDK (framework)
开发准备
xcode: 版别14.2 (14C18)
创立SDK
New Project
挑选iOS -> framework
项目名称暂时就叫SDK
挑选保存途径
创立成功
新建文件
挑选Swift文件, 然后Next
输入文件名index.swift
文件创立成功
在index.swift编写一个sayHello方法, 需要用public
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
代码:
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
import Foundation
public func sayHello(_ name: String) {
print("Hello", name)
}
public class MySDK {
public init () {}
public func getMessage() -> String {
return "你好"
}
}
ContentView.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
兼并的, 例如
lipo -create "Release-iphonesimulator/SDK.framework/SDK" "Release-iphoneos/SDK.framework/SDK" -output "common/SDK.framework/SDK"
但如果模拟器的架构和真机的架构相同, 用这条指令兼并就会报错, 更推荐运用xcframework兼并
xcframework: Xcode 11.0及以上版别支撑
用法
xcodebuild -create-xcframework -framework <path> [-framework <path>...] -output <path>
分别生成模拟器和真机SDK
首要进入到SDK项目根目录(SDK.xcodeproj同级的目录)
生成模拟器SDK, 履行
xcodebuild -scheme SDK -sdk iphonesimulator clean build
生成真机SDK, 履行
xcodebuild -scheme SDK -sdk iphoneos
现在模拟器和真机SDK都有了, 指令行进入到Products目录, 开端兼并
履行:
xcodebuild -create-xcframework -framework ./Release-iphonesimulator/SDK.framework -framework ./Release-iphoneos/SDK.framework -output ./SDK.xcframework
就会在Products目录里边生成SDK.xcframework, 这个便是模拟器和真机都能够运用的SDK
运用方法也很简单, 和运用framework一样, 将SDK.xcframework文件夹拖进App项目即可.