私有库问题总结
2020-08-10 本文已影响0人
老急急
问题一 : 关于第三方库支持 的cpu的框架
or/App.build/Objects-normal/i386/Binary/App
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_HMDBUToBCrashTracker", referenced from:
objc-class-ref in BUAdSDK(BUByteFinder.o)
"_OBJC_CLASS_$_HMDBUToBCrashTrackerRestrict", referenced from:
objc-class-ref in BUAdSDK(BUByteFinder.o)
"_OBJC_CLASS_$_HMDBUToBAddressRange", referenced from:
objc-class-ref in BUAdSDK(BUByteFinder.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
cup的框架 : arm64 x86_64 armv7 armv7s i386
解决方案
s.xcconfig = { 'VALID_ARCHS' => 'arm64 x86_64 armv7 armv7s', }
问题二 第三方含有 静态库(.a) 和 动态库(.framework)
解决方案
///添加
s.static_framework = true
问题三 自己引进 静态库(.a) 和 动态库(.framework)
解决方案
s.vendored_libraries = 'UC_IM/Classes/Lib/*.{a}' /// 该目录下 .a
s.vendored_framework = 'UC_IM/Classes/Framework/***.framework' ///Framework目录下的***.framework动态库
验证静态库和动态库时需要的命令
--allow-warnings --skip-import-validation --use-libraries --verbose
如果依赖自己的私有库 需要的命令是
--sources='http://git.hnbangyao.com/TT/ttspecs.git,https://github.com/CocoaPods/Specs.git'
问题四 私有库使用子模块
如果你想引用一个私有库里面的一小部分功能,但是又不想把整个库导入,那么私有库的子模块 ,外部单独依赖这个子模块
子模块的定义,也还是在.podspec文件中
#子模块 —— 头文件
s.subspec 'Header' do |ss|
ss.source_files = 'UC_IM/Classes/Header/*.{h,m}'
end
使用子模块时只需在podfile中添加 pod 'UC_IM/header'
问题五 使用私有的技巧
使用私有库的分支和本地库
主工程podfile
pod 'Ucoupon',:git => 'http://git.hnbangyao.com/ios', :branch => 'dev' #直接使用远程库的branchName最新提交,而不是通过XXXRepo索引库中的tag标签
使用本地的仓库
pod 'Ucoupon',:path => '/Users/MacBook/Project/UC_IM' #直接使用本地库, '/Users/MacBook/Project/UC_IM' 是私有库在本地的目录,这种更方便于开发。
问题六 直接使用头文件 像PCH文件一样、
s.prefix_header_contents = '#import <Masonry/Masonry.h>','#import "header.h"'
问题七 公共库需要多人操作
//添加管理者
pod trunk add-owner xxx_Mediator xxxxxxxxxxx@qq.com
//删除管理者
pod trunk remove-owner xxx_Mediator xxxxxxxxxxx@qq.com
问题八 关于c文件 和c++文件
引入c文件会遇到引用 或者 Unknown type name ‘NSString’
等问题
解决方案一:
修改文件的引用类型
WeChatd959af0a856d6c4c280d776bf6061bf3.png
解决方案二:
把.c文件修改成.m文件!
问题九 私有库含有swift文件
验证私有库不能使用 --use-libraries
不能使用静态库的验证