XCode 编译 PAG 源码
最近工作中要使用PAG替换Lottie,为了方便阅读源码,使用XCode对其源码进行了编译。
1 下载源码
编译源码首先要下载源码,有关PAG源码可直接到github上下载。
2 添加相关依赖
下载源码之后,进入到PAG项目根目录,执行如下脚本:
./sync_deps.sh
3 构建 iOS PAGViewer 工程
PAG项目包含多种平台下的代码,包括iOS,Windows,Linux等。我们只关注iOS。
从根目录进入到iOS目录,双击gen_ios文件。执行完毕后,目录下会多出一个PAGViewer.xcworkspace。
4 设置 XCode 签名证书
点击PAGViewer.xcworkspace,进入到PAG项目工程,做下图配置,这样可以将PAGViewer编译到自己手机上:

当设置完Team之后会报错,可以删除Bundle Identifier,然后点击Signing Certification下面的Try Again按钮。
5 编译
在XCode中选择PAGViewer``Target以及要iPhone手机,点击进行编译:

6 脚本设置
能一帆风顺的源码编译经常是可遇而不可求,PAG源码编译也一样。
编译过程中,会收到如下报错:

看报错信息,是在编译tgfx项目,运行脚本时,脚本命令出错,出错的命令是node命令。
首先查看Mac上是否安装了node。
在Mac终端运行node -v,如果输出如下版本信息,说明已经安装:
v22.5.1
既然安装了node,那XCode为啥还报错找不到呢?
原因是XCode运行脚本时的PATH环境变量与终端中的PATH环境变量不同。
XCode的进程环境变量是由macOS系统在启动时设定的,而不是由用户的Shell配置文件(如~/.bash_profile)直接设定的。
也就是说,我们安装的node的路径,不在XCode的PATH环境变量下。
为了查看XCode的PATH环境变量,可以按照下图进行设置,将XCode的PATH环境变量输出到XCode的Report面板:

上图中CMake PostBuild Rules会执行一个脚本,正是这个脚本在编译中报错。
在脚本中添加echo命令,输出XCode的PATH信息:
echo "当前 PATH: $PATH"
再次编译PAGViewer Target,仍然失败,但是XCode的Report面板已有输出信息:

将上面XCode的PATH信息拷贝保存下来,然后在Mac终端运行which node命令,查看Mac上node的安装目录:
localhost:~$ which node
/opt/homebrew/bin/node
可以验证,Mac上的node安装目录/opt/homebrew/bin不在XCode的PATH环境变量中。
为了解决这个问题,我们需要将这个目录添加到XCode的环境变量中,方式就是在刚才的脚本里,添加一条export语句:

完成之后,会发现编译tgfx-vendor也会出现同样的脚本问题,也是按照上述方式解决:

