iOS 应用程序在 Apple 审批过程中崩溃,但不适合我

Posted

技术标签:

【中文标题】iOS 应用程序在 Apple 审批过程中崩溃,但不适合我【英文标题】:iOS App crashes on Apple approval process but not for me 【发布时间】:2013-10-08 08:57:54 【问题描述】:

过去两周我一直在尝试更新一个 ios 客户端应用程序,不幸的是它被拒绝了两次,因为 Apple 说它在 iOS7 上崩溃了。 Apple 已向我发送以下崩溃报告。

Incident Identifier: C213974C-73E2-42C4-A2AA-E4C2A454319E
CrashReporter Key:   2c5d5176cc4387265bd86c427bf138d2b0acfe38
Hardware Model:      xxx
Process:             Twlight Sports [502]
Path:                /var/mobile/Applications/2B9ED7B5-787E-48ED-AAEC-3DEF87A86C67/Twlight Sports.app/Twlight Sports
Identifier:          com.twilightsports.twilightsports
Version:             1.2 (1.2)
Code Type:           ARM (Native)
Parent Process:      launchd [1]

Date/Time:           2013-09-27 15:22:18.784 -0700
OS Version:          iOS 7.0 (11A465)
Report Version:      104

Exception Type:  EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000001, 0x00000000e7ffdefe
Triggered by Thread:  0

Dyld Error Message:
  Library not loaded: /Developer/Library/Frameworks/SenTestingKit.framework/SenTestingKit
  Referenced from: /var/mobile/Applications/2B9ED7B5-787E-48ED-AAEC-3DEF87A86C67/Twlight Sports.app/Twlight Sports
  Reason: image not found
  Dyld Version: 324

Binary Images:
0x2beed000 - 0x2bf0d78a dyld armv7  <b37cba000c7d3f8ea414f060d45ce144> /usr/lib/dyld

我删除了项目中对SenTestingKit 的所有引用,并再次提交了应用更新。 一周后,我收到了来自 Apple 的完全相同的崩溃报告。

然后,我创建了一个 AdHoc,与我发送给 Apple 的二进制文件非常相似,并将其部署到我的 iPhone 4S 和 iPad 2 上。这两款设备都可以正常工作而不会崩溃。

我已经对拒绝提出上诉,希望 Apple 会再次测试该应用程序,但他们拒绝了上诉,只是说它仍在崩溃并且不再提供任何帮助。目前我很茫然,因为我无法复制崩溃,因此无法修复它。

我的工作区中还运行着 CocoaPods,并安装了 Kiwi TDD pod。这引用了但是 Pods Build 目标在其 Link Binary With Libraries 中没有 SenTestingKit.framework@

【问题讨论】:

仅凭此描述,我无法为您提供任何帮助。您可能需要发布一些 Xcode 构建设置和构建包的屏幕截图 不清楚您希望这里的任何人如何帮助您处理这些有限的信息。 你在iOS7上也测试过吗? similar issue 为什么要将测试框架链接到您的应用程序中?它们仅属于测试目标。搜索“cocoapods target Exclusive”看看如何。 【参考方案1】:

您可以在重新提交之前使用otool 检查您的应用二进制文件,以了解它是否链接SenTestingKitotool -L 将列出 Mach-O 二进制文件的链接库。

例如 Xcode 链接:

% otool -L /Applications/Xcode.app/Contents/MacOS/Xcode                                                                             
/Applications/Xcode.app/Contents/MacOS/Xcode:
    /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 20.0.0)
    @rpath/DVTFoundation.framework/Versions/A/DVTFoundation (compatibility version 1.0.0, current version 3532.0.0)
    @rpath/DVTKit.framework/Versions/A/DVTKit (compatibility version 1.0.0, current version 3546.0.0)
    @rpath/IDEFoundation.framework/Versions/A/IDEFoundation (compatibility version 1.0.0, current version 3569.0.0)
    @rpath/IDEKit.framework/Versions/A/IDEKit (compatibility version 1.0.0, current version 3591.0.0)
    /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 1052.0.0)
    /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
    /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 1247.0.0)

您可以通过创建 App Store 构建,将 .ipa 复制到某个文件夹中,在您的应用商店二进制文件上运行它。将.ipa 重命名为.zip。打开.zip 文件,然后在应用程序内的二进制文件上运行otool -L,可能是这样的:(这是iBooks)

