Next generation debugging framework for iOS

Related tags

Debugging Alpha
Overview

alpha

 

Issues on Waffle Built by Dominus Build Status Carthage compatible Obj-C Code Pod Version Pod Platform Pod License

Alpha is the idea of a next generation debugging framework for iOS applications. It combines multiple debugging tools built on top of a simple, unified API. It lives entirely in your application sandbox and collects information during your application lifetime. The integration can be done in less than a minute and requires no code changes.

Watch presentation by Dal Rupnik of Alpha idea at SwiftConf 2015.

The project is a work in progress and might be too unstable to be used in real environment yet. Feel free to open GitHub issues (especially Swift projects). Currently the most unstable is the Heap plugin, so it might be best to avoid using it (might be removed in the future, as it is technically impossible to know when memory is freed by the OS in an asynchronous way).

intro

Features

Features are separated into plugins, which can be enabled or disabled, depending on application requirements.

  • Application - displays a list of all installed applications on the device.
  • Bootstrap - checks for KZBootstrap environments and allows modifying them in real-time (deprecated).
  • Console - displays console logs (logged by NSLog) inside the application.
  • Event - logs and displays application wide events such as background state transitions and view controller appearances.
  • File - allows browsing the sandboxed file system and previewing common file types, such as images, videos and text.
  • Global - information plugin displays linked frameworks, libraries and classes.
  • Heap - allows inspection of active object instances on ther heap and helps with debugging memory errors.
  • Interface - plugin is a specific plugin and is required to display Alpha menu interface and actions.
  • Keychain - browse items in keychain added by the application.
  • Network - logs network connections made using NSURLSession and NSURLConnection API's.
  • Notification - displays scheduled and fired local notifications, received push notifications and notification permissions.
  • Object - allows for inspection of any class or object in the application, including NSUserDefaults, arrays and dictionaries.
  • Permission - displays current permissions and adds the ability to request specific permission.
  • Remote - plugin allows connecting to Alpha from another device (needs Bonjour running on target).
  • Screenshot - plugin allows taking screenshots of the application with a single action.
  • Server - contains a simple Bonjour server allowing Alpha to work over local Wi-Fi network.
  • State - allows inspecting the device state and settings, such as locale, time and available memory.
  • Touch - plugin displays touches on screen when activated and their force touch.
  • View - allows view hierarchy manipulation and inspection in real-time.

Currently work in progress:

0.4.0

  • Application State Snapshot
  • Display crashes inside Alpha
  • Font Family list
  • Remote client target
  • Larger example apps with more functionality
  • In-app debugger
  • Resetting permissions (if possible to implement over TCC framework)

Themes

Alpha is meant to work with any application, but the default dark theme does not always fit best with the application color scheme.

To fit in with any application Alpha has theme support, which allows you to choose the color palette you wish to display Alpha in.

Default Formentera Notio

There are 6 themes available:

If is also possible to create your own theme and use it in Alpha system.

Read more on Themes.

Triggers

Triggers are a way to activate Alpha interface from your application. By default Alpha provides two triggers:

  • Shake Trigger - Activates when device is shaken two times in less than 5 seconds.
  • Tap Trigger - Activates when 3 fingers are pressed for 3 seconds anywhere in the application.

Both triggers are activated by default. Alternatively you can implement your own trigger or use the manual trigger.

Read more on Triggers.

Integration

Alpha is separated into 2 frameworks:

  • Service
    • Plugins
  • Interface

Service module is installed into your app and executed when the application launches. It automatically initializes plugins and starts collecting data from your application.

Service framework includes Bonjour server, which can be activated by any of the available triggers.

Alpha.framework includes both Service framework and interface module.

To use Alpha in your project, all you need to do is add a CocoaPods library:

pod 'Alpha'

This automatically includes all plugins and features. To avoid clashes with any libraries used in application, all Alpha classes use ALPHA prefix (even classes ported from other libraries). The recommended way is to ignore Alpha version and always use the latest version, to ensure best stability possible.

You can also pick only the plugins you need manually.

pod 'Alpha/Bonjour'
pod 'Alpha/Interface'
pod 'Alpha/State'

To use automatic integration feature, add Integration subspec (when using Alpha pod, it is automatically included).

pod 'Alpha/Integration'

Alpha supports iOS 8 and up. Not all features are available on all versions. tvOS and watchOS versions coming soon.

Read more on Integration.

The Story

Alpha originally started as an unofficial fork from FLEX (Flipboard Explorer). It began with a simple desire to add multiple features to FLEX, but looking at it more and more, it was obvious that many architectural changes were required to support remote clients. Those kind of changes are the hardest to merge into original repository without breaking multiple features, it was obvious that it fits more to create a separate repository.

So Alpha was converted into a separate repository and work began on top of that. Many features were added and there are many architectural changes under the hood. Alpha is now not a separate tool, but a framework that offers a full API. Features from tools are now working on top of plugin API, which allows dynamic loading and incredible extensibility.

