Version 1.2.0

New features:
- Get user's response after Siri speaks (example plugin included)
- assistantDismissed (called when Siri is dismissed)
This commit is contained in:
ZaidElkurdi 2015-07-12 23:09:49 -07:00
parent c484827ed3
commit add32d37d9
36 changed files with 930 additions and 30 deletions

View File

@ -1,8 +1,8 @@
//
// AssistantPlusHeaders.h
// For use with Assistant+ v1.0
// For use with Assistant+ v1.2
//
// Created by Zaid Elkurdi on 2/28/15.
// Created by Zaid Elkurdi on 7/12/15.
//
//
@ -19,6 +19,16 @@
dialogPhase: Possible values are Completion, Reflection, Summary, Error, Clarification, and Acknowledgement */
- (void)sendTextSnippet:(NSString*)text temporary:(BOOL)temporary scrollToTop:(BOOL)toTop dialogPhase:(NSString*)phase;
/* Send a simple text snippet that Siri will read and optionally get the user's response
temporary: If true then the snippet will be replaced by the next view sent to the session.
For this to function properly the dialogPhase should be "Reflection"
scrollToTop: If true the Siri UI will be scrolled down so that the new view is at the top.
dialogPhase: Possible values are Completion, Reflection, Summary, Error, Clarification, and Acknowledgement
listenAfterSpeaking: If true Siri will prompt the user for a resposne after speaking the text.
Available as of version 1.2 */
- (void)sendTextSnippet:(NSString*)text temporary:(BOOL)temporary scrollToTop:(BOOL)toTop dialogPhase:(NSString*)phase listenAfterSpeaking:(BOOL)listen;
/* Create an editable dictionary representing a text snippet. In order to send this
to the user you must add it to an NSArray and use sendAddviews: */
-(NSMutableDictionary*)createTextSnippet:(NSString*)text;
@ -84,6 +94,16 @@
all installed plugins or until one returns YES. If you've determined that your plugin should handle
the user's query then do any time-intensive tasks (such as network calls) on another thread */
-(BOOL)handleSpeech:(NSString*)text withTokens:(NSSet*)tokens withSession:(id<APSiriSession>)session;
@optional
/* If you send a text snippet and tell Siri to listen for a reply the user's response will be sent
with this method. You must implement this method in order to receive the user's response. Available
as of version 1.2 */
-(void)handleReply:(NSString*)text withTokens:(NSSet*)tokens withSession:(id<APSiriSession>)session;
/* Called when the Siri window is dismissed and the session is ended. Use this to reset your plugin
if necessary. Available as of version 1.2 */
-(void)assistantWasDismissed;
@end

View File

