快速生成“已验证”的字体描述文件
生成含有字体的未签名描述文件
这里使用@linw1995的方法,在此致谢。支持.ttf和.otf字体
Pyhon代码
在Github(https://gist.github.com/linw1995/7b1b8e88159f18ed18f46629e35ba423)上下载或者将下方文件粘贴为fonts.py文件
# coding: utf-8
import re
import hashlib
import sys
from base64 import b64encode
from random import choice
items = ['8', '9', 'a', 'b']
names = sys.argv
assert len(names) > 1
def replace(m):
return "-".join([m.group(1), m.group(2), '5' + m.group(3), choice(items) + m.group(5), m.group(5)])
for name in names[1:]:
with open(name, "rb") as f:
font_data = f.read()
sha1_font_data = hashlib.sha1(font_data).hexdigest()
UUID = replace(re.search("([a-f0-9]{8})([a-f0-9]{4})([a-f0-9]{3})([a-f0-9]{3})([a-f0-9]{12})", sha1_font_data))
encoded_font_data = b64encode(font_data)
xml = f"""<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PayloadUUID</key>
<string>{ UUID }</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>PayloadIdentifier</key>
<string>geniuscqy.font-{ UUID }</string>
<key>PayloadDisplayName</key>
<string>{ name }</string>
<key>PayloadOrganization</key>
<string>Font Profile</string>
<key>PayloadDescription</key>
<string>Make the font available to iOS applications.</string>
<key>PayloadContent</key>
<array>
<dict>
<key>PayloadVersion</key>
<integer>1</integer>
<key>PayloadUUID</key>
<string>{ UUID }</string>
<key>Font</key>
<data>{ encoded_font_data.decode() }</data>
<key>PayloadType</key>
<string>com.apple.font</string>
<key>PayloadIdentifier</key>
<string>LoggingPayload</string>
</dict>
</array>
<key>PayloadType</key>
<string>Configuration</string>
<key>PayloadRemovalDisallowed</key>
<false/>
</dict>
</plist>"""
with open(name+".mobileconfig", "w", encoding="utf-8") as f:
f.write(xml)
其中 <string>Make the font available to iOS applications.</string>
为描述字段,安装时可见
使用方法
python3 packagingfonts.py 1.ttf 2.ttf 3.ttf
如默认python版本为3以上,可直接使用python
这时候会生成形如
1.ttf.mobileconfig
的文件
为描述文件签名
这里使用@GarveyCalvin的方法,在此致谢。
获取iOS信任的证书
首先你需要一个iOS信任的SSL证书。在此忽略此步骤。可以使用CertBot、TrustAsia的免费SSL或其他商业SSL。
这时候你有三个文件
- ca.crt – SSL证书文件
- priv.key – 私钥文件
- ca-bundle.pem – 中间证书
文件名不重要,有时候不需要中间证书。
使用openssl工具签名
在shell里打开,windows下可用powershell
openssl smime -sign -in unsigned.mobileconfig -out signed.mobileconfig -signer ca.crt -inkey priv.key -certfile ca-bundle.pem -outform der -nodetach
openssl rsa -in priv.key -out rsanopass.key
openssl smime -sign -in unsigned.mobileconfig -out signed.mobileconfig -signer ca.crt -inkey rsanopass.key -certfile ca-bundle.pem -outform der -nodetach
没有openssl工具?自行安装。Windows 10 可尝试安装wsl系统后在PowerShell下每行命令前加wsl,注意提前cd切换目录。
注意替换其中的unsigned.mobileconfig,signed.mobileconfig,ca.crt,priv.key,ca-bundle.pem为实际文件名
使用iOS设备中Safari下载描述文件并自行安装
Reference
- linw1995.iOS字体安装和使用.[EB/OL].https://www.jianshu.com/p/83b4982f1a73,2017-06-17
- GarveyCalvin.iOS开发 – 超级签名实现之描述文件.[EB/OL].https://www.cnblogs.com/GarveyCalvin/p/ios-super-sign.html,2019-10-23
若非注明,均为原创文章。转载请注明:转载自:使用描述文件为iOS添加自定义字体
发布评论
沙发空缺中,还不快抢~