惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - chaoguo1234

Plist 二进制格式 UIImageView 设置图片不生效的原因排查 Any metadata 的内存布局 - chaoguo1234 Mach-O 文件结构 Block Copy 的内存布局详解 __block 变量内存布局详解 Block 内存布局详解 XNU Inside: iOS 模拟器 WebKit Insie: WebKit 调试(二) NSMutableDictionary 的内存布局 NSDictionary 内存布局 WebKit Inside: GPU 进程调试 WebKit Inside: 渲染树 WebKit Inside: px 与 pt WebKit Inside: CSS 的匹配原理 dyld: 神秘的 __dso_handle 一文搞懂 ARM 64 系列: ADD(立即数版) 一文搞懂 ARM 64: AUTIBSP 一文搞懂 ARM 64 系列: PACISB 一文搞懂 ARM 64 系列: 一文搞懂 ARM 64 系列: 函数调用传参与返回值 一文搞懂 ARM 64 系列: 寄存器
XCode 编译 PAG 源码
chaoguo1234 · 2024-07-28 · via 博客园 - chaoguo1234

最近工作中要使用PAG替换Lottie,为了方便阅读源码,使用XCode对其源码进行了编译。

1 下载源码

编译源码首先要下载源码,有关PAG源码可直接到github上下载。

2 添加相关依赖

下载源码之后,进入到PAG项目根目录,执行如下脚本:

./sync_deps.sh

3 构建 iOS PAGViewer 工程

PAG项目包含多种平台下的代码,包括iOSWindowsLinux等。我们只关注iOS

从根目录进入到iOS目录,双击gen_ios文件。执行完毕后,目录下会多出一个PAGViewer.xcworkspace

4 设置 XCode 签名证书

点击PAGViewer.xcworkspace,进入到PAG项目工程,做下图配置,这样可以将PAGViewer编译到自己手机上:

image

当设置完Team之后会报错,可以删除Bundle Identifier,然后点击Signing Certification下面的Try Again按钮。

5 编译

XCode中选择PAGViewer``Target以及要iPhone手机,点击进行编译:

image

6 脚本设置

能一帆风顺的源码编译经常是可遇而不可求,PAG源码编译也一样。

编译过程中,会收到如下报错:

image

看报错信息,是在编译tgfx项目,运行脚本时,脚本命令出错,出错的命令是node命令。

首先查看Mac上是否安装了node

Mac终端运行node -v,如果输出如下版本信息,说明已经安装:

v22.5.1

既然安装了node,那XCode为啥还报错找不到呢?

原因是XCode运行脚本时的PATH环境变量与终端中的PATH环境变量不同。

XCode的进程环境变量是由macOS系统在启动时设定的,而不是由用户的Shell配置文件(如~/.bash_profile)直接设定的。

也就是说,我们安装的node的路径,不在XCodePATH环境变量下。

为了查看XCodePATH环境变量,可以按照下图进行设置,将XCodePATH环境变量输出到XCodeReport面板:

image

上图中CMake PostBuild Rules会执行一个脚本,正是这个脚本在编译中报错。

在脚本中添加echo命令,输出XCodePATH信息:

echo "当前 PATH: $PATH"

再次编译PAGViewer Target,仍然失败,但是XCodeReport面板已有输出信息:

image

将上面XCodePATH信息拷贝保存下来,然后在Mac终端运行which node命令,查看Macnode的安装目录:

localhost:~$ which node
/opt/homebrew/bin/node

可以验证,Mac上的node安装目录/opt/homebrew/bin不在XCodePATH环境变量中。

为了解决这个问题,我们需要将这个目录添加到XCode的环境变量中,方式就是在刚才的脚本里,添加一条export语句:

image

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

image

最后,再次编译,就会发现PAG源码被你成功编译了!!