前言
最近在研究
Telegram
代码,Telegram的代码是使用Bazel
管理的,但是平常的项目都是使用Pod
管理,于是将Bazel转换为pod依赖,过程中遇到很多问题,一一记录
问题一:项目库依赖项目写法
1.1 本地项目依赖本地项目,使用s.dependency "xxx"
的语法
demo如下:本地项目LibA
依赖本地项目LibB
Pod::Spec.new do |s|
s.name = 'LibA'
# ... 其他配置
# 依赖测其他项目的名称
s.dependency "LibB"
end
被依赖的项目配置
Pod::Spec.new do |s|
s.name = 'LibB'
# ... 其他配置
end
Podfile
里的配置
platform :ios, '12.0'
use_frameworks!
target 'StudyAsynDisplay' do
## Pods for StudyAsynDisplay
pod 'LibA', :path => 'xxx/xxxx/LibA'
pod 'LibB', :path => 'xxx/xxxx/LibB'
end
1.2 本地项目依赖其他远程项目,使用s.dependency "xxx"
的语法
demo如下:本地项目LibC
依赖远程项目LibD
Pod::Spec.new do |s|
s.name = 'LibC'
# ... 其他配置
# 依赖测其他项目的名称
s.dependency "LibD"
end
Podfile
里的配置
platform :ios, '12.0'
use_frameworks!
target 'StudyAsynDisplay' do
## Pods for StudyAsynDisplay
pod 'LibC', :path => 'xxx/xxxx/LibC'
pod 'LibD'
end
问题二:pod库引入xxx.bundle
、xxx.xcassets
资源文件
Pod::Spec.new do |s|
s.name = 'LibA'
# ... 其他配置
# 引入资源文件
s.resource_bundle = {'XXX' => ['XXX/XXX.bundle']}
# 也可以使用下面这种方式
# s.resources = ['xxx/**/*.*', "yyyy/**/*.*", "ccc/*.xcassets"]
end
Multiple commands produce '…/xxx.app/Assets.car’问题
私有库使用Images.xcassets会出现Assets.car生成多次导致冲突的问题.
在Podfile第一行添加install! 'cocoapods', :disable_input_output_paths => true
#### 问题三:pod库引入`xxx.a`,`xxx.framework`静态库
Pod::Spec.new do |s|
s.name = 'LibA'
# ... 其他配置
s.ios.vendored_libraries = 'xxxx/xxxx.a'
s.static_framework = true
# s.ios.vendored_frameworks = 'xxx/xxx.framework'
end
#### 问题四:pod库引入宏设置
Pod::Spec.new do |s|
s.name = 'LibA'
# ... 其他配置
s.pod_target_xcconfig = {
'GCC_PREPROCESSOR_DEFINITIONS' => 'MyDefineA=1 MyDefineB=1'
}
end
#### 问题五,当引入了静态库后,会报编译不通过,将`Podfile`里的`use_frameworks!`改为`use_frameworks! :linkage => :static`
platform :ios, '12.0'
use_frameworks!
use_frameworks! :linkage => :static
target 'StudyAsynDisplay' do
Pods for StudyAsynDisplay
end
#### 问题六,`pod install`时报
Specs satisfying the xxxx (= x.x), xxxx
dependency were found, but they required a higher minimum deployment target.
将`platform :ios, '12.0'`改高些比如`platform :ios, '13.0'`,改完后`pod install`,然后再改回来成`platform :ios, '12.0'`,之后再`pod install`