Saki's 研究记录

golang使用github上fork出来的package

字数统计: 671阅读时长: 2 min
2024/03/20

背景

最近开发个APP项目用到了Github上的Golang开源的第三方库。虽然项目有一直有在更新,但是提交审核时,系统提示说引用了苹果未公开(私有)或者已经废弃的API)。

Guideline 2.5.1 - Performance - Software Requirements
Your app uses or references the following non-public or deprecated APIs:

打开项目工程,全局搜索了关键字,结果什么都没有搜到 XD
系统也很贴心,不但帮你找出了问题还教你怎么去解决这个问题,上述提到了两个命令工具:

  • strings 检测
  • otool 工具(xcode自带,可以直接在终端中使用)

otool -L appName # 查看可执行程序都链接了那些库
otool -ov appName # 输出Object-C类结构以及定义的方法

另外还有一种更简单的方法:

  • grep 全局搜索

grep -r KeyWord . (r 后面一个空格,然后键入关键字,注意名称后面敲一个空格,然后键入.)

例子:

1
2
# grep -r  KeyWord .
Binary file ./WorkDir/... matches

一行命令就能找到工程里面引用未公开(私有)或者已经废弃的API,但是没有提示具体是什么库,你学废了么。
接下来就可以根据经验来使用排除法定位了XD。
过程忽略不计,接下来就需要来升级第三方库或者删除未用到的库就行了(强行回到主题)。

替换二次开发包

怎样在改动最小的情况下,替换成自己二次开发的包呢?
具体步骤如下:

  1. Fork 原有的Package,例如github就直接star+fork(你的代码是我的了!)
  2. 修改代码并发布(Release)
  3. 在原项目中运行:go mod edit -replace github.com/original/gopackage@version=github.com/you/go-git@version

在第三步时,可以看到go.mod下面最后会多出来一行:

1
2
3
module PROJECT_NAME
...
github.com/original/gopackage version => github.com/you/go-git version

go.mod文件,是一个非常重要的文件。
该文件中,通过4个指令来声明module信息。用于控制版本的选择。
一共有4条指令,如下所示:

  • module: 声明module名称,go mod init 指定的名称
  • require: 声明依赖以及其版本号,go mod tidy 执行后会自动生成
  • replace: 替换require中声明的依赖,使用另外的依赖及其版本号
  • exclude: 禁用指定的依赖;

require用于指定依赖,如require github.com/sakishum/mckee v1.1.1
该指令相当于告诉go build使用github.com/sakishum/mckeev1.1.1版本进行编译。

最后再执行go mod tidy命令,如无意外就替换好了。

引用

golang使用github上fork出来的项目
与AppStore 审核的爱恨情仇

以上。

CATALOG
  1. 1. 背景
  2. 2. 替换二次开发包
  3. 3. 引用