All new design. Inspect your iOS application at runtime.

Overview

Peek Site

Carthage Version License Language Platform

Peek: All new design

Peek 5 with an all new design and all new features. Whether you're a developer, designer or QA/tester, Peek can help you at all stages of your development process.

Watch the Promo to see it in action.

Unified Inspectors

All inspectors and attributes have now been unified into a single window, making inspection simpler and faster than ever before.

Collapsible Groups

Feeling overwhelmed with all the information Peek has to offer? Simply tap the header to expand/collapse any section. Peek will even remember your choice across launches!

Nested Inspectors

Peek now supports nested Inspectors. This powerful feature allows Peek to surface even more detail about your application. In fact Peek 5.0 more than doubles the number of attributes it can inspect.

Previews

Views, images, colours and more can now provide snapshot previews to help you better identify what you’re inspecting.

Reporting

An all new reporting system allows you to export screenshots, metadata and even suggested values using the iOS native share sheet.

Accessibility

Peek itself is now more accessible with Dynamic Type, but Peek can also surface accessibility details from your application.

Search

You can now search within Peek, making it easier than ever to inspect your apps.

Less Code & Dependencies

Thanks to an all new architecture Peek is also now smaller. Providing more features with much less code, leaving a very small footprint on your application.

Ready to get started?

Designers & Testers

  • Simply press one of your volume key(s) to show & hide Peek
  • Now tap or drag your finger across the screen
  • Tap the inspectors button (or double tap anywhere on the screen) to show the Inspectors for the selected view

You can't get simpler than that!

Developers

Device

The simplest way to integrate Peek into your project is to use Cocoapods or Carthage:

# Cocoapods
pod 'Peek', :configurations => ['Debug']

# Carthage
github "shaps80/Peek" ~> 5.1.0

You only need 1 line of code to enable Peek in your application:

window?.peek.enabled = true

Simulator

When running in the Simulator you'll need a couple of extra lines:

// Your AppDelegate
override func motionBegan(_ motion: UIEventSubtype, with event: UIEvent?) {
    // iOS 8/9 requires device motion handlers to be on the AppDelegate
    window?.peek.handleShake(motion)
}

or

// Your ViewController
override var canBecomeFirstResponder: Bool {
    return true
}

override func motionBegan(_ motion: UIEventSubtype, with event: UIEvent?) {
    // iOS 10 now requires device motion handlers to be on a UIViewController
    UIApplication.shared.keyWindow?.peek.handleShake(motion)
}

Now you can press CMD+CTRL+Z (or use the Menu option) to show/hide Peek in your Simulator.

Contributing

Contributions to Peek are welcomed and encouraged!

It is easy to get involved. Please see the Contributing guide for more details.

A list of contributors is available through GitHub.

To give clarity of what is expected of our community, Peek has adopted the code of conduct defined by the Contributor Covenant. This document is used across many open source communities, and I think it articulates my values well. For more, see the Code of Conduct.

What is Peek?

Peek on Vimeo

Peek is an open source framework that provides runtime inspection of your application while its running on your device (or Simulator).

  • Developers can use Peek to inspect their user interfaces at runtime.
  • Designers can verify that the applications meets their design specifications.
  • Testers and QA can check accessibility identifiers, validate behaviour and report issues.

Peek is a tool to aide you at all stages of your development process.

How does Peek work?

Peek scans your entire user interface on the screen then provides overlays with layout information and attribute inspectors.

Peek includes an intelligent filtering system to best determine which views you care about while ignoring those you are not likely to be interested in.

For example, by default Peek will not show you many of Apple's system components unless they are subclassed.

Peek presents itself in its own window that sits directly on top of your own app's user interface to ensure that it doesn't interfere with normal functionality.

Peek also allows you to test all supported orientations on both iPhone and iPad.

Most importantly Peek doesn’t interfere with your applications logic or user interface in anyway. It provides read-only inspection to guarantee you’re seeing live-values only!

Demo

If you're not ready to integrate Peek into your own project, You can simply download this repo and run the sample project included :)

Its a small app that perfectly demonstrates the power of Peek!

Configuring Peek

Peek allows many options to be configured, allowing you more control over how Peek is configured as well as reporting options:

window?.peek.enableWithOptions { options in
    options.theme = .black
    options.activationMode = .auto
    options.shouldIgnoreContainers = true

    /*
      Sometimes it can also be useful to include additional metadata with each report.
     */
    options.metaData = [ "Environment": "UAT" ]
}

Safety First

Peek is designed to be as safe as possible. Peek will never retain objects from your application. It will never use a background thread. Peek won't even run unless you explicitly enable it!

