Initial commit

This commit is contained in:
NightBits 2018-12-19 20:42:46 +01:00
parent 55baa9dae1
commit 0891cd8242
48 changed files with 3236 additions and 2 deletions

BIN
.DS_Store vendored Normal file

Binary file not shown.

View File

@ -0,0 +1,636 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
EC760B97178E976E00095B31 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC760B96178E976E00095B31 /* Foundation.framework */; };
EC760B99178E976E00095B31 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC760B98178E976E00095B31 /* CoreGraphics.framework */; };
EC760B9B178E976E00095B31 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC760B9A178E976E00095B31 /* UIKit.framework */; };
EC760BA1178E976E00095B31 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = EC760B9F178E976E00095B31 /* InfoPlist.strings */; };
EC760BA3178E976E00095B31 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = EC760BA2178E976E00095B31 /* main.m */; };
EC760BA7178E976E00095B31 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = EC760BA6178E976E00095B31 /* AppDelegate.m */; };
EC760BAA178E976E00095B31 /* Main_iPhone.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = EC760BA8178E976E00095B31 /* Main_iPhone.storyboard */; };
EC760BAD178E976E00095B31 /* Main_iPad.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = EC760BAB178E976E00095B31 /* Main_iPad.storyboard */; };
EC760BB0178E976E00095B31 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EC760BAF178E976E00095B31 /* ViewController.m */; };
EC760BB2178E976E00095B31 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = EC760BB1178E976E00095B31 /* Images.xcassets */; };
EC760BB9178E976E00095B31 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC760BB8178E976E00095B31 /* XCTest.framework */; };
EC760BBA178E976E00095B31 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC760B96178E976E00095B31 /* Foundation.framework */; };
EC760BBB178E976E00095B31 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC760B9A178E976E00095B31 /* UIKit.framework */; };
EC760BC3178E976E00095B31 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = EC760BC1178E976E00095B31 /* InfoPlist.strings */; };
EC760BC5178E976E00095B31 /* EonaCatToolsTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EC760BC4178E976E00095B31 /* EonaCatToolsTests.m */; };
EC760BEC178E97CB00095B31 /* ExceptionsLogger.strings in Resources */ = {isa = PBXBuildFile; fileRef = EC760BE2178E97CB00095B31 /* ExceptionsLogger.strings */; };
EC760BED178E97CB00095B31 /* ExceptionHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = EC760BE6178E97CB00095B31 /* ExceptionHandler.m */; };
EC760BEE178E97CB00095B31 /* ExceptionLogger-iPad.xib in Resources */ = {isa = PBXBuildFile; fileRef = EC760BE7178E97CB00095B31 /* ExceptionLogger-iPad.xib */; };
EC760BEF178E97CB00095B31 /* ExceptionLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = EC760BE9178E97CB00095B31 /* ExceptionLogger.m */; };
EC760BF0178E97CB00095B31 /* ExceptionLogger.png in Resources */ = {isa = PBXBuildFile; fileRef = EC760BEA178E97CB00095B31 /* ExceptionLogger.png */; };
EC760BF1178E97CB00095B31 /* ExceptionLogger.xib in Resources */ = {isa = PBXBuildFile; fileRef = EC760BEB178E97CB00095B31 /* ExceptionLogger.xib */; };
EC760BF7178E989000095B31 /* DeviceIdentifier.m in Sources */ = {isa = PBXBuildFile; fileRef = EC760BF4178E989000095B31 /* DeviceIdentifier.m */; };
EC760BF8178E989000095B31 /* SHA1.m in Sources */ = {isa = PBXBuildFile; fileRef = EC760BF6178E989000095B31 /* SHA1.m */; };
EC760C05178EB5FB00095B31 /* LockController.strings in Resources */ = {isa = PBXBuildFile; fileRef = EC760BFA178EB5FB00095B31 /* LockController.strings */; };
EC760C06178EB5FB00095B31 /* LockController.m in Sources */ = {isa = PBXBuildFile; fileRef = EC760BFE178EB5FB00095B31 /* LockController.m */; };
EC760C07178EB5FB00095B31 /* Popup.m in Sources */ = {isa = PBXBuildFile; fileRef = EC760C01178EB5FB00095B31 /* Popup.m */; };
EC760C08178EB5FB00095B31 /* Toast.m in Sources */ = {isa = PBXBuildFile; fileRef = EC760C04178EB5FB00095B31 /* Toast.m */; };
EC760C0B178EB9C800095B31 /* toast.png in Resources */ = {isa = PBXBuildFile; fileRef = EC760C0A178EB9C800095B31 /* toast.png */; };
EC760C0D178EBBE300095B31 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC760C0C178EBBE300095B31 /* AudioToolbox.framework */; };
EC760C0F178EBCD200095B31 /* toast.wav in Resources */ = {isa = PBXBuildFile; fileRef = EC760C0E178EBCD200095B31 /* toast.wav */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
EC760BBC178E976E00095B31 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = EC760B8B178E976E00095B31 /* Project object */;
proxyType = 1;
remoteGlobalIDString = EC760B92178E976E00095B31;
remoteInfo = EonaCatTools;
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
EC760B93178E976E00095B31 /* EonaCatTools.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = EonaCatTools.app; sourceTree = BUILT_PRODUCTS_DIR; };
EC760B96178E976E00095B31 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
EC760B98178E976E00095B31 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
EC760B9A178E976E00095B31 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
EC760B9E178E976E00095B31 /* EonaCatTools-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "EonaCatTools-Info.plist"; sourceTree = "<group>"; };
EC760BA0178E976E00095B31 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
EC760BA2178E976E00095B31 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
EC760BA4178E976E00095B31 /* EonaCatTools-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "EonaCatTools-Prefix.pch"; sourceTree = "<group>"; };
EC760BA5178E976E00095B31 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
EC760BA6178E976E00095B31 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
EC760BA9178E976E00095B31 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main_iPhone.storyboard; sourceTree = "<group>"; };
EC760BAC178E976E00095B31 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main_iPad.storyboard; sourceTree = "<group>"; };
EC760BAE178E976E00095B31 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = "<group>"; };
EC760BAF178E976E00095B31 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = "<group>"; };
EC760BB1178E976E00095B31 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
EC760BB7178E976E00095B31 /* EonaCatToolsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = EonaCatToolsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
EC760BB8178E976E00095B31 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };
EC760BC0178E976E00095B31 /* EonaCatToolsTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "EonaCatToolsTests-Info.plist"; sourceTree = "<group>"; };
EC760BC2178E976E00095B31 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
EC760BC4178E976E00095B31 /* EonaCatToolsTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EonaCatToolsTests.m; sourceTree = "<group>"; };
EC760BE3178E97CB00095B31 /* Dutch */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Dutch; path = Dutch.lproj/ExceptionsLogger.strings; sourceTree = "<group>"; };
EC760BE4178E97CB00095B31 /* English */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/ExceptionsLogger.strings; sourceTree = "<group>"; };
EC760BE5178E97CB00095B31 /* ExceptionHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExceptionHandler.h; sourceTree = "<group>"; };
EC760BE6178E97CB00095B31 /* ExceptionHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ExceptionHandler.m; sourceTree = "<group>"; };
EC760BE7178E97CB00095B31 /* ExceptionLogger-iPad.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = "ExceptionLogger-iPad.xib"; sourceTree = "<group>"; };
EC760BE8178E97CB00095B31 /* ExceptionLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExceptionLogger.h; sourceTree = "<group>"; };
EC760BE9178E97CB00095B31 /* ExceptionLogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ExceptionLogger.m; sourceTree = "<group>"; };
EC760BEA178E97CB00095B31 /* ExceptionLogger.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ExceptionLogger.png; sourceTree = "<group>"; };
EC760BEB178E97CB00095B31 /* ExceptionLogger.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ExceptionLogger.xib; sourceTree = "<group>"; };
EC760BF3178E989000095B31 /* DeviceIdentifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeviceIdentifier.h; sourceTree = "<group>"; };
EC760BF4178E989000095B31 /* DeviceIdentifier.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DeviceIdentifier.m; sourceTree = "<group>"; };
EC760BF5178E989000095B31 /* SHA1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SHA1.h; sourceTree = "<group>"; };
EC760BF6178E989000095B31 /* SHA1.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SHA1.m; sourceTree = "<group>"; };
EC760BFB178EB5FB00095B31 /* Dutch */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Dutch; path = Dutch.lproj/LockController.strings; sourceTree = "<group>"; };
EC760BFC178EB5FB00095B31 /* English */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/LockController.strings; sourceTree = "<group>"; };
EC760BFD178EB5FB00095B31 /* LockController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LockController.h; sourceTree = "<group>"; };
EC760BFE178EB5FB00095B31 /* LockController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LockController.m; sourceTree = "<group>"; };
EC760C00178EB5FB00095B31 /* Popup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Popup.h; sourceTree = "<group>"; };
EC760C01178EB5FB00095B31 /* Popup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Popup.m; sourceTree = "<group>"; };
EC760C03178EB5FB00095B31 /* Toast.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Toast.h; sourceTree = "<group>"; };
EC760C04178EB5FB00095B31 /* Toast.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Toast.m; sourceTree = "<group>"; };
EC760C0A178EB9C800095B31 /* toast.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = toast.png; sourceTree = "<group>"; };
EC760C0C178EBBE300095B31 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
EC760C0E178EBCD200095B31 /* toast.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = toast.wav; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
EC760B90178E976E00095B31 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
EC760C0D178EBBE300095B31 /* AudioToolbox.framework in Frameworks */,
EC760B99178E976E00095B31 /* CoreGraphics.framework in Frameworks */,
EC760B9B178E976E00095B31 /* UIKit.framework in Frameworks */,
EC760B97178E976E00095B31 /* Foundation.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
EC760BB4178E976E00095B31 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
EC760BB9178E976E00095B31 /* XCTest.framework in Frameworks */,
EC760BBB178E976E00095B31 /* UIKit.framework in Frameworks */,
EC760BBA178E976E00095B31 /* Foundation.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
EC760B8A178E976E00095B31 = {
isa = PBXGroup;
children = (
EC760B9C178E976E00095B31 /* EonaCatTools */,
EC760BBE178E976E00095B31 /* EonaCatToolsTests */,
EC760B95178E976E00095B31 /* Frameworks */,
EC760B94178E976E00095B31 /* Products */,
);
sourceTree = "<group>";
};
EC760B94178E976E00095B31 /* Products */ = {
isa = PBXGroup;
children = (
EC760B93178E976E00095B31 /* EonaCatTools.app */,
EC760BB7178E976E00095B31 /* EonaCatToolsTests.xctest */,
);
name = Products;
sourceTree = "<group>";
};
EC760B95178E976E00095B31 /* Frameworks */ = {
isa = PBXGroup;
children = (
EC760C0C178EBBE300095B31 /* AudioToolbox.framework */,
EC760B96178E976E00095B31 /* Foundation.framework */,
EC760B98178E976E00095B31 /* CoreGraphics.framework */,
EC760B9A178E976E00095B31 /* UIKit.framework */,
EC760BB8178E976E00095B31 /* XCTest.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
EC760B9C178E976E00095B31 /* EonaCatTools */ = {
isa = PBXGroup;
children = (
EC760C09178EB9C800095B31 /* Images */,
EC760BE0178E97CB00095B31 /* Tools */,
EC760BA5178E976E00095B31 /* AppDelegate.h */,
EC760BA6178E976E00095B31 /* AppDelegate.m */,
EC760BA8178E976E00095B31 /* Main_iPhone.storyboard */,
EC760BAB178E976E00095B31 /* Main_iPad.storyboard */,
EC760BAE178E976E00095B31 /* ViewController.h */,
EC760BAF178E976E00095B31 /* ViewController.m */,
EC760BB1178E976E00095B31 /* Images.xcassets */,
EC760B9D178E976E00095B31 /* Supporting Files */,
);
path = EonaCatTools;
sourceTree = "<group>";
};
EC760B9D178E976E00095B31 /* Supporting Files */ = {
isa = PBXGroup;
children = (
EC760B9E178E976E00095B31 /* EonaCatTools-Info.plist */,
EC760B9F178E976E00095B31 /* InfoPlist.strings */,
EC760BA2178E976E00095B31 /* main.m */,
EC760BA4178E976E00095B31 /* EonaCatTools-Prefix.pch */,
);
name = "Supporting Files";
sourceTree = "<group>";
};
EC760BBE178E976E00095B31 /* EonaCatToolsTests */ = {
isa = PBXGroup;
children = (
EC760BC4178E976E00095B31 /* EonaCatToolsTests.m */,
EC760BBF178E976E00095B31 /* Supporting Files */,
);
path = EonaCatToolsTests;
sourceTree = "<group>";
};
EC760BBF178E976E00095B31 /* Supporting Files */ = {
isa = PBXGroup;
children = (
EC760BC0178E976E00095B31 /* EonaCatToolsTests-Info.plist */,
EC760BC1178E976E00095B31 /* InfoPlist.strings */,
);
name = "Supporting Files";
sourceTree = "<group>";
};
EC760BE0178E97CB00095B31 /* Tools */ = {
isa = PBXGroup;
children = (
EC760BF9178EB5FB00095B31 /* Lockscreen */,
EC760BFF178EB5FB00095B31 /* Popup */,
EC760C02178EB5FB00095B31 /* Toast */,
EC760BF2178E989000095B31 /* uniqueIdentifier */,
EC760BE1178E97CB00095B31 /* ExceptionsLogger */,
);
path = Tools;
sourceTree = "<group>";
};
EC760BE1178E97CB00095B31 /* ExceptionsLogger */ = {
isa = PBXGroup;
children = (
EC760BE2178E97CB00095B31 /* ExceptionsLogger.strings */,
EC760BE5178E97CB00095B31 /* ExceptionHandler.h */,
EC760BE6178E97CB00095B31 /* ExceptionHandler.m */,
EC760BE7178E97CB00095B31 /* ExceptionLogger-iPad.xib */,
EC760BE8178E97CB00095B31 /* ExceptionLogger.h */,
EC760BE9178E97CB00095B31 /* ExceptionLogger.m */,
EC760BEA178E97CB00095B31 /* ExceptionLogger.png */,
EC760BEB178E97CB00095B31 /* ExceptionLogger.xib */,
);
path = ExceptionsLogger;
sourceTree = "<group>";
};
EC760BF2178E989000095B31 /* uniqueIdentifier */ = {
isa = PBXGroup;
children = (
EC760BF3178E989000095B31 /* DeviceIdentifier.h */,
EC760BF4178E989000095B31 /* DeviceIdentifier.m */,
EC760BF5178E989000095B31 /* SHA1.h */,
EC760BF6178E989000095B31 /* SHA1.m */,
);
path = uniqueIdentifier;
sourceTree = "<group>";
};
EC760BF9178EB5FB00095B31 /* Lockscreen */ = {
isa = PBXGroup;
children = (
EC760BFA178EB5FB00095B31 /* LockController.strings */,
EC760BFD178EB5FB00095B31 /* LockController.h */,
EC760BFE178EB5FB00095B31 /* LockController.m */,
);
path = Lockscreen;
sourceTree = "<group>";
};
EC760BFF178EB5FB00095B31 /* Popup */ = {
isa = PBXGroup;
children = (
EC760C00178EB5FB00095B31 /* Popup.h */,
EC760C01178EB5FB00095B31 /* Popup.m */,
);
path = Popup;
sourceTree = "<group>";
};
EC760C02178EB5FB00095B31 /* Toast */ = {
isa = PBXGroup;
children = (
EC760C03178EB5FB00095B31 /* Toast.h */,
EC760C0E178EBCD200095B31 /* toast.wav */,
EC760C04178EB5FB00095B31 /* Toast.m */,
);
path = Toast;
sourceTree = "<group>";
};
EC760C09178EB9C800095B31 /* Images */ = {
isa = PBXGroup;
children = (
EC760C0A178EB9C800095B31 /* toast.png */,
);
name = Images;
path = EonaCatTools/Images;
sourceTree = SOURCE_ROOT;
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
EC760B92178E976E00095B31 /* EonaCatTools */ = {
isa = PBXNativeTarget;
buildConfigurationList = EC760BC8178E976E00095B31 /* Build configuration list for PBXNativeTarget "EonaCatTools" */;
buildPhases = (
EC760B8F178E976E00095B31 /* Sources */,
EC760B90178E976E00095B31 /* Frameworks */,
EC760B91178E976E00095B31 /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = EonaCatTools;
productName = EonaCatTools;
productReference = EC760B93178E976E00095B31 /* EonaCatTools.app */;
productType = "com.apple.product-type.application";
};
EC760BB6178E976E00095B31 /* EonaCatToolsTests */ = {
isa = PBXNativeTarget;
buildConfigurationList = EC760BCB178E976E00095B31 /* Build configuration list for PBXNativeTarget "EonaCatToolsTests" */;
buildPhases = (
EC760BB3178E976E00095B31 /* Sources */,
EC760BB4178E976E00095B31 /* Frameworks */,
EC760BB5178E976E00095B31 /* Resources */,
);
buildRules = (
);
dependencies = (
EC760BBD178E976E00095B31 /* PBXTargetDependency */,
);
name = EonaCatToolsTests;
productName = EonaCatToolsTests;
productReference = EC760BB7178E976E00095B31 /* EonaCatToolsTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
EC760B8B178E976E00095B31 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0500;
ORGANIZATIONNAME = EonaCat;
TargetAttributes = {
EC760BB6178E976E00095B31 = {
TestTargetID = EC760B92178E976E00095B31;
};
};
};
buildConfigurationList = EC760B8E178E976E00095B31 /* Build configuration list for PBXProject "EonaCatTools" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
Dutch,
English,
);
mainGroup = EC760B8A178E976E00095B31;
productRefGroup = EC760B94178E976E00095B31 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
EC760B92178E976E00095B31 /* EonaCatTools */,
EC760BB6178E976E00095B31 /* EonaCatToolsTests */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
EC760B91178E976E00095B31 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
EC760BAD178E976E00095B31 /* Main_iPad.storyboard in Resources */,
EC760C05178EB5FB00095B31 /* LockController.strings in Resources */,
EC760BB2178E976E00095B31 /* Images.xcassets in Resources */,
EC760BEC178E97CB00095B31 /* ExceptionsLogger.strings in Resources */,
EC760BF1178E97CB00095B31 /* ExceptionLogger.xib in Resources */,
EC760BF0178E97CB00095B31 /* ExceptionLogger.png in Resources */,
EC760C0F178EBCD200095B31 /* toast.wav in Resources */,
EC760BEE178E97CB00095B31 /* ExceptionLogger-iPad.xib in Resources */,
EC760BAA178E976E00095B31 /* Main_iPhone.storyboard in Resources */,
EC760BA1178E976E00095B31 /* InfoPlist.strings in Resources */,
EC760C0B178EB9C800095B31 /* toast.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
EC760BB5178E976E00095B31 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
EC760BC3178E976E00095B31 /* InfoPlist.strings in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
EC760B8F178E976E00095B31 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
EC760C06178EB5FB00095B31 /* LockController.m in Sources */,
EC760BB0178E976E00095B31 /* ViewController.m in Sources */,
EC760BA7178E976E00095B31 /* AppDelegate.m in Sources */,
EC760C07178EB5FB00095B31 /* Popup.m in Sources */,
EC760BF7178E989000095B31 /* DeviceIdentifier.m in Sources */,
EC760C08178EB5FB00095B31 /* Toast.m in Sources */,
EC760BED178E97CB00095B31 /* ExceptionHandler.m in Sources */,
EC760BEF178E97CB00095B31 /* ExceptionLogger.m in Sources */,
EC760BA3178E976E00095B31 /* main.m in Sources */,
EC760BF8178E989000095B31 /* SHA1.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
EC760BB3178E976E00095B31 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
EC760BC5178E976E00095B31 /* EonaCatToolsTests.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
EC760BBD178E976E00095B31 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = EC760B92178E976E00095B31 /* EonaCatTools */;
targetProxy = EC760BBC178E976E00095B31 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
EC760B9F178E976E00095B31 /* InfoPlist.strings */ = {
isa = PBXVariantGroup;
children = (
EC760BA0178E976E00095B31 /* en */,
);
name = InfoPlist.strings;
sourceTree = "<group>";
};
EC760BA8178E976E00095B31 /* Main_iPhone.storyboard */ = {
isa = PBXVariantGroup;
children = (
EC760BA9178E976E00095B31 /* Base */,
);
name = Main_iPhone.storyboard;
sourceTree = "<group>";
};
EC760BAB178E976E00095B31 /* Main_iPad.storyboard */ = {
isa = PBXVariantGroup;
children = (
EC760BAC178E976E00095B31 /* Base */,
);
name = Main_iPad.storyboard;
sourceTree = "<group>";
};
EC760BC1178E976E00095B31 /* InfoPlist.strings */ = {
isa = PBXVariantGroup;
children = (
EC760BC2178E976E00095B31 /* en */,
);
name = InfoPlist.strings;
sourceTree = "<group>";
};
EC760BE2178E97CB00095B31 /* ExceptionsLogger.strings */ = {
isa = PBXVariantGroup;
children = (
EC760BE3178E97CB00095B31 /* Dutch */,
EC760BE4178E97CB00095B31 /* English */,
);
name = ExceptionsLogger.strings;
sourceTree = "<group>";
};
EC760BFA178EB5FB00095B31 /* LockController.strings */ = {
isa = PBXVariantGroup;
children = (
EC760BFB178EB5FB00095B31 /* Dutch */,
EC760BFC178EB5FB00095B31 /* English */,
);
name = LockController.strings;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
EC760BC6178E976E00095B31 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
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_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
EC760BC7178E976E00095B31 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
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_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = YES;
ENABLE_NS_ASSERTIONS = NO;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
EC760BC9178E976E00095B31 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "EonaCatTools/EonaCatTools-Prefix.pch";
INFOPLIST_FILE = "EonaCatTools/EonaCatTools-Info.plist";
PRODUCT_NAME = "$(TARGET_NAME)";
WRAPPER_EXTENSION = app;
};
name = Debug;
};
EC760BCA178E976E00095B31 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "EonaCatTools/EonaCatTools-Prefix.pch";
INFOPLIST_FILE = "EonaCatTools/EonaCatTools-Info.plist";
PRODUCT_NAME = "$(TARGET_NAME)";
WRAPPER_EXTENSION = app;
};
name = Release;
};
EC760BCC178E976E00095B31 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/EonaCatTools.app/EonaCatTools";
FRAMEWORK_SEARCH_PATHS = (
"$(SDKROOT)/Developer/Library/Frameworks",
"$(inherited)",
"$(SYSTEM_APPS_DIR)/Xcode5-DP3.app/Contents/Developer/Library/Frameworks",
);
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "EonaCatTools/EonaCatTools-Prefix.pch";
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
INFOPLIST_FILE = "EonaCatToolsTests/EonaCatToolsTests-Info.plist";
PRODUCT_NAME = "$(TARGET_NAME)";
TEST_HOST = "$(BUNDLE_LOADER)";
WRAPPER_EXTENSION = xctest;
};
name = Debug;
};
EC760BCD178E976E00095B31 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/EonaCatTools.app/EonaCatTools";
FRAMEWORK_SEARCH_PATHS = (
"$(SDKROOT)/Developer/Library/Frameworks",
"$(inherited)",
"$(SYSTEM_APPS_DIR)/Xcode5-DP3.app/Contents/Developer/Library/Frameworks",
);
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "EonaCatTools/EonaCatTools-Prefix.pch";
INFOPLIST_FILE = "EonaCatToolsTests/EonaCatToolsTests-Info.plist";
PRODUCT_NAME = "$(TARGET_NAME)";
TEST_HOST = "$(BUNDLE_LOADER)";
WRAPPER_EXTENSION = xctest;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
EC760B8E178E976E00095B31 /* Build configuration list for PBXProject "EonaCatTools" */ = {
isa = XCConfigurationList;
buildConfigurations = (
EC760BC6178E976E00095B31 /* Debug */,
EC760BC7178E976E00095B31 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
EC760BC8178E976E00095B31 /* Build configuration list for PBXNativeTarget "EonaCatTools" */ = {
isa = XCConfigurationList;
buildConfigurations = (
EC760BC9178E976E00095B31 /* Debug */,
EC760BCA178E976E00095B31 /* Release */,
);
defaultConfigurationIsVisible = 0;
};
EC760BCB178E976E00095B31 /* Build configuration list for PBXNativeTarget "EonaCatToolsTests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
EC760BCC178E976E00095B31 /* Debug */,
EC760BCD178E976E00095B31 /* Release */,
);
defaultConfigurationIsVisible = 0;
};
/* End XCConfigurationList section */
};
rootObject = EC760B8B178E976E00095B31 /* Project object */;
}

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:EonaCatTools.xcodeproj">
</FileRef>
</Workspace>

