cocoapods-packager 插件的错误修复和适配

 原创    2023-11-15

在前篇文章 pod package的不足和改进 中对 cocoapods-packager 插件如何自定义参数做过介绍,那已经是 2020 年的事了,cocoapods-packager 目前依旧停留在 2016 年的 1.5.0 版本,已渐失于维护。我在适配 Xcode 15 时,遇到一些问题,这里做下记录。

Unknown option: --local

pod package --local 允许使用本地代码打包,而无需从发布的版本上下载,这个参数非常适合本地测试开发。如果直接按如下方式安装 cocoapods-packager,并不会支持 --local 参数:

sudo gem install cocoapods-packager

这是因为 https://github.com/CocoaPods/cocoapods-packager 仓库中最新 1.5.0 Tag 不支持 --local 参数。正确的做法是取 master 最新的代码:

gem install specific_install
gem specific_install https://github.com/CocoaPods/cocoapods-packager

gem install 到底安装到了哪里?

通过 gem 安装的依赖库,可能会被安装到系统中的不同路径,后面会有修改 cocoapods-packager 源码的需求,实际安装路径没找对修改错了源码是不起作用的。可以借助 gem-path 插件 查看 gem 安装库(生效的)的实际位置。

gem install gem-path
gem path cocoapods-packager

The armv7/armv7s architecture is deprecated

从 Xcode 14 开始,已经不再支持 armv7/armv7s 架构了,直接使用 pod package 默认会编译 x86_64、i386、arm64、armv7、armv7s 的包,将报错:

error: The armv7 architecture is deprecated. You should update your ARCHS build setting to remove the armv7 architecture.
error: The armv7s architecture is deprecated. You should update your ARCHS build setting to remove the armv7s architecture. 

修复方式:

通过 gem path cocoapods-packager 找到 cocoapods-packager 实际安装位置,修改 lib/cocoapods-packager/builder.rb:

def ios_architectures
  #archs = %w(x86_64 i386 arm64 armv7 armv7s)
  archs = %w(x86_64 arm64)
  vendored_libraries.each do |library|
    archs = `lipo -info #{library}`.split & archs
  end
  archs
end

如何设置 OTHER_CFLAGS 参数?

cocoapods-packager 并没有暴露设置 xcodebuild 编译参数的设置入口,从 pod package 命令行尝试设置编译参数是无法生效的,相关代码在:

//lib/cocoapods-packager/builder.rb
def ios_build_options
      "ARCHS=\'#{ios_architectures.join(' ')}\' OTHER_CFLAGS=\'-fembed-bitcode -Qunused-arguments\'"
end

最佳实践

我已经在 cocoapods-packager 上面踩过不少坑,索性直接 fork 一份 cocoapods-packager 来维护,Github 地址在:cocoapods-packager。相对官方仓库的改动点有:

  1. 修复了 armv7/armv7s 的问题;
  2. 增加 --other-c-flags 以支持自定义编译参数,对我个人而言这个参数非常实用。比如开启混淆:
pod package kanchuan.podspec --force --embedded --local --no-mangle --exclude-deps --spec-sources="" --verbose --other-c-flags="-mllvm -enable-allobf"

如果你喜欢这个特性,可以按照以下方式部署:

安装 cocoapods-packager:

sudo gem install cocoapods-packager

查看安装路径:

gem path cocoapods-packager

将从 https://github.com/ckanchuan/cocoapods-packager 下载的文件全部覆盖至安装路径中。

相关文章:

iOS Asset Catalog and Bundle
pod package的不足和改进
CocoaPods Podfile and podspec configurations
WWDC19:2019苹果全球开发者大会
分享 AppStore 审核的一些经验教训

发表留言

您的电子邮箱地址不会被公开,必填项已用*标注。发布的留言可能不会立即公开展示,请耐心等待审核通过。