Go ahead, take a Peek at your app now :)

Supported Platforms and Versions

Peek is officially supported (and tested) with the following configurations:

  • iOS 9.0+ (Swift and Objective-C)

Note: if you're having issues with Swift versions when using Cocoapods, try adding the following to your Podfile:

post_install do |installer|
    installer.pods_project.targets.each do |target|
        if target.name == "Peek" then
            target.build_configurations.each do |config|
                config.build_settings['SWIFT_VERSION'] = '4.0'
            end
        end
    end
end

Swift Versions

Swift 4.x

Currently supported by version Peek v4.0 – v5.0

Swift 3.x

Not officially supported. Its recommended you update to Swift 4 and Peek 5.0

Swift 2.3

If you need Swift 2.3 support, update your Podfile as such:

pod 'Peek', '2.3'

Swift 2.2

If you need Swift 2.2 support, update your Podfile as such:

pod 'Peek', '2.0'


Attribution

Original concept, code and app design by @shaps

Icons in the demo app found on The Noun Project. Artwork by Vitaliy Gorbachev

Comments
  • Minor correction to Swift 2.3

    Minor correction to Swift 2.3

    Swift 2.3 support branch. Please not it need also to be use with the Swift 2.3 branch of InkKit. As this branch is not merge yet and you can't specify a git/branch in a podspec, you need to manually override it in your Podfile...

      pod 'InkKit', :git => 'https://github.com/huguesbr/InkKit.git', :branch => 'swift-2.3'
      pod 'Peek', :git => 'https://github.com/huguesbr/Peek.git', :branch => 'swift-2.3'
    

    Also, same issue that for InkKit, can't find a way to set base branch of the fork as it's not a branch but a tag... See this compare for the correct changes: https://github.com/shaps80/Peek/compare/2.2.0...huguesbr:swift-2.3

    opened by huguesbr 9
  • Segment renamed to CustomSegment for solving naming conflict

    Segment renamed to CustomSegment for solving naming conflict

    Base Branch

    Make sure you're currently pointing to the next release base branch. For example:

    branch: release/5.1.0

    If you're unsure, check the latest tag, it'll be a semantic version higher than that.

    SwiftLint

    Ensure SwiftLint hasn't reported any issues. Code styles must be adhered to.

    README

    Does the README need updating? Ensure anything relevant is updated there as well.

    opened by Lukaz32 5
  • Update enum cases for iOS 13 support

    Update enum cases for iOS 13 support

    Context of this PR

    With iOS 13 coming up, this PR updates the enum cases in the Enum+Descriptions.swift file. The extensions that are updated for iOS 13:

    1. UIActivityIndicatorView.Style -> medium, large
    2. UIBarButtonItem.SystemItem -> close
    3. UIModalPresentationStyle -> automatic
    4. UIButton.ButtonType -> close
    opened by jianyaoang 2
  • Update README.md

    Update README.md

    Fixes enum

    Base Branch

    Make sure you're currently pointing to the next release base branch. For example:

    branch: feature/5.1.0

    If you're unsure, check the latest tag, it'll be a semantic version higher than that.

    SwiftLint

    Ensure SwiftLint hasn't reported any issues. Code styles must be adhered to.

    README

    Does the README need updating? Ensure anything relevant is updated there as well.

    opened by valeriyvan 2
  • support iOS 13

    support iOS 13

    Base Branch

    Make sure you're currently pointing to the next release base branch. For example:

    branch: develop

    If you're unsure, check the latest tag, it'll be a semantic version higher than that.

    SwiftLint

    Ensure SwiftLint hasn't reported any issues. Code styles must be adhered to.

    README

    Does the README need updating? Ensure anything relevant is updated there as well.

    iOS13 is added

    • UIModalPresentationStyle -> automatic
    • UIActivityIndicatorView.Style -> medium, large

    but now Xcode10.2 not support ios13. maybe this pull request later deploy

    opened by kor45cw 1
  • present/dismiss Peek programatically

    present/dismiss Peek programatically

    This PR is for presenting/dismissing Peek programmatically via UIAlertController or whatever that is presented by a shake gesture.

    Honestly, I'm not really sure this is an appropriate approach. Please ask any questions, thanks.

    Context of this PR

    Not only Peek, but there are other debugging libraries like CocoaDebug or in-house one. To manage all of them in an app, I usually add a debug menu that is shown by a shake gesture. So I wrote code like this:

    extension UIViewController {
        open override func motionBegan(_ motion: UIEvent.EventSubtype, with event: UIEvent?) {
            super.motionBegan(motion, with: event)
    
            let alert = UIAlertController(title: "Debug Mode", message: nil, preferredStyle: .actionSheet)
    
            alert.addAction(UIAlertAction(title: "Peek", style: .default) { action in
                let window = UIApplication.shared.windows.first
                if Peek.isAlreadyPresented {
                    window?.peek.dismiss()
                } else {
                    window?.peek.present()
                }
            })
            alert.addAction(UIAlertAction(title: "CocoaDebug", style: .default) { action in
                // present/dismiss CocoaDebug
            })
            alert.addAction(UIAlertAction(title: "Another Debug Tool", style: .default) { action in
                // present/dismiss another debug tool
            })
            alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
    
            view.window?.rootViewController?.present(alert, animated: true, completion: nil)
        }
    }
    

    This is what I'd like to implement with the above code:

    capture

    But currently, this doesn't work after presenting PeekViewController once because its motionBegan doesn't call its super method.

    So I added code that calls it. Also, I added none to PeekActivationMode not to handle shake gesture and volume controls by Peek.

    Checklist

    • [x] Latest changes from develop have been merged
    • [x] Conflicts have been resolved
    • [x] The branch is pointing to develop
    • [x] SwiftLint hasn't reported any issues.
    opened by mshibanami 1
  • Support for ObjC AppDelegate

    Support for ObjC AppDelegate

    I have added few enhancements to the code to support initiating Peek from ObjC AppDelegate. PS: I hope this pull request is OK and sorry for the previous bed one.

    opened by jpulik 1
  • Refactors switch statement in PeekInspectorViewController

    Refactors switch statement in PeekInspectorViewController

    Base Branch

    Make sure you're currently pointing to the next release base branch. For example:

    branch: feature/5.1.0

    If you're unsure, check the latest tag, it'll be a semantic version higher than that.

    SwiftLint

    Ensure SwiftLint hasn't reported any issues. Code styles must be adhered to.

    README

    Does the README need updating? Ensure anything relevant is updated there as well.

    opened by valeriyvan 1
  • Update README.md

    Update README.md

    Fixes type of quotation marks in example line for including framework with Carthage

    Base Branch

    Make sure you're currently pointing to the next release base branch. For example:

    branch: feature/5.1.0

    If you're unsure, check the latest tag, it'll be a semantic version higher than that.

    SwiftLint

    Ensure SwiftLint hasn't reported any issues. Code styles must be adhered to.

    README

    Does the README need updating? Ensure anything relevant is updated there as well.

    opened by valeriyvan 1
  • Fix the noun project link

    Fix the noun project link

    Previously the link pointed to https://github.com/shaps80/Peek/blob/master/www.thenounproject.com instead of thenounproject.com because you didn't specify the protocol. I don't know why GitHub is handling these links this way.

    opened by bastilimbach 1
  • Simplifies NumberTransformer.transformedValue

    Simplifies NumberTransformer.transformedValue

    Base Branch

    Make sure you're currently pointing to the next release base branch. For example:

    branch: release/5.1.0

    If you're unsure, check the latest tag, it'll be a semantic version higher than that.

    SwiftLint

    Ensure SwiftLint hasn't reported any issues. Code styles must be adhered to.

    README

    Does the README need updating? Ensure anything relevant is updated there as well.

    opened by valeriyvan 0