BIN
EonaCatTools/.DS_Store vendored Normal file

Binary file not shown.

View File

@ -0,0 +1,16 @@
//
// AppDelegate.h
// Created by EonaCat
// Copyright 2013 EonaCat. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>
#define Delegate ((AppDelegate *)[[UIApplication sharedApplication] delegate])
@property (strong, nonatomic) UIWindow *window;
@property (nonatomic, assign) BOOL iPad;
@end

View File

@ -0,0 +1,55 @@
//
// AppDelegate.m
// Created by EonaCat
// Copyright 2013 EonaCat. All rights reserved.
//
#import "AppDelegate.h"
#import "ExceptionHandler.h"
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.iPad = (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad);
// Create the exceptionHandler
[self performSelector:@selector(setExceptionHandler) withObject:nil afterDelay:0];
return YES;
}
- (void)setExceptionHandler
{
createExceptionHandler(@"YOUREMAILADDRESS", @"");
}
- (void)applicationWillResignActive:(UIApplication *)application
{
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}
- (void)applicationDidEnterBackground:(UIApplication *)application
{
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}
- (void)applicationWillEnterForeground:(UIApplication *)application
{
// Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}
- (void)applicationWillTerminate:(UIApplication *)application
{
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}
@end

View File

@ -0,0 +1,114 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="4471.1" systemVersion="12E55" targetRuntime="iOS.CocoaTouch.iPad" propertyAccessControl="none" useAutolayout="YES" initialViewController="BYZ-38-t0r">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3697.3"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="tne-QT-ifu">
<objects>
<viewController id="BYZ-38-t0r" customClass="ViewController" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="xLR-yP-yFW"/>
<viewControllerLayoutGuide type="bottom" id="lks-LE-cij"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
<rect key="frame" x="0.0" y="0.0" width="768" height="1024"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="6hh-MS-PsJ">
<rect key="frame" x="190" y="111" width="389" height="158"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="boldSystem" size="button"/>
<state key="normal" title="Show Exceptions">
<color key="titleColor" red="0.1960784314" green="0.30980392159999998" blue="0.52156862749999999" alpha="1" colorSpace="calibratedRGB"/>
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="showExceptionsAction:" destination="BYZ-38-t0r" eventType="touchUpInside" id="Bm4-NB-oNa"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="TDl-wl-Ehg">
<rect key="frame" x="190" y="297" width="389" height="158"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" title="Throw Exception">
<color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="throwExceptionAction:" destination="BYZ-38-t0r" eventType="touchUpInside" id="F32-wy-S73"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="YNI-50-nQ1">
<rect key="frame" x="190" y="463" width="389" height="158"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" title="Show Toast">
<color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="showToastAction:" destination="BYZ-38-t0r" eventType="touchUpInside" id="zUB-mX-hdE"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="pIs-X3-ul6">
<rect key="frame" x="190" y="629" width="389" height="158"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" title="Show Popup">
<color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="showPopupAction:" destination="BYZ-38-t0r" eventType="touchUpInside" id="mWc-Jr-cB1"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Tuk-v6-JRy">
<rect key="frame" x="190" y="795" width="389" height="158"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" title="Show LockScreen">
<color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="showLockScreenAction:" destination="BYZ-38-t0r" eventType="touchUpInside" id="ORX-90-Fny"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
</view>
<connections>
<outlet property="showExceptionsButton" destination="6hh-MS-PsJ" id="Ayv-OD-p6B"/>
<outlet property="showLockScreenButton" destination="Tuk-v6-JRy" id="Ufk-Yn-QPG"/>
<outlet property="showPopupButton" destination="pIs-X3-ul6" id="aTA-54-KHJ"/>
<outlet property="showToastButton" destination="YNI-50-nQ1" id="T79-Hh-GkH"/>
<outlet property="throwException" destination="TDl-wl-Ehg" id="zof-sF-q3f"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
</objects>
</scene>
</scenes>
<simulatedMetricsContainer key="defaultSimulatedMetrics">
<simulatedStatusBarMetrics key="statusBar" statusBarStyle="blackOpaque"/>
<simulatedOrientationMetrics key="orientation"/>
<simulatedScreenMetrics key="destination"/>
</simulatedMetricsContainer>
</document>

View File

@ -0,0 +1,114 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="4471.1" systemVersion="12E55" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" initialViewController="vXZ-lx-hvc">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3697.3"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="ufC-wZ-h7g">
<objects>
<viewController id="vXZ-lx-hvc" customClass="ViewController" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="Ri1-i1-AX4"/>
<viewControllerLayoutGuide type="bottom" id="OWr-km-m7d"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="kh9-bI-dsS">
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="WJZ-xJ-otb">
<rect key="frame" x="45" y="81" width="230" height="44"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="boldSystem" size="button"/>
<state key="normal" title="Show Exceptions">
<color key="titleColor" red="0.19607843137254902" green="0.30980392156862746" blue="0.52156862745098043" alpha="1" colorSpace="calibratedRGB"/>
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="showExceptionsAction:" destination="vXZ-lx-hvc" eventType="touchUpInside" id="iaz-5D-KKH"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="sST-Dp-9j8">
<rect key="frame" x="45" y="133" width="230" height="44"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" title="Throw Exception">
<color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="throwExceptionAction:" destination="vXZ-lx-hvc" eventType="touchUpInside" id="NEh-dO-cJO"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="afD-MQ-GvJ">
<rect key="frame" x="45" y="232" width="230" height="44"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" title="Show Toast">
<color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="showToastAction:" destination="vXZ-lx-hvc" eventType="touchUpInside" id="B87-Ph-5q4"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="KIv-Br-EFZ">
<rect key="frame" x="45" y="284" width="230" height="44"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" title="Show Popup">
<color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="showPopupAction:" destination="vXZ-lx-hvc" eventType="touchUpInside" id="u3k-dL-6XF"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="4VY-4B-mLS">
<rect key="frame" x="45" y="370" width="230" height="44"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" title="Show LockScreen">
<color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted">
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="showLockScreenAction:" destination="vXZ-lx-hvc" eventType="touchUpInside" id="JpT-d1-z5I"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
</view>
<connections>
<outlet property="showExceptionsButton" destination="WJZ-xJ-otb" id="Up5-20-ap8"/>
<outlet property="showLockScreenButton" destination="4VY-4B-mLS" id="f64-r6-uBq"/>
<outlet property="showPopupButton" destination="KIv-Br-EFZ" id="34Q-K3-coY"/>
<outlet property="showToastButton" destination="afD-MQ-GvJ" id="9QK-S1-fvd"/>
<outlet property="throwException" destination="sST-Dp-9j8" id="dVf-1n-rdq"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="x5A-6p-PRh" sceneMemberID="firstResponder"/>
</objects>
</scene>
</scenes>
<simulatedMetricsContainer key="defaultSimulatedMetrics">
<simulatedStatusBarMetrics key="statusBar"/>
<simulatedOrientationMetrics key="orientation"/>
<simulatedScreenMetrics key="destination" type="retina4"/>
</simulatedMetricsContainer>
</document>

View File

@ -0,0 +1,49 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleDisplayName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key>
<string>nl.EonaCat.${PRODUCT_NAME:rfc1034identifier}</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UIMainStoryboardFile</key>
<string>Main_iPhone</string>
<key>UIMainStoryboardFile~ipad</key>
<string>Main_iPad</string>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
</dict>
</plist>

View File

@ -0,0 +1,16 @@
//
// Prefix header
//
// The contents of this file are implicitly included at the beginning of every source file.
//
#import <Availability.h>
#ifndef __IPHONE_5_0
#warning "This project uses features only available in iOS SDK 5.0 and later."
#endif
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#endif

View File

@ -0,0 +1,48 @@
{
"images" : [
{
"idiom" : "iphone",
"size" : "29x29",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "60x60",
"scale" : "2x"
},
{
"idiom" : "ipad",
"size" : "29x29",
"scale" : "1x"
},
{
"idiom" : "ipad",
"size" : "29x29",
"scale" : "2x"
},
{
"idiom" : "ipad",
"size" : "50x50",
"scale" : "1x"
},
{
"idiom" : "ipad",
"size" : "50x50",
"scale" : "2x"
},
{
"idiom" : "ipad",
"size" : "72x72",
"scale" : "1x"
},
{
"idiom" : "ipad",
"size" : "72x72",
"scale" : "2x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

View File

@ -0,0 +1,51 @@
{
"images" : [
{
"orientation" : "portrait",
"idiom" : "iphone",
"extent" : "full-screen",
"minimum-system-version" : "7.0",
"scale" : "2x"
},
{
"orientation" : "portrait",
"idiom" : "iphone",
"subtype" : "retina4",
"extent" : "full-screen",
"minimum-system-version" : "7.0",
"scale" : "2x"
},
{
"orientation" : "portrait",
"idiom" : "ipad",
"extent" : "full-screen",
"minimum-system-version" : "7.0",
"scale" : "1x"
},
{
"orientation" : "landscape",
"idiom" : "ipad",
"extent" : "full-screen",
"minimum-system-version" : "7.0",
"scale" : "1x"
},
{
"orientation" : "portrait",
"idiom" : "ipad",
"extent" : "full-screen",
"minimum-system-version" : "7.0",
"scale" : "2x"
},
{
"orientation" : "landscape",
"idiom" : "ipad",
"extent" : "full-screen",
"minimum-system-version" : "7.0",
"scale" : "2x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
EonaCatTools/Tools/.DS_Store vendored Normal file

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,5 @@
// Dutch language file
"Back" = "Terug";
"Clear" = "Legen";
"Exceptions" = "Foutmeldingen";

View File

@ -0,0 +1,5 @@
// English language file
"Back" = "Back";
"Clear" = "Clear";
"Exceptions" = "Exceptions";

View File

@ -0,0 +1,20 @@
//
// ExceptionHandler.h
// Created by EonaCat
// Copyright 2013 EonaCat. All rights reserved.
//
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import <MessageUI/MFMailComposeViewController.h>
#define exceptionDelegate [[UIApplication sharedApplication] delegate]
@interface ExceptionHandler : UIViewController <MFMailComposeViewControllerDelegate>
{
BOOL dismissed;
}
@end
void createExceptionHandler(NSString *emailAddress,NSString *BCCemailAddress);

View File

@ -0,0 +1,359 @@
//
// ExceptionHandler.m
// Created by EonaCat
// Copyright 2013 EonaCat. All rights reserved.
//
// The ExceptionHandler needs to be imported in the ApplicationDelegate by using the #import "ExceptionHandler.h"; statement in de .m file
// The following functions need to be created in the ApplicationDelegate.m file
// - (void)setExceptionHandler
// {
// createExceptionHandler(@"YOUREMAILADDRESS", @"");
// }
// In the ApplicationDelegate file the method
// - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// need to be created inside this method you will need to implement the following code:
//
// //Create the exceptionHandler
// [self performSelector:@selector(setExceptionHandler) withObject:nil afterDelay:0];
//
//
// You will need to implement the application delegate of the application before you can use the Email function.
// So be sure to import the applications's delegate headerfile and change the following line:
// (Located in the - (void) displayComposerSheet:(NSString *)body method)
//
// [self presentViewController: tempMailCompose animated:YES completion:nil];
//
// into
//
// [root.navigationController presentViewController: tempMailCompose animated:YES completion:nil];
//
// Be sure that the following line is present in your core or appdelegate file
// #define Delegate ((yourAppDelegateFileName*)[UIApplication sharedApplication].delegate)
#import "ExceptionHandler.h"
#import "DeviceIdentifier.h"
#include <libkern/OSAtomic.h>
#include <execinfo.h>
#import "ExceptionLogger.h"
const NSString *ExceptionName = @"ExceptionName";
const NSString *ExceptionKey = @"ExceptionKey";
const NSString *ExceptionAddresses = @"ExceptionAddresses";
NSString *ExceptionTitle = @"iPhone Exception";
NSString *ExceptionEmail = @"";
NSString *ExceptionBCCEmail = @"";
NSString *ExceptionMessage = @"";
NSInteger ExceptionShown = 0;
BOOL ExceptionAlert = true;
volatile int32_t ExceptionCount = 0;
const int32_t ExceptionMaximum = 5;
const NSInteger ExceptionHandlerSkipAddressCount = 4;
const NSInteger ExceptionHandlerReportAddressCount = 5;
@implementation ExceptionHandler
+ (NSArray *)backtrace
{
void *callstack[128];
int frames = backtrace(callstack, 128);
char **stringSymbols = backtrace_symbols(callstack, frames);
int i;
NSMutableArray *backtrace = [NSMutableArray arrayWithCapacity:frames];
for (i = ExceptionHandlerSkipAddressCount; i < ExceptionHandlerSkipAddressCount + ExceptionHandlerReportAddressCount; i++)
{
[backtrace addObject:[NSString stringWithUTF8String:stringSymbols[i]]];
}
free(stringSymbols);
return backtrace;
}
- (void)alertView:(UIAlertView *)anAlertView clickedButtonAtIndex:(NSInteger)Index
{
if (Index == 0) // Quit button clicked
{
ExceptionShown = 0;
dismissed = YES;
}
else if (Index == 1) // Continue button clicked
{
ExceptionShown = 0;
}
else if (Index == 2) // Email button clicked
{
// Create the email that needs to be send
[self performSelector:@selector(showComposer:) withObject:ExceptionMessage afterDelay:0.1];
}
}
// Displays an email composition interface inside the application. Populates all the Mail fields.
- (void) displayComposerSheet:(NSString *)body
{
MFMailComposeViewController *mailController = [[MFMailComposeViewController alloc] init];
mailController.mailComposeDelegate = self;
NSArray *toRecipient = [[NSArray alloc] initWithObjects:ExceptionEmail,nil];
[mailController setToRecipients:toRecipient];
if (ExceptionBCCEmail.length > 0)
{
NSArray *bccRecipient = [[NSArray alloc] initWithObjects:ExceptionBCCEmail,nil];
[mailController setBccRecipients:bccRecipient];
}
[mailController setSubject:ExceptionTitle];
[mailController setMessageBody:body isHTML:NO];
UIWindow* window = [[UIApplication sharedApplication] keyWindow];
[window addSubview:mailController.view];
}
// Dismisses the email composition interface when users tap Cancel or Send. Proceeds to update the message field with the result of the operation.
- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
{
// Notifies users about errors associated with the interface
switch (result)
{
case MFMailComposeResultCancelled:
NSLog(@"Result: canceled");
break;
case MFMailComposeResultSaved:
NSLog(@"Result: saved");
break;
case MFMailComposeResultSent:
NSLog(@"Result: sent");
break;
case MFMailComposeResultFailed:
NSLog(@"Result: failed");
break;
default:
NSLog(@"Result: not sent");
break;
}
[self dismissViewControllerAnimated:YES completion:nil];
}
// Launches the Mail application on the device. Workaround
-(void)launchMailAppOnDevice:(NSString *)body
{
NSString *recipients;
if ([ExceptionEmail isEqualToString:@"YOUREMAILADDRESS"])
{
NSLog(@"Could not send email (default values where detected!)");
return;
}
if (ExceptionBCCEmail.length > 0)
{
recipients = [NSString stringWithFormat:@"mailto:%@?bcc=%@?subject=%@", ExceptionEmail, ExceptionBCCEmail, ExceptionTitle];
}
else
{
recipients = [NSString stringWithFormat:@"mailto:%@?subject=%@", ExceptionEmail, ExceptionTitle];
}
NSString *mailBody = [NSString stringWithFormat:@"&body=%@", body];
NSString *email = [NSString stringWithFormat:@"%@%@", recipients, mailBody];
email = [email stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:email]];
}
// Call this method and pass parameters
-(void) showComposer:(id)sender
{
Class mailClass = (NSClassFromString(@"MFMailComposeViewController"));
if (mailClass != nil)
{
// We must always check whether the current device is configured for sending emails
if ([mailClass canSendMail])
{
[self displayComposerSheet:sender];
}
else
{
[self launchMailAppOnDevice:sender];
}
}
else
{
[self launchMailAppOnDevice:sender];
}
}
- (void)saveAndQuit
{
}
- (void)checkForExceptions:(NSException *)exception
{
if (ExceptionShown == 0)
{
ExceptionShown = 1;
[self saveAndQuit];
/*
// Set the IMEI Number
// Check if you got iOS5
NSString *IMEI;
float version = [[[UIDevice currentDevice] systemVersion] floatValue];
if (version >= 5.0)
{
IMEI = [[NSString alloc] initWithString:[[UIDevice currentDevice] deviceIdentifier]];
}
else
{
IMEI = [[NSString alloc] initWithString:[[UIDevice currentDevice] uniqueIdentifier]];
}
*/
NSDate *currentTime = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"YYYY-MM-dd hh-mm"];
NSString *resultString = [dateFormatter stringFromDate: currentTime];
ExceptionMessage = [NSString stringWithFormat:
@"iPhone exception information:\n\n"
@"Date: %@\n"
@"Application Name: %@\n"
@"Localized Application Name: %@\n"
@"Devicetype: %@\n"
@"============================= \n"
@"Reason: %@\n"
@"============================= \n\n"
@"***************************** \n\n"
@"Exception: %@\n\n"
@"***************************** \n",
resultString, [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleName"],
[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleDisplayName"], [UIDevice currentDevice].model,
[exception reason],[[exception userInfo] objectForKey:ExceptionAddresses]];
if (ExceptionAlert)
{
UIAlertView *alert =
[[UIAlertView alloc]
initWithTitle:@"You have found an error"
message:[NSString stringWithFormat: @"You can try continuing using the application "
@"but it may become unstable after a while.\n"
@"Please send us an email with the error report "
@"by clicking on the send report button."]
delegate:self
cancelButtonTitle:@"Quit"
otherButtonTitles:@"Continue", @"Send report",nil];
[alert show];
}
else
{
[[ExceptionLogger instance] log:ExceptionMessage];
}
CFRunLoopRef runLoop = CFRunLoopGetCurrent();
CFArrayRef allModes = CFRunLoopCopyAllModes(runLoop);
while (!dismissed)
{
for (NSString *mode in (__bridge NSArray *)allModes)
{
CFRunLoopRunInMode((__bridge CFStringRef)mode, 0.001, false);
}
}
CFRelease(allModes);
NSSetUncaughtExceptionHandler(NULL);
signal(SIGABRT, SIG_DFL);
signal(SIGILL, SIG_DFL);
signal(SIGSEGV, SIG_DFL);
signal(SIGFPE, SIG_DFL);
signal(SIGBUS, SIG_DFL);
signal(SIGPIPE, SIG_DFL);
if ([[exception name] isEqual:ExceptionName])
{
kill(getpid(), [[[exception userInfo] objectForKey:ExceptionKey] intValue]);
}
else
{
[exception raise];
}
}
}
@end
void checkForExceptions(NSException *exception)
{
int32_t exceptionCount = OSAtomicIncrement32(&ExceptionCount);
if (exceptionCount > ExceptionMaximum)
{
NSLog(@"Maximum amount of exceptions where raised !");
return;
}
NSArray *callStack = [ExceptionHandler backtrace];
NSMutableDictionary *userInfo =
[NSMutableDictionary dictionaryWithDictionary:[exception userInfo]];
[userInfo
setObject:callStack
forKey:ExceptionAddresses];
[[[ExceptionHandler alloc] init]
performSelectorOnMainThread:@selector(checkForExceptions:)
withObject:
[NSException
exceptionWithName:[exception name]
reason:[exception reason]
userInfo:userInfo]
waitUntilDone:YES];
}
void ExceptionCounter(int exception)
{
int32_t exceptionCount = OSAtomicIncrement32(&ExceptionCount);
if (exceptionCount > ExceptionMaximum)
{
return;
}
NSMutableDictionary *userInfo = [NSMutableDictionary dictionaryWithObject:[NSNumber numberWithInt:exception] forKey:ExceptionKey];
NSArray *callStack = [ExceptionHandler backtrace];
[userInfo setObject:callStack forKey:ExceptionAddresses];
[[[ExceptionHandler alloc] init] performSelectorOnMainThread:@selector(checkForExceptions:)
withObject: [NSException exceptionWithName:[NSString stringWithFormat:@"%@",ExceptionTitle]
reason: [NSString stringWithFormat: NSLocalizedString(@"Signal %d was raised.", nil), signal]
userInfo: [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:exception] forKey:ExceptionKey]]
waitUntilDone:YES];
}
void createExceptionHandler(NSString *emailAddress,NSString *BCCemailAddress)
{
NSSetUncaughtExceptionHandler(&checkForExceptions);
signal(SIGABRT, ExceptionCounter);
signal(SIGILL, ExceptionCounter);
signal(SIGSEGV, ExceptionCounter);
signal(SIGFPE, ExceptionCounter);
signal(SIGBUS, ExceptionCounter);
signal(SIGPIPE, ExceptionCounter);
ExceptionEmail = emailAddress;
ExceptionBCCEmail = BCCemailAddress;
}

View File

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="3.0" toolsVersion="4471.1" systemVersion="12E55" targetRuntime="iOS.CocoaTouch.iPad" propertyAccessControl="none">
<dependencies>
<deployment version="768" defaultVersion="1792" identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3697.3"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="ExceptionLogger">
<connections>
<outlet property="navigationBar" destination="24" id="26"/>
<outlet property="view" destination="1" id="25"/>
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="1">
<rect key="frame" x="0.0" y="0.0" width="768" height="1024"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<navigationBar contentMode="scaleToFill" id="23">
<rect key="frame" x="0.0" y="0.0" width="768" height="44"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<color key="tintColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<items>
<navigationItem title="Exceptions" id="24"/>
</items>
</navigationBar>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="ExceptionLogger.png" id="27">
<rect key="frame" x="277" y="814" width="215" height="170"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
</imageView>
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" showsHorizontalScrollIndicator="NO" id="Qly-Ng-xEE">
<rect key="frame" x="14" y="58" width="742" height="748"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" cocoaTouchSystemColor="tableCellGroupedBackgroundColor"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
</textView>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
<simulatedStatusBarMetrics key="simulatedStatusBarMetrics" statusBarStyle="blackTranslucent"/>
</view>
</objects>
<resources>