多语言并存时期,混编成为一种必须的方式
第一种场景,App中实现混编
- 创建桥接文件
*.h
新建一个桥接文件,New File
选择Header File
创建 - 指定桥接文件
project->targets->Build Setting->All->Swift Compilter General->Objective-C-Bridging-Header
指定刚刚的新建的桥接文件 - 导入OC头文件(
*.h
)到桥接文件
如:#import "Log.h"
- 完成调用
在Swift
文件中直接调用
注:在Swift项目中第一次创建OC文件,Xcode
会自动提示创建桥接文件
第二种场景,Framework 中实现混编
- 创建
Famework
创建完成后会生成一个同名头文件*.h
- 将OC头文件(
*.h
)设置为公开头文件project->targets->Build Phases->Headers->Public
,直接拖入 - 导入OC头文件(
*.h
)到同名头文件
如:#import "Log.h"
- 完成调用
在对外的Swift
文件中直接调用
注:对外的类和方法必须public
标示才可访问
第三种场景,Pod
包中实现混编
在完成第二种场景后,添加*.podspec
文件实现 Pod
包
- 生成
*.podspec
运行命令pod spec create [name]
生成*.podspec
文件 编辑
*.podspec
在*.podspec
中将OC头文件(*.h
)设置为公开头文件
如:spec.public_header_files = "Log.h"
#完整的文件信息 Pod::Spec.new do |spec| spec.name = "OCSwiftFramework" spec.version = "0.0.1" spec.summary = "OCSwiftFramework" spec.description = <<-DESC OCSWiftFramework DESC spec.homepage = "https://www.ichochy.com" spec.license = "MIT" # spec.license = { :type => "MIT", :file => "FILE_LICENSE" } spec.author = { "MLeo" => "iChochy@qq.com" } spec.platform = :osx spec.osx.deployment_target = "10.10" spec.source = { :git => "https://github.com/iChochy/OCSwiftFramework.git", :tag => "#{spec.version}" } spec.source_files = "**/*.{h,m,swift}" spec.exclude_files = "Info.plist" spec.public_header_files = "Flog.h" spec.swift_version = "4.2" end
- 验证
*.podspec
运行命令pod lib lint
完成验证 - 完成调用
a. 运行命令pod trunk push [NAME.podspec]
完成发布
b.Podfile
中添加pod "[name]"
c. 运行命令pod install
完成pod
安装
d. 安装完成后直接调用
注:可用pod "[name]", :path => "[path]"
本地指定
GitHub:
HelloWorld:https://github.com/iChochy/HelloWorld.git
联系方式:
邮箱:iChochy@qq.com
网站:https://www.ichochy.com
GitHub: https://github.com/iChochy
源文:https://www.ichochy.com/posts/20190904/
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。