% cd iBooks\ 3.1.3/Payload/iBooks.app                                                                                                     
% otool -L iBooks                                                                                                                         
iBooks:
    /usr/lib/liblockdown.dylib (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/StoreKit.framework/StoreKit (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/PrivateFrameworks/Celestial.framework/Celestial (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/AssetsLibrary.framework/AssetsLibrary (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/Foundation.framework/Foundation (compatibility version 300.0.0, current version 992.0.0)
    /System/Library/Frameworks/UIKit.framework/UIKit (compatibility version 1.0.0, current version 2372.0.0)
    /System/Library/Frameworks/CoreGraphics.framework/CoreGraphics (compatibility version 64.0.0, current version 600.0.0)
    /System/Library/PrivateFrameworks/iTunesStoreUI.framework/iTunesStoreUI (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/MediaPlayer.framework/MediaPlayer (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/PrivateFrameworks/iTunesStore.framework/iTunesStore (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/PrivateFrameworks/StoreServices.framework/StoreServices (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/QuartzCore.framework/QuartzCore (compatibility version 1.2.0, current version 1.8.0)
    /System/Library/PrivateFrameworks/GraphicsServices.framework/GraphicsServices (compatibility version 1.0.0, current version 14.0.0)
    /System/Library/PrivateFrameworks/AppSupport.framework/AppSupport (compatibility version 1.0.0, current version 29.0.0)
    /System/Library/PrivateFrameworks/WebKit.framework/WebKit (compatibility version 1.0.0, current version 536.26.0)
    /System/Library/Frameworks/CoreData.framework/CoreData (compatibility version 1.0.0, current version 419.0.0)
    /System/Library/PrivateFrameworks/javascriptCore.framework/JavaScriptCore (compatibility version 1.0.0, current version 536.26.0)
    /System/Library/Frameworks/CFNetwork.framework/CFNetwork (compatibility version 1.0.0, current version 609.0.0)
    /System/Library/PrivateFrameworks/WebCore.framework/WebCore (compatibility version 1.0.0, current version 536.26.0)
    /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0)
    /System/Library/PrivateFrameworks/Bom.framework/Bom (compatibility version 2.0.0, current version 189.0.0)
    /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
    /System/Library/Frameworks/CoreText.framework/CoreText (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libAccessibility.dylib (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/MobileCoreServices.framework/MobileCoreServices (compatibility version 1.0.0, current version 40.0.0)
    /usr/lib/libsqlite3.dylib (compatibility version 9.0.0, current version 9.6.0)
    /System/Library/Frameworks/MessageUI.framework/MessageUI (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/AVFoundation.framework/AVFoundation (compatibility version 1.0.0, current version 2.0.0)
    /System/Library/Frameworks/ImageIO.framework/ImageIO (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/SystemConfiguration.framework/SystemConfiguration (compatibility version 1.0.0, current version 499.0.0)
    /System/Library/Frameworks/Security.framework/Security (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/AudioToolbox.framework/AudioToolbox (compatibility version 1.0.0, current version 359.0.0)
    /usr/lib/libicucore.A.dylib (compatibility version 1.0.0, current version 49.1.0)
    /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
    /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 56.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 173.8.0)
    /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation (compatibility version 150.0.0, current version 793.0.0)

然后在列表中查找 SenTestingKit 以获取您应用的二进制文件。

【讨论】:

感谢您的回复,如果问题再次出现,我会试一试【参考方案2】:

您发布的信息非常有限,但我将从以下步骤开始:

    您对硬件型号进行了 xxx 处理,但崩溃可能是特定于硬件的,并且可能仅发生在您未测试的硬件上。 与操作系统相同,您可能已在 7.0.1 或 7.0.2 上进行过测试,但根据崩溃报告,它发生在 7.0 上,因此请确保您对此进行了测试。 帮自己一个忙,开始使用 TestFlight 进行崩溃报告,您将不必依赖他人向您发送崩溃报告,而是会自动将崩溃报告发送给您并象征性地发送给您。 在硬件上测试应用时,请确保测试发布配置。优化发布构建时可能会出现很多问题,因此测试发布是这里唯一明智的选择。 您在验证期间是否收到任何警告?如果是,也许您应该认真对待它们?

我假设应用程序没有启动,但在启动时崩溃。在这种情况下,我不确定 TestFlight 是否会对您有很大帮助,相反,我认为您的 Debug 和 Release 配置之间可能存在差异,导致稍后使用 SenTestKit。

【讨论】:

感谢您的回复,我已经尝试使用 Testflight 进行 AdHoc 部署,但它仍然没有崩溃,我不确定如何将我的 7.0.2 设备降级回 7.0,如果这是可能我可以试试。我得到的唯一警告是我没有提供 iOS7 推荐的 150x150 图标,我也会在 iPad 3 上尝试【参考方案3】:

嗯.....

为了解决这个问题,我基本上不得不从我的工作区中删除 CocoaPods,删除测试目标和测试方案,我上周四重新提交了应用程序,今天刚刚被接受。

这是一次非常绝望的修复尝试,我认为罪魁祸首是 Apple 正在我的项目上运行我没有正确设置的测试方案。移除 Kiwi Cocoapods 后,看起来它修复了请求 SenTestingKit 框架的任何内容

【讨论】:

很高兴听到它被批准了,同时很遗憾你不得不删除这些东西,因为我很确定你提交了应用程序的 DEBUG 版本。如果是这种情况,将存档方案更改为使用“发布”而不是“调试”就足够了。希望这对您将来有所帮助。 我建议将此信息添加到您帖子的末尾作为更新,而不是作为答案。【参考方案4】:

我遇到了类似的问题,即应用程序在我的设备上运行良好但被苹果拒绝。 这是说包中的某些文件已损坏。 当我为所有用户设置读、写和执行权限并再次提交应用程序时,它被批准了。 这可能是您的情况的原因之一。请尝试设置权限并重新创建二进制文件并提交。

【讨论】:

感谢您的回复,您可以在 XCode 中设置此权限吗,我不确定在哪里查看 这些是您可以通过 chmod -R 777 设置的权限。和我们在linux中设置的类似

以上是关于iOS 应用程序在 Apple 审批过程中崩溃,但不适合我的主要内容,如果未能解决你的问题,请参考以下文章

与开发者分享 iOS 应用崩溃报告

更新后崩溃(转移iOS App的所有权)

仅在 iOS 14 中崩溃核心数据

Apple Store 提交中接受的最低 IOS 版本?

iOS App(使用核心数据)更新后崩溃,但只有 App Store 版本

Facebook iOS SDK 导致崩溃