\(time) \(file.url.lastPathComponent):\(line) :\(col) \(decl)\n"
}
appDelegate.state.setChangesSource(header: "Compile time measurements...")
if html == "" {
html = "Add \"-Xfrontend -debug-time-function-bodies\" to \"Other Swift Flags\" of your project and build to benchmark compilation times"
}
else {
html = " "
}
appDelegate.state.appendSource(title: "", text: html)
}
@IBAction func findSpace(sender: AnyObject!) {
if delegate == nil {
Bundle.main.loadNibNamed("DiskTree", owner: self, topLevelObjects: nil)
}
let notification = Notification(name: .NSApplicationDidFinishLaunching)
delegate.applicationDidFinishLaunching!(notification)
}
}
extension LogParser {
func profileLines() -> [NSString] {
var out = [NSString]()
for line in TaskGenerator( command: "gunzip <\"\(recentFirstLogs.first ?? "blah")\"", lineSeparator: "\r" ).sequence {
if line.contains("ms\t/") {
let line = line.replacingOccurrences(of: "^.*\"(\\d+\\.\\dms\t)", with: "$1", options: .regularExpression)
if !line.hasPrefix("0.0ms") {
out.append(line as NSString)
}
}
}
return Set( out ).sorted {
return $0.floatValue > $1.floatValue
}
}
}
================================================
FILE: Injectorator/Credits.rtf
================================================
{\rtf1\ansi\ansicpg1252\cocoartf1504\cocoasubrtf830
{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fnil\fcharset0 Menlo-Regular;\f2\fnil\fcharset0 HelveticaNeue;
\f3\fmodern\fcharset0 Courier;}
{\colortbl;\red255\green255\blue255;\red83\green98\blue108;}
{\*\expandedcolortbl;;\csgenericrgb\c32549\c38431\c42353;}
\paperw11900\paperh16840\vieww9600\viewh8400\viewkind0
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0
\f0\fs24 \cf0 The Injection plugin for Xcode is now a standalone app. This allows you to inject changes to class method implementations into a running application in the simulator or a macOS app. Injecting is now as simple as downloading the app and run having it running in the background while you are working on a project in Xcode and using the menu bar item "Inject Source" (don't forget to save the file!)\
\
Injection will communicate with Xcode using AppleScript to determine the current file and project then insert code into the the simulator which is then used to load in and swizzle the new version of the code into the app. Injection can also be used as a service or from the command line using the "injectSource" binary in the app package.\
\
For OSX you'll need to patch the project's main.m (create an empty one for Swift projects) using "macOS Project/Patch" on the menu bar, after which, it should connect as before. If you patch your project or once you have performed an initial injection you can use a file watcher which injects each time a file in your project is saved. Unfortunately, injecting on the device is no longer possible due to iOS 10's sandboxing.\
\
For further help go to {\field{\*\fldinst{HYPERLINK "http://johnholdsworth.com/injection.html"}}{\fldrslt http://johnholdsworth.com/injection.html}}\
\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0
\f1\fs22 \cf0 Copyright (C) 2016-7 John Holdsworth {\field{\*\fldinst{HYPERLINK "mailto:injectionapp@johnholdsworth.com"}}{\fldrslt injectionapp@johnholdsworth.com}} {\field{\*\fldinst{HYPERLINK "https://twitter.com/Injection4Xcode"}}{\fldrslt
\f2\fs24 \cf2 \expnd0\expndtw0\kerning0
@Injection4Xcode}}\
\
\pard\pardeftab720\partightenfactor0
\f3\fs24 \cf0 \expnd0\expndtw0\kerning0
Permission is hereby granted, free of charge, to any person obtaining a copy\
of this software and associated documentation files (the "Software"), to deal\
in the Software without restriction, including without limitation the rights\
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\
copies of the Software, and to permit persons to whom the Software is\
furnished to do so, subject to the following conditions:\
\
The above copyright notice and this permission notice shall be included in\
all copies or substantial portions of the Software.\
\
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT \
LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. \
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, \
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE \
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0
\f1\fs22 \cf0 \kerning1\expnd0\expndtw0 \
This release includes software licensed by the original copyright holder to be used under the terms of this license:\
\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0
{\field{\*\fldinst{HYPERLINK "https://github.com/johnno1962/injectionforxcode"}}{\fldrslt \cf0 injectionforxcode}} - engine for build and reload of code\
\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0
{\field{\*\fldinst{HYPERLINK "https://github.com/johnno1962/Smuggler"}}{\fldrslt \cf0 Smuggler}} - prototype for injecting code into simulator\
\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0
{\field{\*\fldinst{HYPERLINK "https://github.com/johnno1962/Xprobe"}}{\fldrslt \cf0 Xprobe}} - realtime app memory browser\
\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0
{\field{\*\fldinst{HYPERLINK "https://github.com/johnno1962/Xtrace"}}{\fldrslt \cf0 Xtrace}} - Objective-C message tracing\
\
{\field{\*\fldinst{HYPERLINK "https://github.com/johnno1962/Refactorator"}}{\fldrslt Refactorator}} - original Xcode refactoring plugin\
{\field{\*\fldinst{HYPERLINK "https://github.com/johnno1962/RefactoratorApp"}}{\fldrslt RefactoratorApp}} - App version of Refactorator\
\
{\field{\*\fldinst{HYPERLINK "https://github.com/johnno1962/Remote"}}{\fldrslt Remote}} - remote control of iOS devices\
\
Included in this release is software from the following sources under their respective licenses:\
\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0
{\field{\*\fldinst{HYPERLINK "https://github.com/davedelong/DDHotKey"}}{\fldrslt \cf0 davedelong/DDHotKey}} - create ^= hotkey for injection\
\
\pard\pardeftab720\partightenfactor0
\f3 \cf0 \expnd0\expndtw0\kerning0
The license for this framework is included in every source file, and is repoduced in its entirety here:\
\
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. The software is provided "as is", without warranty of any kind, including all implied warranties of merchantability and fitness. In no event shall the authors or copyright holders be liable for any claim, damages, or other liability, whether in an action of contract, tort, or otherwise, arising from, out of, or in connection with the software or the use or other dealings in the software.\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0
\f1 \cf0 \kerning1\expnd0\expndtw0 \
\pard\tx543\pardeftab543\pardirnatural\partightenfactor0
{\field{\*\fldinst{HYPERLINK "https://github.com/jpsim/SourceKitten"}}{\fldrslt \cf0 jpsim/SourceKitten}} - dynamic loading of SourceKit on demand\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0
\cf0 \
\pard\pardeftab720\partightenfactor0
\f3 \cf0 \expnd0\expndtw0\kerning0
The MIT License (MIT)\
\
Copyright (c) 2014 JP Simard.\
\
Permission is hereby granted, free of charge, to any person obtaining a copy\
of this software and associated documentation files (the "Software"), to deal\
in the Software without restriction, including without limitation the rights\
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\
copies of the Software, and to permit persons to whom the Software is\
furnished to do so, subject to the following conditions:\
\
The above copyright notice and this permission notice shall be included in all\
copies or substantial portions of the Software.\
\
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\
SOFTWARE.\
\pard\pardeftab720\partightenfactor0
\f1 \cf0 \kerning1\expnd0\expndtw0 \
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0
{\field{\*\fldinst{HYPERLINK "https://github.com/rentzsch/mach_inject"}}{\fldrslt \cf0 rentzsch/mach_inject}} - inter-process code injection\
\
\pard\pardeftab720\partightenfactor0
\f3 \cf0 \expnd0\expndtw0\kerning0
// Copyright (c) 2003-2016 Jonathan 'Wolf' Rentzsch: http://rentzsch.com\
// Some rights reserved: http://opensource.org/licenses/mit\
// https://github.com/rentzsch/mach_inject\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0
\f1 \cf0 \kerning1\expnd0\expndtw0 \
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0
{\field{\*\fldinst{HYPERLINK "https://code.google.com/archive/p/canviz"}}{\fldrslt \cf0 canviz}} - Visualisation of dot graphs in WebView canvas\
\
License in application package.\
\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0
{\field{\*\fldinst{HYPERLINK "https://codemirror.net/"}}{\fldrslt \cf0 codemirror.net}} - Code editor for Xprobe eval against instance\
\
License in application package.}
================================================
FILE: Injectorator/INController.swift
================================================
//
// InjectionMenuController.swift
// Injectorator
//
// Created by John Holdsworth on 22/12/2016.
// Copyright © 2016 John Holdsworth. All rights reserved.
//
import Cocoa
class INController: INPluginMenuController {
var project: Project? {
if Integration.shared.appDelegate.state.project == nil {
Integration.shared.appDelegate.state.project = Project(target: nil)
}
return Integration.shared.appDelegate.state.project
}
override func workspacePath() -> String! {
return project?.workspacePath
}
override func buildDirectory() -> String! {
return project?.derivedData.url.appendingPathComponent("Build").path ?? "Unknown project deerived data"
}
override func logDirectory() -> String! {
return project?.derivedData.url.appendingPathComponent("Logs/Build").path ?? "Unknown project deerived data"
}
override func enableFileWatcher(_ enabled: Bool) {
super.enableFileWatcher(enabled)
Integration.shared.updateState(newState: enabled ? .connected : .idle)
}
@IBAction func showTunable(sender: AnyObject!) {
client.paramsPanel.makeKeyAndOrderFront(sender)
}
@IBAction func showConsole(sender: AnyObject!) {
client.consolePanel.makeKeyAndOrderFront(sender)
}
@objc (injectSource:)
@IBAction func injectSource(_ sender: AnyObject!) {
Integration.shared.injectSource(sender: sender)
}
override func xcodeApp() -> String! {
if let xcodeApp = NSRunningApplication.runningApplications(withBundleIdentifier: "com.apple.dt.Xcode")
.first?.bundleURL?.path {
return xcodeApp
}
let appName = project?.xCode?.className.replacingOccurrences(of: "Application", with: "")
return "/Applications/\(appName ?? "Xcode").app"
}
}
================================================
FILE: Injectorator/Info.plist
================================================
CFBundleDevelopmentRegion
en
CFBundleDocumentTypes
CFBundleTypeExtensions
swift
m
h
CFBundleTypeIconFile
document.icns
CFBundleTypeMIMETypes
text/css
CFBundleTypeName
Swift Source
CFBundleTypeRole
Viewer
NSDocumentClass
AppDelegate
CFBundleExecutable
$(EXECUTABLE_NAME)
CFBundleIconFile
App
CFBundleIdentifier
$(PRODUCT_BUNDLE_IDENTIFIER)
CFBundleInfoDictionaryVersion
6.0
CFBundleName
$(PRODUCT_NAME)
CFBundlePackageType
APPL
CFBundleShortVersionString
2.7
CFBundleVersion
625
LSApplicationCategoryType
public.app-category.developer-tools
LSMinimumSystemVersion
$(MACOSX_DEPLOYMENT_TARGET)
NSHumanReadableCopyright
Copyright © 2016 John Holdsworth. All rights reserved.
NSMainNibFile
MainMenu
NSPrincipalClass
NSApplication
NSServices
NSKeyEquivalent
default
~
NSMenuItem
default
Injection/Inject Source
NSMessage
inject
NSPortName
Injection
NSRequiredContext
NSSendTypes
NSStringPboardType
public.plain-text
NSMenuItem
default
Injection/Inject File
NSMessage
injectFile
NSPortName
Injection
NSRequiredContext
NSTextContent
FilePath
NSSendTypes
NSStringPboardType
public.plain-text
NSURLPboardType
public.url
public.file-url
NSMenuItem
default
Injection/Load Xprobe
NSMessage
xprobe
NSPortName
Injection
NSRequiredContext
NSSendTypes
NSStringPboardType
public.plain-text
SMPrivilegedExecutables
com.johnholdsworth.Injectorator.Helper
identifier com.johnholdsworth.Injectorator.Helper
================================================
FILE: Injectorator/Injectorator-Bridging-Header.h
================================================
//
// Use this file to import your target's public headers that you would like to expose to Swift.
//
#import
#import
#import "sourcekitd.h"
#import "Xcode.h"
#import "Utils.h"
#import "INPluginMenuController.h"
#import "INPluginClientController.h"
#import "XprobePluginMenuController.h"
#import "RMPluginController.h"
#import "HelperInstaller.h"
#import "HelperProxy.h"
#import
#import
#import "DDHotKeyCenter.h"
#define SWIFT_INJECTION_PORT INJECTION_PORT
#define SWIFT_REMOTE_PORT REMOTE_PORT
================================================
FILE: Injectorator/Integration.swift
================================================
//
// SubApp.swift
// Injectorator
//
// Created by John Holdsworth on 21/12/2016.
// Copyright © 2016 John Holdsworth. All rights reserved.
//
import Foundation
//let kVK_ANSI_Equal: UInt16 = 0x18
class Integration: NSObject {
static var shared: Integration!
@IBOutlet var injection: INPluginMenuController!
@IBOutlet var xprobe: XprobePluginMenuController!
@IBOutlet var mainMenu: NSMenu!
@IBOutlet var statusMenu: NSMenu!
private var statusItem: NSStatusItem!
var remote: RMPluginController!
var appDelegate: AppDelegate!
@IBOutlet var delegate: NSApplicationDelegate!
init(appDelegate: AppDelegate, count: Int) {
super.init()
Integration.shared = self
self.appDelegate = appDelegate
setenv("IS_INJECTION_APP", Bundle.main.bundlePath, 1)
signal(SIGPIPE, SIG_IGN)
guard let appMenu = NSApplication.shared().mainMenu else { return }
Bundle(for:Integration.self).loadNibNamed("Integration", owner: self, topLevelObjects: nil)
let notification = Notification(name: .NSApplicationDidFinishLaunching)
injection.applicationDidFinishLaunching(notification)
xprobe.applicationDidFinishLaunching(notification)
xprobe.injectionPlugin = INPluginMenuController.self
injectionPlugin = injection
xprobePlugin = xprobe
appMenu.item(at: 0)?.submenu = mainMenu
#if swift(>=3.2)
appMenu.removeItem(at: 1)
statusMenu.item(withTitle: "Refactor Swift")?.isHidden = true
#else
appMenu.item(at: 1)?.submenu?.title = "Refactorator"
#endif
let statusBar = NSStatusBar.system()
statusItem = statusBar.statusItem(withLength: statusBar.thickness)
statusItem.toolTip = "Injectorator"
statusItem.highlightMode = true
statusItem.menu = statusMenu
statusItem.isEnabled = true
statusItem.title = ""
updateState(newState: .idle)
_ = DDHotKeyCenter.shared()?.registerHotKey(withKeyCode: UInt16(kVK_ANSI_Equal),
modifierFlags: NSEventModifierFlags.control.rawValue,
target: self, action: #selector(injectSource(sender:)), object: nil)
let expires = Date(timeIntervalSince1970: 1515929737.02325)//timeIntervalSinceNow:(2*31+8)*24*60*60)
print("If not licensed, this copy will expire on: \(expires) \(expires.timeIntervalSince1970)")
if !appDelegate.licensed && Date() > expires {
let alert = NSAlert()
alert.messageText = "Injection"
alert.informativeText = "An update is available for Injection, please download a new copy"
alert.runModal()
appDelegate.help(sender: nil)
NSApp.terminate(nil)
return
}
}
@discardableResult
func error(_ msg: String) -> NSModalResponse {
NSApp.activate(ignoringOtherApps: true)
print("Error: \(msg)")
let alert = NSAlert()
alert.messageText = "Injection App"
alert.informativeText = msg
return alert.runModal()
}
func pathForResource( name: String, ofType ext: String! ) -> String! {
if let path = Bundle.main.path(forResource: name, ofType: ext) {
return path
} else {
error("Could not locate resource \(name).\(ext)" )
return nil
}
}
func setMenuIcon( tiffName: String ) {
if let path = pathForResource( name: tiffName, ofType:"tif" ) {
statusItem.image = NSImage( contentsOfFile:path )
statusItem.alternateImage = statusItem.image
}
}
func updateState( newState: INBundleState ) {
switch (newState) {
case .idle:
setMenuIcon(tiffName: "InjectionIdle")
case .connected:
setMenuIcon(tiffName: "InjectionOK")
default:
error("Invalid status \(newState.rawValue)")
break
}
}
func injectTooling(file: String? = nil) -> String? {
let bundlePath = pathForResource(name: "InjectionLoader", ofType: "bundle")
appDelegate.state.project = Project(target: file != nil ? Entity(file: file!) : nil)
do {
if !injection.client.connected() {
if !HelperInstaller.isInstalled() {
error( "Injection needs to install a privileged helper to be able to inject code into " +
"an app running in the simulator. This is a standard macOS mechanism. " +
"You can remove the helper at any time by deleting:\n " +
"/Library/PrivilegedHelperTools/com.johnholdsworth.Injectorator.Helper.\n" +
"If you'd rather not authorize, you can select \"macOS Project/Patch App\" " +
"and use patched injection instead." )
try HelperInstaller.install()
}
try HelperProxy.inject( bundlePath )
for _ in 0..<50 {
RunLoop.main.run(until: Date(timeIntervalSinceNow: 0.1))
if injection.client.connected() {
NSApp.hide(nil)
return appDelegate.state.project?.entity?.file
}
}
error( "Timeout waiting for connection from client app" )
return nil
}
NSApp.hide(nil)
return appDelegate.state.project?.entity?.file
}
catch (let err as NSError) {
print("Couldn't install Injection Helper (domain: \(err.domain) code: \(err.code))")
error( "Injection Error:\n\(err.localizedDescription)" )
}
return nil
}
func runInjection( file: String ) {
injection.client.runScript("injectSource.pl", withArg: file)
injection.lastInjected[file] = NSDate()
injection.lastFile = file
}
@IBAction func injectSource(sender: AnyObject!) {
if let file = injectTooling() {
runInjection(file: file)
}
}
@IBAction func fileWatcher(sender: NSMenuItem!) {
sender.state = 1-sender.state
injection.watchButton.state = sender.state
injection.watchChanged(sender)
}
@IBAction func patchProject(sender: AnyObject!) {
appDelegate.state.project = Project(target: nil)
injection.client.runScript("patchProject.pl", withArg: "\(SWIFT_INJECTION_PORT)")
}
@IBAction func revertProject(sender: AnyObject!) {
appDelegate.state.project = Project(target: nil)
injection.client.runScript("revertProject.pl", withArg: "")
}
@IBAction func bundleProject(sender: AnyObject!) {
appDelegate.state.project = Project(target: nil)
injection.client.runScript("openBundle.pl", withArg: "")
}
@IBAction func osxXprobe(sender: AnyObject!) {
if let path = pathForResource(name: "XprobeBundle", ofType: "loader") {
injection.client.write("/"+path)
}
}
@IBAction func loadXprobe(sender: AnyObject!) {
_ = injectTooling()
injection.client.write("+")
NSApp.activate(ignoringOtherApps: true)
}
@IBAction func refactorSwift(sender: AnyObject!) {
if let appDelegate = NSApplication.shared().delegate as? AppDelegate {
appDelegate.state.setup()
appDelegate.window.makeKeyAndOrderFront(sender)
}
}
func initRemote() -> RMPluginController {
if remote == nil {
remote = RMController()
setenv("REMOTE_PORT", "\(SWIFT_REMOTE_PORT)", 1 )
let notification = Notification(name: .NSApplicationDidFinishLaunching)
remote.applicationDidFinishLaunching(notification)
let title = "Remote Control"
let index = statusMenu.indexOfItem(withTitle: title)
statusMenu.removeItem(at: index)
remote.remoteMenu.title = title
statusMenu.insertItem(remote.remoteMenu, at: index)
remote.remoteMenu.submenu?.item(at: 0)?.isHidden = true
}
return remote
}
@IBAction func remotePatch(sender: AnyObject!) {
appDelegate.state.project = Project(target: nil)
initRemote().runScript("patch")
}
@IBAction func remoteUnpatch(sender: AnyObject!) {
appDelegate.state.project = Project(target: nil)
initRemote().runScript("unpatch")
}
@IBAction func terminate(sender: AnyObject!) {
NSApp.terminate(sender)
}
}
extension AppDelegate {
func applicationWillTerminate(_ notification: Notification) {
_ = DDHotKeyCenter.shared()?.unregisterHotKey(withKeyCode: UInt16(kVK_ANSI_Equal),
modifierFlags: NSEventModifierFlags.control.rawValue)
}
@IBAction func help(sender: NSMenuItem!) {
state.open(url: "http://johnholdsworth.com/injection.html?index=\(myIndex)")
}
@IBAction func donate(sender: NSMenuItem!) {
state.open(url: "http://johnholdsworth.com/cgi-bin/injection.cgi?index=\(myIndex)")
}
@objc func inject(_ pboard: NSPasteboard, userData: String, error: NSErrorPointer) {
_ = pboard.string(forType: NSPasteboardTypeString)
Integration.shared.injectSource(sender: nil)
}
@objc func injectFile(_ pboard: NSPasteboard, userData: String, error: NSErrorPointer) {
let options = [NSPasteboardURLReadingFileURLsOnlyKey:true]
if let fileURLs = pboard.readObjects(forClasses: [NSURL.self], options: options),
let file = (fileURLs.first as? NSURL)?.path {
_ = Integration.shared.injectTooling(file: file)
Integration.shared.runInjection(file: file)
}
}
@objc func xprobe(_ pboard: NSPasteboard, userData: String, error: NSErrorPointer) {
_ = pboard.string(forType: NSPasteboardTypeString)
Integration.shared.loadXprobe(sender: nil)
}
}
// ['Snow', 'DarkKhaki', 'IndianRed', 'MistyRose', 'DarkGrey', 'FloralWhite', 'LightGreen', 'DeepSkyBlue', 'Gainsboro', 'Aquamarine', 'Khaki', 'Sienna', 'Purple', 'SlateGray', 'HotPink', 'White', 'PowderBlue', 'DarkGreen', 'PapayaWhip', 'OliveDrab', 'DarkOrange', 'Yellow', 'Crimson', 'MediumBlue', 'DarkMagenta', 'PeachPuff', 'LightCyan', 'MediumOrchid', 'Lime', 'GreenYellow', 'Gold', 'SlateGrey', 'LightYellow', 'Linen', 'DarkSlateGrey', 'PaleVioletRed', 'AliceBlue', 'MediumSeaGreen', 'LightSlateGrey', 'LawnGreen', 'LightGoldenRodYellow', 'SpringGreen', 'Chocolate', 'RoyalBlue', 'DimGrey', 'MediumSlateBlue', 'DarkOrchid', 'CadetBlue', 'PaleGoldenRod', 'BlanchedAlmond', 'Cornsilk', 'CornflowerBlue', 'PaleTurquoise', 'ForestGreen', 'YellowGreen', 'GoldenRod', 'Coral', 'SandyBrown', 'Wheat', 'Tan', 'Black', 'LavenderBlush', 'Turquoise', 'DarkCyan', 'WhiteSmoke', 'OldLace', 'SeaGreen', 'LightSteelBlue', 'DimGray', 'Ivory', 'Salmon', 'Olive', 'HoneyDew', 'Red', 'Beige', 'DarkGray', 'Green', 'DarkBlue', 'Bisque', 'Moccasin', 'Pink', 'LightSalmon', 'DarkSeaGreen', 'LightSlateGray', 'BlueViolet', 'GhostWhite', 'FireBrick', 'DarkRed', 'Orange', 'OrangeRed', 'DarkOliveGreen', 'LightSkyBlue', 'MediumTurquoise', 'DarkSalmon', 'NavajoWhite', 'RosyBrown', 'SteelBlue', 'LightBlue', 'SeaShell', 'SkyBlue', 'DarkSlateGray', 'LimeGreen', 'LightCoral', 'LightSeaGreen', 'SaddleBrown', 'MediumVioletRed', 'Azure', 'Thistle', 'Lavender', 'DarkSlateBlue', 'LightGrey', 'Chartreuse', 'Navy', 'Teal', 'Indigo', 'MediumSpringGreen', 'RebeccaPurple', 'Orchid', 'Tomato', 'PaleGreen', 'Aqua', 'Grey', 'MediumAquaMarine', 'DarkGoldenRod', 'LightGray', 'Violet', 'Fuchsia', 'Magenta', 'DodgerBlue', 'Maroon', 'DarkViolet', 'DeepPink', 'MidnightBlue', 'AntiqueWhite', 'SlateBlue', 'Blue', 'BurlyWood', 'Brown', 'Peru', 'Silver', 'LightPink', 'MediumPurple', 'MintCream', 'Plum', 'Cyan', 'Gray', 'DarkTurquoise', 'LemonChiffon']
let colors = String(data: Data(base64Encoded: "U25vdzpEYXJrS2hha2k6SW5kaWFuUmVkOk1pc3R5Um9zZTpEYXJrR3JleTpGbG9yYWxXaGl0ZTpMaWdodEdyZWVuOkRlZXBTa3lCbHVlOkdhaW5zYm9ybzpBcXVhbWFyaW5lOktoYWtpOlNpZW5uYTpQdXJwbGU6U2xhdGVHcmF5OkhvdFBpbms6V2hpdGU6UG93ZGVyQmx1ZTpEYXJrR3JlZW46UGFwYXlhV2hpcDpPbGl2ZURyYWI6RGFya09yYW5nZTpZZWxsb3c6Q3JpbXNvbjpNZWRpdW1CbHVlOkRhcmtNYWdlbnRhOlBlYWNoUHVmZjpMaWdodEN5YW46TWVkaXVtT3JjaGlkOkxpbWU6R3JlZW5ZZWxsb3c6R29sZDpTbGF0ZUdyZXk6TGlnaHRZZWxsb3c6TGluZW46RGFya1NsYXRlR3JleTpQYWxlVmlvbGV0UmVkOkFsaWNlQmx1ZTpNZWRpdW1TZWFHcmVlbjpMaWdodFNsYXRlR3JleTpMYXduR3JlZW46TGlnaHRHb2xkZW5Sb2RZZWxsb3c6U3ByaW5nR3JlZW46Q2hvY29sYXRlOlJveWFsQmx1ZTpEaW1HcmV5Ok1lZGl1bVNsYXRlQmx1ZTpEYXJrT3JjaGlkOkNhZGV0Qmx1ZTpQYWxlR29sZGVuUm9kOkJsYW5jaGVkQWxtb25kOkNvcm5zaWxrOkNvcm5mbG93ZXJCbHVlOlBhbGVUdXJxdW9pc2U6Rm9yZXN0R3JlZW46WWVsbG93R3JlZW46R29sZGVuUm9kOkNvcmFsOlNhbmR5QnJvd246V2hlYXQ6VGFuOkJsYWNrOkxhdmVuZGVyQmx1c2g6VHVycXVvaXNlOkRhcmtDeWFuOldoaXRlU21va2U6T2xkTGFjZTpTZWFHcmVlbjpMaWdodFN0ZWVsQmx1ZTpEaW1HcmF5Okl2b3J5OlNhbG1vbjpPbGl2ZTpIb25leURldzpSZWQ6QmVpZ2U6RGFya0dyYXk6R3JlZW46RGFya0JsdWU6QmlzcXVlOk1vY2Nhc2luOlBpbms6TGlnaHRTYWxtb246RGFya1NlYUdyZWVuOkxpZ2h0U2xhdGVHcmF5OkJsdWVWaW9sZXQ6R2hvc3RXaGl0ZTpGaXJlQnJpY2s6RGFya1JlZDpPcmFuZ2U6T3JhbmdlUmVkOkRhcmtPbGl2ZUdyZWVuOkxpZ2h0U2t5Qmx1ZTpNZWRpdW1UdXJxdW9pc2U6RGFya1NhbG1vbjpOYXZham9XaGl0ZTpSb3N5QnJvd246U3RlZWxCbHVlOkxpZ2h0Qmx1ZTpTZWFTaGVsbDpTa3lCbHVlOkRhcmtTbGF0ZUdyYXk6TGltZUdyZWVuOkxpZ2h0Q29yYWw6TGlnaHRTZWFHcmVlbjpTYWRkbGVCcm93bjpNZWRpdW1WaW9sZXRSZWQ6QXp1cmU6VGhpc3RsZTpMYXZlbmRlcjpEYXJrU2xhdGVCbHVlOkxpZ2h0R3JleTpDaGFydHJldXNlOk5hdnk6VGVhbDpJbmRpZ286TWVkaXVtU3ByaW5nR3JlZW46UmViZWNjYVB1cnBsZTpPcmNoaWQ6VG9tYXRvOlBhbGVHcmVlbjpBcXVhOkdyZXk6TWVkaXVtQXF1YU1hcmluZTpEYXJrR29sZGVuUm9kOkxpZ2h0R3JheTpWaW9sZXQ6RnVjaHNpYTpNYWdlbnRhOkRvZGdlckJsdWU6TWFyb29uOkRhcmtWaW9sZXQ6RGVlcFBpbms6TWlkbmlnaHRCbHVlOkFudGlxdWVXaGl0ZTpTbGF0ZUJsdWU6Qmx1ZTpCdXJseVdvb2Q6QnJvd246UGVydTpTaWx2ZXI6TGlnaHRQaW5rOk1lZGl1bVB1cnBsZTpNaW50Q3JlYW06UGx1bTpDeWFuOkdyYXk6RGFya1R1cnF1b2lzZTpMZW1vbkNoaWZmb24=")!, encoding: .utf8 )!.components(separatedBy: ":")
================================================
FILE: Injectorator/Integration.xib
================================================
================================================
FILE: Injectorator/RMController.swift
================================================
//
// RMController.swift
// Injectorator
//
// Created by John Holdsworth on 06/01/2017.
// Copyright © 2017 John Holdsworth. All rights reserved.
//
import Foundation
class RMController: RMPluginController {
var project: Project? {
return Integration.shared.appDelegate.state.project
}
@objc override func workspacePath() -> String! {
return project?.workspacePath
}
@IBAction override func patch(_ sender: NSMenuItem!) {
Integration.shared.remotePatch(sender: sender)
}
@IBAction override func unpatch(_ sender: NSMenuItem!) {
Integration.shared.remoteUnpatch(sender: sender)
}
}
================================================
FILE: Injectorator.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
BB010BD91E1F3A0B00C3AACA /* iphone.png in Resources */ = {isa = PBXBuildFile; fileRef = BB010BD41E1F3A0B00C3AACA /* iphone.png */; };
BB010BDA1E1F3A0B00C3AACA /* log.html in Resources */ = {isa = PBXBuildFile; fileRef = BB010BD51E1F3A0B00C3AACA /* log.html */; };
BB010BDC1E1F3A0B00C3AACA /* patch.py in Resources */ = {isa = PBXBuildFile; fileRef = BB010BD71E1F3A0B00C3AACA /* patch.py */; };
BB010BDD1E1F3A0B00C3AACA /* unpatch.py in Resources */ = {isa = PBXBuildFile; fileRef = BB010BD81E1F3A0B00C3AACA /* unpatch.py */; };
BB010BDE1E1F3A5600C3AACA /* RemoteCapture.h in Resources */ = {isa = PBXBuildFile; fileRef = BB010BCC1E1F39E800C3AACA /* RemoteCapture.h */; };
BB010BDF1E1F3A5600C3AACA /* RemoteHeaders.h in Resources */ = {isa = PBXBuildFile; fileRef = BB010BCD1E1F39E800C3AACA /* RemoteHeaders.h */; };
BB010BE01E1F3C2300C3AACA /* RMPluginController.m in Sources */ = {isa = PBXBuildFile; fileRef = BB010BC11E1F39E800C3AACA /* RMPluginController.m */; };
BB010BE11E1F3C2300C3AACA /* RMWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = BB010BC41E1F39E800C3AACA /* RMWindowController.m */; };
BB010BE21E1F3C2300C3AACA /* RMMacroManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BB010BC71E1F39E800C3AACA /* RMMacroManager.m */; };
BB010BE31E1F3C2300C3AACA /* RMDeviceController.m in Sources */ = {isa = PBXBuildFile; fileRef = BB010BC91E1F39E800C3AACA /* RMDeviceController.m */; };
BB010BE41E1F3C2300C3AACA /* RMImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = BB010BCB1E1F39E800C3AACA /* RMImageView.m */; };
BB010BE61E1F3D5A00C3AACA /* RMController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB010BE51E1F3D5A00C3AACA /* RMController.swift */; };
BB010BE71E1F437C00C3AACA /* RMPluginController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB010BC21E1F39E800C3AACA /* RMPluginController.xib */; };
BB010BE81E1F437C00C3AACA /* RMWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB010BC51E1F39E800C3AACA /* RMWindowController.xib */; };
BB010C0F1E1F85FF00C3AACA /* QTKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB010C0E1E1F85FF00C3AACA /* QTKit.framework */; };
BB20D57A1E1F98640013C59F /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = BB7D5F0D1E15B94200393CA1 /* README.md */; };
BB248A941E210FCC003F0DF6 /* Benchmark.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB248A921E210E2F003F0DF6 /* Benchmark.swift */; };
BB25263E1F65CC9700898347 /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = BB25263D1F65CC9700898347 /* LICENSE */; };
BB356A531E0AF2780056B10F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = BB356A521E0AF2780056B10F /* Assets.xcassets */; };
BB356A631E0AF2AD0056B10F /* AppController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB356A5E1E0AF2AD0056B10F /* AppController.swift */; };
BB356A641E0AF2AD0056B10F /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB356A5F1E0AF2AD0056B10F /* AppDelegate.swift */; };
BB356A651E0AF2AD0056B10F /* Common.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB356A601E0AF2AD0056B10F /* Common.swift */; };
BB356A661E0AF2AD0056B10F /* Formatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB356A611E0AF2AD0056B10F /* Formatter.swift */; };
BB356A671E0AF2AD0056B10F /* Project.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB356A621E0AF2AD0056B10F /* Project.swift */; };
BB356A701E0AF2E20056B10F /* ByteRegex.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB356A681E0AF2E20056B10F /* ByteRegex.swift */; };
BB356A711E0AF2E20056B10F /* Entity.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB356A691E0AF2E20056B10F /* Entity.swift */; };
BB356A721E0AF2E20056B10F /* IndexDB.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB356A6A1E0AF2E20056B10F /* IndexDB.swift */; };
BB356A731E0AF2E20056B10F /* IndexStrings.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB356A6B1E0AF2E20056B10F /* IndexStrings.swift */; };
BB356A741E0AF2E20056B10F /* LineGenerators.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB356A6C1E0AF2E20056B10F /* LineGenerators.swift */; };
BB356A751E0AF2E20056B10F /* LogParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB356A6D1E0AF2E20056B10F /* LogParser.swift */; };
BB356A761E0AF2E20056B10F /* SourceKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB356A6E1E0AF2E20056B10F /* SourceKit.swift */; };
BB356A7B1E0AF36F0056B10F /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB356A791E0AF36E0056B10F /* MainMenu.xib */; };
BB356A801E0AF37A0056B10F /* Source.html in Resources */ = {isa = PBXBuildFile; fileRef = BB356A7C1E0AF37A0056B10F /* Source.html */; };
BB356A811E0AF37A0056B10F /* canviz.html in Resources */ = {isa = PBXBuildFile; fileRef = BB356A7D1E0AF37A0056B10F /* canviz.html */; };
BB356A821E0AF37A0056B10F /* canviz2.html in Resources */ = {isa = PBXBuildFile; fileRef = BB356A7E1E0AF37A0056B10F /* canviz2.html */; };
BB356A831E0AF37A0056B10F /* Intro.html in Resources */ = {isa = PBXBuildFile; fileRef = BB356A7F1E0AF37A0056B10F /* Intro.html */; };
BB356A851E0AF3910056B10F /* canviz-0.1 in Resources */ = {isa = PBXBuildFile; fileRef = BB356A841E0AF3910056B10F /* canviz-0.1 */; };
BB356A881E0AF3E10056B10F /* Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = BB356A871E0AF3E10056B10F /* Utils.m */; };
BB356A8B1E0AF40B0056B10F /* libsqlite3.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = BB356A8A1E0AF40B0056B10F /* libsqlite3.tbd */; };
BB356A8C1E0AF42A0056B10F /* Xcode.h in Resources */ = {isa = PBXBuildFile; fileRef = BB356A771E0AF30B0056B10F /* Xcode.h */; };
BB356A8E1E0AF4890056B10F /* App.icns in Resources */ = {isa = PBXBuildFile; fileRef = BB356A8D1E0AF4890056B10F /* App.icns */; };
BB356A901E0AF4AC0056B10F /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB356A8F1E0AF4AC0056B10F /* WebKit.framework */; };
BB356A9F1E0AF6BB0056B10F /* XprobeConsole.m in Sources */ = {isa = PBXBuildFile; fileRef = BB356A9A1E0AF6BB0056B10F /* XprobeConsole.m */; };
BB356AA01E0AF6BB0056B10F /* XprobeConsole.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB356A9B1E0AF6BB0056B10F /* XprobeConsole.xib */; };
BB356AA11E0AF6BB0056B10F /* XprobePluginMenuController.m in Sources */ = {isa = PBXBuildFile; fileRef = BB356A9D1E0AF6BB0056B10F /* XprobePluginMenuController.m */; };
BB356AA21E0AF6BB0056B10F /* XprobePluginMenuController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB356A9E1E0AF6BB0056B10F /* XprobePluginMenuController.xib */; };
BB356AAE1E0AF6D80056B10F /* INPluginMenuController.m in Sources */ = {isa = PBXBuildFile; fileRef = BB356AA41E0AF6D80056B10F /* INPluginMenuController.m */; };
BB356AAF1E0AF6D80056B10F /* INPluginMenuController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB356AA51E0AF6D80056B10F /* INPluginMenuController.xib */; };
BB356AB01E0AF6D80056B10F /* INPluginClientController.m in Sources */ = {isa = PBXBuildFile; fileRef = BB356AA71E0AF6D80056B10F /* INPluginClientController.m */; };
BB356AB11E0AF6D80056B10F /* FileWatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = BB356AA91E0AF6D80056B10F /* FileWatcher.m */; };
BB356AB71E0AF7F40056B10F /* Xtrace.mm in Sources */ = {isa = PBXBuildFile; fileRef = BB356AB31E0AF7F40056B10F /* Xtrace.mm */; };
BB356AB81E0AF7F40056B10F /* Xprobe.mm in Sources */ = {isa = PBXBuildFile; fileRef = BB356AB51E0AF7F40056B10F /* Xprobe.mm */; };
BB356AB91E0AF7F40056B10F /* Xprobe+Service.mm in Sources */ = {isa = PBXBuildFile; fileRef = BB356AB61E0AF7F40056B10F /* Xprobe+Service.mm */; };
BB356ABB1E0AF8130056B10F /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = BB356ABA1E0AF8130056B10F /* libz.tbd */; };
BB356ABD1E0B03220056B10F /* injection.png in Resources */ = {isa = PBXBuildFile; fileRef = BB356ABC1E0B03220056B10F /* injection.png */; };
BB356AE21E0B09610056B10F /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = BB356ADD1E0B09610056B10F /* main.m */; };
BB356AE31E0B09610056B10F /* Helper.m in Sources */ = {isa = PBXBuildFile; fileRef = BB356ADF1E0B09610056B10F /* Helper.m */; };
BB356AE41E0B09610056B10F /* mach_inject.c in Sources */ = {isa = PBXBuildFile; fileRef = BB356AE11E0B09610056B10F /* mach_inject.c */; };
BB356B041E0B0BA20056B10F /* mach_inject_bundle_stub.c in Sources */ = {isa = PBXBuildFile; fileRef = BB356B031E0B0BA20056B10F /* mach_inject_bundle_stub.c */; };
BB356B051E0B0BC40056B10F /* Bootstrap.bundle in Resources */ = {isa = PBXBuildFile; fileRef = BB356AFC1E0B0B8A0056B10F /* Bootstrap.bundle */; };
BB356B0C1E0B0D0A0056B10F /* HelperInstaller.m in Sources */ = {isa = PBXBuildFile; fileRef = BB356B091E0B0D0A0056B10F /* HelperInstaller.m */; };
BB356B0D1E0B0D0A0056B10F /* HelperProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = BB356B0B1E0B0D0A0056B10F /* HelperProxy.m */; };
BB356B131E0B0E680056B10F /* InjectionOK.tif in Resources */ = {isa = PBXBuildFile; fileRef = BB356B121E0B0E680056B10F /* InjectionOK.tif */; };
BB356B7C1E0B4A9A0056B10F /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = BB356B7B1E0B4A9A0056B10F /* Credits.rtf */; };
BB356B7E1E0B542F0056B10F /* com.johnholdsworth.Injectorator.Helper in CopyFiles */ = {isa = PBXBuildFile; fileRef = BB356AD61E0B09000056B10F /* com.johnholdsworth.Injectorator.Helper */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
BB356B851E0B5A500056B10F /* InjectionIdle.tif in Resources */ = {isa = PBXBuildFile; fileRef = BB356B841E0B5A500056B10F /* InjectionIdle.tif */; };
BB356B871E0B5D450056B10F /* INController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB356B861E0B5D450056B10F /* INController.swift */; };
BB356B891E0B72270056B10F /* common.pm in Resources */ = {isa = PBXBuildFile; fileRef = BB356B881E0B72270056B10F /* common.pm */; };
BB356B8C1E0B72890056B10F /* iOSBundleTemplate in Resources */ = {isa = PBXBuildFile; fileRef = BB356B8A1E0B72890056B10F /* iOSBundleTemplate */; };
BB356B8D1E0B72890056B10F /* OSXBundleTemplate in Resources */ = {isa = PBXBuildFile; fileRef = BB356B8B1E0B72890056B10F /* OSXBundleTemplate */; };
BB356B8E1E0B747B0056B10F /* BundleInterface.h in Resources */ = {isa = PBXBuildFile; fileRef = BB356AAA1E0AF6D80056B10F /* BundleInterface.h */; };
BB356B8F1E0B747B0056B10F /* BundleInjection.h in Resources */ = {isa = PBXBuildFile; fileRef = BB356AAB1E0AF6D80056B10F /* BundleInjection.h */; };
BB356B911E0B75030056B10F /* injectSource.pl in Resources */ = {isa = PBXBuildFile; fileRef = BB356B901E0B75030056B10F /* injectSource.pl */; };
BB356B981E0B8A7F0056B10F /* xprobe.html in Resources */ = {isa = PBXBuildFile; fileRef = BB356B961E0B8A7F0056B10F /* xprobe.html */; };
BB356B991E0B8A7F0056B10F /* tiny_red.gif in Resources */ = {isa = PBXBuildFile; fileRef = BB356B971E0B8A7F0056B10F /* tiny_red.gif */; };
BB356B9B1E0B8B0D0056B10F /* CodeMirror in Resources */ = {isa = PBXBuildFile; fileRef = BB356B9A1E0B8B0D0056B10F /* CodeMirror */; };
BB356BC51E0B976E0056B10F /* evalCode.pl in Resources */ = {isa = PBXBuildFile; fileRef = BB356BC41E0B976E0056B10F /* evalCode.pl */; };
BB356BD41E0C4C0F0056B10F /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = BB356BD31E0C4C0F0056B10F /* main.m */; };
BB356BDA1E0C4C2A0056B10F /* injectSource in Resources */ = {isa = PBXBuildFile; fileRef = BB356BD11E0C4C0E0056B10F /* injectSource */; };
BB356BE31E0C761E0056B10F /* Integration.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB356BDF1E0C758F0056B10F /* Integration.swift */; };
BB356C041E0D9FC20056B10F /* Integration.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB356C001E0D9B410056B10F /* Integration.xib */; };
BB356C071E0DA11C0056B10F /* patchProject.pl in Resources */ = {isa = PBXBuildFile; fileRef = BB356C051E0DA0E40056B10F /* patchProject.pl */; };
BB356C091E0DA37C0056B10F /* revertProject.pl in Resources */ = {isa = PBXBuildFile; fileRef = BB356C081E0DA37C0056B10F /* revertProject.pl */; };
BB356C311E0DA78B0056B10F /* BundleSweeper.h in Resources */ = {isa = PBXBuildFile; fileRef = BB356AAC1E0AF6D80056B10F /* BundleSweeper.h */; };
BB356C321E0DA7970056B10F /* IvarAccess.h in Resources */ = {isa = PBXBuildFile; fileRef = BB356AAD1E0AF6D80056B10F /* IvarAccess.h */; };
BB4847C01E380E1000622FA4 /* DDHotKeyCenter.m in Sources */ = {isa = PBXBuildFile; fileRef = BB4847BD1E380E1000622FA4 /* DDHotKeyCenter.m */; };
BB4847C11E380E1000622FA4 /* DDHotKeyUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = BB4847BF1E380E1000622FA4 /* DDHotKeyUtilities.m */; };
BB4847C81E38155D00622FA4 /* DDHotKeyCenter.h in Resources */ = {isa = PBXBuildFile; fileRef = BB4847BC1E380E1000622FA4 /* DDHotKeyCenter.h */; };
BB5A60A31E221EA600B6C1D9 /* closed_folder_orange.png in Resources */ = {isa = PBXBuildFile; fileRef = BB5A609E1E221EA600B6C1D9 /* closed_folder_orange.png */; };
BB5A60A41E221EA600B6C1D9 /* open_folder_orange.png in Resources */ = {isa = PBXBuildFile; fileRef = BB5A609F1E221EA600B6C1D9 /* open_folder_orange.png */; };
BB5A60A51E221EA600B6C1D9 /* document.png in Resources */ = {isa = PBXBuildFile; fileRef = BB5A60A01E221EA600B6C1D9 /* document.png */; };
BB5A60A61E221EA600B6C1D9 /* scan2.png in Resources */ = {isa = PBXBuildFile; fileRef = BB5A60A11E221EA600B6C1D9 /* scan2.png */; };
BB5A60A71E221EA600B6C1D9 /* scan.png in Resources */ = {isa = PBXBuildFile; fileRef = BB5A60A21E221EA600B6C1D9 /* scan.png */; };
BB5A60AB1E221EB400B6C1D9 /* DiskTreeAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = BB5A60A91E221EB400B6C1D9 /* DiskTreeAppDelegate.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
BB5A60B31E221F5C00B6C1D9 /* DiskTree.html in Resources */ = {isa = PBXBuildFile; fileRef = BB5A60B11E221F5C00B6C1D9 /* DiskTree.html */; };
BB5A60B41E221F5C00B6C1D9 /* DiskTree.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB5A60B21E221F5C00B6C1D9 /* DiskTree.xib */; };
BB5A60C81E22220B00B6C1D9 /* tree.c in Sources */ = {isa = PBXBuildFile; fileRef = BB5A60C61E2221EC00B6C1D9 /* tree.c */; };
BB63C9DB1F7862A30048D83B /* docs in Resources */ = {isa = PBXBuildFile; fileRef = BB63C9D81F7862A30048D83B /* docs */; };
BB6528321E698C4100B8FB95 /* coverage.rb in Resources */ = {isa = PBXBuildFile; fileRef = BB6528301E698C4100B8FB95 /* coverage.rb */; };
BB6528331E698C4100B8FB95 /* Coverage.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB6528311E698C4100B8FB95 /* Coverage.swift */; };
BB8192D41F8855F100C96522 /* InjectUnitTests.pm in Resources */ = {isa = PBXBuildFile; fileRef = BB63C9D21F78105D0048D83B /* InjectUnitTests.pm */; };
BBCE04D81E0E16350097E1E6 /* openBundle.pl in Resources */ = {isa = PBXBuildFile; fileRef = BBCE04D71E0E16350097E1E6 /* openBundle.pl */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
BB356AEA1E0B09F60056B10F /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BB356A451E0AF2780056B10F /* Project object */;
proxyType = 1;
remoteGlobalIDString = BB356AD51E0B09000056B10F;
remoteInfo = com.johnholdsworth.Injectorator.Helper;
};
BB356B061E0B0BCE0056B10F /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BB356A451E0AF2780056B10F /* Project object */;
proxyType = 1;
remoteGlobalIDString = BB356AFB1E0B0B8A0056B10F;
remoteInfo = InjectionBootstrap;
};
BB356B601E0B184D0056B10F /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BB356B5C1E0B184C0056B10F /* InjectionLoader.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = BB356B531E0B184C0056B10F;
remoteInfo = InjectionLoader;
};
BB356BB21E0B8E940056B10F /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BB356BAE1E0B8E930056B10F /* XprobeSwift.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = BB356BA51E0B8E930056B10F;
remoteInfo = XprobeSwift;
};
BB356BD81E0C4C1B0056B10F /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BB356A451E0AF2780056B10F /* Project object */;
proxyType = 1;
remoteGlobalIDString = BB356BD01E0C4C0E0056B10F;
remoteInfo = injectSource;
};
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
BB356AD41E0B09000056B10F /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = /usr/share/man/man1/;
dstSubfolderSpec = 0;
files = (
);
runOnlyForDeploymentPostprocessing = 1;
};
BB356B7D1E0B54240056B10F /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = Contents/Library/LaunchServices;
dstSubfolderSpec = 1;
files = (
BB356B7E1E0B542F0056B10F /* com.johnholdsworth.Injectorator.Helper in CopyFiles */,
);
runOnlyForDeploymentPostprocessing = 0;
};
BB356BCF1E0C4C0E0056B10F /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = /usr/share/man/man1/;
dstSubfolderSpec = 0;
files = (
);
runOnlyForDeploymentPostprocessing = 1;
};
BB5A60B71E22211900B6C1D9 /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = /usr/share/man/man1/;
dstSubfolderSpec = 0;
files = (
);
runOnlyForDeploymentPostprocessing = 1;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
BB010BC01E1F39E800C3AACA /* RMPluginController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RMPluginController.h; path = ../Remote/Classes/RMPluginController.h; sourceTree = ""; };
BB010BC11E1F39E800C3AACA /* RMPluginController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RMPluginController.m; path = ../Remote/Classes/RMPluginController.m; sourceTree = ""; };
BB010BC21E1F39E800C3AACA /* RMPluginController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = RMPluginController.xib; path = ../Remote/Classes/RMPluginController.xib; sourceTree = ""; };
BB010BC31E1F39E800C3AACA /* RMWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RMWindowController.h; path = ../Remote/Classes/RMWindowController.h; sourceTree = ""; };
BB010BC41E1F39E800C3AACA /* RMWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RMWindowController.m; path = ../Remote/Classes/RMWindowController.m; sourceTree = ""; };
BB010BC51E1F39E800C3AACA /* RMWindowController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = RMWindowController.xib; path = ../Remote/Classes/RMWindowController.xib; sourceTree = ""; };
BB010BC61E1F39E800C3AACA /* RMMacroManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RMMacroManager.h; path = ../Remote/Classes/RMMacroManager.h; sourceTree = ""; };
BB010BC71E1F39E800C3AACA /* RMMacroManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RMMacroManager.m; path = ../Remote/Classes/RMMacroManager.m; sourceTree = ""; };
BB010BC81E1F39E800C3AACA /* RMDeviceController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RMDeviceController.h; path = ../Remote/Classes/RMDeviceController.h; sourceTree = ""; };
BB010BC91E1F39E800C3AACA /* RMDeviceController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RMDeviceController.m; path = ../Remote/Classes/RMDeviceController.m; sourceTree = ""; };
BB010BCA1E1F39E800C3AACA /* RMImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RMImageView.h; path = ../Remote/Classes/RMImageView.h; sourceTree = ""; };
BB010BCB1E1F39E800C3AACA /* RMImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RMImageView.m; path = ../Remote/Classes/RMImageView.m; sourceTree = ""; };
BB010BCC1E1F39E800C3AACA /* RemoteCapture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RemoteCapture.h; path = ../Remote/Classes/RemoteCapture.h; sourceTree = ""; };
BB010BCD1E1F39E800C3AACA /* RemoteHeaders.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RemoteHeaders.h; path = ../Remote/Classes/RemoteHeaders.h; sourceTree = ""; };
BB010BD41E1F3A0B00C3AACA /* iphone.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = iphone.png; path = ../Remote/iphone.png; sourceTree = ""; };
BB010BD51E1F3A0B00C3AACA /* log.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = log.html; path = ../Remote/log.html; sourceTree = ""; };
BB010BD71E1F3A0B00C3AACA /* patch.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; name = patch.py; path = ../Remote/patch.py; sourceTree = ""; };
BB010BD81E1F3A0B00C3AACA /* unpatch.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; name = unpatch.py; path = ../Remote/unpatch.py; sourceTree = ""; };
BB010BE51E1F3D5A00C3AACA /* RMController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RMController.swift; sourceTree = ""; };
BB010C0E1E1F85FF00C3AACA /* QTKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = System/Library/Frameworks/QTKit.framework; sourceTree = SDKROOT; };
BB248A921E210E2F003F0DF6 /* Benchmark.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Benchmark.swift; sourceTree = ""; };
BB25263D1F65CC9700898347 /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE; sourceTree = ""; };
BB356A4D1E0AF2780056B10F /* Injection.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Injection.app; sourceTree = BUILT_PRODUCTS_DIR; };
BB356A521E0AF2780056B10F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
BB356A571E0AF2780056B10F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
BB356A5D1E0AF2AC0056B10F /* Injectorator-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Injectorator-Bridging-Header.h"; sourceTree = ""; };
BB356A5E1E0AF2AD0056B10F /* AppController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = AppController.swift; path = ../../RefactoratorApp/Refactorator/AppController.swift; sourceTree = ""; };
BB356A5F1E0AF2AD0056B10F /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = ../../RefactoratorApp/Refactorator/AppDelegate.swift; sourceTree = ""; };
BB356A601E0AF2AD0056B10F /* Common.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Common.swift; path = ../../RefactoratorApp/Refactorator/Common.swift; sourceTree = ""; };
BB356A611E0AF2AD0056B10F /* Formatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Formatter.swift; path = ../../RefactoratorApp/Refactorator/Formatter.swift; sourceTree = ""; };
BB356A621E0AF2AD0056B10F /* Project.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Project.swift; path = ../../RefactoratorApp/Refactorator/Project.swift; sourceTree = ""; };
BB356A681E0AF2E20056B10F /* ByteRegex.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ByteRegex.swift; path = ../../Refactorator/refactord/ByteRegex.swift; sourceTree = ""; };
BB356A691E0AF2E20056B10F /* Entity.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Entity.swift; path = ../../Refactorator/refactord/Entity.swift; sourceTree = ""; };
BB356A6A1E0AF2E20056B10F /* IndexDB.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = IndexDB.swift; path = ../../Refactorator/refactord/IndexDB.swift; sourceTree = ""; };
BB356A6B1E0AF2E20056B10F /* IndexStrings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = IndexStrings.swift; path = ../../Refactorator/refactord/IndexStrings.swift; sourceTree = ""; };
BB356A6C1E0AF2E20056B10F /* LineGenerators.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LineGenerators.swift; path = ../../Refactorator/refactord/LineGenerators.swift; sourceTree = ""; };
BB356A6D1E0AF2E20056B10F /* LogParser.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LogParser.swift; path = ../../Refactorator/refactord/LogParser.swift; sourceTree = ""; };
BB356A6E1E0AF2E20056B10F /* SourceKit.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; name = SourceKit.swift; path = ../../Refactorator/refactord/SourceKit.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
BB356A6F1E0AF2E20056B10F /* sourcekitd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sourcekitd.h; path = ../../Refactorator/refactord/sourcekitd.h; sourceTree = ""; };
BB356A771E0AF30B0056B10F /* Xcode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Xcode.h; path = ../../RefactoratorApp/Refactorator/Xcode.h; sourceTree = ""; };
BB356A7A1E0AF36F0056B10F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = ../../RefactoratorApp/Refactorator/Base.lproj/MainMenu.xib; sourceTree = ""; };
BB356A7C1E0AF37A0056B10F /* Source.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = Source.html; path = ../../RefactoratorApp/Refactorator/Source.html; sourceTree = ""; };
BB356A7D1E0AF37A0056B10F /* canviz.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = canviz.html; path = ../../RefactoratorApp/Refactorator/canviz.html; sourceTree = ""; };
BB356A7E1E0AF37A0056B10F /* canviz2.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = canviz2.html; path = ../../RefactoratorApp/Refactorator/canviz2.html; sourceTree = ""; };
BB356A7F1E0AF37A0056B10F /* Intro.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = Intro.html; path = ../../RefactoratorApp/Refactorator/Intro.html; sourceTree = ""; };
BB356A841E0AF3910056B10F /* canviz-0.1 */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "canviz-0.1"; path = "../../RefactoratorApp/canviz-0.1"; sourceTree = ""; };
BB356A861E0AF3E10056B10F /* Utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Utils.h; path = ../../RefactoratorApp/Refactorator/Utils.h; sourceTree = ""; };
BB356A871E0AF3E10056B10F /* Utils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Utils.m; path = ../../RefactoratorApp/Refactorator/Utils.m; sourceTree = ""; };
BB356A8A1E0AF40B0056B10F /* libsqlite3.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.tbd; path = usr/lib/libsqlite3.tbd; sourceTree = SDKROOT; };
BB356A8D1E0AF4890056B10F /* App.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = App.icns; sourceTree = ""; };
BB356A8F1E0AF4AC0056B10F /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; };
BB356A911E0AF4C40056B10F /* sourcekitd.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = sourcekitd.framework; path = Toolchains/XcodeDefault.xctoolchain/usr/lib/sourcekitd.framework; sourceTree = DEVELOPER_DIR; };
BB356A991E0AF6BB0056B10F /* XprobeConsole.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XprobeConsole.h; path = ../../XprobePlugin/Classes/XprobeConsole.h; sourceTree = ""; };
BB356A9A1E0AF6BB0056B10F /* XprobeConsole.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XprobeConsole.m; path = ../../XprobePlugin/Classes/XprobeConsole.m; sourceTree = ""; };
BB356A9B1E0AF6BB0056B10F /* XprobeConsole.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = XprobeConsole.xib; path = ../../XprobePlugin/Classes/XprobeConsole.xib; sourceTree = ""; };
BB356A9C1E0AF6BB0056B10F /* XprobePluginMenuController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XprobePluginMenuController.h; path = ../../XprobePlugin/Classes/XprobePluginMenuController.h; sourceTree = ""; };
BB356A9D1E0AF6BB0056B10F /* XprobePluginMenuController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XprobePluginMenuController.m; path = ../../XprobePlugin/Classes/XprobePluginMenuController.m; sourceTree = ""; };
BB356A9E1E0AF6BB0056B10F /* XprobePluginMenuController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = XprobePluginMenuController.xib; path = ../../XprobePlugin/Classes/XprobePluginMenuController.xib; sourceTree = ""; };
BB356AA31E0AF6D80056B10F /* INPluginMenuController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = INPluginMenuController.h; path = ../../injectionforxcode/InjectionPluginLite/Classes/INPluginMenuController.h; sourceTree = ""; };
BB356AA41E0AF6D80056B10F /* INPluginMenuController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = INPluginMenuController.m; path = ../../injectionforxcode/InjectionPluginLite/Classes/INPluginMenuController.m; sourceTree = ""; };
BB356AA51E0AF6D80056B10F /* INPluginMenuController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = INPluginMenuController.xib; path = ../../injectionforxcode/InjectionPluginLite/Classes/INPluginMenuController.xib; sourceTree = ""; };
BB356AA61E0AF6D80056B10F /* INPluginClientController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = INPluginClientController.h; path = ../../injectionforxcode/InjectionPluginLite/Classes/INPluginClientController.h; sourceTree = ""; };
BB356AA71E0AF6D80056B10F /* INPluginClientController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = INPluginClientController.m; path = ../../injectionforxcode/InjectionPluginLite/Classes/INPluginClientController.m; sourceTree = ""; };
BB356AA81E0AF6D80056B10F /* FileWatcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FileWatcher.h; path = ../../injectionforxcode/InjectionPluginLite/Classes/FileWatcher.h; sourceTree = ""; };
BB356AA91E0AF6D80056B10F /* FileWatcher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FileWatcher.m; path = ../../injectionforxcode/InjectionPluginLite/Classes/FileWatcher.m; sourceTree = ""; };
BB356AAA1E0AF6D80056B10F /* BundleInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BundleInterface.h; path = ../../injectionforxcode/InjectionPluginLite/Classes/BundleInterface.h; sourceTree = ""; };
BB356AAB1E0AF6D80056B10F /* BundleInjection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BundleInjection.h; path = ../../injectionforxcode/InjectionPluginLite/Classes/BundleInjection.h; sourceTree = ""; };
BB356AAC1E0AF6D80056B10F /* BundleSweeper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BundleSweeper.h; path = ../../injectionforxcode/InjectionPluginLite/Classes/BundleSweeper.h; sourceTree = ""; };
BB356AAD1E0AF6D80056B10F /* IvarAccess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IvarAccess.h; path = ../../injectionforxcode/InjectionPluginLite/Classes/IvarAccess.h; sourceTree = ""; };
BB356AB21E0AF7F40056B10F /* Xtrace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Xtrace.h; path = ../../XprobePlugin/Classes/Xtrace.h; sourceTree = ""; };
BB356AB31E0AF7F40056B10F /* Xtrace.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = Xtrace.mm; path = ../../XprobePlugin/Classes/Xtrace.mm; sourceTree = ""; };
BB356AB41E0AF7F40056B10F /* Xprobe.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Xprobe.h; path = ../../XprobePlugin/Classes/Xprobe.h; sourceTree = ""; };
BB356AB51E0AF7F40056B10F /* Xprobe.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = Xprobe.mm; path = ../../XprobePlugin/Classes/Xprobe.mm; sourceTree = ""; };
BB356AB61E0AF7F40056B10F /* Xprobe+Service.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = "Xprobe+Service.mm"; path = "../../XprobePlugin/Classes/Xprobe+Service.mm"; sourceTree = ""; };
BB356ABA1E0AF8130056B10F /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
BB356ABC1E0B03220056B10F /* injection.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = injection.png; path = ../../injectionforxcode/InjectionPluginLite/injection.png; sourceTree = ""; };
BB356AD61E0B09000056B10F /* com.johnholdsworth.Injectorator.Helper */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = com.johnholdsworth.Injectorator.Helper; sourceTree = BUILT_PRODUCTS_DIR; };
BB356ADD1E0B09610056B10F /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ../../Smuggler/Helper/main.m; sourceTree = ""; };
BB356ADE1E0B09610056B10F /* Helper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Helper.h; path = ../../Smuggler/Helper/Helper.h; sourceTree = ""; };
BB356ADF1E0B09610056B10F /* Helper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Helper.m; path = ../../Smuggler/Helper/Helper.m; sourceTree = ""; };
BB356AE01E0B09610056B10F /* mach_inject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mach_inject.h; path = ../../Smuggler/Helper/mach_inject.h; sourceTree = ""; };
BB356AE11E0B09610056B10F /* mach_inject.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = mach_inject.c; path = ../../Smuggler/Helper/mach_inject.c; sourceTree = ""; };
BB356AE51E0B096D0056B10F /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
BB356AE61E0B096D0056B10F /* Info-Launchd.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "Info-Launchd.plist"; sourceTree = ""; };
BB356AFC1E0B0B8A0056B10F /* Bootstrap.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Bootstrap.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
BB356AFE1E0B0B8A0056B10F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
BB356B021E0B0BA20056B10F /* mach_inject_bundle_stub.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mach_inject_bundle_stub.h; path = ../../Smuggler/Bootstrap/mach_inject_bundle_stub.h; sourceTree = ""; };
BB356B031E0B0BA20056B10F /* mach_inject_bundle_stub.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = mach_inject_bundle_stub.c; path = ../../Smuggler/Bootstrap/mach_inject_bundle_stub.c; sourceTree = ""; };
BB356B081E0B0D0A0056B10F /* HelperInstaller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HelperInstaller.h; path = ../../Smuggler/Smuggler/HelperInstaller.h; sourceTree = ""; };
BB356B091E0B0D0A0056B10F /* HelperInstaller.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HelperInstaller.m; path = ../../Smuggler/Smuggler/HelperInstaller.m; sourceTree = ""; };
BB356B0A1E0B0D0A0056B10F /* HelperProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HelperProxy.h; path = ../../Smuggler/Smuggler/HelperProxy.h; sourceTree = ""; };
BB356B0B1E0B0D0A0056B10F /* HelperProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HelperProxy.m; path = ../../Smuggler/Smuggler/HelperProxy.m; sourceTree = ""; };
BB356B121E0B0E680056B10F /* InjectionOK.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = InjectionOK.tif; sourceTree = ""; };
BB356B5C1E0B184C0056B10F /* InjectionLoader.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = InjectionLoader.xcodeproj; path = InjectionLoader/InjectionLoader.xcodeproj; sourceTree = ""; };
BB356B7B1E0B4A9A0056B10F /* Credits.rtf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.rtf; path = Credits.rtf; sourceTree = ""; };
BB356B841E0B5A500056B10F /* InjectionIdle.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = InjectionIdle.tif; sourceTree = ""; };
BB356B861E0B5D450056B10F /* INController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = INController.swift; sourceTree = ""; };
BB356B881E0B72270056B10F /* common.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; name = common.pm; path = ../../injectionforxcode/InjectionPluginLite/common.pm; sourceTree = ""; };
BB356B8A1E0B72890056B10F /* iOSBundleTemplate */ = {isa = PBXFileReference; lastKnownFileType = folder; name = iOSBundleTemplate; path = ../injectionforxcode/InjectionPluginLite/iOSBundleTemplate; sourceTree = ""; };
BB356B8B1E0B72890056B10F /* OSXBundleTemplate */ = {isa = PBXFileReference; lastKnownFileType = folder; name = OSXBundleTemplate; path = ../injectionforxcode/InjectionPluginLite/OSXBundleTemplate; sourceTree = ""; };
BB356B901E0B75030056B10F /* injectSource.pl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; name = injectSource.pl; path = ../../injectionforxcode/InjectionPluginLite/injectSource.pl; sourceTree = ""; };
BB356B961E0B8A7F0056B10F /* xprobe.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = xprobe.html; path = ../../XprobePlugin/xprobe.html; sourceTree = ""; };
BB356B971E0B8A7F0056B10F /* tiny_red.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; name = tiny_red.gif; path = ../../XprobePlugin/tiny_red.gif; sourceTree = ""; };
BB356B9A1E0B8B0D0056B10F /* CodeMirror */ = {isa = PBXFileReference; lastKnownFileType = folder; name = CodeMirror; path = ../../XprobePlugin/CodeMirror; sourceTree = ""; };
BB356BAE1E0B8E930056B10F /* XprobeSwift.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = XprobeSwift.xcodeproj; path = XprobeSwift/XprobeSwift.xcodeproj; sourceTree = ""; };
BB356BC41E0B976E0056B10F /* evalCode.pl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; name = evalCode.pl; path = ../../injectionforxcode/InjectionPluginLite/evalCode.pl; sourceTree = ""; };
BB356BD11E0C4C0E0056B10F /* injectSource */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = injectSource; sourceTree = BUILT_PRODUCTS_DIR; };
BB356BD31E0C4C0F0056B10F /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; };
BB356BDF1E0C758F0056B10F /* Integration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Integration.swift; sourceTree = ""; };
BB356C001E0D9B410056B10F /* Integration.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = Integration.xib; sourceTree = ""; };
BB356C051E0DA0E40056B10F /* patchProject.pl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; name = patchProject.pl; path = ../../injectionforxcode/InjectionPluginLite/patchProject.pl; sourceTree = ""; };
BB356C081E0DA37C0056B10F /* revertProject.pl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; name = revertProject.pl; path = ../../injectionforxcode/InjectionPluginLite/revertProject.pl; sourceTree = ""; };
BB4847BC1E380E1000622FA4 /* DDHotKeyCenter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DDHotKeyCenter.h; path = ../../DDHotKey/DDHotKeyCenter.h; sourceTree = ""; };
BB4847BD1E380E1000622FA4 /* DDHotKeyCenter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DDHotKeyCenter.m; path = ../../DDHotKey/DDHotKeyCenter.m; sourceTree = ""; };
BB4847BE1E380E1000622FA4 /* DDHotKeyUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DDHotKeyUtilities.h; path = ../../DDHotKey/DDHotKeyUtilities.h; sourceTree = ""; };
BB4847BF1E380E1000622FA4 /* DDHotKeyUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DDHotKeyUtilities.m; path = ../../DDHotKey/DDHotKeyUtilities.m; sourceTree = ""; };
BB5A609E1E221EA600B6C1D9 /* closed_folder_orange.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = closed_folder_orange.png; path = ../DiskTree/closed_folder_orange.png; sourceTree = ""; };
BB5A609F1E221EA600B6C1D9 /* open_folder_orange.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = open_folder_orange.png; path = ../DiskTree/open_folder_orange.png; sourceTree = ""; };
BB5A60A01E221EA600B6C1D9 /* document.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = document.png; path = ../DiskTree/document.png; sourceTree = ""; };
BB5A60A11E221EA600B6C1D9 /* scan2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = scan2.png; path = ../DiskTree/scan2.png; sourceTree = ""; };
BB5A60A21E221EA600B6C1D9 /* scan.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = scan.png; path = ../DiskTree/scan.png; sourceTree = ""; };
BB5A60A81E221EB400B6C1D9 /* DiskTreeAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DiskTreeAppDelegate.h; path = ../DiskTree/DiskTreeAppDelegate.h; sourceTree = ""; };
BB5A60A91E221EB400B6C1D9 /* DiskTreeAppDelegate.m */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; name = DiskTreeAppDelegate.m; path = ../DiskTree/DiskTreeAppDelegate.m; sourceTree = ""; };
BB5A60B11E221F5C00B6C1D9 /* DiskTree.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = DiskTree.html; path = DiskTree/DiskTree.html; sourceTree = ""; };
BB5A60B21E221F5C00B6C1D9 /* DiskTree.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = DiskTree.xib; path = DiskTree/DiskTree.xib; sourceTree = ""; };
BB5A60B91E22211900B6C1D9 /* tree */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = tree; sourceTree = BUILT_PRODUCTS_DIR; };
BB5A60C61E2221EC00B6C1D9 /* tree.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tree.c; path = DiskTree/tree.c; sourceTree = ""; };
BB5A60C91E2222A200B6C1D9 /* objcpp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = objcpp.h; path = ../ObjCpp/objcpp.h; sourceTree = ""; };
BB5A60CA1E2222A200B6C1D9 /* objstr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = objstr.h; path = ../ObjCpp/objstr.h; sourceTree = ""; };
BB63C9D21F78105D0048D83B /* InjectUnitTests.pm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; name = InjectUnitTests.pm; path = ../../injectionforxcode/InjectionPluginLite/InjectUnitTests.pm; sourceTree = ""; };
BB63C9D81F7862A30048D83B /* docs */ = {isa = PBXFileReference; lastKnownFileType = folder; path = docs; sourceTree = ""; };
BB6528301E698C4100B8FB95 /* coverage.rb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; name = coverage.rb; path = ../../RefactoratorApp/Refactorator/coverage.rb; sourceTree = ""; };
BB6528311E698C4100B8FB95 /* Coverage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Coverage.swift; path = ../../RefactoratorApp/Refactorator/Coverage.swift; sourceTree = ""; };
BB7D5F0D1E15B94200393CA1 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; };
BBCE04D71E0E16350097E1E6 /* openBundle.pl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; name = openBundle.pl; path = ../../injectionforxcode/InjectionPluginLite/openBundle.pl; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
BB356A4A1E0AF2780056B10F /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
BB356A901E0AF4AC0056B10F /* WebKit.framework in Frameworks */,
BB010C0F1E1F85FF00C3AACA /* QTKit.framework in Frameworks */,
BB356A8B1E0AF40B0056B10F /* libsqlite3.tbd in Frameworks */,
BB356ABB1E0AF8130056B10F /* libz.tbd in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
BB356AD31E0B09000056B10F /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
BB356AF91E0B0B8A0056B10F /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
BB356BCE1E0C4C0E0056B10F /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
BB5A60B61E22211900B6C1D9 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
BB010BBD1E1F39BE00C3AACA /* Remote */ = {
isa = PBXGroup;
children = (
BB010BC01E1F39E800C3AACA /* RMPluginController.h */,
BB010BC11E1F39E800C3AACA /* RMPluginController.m */,
BB010BC21E1F39E800C3AACA /* RMPluginController.xib */,
BB010BC31E1F39E800C3AACA /* RMWindowController.h */,
BB010BC41E1F39E800C3AACA /* RMWindowController.m */,
BB010BC51E1F39E800C3AACA /* RMWindowController.xib */,
BB010BC61E1F39E800C3AACA /* RMMacroManager.h */,
BB010BC71E1F39E800C3AACA /* RMMacroManager.m */,
BB010BC81E1F39E800C3AACA /* RMDeviceController.h */,
BB010BC91E1F39E800C3AACA /* RMDeviceController.m */,
BB010BCA1E1F39E800C3AACA /* RMImageView.h */,
BB010BCB1E1F39E800C3AACA /* RMImageView.m */,
BB010BCC1E1F39E800C3AACA /* RemoteCapture.h */,
BB010BCD1E1F39E800C3AACA /* RemoteHeaders.h */,
BB010BD31E1F39FE00C3AACA /* Resources */,
);
name = Remote;
sourceTree = "";
};
BB010BD31E1F39FE00C3AACA /* Resources */ = {
isa = PBXGroup;
children = (
BB010BD41E1F3A0B00C3AACA /* iphone.png */,
BB010BD51E1F3A0B00C3AACA /* log.html */,
BB010BD71E1F3A0B00C3AACA /* patch.py */,
BB010BD81E1F3A0B00C3AACA /* unpatch.py */,
);
name = Resources;
sourceTree = "";
};
BB356A441E0AF2780056B10F = {
isa = PBXGroup;
children = (
BB63C9D81F7862A30048D83B /* docs */,
BB25263D1F65CC9700898347 /* LICENSE */,
BB7D5F0D1E15B94200393CA1 /* README.md */,
BB356A4F1E0AF2780056B10F /* Injectorator */,
BB356ABE1E0B04B80056B10F /* Refactorator */,
BB356A971E0AF6710056B10F /* Injection */,
BB356A981E0AF67D0056B10F /* Xprobe */,
BB010BBD1E1F39BE00C3AACA /* Remote */,
BB5A609B1E221E7000B6C1D9 /* DiskTree */,
BB356AD71E0B09000056B10F /* InjectionHelper */,
BB356AFD1E0B0B8A0056B10F /* InjectionBootstrap */,
BB356B5C1E0B184C0056B10F /* InjectionLoader.xcodeproj */,
BB356BAE1E0B8E930056B10F /* XprobeSwift.xcodeproj */,
BB356B8A1E0B72890056B10F /* iOSBundleTemplate */,
BB356B8B1E0B72890056B10F /* OSXBundleTemplate */,
BB356BD21E0C4C0F0056B10F /* injectSource */,
BB356A891E0AF40A0056B10F /* Frameworks */,
BB356A4E1E0AF2780056B10F /* Products */,
);
sourceTree = "";
};
BB356A4E1E0AF2780056B10F /* Products */ = {
isa = PBXGroup;
children = (
BB356A4D1E0AF2780056B10F /* Injection.app */,
BB356AD61E0B09000056B10F /* com.johnholdsworth.Injectorator.Helper */,
BB356AFC1E0B0B8A0056B10F /* Bootstrap.bundle */,
BB356BD11E0C4C0E0056B10F /* injectSource */,
BB5A60B91E22211900B6C1D9 /* tree */,
);
name = Products;
sourceTree = "";
};
BB356A4F1E0AF2780056B10F /* Injectorator */ = {
isa = PBXGroup;
children = (
BB356BDF1E0C758F0056B10F /* Integration.swift */,
BB356C001E0D9B410056B10F /* Integration.xib */,
BB248A921E210E2F003F0DF6 /* Benchmark.swift */,
BB356B861E0B5D450056B10F /* INController.swift */,
BB010BE51E1F3D5A00C3AACA /* RMController.swift */,
BB356B081E0B0D0A0056B10F /* HelperInstaller.h */,
BB356B091E0B0D0A0056B10F /* HelperInstaller.m */,
BB356B0A1E0B0D0A0056B10F /* HelperProxy.h */,
BB356B0B1E0B0D0A0056B10F /* HelperProxy.m */,
BB4847BC1E380E1000622FA4 /* DDHotKeyCenter.h */,
BB4847BD1E380E1000622FA4 /* DDHotKeyCenter.m */,
BB4847BE1E380E1000622FA4 /* DDHotKeyUtilities.h */,
BB4847BF1E380E1000622FA4 /* DDHotKeyUtilities.m */,
BB356B841E0B5A500056B10F /* InjectionIdle.tif */,
BB356B121E0B0E680056B10F /* InjectionOK.tif */,
BB356B881E0B72270056B10F /* common.pm */,
BB356C051E0DA0E40056B10F /* patchProject.pl */,
BB356C081E0DA37C0056B10F /* revertProject.pl */,
BB356B901E0B75030056B10F /* injectSource.pl */,
BBCE04D71E0E16350097E1E6 /* openBundle.pl */,
BB356BC41E0B976E0056B10F /* evalCode.pl */,
BB63C9D21F78105D0048D83B /* InjectUnitTests.pm */,
BB356A5D1E0AF2AC0056B10F /* Injectorator-Bridging-Header.h */,
BB356A781E0AF32A0056B10F /* Resources */,
);
path = Injectorator;
sourceTree = "";
};
BB356A781E0AF32A0056B10F /* Resources */ = {
isa = PBXGroup;
children = (
BB356A521E0AF2780056B10F /* Assets.xcassets */,
BB356A791E0AF36E0056B10F /* MainMenu.xib */,
BB356B7B1E0B4A9A0056B10F /* Credits.rtf */,
BB356A8D1E0AF4890056B10F /* App.icns */,
BB356A571E0AF2780056B10F /* Info.plist */,
BB356A7C1E0AF37A0056B10F /* Source.html */,
BB356A7D1E0AF37A0056B10F /* canviz.html */,
BB356A7E1E0AF37A0056B10F /* canviz2.html */,
BB356A7F1E0AF37A0056B10F /* Intro.html */,
BB356A841E0AF3910056B10F /* canviz-0.1 */,
);
name = Resources;
sourceTree = "";
};
BB356A891E0AF40A0056B10F /* Frameworks */ = {
isa = PBXGroup;
children = (
BB010C0E1E1F85FF00C3AACA /* QTKit.framework */,
BB356ABA1E0AF8130056B10F /* libz.tbd */,
BB356A911E0AF4C40056B10F /* sourcekitd.framework */,
BB356A8F1E0AF4AC0056B10F /* WebKit.framework */,
BB356A8A1E0AF40B0056B10F /* libsqlite3.tbd */,
);
name = Frameworks;
sourceTree = "";
};
BB356A971E0AF6710056B10F /* Injection */ = {
isa = PBXGroup;
children = (
BB356AA31E0AF6D80056B10F /* INPluginMenuController.h */,
BB356AA41E0AF6D80056B10F /* INPluginMenuController.m */,
BB356AA51E0AF6D80056B10F /* INPluginMenuController.xib */,
BB356AA61E0AF6D80056B10F /* INPluginClientController.h */,
BB356AA71E0AF6D80056B10F /* INPluginClientController.m */,
BB356AA81E0AF6D80056B10F /* FileWatcher.h */,
BB356AA91E0AF6D80056B10F /* FileWatcher.m */,
BB356AAA1E0AF6D80056B10F /* BundleInterface.h */,
BB356AAB1E0AF6D80056B10F /* BundleInjection.h */,
BB356AAC1E0AF6D80056B10F /* BundleSweeper.h */,
BB356AAD1E0AF6D80056B10F /* IvarAccess.h */,
BB356ABC1E0B03220056B10F /* injection.png */,
);
name = Injection;
path = Injectorator;
sourceTree = "";
};
BB356A981E0AF67D0056B10F /* Xprobe */ = {
isa = PBXGroup;
children = (
BB356AB21E0AF7F40056B10F /* Xtrace.h */,
BB356AB31E0AF7F40056B10F /* Xtrace.mm */,
BB356AB41E0AF7F40056B10F /* Xprobe.h */,
BB356AB51E0AF7F40056B10F /* Xprobe.mm */,
BB356AB61E0AF7F40056B10F /* Xprobe+Service.mm */,
BB356A991E0AF6BB0056B10F /* XprobeConsole.h */,
BB356A9A1E0AF6BB0056B10F /* XprobeConsole.m */,
BB356A9B1E0AF6BB0056B10F /* XprobeConsole.xib */,
BB356A9C1E0AF6BB0056B10F /* XprobePluginMenuController.h */,
BB356A9D1E0AF6BB0056B10F /* XprobePluginMenuController.m */,
BB356A9E1E0AF6BB0056B10F /* XprobePluginMenuController.xib */,
BB356B961E0B8A7F0056B10F /* xprobe.html */,
BB356B971E0B8A7F0056B10F /* tiny_red.gif */,
BB356B9A1E0B8B0D0056B10F /* CodeMirror */,
);
name = Xprobe;
path = Injectorator;
sourceTree = "";
};
BB356ABE1E0B04B80056B10F /* Refactorator */ = {
isa = PBXGroup;
children = (
BB356A5F1E0AF2AD0056B10F /* AppDelegate.swift */,
BB356A5E1E0AF2AD0056B10F /* AppController.swift */,
BB356A611E0AF2AD0056B10F /* Formatter.swift */,
BB356A601E0AF2AD0056B10F /* Common.swift */,
BB356A621E0AF2AD0056B10F /* Project.swift */,
BB356A691E0AF2E20056B10F /* Entity.swift */,
BB356A6A1E0AF2E20056B10F /* IndexDB.swift */,
BB356A681E0AF2E20056B10F /* ByteRegex.swift */,
BB356A6B1E0AF2E20056B10F /* IndexStrings.swift */,
BB356A6C1E0AF2E20056B10F /* LineGenerators.swift */,
BB356A6D1E0AF2E20056B10F /* LogParser.swift */,
BB356A6E1E0AF2E20056B10F /* SourceKit.swift */,
BB6528311E698C4100B8FB95 /* Coverage.swift */,
BB6528301E698C4100B8FB95 /* coverage.rb */,
BB356A6F1E0AF2E20056B10F /* sourcekitd.h */,
BB356A771E0AF30B0056B10F /* Xcode.h */,
BB356A861E0AF3E10056B10F /* Utils.h */,
BB356A871E0AF3E10056B10F /* Utils.m */,
);
name = Refactorator;
path = Injectorator;
sourceTree = "";
};
BB356AD71E0B09000056B10F /* InjectionHelper */ = {
isa = PBXGroup;
children = (
BB356ADD1E0B09610056B10F /* main.m */,
BB356ADE1E0B09610056B10F /* Helper.h */,
BB356ADF1E0B09610056B10F /* Helper.m */,
BB356AE01E0B09610056B10F /* mach_inject.h */,
BB356AE11E0B09610056B10F /* mach_inject.c */,
BB356AE51E0B096D0056B10F /* Info.plist */,
BB356AE61E0B096D0056B10F /* Info-Launchd.plist */,
);
path = InjectionHelper;
sourceTree = "";
};
BB356AFD1E0B0B8A0056B10F /* InjectionBootstrap */ = {
isa = PBXGroup;
children = (
BB356B021E0B0BA20056B10F /* mach_inject_bundle_stub.h */,
BB356B031E0B0BA20056B10F /* mach_inject_bundle_stub.c */,
BB356AFE1E0B0B8A0056B10F /* Info.plist */,
);
path = InjectionBootstrap;
sourceTree = "";
};
BB356B5D1E0B184C0056B10F /* Products */ = {
isa = PBXGroup;
children = (
BB356B611E0B184D0056B10F /* InjectionLoader.bundle */,
);
name = Products;
sourceTree = "";
};
BB356BAF1E0B8E930056B10F /* Products */ = {
isa = PBXGroup;
children = (
BB356BB31E0B8E940056B10F /* XprobeSwift.bundle */,
);
name = Products;
sourceTree = "";
};
BB356BD21E0C4C0F0056B10F /* injectSource */ = {
isa = PBXGroup;
children = (
BB356BD31E0C4C0F0056B10F /* main.m */,
);
path = injectSource;
sourceTree = "";
};
BB5A609B1E221E7000B6C1D9 /* DiskTree */ = {
isa = PBXGroup;
children = (
BB5A60C91E2222A200B6C1D9 /* objcpp.h */,
BB5A60CA1E2222A200B6C1D9 /* objstr.h */,
BB5A60B21E221F5C00B6C1D9 /* DiskTree.xib */,
BB5A60B11E221F5C00B6C1D9 /* DiskTree.html */,
BB5A60A81E221EB400B6C1D9 /* DiskTreeAppDelegate.h */,
BB5A60A91E221EB400B6C1D9 /* DiskTreeAppDelegate.m */,
BB5A609E1E221EA600B6C1D9 /* closed_folder_orange.png */,
BB5A609F1E221EA600B6C1D9 /* open_folder_orange.png */,
BB5A60A01E221EA600B6C1D9 /* document.png */,
BB5A60A11E221EA600B6C1D9 /* scan2.png */,
BB5A60A21E221EA600B6C1D9 /* scan.png */,
BB5A60C61E2221EC00B6C1D9 /* tree.c */,
);
name = DiskTree;
sourceTree = "";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
BB356A4C1E0AF2780056B10F /* Injection */ = {
isa = PBXNativeTarget;
buildConfigurationList = BB356A5A1E0AF2780056B10F /* Build configuration list for PBXNativeTarget "Injection" */;
buildPhases = (
BBE9E2F51E32274A00CF0929 /* ShellScript */,
BB356A491E0AF2780056B10F /* Sources */,
BB356A4A1E0AF2780056B10F /* Frameworks */,
BB356A4B1E0AF2780056B10F /* Resources */,
BB356B7D1E0B54240056B10F /* CopyFiles */,
BB356B6D1E0B192C0056B10F /* ShellScript */,
);
buildRules = (
);
dependencies = (
BB356AEB1E0B09F60056B10F /* PBXTargetDependency */,
BB356B071E0B0BCE0056B10F /* PBXTargetDependency */,
BB356BD91E0C4C1B0056B10F /* PBXTargetDependency */,
);
name = Injection;
productName = Injectorator;
productReference = BB356A4D1E0AF2780056B10F /* Injection.app */;
productType = "com.apple.product-type.application";
};
BB356AD51E0B09000056B10F /* com.johnholdsworth.Injectorator.Helper */ = {
isa = PBXNativeTarget;
buildConfigurationList = BB356ADA1E0B09000056B10F /* Build configuration list for PBXNativeTarget "com.johnholdsworth.Injectorator.Helper" */;
buildPhases = (
BB356AD21E0B09000056B10F /* Sources */,
BB356AD31E0B09000056B10F /* Frameworks */,
BB356AD41E0B09000056B10F /* CopyFiles */,
);
buildRules = (
);
dependencies = (
);
name = com.johnholdsworth.Injectorator.Helper;
productName = InjectionHelper;
productReference = BB356AD61E0B09000056B10F /* com.johnholdsworth.Injectorator.Helper */;
productType = "com.apple.product-type.tool";
};
BB356AFB1E0B0B8A0056B10F /* InjectionBootstrap */ = {
isa = PBXNativeTarget;
buildConfigurationList = BB356AFF1E0B0B8A0056B10F /* Build configuration list for PBXNativeTarget "InjectionBootstrap" */;
buildPhases = (
BB356AF81E0B0B8A0056B10F /* Sources */,
BB356AF91E0B0B8A0056B10F /* Frameworks */,
);
buildRules = (
);
dependencies = (
);
name = InjectionBootstrap;
productName = InjectionBootstrap;
productReference = BB356AFC1E0B0B8A0056B10F /* Bootstrap.bundle */;
productType = "com.apple.product-type.bundle";
};
BB356BD01E0C4C0E0056B10F /* injectSource */ = {
isa = PBXNativeTarget;
buildConfigurationList = BB356BD71E0C4C130056B10F /* Build configuration list for PBXNativeTarget "injectSource" */;
buildPhases = (
BB356BCD1E0C4C0E0056B10F /* Sources */,
BB356BCE1E0C4C0E0056B10F /* Frameworks */,
BB356BCF1E0C4C0E0056B10F /* CopyFiles */,
);
buildRules = (
);
dependencies = (
);
name = injectSource;
productName = injectSource;
productReference = BB356BD11E0C4C0E0056B10F /* injectSource */;
productType = "com.apple.product-type.tool";
};
BB5A60B81E22211900B6C1D9 /* tree */ = {
isa = PBXNativeTarget;
buildConfigurationList = BB5A60BD1E22211900B6C1D9 /* Build configuration list for PBXNativeTarget "tree" */;
buildPhases = (
BB5A60B51E22211900B6C1D9 /* Sources */,
BB5A60B61E22211900B6C1D9 /* Frameworks */,
BB5A60B71E22211900B6C1D9 /* CopyFiles */,
);
buildRules = (
);
dependencies = (
);
name = tree;
productName = tree;
productReference = BB5A60B91E22211900B6C1D9 /* tree */;
productType = "com.apple.product-type.tool";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
BB356A451E0AF2780056B10F /* Project object */ = {
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0820;
LastUpgradeCheck = 0820;
ORGANIZATIONNAME = "John Holdsworth";
TargetAttributes = {
BB356A4C1E0AF2780056B10F = {
CreatedOnToolsVersion = 8.2.1;
DevelopmentTeam = 9V5A8WE85E;
LastSwiftMigration = 0820;
ProvisioningStyle = Manual;
};
BB356AD51E0B09000056B10F = {
CreatedOnToolsVersion = 8.2.1;
DevelopmentTeam = 9V5A8WE85E;
LastSwiftMigration = 0820;
ProvisioningStyle = Manual;
};
BB356AFB1E0B0B8A0056B10F = {
CreatedOnToolsVersion = 8.2.1;
DevelopmentTeam = 9V5A8WE85E;
ProvisioningStyle = Manual;
};
BB356BD01E0C4C0E0056B10F = {
CreatedOnToolsVersion = 8.2.1;
DevelopmentTeam = 9V5A8WE85E;
ProvisioningStyle = Manual;
};
BB5A60B81E22211900B6C1D9 = {
CreatedOnToolsVersion = 8.2.1;
DevelopmentTeam = 9V5A8WE85E;
ProvisioningStyle = Manual;
};
};
};
buildConfigurationList = BB356A481E0AF2780056B10F /* Build configuration list for PBXProject "Injectorator" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = BB356A441E0AF2780056B10F;
productRefGroup = BB356A4E1E0AF2780056B10F /* Products */;
projectDirPath = "";
projectReferences = (
{
ProductGroup = BB356B5D1E0B184C0056B10F /* Products */;
ProjectRef = BB356B5C1E0B184C0056B10F /* InjectionLoader.xcodeproj */;
},
{
ProductGroup = BB356BAF1E0B8E930056B10F /* Products */;
ProjectRef = BB356BAE1E0B8E930056B10F /* XprobeSwift.xcodeproj */;
},
);
projectRoot = "";
targets = (
BB356A4C1E0AF2780056B10F /* Injection */,
BB356AD51E0B09000056B10F /* com.johnholdsworth.Injectorator.Helper */,
BB356AFB1E0B0B8A0056B10F /* InjectionBootstrap */,
BB356BD01E0C4C0E0056B10F /* injectSource */,
BB5A60B81E22211900B6C1D9 /* tree */,
);
};
/* End PBXProject section */
/* Begin PBXReferenceProxy section */
BB356B611E0B184D0056B10F /* InjectionLoader.bundle */ = {
isa = PBXReferenceProxy;
fileType = wrapper.cfbundle;
path = InjectionLoader.bundle;
remoteRef = BB356B601E0B184D0056B10F /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
BB356BB31E0B8E940056B10F /* XprobeSwift.bundle */ = {
isa = PBXReferenceProxy;
fileType = wrapper.cfbundle;
path = XprobeSwift.bundle;
remoteRef = BB356BB21E0B8E940056B10F /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
/* End PBXReferenceProxy section */
/* Begin PBXResourcesBuildPhase section */
BB356A4B1E0AF2780056B10F /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
BB4847C81E38155D00622FA4 /* DDHotKeyCenter.h in Resources */,
BB20D57A1E1F98640013C59F /* README.md in Resources */,
BB010BE71E1F437C00C3AACA /* RMPluginController.xib in Resources */,
BB5A60A61E221EA600B6C1D9 /* scan2.png in Resources */,
BB010BE81E1F437C00C3AACA /* RMWindowController.xib in Resources */,
BB356C091E0DA37C0056B10F /* revertProject.pl in Resources */,
BBCE04D81E0E16350097E1E6 /* openBundle.pl in Resources */,
BB356BDA1E0C4C2A0056B10F /* injectSource in Resources */,
BB356B051E0B0BC40056B10F /* Bootstrap.bundle in Resources */,
BB356B8E1E0B747B0056B10F /* BundleInterface.h in Resources */,
BB010BDC1E1F3A0B00C3AACA /* patch.py in Resources */,
BB010BDA1E1F3A0B00C3AACA /* log.html in Resources */,
BB356B8F1E0B747B0056B10F /* BundleInjection.h in Resources */,
BB356C311E0DA78B0056B10F /* BundleSweeper.h in Resources */,
BB356C321E0DA7970056B10F /* IvarAccess.h in Resources */,
BB25263E1F65CC9700898347 /* LICENSE in Resources */,
BB356B891E0B72270056B10F /* common.pm in Resources */,
BB356C071E0DA11C0056B10F /* patchProject.pl in Resources */,
BB356B911E0B75030056B10F /* injectSource.pl in Resources */,
BB356BC51E0B976E0056B10F /* evalCode.pl in Resources */,
BB8192D41F8855F100C96522 /* InjectUnitTests.pm in Resources */,
BB356B8C1E0B72890056B10F /* iOSBundleTemplate in Resources */,
BB356B8D1E0B72890056B10F /* OSXBundleTemplate in Resources */,
BB356AAF1E0AF6D80056B10F /* INPluginMenuController.xib in Resources */,
BB356AA21E0AF6BB0056B10F /* XprobePluginMenuController.xib in Resources */,
BB63C9DB1F7862A30048D83B /* docs in Resources */,
BB356AA01E0AF6BB0056B10F /* XprobeConsole.xib in Resources */,
BB356B991E0B8A7F0056B10F /* tiny_red.gif in Resources */,
BB6528321E698C4100B8FB95 /* coverage.rb in Resources */,
BB356B981E0B8A7F0056B10F /* xprobe.html in Resources */,
BB356A831E0AF37A0056B10F /* Intro.html in Resources */,
BB356A801E0AF37A0056B10F /* Source.html in Resources */,
BB356A811E0AF37A0056B10F /* canviz.html in Resources */,
BB356A821E0AF37A0056B10F /* canviz2.html in Resources */,
BB010BDD1E1F3A0B00C3AACA /* unpatch.py in Resources */,
BB356A851E0AF3910056B10F /* canviz-0.1 in Resources */,
BB5A60A71E221EA600B6C1D9 /* scan.png in Resources */,
BB356B9B1E0B8B0D0056B10F /* CodeMirror in Resources */,
BB356A531E0AF2780056B10F /* Assets.xcassets in Resources */,
BB356C041E0D9FC20056B10F /* Integration.xib in Resources */,
BB356A7B1E0AF36F0056B10F /* MainMenu.xib in Resources */,
BB5A60B41E221F5C00B6C1D9 /* DiskTree.xib in Resources */,
BB5A60B31E221F5C00B6C1D9 /* DiskTree.html in Resources */,
BB356A8E1E0AF4890056B10F /* App.icns in Resources */,
BB356B131E0B0E680056B10F /* InjectionOK.tif in Resources */,
BB356B851E0B5A500056B10F /* InjectionIdle.tif in Resources */,
BB356B7C1E0B4A9A0056B10F /* Credits.rtf in Resources */,
BB010BD91E1F3A0B00C3AACA /* iphone.png in Resources */,
BB356ABD1E0B03220056B10F /* injection.png in Resources */,
BB356A8C1E0AF42A0056B10F /* Xcode.h in Resources */,
BB010BDE1E1F3A5600C3AACA /* RemoteCapture.h in Resources */,
BB010BDF1E1F3A5600C3AACA /* RemoteHeaders.h in Resources */,
BB5A60A31E221EA600B6C1D9 /* closed_folder_orange.png in Resources */,
BB5A60A41E221EA600B6C1D9 /* open_folder_orange.png in Resources */,
BB5A60A51E221EA600B6C1D9 /* document.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
BB356B6D1E0B192C0056B10F /* ShellScript */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = "/bin/sh -x";
shellScript = "SYMROOT=/tmp\nchmod +x \"$CODESIGNING_FOLDER_PATH/Contents/Resources\"/*.pl &&\ncd InjectionLoader && \"$DEVELOPER_BIN_DIR\"/xcodebuild SYMROOT=$SYMROOT -arch x86_64 -sdk iphonesimulator -config Debug && cd - &&\ncp -rfv $SYMROOT/*-iphonesimulator/InjectionLoader.bundle \"$CODESIGNING_FOLDER_PATH/Contents/Resources\" &&\ncd XprobeSwift && \"$DEVELOPER_BIN_DIR\"/xcodebuild SYMROOT=$SYMROOT -arch x86_64 -sdk iphonesimulator -config Debug && cd - &&\nrm -rf \"$CODESIGNING_FOLDER_PATH/Contents/Resources/InjectionLoader.bundle/XprobeSwift.loader\" &&\ncp -rfv $SYMROOT/*-iphonesimulator/XprobeSwift.bundle \"$CODESIGNING_FOLDER_PATH/Contents/Resources/InjectionLoader.bundle/XprobeSwift.loader\" &&\ncd ../XprobePlugin/XprobeBundle &&\n\"$DEVELOPER_BIN_DIR\"/xcodebuild SYMROOT=$SYMROOT -arch x86_64 -sdk macosx -config Debug &&\ncp -rfv $SYMROOT/Debug/XprobeBundle.loader \"$CODESIGNING_FOLDER_PATH/Contents/Resources\" && cd -\ncd XprobeSwift && \"$DEVELOPER_BIN_DIR\"/xcodebuild SYMROOT=$SYMROOT -arch x86_64 -sdk macosx -config Debug && cd - &&\nrm -rf \"$CODESIGNING_FOLDER_PATH/Contents/Resources/XprobeBundle.loader/XprobeSwift.loader\" &&\ncp -rfv $SYMROOT/Debug/XprobeSwift.bundle \"$CODESIGNING_FOLDER_PATH/Contents/Resources/XprobeBundle.loader/XprobeSwift.loader\"\n";
showEnvVarsInLog = 0;
};
BBE9E2F51E32274A00CF0929 /* ShellScript */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "buildNumber=$(/usr/libexec/PlistBuddy -c \"Print CFBundleVersion\" \"${PROJECT_DIR}/${INFOPLIST_FILE}\")\nbuildNumber=$(($buildNumber + 1))\nchmod +w \"${PROJECT_DIR}/${INFOPLIST_FILE}\"\n/usr/libexec/PlistBuddy -c \"Set :CFBundleVersion $buildNumber\" \"${PROJECT_DIR}/${INFOPLIST_FILE}\"\n";
showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
BB356A491E0AF2780056B10F /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
BB356AB01E0AF6D80056B10F /* INPluginClientController.m in Sources */,
BB356AAE1E0AF6D80056B10F /* INPluginMenuController.m in Sources */,
BB356AA11E0AF6BB0056B10F /* XprobePluginMenuController.m in Sources */,
BB5A60AB1E221EB400B6C1D9 /* DiskTreeAppDelegate.m in Sources */,
BB356A9F1E0AF6BB0056B10F /* XprobeConsole.m in Sources */,
BB356AB71E0AF7F40056B10F /* Xtrace.mm in Sources */,
BB356AB81E0AF7F40056B10F /* Xprobe.mm in Sources */,
BB356AB91E0AF7F40056B10F /* Xprobe+Service.mm in Sources */,
BB010BE01E1F3C2300C3AACA /* RMPluginController.m in Sources */,
BB6528331E698C4100B8FB95 /* Coverage.swift in Sources */,
BB010BE11E1F3C2300C3AACA /* RMWindowController.m in Sources */,
BB010BE21E1F3C2300C3AACA /* RMMacroManager.m in Sources */,
BB010BE31E1F3C2300C3AACA /* RMDeviceController.m in Sources */,
BB010BE41E1F3C2300C3AACA /* RMImageView.m in Sources */,
BB356BE31E0C761E0056B10F /* Integration.swift in Sources */,
BB248A941E210FCC003F0DF6 /* Benchmark.swift in Sources */,
BB356B871E0B5D450056B10F /* INController.swift in Sources */,
BB010BE61E1F3D5A00C3AACA /* RMController.swift in Sources */,
BB356A641E0AF2AD0056B10F /* AppDelegate.swift in Sources */,
BB356A631E0AF2AD0056B10F /* AppController.swift in Sources */,
BB356A661E0AF2AD0056B10F /* Formatter.swift in Sources */,
BB356A881E0AF3E10056B10F /* Utils.m in Sources */,
BB356B0C1E0B0D0A0056B10F /* HelperInstaller.m in Sources */,
BB356AB11E0AF6D80056B10F /* FileWatcher.m in Sources */,
BB356B0D1E0B0D0A0056B10F /* HelperProxy.m in Sources */,
BB356A651E0AF2AD0056B10F /* Common.swift in Sources */,
BB356A711E0AF2E20056B10F /* Entity.swift in Sources */,
BB356A671E0AF2AD0056B10F /* Project.swift in Sources */,
BB4847C11E380E1000622FA4 /* DDHotKeyUtilities.m in Sources */,
BB356A761E0AF2E20056B10F /* SourceKit.swift in Sources */,
BB4847C01E380E1000622FA4 /* DDHotKeyCenter.m in Sources */,
BB356A731E0AF2E20056B10F /* IndexStrings.swift in Sources */,
BB356A721E0AF2E20056B10F /* IndexDB.swift in Sources */,
BB356A751E0AF2E20056B10F /* LogParser.swift in Sources */,
BB356A701E0AF2E20056B10F /* ByteRegex.swift in Sources */,
BB356A741E0AF2E20056B10F /* LineGenerators.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
BB356AD21E0B09000056B10F /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
BB356AE21E0B09610056B10F /* main.m in Sources */,
BB356AE31E0B09610056B10F /* Helper.m in Sources */,
BB356AE41E0B09610056B10F /* mach_inject.c in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
BB356AF81E0B0B8A0056B10F /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
BB356B041E0B0BA20056B10F /* mach_inject_bundle_stub.c in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
BB356BCD1E0C4C0E0056B10F /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
BB356BD41E0C4C0F0056B10F /* main.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
BB5A60B51E22211900B6C1D9 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
BB5A60C81E22220B00B6C1D9 /* tree.c in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
BB356AEB1E0B09F60056B10F /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = BB356AD51E0B09000056B10F /* com.johnholdsworth.Injectorator.Helper */;
targetProxy = BB356AEA1E0B09F60056B10F /* PBXContainerItemProxy */;
};
BB356B071E0B0BCE0056B10F /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = BB356AFB1E0B0B8A0056B10F /* InjectionBootstrap */;
targetProxy = BB356B061E0B0BCE0056B10F /* PBXContainerItemProxy */;
};
BB356BD91E0C4C1B0056B10F /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = BB356BD01E0C4C0E0056B10F /* injectSource */;
targetProxy = BB356BD81E0C4C1B0056B10F /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
BB356A791E0AF36E0056B10F /* MainMenu.xib */ = {
isa = PBXVariantGroup;
children = (
BB356A7A1E0AF36F0056B10F /* Base */,
);
name = MainMenu.xib;
sourceTree = "";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
BB356A581E0AF2780056B10F /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "-";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"INJECTION_PORT=$INJECTION_PORT",
"XPROBE_PORT=$XPROBE_PORT",
"REMOTE_PORT=$REMOTE_PORT",
"HELPER_MACH_ID=\\\"$HELPER_MACH_ID\\\"",
"INJECTION_ADDR=INADDR_LOOPBACK",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = Injectorator;
HELPER_MACH_ID = com.johnholdsworth.Injectorator.Helper.mach;
INJECTION_PORT = 31452;
MACOSX_DEPLOYMENT_TARGET = 10.11;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
REMOTE_PORT = 31459;
SDKROOT = macosx;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
XPROBE_PORT = 31458;
};
name = Debug;
};
BB356A591E0AF2780056B10F /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "-";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"INJECTION_PORT=$INJECTION_PORT",
"XPROBE_PORT=$XPROBE_PORT",
"REMOTE_PORT=$REMOTE_PORT",
"HELPER_MACH_ID=\\\"$HELPER_MACH_ID\\\"",
"INJECTION_ADDR=INADDR_LOOPBACK",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = Injectorator;
HELPER_MACH_ID = com.johnholdsworth.Injectorator.Helper.mach;
INJECTION_PORT = 31452;
MACOSX_DEPLOYMENT_TARGET = 10.11;
MTL_ENABLE_DEBUG_INFO = NO;
REMOTE_PORT = 31459;
SDKROOT = macosx;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
XPROBE_PORT = 31458;
};
name = Release;
};
BB356A5B1E0AF2780056B10F /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "Developer ID Application";
COMBINE_HIDPI_IMAGES = YES;
DEVELOPMENT_TEAM = 9V5A8WE85E;
INFOPLIST_FILE = Injectorator/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
OTHER_SWIFT_FLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = com.johnholdsworth.Injectorator;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Injectorator/Injectorator-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 3.0;
};
name = Debug;
};
BB356A5C1E0AF2780056B10F /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "Developer ID Application";
COMBINE_HIDPI_IMAGES = YES;
DEVELOPMENT_TEAM = 9V5A8WE85E;
INFOPLIST_FILE = Injectorator/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
OTHER_SWIFT_FLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = com.johnholdsworth.Injectorator;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Injectorator/Injectorator-Bridging-Header.h";
SWIFT_VERSION = 3.0;
};
name = Release;
};
BB356ADB1E0B09000056B10F /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "Developer ID Application";
DEVELOPMENT_TEAM = 9V5A8WE85E;
INFOPLIST_FILE = InjectionHelper/Info.plist;
INFOPLIST_PREPROCESS = YES;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
OTHER_LDFLAGS = (
"-sectcreate",
__TEXT,
__info_plist,
InjectionHelper/Info.plist,
"-sectcreate",
__TEXT,
__launchd_plist,
"InjectionHelper/Info-Launchd.plist",
);
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 3.0;
};
name = Debug;
};
BB356ADC1E0B09000056B10F /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "Developer ID Application";
DEVELOPMENT_TEAM = 9V5A8WE85E;
INFOPLIST_FILE = InjectionHelper/Info.plist;
INFOPLIST_PREPROCESS = YES;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
OTHER_LDFLAGS = (
"-sectcreate",
__TEXT,
__info_plist,
InjectionHelper/Info.plist,
"-sectcreate",
__TEXT,
__launchd_plist,
"InjectionHelper/Info-Launchd.plist",
);
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 3.0;
};
name = Release;
};
BB356B001E0B0B8A0056B10F /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_IDENTITY = "Developer ID Application";
COMBINE_HIDPI_IMAGES = YES;
DEVELOPMENT_TEAM = 9V5A8WE85E;
INFOPLIST_FILE = InjectionBootstrap/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles";
PRODUCT_BUNDLE_IDENTIFIER = com.johnholdsworth.InjectionBootstrap;
PRODUCT_NAME = Bootstrap;
SKIP_INSTALL = YES;
WRAPPER_EXTENSION = bundle;
};
name = Debug;
};
BB356B011E0B0B8A0056B10F /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_IDENTITY = "Developer ID Application";
COMBINE_HIDPI_IMAGES = YES;
DEVELOPMENT_TEAM = 9V5A8WE85E;
INFOPLIST_FILE = InjectionBootstrap/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles";
PRODUCT_BUNDLE_IDENTIFIER = com.johnholdsworth.InjectionBootstrap;
PRODUCT_NAME = Bootstrap;
SKIP_INSTALL = YES;
WRAPPER_EXTENSION = bundle;
};
name = Release;
};
BB356BD51E0C4C0F0056B10F /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_IDENTITY = "Developer ID Application";
DEVELOPMENT_TEAM = 9V5A8WE85E;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Debug;
};
BB356BD61E0C4C0F0056B10F /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_IDENTITY = "Developer ID Application";
DEVELOPMENT_TEAM = 9V5A8WE85E;
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Release;
};
BB5A60BE1E22211900B6C1D9 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_IDENTITY = "Developer ID Application";
DEVELOPMENT_TEAM = 9V5A8WE85E;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Debug;
};
BB5A60BF1E22211900B6C1D9 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_IDENTITY = "Developer ID Application";
DEVELOPMENT_TEAM = 9V5A8WE85E;
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
BB356A481E0AF2780056B10F /* Build configuration list for PBXProject "Injectorator" */ = {
isa = XCConfigurationList;
buildConfigurations = (
BB356A581E0AF2780056B10F /* Debug */,
BB356A591E0AF2780056B10F /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
BB356A5A1E0AF2780056B10F /* Build configuration list for PBXNativeTarget "Injection" */ = {
isa = XCConfigurationList;
buildConfigurations = (
BB356A5B1E0AF2780056B10F /* Debug */,
BB356A5C1E0AF2780056B10F /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
BB356ADA1E0B09000056B10F /* Build configuration list for PBXNativeTarget "com.johnholdsworth.Injectorator.Helper" */ = {
isa = XCConfigurationList;
buildConfigurations = (
BB356ADB1E0B09000056B10F /* Debug */,
BB356ADC1E0B09000056B10F /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
BB356AFF1E0B0B8A0056B10F /* Build configuration list for PBXNativeTarget "InjectionBootstrap" */ = {
isa = XCConfigurationList;
buildConfigurations = (
BB356B001E0B0B8A0056B10F /* Debug */,
BB356B011E0B0B8A0056B10F /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
BB356BD71E0C4C130056B10F /* Build configuration list for PBXNativeTarget "injectSource" */ = {
isa = XCConfigurationList;
buildConfigurations = (
BB356BD51E0C4C0F0056B10F /* Debug */,
BB356BD61E0C4C0F0056B10F /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
BB5A60BD1E22211900B6C1D9 /* Build configuration list for PBXNativeTarget "tree" */ = {
isa = XCConfigurationList;
buildConfigurations = (
BB5A60BE1E22211900B6C1D9 /* Debug */,
BB5A60BF1E22211900B6C1D9 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = BB356A451E0AF2780056B10F /* Project object */;
}
================================================
FILE: Injectorator.xcodeproj/project.xcworkspace/contents.xcworkspacedata
================================================
================================================
FILE: Injectorator.xcodeproj/project.xcworkspace/xcshareddata/Injectorator.xcscmblueprint
================================================
{
"DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "A535CCAD0622E97CAD9CF9E1E3C6AC64A6475A1F",
"DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : {
},
"DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : {
"BABDEDA06CCA87E16844780F7D9DC681C475B08E" : 9223372036854775807,
"712D06E9AA7CE78ACFCEF81F916D46A7554837CA" : 9223372036854775807,
"34B8D32F162DAA64534774A997241F23597C24C7" : 9223372036854775807,
"3BB2D680EE898F051A0A693863548EC14D1896A2" : 9223372036854775807,
"1AC0D0FAF96863B8F1FFA7F31C9B03B84CBC01CB" : 9223372036854775807,
"A535CCAD0622E97CAD9CF9E1E3C6AC64A6475A1F" : 9223372036854775807,
"58DA89050E62AAF43BB0850208A8C8A005491B18" : 9223372036854775807,
"C62EC6336D5E5301D1CBDB1406DC28E8A62B5BDC" : 9223372036854775807
},
"DVTSourceControlWorkspaceBlueprintIdentifierKey" : "C63B3622-B7F9-45F3-ACA1-7509748DE8FF",
"DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : {
"BABDEDA06CCA87E16844780F7D9DC681C475B08E" : "DDHotKey\/",
"712D06E9AA7CE78ACFCEF81F916D46A7554837CA" : "injectionforxcode\/",
"34B8D32F162DAA64534774A997241F23597C24C7" : "RefactoratorApp\/",
"3BB2D680EE898F051A0A693863548EC14D1896A2" : "Smuggler\/",
"1AC0D0FAF96863B8F1FFA7F31C9B03B84CBC01CB" : "Remote\/",
"A535CCAD0622E97CAD9CF9E1E3C6AC64A6475A1F" : "Injectorator\/",
"58DA89050E62AAF43BB0850208A8C8A005491B18" : "XprobePlugin\/",
"C62EC6336D5E5301D1CBDB1406DC28E8A62B5BDC" : "Refactorator\/"
},
"DVTSourceControlWorkspaceBlueprintNameKey" : "Injectorator",
"DVTSourceControlWorkspaceBlueprintVersion" : 204,
"DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "Injectorator.xcodeproj",
"DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [
{
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/johnno1962\/Remote.git",
"DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "1AC0D0FAF96863B8F1FFA7F31C9B03B84CBC01CB"
},
{
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/johnno1962\/RefactoratorApp.git",
"DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "34B8D32F162DAA64534774A997241F23597C24C7"
},
{
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/johnno1962\/Smuggler.git",
"DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "3BB2D680EE898F051A0A693863548EC14D1896A2"
},
{
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/johnno1962\/XprobePlugin.git",
"DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "58DA89050E62AAF43BB0850208A8C8A005491B18"
},
{
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/johnno1962\/injectionforxcode.git",
"DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "712D06E9AA7CE78ACFCEF81F916D46A7554837CA"
},
{
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/johnno1962\/InjectionApp.git",
"DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "A535CCAD0622E97CAD9CF9E1E3C6AC64A6475A1F"
},
{
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/davedelong\/DDHotKey.git",
"DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "BABDEDA06CCA87E16844780F7D9DC681C475B08E"
},
{
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/johnno1962\/Refactorator.git",
"DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "C62EC6336D5E5301D1CBDB1406DC28E8A62B5BDC"
}
]
}
================================================
FILE: LICENSE
================================================
Copyright (c) 2017 John Holdsworth
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
================================================
FILE: README.md
================================================
# Injection as an App

Issue tracking Repo for the new Injection as an App
There is also the source and jar for a basic AppCode plugin [here](https://raw.githubusercontent.com/johnno1962/InjectionApp/master/InjectionAppCode/Injection.jar)
To download the beta [click here.](http://johnholdsworth.com/injection.html).
For more information consult the [FAQ](https://johnno1962.github.io/InjectionApp/injectionfaq.html).
The source for the application is posted here but it's not intended to suppport building it yourself.
In order to do so you will need to clone this project as well as:
[injectionforxcode](https://github.com/johnno1962/injectionforxcode),
[Xprobe](https://github.com/johnno1962/Xprobe),
[Remote](https://github.com/johnno1962/Remote),
[Refactorator](https://github.com/johnno1962/Refactorator),
[RefactoratorApp](https://github.com/johnno1962/RefactoratorApp) &
[Smuggler](https://github.com/johnno1962/Smuggler)
...in the same directory, configure codesigning then build this project.
================================================
FILE: XprobeSwift/Info.plist
================================================
CFBundleDevelopmentRegion
en
CFBundleExecutable
$(EXECUTABLE_NAME)
CFBundleIdentifier
$(PRODUCT_BUNDLE_IDENTIFIER)
CFBundleInfoDictionaryVersion
6.0
CFBundleName
$(PRODUCT_NAME)
CFBundlePackageType
BNDL
CFBundleShortVersionString
1.0
CFBundleVersion
1
NSHumanReadableCopyright
Copyright © 2016 John Holdsworth. All rights reserved.
NSPrincipalClass
================================================
FILE: XprobeSwift/XprobeSwift-Bridging-Header.h
================================================
//
// Use this file to import your target's public headers that you would like to expose to Swift.
//
#import "SwiftTrace.h"
#import "../../XprobePlugin/Classes/Xprobe.h"
@interface NSObject(InjectionSweep)
- (void)bsweep;
@end
================================================
FILE: XprobeSwift/XprobeSwift.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
BB356BB51E0B8F090056B10F /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB356BB41E0B8F090056B10F /* Info.plist */; };
BB356BB81E0B8F600056B10F /* XprobeSwift.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB356BB71E0B8F600056B10F /* XprobeSwift.swift */; };
BB356BBD1E0B8FA10056B10F /* SwiftTrace.m in Sources */ = {isa = PBXBuildFile; fileRef = BB356BBA1E0B8FA10056B10F /* SwiftTrace.m */; };
BB356BBE1E0B8FA10056B10F /* SwiftTrace.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB356BBB1E0B8FA10056B10F /* SwiftTrace.swift */; };
BB356BBF1E0B8FA10056B10F /* xt_forwarding_trampoline_x64.s in Sources */ = {isa = PBXBuildFile; fileRef = BB356BBC1E0B8FA10056B10F /* xt_forwarding_trampoline_x64.s */; };
BB356BED1E0C91C80056B10F /* Internals.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB356BEC1E0C91C80056B10F /* Internals.swift */; };
BB5133171E1AE34900C11990 /* SwiftSwizzler.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB5133161E1AE34900C11990 /* SwiftSwizzler.swift */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
BB356BA51E0B8E930056B10F /* XprobeSwift.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XprobeSwift.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
BB356BB41E0B8F090056B10F /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
BB356BB61E0B8F5F0056B10F /* XprobeSwift-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "XprobeSwift-Bridging-Header.h"; sourceTree = ""; };
BB356BB71E0B8F600056B10F /* XprobeSwift.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = XprobeSwift.swift; path = ../../XprobePlugin/XprobeSwift/XprobeSwift/XprobeSwift.swift; sourceTree = ""; };
BB356BB91E0B8FA10056B10F /* SwiftTrace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SwiftTrace.h; path = ../../Smuggler/SwiftTrace/SwiftTrace/SwiftTrace.h; sourceTree = ""; };
BB356BBA1E0B8FA10056B10F /* SwiftTrace.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SwiftTrace.m; path = ../../Smuggler/SwiftTrace/SwiftTrace/SwiftTrace.m; sourceTree = ""; };
BB356BBB1E0B8FA10056B10F /* SwiftTrace.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SwiftTrace.swift; path = ../../Smuggler/SwiftTrace/SwiftTrace/SwiftTrace.swift; sourceTree = ""; };
BB356BBC1E0B8FA10056B10F /* xt_forwarding_trampoline_x64.s */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; name = xt_forwarding_trampoline_x64.s; path = ../../Smuggler/SwiftTrace/SwiftTrace/xt_forwarding_trampoline_x64.s; sourceTree = ""; };
BB356BEC1E0C91C80056B10F /* Internals.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Internals.swift; path = ../../XprobePlugin/XprobeSwift/XprobeSwift/Internals.swift; sourceTree = ""; };
BB5133161E1AE34900C11990 /* SwiftSwizzler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SwiftSwizzler.swift; path = ../../XprobePlugin/XprobeSwift/XprobeSwift/SwiftSwizzler.swift; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
BB356BA21E0B8E930056B10F /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
BB356B9C1E0B8E930056B10F = {
isa = PBXGroup;
children = (
BB356BB91E0B8FA10056B10F /* SwiftTrace.h */,
BB356BBA1E0B8FA10056B10F /* SwiftTrace.m */,
BB356BEC1E0C91C80056B10F /* Internals.swift */,
BB356BBB1E0B8FA10056B10F /* SwiftTrace.swift */,
BB356BB71E0B8F600056B10F /* XprobeSwift.swift */,
BB5133161E1AE34900C11990 /* SwiftSwizzler.swift */,
BB356BBC1E0B8FA10056B10F /* xt_forwarding_trampoline_x64.s */,
BB356BB61E0B8F5F0056B10F /* XprobeSwift-Bridging-Header.h */,
BB356BB41E0B8F090056B10F /* Info.plist */,
BB356BA61E0B8E930056B10F /* Products */,
);
sourceTree = "";
};
BB356BA61E0B8E930056B10F /* Products */ = {
isa = PBXGroup;
children = (
BB356BA51E0B8E930056B10F /* XprobeSwift.bundle */,
);
name = Products;
sourceTree = "";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
BB356BA41E0B8E930056B10F /* XprobeSwift */ = {
isa = PBXNativeTarget;
buildConfigurationList = BB356BAB1E0B8E930056B10F /* Build configuration list for PBXNativeTarget "XprobeSwift" */;
buildPhases = (
BB356BA11E0B8E930056B10F /* Sources */,
BB356BA21E0B8E930056B10F /* Frameworks */,
BB356BA31E0B8E930056B10F /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = XprobeSwift;
productName = XprobeSwift;
productReference = BB356BA51E0B8E930056B10F /* XprobeSwift.bundle */;
productType = "com.apple.product-type.bundle";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
BB356B9D1E0B8E930056B10F /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0820;
ORGANIZATIONNAME = "John Holdsworth";
TargetAttributes = {
BB356BA41E0B8E930056B10F = {
CreatedOnToolsVersion = 8.2.1;
DevelopmentTeam = 9V5A8WE85E;
LastSwiftMigration = 0820;
ProvisioningStyle = Manual;
};
};
};
buildConfigurationList = BB356BA01E0B8E930056B10F /* Build configuration list for PBXProject "XprobeSwift" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
en,
);
mainGroup = BB356B9C1E0B8E930056B10F;
productRefGroup = BB356BA61E0B8E930056B10F /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
BB356BA41E0B8E930056B10F /* XprobeSwift */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
BB356BA31E0B8E930056B10F /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
BB356BB51E0B8F090056B10F /* Info.plist in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
BB356BA11E0B8E930056B10F /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
BB356BED1E0C91C80056B10F /* Internals.swift in Sources */,
BB356BBF1E0B8FA10056B10F /* xt_forwarding_trampoline_x64.s in Sources */,
BB356BB81E0B8F600056B10F /* XprobeSwift.swift in Sources */,
BB5133171E1AE34900C11990 /* SwiftSwizzler.swift in Sources */,
BB356BBE1E0B8FA10056B10F /* SwiftTrace.swift in Sources */,
BB356BBD1E0B8FA10056B10F /* SwiftTrace.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
BB356BA91E0B8E930056B10F /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "-";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.11;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
};
name = Debug;
};
BB356BAA1E0B8E930056B10F /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "-";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.11;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
};
name = Release;
};
BB356BAC1E0B8E930056B10F /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "Developer ID Application";
COMBINE_HIDPI_IMAGES = YES;
DEVELOPMENT_TEAM = 9V5A8WE85E;
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
OTHER_LDFLAGS = (
"-undefined",
dynamic_lookup,
);
PRODUCT_BUNDLE_IDENTIFIER = com.johnholdsworth.XprobeSwift;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_OBJC_BRIDGING_HEADER = "XprobeSwift-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-O";
SWIFT_VERSION = 3.0;
WRAPPER_EXTENSION = bundle;
};
name = Debug;
};
BB356BAD1E0B8E930056B10F /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "Developer ID Application";
COMBINE_HIDPI_IMAGES = YES;
DEVELOPMENT_TEAM = 9V5A8WE85E;
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
OTHER_LDFLAGS = (
"-undefined",
dynamic_lookup,
);
PRODUCT_BUNDLE_IDENTIFIER = com.johnholdsworth.XprobeSwift;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_OBJC_BRIDGING_HEADER = "XprobeSwift-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-O";
SWIFT_VERSION = 3.0;
WRAPPER_EXTENSION = bundle;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
BB356BA01E0B8E930056B10F /* Build configuration list for PBXProject "XprobeSwift" */ = {
isa = XCConfigurationList;
buildConfigurations = (
BB356BA91E0B8E930056B10F /* Debug */,
BB356BAA1E0B8E930056B10F /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
BB356BAB1E0B8E930056B10F /* Build configuration list for PBXNativeTarget "XprobeSwift" */ = {
isa = XCConfigurationList;
buildConfigurations = (
BB356BAC1E0B8E930056B10F /* Debug */,
BB356BAD1E0B8E930056B10F /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = BB356B9D1E0B8E930056B10F /* Project object */;
}
================================================
FILE: docs/index.html
================================================
Injection II, the App
Injection II, the App
To download the new version of Injection click here .
The Injection plugin for Xcode is now a standalone app. This allows you to inject changes to class method implementations into a running application in the simulator or a macOS app. Injecting is now as simple as downloading the app and having it running in the background while you are working on a project in Xcode then using the menu bar item "Inject Source" (don't forget to save the file!)
================================================
FILE: docs/injectionfaq.html
================================================
Injection FAQ
Injection, the Missing Manual
To download the new beta version of Injection click here .
What is Injection?
Injection is simple in principle. It can recompile an individual Swift or Objective-C class and is able to
bind the new versions of the method implementations of the class into a program while it is running in the
simulator - without having to restart it. This avoids having to wait perhaps half a minute to rebuild your
entire project and loose your application state when all you want to do is make the smallest change to
your code. A typical injection takes about a second.
Long an Xcode Plugin , with Xcode 8 and its
new signing requirements, Injection is now a standalone application that runs in the background while you
are editing your code. No changes are need to your project in order to use it. When the injection app is
running there is a global hot key "control-=" to inject the file being currently edited in Xcode into the
app running in the simulator. This now includes XCTestCase subclasses for which the test will be run.
How does Injection work?
Injection works by searching through Xcode's ".xcactivity" build log files in "Derived Data" to find the
command that was used to compile a class file and runs this then links the resulting object file into a
bundle (a wrapped dynamic library) which can be loaded into the application. At this point, a piece of
code to load this bundle needs to be injected in a more traditional macOS sense into the program running
in the simulator. This is performed by the interprocess communication feature of the machOS which macOS
is built on, writing a piece of bootstrap code into the simulator process's memory and starting a new
thread to execute it. This code connects back to the injection app through a socket which sends the
command to load the bundle prepared just before.
This is all by-the-by and the result is there are now two copies of the class that is being injected in
memory: the original as compiled by the project build and the new version compiled by the injection build.
As all instances in the app are of the original class what is required is to bind the method implementations
of the new class onto the old one. In the Objective-C world this was achieved by "Swizzling" - setting a new
location for the implementation of a method in the class' meta data using the runtime api. As Swift uses a
"vtable" to dispatch methods that are not final, the same can be achieved by simply overwriting the original
class' vtable with that of the new class. This means all calls to these methods will be dispatched to their
new implementations.
How do I know if injection has worked?
If injection has been able to compile your class, build its bundle and load it you will see a message on
the debugging console warning the class has been defined in two places and a message saying to ignore the
warning and that the class has been "Swizzled".
Ignore any warning, Swizzled MasterViewController 0x11be23740 -> 0x10c672070
A frequent support issue at this point is: Why haven't the changes I've applied taken effect on the display?
In order to do this the code needs to have been re-executed and the simplest way to do this to is have an
instance method "injected()" in your class which calls the code that needs to be re-executed. For example,
for a View Controller, it would call viewDidLoad(). Unfortunately, adding this method can't be injected
itself in Swift unless it is at the very end of the class definition as the vtable will get out of alignment
so you may have to rebuild the project and re-run for your first injection.
What are the limitations of injection?
In Objective-C, the limitations are relatively few. You have to be mind-full that your new version of the
method implementations will be linked against the new version of the class so if there are references to
static variables or singletons these will be duplicated. In Swift, the same applies and there are additional
gotcha's about whether a method is "direct dispatched" i.e. statically linked rather than dispatched using
the vtable of the class object. The three ways Swift is dispatched are discussed in this
excellent summary .
In practice, this means you can not inject methods that have been declared final, are in final classes
or are not declared "open" in frameworks which is as good as final with Swift3. This also means you can
not inject methods of structs or enums which are direct dispatched as they are not subject to possible
subclassing. Injection is also not compatible "whole module optimisation" which can decide a class is
final as far as the project is concerned and use direct dispatch at the call site which can not be injected.
Why isn't my -injected() method being called?
There are two injected() methods which can be used. A class method +injected() which was easy to implement
and is called whenever a class is injected. As injection uses the Objective-C runtime to locate these methods
they must be prefixed with @objc from Swift 3.2. The instance level -injected() has a few caveats. In order to
implement it, injection needs to know all the instances of a class in an application so they can be messaged.
To do this injection performs a sweep of all instances starting with the UIApplication object, it's windows
and delegate and all objects pointed to by those objects and so on recursively. As a result, to receive
the injected message your object needs to be visible from these seeds (which it generally is.) If not, you
can subscribe to the "INJECTION_BUNDLE_NOTIFICATION" in the notification centre and receive a notification
with the classes injected. Also as -injected is a dynamic dispatch from Objective-C code so your class will
need to inherit from NSObject.
Can I use injection with AppCode?
Sure, there is a new version of the AppCode plugin available
here . This requires the project to have been built
in Xcode at some stage to determine the compile commands for a class and that the injection App is running
from "/Applications".
Why does injection require an administrator password?
Injecting code between processes as described in the second section above requires administrator privilege
and to make this available injection installs a very small (36kb) "Helper" binary into
/Library/PrivilegedHelperTools/ which is written to only be capable of injecting bundles into apps running
in the simulator. In order to do this it requires the administrator password once - this is a standard macOS
mechanism and the password is never known to the injection app. If you're not happy with this you can run
using "patched" injection which patches the injection loader into your project's main.m (for a Swift project
you'll need to add an empty main.m). This is also used when you're injecting a macOS application - menu item
"macOS Project/Patch".
A new feature if you're using patched injection is that if you use "Project/Perform Action/Run Without
Building" injection remembers your previous injections and re-applys them when you start the app. This is a
way to avoid a potentially slow re-link of your entire app when you've only changed a class or two.
Where can I get help if injection doesn't work?
First place to go is the original project and
the new bug tracking repo . If your problem isn't
described there please raise a new issue so I can help debug it with TeamViewer if need be. If you come
across anything you feel should be in the FAQ please file a PR on
this document .
What is the current injection license?
The code in the injection plugin has been licensed to the new InjectionApp under it's MIT license
which are currently described in the App's "About Injection" panel. Depending on interest, the binary
distribution may have new a license if it becomes a product.
What else can the Injection application do?
Included in the injection application is pretty much all of my Open Source developer tools. Included is
the Refactorator also a previous plugin that
can be used to refactor (rename objects in) Swift and Objective-C sources. Select an object in the Xcode
editor and use the Menu Bar item "Refactor Swift" and a window will open showing all places in the code that
object is referrenced. Enter a new value into the "Rename To:" text field and press apply and it will apply
the changes in memeory then click "Save" to make the changes on disk and build to check the project still
compiles. You can revert the changes if need be.
If you enable test coverage collection as shown below and re-run your tests, the Refactorator source browser
will display test coverage in the line number gutter as a green strip next to the lines that have been
executed in tests (thanks slather for the pointers.)
Also included is the Xprobe memory browser which uses
the result of a sweep of your application's objects to display them in a Web interface. This allows you
to inspect values for all instance variables and set them for Objective-C instances. It also allows you
to evaluate code against an instance without having to stop your program using a breakpoint.
You can instrument your project's compile times if you add "-Xfrontend -debug-time-function-bodies" to
"Other Swift Flags" in it's project settings and rebuild. Then, use the "Optimise Build" menu item to
view a summary of the longest build times by function with a link to take you to that place in the source.
Finally, though it requires patching your project to use,
Remote Control is included which allows you to control
an iDevice from your computer if that's more convenient or for End-to-End testing. Some events require an
initial tap on the device to capture an event that can be used to forge other events but it generally
works quite well.
================================================
FILE: injectSource/main.m
================================================
//
// main.m
// injectSource
//
// Created by John Holdsworth on 22/12/2016.
// Copyright © 2016 John Holdsworth. All rights reserved.
//
#import
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSPasteboard *pasteboard = [NSPasteboard generalPasteboard];
NSString *service = @"Injection/Inject Source";
if ( argc > 1 ) {
NSURL *url = [NSURL fileURLWithPath:[NSString stringWithUTF8String:argv[1]]];
[pasteboard clearContents];
[pasteboard writeObjects:@[url]];
service = @"Injection/Inject File";
}
NSPerformService(service, pasteboard);
}
return 0;
}