docs: image url

This commit is contained in:
FantasticLBP
2026-01-02 10:28:57 +08:00
parent 7ac7513900
commit 7843661458
29 changed files with 719 additions and 719 deletions

View File

@@ -97,10 +97,10 @@ QA存在一个情况点击一个网页下载 iOS App 到本地,点击
Xcode 中,对于项目是可以看到配置文件的。我们可以鼠标按住,拖动到桌面文件夹下。
<img src="./../assets/XcodeProvisionProfile.png" style="zoom:30%" />
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/XcodeProvisionProfile.png" style="zoom:30%" />
此外,`mobileprovision` 文件是不可读的。可以通过 **security cms -D -i 195103db-6d6f-4da1-bd0e-66d5db88176f.mobileprovision -o profil
e.plist** 指令dump 成为一个 plist 格式的文件。如下图所示:
<img src="./../assets/DumpProvisionProfile.png" style="zoom:30%" />
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/DumpProvisionProfile.png" style="zoom:30%" />
指令解读:
- security是 macOS 自带的安全相关的命令行工具,用于处理证书、配置文件、密钥等的处理
@@ -158,7 +158,7 @@ e.plist** 指令dump 成为一个 plist 格式的文件。如下图所示:
1个 iOS App 工程,使用动态库的方式,依赖了 AFNetworking。选择模拟器进行编译查看日志
<img src="./../assets/CodeSignAppWithDynamicLibLog.png" style="zoom:30%" />
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/CodeSignAppWithDynamicLibLog.png" style="zoom:30%" />
日志分析:
1. 日志中的 `--sign` 后一般接的是证书的名称,但是当前日志中是 `-`代表使用自动签名模式Automatic Signing
@@ -170,30 +170,30 @@ e.plist** 指令dump 成为一个 plist 格式的文件。如下图所示:
2. 日志中的 `--entitlements /Users/unix_kernel/Library/Developer/Xcode/DerivedData/InstallDyanmicAndStaticFramework-bmcbqvmynpdalkdhzqirbithtfwp/Build/Intermediates.noindex/InstallDyanmicAndStaticFramework.build/Debug-iphonesimulator/InstallDyanmicAndStaticFramework.build/InstallDyanmicAndStaticFramework.app.xcent` 代表 Xcode 开启的 App 能力信息。`--entitlements` 参数后面跟随的是一个 `.xcent` 文件的路径这个文件包含了应用程序的权限Entitlements配置信息也就是 “App 能力信息”
对其查看,内容如下:
<img src="./../assets/CodeSignEntitlements.png" style="zoom:30%" />
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/CodeSignEntitlements.png" style="zoom:30%" />
`security find-identity -v -p codesigning` 指令用于 macOS 系统中用于查看可用代码签名证书的命令,主要用于开发者在进行代码签名操作前确认可用的证书信息
##### 2. Demo2
1个 iOS App 工程,使用动态库的方式,依赖了 AFNetworking。选择真机进行编译查看日志
<img src="./../assets/CocdSignIphoneLog.png" style="zoom:30%" />
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/CocdSignIphoneLog.png" style="zoom:30%" />
日志分析:
1. 日志中的 `Signing Identity: "Apple Development: FantasticLBP@github.com (953PZFXZFR)"` 变成了开发者证书。多了一个配置文件。
2. 使用的动态库 AFNetworking 是如何签名的?
选择 Pods 的 Product 里面的 AFNetworking 动态库,右击 “show in finder”。看到并没有一个 **`_CodeSignature`** 的文件夹,也就是没有签名信息。然后用指令 ` objdump --macho --private-headers /Users/unix_kernel/Library/Developer/Xcode/DerivedData/InstallDyanmicAndStaticFramework-bmcbqvmynpdalkdhzqirbithtfwp/Build/Products/Debug-iphoneos/AFNetworking/AFNetworking.framework/AFNetworking` 进行查看,发现也不存在 **`LC_CODE_SIGNATURE`** 存储签名信息的 load command。
<img src="./../assets/AppLinkDynamicLibNotSign.png" style="zoom:30%" />
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/AppLinkDynamicLibNotSign.png" style="zoom:30%" />
可能会问,如何确定是动态库?使用 `file AFNetworking` 指令即可验证
<img src="./../assets/AFNetworkingIsDynamicLib.png" style="zoom:30%" />
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/AFNetworkingIsDynamicLib.png" style="zoom:30%" />
问题:动态库 AFNetworking 没有经过签名,为什么拷贝到 App 里面后,可以上架?
其实 Cocoapods 自动生成了脚本,在主工程的 `Build Phases -> Embed Pods Frameworks` 下。且 `Input File Lists` 配置的文件内容,就是所依赖库的文件路径。会被当作参数传递给 `Embed Pods Frameworks` 脚本。
<img src="./../assets/CodeSignByCocoapodsScripts.png" style="zoom:30%" />
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/CodeSignByCocoapodsScripts.png" style="zoom:30%" />
观察编译日志,会发现 「Run custom shell script '[CP] Embed Pods Frameworks'」这里,先对 Frameworks 目录进行了创建和拷贝。然后对 AFNetworking 进行签名。
在主工程的 Products 目录下,选择 Appshow in finder然后显示包内容。查看 `Frameworks` 文件夹下的 `AFNetworking.framework` 已经存在了 `_CodeSignature` 文件夹,也就是已经签名完成。继续查看 Load Command发现也存在了 **LC_CODE_SIGNATURE** Load Command。
<img src="./../assets/CocoapodsScriptCodeSignDetails.png" style="zoom:30%" />
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/CocoapodsScriptCodeSignDetails.png" style="zoom:30%" />
同时,也可以看到是先对动态库签名,再对 App 签名。
@@ -204,13 +204,13 @@ e.plist** 指令dump 成为一个 plist 格式的文件。如下图所示:
安装方式为:`brew install --no-quarantine excitedplus1s/repo/jtool2`
使用方式为:**`jtool2 --sig -vv ${MachOFile}`**
<img src="./../assets/jtool2WatchSignature.png" style="zoom:30%" />
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/jtool2WatchSignature.png" style="zoom:30%" />
### 5. fastlane 相关概念
<img src="./../assets/FastlaneStructure.png" style="zoom:30%" />
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/FastlaneStructure.png" style="zoom:30%" />
- fastlane 本质就是一套命令行工具,专为用来简化并实现我们与 Apple 交互时的自动化
- fastlane 的每一个单独工具都是为了解决常见的 App Store 或其他问题而设计的
- fastlane 通过脚本方式集合了一系列常见的行为,叫做 lane。也就意味着可以通过 lane 来对自己的 App 做一些量身定制的需求
@@ -276,7 +276,7 @@ e.plist** 指令dump 成为一个 plist 格式的文件。如下图所示:
end
```
- 第三种:使用特定的 Fastlane 文件。比如使用脚本 `Fastlane scan init` 会生成关于 scan 相关逻辑的脚本文件 `Scanfile`
<img src="./../assets/FastlaneScriptCodeGen.png" style="zoom:30%" />
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/FastlaneScriptCodeGen.png" style="zoom:30%" />
建议使用方式二、三,不建议使用方式一。关于 fastlane 脚本编写文档查看 [fastlane docs](http://docs.fastlane.tools)
@@ -405,7 +405,7 @@ end
终端使用 `fastlane match init` 指令创建 Matchfile同时根据提示选择一些模版和输入信息。
<img src="./../assets/FastlaneMatchfile.png" style="zoom:30%" />
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/FastlaneMatchfile.png" style="zoom:30%" />