问题形容:
电脑上间接给手机装的包所有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$ lsAssets.carJerodMac:Work jerod$ sudo xcrun --sdk iphoneos assetutil --info ./Assets.car > asset.jsonPassword:JerodMac:Work jerod$
明码是电脑的登录明码.
执行实现后 Work 文件下会生成 asset.json 文件, 抉择文本形式或Sublime形式关上, 查问"DisplayGamut" : "P3"
ios9.3以下零碎不反对 P3 色域的图片, 须要应用 "DisplayGamut" : "sRGB" 即RGB 色域的图.
接下来将这张图片删除或者重做成 RGB.问题解决.
补充 : 在查阅材料时发现, 很多材料都提到过在我的项目中运行一个脚本将P3图片进行转换, 因为此种办法朕没有理论验证过, 所以只做个摘录
#!/bin/bashDIRECTORY=$1echo "----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"doneecho "----script successfully finished"
公布于 2017/09/12 11:09,搬家到思否。