最后,再次编译,就会发现PAG源码被你成功编译了!!
XCode 编译 PAG 源码的更多相关文章
- Windows编译Nginx源码
Windows下的Nginx战役,人不作就不会死!就像是拿着麦当劳的优惠券去买肯德基一样,别扭啊 Nginx是一款轻量级的Web 服务器.反向代理服务器.邮件服务器等等集一大串荣誉于一身的大牌人物!他 ...
- 重新编译jdk源码,启用debug信息
我有一个不知道是好还是不好的习惯,搞不懂的一些玩意儿,喜欢调试然后单步执行看这玩意儿到底是怎么运行的. 今天看到正则表达式的时候,appendReplacement()这个方法怎么也看不明白它是怎么工 ...
- (转载)Linux如何编译安装源码包软件
一.什么是源码包软件: 顾名思义,源码包就是源代码的可见的软件包,基于Linux和BSD系统的软件最常见:在国内源可见的软件几乎绝迹:大多开源软件都是国外出品:在国内较为出名的开源软件有fcitx;l ...
- 用VC编译lua源码,生成lua语言的解释器和编译器
用VC编译lua源码,生成lua语言的解释器和编译器 1.去网址下载源码 http://www.lua.org/download.html 2.装一个VC++,我用的是VC6.0 3.接下来我们开始编 ...
- Android反编译(一)之反编译JAVA源码
Android反编译(一) 之反编译JAVA源码 [目录] 1.工具 2.反编译步骤 3.实例 4.装X技巧 1.工具 1).dex反编译JAR工具 dex2jar http://code.go ...
- [原]在win上编译 subversion 源码实践Tonyfield的专栏
(百度和网页的作者无关,不对其内容负责。百度快照谨为网络故障时之索引,不代表被搜索网站的即时页面。) [原]在win上编译 subversion 源码实践 2013-6-9阅读400 评论0 (参考 ...
- 在Mac mini上编译Android源码
参考文章 1.Android 6.0 源代码编译实践 2.编译Android源码致命错误解决方案 实践过程 1.Mac下安装Ubuntu双系统 (1)Ubuntu版本:Ubuntu 15.10 注:实 ...
- 用vs2013编译lua源码方法(一)
用vs2013编译lua源码方法 来源:网络 编辑:admin 1.下载lua源码:lua-5.2.3.tar.gz,解压 2.用vs2013建立一个win32工程: 1)下载后解压到一个目录下 ...
- [原]编译Android源码过程中遇到的问题
编译Android源码的过程参考Android官网介绍: 1.下载Android源码的步骤:https://source.android.com/source/downloading.html 2.编 ...
- CentOS6.5上编译OpenJDK7源码
本文地址:http://www.cnblogs.com/wuyudong/p/build-openjdk7.html,转载请注明源地址. 采用开源的OpenJDK版本,获取其源码的方式有两种: 通Me ...
随机推荐
- C#开发的应用升级更新服务器端工具 - 开源研究系列文章 - 个人小作品
笔者开发过一些小应用,然后这些应用就需要有升级更新的功能,但是如果每个都集成进去也行,但是就是得写死更新的代码了.于是就想写一个应用升级更新的管理器,以前看到过Github上有一个AutoUpdate ...
- 通过计算巢部署 Puppet Enterprise 服务
概述 Puppet Enterprise 是一款自动化软件,可帮助您和您的组织在管理 IT 基础设施的同时提高工作效率和敏捷性. 本文向您介绍如何开通计算巢上的 Puppet Enterprise 服 ...
- Nodejs内置中间件 第三方中间件 cookie和session
内置中间件 express也提供了好用的内置中间件,如提供一个静态资源管理的中间件,通过此中间件就可以帮助为我们快速搭建一个静态资源服务器 app.use(express.static('托管目录地址 ...
- 实例讲解多处理器下的计算机启动(xv6的启动过程)
启动 启动方面的文章之前也写过,那是我的第一篇文章,本文在前文的基础之上完善,然后增加了多处理器启动的情况,废话不多说直接来看. 启动可以分为两种,一种为冷启动,是指计算机在关机状态下按 POWER ...
- kettle从入门到精通 第十课 kettle switch/case、过滤记录、数值范围
1.java代码里面有if else .switch-case等流程控制,kettle也有相应控件.下图便用到switch/case.过滤记录.数值范围控件. 2. switch/case步骤 1)步 ...
- redis数据类型篇
redis数据类型官网资料,https://redis.io/docs/manual/data-types/ 生产环境下的redis实况图 超哥这个redis实例里,db0库有140万个key. 1. ...
- [踩坑记录] Vue3 customRef 传入对象没有进入set方法
问题描述 学习Vue3 Ref 相关 API 的时候,遇到了 customRef 这个 API,它可以让我们自定义 ref 的更新的过程 但是使用 customRef 有一个问题就是,如果你传入的是初 ...
- Flink状态(二)
Flink提供了不同的状态存储方式,并说明了状态如何存和存储在哪里. 状态可以被存储在Jvm的堆和堆外.根据状态存储方式的不同,Flink也能代替应用管理状态,意思是Flink能够进行内存管理(有必要 ...
- shell中各个括号的用法区别
在 shell 脚本中,[ ].[[ ]].( ).(( )).{ } 和 {{ }} 都有各自特定的用法和区别.下面是对这些结构的详细解释: 1. [ ] (test 命令) [ ] 是 shell ...
- 解决 Xshell 无法使用 zsh 的 prompt style
为了更好的阅读体验,请点击这里 先学习一下 zsh 的配置吧~ 参考资料 从 0 开始:教你如何配置 zsh powerlevel10k 如何给 Xshell 配置呢 当我安装完 oh-my-zsh. ...