许可证 | MIT |
发布最新发布 | 2020年2月 |
由 Lukas Spieß、Microsoft、Clement Polet、Jae Lim、Alexander Chocron 维护。
注意:HockeySDK 4.0.0-alpha.1 的发布引入了一个错误,导致应用程序支持文件夹从 iCloud 和 iTunes 备份中排除。
如果您使用过受影响版本(4.0.0-alpha.2、版本 4.0.0、4.1.0-alpha.1、4.1.0-alpha.2 或版本 4.1.0-beta.1),请确保尽快升级到我们 SDK 的较新版本。
HockeySDK-Mac 实现了在您的 Mac 应用程序中使用 HockeyApp 的支持。
以下功能目前被支持
收集崩溃报告:如果您的应用崩溃,则写入设备存储的崩溃日志将与苹果崩溃报告器相同的格式。如果用户重新启动应用,用户将被要求将崩溃报告提交给 HockeyApp。这对 beta 和实时应用都有效,即提交给 App Store 的应用!
用户指标:了解用户行为以提高您的应用。通过每日和月度活跃用户跟踪使用情况,监控受崩溃影响的用户,以及通过会话次数跟踪客户参与度。现在您可以在应用程序中跟踪自定义事件,了解用户操作,并在 HockeyApp 站点上查看聚合数据。
反馈:从您的应用程序内部收集用户反馈,并使用 HockeyApp 后端与他们直接沟通。
将分析添加到 Sparkle:如果您使用 Sparkle 提供应用程序更新(HockeyApp 也支持用于 beta 分发的 Sparkle 流),SDK 包含帮助程序来将一些分析数据添加到每个 Sparkle 请求。
此文档包含以下部分
我们建议将我们的二进制文件集成到您的 Xcode 项目中,以为您 OS X 应用程序设置 HockeySDK。您还可以使用我们位于 HockeyApp for Mac 中的交互式 SDK 集成向导,该向导涵盖了以下步骤的所有内容。有关其他设置 SDK 的方法,请参阅 高级设置。
请参阅 "如何创建一个新的应用" 指南。这将为您提供用于初始化 SDK 的 HockeyApp 特定应用标识符。
HockeySDK-Mac
的文件夹。(请确保不要使用第三方解压工具!)根据我们的经验,第三方库通常位于一个子目录中(让我们将我们的子目录称为 Vendor
),因此如果您没有使用库子目录组织项目,现在开始组织会是个好主意。为了继续我们的示例,在项目目录中创建一个名为 Vendor
的文件夹,并将解压后的 HockeySDK-Mac
文件夹移动到其中。
我们建议使用 Xcode 的组功能创建一个类似于磁盘上我们的文件结构的第三方库组。例如,类似于 2.3 上述的文件结构,我们的项目有一个名为 Vendor
的组。
确保 项目导航器
是可见的(⌘+1)
将 HockeySDK.framework
从 Finder 中的窗口拖放到 Xcode 中的项目,并将其移动到 项目导航器
中希望的位置(例如,移动到名为 Vendor
的组)
将出现一个弹出窗口。选择 为任何添加的文件夹创建组
并为目标设置复选标记。然后单击 完成
。
现在我们将确保框架被复制到您的应用程序包中
项目导航器
中的您的项目(⌘+1)。构建阶段
选项卡。添加构建阶段
按钮,并选择 添加复制文件
。框架
。HockeySDK-Mac
从项目导航器左边的侧边栏拖放到新 复制文件
阶段的列表中。由于 SDK 会在 Keychain 中存储与用户相关的输入以保护隐私,因此请确保为应用程序签名
Objective-C
AppDelegate.m
文件。import
语句下方添加以下行@import HockeySDK;
applicationDidFinishLaunching:
[[BITHockeyManager sharedHockeyManager] configureWithIdentifier:@"APP_IDENTIFIER"];
// Do some additional configuration if needed here
[[BITHockeyManager sharedHockeyManager] startManager];
Swift
AppDelegate.swift
文件。import HockeySDK
applicationWillFinishLaunching
BITHockeyManager.shared().configure(withIdentifier: "APP_IDENTIFIER")
// Do some additional configuration if needed here
BITHockeyManager.shared().start()
注意: 如果是文档为基础的应用,请在 applicationDidFinishLaunching
的末尾调用 startManager
,否则您可能丢失恢复、打开未命名文档等的苹果事件。
如果您的应用程序上次运行后已保存任何崩溃报告,则 startManager
将弹出一个对话框,允许用户提交它。完成提交或如果没有崩溃日志,它将回调用您的 appDelegate
并调用 showMainApplicationWindowForCrashManager:
(如果实现,请见改进的启动崩溃处理)。
恭喜,现在您已经准备好使用HockeySDK了!
CocoaPods 是Objective-C的依赖关系管理器,它能自动并简化在项目中使用如HockeySDK等第三方库的过程。要了解如何为您的项目设置CocoaPods,请访问官方CocoaPods网站。
Podfile
platform :osx, '10.9'
pod "HockeySDK-Mac"
以下选项仅显示与崩溃报告功能交互和微调的某些可能性。有关更多信息,请参见文档中 BITCrashManager
类的完整文档。
HockeySDK默认启用崩溃报告。崩溃将在下次应用程序启动时立即发送到服务器。
为了提供最好的崩溃报告,我们使用PLCrashReporter的1.2/提交356901d7f3ca3d46fbc8640f469304e2b755e461版本。
可以通过以下方式禁用此功能
Objective-C
[[BITHockeyManager sharedHockeyManager] configureWithIdentifier:@"APP_IDENTIFIER"];
[[BITHockeyManager sharedHockeyManager] setDisableCrashManager: YES]; //disable crash reporting
[[BITHockeyManager sharedHockeyManager] startManager];
Swift
BITHockeyManager.shared().configure(withIdentifier: "APP_IDENTIFIER")
BITHockeyManager.shared().isCrashManagerDisabled = true
BITHockeyManager.shared().start()
崩溃将在下次应用程序启动时发送。如果将 crashManagerStatus
设置为 BITCrashManagerStatusAutoSend
,则崩溃将无需用户交互即可发送,否则将出现一个提示框,让用户选择是否要发送报告。
Objective-C
[[BITHockeyManager sharedHockeyManager] configureWithIdentifier:@"APP_IDENTIFIER"];
[[BITHockeyManager sharedHockeyManager].crashManager setAutoSubmitCrashReport: YES];
[[BITHockeyManager sharedHockeyManager] startManager];
Swift
BITHockeyManager.shared().configure(withIdentifier: "APP_IDENTIFIER")
BITHockeyManager.shared().crashManager.isAutoSubmitCrashReport = true
BITHockeyManager.shared().start()
SDK故意不在崩溃发生时立即发送报告,因为实现这种机制可能不安全,同时也不会造成更多危险,如设备的死锁。我们发现用户确实会再次启动应用程序,因为大多数人不知道发生了什么,并且您将得到迄今为止最多的报告。
启动时发送报告是通过异步方式完成的(非阻塞)。这是确保应用程序不会因iOS监视进程而被意外杀死的唯一安全方法,因为启动可能会花费太长时间,而当网络状况不佳或连接可能非常缓慢时,应用程序无法对任何用户输入做出反应。
在Mac OS X上,有三种类型的崩溃不会报告给注册的 NSUncaughtExceptionHandler
NSUncaughtExceptionHandler
不会在 NSApplication
调用其所有代理方法之后开始工作!例如- (void)applicationDidFinishLaunching:(NSNotification *)note {
...
[NSException raise:@"ExceptionAtStartup" format:@"This will not be recognized!"];
...
}
NSApplication
中默认的 NSUncaughtExceptionHandler
只会将异常记录到控制台并结束其处理。这导致在 NSApplication
“作用域”中发生的异常不会在已注册的自定义 NSUncaughtExceptionHandler
中发生。例如- (void)applicationDidFinishLaunching:(NSNotification *)note {
...
[self performSelector:@selector(delayedException) withObject:nil afterDelay:5];
...
}
- (void)delayedException {
NSArray *array = [NSArray array];
[array objectAtIndex:23];
}
- (IBAction)doExceptionCrash:(id)sender {
NSArray *array = [NSArray array];
[array objectAtIndex:23];
}
通常有两种解决方案。第一种方案是使用NSExceptionHandler
类代替NSUncaughtExceptionHandler
。但这种方法有一些缺点,具体细节可参考BITCrashReportExceptionApplication.h
。
因此,我们提供了一个可选的NSApplication
子类BITCrashExceptionApplication
,用于处理2和3种情况。
安装
Info.plist
文件。Principal class
(主要类)。NSApplication
替换为BITCrashExceptionApplication
。或者,如果您有自己的NSApplication
子类,请将其改为继承自BITCrashExceptionApplication
。
BITHockeyManagerDelegate
协议提供了向崩溃报告添加额外数据的方法。
Objective-C
- (NSString *)userIDForHockeyManager:(BITHockeyManager *)hockeyManager componentManager:(BITHockeyBaseManager *)componentManager;
Swift
可选公共函数
Objective-C
- (NSString *)userNameForHockeyManager:(BITHockeyManager *)hockeyManager componentManager:(BITHockeyBaseManager *)componentManager;
Swift
可选公共函数
Objective-C
- (NSString *)userEmailForHockeyManager:(BITHockeyManager *)hockeyManager componentManager:(BITHockeyBaseManager *)componentManager;
Swift
可选公共函数
BITCrashManagerDelegate
协议(它是自动包含在BITHockeyManagerDelegate
中的)提供了向崩溃报告添加更多崩溃特定数据的方法
Objective-C
-(NSString *)applicationLogForCrashManager:(BITCrashManager *)crashManager
Swift
可选公共函数
查看以下教程获取添加CocoaLumberjack日志数据的示例:如何在iOS或OS X上添加特定于应用程序的日志数据
Objective-C
-(BITHockeyAttachment *)attachmentForCrashManager:(BITCrashManager *)crashManager
Swift
可选公共函数
确保实现协议
Objective-C
@interface YourAppDelegate () <BITHockeyManagerDelegate> {}
@end
Swift
class YourAppDelegate: NSObject, BITHockeyManagerDelegate {
}
并设置代理
Objective-C
[[BITHockeyManager sharedHockeyManager] configureWithIdentifier:@"APP_IDENTIFIER"];
[[BITHockeyManager sharedHockeyManager] setDelegate: self];
[[BITHockeyManager sharedHockeyManager] startManager];
Swift
BITHockeyManager.shared().configure(withIdentifier: "APP_IDENTIFIER")
BITHockeyManager.shared().delegate = self
BITHockeyManager.shared().start()
HockeyApp会自动向您提供清晰、明智且富有信息量的指标,关于您的应用如何被使用以及由谁使用。
如果需要禁用自动收集匿名用户和会话统计数据,您在任何时候都可以关闭此功能
Objective-C
[BITHockeyManager sharedHockeyManager].disableMetricsManager = YES;
Swift
BITHockeyManager.shared().isMetricsManagerDisabled = true
通过跟踪自定义事件,现在您可以深入了解客户如何使用您的应用,了解他们的行为,在改进应用的同时回答重要的业务或用户体验问题。
Objective-C
BITMetricsManager *metricsManager = [BITHockeyManager sharedHockeyManager].metricsManager;
[metricsManager trackEventWithName:eventName]
Swift
let metricsManager = BITHockeyManager.shared().metricsManager
metricsManager.trackEvent(withName: eventName)
限制
可以将属性和/或度量添加到自定义事件。
Objective-C
BITMetricsManager *metricsManager = [BITHockeyManager sharedHockeyManager].metricsManager;
NSDictionary *myProperties = @{@"Property 1" : @"Something",
@"Property 2" : @"Other thing",
@"Property 3" : @"Totally different thing"};
NSDictionary *myMeasurements = @{@"Measurement 1" : @1,
@"Measurement 2" : @2.34,
@"Measurement 3" : @2000000};
[metricsManager trackEventWithName:eventName properties:myProperties measurements:myMeasurements]
Swift
let myProperties = ["Property 1": "Something", "Property 2": "Other thing", "Property 3" : "Totally different thing."]
let myMeasurements = ["Measurement 1": 1, "Measurement 2": 2.3, "Measurement 3" : 30000]
let metricsManager = BITHockeyManager.shared().metricsManager
metricsManager.trackEvent(withName: eventName, properties: myProperties, measurements: myMeasurements)
BITFeedbackManager
允许您的用户通过应用程序和集成用户界面直接与您沟通。它提供了一个单线程的用户与运行您的应用程序的用户之间的讨论。如果将实际视图控制器集成到您的应用程序中,则此功能将启用。
您不应该创建自己的 BITFeedbackManager
实例,而应使用由 [BITHockeyManager sharedHockeyManager]
提供的实例。
Objective-C
[BITHockeyManager sharedHockeyManager].feedbackManager
Swift
BITHockeyManager.shared().feedbackManager
请查阅 BITFeedbackManager
类的文档了解更多如何利用此功能的信息。
安装 Sparkle SDK:http://sparkle-project.org 截至 2016 年 1 月,Sparkle 不支持 Mac 闷盒(sandbox)。如果您需要此功能,请查看以下讨论 https://github.com/sparkle-project/Sparkle/issues/363
将 SUFeedURL
设置为 https://rink.hockeyapp.net/api/2/apps/<APP_IDENTIFIER>
并将 <APP_IDENTIFIER>
替换为用于初始化 HockeySDK 的相同值
创建应用程序捆绑包的 .zip
文件并将其上传到 HockeyApp。
sparkleUpdater.sendsSystemProfile = YES;
SUUpdater
绑定到您的 appDelegate!)- (NSArray *)feedParametersForUpdater:(SUUpdater *)updater
sendingSystemProfile:(BOOL)sendingProfile {
return [[BITSystemProfile sharedSystemProfile] systemUsageData];
}
一个示例场景是在应用程序启动或进入前台时以及当应用程序进入后台或被终止时
- (void)applicationWillFinishLaunching:(NSNotification *)aNotification
…
NSNotificationCenter *dnc = [NSNotificationCenter defaultCenter];
BITSystemProfile *bsp = [BITSystemProfile sharedSystemProfile];
[dnc addObserver:bsp selector:@selector(startUsage) name:NSApplicationDidBecomeActiveNotification object:nil];
[dnc addObserver:bsp selector:@selector(stopUsage) name:NSApplicationWillTerminateNotification object:nil];
[dnc addObserver:bsp selector:@selector(stopUsage) name:NSApplicationWillResignActiveNotification object:nil];
…
};
为了检查数据是否正确发送到 HockeyApp 以及在控制台中查看一些额外的 SDK 调试日志数据,请在调用 startManager
之前添加以下行
Objective-C
[[BITHockeyManager sharedHockeyManager] configureWithIdentifier:@"APP_IDENTIFIER"];
[BITHockeyManager sharedHockeyManager].logLevel = BITLogLevelDebug;
[[BITHockeyManager sharedHockeyManager] startManager];
Swift
BITHockeyManager.shared().configure(withIdentifier: "APP_IDENTIFIER")
BITHockeyManager.shared().logLevel = BITLogLevel.debug
BITHockeyManager.shared().start()
我们的文档可在中国 HockeyApp 上找到:HockeyApp。
确保应用程序的构建设置中将 LD_RUNPATH_SEARCH_PATHS
设置为 @executable_path/../Frameworks
确保没有激活的 所有异常
断点或在仅限于 Objective-C
的前提下并排除 C++
。
启用控制台的调试输出以看到初始化 SDK 模块、发送和接收网络请求以及更多信息,请在调用 startManager
之前添加以下代码
[BITHockeyManager sharedHockeyManager].logLevel = BITLogLevelDebug;
我们期待您通过拉取请求来贡献。
开发环境
本项目采用了微软开源行为准则。更多信息请查看行为准则常见问题解答或通过联系邮箱。[email protected]提出任何额外的问题或评论。
在提交拉取请求之前,您必须签署贡献者许可协议。要完成贡献者许可协议(CLA),您需要通过表格提交请求,并在收到包含文档链接的邮件后在线签署CLA。您只需要签署一次CLA即可涵盖对任何Microsoft OSS项目的提交。
如果您有进一步的问题或遇到无法通过此处任何步骤解决的问题,请在这里打开一个GitHub问题或通过联系邮箱。[email protected]联系。