问题描述:

电脑上直接给手机装的包一切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,搬家到思否。

Jerod
47 声望4 粉丝