假如让类和方法让外界可调用,必要用权限修饰,使用public,假如要提供OC调用,要使用@objc修饰
swift 不像OC可以袒露接口,在swift中 要想给别的工程调用接口,记得在类,方法或属性前加public。
swift权限控制符:
open 权限最大,可以被外界模块访问,继承重写
public 可以被外界工程访问
internal 默认文件创建时的权限,可以在本工程的访问
private 只可以在创建的文件内访问
5.1.framework中的资源文件的使用
1).图片资源
extension UIImage { class func ex_image(named name: String) -> UIImage { //图片放到 framework 的 bundle 中可使用 let bundleName = "TestSDK.framework/ImageBundle.bundle/\(name)" if let image = UIImage(named: bundleName) { return image } return UIImage() }}2).文件资源
文件资源也可以放在bundle中,同样的调用方式
var filterData: [FilterModel] = load("filters.json") func load<T: Decodable>(_ fileName: String, as type: T.Type = T.self) -> T { let data: Data let mainBundle = Bundle.main.path(forResource: "TestSDK.framework/ImageBundle", ofType: "bundle") let fileBundle = Bundle.init(path: mainBundle ?? "") let path = fileBundle?.path(forResource: fileName, ofType: nil) ?? "" let file = URL(fileURLWithPath: path) do { data = try Data(contentsOf: file) } catch { fatalError("无法初始化\(fileName)文件") } do { let decoder = JSONDecoder() return try decoder.decode(T.self, from: data) } catch { fatalError("无法分析\(fileName)文件") }}6.添加天生终极必要发布的framework的脚本
阐明:关于framework编译和归并的脚本,我还是比力喜欢以下的方式,简朴粗暴。
像新建一个shell脚本的target我也试过,framework中没有依赖三方还行,像我这种依赖三方库的,shell运行不通过,三方库会报错
# 真机和模拟器framework归并脚本# 选中framework,分别在真机和模拟器编译乐成即可if [ "${ACTION}" = "build" ]then# 界说framework名称(更换为本身界说的名字即可)SDK_NAME=TestSDK# 输出路径INSTALL_DIR=${SRCROOT}/Products/${SDK_NAME}.framework# 真机路径DEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${SDK_NAME}.framework# 模拟器路径SIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${SDK_NAME}.framework# 假如输出路径已存在,则删除if [ -d "${INSTALL_DIR}" ]thenrm -rf "${INSTALL_DIR}"fi# 创建输出路径mkdir -p "${INSTALL_DIR}"# 假如真机framework和模拟器framework都存在if [ -d "${DEVICE_DIR}" ] && [ -d "${SIMULATOR_DIR}" ]then# 拷贝真机framework到输出路径cp -r "${DEVICE_DIR}/" "${INSTALL_DIR}/"# 拷贝模拟器framework中的modules到输出路径cp -r "${SIMULATOR_DIR}/Modules/${SDK_NAME}.swiftmodule/" "${INSTALL_DIR}/Modules/${SDK_NAME}.swiftmodule"# 归并真机framework和模拟器frameworklipo -create "${DEVICE_DIR}/${SDK_NAME}" "${SIMULATOR_DIR}/${SDK_NAME}" -output "${INSTALL_DIR}/${SDK_NAME}"fifi7.天生framework
选中TestSDK,分别在真机和模拟器编译一次即可,然后在项目的根目次中,Products文件夹里会有终极的framework