Releases(5.3.0)
  • 5.1.0(Apr 3, 2018)

    Note: This will be the last release targetting Swift 4.0

    [Added]

    Peek now supports a Light theme Peek now recommends alternate values for enum types Peek now supports Carthage

    [Removed]

    Classes and functions that should never have been public have been removed

    [Fixed]

    Fixing branch name in CONTRIBUTING.md and pull_request_template.md Lots of small refactors and optimizations thanks to @valeriyvan

    Source code(tar.gz)
    Source code(zip)
  • 5.0.0(Mar 25, 2018)

    ‣ All new design ‣ Unified Inspectors: ‣ Collapse/Expand Groups ‣ Nested Inspectors ‣ Previews ‣ Revamped Reporting ‣ Accessibilty, StackViews & More ‣ Removed InkKit & SwiftLayout dependencies ‣ and more

    Note: Dropped support for iOS 8.x.

    Source code(tar.gz)
    Source code(zip)
Owner
Shaps
Engineer @thirdfort and @EverythingSet ● Open source @SwiftUI-Plus ● I love to build tools for the world
Shaps
Command line program that detects unused resource strings in an iOS or OS X application.

Abandoned Resource String Detection This command line program detects unused resource strings in an iOS or OS X application. Updated to Swift 3, thank

Josh Smith 360 Nov 26, 2022
SwiftGen is a tool to automatically generate Swift code for resources of your projects

