Scyther
Just like scyther, this menu helps you cut through bugs, in your iOS app. Scyther is a fully fledged debug menu that provides tools for developers, UAT (QA) members/testers, UI/UX teams, backend developers and even frontend developers who use your app. Made with 💙 in Sydney, Australia 🇦🇺.
- Quick Start
- Demo
- Features & Usage
- Requirements
- Communication
- Installation
- Full API Documentation
- FAQ
- Credits
- License
Quick Start
We recommend only running Scyther on non release/App Store builds of your iOS application. Running the library on public facing versions of your app has the potential to introduce security issues if you store/transmit secure data over a network. To achieve this, for developers of all skill levels, Scyther defaults to only running on non App-Store builds. We have included a convenience which abstracts that logic into a single line if you wish to override this logic. See below:
import Scyther
// AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
/// Override for running Scyther on Production/AppStore Builds. Uncomment this line only if you know what risks are involved.
/// Scyther.instance.runsOnProductionBuilds = true
Scyther.instance.start()
return true
}
Once you have added the above code to your AppDelegate.swift
file, simply run your app on a simulator or physical device. Once it’s running, simply shake your device (Cmd + Ctrl + Z
) on the simulator) and you’ll be presented with the Scyther debug menu for your app.
Demo
There is a full-featured demo included in this repo. See the Scyther Playground project. Note that some of the features included in the demo may not be required for your implementation. They’ve been included only as a reference for what Scyther is capable of and how to implement said features.
Features
Application
- [x] Display Bundle Identifier
- [x] Display App Version
- [x] Display Build Number
- [x] Display Process ID
- [x] Display Release Type (Debug/TestFlight/Release)
- [x] Display Build Date
Networking
- [x] Display Public IP Address
- [x] Network Logging
- [x] Server/Environment Configuration
Data
- [x] Feature Flagging
- [x] Manage User Defaults
- [x] Manage Cookies (HTTPCookieStorage)
- [ ] Clear App Data (Coming Soon)
- [ ] Manage App Files (Coming Soon)
- [ ] Manage CoreData (Coming Soon)
Security
- [x] Manage Keychain Items
System
- [ ] Console Logs (Coming Soon)
- [ ] Performance Logs (Coming Soon)
- [ ] Crash Logs (Coming Soon)
- [x] Location Spoofing
Support
- [ ] App Feedback (Coming Soon)
UI/UX
- [x] Push Notification Tester
- [x] View Available Fonts
- [x] Interface Component Catalog
- [x] Grid Overlay
- [x] Show View Frames
- [x] Show View Sizes
- [x] Slow Animations
- [x] Show Screen Touches
Development Tools
- [x] Insert Your Own, App Specific, Tools
Requirements
- iOS 11.0+
- Xcode 11+
- Swift 5.1+
Communication
- If you need help with a Scyther feature, open an issue here on GitHub and follow the guide. The more detail the better!
- If you’d like to discuss Scyther best practices, open an issue here on GitHub and follow the guide. The more detail the better!
- If you’d like to discuss a feature request, open an issue here on GitHub and follow the guide. The more detail the better!
- If you found a bug, open an issue here on GitHub and follow the guide. The more detail the better!
- If you want to contribute, submit a pull request!
Installation
Swift Package Manager
The Swift Package Manager is a tool for managing the distribution of Swift code. It’s integrated with the Swift build system to automate the process of downloading, compiling, and linking dependencies.
Once you have your Swift package set up, adding Scyther as a dependency is as easy as adding it to the dependencies
value of your Package.swift
.
dependencies: [
.package(url: "https://github.com/bstillitano/Scyther.git", branch: "main")
]
CocoaPods
CocoaPods is a dependency manager for Cocoa projects. For usage and installation instructions, visit their website. To integrate Scyther into your Xcode project using CocoaPods, specify it in your Podfile
:
pod 'Scyther', '~> 1.2.0'
FAQ
Why is Scyther free?
If you want to be blunt, resumé
. But, to be a little more philosophical, I myself once relied on open-source libraries to build apps. Call it “giving back” if you will. Open-source is what makes the world go round (literally). Scyther is however licensed under the MIT license which comes with some important stipulations about protecting intellectual property/copyrights. See LICENSE for details.
Will Scyther get my app rejected by the App Store?
Scyther uses no private APIs and has been developed with shipability in mind. Scyther is being, and has been for some time, on production applications without issues from the App Store© review team. If your app does get rejected specifically for using Scyther, raise an issue, and it will be looked into with top priority.
What’s the origin of the name Scyther?
Scyther is named after the Pokemon Scyther, a bug type Pokémon that is known for its cutting ability. One of my all-time favourite co-workers loved Pokémon and recommended Scyther. In short, there is no good reason for the name.
Why does Scyther exist?
Working on some very widely used and distributed codebases, I noticed just how powerful some of the tooling, that the teams developing these apps had developed internally, was. This coupled with experience at startups and some time on small projects, I noticed a huge gap when it came to readily-available tools/libraries for small teams and junior developers that help answer the constant questions that mobile developers get asked. This library is all about enabling testers/users to help themselves before reaching out to developers.
Credits
Scyther is owned and maintained by Brandon Stillitano. You can follow me on Twitter at @bstillita for project updates and releases.
Security Disclosure
If you believe you have identified a security vulnerability with Scyther, you should report it as soon as possible via email to b.stillitano95@gmail.com. Please do not post it to a public issue tracker.
License
Scyther is released under the MIT license. See LICENSE for details.