共计 1364 个字符,预计需要花费 4 分钟才能阅读完成。
问题形容:
电脑上间接给手机装的包所有 OK, 然而 App Store 商店下载的包在 9.0.2 和 9.2 零碎上一点就闪退, 要么进了利用后轻易点点就闪退.
起因排查:
因为 Release 版的包敞开了日志, 在控制台难以看到有用的信息. 所以, 只能去 Xcode 看 iTunes 统计的 crash 日志.
关上 Xcode->Window->Organizer->Crashes, 右边 App Store 抉择对应版本, 期待日志下载实现.
找到 crash 的中央. 能够看到 crash 的用户的零碎 iOS9.2 和型号 iPhone 6s Plus.
选中 crash 那行, 如果不是公有 API 的话左边会有一个箭头, 点击箭头会跳转到代码中 crash 的中央, 这样就能够找到问题所在了.
但如果是公有 API 就没有这箭头了, 这时候点击左边的 Open in Project, 而后抉择对应的我的项目, 这时候能够在我的项目中看到 crash 中央的堆栈调用;
-[CUIStrucTuredThemeStore renditionWithKey:usingKeySignature:] 这是个苹果公有 API, 查寻材料发现此 API 报错指向图片色域问题.
解决方案:
从 iTunes 下载我的项目的 ipa 并解压, 找到 Payload 中的 .app 文件, 显示包内容.
找到 Assets.car 文件, copy 到 Work 门路下, 在终端执行命令
sudo xcrun –sdk iphoneos assetutil –info ./Assets.car > asset.json
JerodMac:~ jerod$ cd /Users/jerod/Documents/Work
JerodMac:Work jerod$ ls
Assets.car
JerodMac:Work jerod$ sudo xcrun --sdk iphoneos assetutil --info ./Assets.car > asset.json
Password:
JerodMac:Work jerod$
明码是电脑的登录明码.
执行实现后 Work 文件下会生成 asset.json 文件, 抉择文本形式或 Sublime 形式关上, 查问 ”DisplayGamut” : “P3”
ios9.3 以下零碎不反对 P3 色域的图片, 须要应用 “DisplayGamut” : “sRGB” 即 RGB 色域的图.
接下来将这张图片删除或者重做成 RGB. 问题解决.
补充 : 在查阅材料时发现, 很多材料都提到过在我的项目中运行一个脚本将 P3 图片进行转换, 因为此种办法朕没有理论验证过, 所以只做个摘录
#!/bin/bash
DIRECTORY=$1
echo "----Passed Resources with xcassets folder argument is <$DIRECTORY>"
echo "----Processing asset:"
find "$DIRECTORY" -name '*png' -print0 | while read -d $'\0' file;
do
echo "---------$file"
sips -m "/System/Library/Colorsync/Profiles/sRGB Profile.icc" "$file" --out "$file"
done
echo "----script successfully finished"
公布于 2017/09/12 11:09,搬家到思否。