首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Xcode8构建在iOS 9.2及更低版本上崩溃

Xcode8构建在iOS 9.2及更低版本上崩溃
EN

Stack Overflow用户
提问于 2016-09-09 13:15:49
回答 8查看 16.6K关注 0票数 85

当我使用Xcode8 GM Seed构建我的应用程序,并在设备或模拟器下面的iOS 9.2上运行它时,在应用程序启动期间或应用程序启动几秒钟后,我得到奇怪的EXC_BAD_ACCESS崩溃。崩溃总是发生在不同的地方(添加子视图、[UIImage imageNamed:]、应用程序代理的main方法等)。当我在iOS 9.3+或10上运行它时,我不会得到这些崩溃,当我用Xcode7构建并在iOS 9.2及更低版本上运行时,我也不会得到这些崩溃。其他人也有类似的经历吗?这是Xcode8的一个已知问题吗?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2016-09-12 23:25:37

请参阅接受的答案https://forums.developer.apple.com/thread/60919

您可以使用Preview.app将16位资产保存为8位资产

如何解决"ERROR ITMS-90682: Invalid Bundle - 'Payload/XXXXX/Assets.car‘下的资产目录不能包含16位或P3资产,如果应用程序支持iOS 8或更早版本。“

对于Xcode8 GM,如果您在针对早于iOS 9.3的iOS版本的应用程序提交中包含16位或P3资产,则会发生此错误。如果您的应用程序需要宽色彩功能,则必须将部署目标更改为iOS 9.3或更高版本。如果您的应用程序不需要宽颜色功能,并且您希望将其部署到较旧的iOS版本,那么您应该使用8位sRGB资源替换所有16位或P3资源。您可以通过在来自iTunes连接的错误消息中指定的资产目录上运行“assetutil”来查找16位或P3资产。以下步骤概述了该过程:

  1. 创建可检查的.ipa文件。在Xcode管理器(Xcode->Window-> Organizer )中,选择要检查的归档文件,单击"Export ...“,然后选择”Export for Enterprise or Ad-Hoc Deployment“。这将为你的应用程序创建.ipa文件的本地副本。
  2. 找到该.ipa文件并将其扩展名更改为.zip。
  3. 展开.zip文件。这将产生一个包含您的.app包的有效负载文件夹。
  4. 打开一个终端,将工作目录更改为您的.app包cd的顶层,然后使用查找工具查找Assets.car包中的.app文件,如下所示:
  5. 。assetutil 'Assets.car'
  6. Use这个工具可以在您的应用程序拥有的每个-name中查找任何16位或P3资产,如下所示。:sudo xcrun --sdk iphoneos assetutil --info /path/to/a/Assets.car > /tmp/Assets.json
  7. Examine生成的/tmp/Assets.json并查找包含“DisplayGamut”:“P3”及其关联的“Name”的任何内容。这将是包含一个或多个16位或P3 assets.
  8. Replace这些具有8位/ sRGB资产的资产的图像集的名称,然后重建您的应用程序。

更新:如果您的部署目标设置为8.3或8.4,并且您有一个资产目录,那么即使您实际上没有16位或P3资产,您也会收到相同的错误消息。在这种情况下,您需要将部署目标降低到8.2,或者将其向上移动到9.x。

票数 55
EN

Stack Overflow用户

发布于 2016-09-19 18:29:59

我希望这个bash脚本能帮助你。输入参数是包含项目所有xcassets的目录。此脚本会将sRGB配置文件设置为所有pngs。它帮助了我:)

代码语言:javascript
复制
#!/bin/bash
DIRECTORY=$1
echo "------------------------------"
echo "Passed Resources with xcassets folder argument is <$DIRECTORY>"
echo "------------------------------"
echo "Processing asset:"
XSAASSETSD="$(find "$DIRECTORY" -name '*.xcassets')"
for xcasset in $XSAASSETSD
do
    echo "---$xcasset"
    IMAGESETS="$(find "$xcasset" -name '*.imageset')"
    for imageset in $IMAGESETS
    do
        echo "------$imageset"
        FILES="$(find "$imageset" -name '*.png')"
        for file in $FILES 
        do
            echo "---------$file"
            sips -m "/System/Library/Colorsync/Profiles/sRGB Profile.icc" $file --out $file
        done
    done
done
echo "------------------------------"
echo "script successfully finished"
echo "------------------------------"
票数 32
EN

Stack Overflow用户

发布于 2016-09-20 05:13:14

我能够重现这个问题,它看起来确实与资产目录中的图像有关。Filed a bug with Apple (附带示例项目)

Apple Bug Reporter: 28371396

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39404285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档