Fabric 和 Objective C 中的多个目标上缺少 DYSM 错误

Posted

技术标签:

【中文标题】Fabric 和 Objective C 中的多个目标上缺少 DYSM 错误【英文标题】:Missing DYSM Error on multiple Target in Fabric and Objective C 【发布时间】:2016-08-08 09:09:52 【问题描述】:

在我的应用中有两个目标:

 Target 1 : MyApp - com.app.myapp
 Target 2 : MyAppQA  - com.app.myappQa

用于Fabric 注册的电子邮件ID 是same 用于两个目标。

我使用Fabric mac app 创建了两个应用程序。

MyApp 中,Target Fabric 正在捕获所有崩溃并且工作正常。 但是当我使用目标MyAppQA 运行时,我得到Missing DYSM file error.

我无法理解为什么我的第二个目标没有捕获崩溃。

这是我尝试过的方法:

    BitCode - 已禁用(虽然我没有使用 bitcode,但即便如此我也进行了交叉检查)

    调试信息格式 - 使用 dSYM 文件设置为 DWARF(发布和调试)

    尝试手动上传 DYSM 文件(我通过 Archiving the project 然后从右键 ClickMenu 中选择 ShowPackageContents 得到了 dysm 文件)

我已经尝试了互联网上所有可能的解决方案。而且我不想手动更新dysm,因为我现在没有iTunesConnect帐户。

【问题讨论】:

请检查崩溃日志是否显示在fabic仪表板中?? @MonikaPatel 不,我在仪表板中没有收到任何崩溃日志。 我已经在两天前集成了 crashlytics。并且集成成功。等等,我会详细提供所有步骤 请检查我的回答@RahulMishra 【参考方案1】:

集成 Crashlytics 的步骤:-

1.在可可豆荚下方添加

pod 'Fabric'
pod 'Crashlytics'

2.在构建阶段添加一个运行脚本(对于这一步,您必须先登录到结构而不是获取 API 密钥)

"$PODS_ROOT/Fabric/run" 8252525b24e2d6fagsdg101ea7faf49edefa84ff3ec342b0dgsdrergadc2bd8agsdg50671jhga2ee8c017ddgsdg33fbbb

3.将您的 API Key 添加到 info.plist 文件中

 <key>Fabric</key>
    <dict>
     <key>APIKey</key>
     <string>your_key</string>
     <key>Kits</key>
        <array>
         <dict>
            <key>KitInfo</key>
         <dict/>
        <key>KitName</key>
            <string>Crashlytics</string>
        </dict>
        </array>
    </dict>

4.在AppDelegate文件中添加以下代码

AppDelegate.h:-

#import <Fabric/Fabric.h>
#import <Crashlytics/Crashlytics.h>

AppDelegate.m:-

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    [Fabric with:@[[Crashlytics class]]]

5.对于强制崩溃在视图控制器的任何按钮点击事件上写下面的代码,不能写入应用委托文件

[[Crashlytics sharedInstance] crash];

6.更改构建设置:

 click on project target >>   Build setting >>  Chnage value of “Debug information Format” set it to “DWARF with dSYM file”
 click on project >>   Build setting >>  Chnage value of “Debug information Format” set it to “DWARF with dSYM file”

7.如何让应用崩溃

 Xcode's debugger prevents us from processing crash reports. 

  To make sure a crash is reported during your simulator testing:
   ⁃    Launch simulator (Run your project and install app in simulator)
   ⁃    Press stop (stop from Xcode )
   ⁃    Launch your app and force a crash (Now do not run project, just open simulator and launch your app from simulator and press button that u write code for crash ` [[Crashlytics sharedInstance] crash];`)
   ⁃    Relaunch the app from simulator (again run app from simulator not from Xcode project)
   ⁃    See the crash report in the web dashboard

【讨论】:

感谢您的回答。我在运行脚本阶段缺少引号可能是因为我没有得到 DYSM 文件。 @MonikaPatel 欢迎来到@RahulMishra【参考方案2】:

来自 Fabric 的 Mike。

上传 dSYM 后,我们将开始重新处理过去 7 天的所有崩溃,因此现在应该可以看到它。

要上传 dSYM,包括查看上传流程中的任何错误,您可以使用位于 Fabric OS X 应用程序 Fabric.app/Contents/MacOS/upload-symbols 和 Fabric CocoaPod 有效负载中 $PODS_ROOT/Fabric/upload-symbolsupload-symbols 脚本

使用以下命令运行脚本以上传给定文件夹中的所有 dSYM:

find <directory-to-search-for-dsyms> -name "*.dSYM" | xargs -I \\ /path/to/upload-symbols -a <api-key> -p <platform> \\

Documentation reference.

【讨论】:

感谢 Mike 抽出宝贵时间。抱歉迟了回应。尽管我对项目设置进行了一些更改并且它有效。我禁用了位代码并将调试信息格式更改为 DWARF,并带有用于调试和发布的 dysm 文件。我试过你的手动上传方式,它也有效。 :) 嗨@Mike,我第一次做这个运行脚本。如果你能举个例子,那将是一个帮助。谢谢 @MuhammadJabbar 您可能应该提出一个新问题,以免任何讨论与通过上传符号脚本上传 dSYM 混为一谈。 嗨@MikeBonnell,感谢您的回复。我找到了解决方案。 @MikeBonnell dsym 的位置将在运行时创建。那么我如何在运行脚本中指定它?鉴于此,派生数据文件夹不是静态的,每次运行应用程序时都会创建。如果我错了,请纠正我?

以上是关于Fabric 和 Objective C 中的多个目标上缺少 DYSM 错误的主要内容,如果未能解决你的问题,请参考以下文章

IOS项目目标中的多个Objective C桥接头

如何从Objective c中的UITableView获取UILabel的多个值

objective c, protocol

Objective C 中的目录大小

具有多个参数的函数

Fabric.js:如何取消选择画布上的一个或多个对象?