Add minimum viable product
This commit is contained in:
commit
5a5dfb7bb2
41 changed files with 405 additions and 0 deletions
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
.theos
|
||||||
|
packages
|
18
Headers/CALayer.h
Normal file
18
Headers/CALayer.h
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
//
|
||||||
|
// CALayer.h
|
||||||
|
// ScreenShredder
|
||||||
|
//
|
||||||
|
// Created by Spotlight Deveaux on 2021-11-14.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef CALayer_h
|
||||||
|
#define CALayer_h
|
||||||
|
|
||||||
|
@import QuartzCore;
|
||||||
|
#import "CAState.h"
|
||||||
|
|
||||||
|
@interface CALayer (PrivateDefinitions)
|
||||||
|
@property(readonly) NSArray<CAState *> *_Nonnull states;
|
||||||
|
@end
|
||||||
|
|
||||||
|
#endif /* CALayer_h */
|
31
Headers/CAPackage.h
Normal file
31
Headers/CAPackage.h
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
//
|
||||||
|
// CAPackage.h
|
||||||
|
// ScreenShredder
|
||||||
|
//
|
||||||
|
// Created by Spotlight Deveaux on 2021-11-14.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef CAPackage_h
|
||||||
|
#define CAPackage_h
|
||||||
|
|
||||||
|
@import QuartzCore;
|
||||||
|
|
||||||
|
extern NSString *_Nonnull kCAPackageTypeArchive;
|
||||||
|
|
||||||
|
@interface CAPackage : NSObject
|
||||||
|
|
||||||
|
+ (CAPackage *_Nullable)packageWithContentsOfURL:(NSURL *_Nonnull)url
|
||||||
|
type:(NSString *_Nonnull)type
|
||||||
|
options:(NSDictionary *_Nullable)opts
|
||||||
|
error:(NSError *_Nullable *_Nullable)
|
||||||
|
outError;
|
||||||
|
|
||||||
|
- (NSArray<NSString *> *_Nonnull)publishedObjectNames;
|
||||||
|
- (CALayer *_Nullable)publishedObjectWithName:(NSString *_Nonnull)name;
|
||||||
|
|
||||||
|
@property(readonly, getter=isGeometryFlipped) BOOL geometryFlipped;
|
||||||
|
@property(readonly) CALayer *_Nonnull rootLayer;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
#endif /* CAPackage_h */
|
21
Headers/CAState.h
Normal file
21
Headers/CAState.h
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
//
|
||||||
|
// CAState.h
|
||||||
|
// ScreenShredder
|
||||||
|
//
|
||||||
|
// Created by Spotlight Deveaux on 2021-11-14.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef CAState_h
|
||||||
|
#define CAState_h
|
||||||
|
|
||||||
|
@import QuartzCore;
|
||||||
|
|
||||||
|
@interface CAState : NSObject
|
||||||
|
|
||||||
|
// We most likely don't need to define its methods, as we use none directly.
|
||||||
|
// Instead, we define this solely for type checking.
|
||||||
|
// (I apologize if you were looking for them here.)
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
#endif /* CAState_h */
|
43
Headers/CAStateController.h
Normal file
43
Headers/CAStateController.h
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
//
|
||||||
|
// CAStateController.h
|
||||||
|
// ScreenShredder
|
||||||
|
//
|
||||||
|
// Created by Spotlight Deveaux on 2021-11-14.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef CAStateController_h
|
||||||
|
#define CAStateController_h
|
||||||
|
|
||||||
|
@import QuartzCore;
|
||||||
|
#import "CAState.h"
|
||||||
|
|
||||||
|
@interface CAStateController : NSObject
|
||||||
|
|
||||||
|
// TODO: Do we need to bother with delegates?
|
||||||
|
//@property(__weak) NSObject *<CAStateControllerDelegate> delegate;
|
||||||
|
//- (NSObject *<CAStateControllerDelegate>)delegate;
|
||||||
|
//- (void)setDelegate:(NSObject *<CAStateControllerDelegate>)delegate;
|
||||||
|
- (CALayer *_Nullable)layer;
|
||||||
|
- (void)_removeTransition:(id _Nonnull)arg1 layer:(CALayer *_Nonnull)arg2;
|
||||||
|
- (CAStateController *_Nonnull)initWithLayer:(CALayer *_Nonnull)layer;
|
||||||
|
- (CAState *_Nonnull)stateOfLayer:(CALayer *_Nonnull)arg1;
|
||||||
|
- (void)setState:(CAState *_Nonnull)state
|
||||||
|
ofLayer:(CALayer *_Nonnull)layer
|
||||||
|
transitionSpeed:(float)speed;
|
||||||
|
- (void)setState:(CAState *_Nonnull)state ofLayer:(CALayer *_Nonnull)layer;
|
||||||
|
- (void)setInitialStatesOfLayer:(CALayer *_Nonnull)layer
|
||||||
|
transitionSpeed:(float)speed;
|
||||||
|
- (void)setInitialStatesOfLayer:(CALayer *_Nonnull)layer;
|
||||||
|
|
||||||
|
// TODO: What type is id in the beneath here?
|
||||||
|
- (id _Nonnull)removeAllStateChanges;
|
||||||
|
- (void)restoreStateChanges:(id _Nonnull)arg1;
|
||||||
|
- (void)cancelTimers;
|
||||||
|
- (void)_nextStateTimer:(id _Nonnull)arg1;
|
||||||
|
- (void)_addAnimation:(id _Nonnull)arg1
|
||||||
|
forKey:(id _Nonnull)arg2
|
||||||
|
target:(id _Nonnull)arg3
|
||||||
|
undo:(id _Nonnull)arg4;
|
||||||
|
@end
|
||||||
|
|
||||||
|
#endif /* CAStateController_h */
|
12
Makefile
Normal file
12
Makefile
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
TARGET := iphone:clang:latest:6.1
|
||||||
|
INSTALL_TARGET_PROCESSES = shoehorn
|
||||||
|
|
||||||
|
include $(THEOS)/makefiles/common.mk
|
||||||
|
|
||||||
|
APPLICATION_NAME = shoehorn
|
||||||
|
shoehorn_ARCHS = armv7
|
||||||
|
shoehorn_FILES = main.m SPAppDelegate.m SPRootViewController.m
|
||||||
|
shoehorn_FRAMEWORKS = UIKit CoreGraphics PassKit
|
||||||
|
shoehorn_CFLAGS = -fobjc-arc -I./Headers/
|
||||||
|
|
||||||
|
include $(THEOS_MAKE_PATH)/application.mk
|
0
Resources/AppIcon29x29.png
Normal file
0
Resources/AppIcon29x29.png
Normal file
0
Resources/AppIcon29x29@2x.png
Normal file
0
Resources/AppIcon29x29@2x.png
Normal file
0
Resources/AppIcon29x29@3x.png
Normal file
0
Resources/AppIcon29x29@3x.png
Normal file
0
Resources/AppIcon40x40.png
Normal file
0
Resources/AppIcon40x40.png
Normal file
0
Resources/AppIcon40x40@2x.png
Normal file
0
Resources/AppIcon40x40@2x.png
Normal file
0
Resources/AppIcon40x40@3x.png
Normal file
0
Resources/AppIcon40x40@3x.png
Normal file
0
Resources/AppIcon50x50.png
Normal file
0
Resources/AppIcon50x50.png
Normal file
0
Resources/AppIcon50x50@2x.png
Normal file
0
Resources/AppIcon50x50@2x.png
Normal file
0
Resources/AppIcon57x57.png
Normal file
0
Resources/AppIcon57x57.png
Normal file
0
Resources/AppIcon57x57@2x.png
Normal file
0
Resources/AppIcon57x57@2x.png
Normal file
0
Resources/AppIcon57x57@3x.png
Normal file
0
Resources/AppIcon57x57@3x.png
Normal file
0
Resources/AppIcon60x60.png
Normal file
0
Resources/AppIcon60x60.png
Normal file
0
Resources/AppIcon60x60@2x.png
Normal file
0
Resources/AppIcon60x60@2x.png
Normal file
0
Resources/AppIcon60x60@3x.png
Normal file
0
Resources/AppIcon60x60@3x.png
Normal file
0
Resources/AppIcon72x72.png
Normal file
0
Resources/AppIcon72x72.png
Normal file
0
Resources/AppIcon72x72@2x.png
Normal file
0
Resources/AppIcon72x72@2x.png
Normal file
0
Resources/AppIcon76x76.png
Normal file
0
Resources/AppIcon76x76.png
Normal file
0
Resources/AppIcon76x76@2x.png
Normal file
0
Resources/AppIcon76x76@2x.png
Normal file
154
Resources/Info.plist
Normal file
154
Resources/Info.plist
Normal file
|
@ -0,0 +1,154 @@
|
||||||
|
<?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>CFBundleExecutable</key>
|
||||||
|
<string>shoehorn</string>
|
||||||
|
<key>CFBundleIcons</key>
|
||||||
|
<dict>
|
||||||
|
<key>CFBundlePrimaryIcon</key>
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleIconFiles</key>
|
||||||
|
<array>
|
||||||
|
<string>AppIcon29x29</string>
|
||||||
|
<string>AppIcon40x40</string>
|
||||||
|
<string>AppIcon57x57</string>
|
||||||
|
<string>AppIcon60x60</string>
|
||||||
|
</array>
|
||||||
|
<key>UIPrerenderedIcon</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>CFBundleIcons~ipad</key>
|
||||||
|
<dict>
|
||||||
|
<key>CFBundlePrimaryIcon</key>
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleIconFiles</key>
|
||||||
|
<array>
|
||||||
|
<string>AppIcon29x29</string>
|
||||||
|
<string>AppIcon40x40</string>
|
||||||
|
<string>AppIcon57x57</string>
|
||||||
|
<string>AppIcon60x60</string>
|
||||||
|
<string>AppIcon50x50</string>
|
||||||
|
<string>AppIcon72x72</string>
|
||||||
|
<string>AppIcon76x76</string>
|
||||||
|
</array>
|
||||||
|
<key>UIPrerenderedIcon</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>space.joscomputing.spacehorn</string>
|
||||||
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
<string>6.0</string>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>APPL</string>
|
||||||
|
<key>CFBundleSignature</key>
|
||||||
|
<string>????</string>
|
||||||
|
<key>CFBundleSupportedPlatforms</key>
|
||||||
|
<array>
|
||||||
|
<string>iPhoneOS</string>
|
||||||
|
</array>
|
||||||
|
<key>CFBundleVersion</key>
|
||||||
|
<string>1.0</string>
|
||||||
|
<key>LSRequiresIPhoneOS</key>
|
||||||
|
<true/>
|
||||||
|
<key>UIDeviceFamily</key>
|
||||||
|
<array>
|
||||||
|
<integer>1</integer>
|
||||||
|
<integer>2</integer>
|
||||||
|
</array>
|
||||||
|
<key>UIRequiredDeviceCapabilities</key>
|
||||||
|
<array>
|
||||||
|
<string>armv7</string>
|
||||||
|
</array>
|
||||||
|
<key>UILaunchImageFile</key>
|
||||||
|
<string>LaunchImage</string>
|
||||||
|
<key>UILaunchImages</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>UILaunchImageMinimumOSVersion</key>
|
||||||
|
<string>7.0</string>
|
||||||
|
<key>UILaunchImageName</key>
|
||||||
|
<string>LaunchImage</string>
|
||||||
|
<key>UILaunchImageOrientation</key>
|
||||||
|
<string>Portrait</string>
|
||||||
|
<key>UILaunchImageSize</key>
|
||||||
|
<string>{320, 480}</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>UILaunchImageMinimumOSVersion</key>
|
||||||
|
<string>7.0</string>
|
||||||
|
<key>UILaunchImageName</key>
|
||||||
|
<string>LaunchImage-700-568h</string>
|
||||||
|
<key>UILaunchImageOrientation</key>
|
||||||
|
<string>Portrait</string>
|
||||||
|
<key>UILaunchImageSize</key>
|
||||||
|
<string>{320, 568}</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>UILaunchImageMinimumOSVersion</key>
|
||||||
|
<string>7.0</string>
|
||||||
|
<key>UILaunchImageName</key>
|
||||||
|
<string>LaunchImage-Portrait</string>
|
||||||
|
<key>UILaunchImageOrientation</key>
|
||||||
|
<string>Portrait</string>
|
||||||
|
<key>UILaunchImageSize</key>
|
||||||
|
<string>{768, 1024}</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>UILaunchImageMinimumOSVersion</key>
|
||||||
|
<string>7.0</string>
|
||||||
|
<key>UILaunchImageName</key>
|
||||||
|
<string>LaunchImage-Landscape</string>
|
||||||
|
<key>UILaunchImageOrientation</key>
|
||||||
|
<string>Landscape</string>
|
||||||
|
<key>UILaunchImageSize</key>
|
||||||
|
<string>{768, 1024}</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>UILaunchImageMinimumOSVersion</key>
|
||||||
|
<string>8.0</string>
|
||||||
|
<key>UILaunchImageName</key>
|
||||||
|
<string>LaunchImage-800-667h</string>
|
||||||
|
<key>UILaunchImageOrientation</key>
|
||||||
|
<string>Portrait</string>
|
||||||
|
<key>UILaunchImageSize</key>
|
||||||
|
<string>{375, 667}</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>UILaunchImageMinimumOSVersion</key>
|
||||||
|
<string>8.0</string>
|
||||||
|
<key>UILaunchImageName</key>
|
||||||
|
<string>LaunchImage-800-Portrait-736h</string>
|
||||||
|
<key>UILaunchImageOrientation</key>
|
||||||
|
<string>Portrait</string>
|
||||||
|
<key>UILaunchImageSize</key>
|
||||||
|
<string>{414, 736}</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>UILaunchImageMinimumOSVersion</key>
|
||||||
|
<string>8.0</string>
|
||||||
|
<key>UILaunchImageName</key>
|
||||||
|
<string>LaunchImage-800-Landscape-736h</string>
|
||||||
|
<key>UILaunchImageOrientation</key>
|
||||||
|
<string>Landscape</string>
|
||||||
|
<key>UILaunchImageSize</key>
|
||||||
|
<string>{414, 736}</string>
|
||||||
|
</dict>
|
||||||
|
</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>
|
0
Resources/LaunchImage-700-568h@2x.png
Normal file
0
Resources/LaunchImage-700-568h@2x.png
Normal file
0
Resources/LaunchImage-700-Landscape@2x~ipad.png
Normal file
0
Resources/LaunchImage-700-Landscape@2x~ipad.png
Normal file
0
Resources/LaunchImage-700-Landscape~ipad.png
Normal file
0
Resources/LaunchImage-700-Landscape~ipad.png
Normal file
0
Resources/LaunchImage-700-Portrait@2x~ipad.png
Normal file
0
Resources/LaunchImage-700-Portrait@2x~ipad.png
Normal file
0
Resources/LaunchImage-700-Portrait~ipad.png
Normal file
0
Resources/LaunchImage-700-Portrait~ipad.png
Normal file
0
Resources/LaunchImage-800-667h@2x.png
Normal file
0
Resources/LaunchImage-800-667h@2x.png
Normal file
0
Resources/LaunchImage-800-Landscape-736h@3x.png
Normal file
0
Resources/LaunchImage-800-Landscape-736h@3x.png
Normal file
0
Resources/LaunchImage-800-Portrait-736h@3x.png
Normal file
0
Resources/LaunchImage-800-Portrait-736h@3x.png
Normal file
0
Resources/LaunchImage.png
Normal file
0
Resources/LaunchImage.png
Normal file
0
Resources/LaunchImage@2x.png
Normal file
0
Resources/LaunchImage@2x.png
Normal file
8
SPAppDelegate.h
Normal file
8
SPAppDelegate.h
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
@import UIKit;
|
||||||
|
|
||||||
|
@interface SPAppDelegate : UIResponder <UIApplicationDelegate>
|
||||||
|
|
||||||
|
@property(nonatomic, strong) UIWindow *window;
|
||||||
|
@property(nonatomic, strong) UINavigationController *rootViewController;
|
||||||
|
|
||||||
|
@end
|
16
SPAppDelegate.m
Normal file
16
SPAppDelegate.m
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
#import "SPAppDelegate.h"
|
||||||
|
#import "SPRootViewController.h"
|
||||||
|
@import UIKit;
|
||||||
|
@import QuartzCore;
|
||||||
|
|
||||||
|
@implementation SPAppDelegate
|
||||||
|
|
||||||
|
- (void)applicationDidFinishLaunching:(UIApplication *)application {
|
||||||
|
_window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
|
||||||
|
_rootViewController = [[UINavigationController alloc]
|
||||||
|
initWithRootViewController:[[SPRootViewController alloc] init]];
|
||||||
|
_window.rootViewController = _rootViewController;
|
||||||
|
[_window makeKeyAndVisible];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
5
SPRootViewController.h
Normal file
5
SPRootViewController.h
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
@import UIKit;
|
||||||
|
|
||||||
|
@interface SPRootViewController : UIViewController
|
||||||
|
- (CGImageRef)getImage:(NSString *)named;
|
||||||
|
@end
|
78
SPRootViewController.m
Normal file
78
SPRootViewController.m
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
#import "SPRootViewController.h"
|
||||||
|
|
||||||
|
#import "CALayer.h"
|
||||||
|
#import "CAPackage.h"
|
||||||
|
#import "CAState.h"
|
||||||
|
#import "CAStateController.h"
|
||||||
|
|
||||||
|
@interface SPRootViewController ()
|
||||||
|
- (CGImageRef)getImage:(NSString *)named;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation SPRootViewController
|
||||||
|
|
||||||
|
- (void)loadView {
|
||||||
|
[super loadView];
|
||||||
|
|
||||||
|
// Let's get this party started! Load our package.
|
||||||
|
NSURL *caarPath = [[NSBundle bundleForClass:NSClassFromString(@"PKPass")]
|
||||||
|
URLForResource:@"ShredderSheet"
|
||||||
|
withExtension:@"caar"];
|
||||||
|
CAPackage *package = [CAPackage packageWithContentsOfURL:caarPath
|
||||||
|
type:kCAPackageTypeArchive
|
||||||
|
options:nil
|
||||||
|
error:nil];
|
||||||
|
|
||||||
|
// Determine the frame of the unarchived root layer.
|
||||||
|
CALayer *rootLayer = [package rootLayer];
|
||||||
|
CGRect rootLayerFrame = [rootLayer frame];
|
||||||
|
|
||||||
|
// We can create a new view to harass.
|
||||||
|
// Exhilerating!
|
||||||
|
UIView *layerView = [[UIView alloc] initWithFrame:rootLayerFrame];
|
||||||
|
[[layerView layer] addSublayer:rootLayer];
|
||||||
|
[self.view addSubview:layerView];
|
||||||
|
|
||||||
|
// Ensure our package's root layer does similar, I... think.
|
||||||
|
[[package publishedObjectWithName:@"Root"] setFrame:rootLayerFrame];
|
||||||
|
|
||||||
|
// Oh, our very own state controller!
|
||||||
|
// We've grown up so quickly.
|
||||||
|
CAStateController *stateController =
|
||||||
|
[[CAStateController alloc] initWithLayer:rootLayer];
|
||||||
|
|
||||||
|
// Configure our initial state.
|
||||||
|
CAState *shreddingState = [[rootLayer states] objectAtIndex:2];
|
||||||
|
|
||||||
|
[stateController setInitialStatesOfLayer:rootLayer];
|
||||||
|
[stateController setState:shreddingState
|
||||||
|
ofLayer:rootLayer
|
||||||
|
transitionSpeed:1.0f];
|
||||||
|
|
||||||
|
// Have our wonderful, extremely 2011/2012-esque metal design.
|
||||||
|
// It's local! There's no reason not to.
|
||||||
|
[[package publishedObjectWithName:@"shredderFront"]
|
||||||
|
setContents:(id)[self getImage:@"ShredderMetal"]];
|
||||||
|
[[package publishedObjectWithName:@"shredderBack"]
|
||||||
|
setContents:(id)[self getImage:@"ShredderMetal"]];
|
||||||
|
|
||||||
|
// Set what we're shredding.
|
||||||
|
[[package publishedObjectWithName:@"cardFrontUnshredded"]
|
||||||
|
setContents:(id)[[UIColor redColor] CGColor]];
|
||||||
|
[[package publishedObjectWithName:@"cardFrontShredded"]
|
||||||
|
setContents:(id)[[UIColor blueColor] CGColor]];
|
||||||
|
[[package publishedObjectWithName:@"cardBackUnshredded"]
|
||||||
|
setContents:(id)[[UIColor blueColor] CGColor]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (CGImageRef)getImage:(NSString *)named {
|
||||||
|
NSBundle *passKitBundle =
|
||||||
|
[NSBundle bundleForClass:NSClassFromString(@"PKPass")];
|
||||||
|
NSString *filename = [NSString stringWithFormat:@"%@@2x", named];
|
||||||
|
NSString *path = [passKitBundle pathForResource:filename ofType:@"png"];
|
||||||
|
|
||||||
|
UIImage *image = [UIImage imageWithContentsOfFile:path];
|
||||||
|
return [image CGImage];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
8
control
Normal file
8
control
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
Package: space.joscomputing.spacehorn
|
||||||
|
Name: shoehorn
|
||||||
|
Version: 0.0.1
|
||||||
|
Architecture: iphoneos-arm
|
||||||
|
Description: An awesome application!
|
||||||
|
Maintainer: Spotlight Deveaux
|
||||||
|
Author: Spotlight Deveaux
|
||||||
|
Section: Utilities
|
9
main.m
Normal file
9
main.m
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
#import "SPAppDelegate.h"
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
int main(int argc, char *argv[]) {
|
||||||
|
@autoreleasepool {
|
||||||
|
return UIApplicationMain(argc, argv, nil,
|
||||||
|
NSStringFromClass(SPAppDelegate.class));
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue