The iPhone Wiki is no longer updated. Visit this article on The Apple Wiki for current information. |
Difference between revisions of "Siri"
m (Updating page links.) |
(Well.) |
||
Line 1: | Line 1: | ||
− | '''Siri''' is a voice assistant feature found in the [[iPad 3]], [[iPad mini]], [[N94AP|iPhone 4S]], [[iPod touch 5G]] and their successors. '''Siri''' has been present since iOS 5 (with the iPhone 4S) A 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]. (Compatible only 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, the ports are not needed |
+ | '''Siri''' is a voice assistant feature found in the [[iPad 3]], [[iPad mini]], [[N94AP|iPhone 4S]], [[iPod touch 5G]] and their successors. '''Siri''' has been present since iOS 5 (with 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]. (Compatible only 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, the ports are not needed as of iOS 8; all compatible devices support Siri. |
From iOS 6, Siri is supported by [[iPad 3]] and newer, [[N94AP|iPhone 4S]] and newer, [[iPod touch 5G]] and newer, and with all generations of [[List of iPad minis|iPad mini]]. |
From iOS 6, Siri is supported by [[iPad 3]] and newer, [[N94AP|iPhone 4S]] and newer, [[iPod touch 5G]] and newer, and with all generations of [[List of iPad minis|iPad mini]]. |
||
Line 168: | Line 168: | ||
| {{partial|8.2+}} |
| {{partial|8.2+}} |
||
| {{yes}} |
| {{yes}} |
||
+ | |- |
||
+ | | /System/Library/PrivateFrameworks/VoiceTrigger.framework |
||
+ | | Framework |
||
+ | | Resources for "Hey Siri" feature |
||
+ | | colspan="3" {{no}} |
||
+ | | colspan="2" {{yes}} |
||
|- |
|- |
||
| /System/Library/PreferenceBundles/Assistant.bundle |
| /System/Library/PreferenceBundles/Assistant.bundle |
||
Line 186: | Line 192: | ||
|} |
|} |
||
− | Although other devices are capable of running Siri, they do not (or partially) include the above files that are required for it to work. |
||
− | == Installation == |
+ | == Installation (iOS 5 - 7) == |
− | + | 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: |
|
<key>assistant</key> |
<key>assistant</key> |
||
<true/> |
<true/> |
||
+ | <key>siri-gesture</key> // Raise to speak, activate Siri when you raise your phone to ear (iOS 6) |
||
− | |||
− | An another key, "Raise to Speak" capability for iPhone only, that allow you to activate Siri when you raise your phone to your ear. (You don't need to add this key for iOS 5) |
||
− | <key>siri-gesture</key> |
||
<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"))) |
|
− | |||
− | 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. Then assistant is enabled in the capabilities plist (iOS 5 or 6) 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. The Siri capabilities are added as above, and the device is rebooted. |
||
− | Holding down the home button for a second should activate the Siri tray at the bottom of the screen (iPhone/iPod/iPad with iOS 5), or at the area close with home button on screen (iPad with iOS 6), but saying anything will make it say it can't connect. 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. |
||
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]]), 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. |
||
− | Installing in [[iPad 3]] |
+ | Installing in [[iPad 3]] 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]]. |
+ | 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]. |
||
− | Differently in iOS 6, assistant images are available both in Retina and non-Retina devices, due to the screen scale themselves, so you could copy the non-Retina images or artwork file from the jailbroken devices with non-Retina screen, it's [[iPad mini]], only one. |
||
− | |||
− | 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], here's the steps to do that. |
||
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. |
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. |
||
Line 229: | Line 228: | ||
<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. |
|
*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 3. (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: |
*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 3. (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: |
||
Line 235: | Line 234: | ||
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS[THE iOS VERSION NUMBER].sdk/System/Library/Extensions/IMGSGX535GLDriver.bundle/IMGSGX535GLDriver |
/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 |
+ | 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) |
*Save it and reboot the devices to take effect. Wrong cache location causes your devices not able to boot up. (Infinite SpringBoard crashing) |
||
Line 251: | Line 250: | ||
== Changing Server == |
== Changing 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 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 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]. |
||
Line 262: | Line 264: | ||
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 == |
||
− | One could use "Siri Authentication Bypass". This package will fool the Apple Server that you are using a Siri-capable devices. |
||
+ | |||
+ | 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]. |
||
== References == |
== References == |
Revision as of 10:32, 14 June 2016
Siri is a voice assistant feature found in the iPad 3, iPad mini, iPhone 4S, iPod touch 5G and their successors. Siri has been present since iOS 5 (with 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. (Compatible only 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, the ports are not needed as of iOS 8; all compatible devices support Siri.
From iOS 6, Siri is supported by iPad 3 and newer, iPhone 4S and newer, iPod touch 5G and newer, and with all generations of iPad mini.
Contents
Filesystems
Location | Type | Comments | iOS Version | ||||
---|---|---|---|---|---|---|---|
5.x | 6.x | 7.x | 8.x | 9.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 | |||
/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 | ||||
/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 | |||
/System/Library/PrivateFrameworks/PreferencesUI.framework/*.lproj/*Assistant.strings | Localization file | Localization for Siri preferences. | Yes | No | |||
/System/Library/PrivateFrameworks/SAObjects.framework | Framework | Resources for Siri objects. | Yes | ||||
/System/Library/PrivateFrameworks/SiriTasks.framework | Framework | Resources for Siri's operations. | No | 8.2+ | 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/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 |
Installation (iOS 5 - 7)
In iOS 5 and 6, some 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")))
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.
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), this means many interface features may look different. The theme Siri Graphics for iPhone 3GS and iPad in Cydia fixes this.
Installing in iPad 3 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.
One last thing you have to do is about dyld_shared_cache injection, according to stroughtonsmith 's tweet.
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.
- 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 andcom.apple.assistant_service deamon 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 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 3. (Use the same driver with Apple A5 devices) (They don't need finding the binary) Apple A4 devices or lower need that, by copying binary 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
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
- 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)
Changing 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 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 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
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 SiriAuthFix.