首页 文章

在iOS 9.2及更低版本上,Xcode 8构建崩溃

提问于
浏览
85

当我使用Xcode 8 GM Seed构建我的应用程序并在iOS 9.2下面的设备或模拟器上运行时,我在应用程序启动期间或应用程序启动后几秒钟发生奇怪的EXC_BAD_ACCESS崩溃 . 崩溃总是发生在一个不同的地方(添加一个子视图, [UIImage imageNamed:] ,app delegate 's main method etc). I don' t当我在iOS 9.3或10上运行时遇到这些崩溃,当我使用Xcode 7并且在iOS 9.2上运行时我没有得到它们以下 . 还有其他人遇到类似的东西吗?这是Xcode 8的已知问题吗?

8 回答

  • 0

    看到接受的答案https://forums.developer.apple.com/thread/60919

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

    如何解决“ERROR ITMS-90682:无效的捆绑包 - 如果应用程序支持iOS 8或更早版本,则'Payload / XXXXX / Assets.car'中的资产目录不能包含16位或P3资产 . ”使用Xcode 8 GM,如果您在针对iOS版本早于iOS 9.3的应用提交中包含16位或P3资源,则会出现此错误 . 如果您的应用需要广泛的颜色功能,则必须将部署目标更改为iOS 9.3或更高版本 . 如果您的应用程序不需要广泛的颜色功能,并且您希望将其部署到较旧的iOS版本,那么您应该用8位sRGB资产替换所有16位或P3资产 . 您可以通过在iTunes Connect的错误消息中指定的资产目录上运行“assetutil”来查找16位或P3资产 . 以下步骤概述了该过程:创建Inspectable .ipa文件 . 在Xcode Organizer(Xcode-> Window-> Organizer)中,选择要检查的存档,单击“Export ...”,然后选择“Export for Enterprise或Ad-Hoc Deployment” . 这将创建一个本地副本 . 找到你的应用程序的ipa文件 . 找到.ipa文件并将其扩展名更改为.zip . 展开.zip文件 . 这将生成一个包含.app包的Payload文件夹 . 打开终端并将工作目录更改为顶级您的.app包cd路径/到/ Payload / your.app使用find工具查找.app包中的Assets.car文件,如下所示:find . -name'Assets.car'使用assetutil工具查找任何16位或P3资产,在你的应用程序的每个Assets.car中如下所示 . :sudo xcrun --sdk iphoneos assetutil --info /path/to/a/Assets.car> /tmp/Assets.json检查结果/tmp/Assets.json并查找包含“DisplayGamut”:“P3”及其相关“名称”的任何内容 . 这将是包含一个或多个16位或P3资产的图像集的名称 . 用8位/ sRGB资产替换这些资产,然后重建您的应用程序 . 更新:如果您的部署目标设置为8.3或8.4并且您有资产目录,那么即使您实际上没有16位或P3资产,也会收到相同的错误消息 . 在这种情况下,您需要将部署目标降低到8.2,或将其移动到9.x.

  • 0

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

    #!/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 "------------------------------"
    
  • 55

    我能够重现问题,它似乎与资产目录中的图像有关 . Filed a bug with Apple(附带示例项目)

    Apple Bug Reporter:28371396

  • 16

    编辑脚本将png文件转换为整个项目中的正确格式并使用空格:

    #!/bin/bash
    DIRECTORY=$1
    echo "------------------------------"
    echo "Passed Resources with xcassets folder argument is <$DIRECTORY>"
    echo "------------------------------"
    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 "------------------------------"
    echo "script successfully finished"
    echo "------------------------------"
    
  • 32

    同样的问题 .

    我不确定这是否是一个错误,但这是我的解决方案:确保你的图像资产没有Adobe RGB(1998)色彩空间

    in xcode

  • 3

    添加其他有类似问题的人......

    应用程序崩溃在iOS 9.0 - iOS 9.2上似乎随机/围绕Storyboard过渡/围绕设置UIImage(名称...)..发现此主题:(https://forums.developer.apple.com/thread/61643

    如果你的应用程序的目标是iOS 8.4,它将在Xcode 8中的iOS 9.0 - 9.2上崩溃 . 与xcassets有关 . 将部署目标设置为8.2或更低(我使用8.0)为我修复了它 . 不开玩笑 . 最糟糕的错误 .

  • 1

    将项目的 iOS Deployment Target 内部的 iOS Deployment Target 和所有目标设置为相同的值 .

    在我的情况下,我的项目设置为 iOS 9.1 ,目标设置为 iOS 8.0 ,并在模拟器上崩溃 iOS 8.4

    现在它完美无缺 .

    PS . :再次运行之前清洁项目 .

  • 13

    虽然问题已经得到解答,但加入的解决方案对我来说并不适用,因为我没有任何16b / ch资产 .

    我发现使用 lzfse 算法压缩的资产出现问题(您可以从中找到有关压缩提取信息的信息)Assets.car使用 assetutil ) . 不幸的是,Xcode IDE不允许开发人员更改压缩算法,但是您可以通过手动编译资产并在 actool 命令中降低部署目标来实现 .

    TL;博士;

    • 档案

    • 解压缩 ipa

    • 编译资产 - 您可以通过检查Xcode report navigator中的存档日志找到xcode生成的项目的资产编译器命令

    示例命令:

    xcrun actool --output-format human-readable-text --notices --warnings --minimum-deployment-target 8.0 --output-partial-info-plist info_partial.plist --app-icon AppIcon --launch-image LaunchImage --enable-on-demand-resources YES --sticker-pack-identifier-prefix {bundle_id}.sticker-pack --target-device iphone --target-device ipad --platform iphoneos --product-type com.apple.product-type.application --compile #{path_to_directory_containing_Assets_car} Assets/Assets.xcassets

相关问题