cocoapods-packager编译动态库失败的解决
由于近期在研究私有库打包,发现此问题。
起因
一开始运行此段代码pod package *******.podspec --force --no-mangle
毫无问题。
然后就开始尝试生成一个动态库,于是加上了--dynamic
,此时出现了下面一大串代码。
CocoaPods : 1.9.3
Ruby : ruby 2.6.3p62 (2019-04-16 revision 67580) [universal.x86_64-darwin19]
RubyGems : 3.0.3
Host : Mac OS X 10.15 (19A582a)
Xcode : 11.3.1 (11C504)
Git : git version 2.21.1 (Apple Git-122.3)
Ruby lib dir : /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib
Repositories : ARSpecRepo - git - git@gitlab.allride-ai.cn:infra/ios-common.git @ b1f3805d2a766c9509bde74f4574270917dce669
cocoa-local - file system
master - git - https://github.com/CocoaPods/Specs.git @ 163b8a8c3e6980b42c623bc76f6b136f8c68d19c
trunk - CDN - https://cdn.cocoapods.org/
cocoapods-art : 1.0.4
cocoapods-deintegrate : 1.0.4
cocoapods-packager : 1.5.0
cocoapods-plugins : 1.0.0
cocoapods-search : 1.0.0
cocoapods-stats : 1.1.0
cocoapods-trunk : 1.4.1
cocoapods-try : 1.1.0
ArgumentError - wrong number of arguments (given 3, expected 7..10)
/usr/local/lib/ruby/gems/2.6.0/gems/cocoapods-1.9.3/lib/cocoapods/target/pod_target.rb:137:in `initialize'
/usr/local/lib/ruby/gems/2.6.0/gems/cocoapods-packager-1.5.0/lib/cocoapods-packager/pod_utils.rb:161:in `new'
/usr/local/lib/ruby/gems/2.6.0/gems/cocoapods-packager-1.5.0/lib/cocoapods-packager/pod_utils.rb:161:in `build_dynamic_target'
/usr/local/lib/ruby/gems/2.6.0/gems/cocoapods-packager-1.5.0/lib/cocoapods-packager/pod_utils.rb:131:in `install_dynamic_pod'
/usr/local/lib/ruby/gems/2.6.0/gems/cocoapods-packager-1.5.0/lib/pod/command/package.rb:83:in `build_in_sandbox'
/usr/local/lib/ruby/gems/2.6.0/gems/cocoapods-packager-1.5.0/lib/pod/command/package.rb:100:in `block in build_package'
/usr/local/lib/ruby/gems/2.6.0/gems/cocoapods-packager-1.5.0/lib/pod/command/package.rb:99:in `each'
/usr/local/lib/ruby/gems/2.6.0/gems/cocoapods-packager-1.5.0/lib/pod/command/package.rb:99:in `build_package'
/usr/local/lib/ruby/gems/2.6.0/gems/cocoapods-packager-1.5.0/lib/pod/command/package.rb:66:in `run'
/usr/local/lib/ruby/gems/2.6.0/gems/claide-1.0.3/lib/claide/command.rb:334:in `run'
/usr/local/lib/ruby/gems/2.6.0/gems/cocoapods-1.9.3/lib/cocoapods/command.rb:52:in `run'
/usr/local/lib/ruby/gems/2.6.0/gems/cocoapods-1.9.3/bin/pod:55:in `<top (required)>'
/usr/local/lib/ruby/gems/2.6.0/bin/pod:24:in `load'
/usr/local/lib/ruby/gems/2.6.0/bin/pod:24:in `<main>'
然后同事的电脑可以正常打包,我查看了他的电脑环境,发现ruby是2.3.7,我以为是此处发生问题,于是开始了降级Ruby,然而。。。。。。事情并没有这么简单。
我以为降级就会成功
因为我的系统已经更新到了10.15 Catalina,默认的Ruby版本就是2.6.3。
降级Ruby就得降级系统,但是降级系统到10.14总是不成功,总是提示
更新固件时发生错误。退出安装器以重新启动电脑,然后再次尝试。
然后我想起来这可能是联网验证的结果,于是我关闭wifi,调整时间到15年,然而。。。。。。。。。。还是会出现
更新固件时发生错误。退出安装器以重新启动电脑,然后再次尝试。
看来断了wifi还是没有用,最后发现安装过程中会重启几次,重启的时候wifi会自动开启然后连上我的路由器,于是我就把路由器的网线拔了,wifi让你连有网算我输!
然后。。。。。。。。居然成功了。哎。我太难了。
进入系统后一顿初始化,
* 下载Xcode
* 安装cocoapods
* 安装cocoapods-packager
* 拉代码
等啊等,个把小时搞定这些事。
pod package *******.podspec --force --dynamic --no-mangle
打包ing
然后。。。。。。啊。。。。。。。还是报错啊!!!!!!!!!!!
和之前除了工具版本不一致。其他基本一模一样。
看来不是Ruby版本的问题。
刚才方向不对,再来
于是我就想是不是cocoapods-packager自己的锅。
迅速去Github上的cocoapods-packager项目看issues。
发现了一个问题: issues#257 Fail to build a pod into dynamic framework
细心的我发现了一句话
Look at the master branch, the calling to Pod::PodTarget.new has changed.
我马不停蹄的查看了cocoapods-packager本机的代码,目录在这
cocoapods-packager/lib/cocoapods-packager/pod_utils.rb
file_accessors = create_file_accessors(static_target, dynamic_sandbox)
archs = []
dynamic_target = Pod::PodTarget.new(dynamic_sandbox, true, static_target.user_build_configurations, archs, platform, static_target.specs, static_target.target_definitions, file_accessors)
dynamic_target
end
Githu上现存的master分支
dynamic_target = Pod::PodTarget.new(static_target.specs, static_target.target_definitions, dynamic_sandbox)
dynamic_target.host_requires_frameworks = true
dynamic_target.user_build_configurations = static_target.user_build_configurations
dynamic_target
end
对比发现这一段代码不一样,虽然我看不懂、、、、、、我是真的不会ruby。
问题到这里差不多就解决了一大半,因为我已经找到了原因。
发现解决方法
这个时候我sudo gem uninstall cocoapods-packager
,卸载掉cocoapods-packager。
开始源码安装cocoapods-packager。
首先拉取源代码
git clone https://github.com/CocoaPods/cocoapods-packager.git
完毕之后进入目录 cocoapods-packager
查看bundler是否安装
gem list bundler
(没有出现bundler的话就gem install bundler
)安装依赖项
bundler install
执行
sudo gem build cocoapods-packager.gemspec
语句后会生成cocoapods-packager-1.5.0.gem文件
- 将生成的cocoapods-packager-1.5.0.gem 文件执行本地安装
sudo gem install cocoapods-packager-1.5.0.gem -l
为了更稳我重启了终端。
接着 pod package *******.podspec --force --dynamic --no-mangle
打包ing
出现了
Building dynamic framework **** (****) with configuration Release
成功了。。。。。。
太难了。
此时我的编译环境是
* macOS 10.14.6
* Xcode 11.3
下面就想,新系统上行不行的通,现在验证之前又不能升级。。。。
emmmm。。。。。
我还有个blackApple。
最新编译环境验证
另外一个设备的编译环境是
* macOS 10.15.7
* Xcode 12.0.1
都是最新的。
卸载掉gem安装的cocoapods-packager。
源码安装cocoapods-packager。
接着 pod package *******.podspec --force --dynamic --no-mangle
打包ing
出现了
Building dynamic framework **** (****) with configuration Release
哎。又成功了。Happy。。。。
马上把我笔记本的东西都升级了。美滋滋。。。
特此记录。。。。。。。。。。。