Documentation

The entire Alpha documentation is available on Wiki and on CocoaDocs.

Contributions

To contribute to Alpha, please open pull requests. Any feature implementations or improvements, bug fixes, documentation are very welcome.

Thanks

This project would not be possible without all the work done by many respected community contributors. Thanks to all contributors of the following projects:

Contact

Dal Rupnik

License

Alpha is released under the MIT license. See LICENSE file for more information.

Comments
  • Alpha pod: Unable to satisfy the following requirements

    Alpha pod: Unable to satisfy the following requirements

    Current version of Alpha.podspec is not workable. The last right pod spec was 0.2.4. The next string is used in Podfile: pod 'Alpha', :git => "https://github.com/Legoless/Alpha.git", :tag => "0.2.6"

    opened by OdNairy 4
  • Appdelegate support custom window

    Appdelegate support custom window

    Current implementation doesn't work for not-storyboard based rootViewControllers. We will use not storyboard-based rootVC in the case of custom controller stack initialisation (some state preservation e.g.).

    opened by OdNairy 4
  • Application Plugin

    Application Plugin

    Applications List task There are new plugin which presents list of installed applications separated by category (User, System, Internal). Internal apps group wouldn't show until any of internal apps will be find. Each application object leads to LSApplicationProxy - private class representing application installation. You can find a lot of useful information about application from it.

    opened by OdNairy 3
  • Text is unreadable on Method Call screen

    Text is unreadable on Method Call screen

    Pallete doesn't apply to the cells of the Method call screen so text is absolutely unreadable. It is hard to see but text is there :)

    UIWindow 0x14154ba50
    -(BOOL)_appearsInLoupe
    

    screen shot 2015-07-23 at 17 29 59

    bug 
    opened by OdNairy 1
  • View Hierarchy plugin draw fixes

    View Hierarchy plugin draw fixes

    This PR fix background color drawing on DepthIndicatorView. Also the first line in DepthIndicatorView will draw in full width. Have a look thought last commit.

    opened by OdNairy 0
  • Support Class object in ObjectSource

    Support Class object in ObjectSource

    The PR enabling Global State -> * Classes. Also PR supports Class Object and disable Class not-related actions. Live objects shortcut enabled for all objects. Shortcuts need another PR to get full enabled.

    opened by OdNairy 0
  • Object references feature is not available

    Object references feature is not available

    The Object Graph section was nonfunctional by a reason of wrong if statement which checked the simplest condition first so the complicated condition for Object Graph Request wasn't allowed ever. Also some description presentation improvements included.

    opened by OdNairy 0
  • Fix heap plugin object selection

    Fix heap plugin object selection

    Heap plugin items was not selectable. Fixed crash for arrays which contains self reference (as well as other objc collection types NSDictionary, NSSet, NSOrderedSet, NSHashTable, NSMapTable, NSPointerArray).

    opened by OdNairy 0
  • Update Device Status Collector

    Update Device Status Collector

    Update device status collector with properties in anonymous category and add core telephony data. Also add extension information, such as Apple Watch info, Keyboard info, available sharing plugins, etc... Device name.

    enhancement 
    opened by Legoless 0
  • Permissions plugin

    Permissions plugin

    Add a permissions plugin that displays the state of permissions of the app:

    • Location permissions
    • Notification permissions
    • Microphone permissions
    • Camera & Photo permissions
    • Background permissions
    feature 
    opened by Legoless 0
  • Signature Theme

    Signature Theme

    Create Alpha Signature Theme to be shipped as Default Theme of Alpha. Other themes (Dark, Light, ...) are deployed as part of specific CocoaPod subspec.

    enhancement 
    opened by Legoless 0
  • Improve shortcuts list

    Improve shortcuts list

    Currently the list of shortcuts is very poor. We need to improve list and this issue can be a start point for it. Current list:

    • UIViewController
      • Push View Controller
      • View
    • UIView
      • View Controller
      • Preview Image
    • CALayer
      • Preview Image

    Shortcuts suggestion will be added to this tread.

    enhancement ready 
    opened by OdNairy 0
  • Keychain.app

    Keychain.app

    It would be awesome if Alpha would integrate a little Keychain.app like the Mac app, with all the keys being in the Sandbox of the app, with ability to delete or modify or add.

    feature in progress 
    opened by stuffmc 17
Releases(0.2.8)
Owner
Dal Rupnik
CTO at @blubblub · Developer · Speaker · Mentor · iOS · Machine Learning · AI · Vision
Dal Rupnik
A lightweight, one line setup, iOS / OSX network debugging library! 🦊

Netfox provides a quick look on all executed network requests performed by your iOS or OSX app. It grabs all requests - of course yours, requests from

Christos Kasketis 3.4k Dec 28, 2022
Remote network and data debugging for your native iOS app using Chrome Developer Tools

