背景
最近开发个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 | # grep -r KeyWord . |
一行命令就能找到工程里面引用未公开(私有)或者已经废弃的API
,但是没有提示具体是什么库,你学废了么。
接下来就可以根据经验来使用排除法定位了XD。
过程忽略不计,接下来就需要来升级第三方库或者删除未用到的库就行了(强行回到主题)。
替换二次开发包
怎样在改动最小的情况下,替换成自己二次开发的包呢?
具体步骤如下:
Fork
原有的Package
,例如github
就直接star
+fork
(你的代码是我的了!)- 修改代码并发布(
Release
) - 在原项目中运行:
go mod edit -replace github.com/original/gopackage@version=github.com/you/go-git@version
在第三步时,可以看到go.mod
下面最后会多出来一行:
1 | module PROJECT_NAME |
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/mckee
的v1.1.1
版本进行编译。
最后再执行go mod tidy
命令,如无意外就替换好了。
引用
golang使用github上fork出来的项目
与AppStore 审核的爱恨情仇
以上。