-Spring break progress
@ -1 +1 @@
|
||||
355
|
||||
604
|
@ -0,0 +1,41 @@
|
||||
<?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>IDESourceControlProjectFavoriteDictionaryKey</key>
|
||||
<false/>
|
||||
<key>IDESourceControlProjectIdentifier</key>
|
||||
<string>01DCC33B-1DFB-46BB-BAE9-C71F6941240F</string>
|
||||
<key>IDESourceControlProjectName</key>
|
||||
<string>Assistant+</string>
|
||||
<key>IDESourceControlProjectOriginsDictionary</key>
|
||||
<dict>
|
||||
<key>1DDFB15FDAC578A4447EF06D6A0EB8914E453AB8</key>
|
||||
<string>https://bitbucket.org/ZaidElkurdi/assistantplus.git</string>
|
||||
</dict>
|
||||
<key>IDESourceControlProjectPath</key>
|
||||
<string>assistant+/Assistant+.xcworkspace</string>
|
||||
<key>IDESourceControlProjectRelativeInstallPathDictionary</key>
|
||||
<dict>
|
||||
<key>1DDFB15FDAC578A4447EF06D6A0EB8914E453AB8</key>
|
||||
<string>../..</string>
|
||||
</dict>
|
||||
<key>IDESourceControlProjectURL</key>
|
||||
<string>https://bitbucket.org/ZaidElkurdi/assistantplus.git</string>
|
||||
<key>IDESourceControlProjectVersion</key>
|
||||
<integer>111</integer>
|
||||
<key>IDESourceControlProjectWCCIdentifier</key>
|
||||
<string>1DDFB15FDAC578A4447EF06D6A0EB8914E453AB8</string>
|
||||
<key>IDESourceControlProjectWCConfigurations</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>IDESourceControlRepositoryExtensionIdentifierKey</key>
|
||||
<string>public.vcs.git</string>
|
||||
<key>IDESourceControlWCCIdentifierKey</key>
|
||||
<string>1DDFB15FDAC578A4447EF06D6A0EB8914E453AB8</string>
|
||||
<key>IDESourceControlWCCName</key>
|
||||
<string>assistantplus</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
@ -1,10 +1,10 @@
|
||||
#import <Foundation/Foundation.h>
|
||||
#import "assistantpluspluginmanager/AssistantPlusHeaders.h"
|
||||
#import "assistantpluspluginmanager/AssistantHeaders.h"
|
||||
#import "assistantpluspluginmanager/APPluginManager.h"
|
||||
#import "assistantpluspluginmanager/APPluginSystem.h"
|
||||
#import "assistantpluspluginmanager/APSession.h"
|
||||
#import "assistantpluspluginmanager/APSpringboardUtils.h"
|
||||
#import <libobjcipc/objcipc.h>
|
||||
#import <substrate.h>
|
||||
|
||||
@protocol SAAceSerializable <NSObject>
|
||||
@end
|
||||
@ -20,10 +20,11 @@
|
||||
|
||||
static BOOL defaultHandling = YES;
|
||||
static AFConnection *currConnection;
|
||||
static APPluginManager *pluginManager;
|
||||
static APPluginSystem *pluginManager;
|
||||
static BOOL hasLoadedSnippets = NO;
|
||||
|
||||
BOOL shouldHandleRequest(NSString *text, APSession *currSession) {
|
||||
pluginManager = [[%c(APSpringboardUtils) sharedUtils] getPluginManager];
|
||||
pluginManager = [[%c(APSpringboardUtils) sharedAPUtils] getPluginManager];
|
||||
NSLog(@"Manager: %@", pluginManager);
|
||||
NSSet *tokens = [NSSet setWithArray:[text componentsSeparatedByString: @" "]];
|
||||
return [pluginManager handleCommand:text withTokens:tokens withSession:currSession];
|
||||
@ -52,13 +53,18 @@ BOOL shouldHandleRequest(NSString *text, APSession *currSession) {
|
||||
%hook SiriUIPluginManager
|
||||
|
||||
- (id)transcriptItemForObject:(AceObject*)arg1 {
|
||||
if (!hasLoadedSnippets) {
|
||||
[self loadAssistantPlusSnippets];
|
||||
}
|
||||
NSDictionary *properties = [arg1 properties];
|
||||
if (properties) {
|
||||
NSString *className = properties[@"snippetClass"];
|
||||
if (className) {
|
||||
NSLog(@"AP: Looking for custom snippet: %@", className);
|
||||
NSLog(@"Attempt to get: %@", NSClassFromString(className));
|
||||
id<APPluginSnippet> customClass = [[NSClassFromString(className) alloc] initWithProperties:properties[@"snippetProps"]];
|
||||
if ([customClass respondsToSelector:@selector(view)]) {
|
||||
NSLog(@"Custom class: %@", customClass);
|
||||
UIViewController *customVC = (UIViewController*)customClass;
|
||||
SiriUISnippetViewController *vc = [[%c(SiriUISnippetViewController) alloc] init];
|
||||
object_setClass(vc, [%c(APPluginSnippetViewController) class]);
|
||||
@ -75,16 +81,48 @@ BOOL shouldHandleRequest(NSString *text, APSession *currSession) {
|
||||
} else {
|
||||
NSLog(@"AP ERROR: No properties for snippet, this shouldn't hapepn...");
|
||||
}
|
||||
id r = %orig;
|
||||
id r = %orig(arg1);
|
||||
return r;
|
||||
}
|
||||
|
||||
%new
|
||||
- (void)loadAssistantPlusSnippets {
|
||||
hasLoadedSnippets = YES;
|
||||
|
||||
NSURL *directoryPath = [NSURL URLWithString:@PLUGIN_PATH];
|
||||
|
||||
NSFileManager *fileManager = [NSFileManager defaultManager];
|
||||
NSArray *contents = [fileManager contentsOfDirectoryAtURL:directoryPath
|
||||
includingPropertiesForKeys:@[]
|
||||
options:NSDirectoryEnumerationSkipsHiddenFiles
|
||||
error:nil];
|
||||
|
||||
NSLog(@"SiriUIPluginManager: Plugins:");
|
||||
for (NSURL *fileURL in contents) {
|
||||
NSString *name = [[[fileURL absoluteString] lastPathComponent] stringByDeletingPathExtension];
|
||||
|
||||
NSLog(@"Loading %@ at %@", name, fileURL);
|
||||
NSBundle *bundle = [NSBundle bundleWithURL:fileURL];
|
||||
|
||||
if (!bundle) {
|
||||
NSLog(@"Failed to open extension bundle %@ (%@)!", fileURL, fileURL);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (![bundle load]) {
|
||||
NSLog(@"Failed to load extension bundle %@ (wrong CFBundleExecutable? Missing? Not signed?)!", name);
|
||||
continue;
|
||||
} else {
|
||||
NSLog(@"Loaded bundle!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
%end
|
||||
|
||||
%hook AFConnection
|
||||
- (void)_doCommand:(SAUIAddViews*)arg1 reply:(id)arg2 {
|
||||
NSLog(@"Doing: %@", arg1);
|
||||
NSLog(@"Doing: %@ with reply: %@", arg1, arg2);
|
||||
if ([arg1 respondsToSelector:@selector(views)]) {
|
||||
NSLog(@"Views: %@", arg1.views);
|
||||
}
|
||||
@ -92,15 +130,9 @@ BOOL shouldHandleRequest(NSString *text, APSession *currSession) {
|
||||
%orig;
|
||||
}
|
||||
|
||||
- (void)clearContext { %log; %orig; }
|
||||
|
||||
- (void)sendReplyCommand:(id)arg1 {
|
||||
%log;
|
||||
}
|
||||
|
||||
- (void)startRequestWithCorrectedText:(NSString*)text forSpeechIdentifier:(id)arg2 {
|
||||
NSLog(@"AP: Starting request with corrected text: %@", text);
|
||||
APSession *currSession = [APSession sessionWithRefId:nil andConnection:self];
|
||||
APSession *currSession = [APSession sessionWithConnection:self];
|
||||
if (shouldHandleRequest(text, currSession)) {
|
||||
NSLog(@"Handling!");
|
||||
} else {
|
||||
@ -121,7 +153,7 @@ BOOL shouldHandleRequest(NSString *text, APSession *currSession) {
|
||||
|
||||
- (void)startRequestWithText:(NSString*)text {
|
||||
NSLog(@"AP: Starting request with text: %@", text);
|
||||
APSession *currSession = [APSession sessionWithRefId:nil andConnection:self];
|
||||
APSession *currSession = [APSession sessionWithConnection:self];
|
||||
if (shouldHandleRequest(text, currSession)) {
|
||||
NSLog(@"Handling!");
|
||||
} else {
|
||||
@ -172,7 +204,7 @@ BOOL shouldHandleRequest(NSString *text, APSession *currSession) {
|
||||
|
||||
AFConnection *connection = MSHookIvar<AFConnection*>(self, "_connection");
|
||||
|
||||
APSession *currSession = [APSession sessionWithRefId:nil andConnection:connection];
|
||||
APSession *currSession = [APSession sessionWithConnection:connection];
|
||||
if (shouldHandleRequest(phraseBuilder, currSession)) {
|
||||
defaultHandling = NO;
|
||||
NSLog(@"Handling with plugin!");
|
||||
|
@ -1,23 +1,25 @@
|
||||
include theos/makefiles/common.mk
|
||||
|
||||
GO_EASY_ON_ME=1
|
||||
export ARCHS = armv7s arm64
|
||||
export TARGET = iphone:clang:latest:8.0
|
||||
export SDKVERSION=8.1
|
||||
export SDKVERSION=8.2
|
||||
|
||||
TWEAK_NAME = Assistant+
|
||||
|
||||
Assistant+_FILES = AssistantHooks.xm assistantpluspluginmanager/APSession.xm
|
||||
Assistant+_FILES = AssistantHooks.xm assistantpluspluginmanager/APSession.xm assistantpluspluginmanager/APPluginSnippetViewController.xm
|
||||
|
||||
Assistant+_FRAMEWORKS = Foundation UIKit CoreFoundation Accounts CoreLocation
|
||||
Assistant+_PRIVATE_FRAMEWORKS = AssistantServices SAObjects AppSupport
|
||||
Assistant+_LIBRARIES=substrate objcipc
|
||||
Assistant+_LIBRARIES=substrate
|
||||
Assistant+_CFLAGS = -fobjc-arc
|
||||
|
||||
include $(THEOS_MAKE_PATH)/tweak.mk
|
||||
|
||||
after-install::
|
||||
install.exec "killall -9 SpringBoard"
|
||||
|
||||
SUBPROJECTS += assistantpluspluginmanager
|
||||
SUBPROJECTS += aplocationdaemon
|
||||
SUBPROJECTS += assistantplusapp
|
||||
|
||||
include $(THEOS_MAKE_PATH)/aggregate.mk
|
||||
|
BIN
assistant+/_/Applications/AssistantPlusApp.app/AssistantPlusApp
Executable file
After Width: | Height: | Size: 4.6 KiB |
After Width: | Height: | Size: 7.4 KiB |
After Width: | Height: | Size: 14 KiB |
BIN
assistant+/_/Applications/AssistantPlusApp.app/Default@2x.png
Normal file
After Width: | Height: | Size: 5.7 KiB |
BIN
assistant+/_/Applications/AssistantPlusApp.app/Icon@2x.png
Normal file
After Width: | Height: | Size: 4.0 KiB |
BIN
assistant+/_/Applications/AssistantPlusApp.app/Icon@3x.png
Normal file
After Width: | Height: | Size: 5.6 KiB |
174
assistant+/_/Applications/AssistantPlusApp.app/Info.plist
Normal file
@ -0,0 +1,174 @@
|
||||
<?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>CFBundleDisplayName</key>
|
||||
<string>Assistant+</string>
|
||||
<key>UIStatusBarStyle</key>
|
||||
<string>UIStatusBarStyleDefault</string>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>en</string>
|
||||
<key>CFBundleSupportedPlatforms</key>
|
||||
<array>
|
||||
<string>iPhoneOS</string>
|
||||
</array>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>AssistantPlusApp</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.assistantplus.app</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>UIDeviceFamily</key>
|
||||
<array>
|
||||
<string>1</string>
|
||||
</array>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<false/>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>MinimumOSVersion</key>
|
||||
<string>8.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>UIStatusBarTintParameters</key>
|
||||
<dict>
|
||||
<key>UINavigationBar</key>
|
||||
<dict>
|
||||
<key>Style</key>
|
||||
<string>UIBarStyleDefault</string>
|
||||
<key>Translucent</key>
|
||||
<string>false</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>UIStatusBarHidden</key>
|
||||
<true/>
|
||||
<key>UILaunchImageFile</key>
|
||||
<string>Default.png</string>
|
||||
<key>UILaunchImages</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>UILaunchImageMinimumOSVersion</key>
|
||||
<string>8.0</string>
|
||||
<key>UILaunchImageName</key>
|
||||
<string>Default</string>
|
||||
<key>UILaunchImageOrientation</key>
|
||||
<string>Portrait</string>
|
||||
<key>UILaunchImageSize</key>
|
||||
<string>{320, 480}</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>UILaunchImageMinimumOSVersion</key>
|
||||
<string>8.0</string>
|
||||
<key>UILaunchImageName</key>
|
||||
<string>Default</string>
|
||||
<key>UILaunchImageOrientation</key>
|
||||
<string>Landscape</string>
|
||||
<key>UILaunchImageSize</key>
|
||||
<string>{320, 480}</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>UILaunchImageMinimumOSVersion</key>
|
||||
<string>8.0</string>
|
||||
<key>UILaunchImageName</key>
|
||||
<string>Default-568h</string>
|
||||
<key>UILaunchImageOrientation</key>
|
||||
<string>Portrait</string>
|
||||
<key>UILaunchImageSize</key>
|
||||
<string>{320, 568}</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>UILaunchImageMinimumOSVersion</key>
|
||||
<string>8.0</string>
|
||||
<key>UILaunchImageName</key>
|
||||
<string>Default-568h</string>
|
||||
<key>UILaunchImageOrientation</key>
|
||||
<string>Landscape</string>
|
||||
<key>UILaunchImageSize</key>
|
||||
<string>{320, 568}</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>UILaunchImageMinimumOSVersion</key>
|
||||
<string>8.0</string>
|
||||
<key>UILaunchImageName</key>
|
||||
<string>Default-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>Default-667h</string>
|
||||
<key>UILaunchImageOrientation</key>
|
||||
<string>Landscape</string>
|
||||
<key>UILaunchImageSize</key>
|
||||
<string>{375, 667}</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>UILaunchImageMinimumOSVersion</key>
|
||||
<string>8.0</string>
|
||||
<key>UILaunchImageName</key>
|
||||
<string>Default-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>Default-736h</string>
|
||||
<key>UILaunchImageOrientation</key>
|
||||
<string>Landscape</string>
|
||||
<key>UILaunchImageSize</key>
|
||||
<string>{414, 736}</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>UILaunchImageMinimumOSVersion</key>
|
||||
<string>8.0</string>
|
||||
<key>UILaunchImageName</key>
|
||||
<string>Default-Portrait</string>
|
||||
<key>UILaunchImageOrientation</key>
|
||||
<string>Portrait</string>
|
||||
<key>UILaunchImageSize</key>
|
||||
<string>{768, 1024}</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>UILaunchImageMinimumOSVersion</key>
|
||||
<string>8.0</string>
|
||||
<key>UILaunchImageName</key>
|
||||
<string>Default-Landscape</string>
|
||||
<key>UILaunchImageOrientation</key>
|
||||
<string>Landscape</string>
|
||||
<key>UILaunchImageSize</key>
|
||||
<string>{768, 1024}</string>
|
||||
</dict>
|
||||
</array>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>Icon.png</string>
|
||||
<key>CFBundleIconFiles</key>
|
||||
<array>
|
||||
<string>Icon.png</string>
|
||||
<string>Icon-72.png</string>
|
||||
<string>Icon-72@2x.png</string>
|
||||
<string>Icon@2x.png</string>
|
||||
<string>Icon-Small.png</string>
|
||||
<string>Icon-Small@2x.png</string>
|
||||
</array>
|
||||
<key>UIRequiredDeviceCapabilities</key>
|
||||
<array>
|
||||
<string>armv7</string>
|
||||
</array>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
BIN
assistant+/_/Applications/AssistantPlusApp.app/LaunchScreen.nib
generated
Normal file
@ -3,7 +3,7 @@
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>KeepAlive</key>
|
||||
<false/>
|
||||
<true/>
|
||||
<key>StandardErrorPath</key>
|
||||
<string>/dev/null</string>
|
||||
<key>RunAtLoad</key>
|
||||
|
@ -2,7 +2,6 @@
|
||||
Filter = {
|
||||
Bundles = (
|
||||
"com.apple.springboard",
|
||||
"com.apple.SiriViewService",
|
||||
);
|
||||
};
|
||||
}
|
@ -6,5 +6,5 @@ Description: Framework for Siri Extensions
|
||||
Maintainer: Zaid Elkurdi
|
||||
Author: Zaid Elkurdi
|
||||
Section: Tweaks
|
||||
Version: 0.0.1-355
|
||||
Installed-Size: 528
|
||||
Version: 0.0.1-604
|
||||
Installed-Size: 792
|
||||
|
@ -0,0 +1,41 @@
|
||||
<?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>IDESourceControlProjectFavoriteDictionaryKey</key>
|
||||
<false/>
|
||||
<key>IDESourceControlProjectIdentifier</key>
|
||||
<string>D63D2B8A-77E9-47BC-A8EA-7FF08F27ED7A</string>
|
||||
<key>IDESourceControlProjectName</key>
|
||||
<string>APLocationDaemon</string>
|
||||
<key>IDESourceControlProjectOriginsDictionary</key>
|
||||
<dict>
|
||||
<key>1DDFB15FDAC578A4447EF06D6A0EB8914E453AB8</key>
|
||||
<string>https://bitbucket.org/ZaidElkurdi/assistantplus.git</string>
|
||||
</dict>
|
||||
<key>IDESourceControlProjectPath</key>
|
||||
<string>assistant+/aplocationdaemon/APLocationDaemon.xcworkspace</string>
|
||||
<key>IDESourceControlProjectRelativeInstallPathDictionary</key>
|
||||
<dict>
|
||||
<key>1DDFB15FDAC578A4447EF06D6A0EB8914E453AB8</key>
|
||||
<string>../../..</string>
|
||||
</dict>
|
||||
<key>IDESourceControlProjectURL</key>
|
||||
<string>https://bitbucket.org/ZaidElkurdi/assistantplus.git</string>
|
||||
<key>IDESourceControlProjectVersion</key>
|
||||
<integer>111</integer>
|
||||
<key>IDESourceControlProjectWCCIdentifier</key>
|
||||
<string>1DDFB15FDAC578A4447EF06D6A0EB8914E453AB8</string>
|
||||
<key>IDESourceControlProjectWCConfigurations</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>IDESourceControlRepositoryExtensionIdentifierKey</key>
|
||||
<string>public.vcs.git</string>
|
||||
<key>IDESourceControlWCCIdentifierKey</key>
|
||||
<string>1DDFB15FDAC578A4447EF06D6A0EB8914E453AB8</string>
|
||||
<key>IDESourceControlWCCName</key>
|
||||
<string>assistantplus</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
@ -6,7 +6,6 @@
|
||||
//
|
||||
//
|
||||
#import <CoreLocation/CoreLocation.h>
|
||||
#import "libobjcipc/objcipc.h"
|
||||
#import "CPDistributedMessagingCenter.h"
|
||||
|
||||
@interface APLocationManager : NSObject <CLLocationManagerDelegate>
|
||||
|
@ -11,7 +11,7 @@ APLocationDaemon_CFLAGS = -fobjc-arc
|
||||
APLocationDaemon_FILES = main.mm APLocationManager.m
|
||||
APLocationDaemon_FRAMEWORKS = Foundation CoreLocation
|
||||
APLocationDaemon_PRIVATE_FRAMEWORKS = AppSupport
|
||||
APLocationDaemon_LIBRARIES = objcipc substrate
|
||||
APLocationDaemon_LIBRARIES = substrate
|
||||
APLocationDaemon_CODESIGN_FLAGS = -Sentitlements.xml
|
||||
|
||||
include $(THEOS_MAKE_PATH)/tool.mk
|
||||
|
@ -3,7 +3,7 @@
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>KeepAlive</key>
|
||||
<false/>
|
||||
<true/>
|
||||
<key>StandardErrorPath</key>
|
||||
<string>/dev/null</string>
|
||||
<key>RunAtLoad</key>
|
||||
|
21
assistant+/assistantplusapp/APActivatorListener.h
Normal file
@ -0,0 +1,21 @@
|
||||
//
|
||||
// APActivatorListener.h
|
||||
// AssistantPlusApp
|
||||
//
|
||||
// Created by Zaid Elkurdi on 3/22/15.
|
||||
// Copyright (c) 2015 Zaid Elkurdi. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@interface APActivatorListener : NSObject
|
||||
|
||||
@property (nonatomic, strong) NSString *name;
|
||||
@property (nonatomic, strong) NSString *trigger;
|
||||
@property (nonatomic) BOOL enabled;
|
||||
@property (nonatomic, strong) NSString *uniqueId;
|
||||
|
||||
-(id)initWithDictionary:(NSDictionary*)dict;
|
||||
- (NSDictionary*)dictionaryRepresentation;
|
||||
|
||||
@end
|
37
assistant+/assistantplusapp/APActivatorListener.m
Normal file
@ -0,0 +1,37 @@
|
||||
//
|
||||
// APActivatorListener.m
|
||||
// AssistantPlusApp
|
||||
//
|
||||
// Created by Zaid Elkurdi on 3/22/15.
|
||||
// Copyright (c) 2015 Zaid Elkurdi. All rights reserved.
|
||||
//
|
||||
|
||||
#import "APActivatorListener.h"
|
||||
|
||||
@implementation APActivatorListener
|
||||
|
||||
- (id)initWithDictionary:(NSDictionary *)dict {
|
||||
if (self = [super init]) {
|
||||
NSString *name = dict[@"name"];
|
||||
NSString *trigger = dict[@"trigger"];
|
||||
NSString *identifier = dict[@"identifier"] ? dict[@"identifier"] : [NSString stringWithFormat:@"%@", [NSDate date]];
|
||||
BOOL enabled = false;
|
||||
if (dict[@"enabled"]) {
|
||||
enabled = [dict[@"enabled"] boolValue];
|
||||
}
|
||||
self.name = name;
|
||||
self.trigger = trigger;
|
||||
self.enabled = enabled;
|
||||
self.uniqueId = identifier;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (NSDictionary*)dictionaryRepresentation {
|
||||
return @{@"name" : self.name ? self.name : @"Untitled",
|
||||
@"trigger" : self.trigger ? self.trigger : @"",
|
||||
@"enabled" : self.enabled ? [NSNumber numberWithBool:self.enabled] : [NSNumber numberWithBool:NO],
|
||||
@"identifier" : self.uniqueId };
|
||||
}
|
||||
|
||||
@end
|
20
assistant+/assistantplusapp/APCustomReply.h
Normal file
@ -0,0 +1,20 @@
|
||||
//
|
||||
// APCustomReply.h
|
||||
// AssistantPlusApp
|
||||
//
|
||||
// Created by Zaid Elkurdi on 3/25/15.
|
||||
// Copyright (c) 2015 Zaid Elkurdi. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@interface APCustomReply : NSObject
|
||||
|
||||
@property (nonatomic, strong) NSString *trigger;
|
||||
@property (nonatomic, strong) NSString *response;
|
||||
@property (nonatomic, strong) NSString *uuid;
|
||||
|
||||
-(id)initWithDictionary:(NSDictionary*)dict;
|
||||
- (NSDictionary*)dictionaryRepresentation;
|
||||
|
||||
@end
|
32
assistant+/assistantplusapp/APCustomReply.m
Normal file
@ -0,0 +1,32 @@
|
||||
//
|
||||
// APCustomReply.m
|
||||
// AssistantPlusApp
|
||||
//
|
||||
// Created by Zaid Elkurdi on 3/25/15.
|
||||
// Copyright (c) 2015 Zaid Elkurdi. All rights reserved.
|
||||
//
|
||||
|
||||
#import "APCustomReply.h"
|
||||
|
||||
@implementation APCustomReply
|
||||
|
||||
- (id)initWithDictionary:(NSDictionary *)dict {
|
||||
if (self = [super init]) {
|
||||
NSString *response = dict[@"response"];
|
||||
NSString *trigger = dict[@"trigger"];
|
||||
NSString *uuid = dict[@"uuid"];
|
||||
|
||||
self.trigger = trigger;
|
||||
self.response = response;
|
||||
self.uuid = uuid ? uuid : [NSString stringWithFormat:@"%@", [NSUUID UUID]];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (NSDictionary*)dictionaryRepresentation {
|
||||
return @{@"response" : self.response ? self.response : @"",
|
||||
@"trigger" : self.trigger ? self.trigger : @"",
|
||||
@"uuid" : self.uuid ? self.uuid : [NSString stringWithFormat:@"%@", [NSUUID UUID]]};
|
||||
}
|
||||
|
||||
@end
|
@ -0,0 +1,14 @@
|
||||
//
|
||||
// ActivatorListenersViewController.h
|
||||
// AssistantPlusApp
|
||||
//
|
||||
// Created by Zaid Elkurdi on 3/22/15.
|
||||
// Copyright (c) 2015 Zaid Elkurdi. All rights reserved.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@interface ActivatorListenersViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
|
||||
@property (strong, nonatomic) UITableView *listenersTable;
|
||||
@end
|
172
assistant+/assistantplusapp/ActivatorListenersViewController.m
Normal file
@ -0,0 +1,172 @@
|
||||
//
|
||||
// ActivatorListenersViewController.m
|
||||
// AssistantPlusApp
|
||||
//
|
||||
// Created by Zaid Elkurdi on 3/22/15.
|
||||
// Copyright (c) 2015 Zaid Elkurdi. All rights reserved.
|
||||
//
|
||||
|
||||
#import "ActivatorListenersViewController.h"
|
||||
#import "APActivatorListener.h"
|
||||
#import "ListenerDetailViewController.h"
|
||||
#import "CPDistributedMessagingCenter.h"
|
||||
|
||||
@interface ActivatorListenersViewController ()
|
||||
|
||||
@end
|
||||
|
||||
@implementation ActivatorListenersViewController {
|
||||
NSMutableArray *savedListeners;
|
||||
}
|
||||
|
||||
- (void)viewDidLoad {
|
||||
[super viewDidLoad];
|
||||
|
||||
UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addNewListener:)];
|
||||
[self.navigationItem setRightBarButtonItem:addButton];
|
||||
|
||||
self.listenersTable = [[UITableView alloc] initWithFrame:self.view.frame style:UITableViewStylePlain];
|
||||
self.listenersTable.delegate = self;
|
||||
self.listenersTable.dataSource = self;
|
||||
|
||||
UIView *msgView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 130)];
|
||||
UILabel *msgLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 0, self.view.frame.size.width-40, 60)];
|
||||
msgLabel.lineBreakMode = NSLineBreakByWordWrapping;
|
||||
msgLabel.numberOfLines = 2;
|
||||
msgLabel.text = @"You must respring your device before new listeners will appear in Activator";
|
||||
msgLabel.textAlignment = NSTextAlignmentCenter;
|
||||
msgLabel.font = [UIFont fontWithName:@"Helvetica" size:16];
|
||||
msgLabel.textColor = [UIColor darkGrayColor];
|
||||
[msgView addSubview:msgLabel];
|
||||
|
||||
UIButton *respringButton = [UIButton buttonWithType:UIButtonTypeSystem];
|
||||
respringButton.frame = CGRectMake(0, 60, self.view.frame.size.width, 40);
|
||||
[respringButton addTarget:self action:@selector(respringPressed:) forControlEvents:UIControlEventTouchUpInside];
|
||||
[respringButton setTitle:@"Respring" forState:UIControlStateNormal];
|
||||
respringButton.titleLabel.font = [UIFont systemFontOfSize:20];
|
||||
|
||||
[msgView addSubview:respringButton];
|
||||
self.listenersTable.tableFooterView = msgView;
|
||||
|
||||
UIColor *backgroundColor = [UIColor colorWithWhite:.9f alpha:1.0];
|
||||
self.listenersTable.backgroundColor = backgroundColor;
|
||||
|
||||
[self.view addSubview:self.listenersTable];
|
||||
|
||||
[self loadListenersFromFile];
|
||||
}
|
||||
|
||||
- (void)viewWillAppear:(BOOL)animated {
|
||||
[super viewWillAppear:animated];
|
||||
|
||||
if ([self.listenersTable indexPathForSelectedRow]) {
|
||||
[self.listenersTable deselectRowAtIndexPath:[self.listenersTable indexPathForSelectedRow] animated:YES];
|
||||
}
|
||||
|
||||
[self saveListenersToFile];
|
||||
[self.listenersTable reloadData];
|
||||
}
|
||||
|
||||
- (void)didReceiveMemoryWarning {
|
||||
[super didReceiveMemoryWarning];
|
||||
}
|
||||
|
||||
- (void)loadListenersFromFile {
|
||||
savedListeners = [[NSMutableArray alloc] init];
|
||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
if ([defaults objectForKey:@"activatorListeners"]) {
|
||||
NSArray *listeners = [defaults objectForKey:@"activatorListeners"];
|
||||
NSLog(@"Serialized listeners: %@", listeners);
|
||||
for (NSDictionary *currListener in listeners) {
|
||||
APActivatorListener *listener = [[APActivatorListener alloc] initWithDictionary:currListener];
|
||||
[savedListeners addObject:listener];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
- (void)saveListenersToFile {
|
||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
if (savedListeners) {
|
||||
NSMutableArray *toSave = [[NSMutableArray alloc] init];
|
||||
for (APActivatorListener *currListener in savedListeners) {
|
||||
[toSave addObject:[currListener dictionaryRepresentation]];
|
||||
}
|
||||
[defaults setObject:toSave forKey:@"activatorListeners"];
|
||||
[defaults synchronize];
|
||||
}
|
||||
|
||||
CPDistributedMessagingCenter* center = [CPDistributedMessagingCenter centerNamed:@"com.zaid.applus.springboard"];
|
||||
[center sendMessageName:@"UpdateActivatorListeners" userInfo:nil];
|
||||
}
|
||||
|
||||
#pragma mark - Button Handlers
|
||||
|
||||
- (void)addNewListener:(id)sender {
|
||||
APActivatorListener *newListener = [[APActivatorListener alloc] init];
|
||||
newListener.uniqueId = [NSString stringWithFormat:@"%@", [NSDate date]];
|
||||
[savedListeners addObject:newListener];
|
||||
NSIndexPath *newIndexPath = [NSIndexPath indexPathForItem:savedListeners.count-1 inSection:0];
|
||||
|
||||
[CATransaction begin];
|
||||
[self.listenersTable beginUpdates];
|
||||
[CATransaction setCompletionBlock: ^{
|
||||
[self tableView:self.listenersTable didSelectRowAtIndexPath:newIndexPath];
|
||||
}];
|
||||
[self.listenersTable insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
|
||||
[self.listenersTable endUpdates];
|
||||
[CATransaction commit];
|
||||
|
||||
}
|
||||
|
||||
- (void)respringPressed:(UIButton*)button {
|
||||
NSLog(@"Will respring!");
|
||||
CPDistributedMessagingCenter* center = [CPDistributedMessagingCenter centerNamed:@"com.zaid.applus.springboard"];
|
||||
[center sendMessageName:@"respringForListeners" userInfo:nil];
|
||||
}
|
||||
|
||||
#pragma mark - UITableViewDataSource
|
||||
|
||||
- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"listenerCell"];
|
||||
if (!cell) {
|
||||
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"optionsCell"];
|
||||
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
|
||||
}
|
||||
|
||||
APActivatorListener *currListener = [savedListeners objectAtIndex:indexPath.row];
|
||||
cell.textLabel.text = currListener.name.length > 0 ? currListener.name : @"Untitled Listener";
|
||||
cell.detailTextLabel.text = currListener.trigger.length > 0 ? currListener.trigger : @"No Trigger Yet";
|
||||
|
||||
return cell;
|
||||
}
|
||||
|
||||
#pragma mark - UITableViewDelegate
|
||||
|
||||
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||
APActivatorListener *selectedListener = [savedListeners objectAtIndex:indexPath.row];
|
||||
ListenerDetailViewController *detailVC = [[ListenerDetailViewController alloc] initWithListener:selectedListener];
|
||||
[self.navigationController pushViewController:detailVC animated:YES];
|
||||
}
|
||||
|
||||
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
|
||||
return savedListeners.count;
|
||||
}
|
||||
|
||||
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||
if (editingStyle == UITableViewCellEditingStyleDelete) {
|
||||
APActivatorListener *toDelete = [savedListeners objectAtIndex:indexPath.row];
|
||||
[savedListeners removeObject:toDelete];
|
||||
[self saveListenersToFile];
|
||||
[self.listenersTable reloadData];
|
||||
}
|
||||
}
|
||||
|
||||
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||
return 60;
|
||||
}
|
||||
|
||||
@end
|
16
assistant+/assistantplusapp/AppDelegate.h
Normal file
@ -0,0 +1,16 @@
|
||||
//
|
||||
// AppDelegate.h
|
||||
// AssistantPlusApp
|
||||
//
|
||||
// Created by Zaid Elkurdi on 3/22/15.
|
||||
// Copyright (c) 2015 Zaid Elkurdi. All rights reserved.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
@interface AppDelegate : UIResponder <UIApplicationDelegate>
|
||||
|
||||
@property (strong, nonatomic) UIWindow *window;
|
||||
@property (strong, nonatomic) UINavigationController *navController;
|
||||
|
||||
@end
|
30
assistant+/assistantplusapp/AppDelegate.m
Normal file
@ -0,0 +1,30 @@
|
||||
#import "MainViewController.h"
|
||||
#import "AppDelegate.h"
|
||||
|
||||
@implementation AppDelegate
|
||||
|
||||
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
|
||||
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
|
||||
self.window.backgroundColor = [UIColor whiteColor];
|
||||
|
||||
MainViewController *mainVC = [[MainViewController alloc] init];
|
||||
|
||||
self.navController = [[UINavigationController alloc] initWithRootViewController:mainVC];
|
||||
self.navController.title = @"Assistant+";
|
||||
self.navController.view.backgroundColor = [UIColor whiteColor];
|
||||
[self.window setRootViewController:self.navController];
|
||||
[self.window makeKeyAndVisible];
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (void)applicationDidBecomeActive:(UIApplication *)application {
|
||||
[[UIApplication sharedApplication] setStatusBarHidden:NO];
|
||||
}
|
||||
|
||||
- (void)applicationDidEnterBackground:(UIApplication *)application {
|
||||
[[UIApplication sharedApplication] setStatusBarHidden:YES];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
// vim:ft=objc
|
@ -0,0 +1,462 @@
|
||||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 46;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
B834F0171AC5FEEF00CF009E /* AssistantPlusAppTests.m in Sources */ = {isa = PBXBuildFile; fileRef = B834F0161AC5FEEF00CF009E /* AssistantPlusAppTests.m */; };
|
||||
B8EC46D41AC6422100ED3836 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = B88C0A7C1ABF79AA00D4D107 /* AppDelegate.m */; };
|
||||
B8EC46D51AC6422100ED3836 /* MainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B88C0A7F1ABF79AA00D4D107 /* MainViewController.m */; };
|
||||
B8EC46D61AC6422100ED3836 /* ActivatorListenersViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B88C0ACD1ABF8F7C00D4D107 /* ActivatorListenersViewController.m */; };
|
||||
B8EC46D71AC6422100ED3836 /* CustomRepliesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B88C0ADF1AC32C2000D4D107 /* CustomRepliesViewController.m */; };
|
||||
B8EC46D81AC6422100ED3836 /* CustomReplyDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B88C0AE21AC32C2A00D4D107 /* CustomReplyDetailViewController.m */; };
|
||||
B8EC46D91AC6422100ED3836 /* ListenerDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B88C0AD91AC0949D00D4D107 /* ListenerDetailViewController.m */; };
|
||||
B8EC46DA1AC6422100ED3836 /* APActivatorListener.m in Sources */ = {isa = PBXBuildFile; fileRef = B88C0AD21ABF968B00D4D107 /* APActivatorListener.m */; };
|
||||
B8EC46DB1AC6422100ED3836 /* APCustomReply.m in Sources */ = {isa = PBXBuildFile; fileRef = B88C0AE51AC32CEF00D4D107 /* APCustomReply.m */; };
|
||||
B8EC46DC1AC6422100ED3836 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = B88C0A871ABF7D6200D4D107 /* main.m */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
B834F0111AC5FEEF00CF009E /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = B88C0A561ABF794E00D4D107 /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = B834EFF71AC5FEEF00CF009E;
|
||||
remoteInfo = AssistantPlusApp;
|
||||
};
|
||||
/* End PBXContainerItemProxy section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
B834EFB91AC51E4600CF009E /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
|
||||
B834EFBB1AC51E4600CF009E /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
|
||||
B834EFF31AC5EF2C00CF009E /* LaunchScreen2.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LaunchScreen2.xib; sourceTree = SOURCE_ROOT; };
|
||||
B834EFF81AC5FEEF00CF009E /* AssistantPlusApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AssistantPlusApp.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
B834F0101AC5FEEF00CF009E /* AssistantPlusAppTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AssistantPlusAppTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
B834F0151AC5FEEF00CF009E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
B834F0161AC5FEEF00CF009E /* AssistantPlusAppTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AssistantPlusAppTests.m; sourceTree = "<group>"; };
|
||||
B88C0A7C1ABF79AA00D4D107 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = SOURCE_ROOT; };
|
||||
B88C0A7E1ABF79AA00D4D107 /* MainViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MainViewController.h; sourceTree = SOURCE_ROOT; };
|
||||
B88C0A7F1ABF79AA00D4D107 /* MainViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MainViewController.m; sourceTree = SOURCE_ROOT; };
|
||||
B88C0A841ABF79C000D4D107 /* Makefile */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = "<group>"; };
|
||||
B88C0A851ABF7AEB00D4D107 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = SOURCE_ROOT; };
|
||||
B88C0A871ABF7D6200D4D107 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = SOURCE_ROOT; };
|
||||
B88C0AB61ABF838500D4D107 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Resources/Info.plist; sourceTree = SOURCE_ROOT; };
|
||||
B88C0AC11ABF864D00D4D107 /* LaunchScreen.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LaunchScreen.xib; sourceTree = SOURCE_ROOT; };
|
||||
B88C0ACC1ABF8F7C00D4D107 /* ActivatorListenersViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ActivatorListenersViewController.h; sourceTree = SOURCE_ROOT; };
|
||||
B88C0ACD1ABF8F7C00D4D107 /* ActivatorListenersViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ActivatorListenersViewController.m; sourceTree = SOURCE_ROOT; };
|
||||
B88C0AD11ABF968B00D4D107 /* APActivatorListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APActivatorListener.h; sourceTree = SOURCE_ROOT; };
|
||||
B88C0AD21ABF968B00D4D107 /* APActivatorListener.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APActivatorListener.m; sourceTree = SOURCE_ROOT; };
|
||||
B88C0AD81AC0949D00D4D107 /* ListenerDetailViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ListenerDetailViewController.h; sourceTree = SOURCE_ROOT; };
|
||||
B88C0AD91AC0949D00D4D107 /* ListenerDetailViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ListenerDetailViewController.m; sourceTree = SOURCE_ROOT; };
|
||||
B88C0ADD1AC0A17800D4D107 /* CPDistributedMessagingCenter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPDistributedMessagingCenter.h; sourceTree = SOURCE_ROOT; };
|
||||
B88C0ADE1AC32C2000D4D107 /* CustomRepliesViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomRepliesViewController.h; sourceTree = SOURCE_ROOT; };
|
||||
B88C0ADF1AC32C2000D4D107 /* CustomRepliesViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomRepliesViewController.m; sourceTree = SOURCE_ROOT; };
|
||||
B88C0AE11AC32C2A00D4D107 /* CustomReplyDetailViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomReplyDetailViewController.h; sourceTree = SOURCE_ROOT; };
|
||||
B88C0AE21AC32C2A00D4D107 /* CustomReplyDetailViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomReplyDetailViewController.m; sourceTree = SOURCE_ROOT; };
|
||||
B88C0AE41AC32CEF00D4D107 /* APCustomReply.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APCustomReply.h; sourceTree = SOURCE_ROOT; };
|
||||
B88C0AE51AC32CEF00D4D107 /* APCustomReply.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APCustomReply.m; sourceTree = SOURCE_ROOT; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
B834EFF51AC5FEEF00CF009E /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
B834F00D1AC5FEEF00CF009E /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
B834EFB81AC51E4600CF009E /* Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
B834EFB91AC51E4600CF009E /* Foundation.framework */,
|
||||
B834EFBB1AC51E4600CF009E /* UIKit.framework */,
|
||||
);
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
B834F0131AC5FEEF00CF009E /* AssistantPlusAppTests */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
B834F0161AC5FEEF00CF009E /* AssistantPlusAppTests.m */,
|
||||
B834F0141AC5FEEF00CF009E /* Supporting Files */,
|
||||
);
|
||||
path = AssistantPlusAppTests;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
B834F0141AC5FEEF00CF009E /* Supporting Files */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
B834F0151AC5FEEF00CF009E /* Info.plist */,
|
||||
);
|
||||
name = "Supporting Files";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
B88C0A551ABF794E00D4D107 = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
B88C0A601ABF794E00D4D107 /* AssistantPlusApp */,
|
||||
B834F0131AC5FEEF00CF009E /* AssistantPlusAppTests */,
|
||||
B834EFB81AC51E4600CF009E /* Frameworks */,
|
||||
B88C0A5F1ABF794E00D4D107 /* Products */,
|
||||
B88C0A841ABF79C000D4D107 /* Makefile */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
B88C0A5F1ABF794E00D4D107 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
B834EFF81AC5FEEF00CF009E /* AssistantPlusApp.app */,
|
||||
B834F0101AC5FEEF00CF009E /* AssistantPlusAppTests.xctest */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
B88C0A601ABF794E00D4D107 /* AssistantPlusApp */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
B88C0ADD1AC0A17800D4D107 /* CPDistributedMessagingCenter.h */,
|
||||
B88C0A851ABF7AEB00D4D107 /* AppDelegate.h */,
|
||||
B88C0A7C1ABF79AA00D4D107 /* AppDelegate.m */,
|
||||
B88C0A7E1ABF79AA00D4D107 /* MainViewController.h */,
|
||||
B88C0A7F1ABF79AA00D4D107 /* MainViewController.m */,
|
||||
B834EFF31AC5EF2C00CF009E /* LaunchScreen2.xib */,
|
||||
B88C0ADE1AC32C2000D4D107 /* CustomRepliesViewController.h */,
|
||||
B88C0ADF1AC32C2000D4D107 /* CustomRepliesViewController.m */,
|
||||
B88C0AE11AC32C2A00D4D107 /* CustomReplyDetailViewController.h */,
|
||||
B88C0AE21AC32C2A00D4D107 /* CustomReplyDetailViewController.m */,
|
||||
B88C0ACC1ABF8F7C00D4D107 /* ActivatorListenersViewController.h */,
|
||||
B88C0ACD1ABF8F7C00D4D107 /* ActivatorListenersViewController.m */,
|
||||
B88C0AD81AC0949D00D4D107 /* ListenerDetailViewController.h */,
|
||||
B88C0AD91AC0949D00D4D107 /* ListenerDetailViewController.m */,
|
||||
B88C0AD11ABF968B00D4D107 /* APActivatorListener.h */,
|
||||
B88C0AD21ABF968B00D4D107 /* APActivatorListener.m */,
|
||||
B88C0AE41AC32CEF00D4D107 /* APCustomReply.h */,
|
||||
B88C0AE51AC32CEF00D4D107 /* APCustomReply.m */,
|
||||
B88C0A871ABF7D6200D4D107 /* main.m */,
|
||||
B88C0AB61ABF838500D4D107 /* Info.plist */,
|
||||
B88C0AC11ABF864D00D4D107 /* LaunchScreen.xib */,
|
||||
);
|
||||
path = AssistantPlusApp;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
B834EFF71AC5FEEF00CF009E /* AssistantPlusApp */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = B834F0181AC5FEEF00CF009E /* Build configuration list for PBXNativeTarget "AssistantPlusApp" */;
|
||||
buildPhases = (
|
||||
B834EFF41AC5FEEF00CF009E /* Sources */,
|
||||
B834EFF51AC5FEEF00CF009E /* Frameworks */,
|
||||
B834EFF61AC5FEEF00CF009E /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = AssistantPlusApp;
|
||||
productName = AssistantPlusApp;
|
||||
productReference = B834EFF81AC5FEEF00CF009E /* AssistantPlusApp.app */;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
B834F00F1AC5FEEF00CF009E /* AssistantPlusAppTests */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = B834F01B1AC5FEEF00CF009E /* Build configuration list for PBXNativeTarget "AssistantPlusAppTests" */;
|
||||
buildPhases = (
|
||||
B834F00C1AC5FEEF00CF009E /* Sources */,
|
||||
B834F00D1AC5FEEF00CF009E /* Frameworks */,
|
||||
B834F00E1AC5FEEF00CF009E /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
B834F0121AC5FEEF00CF009E /* PBXTargetDependency */,
|
||||
);
|
||||
name = AssistantPlusAppTests;
|
||||
productName = AssistantPlusAppTests;
|
||||
productReference = B834F0101AC5FEEF00CF009E /* AssistantPlusAppTests.xctest */;
|
||||
productType = "com.apple.product-type.bundle.unit-test";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
B88C0A561ABF794E00D4D107 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastUpgradeCheck = 0620;
|
||||
ORGANIZATIONNAME = "Zaid Elkurdi";
|
||||
TargetAttributes = {
|
||||
B834EFF71AC5FEEF00CF009E = {
|
||||
CreatedOnToolsVersion = 6.2;
|
||||
};
|
||||
B834F00F1AC5FEEF00CF009E = {
|
||||
CreatedOnToolsVersion = 6.2;
|
||||
TestTargetID = B834EFF71AC5FEEF00CF009E;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = B88C0A591ABF794E00D4D107 /* Build configuration list for PBXProject "AssistantPlusApp" */;
|
||||
compatibilityVersion = "Xcode 3.2";
|
||||
developmentRegion = English;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
Base,
|
||||
);
|
||||
mainGroup = B88C0A551ABF794E00D4D107;
|
||||
productRefGroup = B88C0A5F1ABF794E00D4D107 /* Products */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
B834EFF71AC5FEEF00CF009E /* AssistantPlusApp */,
|
||||
B834F00F1AC5FEEF00CF009E /* AssistantPlusAppTests */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXResourcesBuildPhase section */
|
||||
B834EFF61AC5FEEF00CF009E /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
B834F00E1AC5FEEF00CF009E /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
B834EFF41AC5FEEF00CF009E /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
B8EC46D41AC6422100ED3836 /* AppDelegate.m in Sources */,
|
||||
B8EC46D51AC6422100ED3836 /* MainViewController.m in Sources */,
|
||||
B8EC46D61AC6422100ED3836 /* ActivatorListenersViewController.m in Sources */,
|
||||
B8EC46D71AC6422100ED3836 /* CustomRepliesViewController.m in Sources */,
|
||||
B8EC46D81AC6422100ED3836 /* CustomReplyDetailViewController.m in Sources */,
|
||||
B8EC46D91AC6422100ED3836 /* ListenerDetailViewController.m in Sources */,
|
||||
B8EC46DA1AC6422100ED3836 /* APActivatorListener.m in Sources */,
|
||||
B8EC46DB1AC6422100ED3836 /* APCustomReply.m in Sources */,
|
||||
B8EC46DC1AC6422100ED3836 /* main.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
B834F00C1AC5FEEF00CF009E /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
B834F0171AC5FEEF00CF009E /* AssistantPlusAppTests.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXTargetDependency section */
|
||||
B834F0121AC5FEEF00CF009E /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = B834EFF71AC5FEEF00CF009E /* AssistantPlusApp */;
|
||||
targetProxy = B834F0111AC5FEEF00CF009E /* PBXContainerItemProxy */;
|
||||
};
|
||||
/* End PBXTargetDependency section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
B834F0191AC5FEEF00CF009E /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"$(inherited)",
|
||||
);
|
||||
INFOPLIST_FILE = AssistantPlusApp/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.2;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SDKROOT = iphoneos;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
B834F01A1AC5FEEF00CF009E /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
INFOPLIST_FILE = AssistantPlusApp/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.2;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SDKROOT = iphoneos;
|
||||
VALIDATE_PRODUCT = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
B834F01C1AC5FEEF00CF009E /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
"$(SDKROOT)/Developer/Library/Frameworks",
|
||||
"$(inherited)",
|
||||
);
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"$(inherited)",
|
||||
);
|
||||
INFOPLIST_FILE = AssistantPlusAppTests/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.2;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SDKROOT = iphoneos;
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/AssistantPlusApp.app/AssistantPlusApp";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
B834F01D1AC5FEEF00CF009E /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
"$(SDKROOT)/Developer/Library/Frameworks",
|
||||
"$(inherited)",
|
||||
);
|
||||
INFOPLIST_FILE = AssistantPlusAppTests/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.2;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SDKROOT = iphoneos;
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/AssistantPlusApp.app/AssistantPlusApp";
|
||||
VALIDATE_PRODUCT = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
B88C0A701ABF794E00D4D107 /* 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_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
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_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.10;
|
||||
MTL_ENABLE_DEBUG_INFO = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = iphoneos8.2;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
B88C0A711ABF794E00D4D107 /* 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_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
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_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.10;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
SDKROOT = iphoneos8.2;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
B834F0181AC5FEEF00CF009E /* Build configuration list for PBXNativeTarget "AssistantPlusApp" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
B834F0191AC5FEEF00CF009E /* Debug */,
|
||||
B834F01A1AC5FEEF00CF009E /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
B834F01B1AC5FEEF00CF009E /* Build configuration list for PBXNativeTarget "AssistantPlusAppTests" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
B834F01C1AC5FEEF00CF009E /* Debug */,
|
||||
B834F01D1AC5FEEF00CF009E /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
B88C0A591ABF794E00D4D107 /* Build configuration list for PBXProject "AssistantPlusApp" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
B88C0A701ABF794E00D4D107 /* Debug */,
|
||||
B88C0A711ABF794E00D4D107 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = B88C0A561ABF794E00D4D107 /* Project object */;
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "self:AssistantPlusApp.xcodeproj">
|
||||
</FileRef>
|
||||
</Workspace>
|
@ -0,0 +1,41 @@
|
||||
<?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>IDESourceControlProjectFavoriteDictionaryKey</key>
|
||||
<false/>
|
||||
<key>IDESourceControlProjectIdentifier</key>
|
||||
<string>61911282-A889-4606-947C-487DF4E4B544</string>
|
||||
<key>IDESourceControlProjectName</key>
|
||||
<string>AssistantPlusApp</string>
|
||||
<key>IDESourceControlProjectOriginsDictionary</key>
|
||||
<dict>
|
||||
<key>1DDFB15FDAC578A4447EF06D6A0EB8914E453AB8</key>
|
||||
<string>https://bitbucket.org/ZaidElkurdi/assistantplus.git</string>
|
||||
</dict>
|
||||
<key>IDESourceControlProjectPath</key>
|
||||
<string>assistant+/assistantplusapp/AssistantPlusApp.xcodeproj</string>
|
||||
<key>IDESourceControlProjectRelativeInstallPathDictionary</key>
|
||||
<dict>
|
||||
<key>1DDFB15FDAC578A4447EF06D6A0EB8914E453AB8</key>
|
||||
<string>../../../..</string>
|
||||
</dict>
|
||||
<key>IDESourceControlProjectURL</key>
|
||||
<string>https://bitbucket.org/ZaidElkurdi/assistantplus.git</string>
|
||||
<key>IDESourceControlProjectVersion</key>
|
||||
<integer>111</integer>
|
||||
<key>IDESourceControlProjectWCCIdentifier</key>
|
||||
<string>1DDFB15FDAC578A4447EF06D6A0EB8914E453AB8</string>
|
||||
<key>IDESourceControlProjectWCConfigurations</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>IDESourceControlRepositoryExtensionIdentifierKey</key>
|
||||
<string>public.vcs.git</string>
|
||||
<key>IDESourceControlWCCIdentifierKey</key>
|
||||
<string>1DDFB15FDAC578A4447EF06D6A0EB8914E453AB8</string>
|
||||
<key>IDESourceControlWCCName</key>
|
||||
<string>assistantplus</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
@ -0,0 +1,8 @@
|
||||
<?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>IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</plist>
|
@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Bucket
|
||||
type = "1"
|
||||
version = "2.0">
|
||||
</Bucket>
|
@ -0,0 +1,88 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "0620"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "B834EFF71AC5FEEF00CF009E"
|
||||
BuildableName = "AssistantPlusApp.app"
|
||||
BlueprintName = "AssistantPlusApp"
|
||||
ReferencedContainer = "container:AssistantPlusApp.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
buildConfiguration = "Debug">
|
||||
<Testables>
|
||||
</Testables>
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "B834EFF71AC5FEEF00CF009E"
|
||||
BuildableName = "AssistantPlusApp.app"
|
||||
BlueprintName = "AssistantPlusApp"
|
||||
ReferencedContainer = "container:AssistantPlusApp.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
buildConfiguration = "Debug"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
allowLocationSimulation = "YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "B834EFF71AC5FEEF00CF009E"
|
||||
BuildableName = "AssistantPlusApp.app"
|
||||
BlueprintName = "AssistantPlusApp"
|
||||
ReferencedContainer = "container:AssistantPlusApp.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
<AdditionalOptions>
|
||||
</AdditionalOptions>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
buildConfiguration = "Release"
|
||||
debugDocumentVersioning = "YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "B834EFF71AC5FEEF00CF009E"
|
||||
BuildableName = "AssistantPlusApp.app"
|
||||
BlueprintName = "AssistantPlusApp"
|
||||
ReferencedContainer = "container:AssistantPlusApp.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
@ -0,0 +1,87 @@
|
||||
<?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>SchemeUserState</key>
|
||||
<dict>
|
||||
<key>AssistantPlusApp.xcscheme</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>SuppressBuildableAutocreation</key>
|
||||
<dict>
|
||||
<key>B834EF8B1AC51C8200CF009E</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>B834EFA31AC51C8200CF009E</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>B834EFB61AC51E4600CF009E</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>B834EFD21AC51E6200CF009E</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>B834EFDC1AC51E6300CF009E</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>B834EFF71AC5FEEF00CF009E</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>B834F00F1AC5FEEF00CF009E</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>B88C0A5D1ABF794E00D4D107</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>B88C0A681ABF794E00D4D107</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>B88C0A781ABF796100D4D107</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>B88C0A8C1ABF827600D4D107</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>B88C0AA41ABF827600D4D107</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>B88C0B4C1AC39F7200D4D107</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>B88C0B641AC39F7200D4D107</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
17
assistant+/assistantplusapp/AssistantPlusApp/AppDelegate.h
Normal file
@ -0,0 +1,17 @@
|
||||
//
|
||||
// AppDelegate.h
|
||||
// AssistantPlusApp
|
||||
//
|
||||
// Created by Zaid Elkurdi on 3/27/15.
|
||||
// Copyright (c) 2015 Zaid Elkurdi. All rights reserved.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
@interface AppDelegate : UIResponder <UIApplicationDelegate>
|
||||
|
||||
@property (strong, nonatomic) UIWindow *window;
|
||||
|
||||
|
||||
@end
|
||||
|
45
assistant+/assistantplusapp/AssistantPlusApp/AppDelegate.m
Normal file
@ -0,0 +1,45 @@
|
||||
//
|
||||
// AppDelegate.m
|
||||
// AssistantPlusApp
|
||||
//
|
||||
// Created by Zaid Elkurdi on 3/27/15.
|
||||
// Copyright (c) 2015 Zaid Elkurdi. All rights reserved.
|
||||
//
|
||||
|
||||
#import "AppDelegate.h"
|
||||
|
||||
@interface AppDelegate ()
|
||||
|
||||
@end
|
||||
|
||||
@implementation AppDelegate
|
||||
|
||||
|
||||
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
|
||||
// Override point for customization after application launch.
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (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
|
@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="6214" systemVersion="14A314h" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES">
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6207"/>
|
||||
<capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
||||
<view contentMode="scaleToFill" id="iN0-l3-epB">
|
||||
<rect key="frame" x="0.0" y="0.0" width="480" height="480"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text=" Copyright (c) 2015 Zaid Elkurdi. All rights reserved." textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="8ie-xW-0ye">
|
||||
<rect key="frame" x="20" y="439" width="441" height="21"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="AssistantPlusApp" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="kId-c2-rCX">
|
||||
<rect key="frame" x="20" y="140" width="441" height="43"/>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="36"/>
|
||||
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="kId-c2-rCX" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="bottom" multiplier="1/3" constant="1" id="5cJ-9S-tgC"/>
|
||||
<constraint firstAttribute="centerX" secondItem="kId-c2-rCX" secondAttribute="centerX" id="Koa-jz-hwk"/>
|
||||
<constraint firstAttribute="bottom" secondItem="8ie-xW-0ye" secondAttribute="bottom" constant="20" id="Kzo-t9-V3l"/>
|
||||
<constraint firstItem="8ie-xW-0ye" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" symbolic="YES" id="MfP-vx-nX0"/>
|
||||
<constraint firstAttribute="centerX" secondItem="8ie-xW-0ye" secondAttribute="centerX" id="ZEH-qu-HZ9"/>
|
||||
<constraint firstItem="kId-c2-rCX" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" symbolic="YES" id="fvb-Df-36g"/>
|
||||
</constraints>
|
||||
<nil key="simulatedStatusBarMetrics"/>
|
||||
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
|
||||
<point key="canvasLocation" x="548" y="455"/>
|
||||
</view>
|
||||
</objects>
|
||||
</document>
|
@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="6211" systemVersion="14A298i" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="vXZ-lx-hvc">
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6204"/>
|
||||
</dependencies>
|
||||
<scenes>
|
||||
<!--View Controller-->
|
||||
<scene sceneID="ufC-wZ-h7g">
|
||||
<objects>
|
||||
<viewController id="vXZ-lx-hvc" customClass="ViewController" customModuleProvider="" sceneMemberID="viewController">
|
||||
<layoutGuides>
|
||||
<viewControllerLayoutGuide type="top" id="jyV-Pf-zRb"/>
|
||||
<viewControllerLayoutGuide type="bottom" id="2fi-mo-0CV"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="kh9-bI-dsS">
|
||||
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="x5A-6p-PRh" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
</scene>
|
||||
</scenes>
|
||||
</document>
|
@ -0,0 +1,38 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "29x29",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "29x29",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "40x40",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "40x40",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "60x60",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "60x60",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"extent" : "full-screen",
|
||||
"idiom" : "iphone",
|
||||
"subtype" : "736h",
|
||||
"filename" : "Default-736h@3x.png",
|
||||
"minimum-system-version" : "8.0",
|
||||
"orientation" : "portrait",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"extent" : "full-screen",
|
||||
"idiom" : "iphone",
|
||||
"subtype" : "667h",
|
||||
"filename" : "Default-667h@2x-1.png",
|
||||
"minimum-system-version" : "8.0",
|
||||
"orientation" : "portrait",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"orientation" : "portrait",
|
||||
"idiom" : "iphone",
|
||||
"extent" : "full-screen",
|
||||
"minimum-system-version" : "7.0",
|
||||
"filename" : "Default@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"extent" : "full-screen",
|
||||
"idiom" : "iphone",
|
||||
"subtype" : "retina4",
|
||||
"filename" : "Default-568h@2x.png",
|
||||
"minimum-system-version" : "7.0",
|
||||
"orientation" : "portrait",
|
||||
"scale" : "2x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 31 KiB |
After Width: | Height: | Size: 66 KiB |
After Width: | Height: | Size: 26 KiB |
40
assistant+/assistantplusapp/AssistantPlusApp/Info.plist
Normal file
@ -0,0 +1,40 @@
|
||||
<?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>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.assistantplus.$(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</string>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<true/>
|
||||
<key>UILaunchStoryboardName</key>
|
||||
<string>LaunchScreen</string>
|
||||
<key>UIMainStoryboardFile</key>
|
||||
<string>Main</string>
|
||||
<key>UIRequiredDeviceCapabilities</key>
|
||||
<array>
|
||||
<string>armv7</string>
|
||||
</array>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
@ -0,0 +1,15 @@
|
||||
//
|
||||
// ViewController.h
|
||||
// AssistantPlusApp
|
||||
//
|
||||
// Created by Zaid Elkurdi on 3/27/15.
|
||||
// Copyright (c) 2015 Zaid Elkurdi. All rights reserved.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
@interface ViewController : UIViewController
|
||||
|
||||
|
||||
@end
|
||||
|
@ -0,0 +1,27 @@
|
||||
//
|
||||
// ViewController.m
|
||||
// AssistantPlusApp
|
||||
//
|
||||
// Created by Zaid Elkurdi on 3/27/15.
|
||||
// Copyright (c) 2015 Zaid Elkurdi. All rights reserved.
|
||||
//
|
||||
|
||||
#import "ViewController.h"
|
||||
|
||||
@interface ViewController ()
|
||||
|
||||
@end
|
||||
|
||||
@implementation ViewController
|
||||
|
||||
- (void)viewDidLoad {
|
||||
[super viewDidLoad];
|
||||
// Do any additional setup after loading the view, typically from a nib.
|
||||
}
|
||||
|
||||
- (void)didReceiveMemoryWarning {
|
||||
[super didReceiveMemoryWarning];
|
||||
// Dispose of any resources that can be recreated.
|
||||
}
|
||||
|
||||
@end
|
16
assistant+/assistantplusapp/AssistantPlusApp/main.m
Normal file
@ -0,0 +1,16 @@
|
||||
//
|
||||
// main.m
|
||||
// AssistantPlusApp
|
||||
//
|
||||
// Created by Zaid Elkurdi on 3/27/15.
|
||||
// Copyright (c) 2015 Zaid Elkurdi. All rights reserved.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "AppDelegate.h"
|
||||
|
||||
int main(int argc, char * argv[]) {
|
||||
@autoreleasepool {
|
||||
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
|
||||
}
|
||||
}
|
42
assistant+/assistantplusapp/CPDistributedMessagingCenter.h
Normal file
@ -0,0 +1,42 @@
|
||||
/**
|
||||
* This header is generated by class-dump-z 0.1-11s.
|
||||
* class-dump-z is Copyright (C) 2009 by KennyTM~, licensed under GPLv3.
|
||||
*
|
||||
* Source: /System/Library/PrivateFrameworks/AppSupport.framework/AppSupport
|
||||
*/
|
||||
|
||||
#import <Foundation/NSObject.h>
|
||||
|
||||
@class NSLock, NSMutableDictionary, NSOperationQueue, NSString, NSDictionary, NSError;
|
||||
|
||||
@interface CPDistributedMessagingCenter : NSObject {
|
||||
NSString* _centerName;
|
||||
NSLock* _lock;
|
||||
unsigned _sendPort;
|
||||
CFMachPortRef _invalidationPort;
|
||||
NSOperationQueue* _asyncQueue;
|
||||
CFRunLoopSourceRef _serverSource;
|
||||
NSString* _requiredEntitlement;
|
||||
NSMutableDictionary* _callouts;
|
||||
}
|
||||
+(CPDistributedMessagingCenter*)centerNamed:(NSString*)serverName;
|
||||
-(id)_initWithServerName:(NSString*)serverName;
|
||||
// inherited: -(void)dealloc;
|
||||
-(NSString*)name;
|
||||
-(unsigned)_sendPort;
|
||||
-(void)_serverPortInvalidated;
|
||||
-(BOOL)sendMessageName:(NSString*)name userInfo:(NSDictionary*)info;
|
||||
-(NSDictionary*)sendMessageAndReceiveReplyName:(NSString*)name userInfo:(NSDictionary*)info;
|
||||
-(NSDictionary*)sendMessageAndReceiveReplyName:(NSString*)name userInfo:(NSDictionary*)info error:(NSError**)error;
|
||||
-(void)sendMessageAndReceiveReplyName:(NSString*)name userInfo:(NSDictionary*)info toTarget:(id)target selector:(SEL)selector context:(void*)context;
|
||||
-(BOOL)_sendMessage:(id)message userInfo:(id)info receiveReply:(id*)reply error:(id*)error toTarget:(id)target selector:(SEL)selector context:(void*)context;
|
||||
-(BOOL)_sendMessage:(id)message userInfoData:(id)data oolKey:(id)key oolData:(id)data4 receiveReply:(id*)reply error:(id*)error;
|
||||
-(void)runServerOnCurrentThread;
|
||||
-(void)runServerOnCurrentThreadProtectedByEntitlement:(id)entitlement;
|
||||
-(void)stopServer;
|
||||
-(void)registerForMessageName:(NSString*)messageName target:(id)target selector:(SEL)selector;
|
||||
-(void)unregisterForMessageName:(NSString*)messageName;
|
||||
-(void)_dispatchMessageNamed:(id)named userInfo:(id)info reply:(id*)reply auditToken:(id)token;
|
||||
-(id)_requiredEntitlement;
|
||||
@end
|
||||
|
15
assistant+/assistantplusapp/CustomRepliesViewController.h
Normal file
@ -0,0 +1,15 @@
|
||||
//
|
||||
// CustomRepliesViewController.h
|
||||
// AssistantPlusApp
|
||||
//
|
||||
// Created by Zaid Elkurdi on 3/25/15.
|
||||
// Copyright (c) 2015 Zaid Elkurdi. All rights reserved.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "APCustomReply.h"
|
||||
#import "CustomReplyDetailViewController.h"
|
||||
|
||||
@interface CustomRepliesViewController : UIViewController <UITableViewDataSource, UITableViewDelegate, CustomRepliesDelegate>
|
||||
@property (nonatomic, strong) UITableView *repliesTableView;
|
||||
@end
|
163
assistant+/assistantplusapp/CustomRepliesViewController.m
Normal file
@ -0,0 +1,163 @@
|
||||
//
|
||||
// CustomRepliesViewController.m
|
||||
// AssistantPlusApp
|
||||
//
|
||||
// Created by Zaid Elkurdi on 3/25/15.
|
||||
// Copyright (c) 2015 Zaid Elkurdi. All rights reserved.
|
||||
//
|
||||
|
||||
#import "CustomRepliesViewController.h"
|
||||
#import "APCustomReply.h"
|
||||
#import "CPDistributedMessagingCenter.h"
|
||||
|
||||
@interface CustomRepliesViewController ()
|
||||
|
||||
@end
|
||||
|
||||
@implementation CustomRepliesViewController {
|
||||
NSMutableArray *savedReplies;
|
||||
}
|
||||
|
||||
- (void)viewDidLoad {
|
||||
[super viewDidLoad];
|
||||
|
||||
UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addNewReply:)];
|
||||
|
||||
[self.navigationItem setRightBarButtonItem:addButton];
|
||||
|
||||
self.repliesTableView = [[UITableView alloc] initWithFrame:self.view.frame style:UITableViewStylePlain];
|
||||
self.repliesTableView.delegate = self;
|
||||
self.repliesTableView.dataSource = self;
|
||||
self.repliesTableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
|
||||
|
||||
UIColor *backgroundColor = [UIColor colorWithWhite:.9f alpha:1.0];
|
||||
self.repliesTableView.backgroundColor = backgroundColor;
|
||||
|
||||
[self.view addSubview:self.repliesTableView];
|
||||
|
||||
[self loadRepliesFromFile];
|
||||
}
|
||||
|
||||
- (void)viewWillAppear:(BOOL)animated {
|
||||
[super viewWillAppear:animated];
|
||||
|
||||
if ([self.repliesTableView indexPathForSelectedRow]) {
|
||||
[self.repliesTableView deselectRowAtIndexPath:[self.repliesTableView indexPathForSelectedRow] animated:YES];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)didReceiveMemoryWarning {
|
||||
[super didReceiveMemoryWarning];
|
||||
}
|
||||
|
||||
- (void)loadRepliesFromFile {
|
||||
savedReplies = [[NSMutableArray alloc] init];
|
||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
if ([defaults objectForKey:@"customReplies"]) {
|
||||
NSArray *replies = [defaults objectForKey:@"customReplies"];
|
||||
NSLog(@"Serialized replies: %@", replies);
|
||||
for (NSDictionary *currReply in replies) {
|
||||
APCustomReply *reply = [[APCustomReply alloc] initWithDictionary:currReply];
|
||||
[savedReplies addObject:reply];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
- (void)saveRepliesToFile {
|
||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
if (savedReplies) {
|
||||
NSMutableArray *toSave = [[NSMutableArray alloc] init];
|
||||
for (APCustomReply *currReply in savedReplies) {
|
||||
NSLog(@"Saving: %@ %@", currReply.trigger, currReply.response);
|
||||
[toSave addObject:[currReply dictionaryRepresentation]];
|
||||
}
|
||||
|
||||
[defaults setObject:toSave forKey:@"customReplies"];
|
||||
[defaults synchronize];
|
||||
|
||||
CPDistributedMessagingCenter* center = [CPDistributedMessagingCenter centerNamed:@"com.zaid.applus.springboard"];
|
||||
[center sendMessageName:@"UpdateCustomReplies" userInfo:@{@"customReplies" : toSave}];
|
||||
}
|
||||
|
||||
NSLog(@"Saved replies is: %@", savedReplies);
|
||||
}
|
||||
|
||||
#pragma mark - Reply Creation
|
||||
|
||||
- (void)addNewReply:(id)sender {
|
||||
APCustomReply *newReply = [[APCustomReply alloc] init];
|
||||
[savedReplies addObject:newReply];
|
||||
NSIndexPath *newIndexPath = [NSIndexPath indexPathForItem:savedReplies.count-1 inSection:0];
|
||||
|
||||
[CATransaction begin];
|
||||
[self.repliesTableView beginUpdates];
|
||||
[CATransaction setCompletionBlock: ^{
|
||||
[self tableView:self.repliesTableView didSelectRowAtIndexPath:newIndexPath];
|
||||
}];
|
||||
[self.repliesTableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
|
||||
[self.repliesTableView endUpdates];
|
||||
[CATransaction commit];
|
||||
|
||||
}
|
||||
|
||||
#pragma mark - UITableViewDataSource
|
||||
|
||||
- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"listenerCell"];
|
||||
if (!cell) {
|
||||
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"optionsCell"];
|
||||
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
|
||||
}
|
||||
|
||||
APCustomReply *currReply = [savedReplies objectAtIndex:indexPath.row];
|
||||
cell.textLabel.text = currReply.trigger.length > 0 ? currReply.trigger : @"No Trigger Yet";
|
||||
cell.detailTextLabel.text = currReply.response.length > 0 ? currReply.response : @"No Response Yet";
|
||||
return cell;
|
||||
}
|
||||
|
||||
#pragma mark - UITableViewDelegate
|
||||
|
||||
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||
APCustomReply *selectedReply = [savedReplies objectAtIndex:indexPath.row];
|
||||
CustomReplyDetailViewController *detailVC = [[CustomReplyDetailViewController alloc] initWithCustomReply:selectedReply];
|
||||
detailVC.delegate = self;
|
||||
[self.navigationController pushViewController:detailVC animated:YES];
|
||||
}
|
||||
|
||||
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
|
||||
return savedReplies.count;
|
||||
}
|
||||
|
||||
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||
return 60;
|
||||
}
|
||||
|
||||
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||
if (editingStyle == UITableViewCellEditingStyleDelete) {
|
||||
APCustomReply *toDelete = [savedReplies objectAtIndex:indexPath.row];
|
||||
[savedReplies removeObject:toDelete];
|
||||
[self saveRepliesToFile];
|
||||
[self.repliesTableView reloadData];
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - CustomReplyDelegate
|
||||
|
||||
- (void)customReplyDidChange:(APCustomReply *)reply {
|
||||
for (NSInteger currIndex = 0; currIndex < savedReplies.count; currIndex++) {
|
||||
APCustomReply *currReply = [savedReplies objectAtIndex:currIndex];
|
||||
if ([currReply.uuid isEqualToString:reply.uuid]) {
|
||||
[savedReplies replaceObjectAtIndex:currIndex withObject:currReply];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
[self saveRepliesToFile];
|
||||
[self.repliesTableView reloadData];
|
||||
}
|
||||
|
||||
@end
|
@ -0,0 +1,19 @@
|
||||
//
|
||||
// CustomReplyDetailViewController.h
|
||||
// AssistantPlusApp
|
||||
//
|
||||
// Created by Zaid Elkurdi on 3/25/15.
|
||||
// Copyright (c) 2015 Zaid Elkurdi. All rights reserved.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "APCustomReply.h"
|
||||
|
||||
@protocol CustomRepliesDelegate <NSObject>
|
||||
- (void)customReplyDidChange:(APCustomReply*)reply;
|
||||
@end
|
||||
|
||||
@interface CustomReplyDetailViewController : UIViewController <UITextFieldDelegate>
|
||||
- (id)initWithCustomReply:(APCustomReply*)reply;
|
||||
@property (weak) id<CustomRepliesDelegate> delegate;
|
||||
@end
|
@ -0,0 +1,81 @@
|
||||
//
|
||||
// CustomReplyDetailViewController.m
|
||||
// AssistantPlusApp
|
||||
//
|
||||
// Created by Zaid Elkurdi on 3/25/15.
|
||||
// Copyright (c) 2015 Zaid Elkurdi. All rights reserved.
|
||||
//
|
||||
|
||||
#import "CustomReplyDetailViewController.h"
|
||||
|
||||
@interface CustomReplyDetailViewController ()
|
||||
@property (strong, nonatomic) APCustomReply *currReply;
|
||||
@property (strong, nonatomic) UITextField *triggerField;
|
||||
@property (strong, nonatomic) UITextField *responseField;
|
||||
@property (nonatomic) BOOL didChange;
|
||||
@end
|
||||
|
||||
@implementation CustomReplyDetailViewController
|
||||
|
||||
- (id)initWithCustomReply:(APCustomReply*)reply {
|
||||
if (self = [super init]) {
|
||||
self.currReply = reply;
|
||||
self.didChange = NO;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)didReceiveMemoryWarning {
|
||||
[super didReceiveMemoryWarning];
|
||||
// Dispose of any resources that can be recreated.
|
||||
}
|
||||
|
||||
- (void)viewDidLoad {
|
||||
[super viewDidLoad];
|
||||
UIColor *backgroundColor = [UIColor colorWithWhite:.9f alpha:1.0];
|
||||
self.view.backgroundColor = backgroundColor;
|
||||
|
||||
UIView *triggerBackground = [[UIView alloc] initWithFrame:CGRectMake(0, 100, self.view.frame.size.width, 50)];
|
||||
triggerBackground.backgroundColor = [UIColor whiteColor];
|
||||
UILabel *triggerLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, 70, 50)];
|
||||
triggerLabel.text = @"Trigger:";
|
||||
self.triggerField = [[UITextField alloc] initWithFrame:CGRectMake(90, 2, self.view.frame.size.width-60, 50)];
|
||||
self.triggerField.text = self.currReply.trigger;
|
||||
self.triggerField.delegate = self;
|
||||
[triggerBackground addSubview:triggerLabel];
|
||||
[triggerBackground addSubview:self.triggerField];
|
||||
[self.view addSubview:triggerBackground];
|
||||
|
||||
UIView *responseBackground = [[UIView alloc] initWithFrame:CGRectMake(0, 190, self.view.frame.size.width, 50)];
|
||||
responseBackground.backgroundColor = [UIColor whiteColor];
|
||||
UILabel *responseLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, 100, 50)];
|
||||
responseLabel.text = @"Response:";
|
||||
self.responseField = [[UITextField alloc] initWithFrame:CGRectMake(120, 2, self.view.frame.size.width-60, 50)];
|
||||
self.responseField.text = self.currReply.response;
|
||||
self.responseField.delegate = self;
|
||||
[responseBackground addSubview:responseLabel];
|
||||
[responseBackground addSubview:self.responseField];
|
||||
[self.view addSubview:responseBackground];
|
||||
}
|
||||
|
||||
- (void)viewWillDisappear:(BOOL)animated {
|
||||
[super viewWillDisappear:animated];
|
||||
|
||||
if (self.didChange) {
|
||||
NSLog(@"Did change!");
|
||||
self.currReply.trigger = self.triggerField.text;
|
||||
self.currReply.response = self.responseField.text;
|
||||
[self.delegate customReplyDidChange:self.currReply];
|
||||
} else {
|
||||
NSLog(@"Didn't change!");
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - UI Delegates
|
||||
|
||||
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
|
||||
self.didChange = YES;
|
||||
return YES;
|
||||
}
|
||||
|
||||
@end
|
50
assistant+/assistantplusapp/LaunchScreen.xib
Normal file
@ -0,0 +1,50 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="6751" systemVersion="14A329f" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES">
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6736"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
||||
<view contentMode="scaleToFill" id="iN0-l3-epB">
|
||||
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="A" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="leU-h2-Rhq">
|
||||
<rect key="frame" x="208" y="84" width="185" height="175"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="185" id="0vq-9U-pF7"/>
|
||||
<constraint firstAttribute="height" constant="175" id="y9U-YZ-9s0"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="164"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="+" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="8UC-ff-B50">
|
||||
<rect key="frame" x="337" y="75" width="44" height="81"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="81" id="FLI-wz-FgU"/>
|
||||
<constraint firstAttribute="width" constant="44" id="lks-oo-mnJ"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" name="HelveticaNeue-Thin" family="Helvetica Neue" pointSize="68"/>
|
||||
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="leU-h2-Rhq" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="84" id="2jq-oj-JpT"/>
|
||||
<constraint firstItem="8UC-ff-B50" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="75" id="ecv-RR-omW"/>
|
||||
<constraint firstAttribute="centerY" secondItem="leU-h2-Rhq" secondAttribute="centerY" id="hSw-UF-9tx"/>
|
||||
<constraint firstAttribute="centerX" secondItem="leU-h2-Rhq" secondAttribute="centerX" id="sAs-Ep-aBH"/>
|
||||
<constraint firstItem="8UC-ff-B50" firstAttribute="leading" secondItem="leU-h2-Rhq" secondAttribute="trailing" constant="-56" id="tPq-wg-Z29"/>
|
||||
</constraints>
|
||||
<nil key="simulatedStatusBarMetrics"/>
|
||||
<variation key="default">
|
||||
<mask key="constraints">
|
||||
<exclude reference="hSw-UF-9tx"/>
|
||||
</mask>
|
||||
</variation>
|
||||
<point key="canvasLocation" x="266" y="311"/>
|
||||
</view>
|
||||
</objects>
|
||||
</document>
|
44
assistant+/assistantplusapp/LaunchScreen2.xib
Normal file
@ -0,0 +1,44 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="6751" systemVersion="14A329f" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES">
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6736"/>
|
||||
<capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
||||
<view contentMode="scaleToFill" id="iN0-l3-epB">
|
||||
<rect key="frame" x="0.0" y="0.0" width="480" height="480"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text=" Copyright (c) 2015 Zaid Elkurdi. All rights reserved." textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="8ie-xW-0ye">
|
||||
<rect key="frame" x="20" y="439" width="441" height="21"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
<variation key="widthClass=compact">
|
||||
<fontDescription key="fontDescription" type="system" pointSize="11"/>
|
||||
</variation>
|
||||
</label>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="AssistantPlusApp" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="kId-c2-rCX">
|
||||
<rect key="frame" x="20" y="140" width="441" height="43"/>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="36"/>
|
||||
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="kId-c2-rCX" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="bottom" multiplier="1/3" constant="1" id="Kid-kn-2rF"/>
|
||||
<constraint firstAttribute="centerX" secondItem="kId-c2-rCX" secondAttribute="centerX" id="Koa-jz-hwk"/>
|
||||
<constraint firstAttribute="bottom" secondItem="8ie-xW-0ye" secondAttribute="bottom" constant="20" id="Kzo-t9-V3l"/>
|
||||
<constraint firstItem="8ie-xW-0ye" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" symbolic="YES" id="MfP-vx-nX0"/>
|
||||
<constraint firstAttribute="centerX" secondItem="8ie-xW-0ye" secondAttribute="centerX" id="ZEH-qu-HZ9"/>
|
||||
<constraint firstItem="kId-c2-rCX" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" symbolic="YES" id="fvb-Df-36g"/>
|
||||
</constraints>
|
||||
<nil key="simulatedStatusBarMetrics"/>
|
||||
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
|
||||
<point key="canvasLocation" x="404" y="445"/>
|
||||
</view>
|
||||
</objects>
|
||||
</document>
|
14
assistant+/assistantplusapp/ListenerDetailViewController.h
Normal file
@ -0,0 +1,14 @@
|
||||
//
|
||||
// ListenerDetailViewController.h
|
||||
// AssistantPlusApp
|
||||
//
|
||||
// Created by Zaid Elkurdi on 3/23/15.
|
||||
// Copyright (c) 2015 Zaid Elkurdi. All rights reserved.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "APActivatorListener.h"
|
||||
|
||||
@interface ListenerDetailViewController : UIViewController <UITextFieldDelegate>
|
||||
- (id)initWithListener:(APActivatorListener*)listener;
|
||||
@end
|
85
assistant+/assistantplusapp/ListenerDetailViewController.m
Normal file
@ -0,0 +1,85 @@
|
||||
//
|
||||
// ListenerDetailViewController.m
|
||||
// AssistantPlusApp
|
||||
//
|
||||
// Created by Zaid Elkurdi on 3/23/15.
|
||||
// Copyright (c) 2015 Zaid Elkurdi. All rights reserved.
|
||||
//
|
||||
|
||||
#import "ListenerDetailViewController.h"
|
||||
|
||||
@interface ListenerDetailViewController ()
|
||||
@property (strong, nonatomic) APActivatorListener *currListener;
|
||||
@property (strong, nonatomic) UISwitch *enabledSwitch;
|
||||
@property (strong, nonatomic) UITextField *nameField;
|
||||
@property (strong, nonatomic) UITextField *triggerField;
|
||||
@end
|
||||
|
||||
@implementation ListenerDetailViewController
|
||||
|
||||
- (id)initWithListener:(APActivatorListener*)listener {
|
||||
if (self = [super init]) {
|
||||
self.currListener = listener;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)viewDidLoad {
|
||||
[super viewDidLoad];
|
||||
UIColor *backgroundColor = [UIColor colorWithWhite:.9f alpha:1.0];
|
||||
self.view.backgroundColor = backgroundColor;
|
||||
|
||||
UIView *switchBackground = [[UIView alloc] initWithFrame:CGRectMake(0, 100, self.view.frame.size.width, 50)];
|
||||
switchBackground.backgroundColor = [UIColor whiteColor];
|
||||
UILabel *switchLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, 80, 50)];
|
||||
switchLabel.text = @"Enabled:";
|
||||
self.enabledSwitch = [[UISwitch alloc] initWithFrame:CGRectMake(100, 9.5, 51, 31)];
|
||||
[self.enabledSwitch addTarget:self action:@selector(didToggleSwitch:) forControlEvents:UIControlEventValueChanged];
|
||||
self.enabledSwitch.on = self.currListener.enabled;
|
||||
[switchBackground addSubview:switchLabel];
|
||||
[switchBackground addSubview:self.enabledSwitch];
|
||||
[self.view addSubview:switchBackground];
|
||||
|
||||
UIView *nameBackground = [[UIView alloc] initWithFrame:CGRectMake(0, 190, self.view.frame.size.width, 50)];
|
||||
nameBackground.backgroundColor = [UIColor whiteColor];
|
||||
UILabel *nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, 60, 50)];
|
||||
nameLabel.text = @"Name:";
|
||||
self.nameField = [[UITextField alloc] initWithFrame:CGRectMake(80, 2, self.view.frame.size.width-60, 50)];
|
||||
self.nameField.text = self.currListener.name;
|
||||
self.nameField.delegate = self;
|
||||
[nameBackground addSubview:nameLabel];
|
||||
[nameBackground addSubview:self.nameField];
|
||||
[self.view addSubview:nameBackground];
|
||||
|
||||
|
||||
UIView *triggerBackground = [[UIView alloc] initWithFrame:CGRectMake(0, 280, self.view.frame.size.width, 50)];
|
||||
triggerBackground.backgroundColor = [UIColor whiteColor];
|
||||
UILabel *triggerLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, 70, 50)];
|
||||
triggerLabel.text = @"Trigger:";
|
||||
self.triggerField = [[UITextField alloc] initWithFrame:CGRectMake(90, 2, self.view.frame.size.width-60, 50)];
|
||||
self.triggerField.text = self.currListener.trigger;
|
||||
self.triggerField.delegate = self;
|
||||
[triggerBackground addSubview:triggerLabel];
|
||||
[triggerBackground addSubview:self.triggerField];
|
||||
[self.view addSubview:triggerBackground];
|
||||
}
|
||||
|
||||
#pragma mark - UI Delegates
|
||||
|
||||
- (void)didToggleSwitch:(UISwitch*)theSwitch {
|
||||
self.currListener.enabled = theSwitch.on;
|
||||
}
|
||||
|
||||
- (void)textFieldDidEndEditing:(UITextField *)textField {
|
||||
if (textField == self.triggerField) {
|
||||
self.currListener.trigger = textField.text;
|
||||
} else if (textField == self.nameField) {
|
||||
self.currListener.name = textField.text;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)didReceiveMemoryWarning {
|
||||
[super didReceiveMemoryWarning];
|
||||
}
|
||||
|
||||
@end
|
7
assistant+/assistantplusapp/MainViewController.h
Normal file
@ -0,0 +1,7 @@
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
@interface MainViewController: UIViewController <UITableViewDataSource, UITableViewDelegate>
|
||||
|
||||
@property (nonatomic, strong) UITableView *optionsTable;
|
||||
|
||||
@end
|
132
assistant+/assistantplusapp/MainViewController.m
Normal file
@ -0,0 +1,132 @@
|
||||
#import "MainViewController.h"
|
||||
#import "ActivatorListenersViewController.h"
|
||||
#import "CustomRepliesViewController.h"
|
||||
|
||||
@implementation MainViewController
|
||||
|
||||
- (void)viewDidLoad {
|
||||
[super viewDidLoad];
|
||||
self.title = @"Assistant+";
|
||||
|
||||
self.optionsTable = [[UITableView alloc] initWithFrame:self.view.frame style:UITableViewStylePlain];
|
||||
self.optionsTable.delegate = self;
|
||||
self.optionsTable.dataSource = self;
|
||||
|
||||
UIView *copyrightView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 30)];
|
||||
UILabel *copyrightLabel = [[UILabel alloc] initWithFrame:copyrightView.frame];
|
||||
copyrightLabel.text = @"© 2015 Zaid Elkurdi";
|
||||
copyrightLabel.textAlignment = NSTextAlignmentCenter;
|
||||
[copyrightView addSubview:copyrightLabel];
|
||||
self.optionsTable.tableFooterView = copyrightView;
|
||||
|
||||
UIColor *backgroundColor = [UIColor colorWithWhite:.9f alpha:1.0];
|
||||
self.optionsTable.backgroundColor = backgroundColor;
|
||||
|
||||
[self.view addSubview:self.optionsTable];
|
||||
|
||||
NSBundle *bundle = [NSBundle mainBundle];
|
||||
NSLog(@"%@", bundle);
|
||||
NSLog(@"%@", bundle.resourcePath);
|
||||
|
||||
NSURL *bundleURL = [[NSBundle mainBundle] bundleURL];
|
||||
NSArray *contents = [[NSFileManager defaultManager] contentsOfDirectoryAtURL:bundleURL
|
||||
includingPropertiesForKeys:@[]
|
||||
options:NSDirectoryEnumerationSkipsHiddenFiles
|
||||
error:nil];
|
||||
NSLog(@"contents: %@", contents);
|
||||
}
|
||||
|
||||
- (void)viewWillAppear:(BOOL)animated {
|
||||
[super viewDidAppear:animated];
|
||||
|
||||
if ([self.optionsTable indexPathForSelectedRow]) {
|
||||
[self.optionsTable deselectRowAtIndexPath:[self.optionsTable indexPathForSelectedRow] animated:YES];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - UITableViewDataSource
|
||||
|
||||
- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"optionsCell"];
|
||||
if (!cell) {
|
||||
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"optionsCell"];
|
||||
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
|
||||
}
|
||||
|
||||
NSString *cellTitle = @"";
|
||||
switch (indexPath.section) {
|
||||
case 0:
|
||||
cellTitle = @"Activator Listeners";
|
||||
break;
|
||||
case 1:
|
||||
cellTitle = @"Custom Replies";
|
||||
break;
|
||||
case 2:
|
||||
cellTitle = @"Installed Plugins";
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
cell.textLabel.text = cellTitle;
|
||||
return cell;
|
||||
}
|
||||
|
||||
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
|
||||
return 3;
|
||||
}
|
||||
|
||||
- (CGFloat)tableView:(UITableView*)tableView heightForHeaderInSection:(NSInteger)section {
|
||||
if (section == 0) {
|
||||
return 6.0;
|
||||
}
|
||||
|
||||
return 1.0;
|
||||
}
|
||||
|
||||
- (CGFloat)tableView:(UITableView*)tableView heightForFooterInSection:(NSInteger)section {
|
||||
return 5.0;
|
||||
}
|
||||
|
||||
- (UIView*)tableView:(UITableView*)tableView viewForHeaderInSection:(NSInteger)section {
|
||||
return [[UIView alloc] initWithFrame:CGRectZero];
|
||||
}
|
||||
|
||||
- (UIView*)tableView:(UITableView*)tableView viewForFooterInSection:(NSInteger)section {
|
||||
return [[UIView alloc] initWithFrame:CGRectZero];
|
||||
}
|
||||
|
||||
#pragma mark - UITableViewDelegate
|
||||
|
||||
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||
switch (indexPath.section) {
|
||||
case 0:
|
||||
[self goToNewVC:[[ActivatorListenersViewController alloc] init]];
|
||||
break;
|
||||
case 1:
|
||||
[self goToNewVC:[[CustomRepliesViewController alloc] init]];
|
||||
break;
|
||||
case 2:
|
||||
[self goToNewVC:[[ActivatorListenersViewController alloc] init]];
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
|
||||
return 1;
|
||||
}
|
||||
|
||||
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||
return 60.0f;
|
||||
}
|
||||
|
||||
#pragma mark - Navigation
|
||||
|
||||
- (void)goToNewVC:(UIViewController*)vc {
|
||||
[self.navigationController pushViewController:vc animated:YES];
|
||||
}
|
||||
|
||||
|
||||
@end
|
18
assistant+/assistantplusapp/Makefile
Normal file
@ -0,0 +1,18 @@
|
||||
include theos/makefiles/common.mk
|
||||
|
||||
export THEOS_DEVICE_IP=192.168.1.17
|
||||
|
||||
export ARCHS = armv7 arm64
|
||||
export TARGET = iphone:clang:latest:8.0
|
||||
export SDKVERSION=8.2
|
||||
|
||||
APPLICATION_NAME = AssistantPlusApp
|
||||
AssistantPlusApp_FILES = main.m AppDelegate.m MainViewController.m APActivatorListener.m ActivatorListenersViewController.m ListenerDetailViewController.m CustomReplyDetailViewController.m CustomRepliesViewController.m APCustomReply.m
|
||||
AssistantPlusApp_FRAMEWORKS = UIKit CoreGraphics QuartzCore
|
||||
AssistantPlusApp_PRIVATE_FRAMEWORKS = AppSupport
|
||||
AssistantPlusApp_CFLAGS = -fobjc-arc
|
||||
|
||||
include $(THEOS_MAKE_PATH)/application.mk
|
||||
|
||||
after-install::
|
||||
install.exec “uicache”
|
BIN
assistant+/assistantplusapp/Resources/Default-568h@2x.png
Normal file
After Width: | Height: | Size: 4.6 KiB |
BIN
assistant+/assistantplusapp/Resources/Default-667h@2x.png
Normal file
After Width: | Height: | Size: 7.4 KiB |
BIN
assistant+/assistantplusapp/Resources/Default-736h@3x.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
assistant+/assistantplusapp/Resources/Default@2x.png
Normal file
After Width: | Height: | Size: 5.7 KiB |
BIN
assistant+/assistantplusapp/Resources/Icon@2x.png
Normal file
After Width: | Height: | Size: 4.0 KiB |
BIN
assistant+/assistantplusapp/Resources/Icon@3x.png
Normal file
After Width: | Height: | Size: 5.6 KiB |
174
assistant+/assistantplusapp/Resources/Info.plist
Normal file
@ -0,0 +1,174 @@
|
||||
<?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>CFBundleDisplayName</key>
|
||||
<string>Assistant+</string>
|
||||
<key>UIStatusBarStyle</key>
|
||||
<string>UIStatusBarStyleDefault</string>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>en</string>
|
||||
<key>CFBundleSupportedPlatforms</key>
|
||||
<array>
|
||||
<string>iPhoneOS</string>
|
||||
</array>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>AssistantPlusApp</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.assistantplus.app</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>UIDeviceFamily</key>
|
||||
<array>
|
||||
<string>1</string>
|
||||
</array>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<false/>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>MinimumOSVersion</key>
|
||||
<string>8.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>UIStatusBarTintParameters</key>
|
||||
<dict>
|
||||
<key>UINavigationBar</key>
|
||||
<dict>
|
||||
<key>Style</key>
|
||||
<string>UIBarStyleDefault</string>
|
||||
<key>Translucent</key>
|
||||
<string>false</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>UIStatusBarHidden</key>
|
||||
<true/>
|
||||
<key>UILaunchImageFile</key>
|
||||
<string>Default.png</string>
|
||||
<key>UILaunchImages</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>UILaunchImageMinimumOSVersion</key>
|
||||
<string>8.0</string>
|
||||
<key>UILaunchImageName</key>
|
||||
<string>Default</string>
|
||||
<key>UILaunchImageOrientation</key>
|
||||
<string>Portrait</string>
|
||||
<key>UILaunchImageSize</key>
|
||||
<string>{320, 480}</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>UILaunchImageMinimumOSVersion</key>
|
||||
<string>8.0</string>
|
||||
<key>UILaunchImageName</key>
|
||||
<string>Default</string>
|
||||
<key>UILaunchImageOrientation</key>
|
||||
<string>Landscape</string>
|
||||
<key>UILaunchImageSize</key>
|
||||
<string>{320, 480}</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>UILaunchImageMinimumOSVersion</key>
|
||||
<string>8.0</string>
|
||||
<key>UILaunchImageName</key>
|
||||
<string>Default-568h</string>
|
||||
<key>UILaunchImageOrientation</key>
|
||||
<string>Portrait</string>
|
||||
<key>UILaunchImageSize</key>
|
||||
<string>{320, 568}</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>UILaunchImageMinimumOSVersion</key>
|
||||
<string>8.0</string>
|
||||
<key>UILaunchImageName</key>
|
||||
<string>Default-568h</string>
|
||||
<key>UILaunchImageOrientation</key>
|
||||
<string>Landscape</string>
|
||||
<key>UILaunchImageSize</key>
|
||||
<string>{320, 568}</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>UILaunchImageMinimumOSVersion</key>
|
||||
<string>8.0</string>
|
||||
<key>UILaunchImageName</key>
|
||||
<string>Default-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>Default-667h</string>
|
||||
<key>UILaunchImageOrientation</key>
|
||||
<string>Landscape</string>
|
||||
<key>UILaunchImageSize</key>
|
||||
<string>{375, 667}</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>UILaunchImageMinimumOSVersion</key>
|
||||
<string>8.0</string>
|
||||
<key>UILaunchImageName</key>
|
||||
<string>Default-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>Default-736h</string>
|
||||
<key>UILaunchImageOrientation</key>
|
||||
<string>Landscape</string>
|
||||
<key>UILaunchImageSize</key>
|
||||
<string>{414, 736}</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>UILaunchImageMinimumOSVersion</key>
|
||||
<string>8.0</string>
|
||||
<key>UILaunchImageName</key>
|
||||
<string>Default-Portrait</string>
|
||||
<key>UILaunchImageOrientation</key>
|
||||
<string>Portrait</string>
|
||||
<key>UILaunchImageSize</key>
|
||||
<string>{768, 1024}</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>UILaunchImageMinimumOSVersion</key>
|
||||
<string>8.0</string>
|
||||
<key>UILaunchImageName</key>
|
||||
<string>Default-Landscape</string>
|
||||
<key>UILaunchImageOrientation</key>
|
||||
<string>Landscape</string>
|
||||
<key>UILaunchImageSize</key>
|
||||
<string>{768, 1024}</string>
|
||||
</dict>
|
||||
</array>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>Icon.png</string>
|
||||
<key>CFBundleIconFiles</key>
|
||||
<array>
|
||||
<string>Icon.png</string>
|
||||
<string>Icon-72.png</string>
|
||||
<string>Icon-72@2x.png</string>
|
||||
<string>Icon@2x.png</string>
|
||||
<string>Icon-Small.png</string>
|
||||
<string>Icon-Small@2x.png</string>
|
||||
</array>
|
||||
<key>UIRequiredDeviceCapabilities</key>
|
||||
<array>
|
||||
<string>armv7</string>
|
||||
</array>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
BIN
assistant+/assistantplusapp/Resources/LaunchScreen.nib
generated
Normal file
BIN
assistant+/assistantplusapp/_/Applications/AssistantPlusApp.app/AssistantPlusApp
Executable file
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 31 KiB |
After Width: | Height: | Size: 31 KiB |
After Width: | Height: | Size: 66 KiB |
After Width: | Height: | Size: 66 KiB |
After Width: | Height: | Size: 27 KiB |
After Width: | Height: | Size: 27 KiB |
After Width: | Height: | Size: 71 KiB |
After Width: | Height: | Size: 71 KiB |
After Width: | Height: | Size: 27 KiB |
After Width: | Height: | Size: 27 KiB |
After Width: | Height: | Size: 72 KiB |
After Width: | Height: | Size: 72 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 4.0 KiB |