SPDebugMenu 是一个 iOS 开发者的库,用于在他们的应用程序中显示可自定义操作的调试菜单。
它支持
使用 CocoaPods
将 SPDebugMenu 添加到您的 Podfile 中
platform :ios, "6.0"
pod 'SPDebugMenu'
运行以下命令
pod install
静态库
克隆项目或将它添加为子模块。将 SPDebugMenu.xcodeproj 拖到您的项目中,将其添加为目标依赖项并链接 libSPDebugMenu.a。然后,您可以简单地这样做
#import <SPDebugMenu/SPDebugMenu.h>
手动
克隆项目或将它添加为子模块。将整个 SPDebugMenu 文件夹拖到您的项目中。
为了启用您的调试菜单,您只需要将其实例化并将其与一个窗口相关联,然后注册一些触发器和动作。您可以在您的 UIApplicationDelegate
的 application:didFinishLaunchingWithOptions:
方法中这样做
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
...
self.window = ...;
...
// Configure the debug menu
self.debugMenu = [[SPDebugMenu alloc] initWithWindow:self.window];
[self.debugMenu registerTrigger:...];
[self.debugMenu registerAction:...];
...
}
SPDebugMenu 提供了一些有用的触发器,这样您就不需要为特定情况编写自己的了。
SPDebugMenuTapTrigger
将在检测到指定数量的点击并在视图中指定数量的触摸后触发调试菜单 SPDebugMenuTapTrigger *tapTrigger = [[SPDebugMenuTapTrigger alloc] init];
tapTrigger.view = self.window; // Detect taps in the whole window
tapTrigger.numberOfTouchesRequired = 2; // Two fingers required
tapTrigger.numberOfTapsRequired = 5; // Five taps required
SPDebugMenuLongPressTrigger
将在检测到指定数量的触摸并在视图中长按手势后触发调试菜单 SPDebugMenuLongPressTrigger *longPressTrigger = [[SPDebugMenuLongPressTrigger alloc] init];
longPressTrigger.view = self.window; // Detect taps in the whole window
longPressTrigger.numberOfTouchesRequired = 2; // Two fingers required
SPDebugMenuShakeTrigger
将在设备摇晃后触发调试菜单。此触发器需要一个更复杂的配置与某些实体(通常为窗口)来告知它摇晃。为了使这个过程更容易,SPDebugMenu 包括一个名为 SPShakeTriggerWindow
的 UIWindow
子类,它可以存储对 SPDebugMenuShakeTrigger
的引用并通知它运动事件。这样,您可以将您的 UIWindow
作为 SPShakeTriggerWindow
的子类用于调试构建而不要在发布构建中。下面是一个示例说明您如何准备应用程序以使用摇晃触发器来显示调试菜单- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
SPShakeTriggerWindow *shakeTriggerWindow = [[SPShakeTriggerWindow alloc]
initWithFrame:[[UIScreen mainScreen] bounds]];
self.window = shakeTriggerWindow;
...
// Configure the debug menu
self.debugMenu = [[SPDebugMenu alloc] initWithWindow:self.window];
...
// Configure a shake trigger (requires a ShakeTriggerWindow)
SPDebugMenuShakeTrigger *shakeTrigger = [[SPDebugMenuShakeTrigger alloc] init];
// Here is where we wire the window and the trigger to be notified about motion events
shakeTriggerWindow.shakeTrigger = shakeTrigger;
// Finally we register the trigger
[self.debugMenu registerTrigger:shakeTrigger];
}
如果这些触发器中没有一个是您满意的,您始终可以编写自己的触发器。您只需编写一个实现 SPDebugMenuTriggering
协议的类,将您的触发逻辑放在其中,并通过调用其代理的 debugMenuWasTriggered:
方法来显示调试菜单。
操作以简单菜单的形式展示,允许用户更改某些设置或执行一些在调试构建中对开发者有用的操作。
您最可能会使用的操作是在发现错误时,发送包含截图和一些信息的电子邮件给开发者或问题跟踪系统。SPDebugMenu 包含 SPSendReportAction
操作,它已经允许您完成所有这些操作。它将显示一个预填充数据的邮件编辑屏幕(包括应用当前状态的截图)。已填写的数据通过一个实现 SPSendReportStatusComposing
协议的类收集,该协议包含三个方法
currentStatus
:包含要发送文本的 NSString
(收集一些信息,如当前用户、连接状态等)。subject
:要发送的电子邮件的主题。defaultRecipients
:将报告发送到的默认收件人(电子邮件地址)的 NSArray
。// Configure a "Send report" action
SPExampleStatusComposer *statusComposer = [[SPExampleStatusComposer alloc] init];
SPSendReportAction *sendReportAction = [[SPSendReportAction alloc] init];
sendReportAction.statusComposer = statusComposer;
[self.debugMenu registerAction:sendReportAction];
如果您想模拟设备中的内存警告,有一个名为 SPSimulateMemoryWarningAction
的操作,您可以将此操作包含在调试菜单中以实现此目的。
// Configure a "Simulate memory warning" action
SPSimulateMemoryWarningAction *simulateMemoryWarningAction = [[SPSimulateMemoryWarningAction alloc] init];
[self.debugMenu registerAction:simulateMemoryWarningAction];
为了定制操作,您可以通过以下方法创建一个实现 SPDebugMenuAction
协议的类
prepare
:当调试菜单即将显示时将调用此方法。如果您的操作在菜单实际显示之前需要一些工作,这是执行工作的地方。例如:取应用截图。performActionWithNavigationController:
:这是操作执行实际工作的地方。它可以通过操作发生的导航控制器显示新的视图控制器。dispose
:在即将关闭调试菜单之前调用此方法。其目的是进行任何“清理工作”(如释放在 'prepare' 方法中拍摄的截图)。shouldDismissDebugMenuAfterFinish
:指示在操作完成后是否应关闭调试菜单的标志。shouldReloadDebugMenuAfterFinish
:指示在操作完成后是否应刷新调试菜单的标志。此类还应在动作开始和结束时分别调用其代理的 debugMenuActionDidStart:
和 debugMenuActionDidEnd:
方法。
SPDebugMenu 需要 iOS 6.0 和 ARC。
您仍然可以在非 ARC 项目中使用 SPDebugMenu。只需在每个源文件中设置 -fobjc-arc
编译器标志。
除了本 README 中的代码外,您还可以在 SPDebugMenuExample 中看到包含多个触发器和操作的完整示例。
SPDebugMenu 由 Sergio Padrino 创建:@sergiou87。
如果您想为此项目做出贡献,请按照以下步骤操作
SPDebugMenu 在 MIT 许可证下提供。有关更多信息,请参阅LICENSE 文件。