SwiftGen SwiftGen is a tool to automatically generate Swift code for resources of your projects (like images, localised strings, etc), to make them ty

null 8.3k Jan 5, 2023
An Xcode plug-in to format your code using SwiftLint.

SwiftLintXcode An Xcode plug-in to format your code using SwiftLint. Runs swiftlint autocorrect --path CURRENT_FILE before *.swift file is saved. IMPO

Yuya Tanaka 348 Sep 18, 2022
AVXCAssets Generator takes path for your assets images and creates appiconset and imageset for you in just one click

AVXCAssets Generator Often while developing an app, We ran into a condition when we need to scale images to each and every aspect ratios for icons and

Angel Vasa 339 Dec 6, 2022
An iOS app decrypter, full static using fouldecrypt.

Iridium An iOS app decrypter, full static using fouldecrypt. Supporting iOS 13+ Note We have built everything into the package, you can install and fl

Lakr Aream 234 Jan 9, 2023
An iOS app decrypter, full static using fouldecrypt.

Iridium An iOS app decrypter, full static using fouldecrypt. Supporting iOS 13+ Note We have built everything into the package, you can install and fl

Lakr Aream 226 Dec 24, 2022
Build native iOS, Android, and Web apps with Capacitor and Remix.run 💿

This repository holds production ready Capacitor templates for building native mobile applications using Remix. Using Capacitor, you can quickly build out a native mobile application for iOS and Android using web technology, such as Remix.

Ionic 70 Dec 30, 2022
In-app design review tool to inspect measurements, attributes, and animations.

Hyperion Hyperion - In App Design Review Tool What is it? Hyperion is a hidden plugin drawer that can easily be integrated into any app. The drawer si

WillowTree, LLC 2k Dec 27, 2022
Runtime Mobile Security (RMS) 📱🔥 - is a powerful web interface that helps you to manipulate Android and iOS Apps at Runtime

Runtime Mobile Security (RMS) ?? ?? by @mobilesecurity_ Runtime Mobile Security (RMS), powered by FRIDA, is a powerful web interface that helps you to

Mobile Security 2k Dec 29, 2022
Swift-compute-runtime - Swift runtime for Fastly Compute@Edge

swift-compute-runtime Swift runtime for Fastly Compute@Edge Getting Started Crea

Andrew Barba 57 Dec 24, 2022
This "Calculator" application is a simple one screen design of calculator screen i have made this single screen design application just to practice AutoLayout concepts.

Calculator Layout This "Calculator" application is a simple one screen design of calculator screen i have made this single screen design application j

Chetan Parate 1 Oct 29, 2021
Inspect the iOS 15 App Activity Data directly on device.

AppActivityViewer About AppActivityViewer helps to inspect the iOS 15 App Activity Data easily on device. Choose App Activity at share sheet after cli

CJ 15 Mar 30, 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
Informant is a macOS menu bar app that lets you inspect files with a single click. 🔍

Informant Inspect files with a single click. Introduction Welcome! If you're not sure what Informant is or what it does please check out informant-app

Ty Irvine 31 Nov 7, 2022
Crowdin iOS SDK delivers all new translations from Crowdin project to the application immediately

Crowdin iOS SDK Crowdin iOS SDK delivers all new translations from Crowdin project to the application immediately. So there is no need to update this

Crowdin 98 Dec 14, 2022
Grapefruit: Runtime Application Instruments for iOS

Grapefruit: Runtime Application Instruments for iOS Get Started Dependencies Grapefruit requires Node.js to be installed. If you can't install the fri

codecolorist 632 Dec 26, 2022
A GUI for dynamically creating NSPredicates at runtime to query data in your iOS app.

PredicateEditor PredicateEditor is a visual editor for creating and using NSPredicates for querying data in your app. PredicateEditor was inspired by

Arvindh Sukumar 362 Jul 1, 2022
Blobmorphism is a brand new design language I've created to break free of the material overload in iOS, built in SwiftUI. Everything feels smooth and fluid.

Blobmorphism is a brand new design language I've created to break free of the material overload in iOS, built in SwiftUI. Everything feels smooth and fluid.

Ethan Lipnik 89 Nov 29, 2022
A beautiful activity indicator and modal alert written in Swift (originally developed for my app DoodleDoodle) Using blur effects, translucency, flat and bold design - all iOS 8 latest and greatest

SwiftSpinner SwiftSpinner is an extra beautiful activity indicator with plain and bold style. It uses dynamic blur and translucency to overlay the cur

Marin Todorov 2.1k Dec 19, 2022