cocoapods-packager编译动态库失败的解决

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 - [email protected]: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 `'
/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 `
'

然后同事的电脑可以正常打包,我查看了他的电脑环境,发现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。。。。

马上把我笔记本的东西都升级了。美滋滋。。。

特此记录。。。。。。。。。。。

你可能感兴趣的:(cocoapods-packager编译动态库失败的解决)