PonyDebugger PonyDebugger is a remote debugging toolset. It is a client library and gateway server combination that uses Chrome Developer Tools on you

Square 5.9k Dec 24, 2022
Set of easy to use debugging tools for iOS developers & QA engineers.

DBDebugToolkit DBDebugToolkit is a debugging library written in Objective-C. It is meant to provide as many easily accessible tools as possible while

Dariusz Bukowski 1.2k Dec 30, 2022
An in-app debugging and exploration tool for iOS

FLEX FLEX (Flipboard Explorer) is a set of in-app debugging and exploration tools for iOS development. When presented, FLEX shows a toolbar that lives

FLEXTool 13.3k Dec 31, 2022
Chisel is a collection of LLDB commands to assist debugging iOS apps.

Chisel Chisel is a collection of LLDB commands to assist in the debugging of iOS apps. [Installation • Commands • Custom Commands • Development Workfl

Facebook 8.9k Jan 6, 2023
Dotzu In-App iOS Debugging Tool With Enhanced Logging, Networking Info, Crash reporting And More.

Dotzu In-App iOS Debugging Tool With Enhanced Logging, Networking Info, Crash reporting And More. The debugger tool for iOS developer. Display logs, n

Remi ROBERT 1.8k Jan 3, 2023
iOS network debugging, like a wizard 🧙‍♂️

Start debugging iOS network calls like a wizard, without extra code! Wormholy makes debugging quick and reliable. What you can do: No code to write an

Paolo Musolino 2.1k Jan 8, 2023
Profiling / Debugging assist tools for iOS. (Memory Leak, OOM, ANR, Hard Stalling, Network, OpenGL, Time Profile ...)

MTHawkeye Readme 中文版本 MTHawkeye is profiling, debugging tools for iOS used in Meitu. It's designed to help iOS developers improve development producti

meitu 1.4k Dec 29, 2022
Free macOS app for iOS view debugging.

Introduction You can inspect and modify views in iOS app via Lookin, just like UI Inspector in Xcode, or another app called Reveal. Official Website:h

Li Kai 575 Dec 28, 2022
A collection of tools for debugging, diffing, and testing your application's data structures.

Custom Dump A collection of tools for debugging, diffing, and testing your application's data structures. Motivation customDump diff XCTAssertNoDiffer

Point-Free 631 Jan 3, 2023
Droar is a modular, single-line installation debugging window

Droar is a modular, single-line installation debugging window. Overview The idea behind Droar is simple: during app deployment stages, adding quick ap

Myriad Mobile 55 Sep 24, 2022
Convenient debugging button.

FunnyButton Example 在平时开发,运行期间有时候想中途看一下某个视图或变量的信息,虽说打断点是可以查看,但有时候断点调试有时候会卡住好一会才能看到(尤其是大项目经常卡很久),极度影响效率。 基于这种情况,FunnyButton就是为了能够便捷调试的全局按钮,添加好点击事件,就能随时

健了个平_(:з」∠)_ 2 Sep 20, 2022
A little and powerful iOS framework for intercepting HTTP/HTTPS Traffic.

A little and powerful iOS framework for intercepting HTTP/HTTPS Traffic from your app. No more messing around with proxy, certificate config. Features

Proxyman 874 Jan 6, 2023
In-app console and debug tools for iOS developers

LocalConsole Welcome to LocalConsole! This Swift Package makes on-device debugging easy with a convenient PiP-style console that can display items in

Duraid Abdul 650 Jan 1, 2023
Customizable Console UI overlay with debug log on top of your iOS App

AEConsole Customizable Console UI overlay with debug log on top of your iOS App AEConsole is built on top of AELog, so you should probably see that fi

Marko Tadić 142 Dec 21, 2022
a iOS network debug library, monitor HTTP requests

NetworkEye README 中文 NetworkEye,a iOS network debug library,monitor HTTP requests. It can be detected HTTP request include web pages, NSURLConnection,

coderyi 1.4k Dec 31, 2022
Tool to debug layouts directly on iOS devices: inspect layers in 3D and debug each visible view attributes

Introduction Features Inspect layouts directly on iOS devices Inspection could be triggered only if app is running under DEBUG build configuration, so

Ihor Savynskyi 510 Dec 24, 2022
blued enhanced tweak for iOS

BLUEDHOOK 本项目支持 Blued、Blued 极速版。 非越狱机型请通过 Monkeydev 环境打包 ipa 或 dylib/deb 进行重签名,越狱机型直接安装 release deb 即可。 已知问题 重签后不支持 apns 推送 同时安装 Blued、Blued 极速版 并登录同一

null 22 Oct 22, 2022
TouchInspector - a lightweight package that helps you visualize and debug touches on iOS and iPadOS

TouchInspector is a lightweight package that helps you visualize and debug touches on iOS and iPadOS.

Janum Trivedi 116 Jan 3, 2023