Difference between revisions of "Siri"

From The iPhone Wiki
Jump to: navigation, search
m
(Sectioned.)
 
(5 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
'''Siri''' is a voice assistant feature found in the [[iPad (3rd generation)]], [[iPad mini]], [[N94AP|iPhone 4S]], [[iPod touch (5th generation)]] and their successors. '''Siri''' has been present since iOS 5 on the iPhone 4S.
 
'''Siri''' is a voice assistant feature found in the [[iPad (3rd generation)]], [[iPad mini]], [[N94AP|iPhone 4S]], [[iPod touch (5th generation)]] and their successors. '''Siri''' has been present since iOS 5 on the iPhone 4S.
   
A legal port to older devices has been completed by [https://twitter.com/stroughtonsmith @stroughtonsmith] with the help of [[User:Chpwn|chpwn]], and is available in Cydia as [cydia://package/com.chpwn.spire Spire]. Spire is only compatible with iOS 5.0.1. There are other ports which are compatible with more iOS versions (iOS 5.1.1 through 7.x), but most of them are unstable, slow, incomplete, or a scam. However, ports are not needed as of iOS 8; all compatible devices support Siri.
+
A legal port to older devices has been completed by [https://twitter.com/stroughtonsmith @stroughtonsmith] with the help of [[User:Chpwn|chpwn]], and is available in Cydia as [cydia://package/com.chpwn.spire Spire]. Spire is only compatible with iOS 5.0.1. There are other ports which are compatible with more iOS versions (iOS 5.1.1 through 7.x), but not all of them are reliable. Ports are not needed as of iOS 8 though as all compatible devices support Siri.
   
 
From iOS 6, Siri is supported by [[iPad (3rd generation)]] and newer, [[N94AP|iPhone 4S]] and newer, [[iPod touch (5th generation)]] and newer, and with all generations of [[List of iPad minis|iPad mini]].
 
From iOS 6, Siri is supported by [[iPad (3rd generation)]] and newer, [[N94AP|iPhone 4S]] and newer, [[iPod touch (5th generation)]] and newer, and with all generations of [[List of iPad minis|iPad mini]].
   
== Filesystems ==
+
== Filesystem ==
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
Line 11: Line 11:
 
! rowspan="2" | Type
 
! rowspan="2" | Type
 
! rowspan="2" | Comments
 
! rowspan="2" | Comments
! colspan="5" | iOS Version
+
! colspan="7" | iOS Version
 
|-
 
|-
 
! 5.x
 
! 5.x
Line 18: Line 18:
 
! 8.x
 
! 8.x
 
! 9.x
 
! 9.x
  +
! 10.x
  +
! 11.x
 
|-
 
|-
 
| /Applications/Preferences.app/*.lproj/*Assistant.strings
 
| /Applications/Preferences.app/*.lproj/*Assistant.strings
Line 23: Line 25:
 
| Localization for Siri preferences.
 
| Localization for Siri preferences.
 
| colspan="4" {{yes}}
 
| colspan="4" {{yes}}
| {{no}}
+
| colspan="3" {{no}}
 
|-
 
|-
 
| /Applications/Preferences.app/5.0~General Assistant.plist
 
| /Applications/Preferences.app/5.0~General Assistant.plist
Line 29: Line 31:
 
| Siri settings injection file.
 
| Siri settings injection file.
 
| colspan="2" {{yes}}
 
| colspan="2" {{yes}}
| colspan="3" {{no}}
+
| colspan="5" {{no}}
 
|-
 
|-
 
| /Applications/Preferences.app/5.0~Passcode Lock Assistant.plist
 
| /Applications/Preferences.app/5.0~Passcode Lock Assistant.plist
Line 35: Line 37:
 
| Siri Lockscreen settings injection file.
 
| Siri Lockscreen settings injection file.
 
| colspan="4" {{yes}}
 
| colspan="4" {{yes}}
| {{no}}
+
| colspan="3" {{no}}
 
|-
 
|-
 
| /Applications/Preferences.app/5.0~Restriction-Assistant.plist
 
| /Applications/Preferences.app/5.0~Restriction-Assistant.plist
Line 41: Line 43:
 
| Siri Restriction settings injection file.
 
| Siri Restriction settings injection file.
 
| colspan="4" {{yes}}
 
| colspan="4" {{yes}}
| {{no}}
+
| colspan="3" {{no}}
 
|-
 
|-
 
| /Applications/SiriViewService.app
 
| /Applications/SiriViewService.app
Line 47: Line 49:
 
| Siri interface.
 
| Siri interface.
 
| colspan="2" {{no}}
 
| colspan="2" {{no}}
  +
| colspan="2" {{yes}}
  +
| colspan="3" {{no}}
  +
|-
  +
| /Applications/Siri.app
  +
| Application
  +
| Siri interface.
  +
| colspan="4" {{no}}
 
| colspan="3" {{yes}}
 
| colspan="3" {{yes}}
 
|-
 
|-
Line 54: Line 63:
 
| colspan="2" {{yes}}
 
| colspan="2" {{yes}}
 
| colspan="2" {{no}}
 
| colspan="2" {{no}}
| {{yes}}
+
| colspan="3" {{yes}}
 
|-
 
|-
 
| /System/Library/AccessibilityBundles/Assistant-SBPlugin.axbundle
 
| /System/Library/AccessibilityBundles/Assistant-SBPlugin.axbundle
Line 60: Line 69:
 
| Siri Accessibility plugin.
 
| Siri Accessibility plugin.
 
| colspan="3" {{no}}
 
| colspan="3" {{no}}
| colspan="2" {{yes}}
+
| colspan="4" {{yes}}
 
|-
 
|-
 
| /System/Library/AccessibilityBundles/AXExtraExtras.axbundle
 
| /System/Library/AccessibilityBundles/AXExtraExtras.axbundle
Line 66: Line 75:
 
| Siri Accessibility plugin.
 
| Siri Accessibility plugin.
 
| colspan="2" {{yes}}
 
| colspan="2" {{yes}}
| colspan="3" {{no}}
+
| colspan="5" {{no}}
 
|-
 
|-
 
| /System/Library/AccessibilityBundles/*-Assistant.axbundle
 
| /System/Library/AccessibilityBundles/*-Assistant.axbundle
 
| Bundle
 
| Bundle
 
| Siri Accessibility plugins.
 
| Siri Accessibility plugins.
| colspan="5" {{yes}}
+
| colspan="6" {{yes}}
  +
| {{no}}
 
|-
 
|-
 
| /System/Library/Assistant
 
| /System/Library/Assistant
 
| System Folder
 
| System Folder
 
| Contains most Siri plugins or functionality resources.
 
| Contains most Siri plugins or functionality resources.
| colspan="5" {{yes}}
+
| colspan="7" {{yes}}
 
|-
 
|-
 
| /System/Library/CoreServices/SpringBoard.app/Assistant*
 
| /System/Library/CoreServices/SpringBoard.app/Assistant*
Line 82: Line 92:
 
| Siri images and ARTWORK file for iOS 5
 
| Siri images and ARTWORK file for iOS 5
 
| {{yes}}
 
| {{yes}}
| colspan="4" {{no}}
+
| colspan="6" {{no}}
 
|-
 
|-
 
| /System/Library/DataClassMigrators/Siri.migrator
 
| /System/Library/DataClassMigrators/Siri.migrator
Line 88: Line 98:
 
| Siri preferences after upgrading iOS/restoring an older backup.
 
| Siri preferences after upgrading iOS/restoring an older backup.
 
| {{no}}
 
| {{no}}
| colspan="4" {{yes}}
+
| colspan="6" {{yes}}
 
|-
 
|-
 
| /System/Library/Frameworks/CoreMotion.framework/Support/EarGesture_Prototypes_Siri_X.dat
 
| /System/Library/Frameworks/CoreMotion.framework/Support/EarGesture_Prototypes_Siri_X.dat
Line 94: Line 104:
 
| Some resources for Apple EarPod with Remote and Mic used with Siri activation.
 
| Some resources for Apple EarPod with Remote and Mic used with Siri activation.
 
| colspan="3" {{no}}
 
| colspan="3" {{no}}
| colspan="2" {{yes}}
+
| colspan="4" {{yes}}
 
|-
 
|-
 
| /System/Library/LaunchDaemons/com.apple.assistantd.plist
 
| /System/Library/LaunchDaemons/com.apple.assistantd.plist
 
| Daemon
 
| Daemon
 
| Handling communication between Siri (also Dictation) and Apple Server.
 
| Handling communication between Siri (also Dictation) and Apple Server.
| colspan="5" {{yes}}
+
| colspan="7" {{yes}}
 
|-
 
|-
 
| /System/Library/LaunchDaemons/com.apple.assistant_service.plist
 
| /System/Library/LaunchDaemons/com.apple.assistant_service.plist
 
| Daemon
 
| Daemon
 
| Handling Siri plugins or trivial stuffs.
 
| Handling Siri plugins or trivial stuffs.
| colspan="5" {{yes}}
+
| colspan="7" {{yes}}
 
|-
 
|-
 
| /System/Library/LaunchDaemons/com.apple.assistant.analyzer.plist
 
| /System/Library/LaunchDaemons/com.apple.assistant.analyzer.plist
Line 111: Line 121:
 
| {{partial|5.1+}}
 
| {{partial|5.1+}}
 
| colspan="2" {{yes}}
 
| colspan="2" {{yes}}
| colspan="2" {{no}}
+
| colspan="4" {{no}}
 
|-
 
|-
 
| /System/Library/PrivateFrameworks/AssistantServices.framework
 
| /System/Library/PrivateFrameworks/AssistantServices.framework
 
| Framework
 
| Framework
 
| Resources for Mic sound, Location settings icon and the daemons.
 
| Resources for Mic sound, Location settings icon and the daemons.
| colspan="5" {{yes}}
+
| colspan="7" {{yes}}
 
|-
 
|-
 
| /System/Library/PrivateFrameworks/AssistantUI.framework
 
| /System/Library/PrivateFrameworks/AssistantUI.framework
 
| Framework
 
| Framework
 
| Resources for Siri UI.
 
| Resources for Siri UI.
| colspan="5" {{yes}}
+
| colspan="7" {{yes}}
 
|-
 
|-
 
| /System/Library/PrivateFrameworks/Preferences.framework/*.lproj/AssistantShared.strings
 
| /System/Library/PrivateFrameworks/Preferences.framework/*.lproj/AssistantShared.strings
 
| Localization file
 
| Localization file
 
| Localization for "About Siri And Privacy" section.
 
| Localization for "About Siri And Privacy" section.
| colspan="5" {{yes}}
+
| colspan="7" {{yes}}
 
|-
 
|-
 
| /System/Library/PrivateFrameworks/PreferencesUI.framework/5.0~Passcode Lock Assistant.plist
 
| /System/Library/PrivateFrameworks/PreferencesUI.framework/5.0~Passcode Lock Assistant.plist
Line 132: Line 142:
 
| Siri Lockscreen settings injection file.
 
| Siri Lockscreen settings injection file.
 
| colspan="4" {{no}}
 
| colspan="4" {{no}}
| {{yes}}
+
| colspan="3" {{yes}}
 
|-
 
|-
 
| /System/Library/PrivateFrameworks/PreferencesUI.framework/5.0~Restrictions-Assistant.plist
 
| /System/Library/PrivateFrameworks/PreferencesUI.framework/5.0~Restrictions-Assistant.plist
Line 138: Line 148:
 
| Siri Restriction settings injection file.
 
| Siri Restriction settings injection file.
 
| colspan="4" {{no}}
 
| colspan="4" {{no}}
| {{yes}}
+
| colspan="2" {{yes}}
  +
| {{no}}
 
|-
 
|-
 
| /System/Library/PrivateFrameworks/PreferencesUI.framework/*.lproj/*Assistant.strings
 
| /System/Library/PrivateFrameworks/PreferencesUI.framework/*.lproj/*Assistant.strings
Line 144: Line 155:
 
| Localization for Siri preferences.
 
| Localization for Siri preferences.
 
| colspan="4" {{yes}}
 
| colspan="4" {{yes}}
  +
| {{no}}
  +
| {{yes}}
 
| {{no}}
 
| {{no}}
 
|-
 
|-
Line 149: Line 162:
 
| Framework
 
| Framework
 
| Resources for Siri objects.
 
| Resources for Siri objects.
| colspan="5" {{yes}}
+
| colspan="7" {{yes}}
  +
|-
  +
| /System/Library/PrivateFrameworks/SiriClientFlow.framework
  +
| Framework
  +
| Siri client flow framework.
  +
| colspan="5" {{no}}
  +
| colspan="2" {{yes}}
  +
|-
  +
| /System/Library/PrivateFrameworks/SiriCore.framework
  +
| Framework
  +
| Siri core framework.
  +
| colspan="5" {{no}}
  +
| colspan="2" {{yes}}
 
|-
 
|-
 
| /System/Library/PrivateFrameworks/SiriTasks.framework
 
| /System/Library/PrivateFrameworks/SiriTasks.framework
Line 156: Line 181:
 
| colspan="3" {{no}}
 
| colspan="3" {{no}}
 
| {{partial|8.2+}}
 
| {{partial|8.2+}}
  +
| colspan="3" {{yes}}
  +
|-
  +
| /System/Library/PrivateFrameworks/SiriTTS.framework
  +
| Framework
  +
| ?
  +
| colspan="6" {{no}}
 
| {{yes}}
 
| {{yes}}
 
|-
 
|-
Line 162: Line 193:
 
| Resources for Siri UI/Artwork for iOS 7+
 
| Resources for Siri UI/Artwork for iOS 7+
 
| colspan="2" {{no}}
 
| colspan="2" {{no}}
| colspan="3" {{yes}}
+
| colspan="5" {{yes}}
 
|-
 
|-
 
| /System/Library/PrivateFrameworks/SiriUICore.framework
 
| /System/Library/PrivateFrameworks/SiriUICore.framework
Line 169: Line 200:
 
| colspan="3" {{no}}
 
| colspan="3" {{no}}
 
| {{partial|8.2+}}
 
| {{partial|8.2+}}
| {{yes}}
+
| colspan="3" {{yes}}
 
|-
 
|-
 
| /System/Library/PrivateFrameworks/VoiceTrigger.framework
 
| /System/Library/PrivateFrameworks/VoiceTrigger.framework
Line 175: Line 206:
 
| Resources for "Hey Siri" feature
 
| Resources for "Hey Siri" feature
 
| colspan="3" {{no}}
 
| colspan="3" {{no}}
  +
| colspan="4" {{yes}}
  +
|-
  +
| /System/Library/PrivateFrameworks/VoiceTriggerUI.framework
  +
| Framework
  +
| UI-based Resources for "Hey Siri" feature
  +
| colspan="5" {{no}}
 
| colspan="2" {{yes}}
 
| colspan="2" {{yes}}
 
|-
 
|-
Line 180: Line 217:
 
| Preference Bundle
 
| Preference Bundle
 
| Siri settings.
 
| Siri settings.
| colspan="5" {{yes}}
+
| colspan="7" {{yes}}
 
|-
 
|-
 
| /System/Library/SpringBoardPlugins/Assistant.uibundle
 
| /System/Library/SpringBoardPlugins/Assistant.uibundle
Line 186: Line 223:
 
| Mainly handling Siri UI in iOS 6, unusual for iOS 7+
 
| Mainly handling Siri UI in iOS 6, unusual for iOS 7+
 
| {{no}}
 
| {{no}}
| colspan="4" {{yes}}
+
| colspan="6" {{yes}}
 
|-
 
|-
 
| /System/Library/UserEventPlugins/AssistantUEA.plugin
 
| /System/Library/UserEventPlugins/AssistantUEA.plugin
 
| System Plugin
 
| System Plugin
 
| Siri logging.
 
| Siri logging.
| colspan="5" {{yes}}
+
| colspan="6" {{yes}}
  +
| {{no}}
 
|}
 
|}
   
  +
== Porting ==
   
== Installation (iOS 5 - 7) ==
+
=== Additional Capabilities ===
   
In iOS 5 and 6, some additional keys in the capabilities section of [[Model definition file|/System/Library/CoreServices/SpringBoard.app/XXXAP.plist]] would be added to enable Siri:
+
In iOS 5 and 6, additional keys in the capabilities section of [[Model definition file|/System/Library/CoreServices/SpringBoard.app/XXXAP.plist]] would be added to enable Siri:
 
<key>assistant</key>
 
<key>assistant</key>
 
<true/>
 
<true/>
Line 203: Line 242:
 
<true/>
 
<true/>
   
Since the [[Model definition file]] is move along in iOS 7, in a DeviceTree instead. MobileSubstrate Hooking is required in order to inject these capabilities. (MGGetBoolAnswer(CFSTR("assistant")))
+
Since the [[Model definition file]] is move along in iOS 7, in a DeviceTree instead. MobileSubstrate Hooking is required in order to inject these capabilities. (MGGetBoolAnswer(CFSTR("assistant")) for example)
   
  +
=== Additional Filesystems ===
The installation of Siri (its filesystems) on other devices requires access to the iPhone 4S or supported devices filesystem, to copy over the files above to a jailbroken device running the same iOS version, with correct files permissions. The Siri capabilities are added as above, and the device is rebooted.
 
   
  +
The installation of Siri (its filesystems) on other devices requires access to the iPhone 4S or supported devices filesystem, to copy over the files above to a jailbroken device running the same iOS version, with correct files permissions.
For iOS 5, the stock assistant images from the iPhone 4S are only available in Retina size. On non-Retina devices ([[K48AP|iPad]], [[iPad 2]] and [[N88AP|iPhone 3GS]]), this means many interface features may look different. The theme [cydia://package/net.sourceforge.adamscode.siri1xgfx Siri Graphics for iPhone 3GS and iPad] in Cydia fixes this.
 
   
  +
For iOS 5, the stock assistant images from the iPhone 4S are only available in Retina size. On non-Retina devices ([[K48AP|iPad]], [[iPad 2]] and [[N88AP|iPhone 3GS]]), interface features may look different and the theme [cydia://package/net.sourceforge.adamscode.siri1xgfx Siri Graphics for iPhone 3GS and iPad] in Cydia needs to be installed.
Installing in [[iPad (3rd generation)]] running iOS 5 causes buggy interface, because the system usually forces the assistant window as full-screen (iPad and iPad 2 too), in that case you have to manually edit the images to fix that. Differently in iOS 6, assistant images are available both in Retina and non-Retina devices, so you could copy the non-Retina images or artwork file from the non-Retina jailbroken devices; it's for [[iPad mini]].
 
   
  +
Installing on iPad models running iOS 5 causes buggy interface, because the system usually forces the assistant window as full-screen. In this case, you have to manually edit the images to fix. Differently on iOS 6, assistant images are available both in Retina and non-Retina devices (for [[iPad mini]]), so you could copy the non-Retina images or artwork file from the non-Retina jailbroken devices.
One last thing you have to do is about [http://iphonedevwiki.net/index.php/Dyld_shared_cache dyld_shared_cache] injection, according to [https://twitter.com/stroughtonsmith stroughtonsmith] 's [https://twitter.com/stroughtonsmith/statuses/125168975377203200 tweet].
 
   
  +
=== Shared Cache Injection ===
Because some of Siri binaries are there, without them mean Siri won't work, this is the purpose of cache injection, to make Siri works.
 
   
  +
One last thing you have to do is [http://iphonedevwiki.net/index.php/Dyld_shared_cache dyld_shared_cache] injection, according to [https://twitter.com/stroughtonsmith stroughtonsmith] 's [https://twitter.com/stroughtonsmith/statuses/125168975377203200 tweet]. Because some of Siri binaries are there, without them mean Siri won't work.
*Copying /System/Library/Caches/com.apple.dyld/dyld_shared_cache_armv7 from Siri-capable devices.
 
  +
  +
*Copying <code>/System/Library/Caches/com.apple.dyld/dyld_shared_cache_armv7</code> from Siri-capable devices.
   
 
*Placing it in some directory in your target devices, take note for the location.
 
*Placing it in some directory in your target devices, take note for the location.
   
*Editing /System/Library/LaunchDaemons/com.apple.SpringBoard.plist using some good text editor, by adding these section:
+
*Editing <code>/System/Library/LaunchDaemons/com.apple.SpringBoard.plist</code> using some good text editor, by adding these section:
   
 
<key>EnvironmentVariables</key>
 
<key>EnvironmentVariables</key>
Line 230: Line 271:
 
<string>1</string>
 
<string>1</string>
 
</dict>
 
</dict>
For iOS 6 and 7, both com.apple.backboardd '''and'''com.apple.assistant_service deamon must be injected the code too.
+
For iOS 6 and 7, both com.apple.backboardd '''and''' com.apple.assistant_service deamons must be injected the code too.
   
*You have to find the proper Graphics driver binary for the ported devices because the cache also included that driver, specifically for that device. The cache we inject is commonly from [[S5L8940|Apple A5]] devices, so the system won't be able to find the compatible graphics driver and causes massive animation lag if the target devices aren't iPad 2 or iPad (3rd generation). (Use the same driver with Apple A5 devices) (They don't need finding the binary) [[S5L8930|Apple A4]] devices or lower need that, by copying binary named "IMGSGX535GLDriver" from Xcode-inside location:
+
*The cache we inject is commonly from [[S5L8940|Apple A5]] devices, so the system won't be able to find the compatible graphics driver binary for [[S5L8930|Apple A4]] devices and causes massive slowdown and animation lag if the target devices aren't iPad 2 or iPad (3rd generation) (A5 devices) as they use the same driver. You can find the A4 Graphics driver named "IMGSGX535GLDriver" from Xcode-inside location: <code>/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS[THE iOS VERSION NUMBER].sdk/System/Library/Extensions/IMGSGX535GLDriver.bundle/IMGSGX535GLDriver</code> and place into your target devices at <code>/System/Library/Extensions/IMGSGX535GLDriver.bundle</code> directory. This method seems to be impossible for iOS 7 however, as the SDK no longer included the graphic binary.
   
  +
*Save it and reboot the devices to take effect. Wrong cache location causes infinite SpringBoard crashing.
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS[THE iOS VERSION NUMBER].sdk/System/Library/Extensions/IMGSGX535GLDriver.bundle/IMGSGX535GLDriver
 
 
Into your target devices /System/Library/Extensions/IMGSGX535GLDriver.bundle directory. (Anyway, the graphics driver doesn't exist anymore in iOS 7 (and above) SDK)
 
 
*Save it and reboot the devices to take effect. Wrong cache location causes your devices not able to boot up. (Infinite SpringBoard crashing)
 
 
dyld_shared_cache injection usually slow down your devices, much in Apple A4 devices.
 
   
 
'''Purpose for iOS 5 devices'''
 
'''Purpose for iOS 5 devices'''
Line 251: Line 286:
 
*Add missing framework binary at /System/Library/PrivateFrameworks/AssistantUI.framework/AssistantUI (Applied to SiriViewService.app and SpringBoard)
 
*Add missing framework binary at /System/Library/PrivateFrameworks/AssistantUI.framework/AssistantUI (Applied to SiriViewService.app and SpringBoard)
   
== Changing Server ==
+
== Connecting to Server ==
  +
  +
Holding down the home button for a second should activate the Siri tray at the bottom of the screen (iPhone, iPod and iPad running iOS 5), or at the area close to home button on screen (iPad running iOS 6+), but saying anything will make it say it can't connect because the server rejects any query from these unsupported devices. This is due to the device requiring an identifier that the Siri servers generate every 24 hours for Siri-capable iDevices.
  +
  +
=== Changing Server ===
   
  +
[[SiriProxy]] can overcome the server connection issue if you have access to Siri capable iDevices. The server that Siri sends its data through can be changed in a number of ways.
Holding down the home button for a second should activate the Siri tray at the bottom of the screen (iPhone, iPod and iPad running iOS 5), or at the area close with home button on screen (iPad running iOS 6), but saying anything will make it say it can't connect because the server rejects any query from these unsupported devices. This is due to the device requiring an identifier that the Siri servers generate every 24 hours for Siri-capable iDevices. [[SiriProxy]] can overcome this if you have access to those capable iDevices.
 
   
The server that Siri sends its data through can be changed in a number of ways. The most reliable method is to use a DNS server, as [https://www.youtube.com/watch?v=a9gO4L0U59s demonstrated by plamoni].
+
The most reliable method is to use a DNS server, as [https://www.youtube.com/watch?v=a9gO4L0U59s demonstrated by plamoni].
   
An easier approach is to edit the <tt>com.apple.assistant.plist</tt> file in the device's <tt>/var/mobile/Library/Preferences</tt> folder. It can be changed either on a jailbroken device with iFile, or via an iPhone backup reading utility. The hostname string simply needs to be replaced with the URL of your SiriProxy (i.e. your computer's IP address).
+
An easier approach is to edit the <tt>com.apple.assistant.plist</tt> file in the device's <tt>/var/mobile/Library/Preferences</tt> folder. It can be changed either on a jailbroken device with iFile, or via an iPhone backup reading utility. The hostname string simply needs to be replaced with the URL of your SiriProxy (i.e. your computer's IP address). This method could also allow for your SiriProxy to work outside of your Wi-Fi network, if you set up forwarding for port 443 to your computer in your router, and use your [http://whatismyip.com external IP address]. However, some routers don't do port forwarding inside of their network, so you would need to change this setting yourself when you arrive or leave home. A static IP or dynamic DNS address (such as one from [http://dyn.com Dyn]) is recommended.
This method could also allow for your SiriProxy to work outside of your Wi-Fi network, if you set up forwarding for port 443 to your computer in your router, and use your [http://whatismyip.com external IP address]. However, some routers don't do port forwarding inside of their network, so you would need to change this setting yourself when you arrive or leave home. A static IP or dynamic DNS address (such as one from [http://dyn.com Dyn]) is recommended.
 
   
 
The <tt>/etc/hosts</tt> file on a jailbroken device can also be modified. This can also be used externally, like the above method, though domain redirects are disallowed in host files, so a static IP is required. For instance, if you have a server which has the IP 192.168.1.5, enter this on a new line:
 
The <tt>/etc/hosts</tt> file on a jailbroken device can also be modified. This can also be used externally, like the above method, though domain redirects are disallowed in host files, so a static IP is required. For instance, if you have a server which has the IP 192.168.1.5, enter this on a new line:
Line 266: Line 304:
 
Make sure there is at least one blank line at the very end of the file, or this will fail.
 
Make sure there is at least one blank line at the very end of the file, or this will fail.
   
== Bypassing Authentication ==
+
=== Bypassing Authentication ===
   
It's possible to trick the server that you are using Siri-capable device, without any use of Siri proxy. By faking device model that the system would include as a "header" to send to Apple server (method -[ADAceConnection _startConnection] does that), as shown in [https://github.com/PoomSmart/SiriAuthFix/blob/master/Tweak.xm SiriAuthFix].
+
Alternative to dealing with SiriProxy, it's also possible to trick the Apple server that you are using a Siri-capable device by simply faking device model that the system would include as a "header" to send to the Apple server (method <code>-[ADAceConnection _startConnection]</code> does that). It could be achieved this way: [https://github.com/PoomSmart/SiriAuthFix/blob/master/Tweak.xm SiriAuthFix].
   
 
== References ==
 
== References ==

Latest revision as of 02:38, 13 January 2018

Siri is a voice assistant feature found in the iPad (3rd generation), iPad mini, iPhone 4S, iPod touch (5th generation) and their successors. Siri has been present since iOS 5 on the iPhone 4S.

A legal port to older devices has been completed by @stroughtonsmith with the help of chpwn, and is available in Cydia as Spire. Spire is only compatible with iOS 5.0.1. There are other ports which are compatible with more iOS versions (iOS 5.1.1 through 7.x), but not all of them are reliable. Ports are not needed as of iOS 8 though as all compatible devices support Siri.

From iOS 6, Siri is supported by iPad (3rd generation) and newer, iPhone 4S and newer, iPod touch (5th generation) and newer, and with all generations of iPad mini.

Filesystem

Location Type Comments iOS Version
5.x 6.x 7.x 8.x 9.x 10.x 11.x
/Applications/Preferences.app/*.lproj/*Assistant.strings Localization file Localization for Siri preferences. Yes No
/Applications/Preferences.app/5.0~General Assistant.plist PList File Format Siri settings injection file. Yes No
/Applications/Preferences.app/5.0~Passcode Lock Assistant.plist PList File Format Siri Lockscreen settings injection file. Yes No
/Applications/Preferences.app/5.0~Restriction-Assistant.plist PList File Format Siri Restriction settings injection file. Yes No
/Applications/SiriViewService.app Application Siri interface. No Yes No
/Applications/Siri.app Application Siri interface. No Yes
/System/Library/AccessibilityBundles/AssistantUI.axbundle Bundle Siri Accessibility plugin. Yes No Yes
/System/Library/AccessibilityBundles/Assistant-SBPlugin.axbundle Bundle Siri Accessibility plugin. No Yes
/System/Library/AccessibilityBundles/AXExtraExtras.axbundle Bundle Siri Accessibility plugin. Yes No
/System/Library/AccessibilityBundles/*-Assistant.axbundle Bundle Siri Accessibility plugins. Yes No
/System/Library/Assistant System Folder Contains most Siri plugins or functionality resources. Yes
/System/Library/CoreServices/SpringBoard.app/Assistant* PNG or ARTWORK file Siri images and ARTWORK file for iOS 5 Yes No
/System/Library/DataClassMigrators/Siri.migrator Migrator bundle Siri preferences after upgrading iOS/restoring an older backup. No Yes
/System/Library/Frameworks/CoreMotion.framework/Support/EarGesture_Prototypes_Siri_X.dat System File Some resources for Apple EarPod with Remote and Mic used with Siri activation. No Yes
/System/Library/LaunchDaemons/com.apple.assistantd.plist Daemon Handling communication between Siri (also Dictation) and Apple Server. Yes
/System/Library/LaunchDaemons/com.apple.assistant_service.plist Daemon Handling Siri plugins or trivial stuffs. Yes
/System/Library/LaunchDaemons/com.apple.assistant.analyzer.plist Daemon Siri logging. 5.1+ Yes No
/System/Library/PrivateFrameworks/AssistantServices.framework Framework Resources for Mic sound, Location settings icon and the daemons. Yes
/System/Library/PrivateFrameworks/AssistantUI.framework Framework Resources for Siri UI. Yes
/System/Library/PrivateFrameworks/Preferences.framework/*.lproj/AssistantShared.strings Localization file Localization for "About Siri And Privacy" section. Yes
/System/Library/PrivateFrameworks/PreferencesUI.framework/5.0~Passcode Lock Assistant.plist PList File Format Siri Lockscreen settings injection file. No Yes
/System/Library/PrivateFrameworks/PreferencesUI.framework/5.0~Restrictions-Assistant.plist PList File Format Siri Restriction settings injection file. No Yes No
/System/Library/PrivateFrameworks/PreferencesUI.framework/*.lproj/*Assistant.strings Localization file Localization for Siri preferences. Yes No Yes No
/System/Library/PrivateFrameworks/SAObjects.framework Framework Resources for Siri objects. Yes
/System/Library/PrivateFrameworks/SiriClientFlow.framework Framework Siri client flow framework. No Yes
/System/Library/PrivateFrameworks/SiriCore.framework Framework Siri core framework. No Yes
/System/Library/PrivateFrameworks/SiriTasks.framework Framework Resources for Siri's operations. No 8.2+ Yes
/System/Library/PrivateFrameworks/SiriTTS.framework Framework ? No Yes
/System/Library/PrivateFrameworks/SiriUI.framework Framework Resources for Siri UI/Artwork for iOS 7+ No Yes
/System/Library/PrivateFrameworks/SiriUICore.framework Framework Core resources for Siri UI No 8.2+ Yes
/System/Library/PrivateFrameworks/VoiceTrigger.framework Framework Resources for "Hey Siri" feature No Yes
/System/Library/PrivateFrameworks/VoiceTriggerUI.framework Framework UI-based Resources for "Hey Siri" feature No Yes
/System/Library/PreferenceBundles/Assistant.bundle Preference Bundle Siri settings. Yes
/System/Library/SpringBoardPlugins/Assistant.uibundle SpringBoard Plugin Mainly handling Siri UI in iOS 6, unusual for iOS 7+ No Yes
/System/Library/UserEventPlugins/AssistantUEA.plugin System Plugin Siri logging. Yes No

Porting

Additional Capabilities

In iOS 5 and 6, additional keys in the capabilities section of /System/Library/CoreServices/SpringBoard.app/XXXAP.plist would be added to enable Siri:

<key>assistant</key>
<true/>
<key>siri-gesture</key> // Raise to speak, activate Siri when you raise your phone to ear (iOS 6)
<true/>

Since the Model definition file is move along in iOS 7, in a DeviceTree instead. MobileSubstrate Hooking is required in order to inject these capabilities. (MGGetBoolAnswer(CFSTR("assistant")) for example)

Additional Filesystems

The installation of Siri (its filesystems) on other devices requires access to the iPhone 4S or supported devices filesystem, to copy over the files above to a jailbroken device running the same iOS version, with correct files permissions.

For iOS 5, the stock assistant images from the iPhone 4S are only available in Retina size. On non-Retina devices (iPad, iPad 2 and iPhone 3GS), interface features may look different and the theme Siri Graphics for iPhone 3GS and iPad in Cydia needs to be installed.

Installing on iPad models running iOS 5 causes buggy interface, because the system usually forces the assistant window as full-screen. In this case, you have to manually edit the images to fix. Differently on iOS 6, assistant images are available both in Retina and non-Retina devices (for iPad mini), so you could copy the non-Retina images or artwork file from the non-Retina jailbroken devices.

Shared Cache Injection

One last thing you have to do is dyld_shared_cache injection, according to stroughtonsmith 's tweet. Because some of Siri binaries are there, without them mean Siri won't work.

  • Copying /System/Library/Caches/com.apple.dyld/dyld_shared_cache_armv7 from Siri-capable devices.
  • Placing it in some directory in your target devices, take note for the location.
  • Editing /System/Library/LaunchDaemons/com.apple.SpringBoard.plist using some good text editor, by adding these section:
<key>EnvironmentVariables</key>
<dict>
    <key>DYLD_SHARED_REGION</key>
    <string>private</string>
    <key>DYLD_SHARED_CACHE_DIR</key>
    <string>THE FULL LOCATION OF YOUR DYLD SHARED CACHE HERE (FOR EXAMPLE: /var/mobile/folder_with_dyld_shared_cache_inside)</string>
    <key>DYLD_SHARED_CACHE_DONT_VALIDATE</key>
    <string>1</string>
</dict>

For iOS 6 and 7, both com.apple.backboardd and com.apple.assistant_service deamons must be injected the code too.

  • The cache we inject is commonly from Apple A5 devices, so the system won't be able to find the compatible graphics driver binary for Apple A4 devices and causes massive slowdown and animation lag if the target devices aren't iPad 2 or iPad (3rd generation) (A5 devices) as they use the same driver. You can find the A4 Graphics driver named "IMGSGX535GLDriver" from Xcode-inside location: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS[THE iOS VERSION NUMBER].sdk/System/Library/Extensions/IMGSGX535GLDriver.bundle/IMGSGX535GLDriver and place into your target devices at /System/Library/Extensions/IMGSGX535GLDriver.bundle directory. This method seems to be impossible for iOS 7 however, as the SDK no longer included the graphic binary.
  • Save it and reboot the devices to take effect. Wrong cache location causes infinite SpringBoard crashing.

Purpose for iOS 5 devices

  • Add missing binary at /System/Library/Assistant/UIPlugins/SpringBoard.assistantUIBundle/SpringBoard

Purpose for iOS 6 devices

  • Add missing framework binary at /System/Library/PrivateFrameworks/AssistantUI.framework/AssistantUI

Purpose for iOS 7 devices

  • Add missing framework binary at /System/Library/PrivateFrameworks/AssistantUI.framework/AssistantUI (Applied to SiriViewService.app and SpringBoard)

Connecting to Server

Holding down the home button for a second should activate the Siri tray at the bottom of the screen (iPhone, iPod and iPad running iOS 5), or at the area close to home button on screen (iPad running iOS 6+), but saying anything will make it say it can't connect because the server rejects any query from these unsupported devices. This is due to the device requiring an identifier that the Siri servers generate every 24 hours for Siri-capable iDevices.

Changing Server

SiriProxy can overcome the server connection issue if you have access to Siri capable iDevices. The server that Siri sends its data through can be changed in a number of ways.

The most reliable method is to use a DNS server, as demonstrated by plamoni.

An easier approach is to edit the com.apple.assistant.plist file in the device's /var/mobile/Library/Preferences folder. It can be changed either on a jailbroken device with iFile, or via an iPhone backup reading utility. The hostname string simply needs to be replaced with the URL of your SiriProxy (i.e. your computer's IP address). This method could also allow for your SiriProxy to work outside of your Wi-Fi network, if you set up forwarding for port 443 to your computer in your router, and use your external IP address. However, some routers don't do port forwarding inside of their network, so you would need to change this setting yourself when you arrive or leave home. A static IP or dynamic DNS address (such as one from Dyn) is recommended.

The /etc/hosts file on a jailbroken device can also be modified. This can also be used externally, like the above method, though domain redirects are disallowed in host files, so a static IP is required. For instance, if you have a server which has the IP 192.168.1.5, enter this on a new line:

192.168.1.5 guzzoni.apple.com

Make sure there is at least one blank line at the very end of the file, or this will fail.

Bypassing Authentication

Alternative to dealing with SiriProxy, it's also possible to trick the Apple server that you are using a Siri-capable device by simply faking device model that the system would include as a "header" to send to the Apple server (method -[ADAceConnection _startConnection] does that). It could be achieved this way: SiriAuthFix.

References

See Also