@ -0,0 +1,253 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
B86E66CE1ACA1E6F007C6014 /* InquisitiveSiriCommands.m in Sources */ = {isa = PBXBuildFile; fileRef = B86E66CD1ACA1E6F007C6014 /* InquisitiveSiriCommands.m */; };
B8EC47031AC768A100ED3836 /* inquisitiveSiri.m in Sources */ = {isa = PBXBuildFile; fileRef = B8EC47021AC768A100ED3836 /* inquisitiveSiri.m */; };
B8EC472C1AC779D700ED3836 /* Makefile in Sources */ = {isa = PBXBuildFile; fileRef = B8EC472B1AC779D700ED3836 /* Makefile */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
B86E66D71ACB560F007C6014 /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 7;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
B86E66CC1ACA1E6F007C6014 /* InquisitiveSiriCommands.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InquisitiveSiriCommands.h; sourceTree = "<group>"; };
B86E66CD1ACA1E6F007C6014 /* InquisitiveSiriCommands.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = InquisitiveSiriCommands.m; sourceTree = "<group>"; };
B8EC46E61AC7670700ED3836 /* libinquisitiveSiri.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libinquisitiveSiri.a; path = "/Users/Zaid/Programming/AssistantPlus/inquisitiveSiri/build/Debug-iphoneos/libinquisitiveSiri.a"; sourceTree = "<absolute>"; };
B8EC47001AC7689100ED3836 /* AssistantPlusHeaders.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AssistantPlusHeaders.h; sourceTree = "<group>"; };
B8EC47011AC768A100ED3836 /* inquisitiveSiri.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inquisitiveSiri.h; sourceTree = "<group>"; };
B8EC47021AC768A100ED3836 /* inquisitiveSiri.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = inquisitiveSiri.m; sourceTree = "<group>"; };
B8EC472B1AC779D700ED3836 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = "<group>"; };
B8EC472F1AC77DE400ED3836 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Resources/Info.plist; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
B8EC46E31AC7670700ED3836 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
B8EC46DD1AC7670700ED3836 = {
isa = PBXGroup;
children = (
B8EC46E81AC7670700ED3836 /* inquisitiveSiri */,
);
sourceTree = "<group>";
};
B8EC46E81AC7670700ED3836 /* inquisitiveSiri */ = {
isa = PBXGroup;
children = (
B8EC472F1AC77DE400ED3836 /* Info.plist */,
B8EC47001AC7689100ED3836 /* AssistantPlusHeaders.h */,
B8EC47011AC768A100ED3836 /* inquisitiveSiri.h */,
B8EC47021AC768A100ED3836 /* inquisitiveSiri.m */,
B86E66CC1ACA1E6F007C6014 /* InquisitiveSiriCommands.h */,
B86E66CD1ACA1E6F007C6014 /* InquisitiveSiriCommands.m */,
B8EC472B1AC779D700ED3836 /* Makefile */,
);
path = inquisitiveSiri;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
B8EC46E51AC7670700ED3836 /* inquisitiveSiri */ = {
isa = PBXNativeTarget;
buildConfigurationList = B8EC46FA1AC7670700ED3836 /* Build configuration list for PBXNativeTarget "inquisitiveSiri" */;
buildPhases = (
B8EC46E21AC7670700ED3836 /* Sources */,
B8EC46E31AC7670700ED3836 /* Frameworks */,
B86E66D71ACB560F007C6014 /* CopyFiles */,
);
buildRules = (
);
dependencies = (
);
name = inquisitiveSiri;
productName = spotifyPlugin;
productReference = B8EC46E61AC7670700ED3836 /* libinquisitiveSiri.a */;
productType = "com.apple.product-type.library.static";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
B8EC46DE1AC7670700ED3836 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0620;
ORGANIZATIONNAME = "Zaid Elkurdi";
TargetAttributes = {
B8EC46E51AC7670700ED3836 = {
CreatedOnToolsVersion = 6.2;
};
};
};
buildConfigurationList = B8EC46E11AC7670700ED3836 /* Build configuration list for PBXProject "inquisitiveSiri" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
en,
);
mainGroup = B8EC46DD1AC7670700ED3836;
productRefGroup = B8EC46DD1AC7670700ED3836;
projectDirPath = "";
projectRoot = "";
targets = (
B8EC46E51AC7670700ED3836 /* inquisitiveSiri */,
);
};
/* End PBXProject section */
/* Begin PBXSourcesBuildPhase section */
B8EC46E21AC7670700ED3836 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
B8EC47031AC768A100ED3836 /* inquisitiveSiri.m in Sources */,
B8EC472C1AC779D700ED3836 /* Makefile in Sources */,
B86E66CE1ACA1E6F007C6014 /* InquisitiveSiriCommands.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
B8EC46F81AC7670700ED3836 /* 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;
IPHONEOS_DEPLOYMENT_TARGET = 8.2;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
};
name = Debug;
};
B8EC46F91AC7670700ED3836 /* 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;
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;
IPHONEOS_DEPLOYMENT_TARGET = 8.2;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
VALIDATE_PRODUCT = YES;
};
name = Release;
};
B8EC46FB1AC7670700ED3836 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_IDENTITY = "iPhone Developer: Zaid Elkurdi (4W5YEE5275)";
OTHER_LDFLAGS = "-ObjC";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
};
name = Debug;
};
B8EC46FC1AC7670700ED3836 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_IDENTITY = "iPhone Developer: Zaid Elkurdi (4W5YEE5275)";
OTHER_LDFLAGS = "-ObjC";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
B8EC46E11AC7670700ED3836 /* Build configuration list for PBXProject "inquisitiveSiri" */ = {
isa = XCConfigurationList;
buildConfigurations = (
B8EC46F81AC7670700ED3836 /* Debug */,
B8EC46F91AC7670700ED3836 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
B8EC46FA1AC7670700ED3836 /* Build configuration list for PBXNativeTarget "inquisitiveSiri" */ = {
isa = XCConfigurationList;
buildConfigurations = (
B8EC46FB1AC7670700ED3836 /* Debug */,
B8EC46FC1AC7670700ED3836 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = B8EC46DE1AC7670700ED3836 /* Project object */;
}

View File

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

View File

@ -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>55EA12C3-373C-4723-888E-2F017FAD2772</string>
<key>IDESourceControlProjectName</key>
<string>inquisitiveSiri</string>
<key>IDESourceControlProjectOriginsDictionary</key>
<dict>
<key>ECF8262764CCDC8E7C3DE4F3497F357D49271248</key>
<string>github.com:ZaidElkurdi/AssistantPlus.git</string>
</dict>
<key>IDESourceControlProjectPath</key>
<string>inquisitiveSiri/inquisitiveSiri.xcodeproj</string>
<key>IDESourceControlProjectRelativeInstallPathDictionary</key>
<dict>
<key>ECF8262764CCDC8E7C3DE4F3497F357D49271248</key>
<string>../../..</string>
</dict>
<key>IDESourceControlProjectURL</key>
<string>github.com:ZaidElkurdi/AssistantPlus.git</string>
<key>IDESourceControlProjectVersion</key>
<integer>111</integer>
<key>IDESourceControlProjectWCCIdentifier</key>
<string>ECF8262764CCDC8E7C3DE4F3497F357D49271248</string>
<key>IDESourceControlProjectWCConfigurations</key>
<array>
<dict>
<key>IDESourceControlRepositoryExtensionIdentifierKey</key>
<string>public.vcs.git</string>
<key>IDESourceControlWCCIdentifierKey</key>
<string>ECF8262764CCDC8E7C3DE4F3497F357D49271248</string>
<key>IDESourceControlWCCName</key>
<string>AssistantPlus</string>
</dict>
</array>
</dict>
</plist>

View File

@ -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>2C48AAC2-C4AD-4E57-BCFA-D2A247CAB23D</string>
<key>IDESourceControlProjectName</key>
<string>spotifyPlugin</string>
<key>IDESourceControlProjectOriginsDictionary</key>
<dict>
<key>1DDFB15FDAC578A4447EF06D6A0EB8914E453AB8</key>
<string>https://bitbucket.org/ZaidElkurdi/assistantplus.git</string>
</dict>
<key>IDESourceControlProjectPath</key>
<string>spotifyPlugin/spotifyPlugin.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>

View File

@ -0,0 +1,10 @@
<?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>HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges</key>
<true/>
<key>SnapshotAutomaticallyBeforeSignificantChanges</key>
<false/>
</dict>
</plist>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<Bucket
type = "1"
version = "2.0">
</Bucket>

View File

@ -0,0 +1,110 @@
<?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 = "B8EC46E51AC7670700ED3836"
BuildableName = "libspotifyPlugin.a"
BlueprintName = "spotifyPlugin"
ReferencedContainer = "container:spotifyPlugin.xcodeproj">
</BuildableReference>
</BuildActionEntry>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "NO"
buildForArchiving = "NO"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "B8EC46F01AC7670700ED3836"
BuildableName = "spotifyPluginTests.xctest"
BlueprintName = "spotifyPluginTests"
ReferencedContainer = "container:spotifyPlugin.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
buildConfiguration = "Debug">
<Testables>
<TestableReference
skipped = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "B8EC46F01AC7670700ED3836"
BuildableName = "spotifyPluginTests.xctest"
BlueprintName = "spotifyPluginTests"
ReferencedContainer = "container:spotifyPlugin.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "B8EC46E51AC7670700ED3836"
BuildableName = "libspotifyPlugin.a"
BlueprintName = "spotifyPlugin"
ReferencedContainer = "container:spotifyPlugin.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">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "B8EC46E51AC7670700ED3836"
BuildableName = "libspotifyPlugin.a"
BlueprintName = "spotifyPlugin"
ReferencedContainer = "container:spotifyPlugin.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
buildConfiguration = "Release"
debugDocumentVersioning = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "B8EC46E51AC7670700ED3836"
BuildableName = "libspotifyPlugin.a"
BlueprintName = "spotifyPlugin"
ReferencedContainer = "container:spotifyPlugin.xcodeproj">
</BuildableReference>
</MacroExpansion>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View File

@ -0,0 +1,27 @@
<?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>spotifyPlugin.xcscheme</key>
<dict>
<key>orderHint</key>
<integer>0</integer>
</dict>
</dict>
<key>SuppressBuildableAutocreation</key>
<dict>
<key>B8EC46E51AC7670700ED3836</key>
<dict>
<key>primary</key>
<true/>
</dict>
<key>B8EC46F01AC7670700ED3836</key>
<dict>
<key>primary</key>
<true/>
</dict>
</dict>
</dict>
</plist>

View File

@ -0,0 +1 @@
./com.assistantplus.inquisitiveSiri_1.0.0-9_iphoneos-arm.deb

View File

@ -0,0 +1,119 @@
//
// AssistantPlusHeaders.h
// For use with Assistant+ v1.2
//
// Created by Zaid Elkurdi on 7/12/15.
//
//
#ifndef _AssistantPlusHeaders_h
#define _AssistantPlusHeaders_h
// Represents the current Siri session
@protocol APSiriSession <NSObject>
/* Send a simple text snippet that Siri will read.
temporary: If true then the snippet will be replaced by the next view sent to the session.
For this to function properly the dialogPhase should be "Reflection"
scrollToTop: If true the Siri UI will be scrolled down so that the new view is at the top.
dialogPhase: Possible values are Completion, Reflection, Summary, Error, Clarification, and Acknowledgement */
- (void)sendTextSnippet:(NSString*)text temporary:(BOOL)temporary scrollToTop:(BOOL)toTop dialogPhase:(NSString*)phase;
/* Send a simple text snippet that Siri will read and optionally get the user's response
temporary: If true then the snippet will be replaced by the next view sent to the session.
For this to function properly the dialogPhase should be "Reflection"
scrollToTop: If true the Siri UI will be scrolled down so that the new view is at the top.
dialogPhase: Possible values are Completion, Reflection, Summary, Error, Clarification, and Acknowledgement
listenAfterSpeaking: If true Siri will prompt the user for a resposne after speaking the text.
Available as of version 1.2 */
- (void)sendTextSnippet:(NSString*)text temporary:(BOOL)temporary scrollToTop:(BOOL)toTop dialogPhase:(NSString*)phase listenAfterSpeaking:(BOOL)listen;
/* Create an editable dictionary representing a text snippet. In order to send this
to the user you must add it to an NSArray and use sendAddviews: */
-(NSMutableDictionary*)createTextSnippet:(NSString*)text;
/* Send several views to the user at once */
- (void)sendAddViews:(NSArray*)views;
/* Send several views to the user with control over the parameters */
- (void)sendAddViews:(NSArray*)views dialogPhase:(NSString*)dialogPhase scrollToTop:(BOOL)toTop temporary:(BOOL)temporary;
/* Create and immediately send a custom snippet with the specified properties. The snippet must
have been registered with the plugin manager */
- (void)sendCustomSnippet:(NSString*)snippetClass withProperties:(NSDictionary*)props;
/* Create an editable dictionary representing a custom snippet. In order to send this
to the user you must add it to an NSArray and use sendAddViews: */
-(NSMutableDictionary*)createSnippet:(NSString*)snippetClass properties:(NSDictionary*)props;
/* Tell the session that you're done with this request and that it can end. You must do
this or Siri will timeout and display an error message.*/
- (void)sendRequestCompleted;
/* Retrieve the user's current location and then execute the code in the completion block
with the location info. The location info will be structured as follows:
NSDictionary *dict = @{@"latitude" : NSNumber,
@"longitude" : NSNumber,
@"horizontalAccuracy" : NSNumber,
@"verticalAccuracy" : NSNumber,
@"speed" : NSNumber,
@"course" : NSNumber,
@"timestamp" : NSDate} */
- (void)getCurrentLocationWithCompletion:(void (^)(NSDictionary *locationInfo))completion;
@end
/* None of your classes should need to conform to this protocol, but you will use it to register
your command and snippet classes when your principal class's (the one that conforms to APPlugin)
initWithSystem: method is called */
@protocol APPluginManager <NSObject>
@required
-(BOOL)registerCommand:(Class)commandClass;
-(BOOL)registerSnippet:(Class)snippetClass;
@end
/* Your custom snippet class (which should always be a subclass of UIViewController)
will need to conform to this protocol */
@protocol APPluginSnippet <NSObject>
@optional
/* If you use APSiriSession's sendCustomSnippet:withProperties: and want to be able
to access the properties in your snippet then you must implement this method. If you
don't implement this method then the snippet will be created with [yourSnippet init] */
-(id)initWithProperties:(NSDictionary*)props;
@end
/* This is where you will handle the user's query and determine if your plugin
should handle it. This "command" class should essentially be the brain of your plugin
and determine which snippet/s to show or action/s to take */
@protocol APPluginCommand <NSObject>
@required
/* You should try to make this method run as quickly as possible, as this method will be called on
all installed plugins or until one returns YES. If you've determined that your plugin should handle
the user's query then do any time-intensive tasks (such as network calls) on another thread */
-(BOOL)handleSpeech:(NSString*)text withTokens:(NSSet*)tokens withSession:(id<APSiriSession>)session;
@optional
/* If you send a text snippet and tell Siri to listen for a reply the user's response will be sent
with this method. You must implement this method in order to receive the user's response. Available
as of version 1.2 */
-(void)handleReply:(NSString*)text withTokens:(NSSet*)tokens withSession:(id<APSiriSession>)session;
/* Called when the Siri window is dismissed and the session is ended. Use this to reset your plugin
if necessary. Available as of version 1.2 */
-(void)assistantWasDismissed;
@end
/* Your principal/"main" class should conform to this protocol. */
@protocol APPlugin <NSObject>
@required
/* When your plugin is initialized the plugin manager will call this method. This is
when you should register you command/s and snippet/s using the system's registerCommand: and
registerSnippet: methods, repsectively. */
-(id)initWithPluginManager:(id<APPluginManager>)manager;
@end
#endif

View File

@ -0,0 +1,16 @@
//
// InquisitiveSiriCommands.h
// inquisitiveSiri
//
// Created by Zaid Elkurdi on 7/12/15.
// Copyright (c) 2015 Zaid Elkurdi. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "AssistantPlusHeaders.h"
@interface InquisitiveSiriCommands : NSObject <APPluginCommand>
- (BOOL)handleSpeech:(NSString *)text withTokens:(NSSet *)tokens withSession:(id<APSiriSession>)session;
@end

View File

@ -0,0 +1,62 @@
//
// InquisitiveSiriCommands.m
// inquisitiveSiri
//
// Created by Zaid Elkurdi on 7/12/15.
// Copyright (c) 2015 Zaid Elkurdi. All rights reserved.
//
#import "InquisitiveSiriCommands.h"
@interface InquisitiveSiriCommands ()
@property (strong, nonatomic) NSMutableArray *possibleQuestions;
@property (strong, nonatomic) NSMutableDictionary *userResponses;
@end
@implementation InquisitiveSiriCommands
- (void)initialSetup {
self.possibleQuestions = [NSMutableArray arrayWithObjects:@"color", @"car", @"country", @"animal", nil];
self.userResponses = [NSMutableDictionary dictionary];
}
- (BOOL)handleSpeech:(NSString *)text withTokens:(NSSet *)tokens withSession:(id<APSiriSession>)session {
if ([text isEqualToString:@"let's get acquainted"]) {
if (!self.possibleQuestions) {
[self initialSetup];
}
NSString *firstQuestion = [NSString stringWithFormat:@"Okay, what's your favorite %@?", [self.possibleQuestions lastObject]];
[session sendTextSnippet:firstQuestion temporary:NO scrollToTop:YES dialogPhase:@"Clarification" listenAfterSpeaking:YES];
return YES;
}
return NO;
}
-(void)handleReply:(NSString*)text withTokens:(NSSet*)tokens withSession:(id<APSiriSession>)session {
if (!text) {
NSString *errorMsg = [NSString stringWithFormat:@"Sorry, I didn't get that, try again."];
[session sendTextSnippet:errorMsg temporary:NO scrollToTop:YES dialogPhase:@"Clarification" listenAfterSpeaking:YES];
} else {
[self.userResponses setObject:text forKey:[self.possibleQuestions lastObject]];
[self.possibleQuestions removeLastObject];
}
if (self.possibleQuestions.count == 0) {
NSMutableString *finalResponse = [NSMutableString string];
[self.userResponses enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSString *value, BOOL* stop) {
[finalResponse appendFormat:@"Your favorite %@ is %@, ", key, value];
}];
[session sendTextSnippet:finalResponse temporary:NO scrollToTop:YES dialogPhase:@"Completion"];
[session sendRequestCompleted];
} else {
NSString *nextQuestion = [NSString stringWithFormat:@"Cool, what's your favorite %@?", [self.possibleQuestions lastObject]];
[session sendTextSnippet:nextQuestion temporary:NO scrollToTop:YES dialogPhase:@"Clarification" listenAfterSpeaking:YES];
}
}
-(void)assistantWasDismissed {
self.userResponses = nil;
self.possibleQuestions = nil;
}
@end

View File

@ -0,0 +1,17 @@
include theos/makefiles/common.mk
export ARCHS = armv7 arm64
export TARGET = iphone:clang:latest:8.4
export SDKVERSION=8.4
BUNDLE_NAME = inquisitiveSiri
inquisitiveSiri_BUNDLE_EXTENSION = assistantPlugin
inquisitiveSiri_FILES = $(wildcard *.m)
inquisitiveSiri_INSTALL_PATH = /Library/AssistantPlusPlugins/
inquisitiveSiri_CFLAGS = -fobjc-arc
inquisitiveSiri_FRAMEWORKS = Foundation
include $(THEOS_MAKE_PATH)/bundle.mk
after-install::
install.exec "killall -9 SpringBoard"

View File

@ -3,19 +3,19 @@
<plist version="1.0">
<dict>
<key>APPluginName</key>
<string>Spotify Control</string>
<string>Inquisitive Siri</string>
<key>APPluginAuthor</key>
<string>Zaid Elkurdi</string>
<key>CFBundleName</key>
<string>spotifySiri</string>
<string>inquisitiveSiri</string>
<key>CFBundleIdentifier</key>
<string>com.assistantplus.spotifySiri</string>
<string>com.assistantplus.inquisitiveSiri</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>CFBundleDisplayName</key>
<string>SpotifySiri</string>
<string>InquisitiveSiri</string>
<key>MinimumOSVersion</key>
<string>5.0</string>
<key>CFBundleSupportedPlatforms</key>
@ -27,7 +27,7 @@
<key>CFBundleSignature</key>
<string>????</string>
<key>AppBundleID</key>
<string>com.assistantplus.spotifySiri</string>
<string>com.assistantplus.inquisitiveSiri</string>
<key>UIDeviceFamily</key>
<array>
<integer>1</integer>
@ -36,6 +36,6 @@
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>NSPrincipalClass</key>
<string>spotifySiri</string>
<string>inquisitiveSiri</string>
</dict>
</plist>

View File

@ -0,0 +1,10 @@
Package: com.assistantplus.inquisitiveSiri
Name: inquisitiveSiri
Depends: mobilesubstrate, org.thebigboss.assistantplus
Architecture: iphoneos-arm
Description: Let Siri get to know you
Maintainer: Zaid Elkurdi
Author: Zaid Elkurdi
Section: Tweaks
Version: 1.0.0-9
Installed-Size: 136

View File

@ -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>APPluginName</key>
<string>Inquisitive Siri</string>
<key>APPluginAuthor</key>
<string>Zaid Elkurdi</string>
<key>CFBundleName</key>
<string>inquisitiveSiri</string>
<key>CFBundleIdentifier</key>
<string>com.assistantplus.inquisitiveSiri</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>CFBundleDisplayName</key>
<string>InquisitiveSiri</string>
<key>MinimumOSVersion</key>
<string>5.0</string>
<key>CFBundleSupportedPlatforms</key>
<array>
<string>iPhoneOS</string>
</array>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>AppBundleID</key>
<string>com.assistantplus.inquisitiveSiri</string>
<key>UIDeviceFamily</key>
<array>
<integer>1</integer>
<integer>2</integer>
</array>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>NSPrincipalClass</key>
<string>inquisitiveSiri</string>
</dict>
</plist>

View File

@ -0,0 +1,9 @@
Package: com.assistantplus.inquisitiveSiri
Name: inquisitiveSiri
Depends: mobilesubstrate, org.thebigboss.assistantplus
Version: 1.0.0
Architecture: iphoneos-arm
Description: Let Siri get to know you
Maintainer: Zaid Elkurdi
Author: Zaid Elkurdi
Section: Tweaks

View File

@ -0,0 +1,14 @@
//
// inquisitiveSiri.h
// inquisitiveSiri
//
// Created by Zaid Elkurdi on 7/12/15.
// Copyright (c) 2015 Zaid Elkurdi. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "AssistantPlusHeaders.h"
@interface inquisitiveSiri : NSObject <APPlugin>
-(id)initWithPluginManager:(id<APPluginManager>)manager;
@end

View File

@ -0,0 +1,22 @@
//
// inquisitiveSiri.m
// inquisitiveSiri
//
// Created by Zaid Elkurdi on 7/12/15.
// Copyright (c) 2015 Zaid Elkurdi. All rights reserved.
//
#import "inquisitiveSiri.h"
#import "InquisitiveSiriCommands.h"
@implementation inquisitiveSiri
-(id)initWithPluginManager:(id<APPluginManager>)manager {
if (self = [super init]) {
//Register the command with the plugin manager
[manager registerCommand:[InquisitiveSiriCommands class]];
}
return self;
}
@end

View File

@ -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>APPluginName</key>
<string>Inquisitive Siri</string>
<key>APPluginAuthor</key>
<string>Zaid Elkurdi</string>
<key>CFBundleName</key>
<string>inquisitiveSiri</string>
<key>CFBundleIdentifier</key>
<string>com.assistantplus.inquisitiveSiri</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>CFBundleDisplayName</key>
<string>InquisitiveSiri</string>
<key>MinimumOSVersion</key>
<string>5.0</string>
<key>CFBundleSupportedPlatforms</key>
<array>
<string>iPhoneOS</string>
</array>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>AppBundleID</key>
<string>com.assistantplus.inquisitiveSiri</string>
<key>UIDeviceFamily</key>
<array>
<integer>1</integer>
<integer>2</integer>
</array>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>NSPrincipalClass</key>
<string>inquisitiveSiri</string>
</dict>
</plist>

View File

@ -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>APPluginName</key>
<string>Inquisitive Siri</string>
<key>APPluginAuthor</key>
<string>Zaid Elkurdi</string>
<key>CFBundleName</key>
<string>inquisitiveSiri</string>
<key>CFBundleIdentifier</key>
<string>com.assistantplus.inquisitiveSiri</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>CFBundleDisplayName</key>
<string>InquisitiveSiri</string>
<key>MinimumOSVersion</key>
<string>5.0</string>
<key>CFBundleSupportedPlatforms</key>
<array>
<string>iPhoneOS</string>
</array>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>AppBundleID</key>
<string>com.assistantplus.inquisitiveSiri</string>
<key>UIDeviceFamily</key>
<array>
<integer>1</integer>
<integer>2</integer>
</array>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>NSPrincipalClass</key>
<string>inquisitiveSiri</string>
</dict>
</plist>

View File

@ -0,0 +1 @@
/opt/theos

View File

@ -1,10 +0,0 @@
Package: com.assistantplus.spotifycontrols
Name: spotifySiriControls
Depends: mobilesubstrate, com.zaid.assistant+
Architecture: iphoneos-arm
Description: Control Spotify using Siri! Currently spotifySiriControls supports searching for tracks, artists, and albums using commands like, “Search for Drake on Spotify”, “Search Taylor Swift on Spotify”, “Play Books by Swiss Lips on Spotify”, and “Play Paris on Spotify”.
Maintainer: Zaid Elkurdi
Author: Zaid Elkurdi
Section: Tweaks
Version: 1.0.0-1
Installed-Size: 616